Repository navigation
feat!: give Arduino Agent its own app identity - #41
Merged
Merged
Conversation
7 of 8 tasks
Arduino Agent shared every identity value with the official Arduino IDE: productName, appId and Electron userData (`arduino-ide`). Its single-instance lock is keyed on userData, so with both installed, starting one handed the launch to whichever was already running. That included the bridge's auto-launch, which then waited for an MCP server that never came. - productName "Arduino Agent": `Arduino Agent.exe` / `Arduino Agent.app` / `arduino-agent`. - appId io.github.mixelpixx.arduino-agent. It was required before shipping any installer: NSIS/MSI derive their upgrade GUIDs from appId, so an installer built with Arduino's would have removed the official IDE. - Package name arduino-agent (release.yml, scripts/package.js), giving its own userData folder and single-instance lock. On first launch, arduino-ide-electron-main.js copies Local Storage, IndexedDB and config.json from the old folder once, before the lock is taken. ~/.arduinoIDE, Arduino15 and the sketchbook stay shared on purpose. - Own log folder (%APPDATA%\Arduino Agent), MCP server name "arduino-agent", uriScheme arduino-agent, new installer sidebar artwork. - Release assets are named arduino-agent-<platform>.zip, with the old arduino-ide-mcp-<platform>.zip uploaded alongside so existing links work. - Bridge 0.3.1: an ARDUINO_AGENT_PATH naming the pre-0.7.0 `Arduino IDE` executable falls back to the renamed one, so existing MCP configs keep working. - Docs: download names, executable names, coexistence and upgrade notes. Also fixes BUILDING-WINDOWS.md running rebuild:electron after the production build (it must run before) and its packaging command missing the release metadata. BREAKING CHANGE: the executable, app ID and Electron user-data folder are renamed. The window layout is migrated, and old ARDUINO_AGENT_PATH values keep working through the bridge fallback, but should be updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is the 0.7.0 identity change planned in #39. Arduino Agent stops sharing its app identity with the official Arduino IDE, so the two apps can be installed side by side.
The problem: the fork used Arduino's
productName,appIdand Electron userData folder (%APPDATA%\arduino-ide). Electron's single-instance lock is keyed on the userData folder, so with both apps installed, starting one handed the launch to whichever was already running. That included the bridge's auto-launch, which would then wait two minutes for an MCP server that never appeared.What changes
Arduino IDE.exe/Arduino IDE.appArduino Agent.exe/Arduino Agent.app/arduino-agentcc.arduino.IDE2(Arduino's)io.github.mixelpixx.arduino-agent%APPDATA%\arduino-ide(shared)%APPDATA%\arduino-agent%APPDATA%\Arduino IDE(shared)%APPDATA%\Arduino AgentserverInfo.namearduino-ide-mcparduino-agentarduino-ide-mcp-<platform>.ziparduino-agent-<platform>.zip, plus the old name as an aliasThe new
appIdwas also required before shipping any NSIS/MSI installer. Those installers derive their upgrade GUID fromappId, so an installer built with Arduino's ID would have uninstalled the official IDE.Deliberately still shared:
~/.arduinoIDE(preferences,arduino-cli.yamland the MCP token), Arduino15 (installed cores and libraries) and the sketchbook.Upgrade path, nothing lost
arduino-ide-electron-main.jscopies Local Storage, IndexedDB (the window layout and per-sketch board selections) andconfig.json(the sketches to reopen) from the old folder. This happens once, before the single-instance lock is taken. LevelDBLOCKfiles are skipped, an existing folder is never overwritten, and a marker file prevents repeats.ARDUINO_AGENT_PATHnames the oldArduino IDEexecutable and that file is gone, the bridge uses the renamedArduino Agentone and logs a hint. Existing MCP configs keep working./releases/latest/download/arduino-ide-mcp-*.ziplinks keep working. The README now points at the new names.Also fixed:
docs/BUILDING-WINDOWS.mdranrebuild:electronafter the production build.CLAUDE.mdis explicit that it must come first, otherwise the build bundles a Node-ABIpty.nodeand the app crashes on launch. The doc's packaging command also lacked the release metadata, which gave the app the wrong userData folder and skipped the bundled plugins.Vendored edits (in
arduino-ide-extension, marked// Arduino Agent): the log folder name, and the dev-mode fallbackapplicationNameanduriScheme. Everything else is packaging, our extension, or docs.Test plan
On a local Windows build packaged with the new
release.ymlcommand, while my installed 0.6.2 kept running. 0.6.2 still uses the sharedarduino-idefolder and lock, exactly like the official IDE does, so it stands in for the collision:Arduino Agent.exeopened its own window in 4 s. The 0.6.2 window kept the same PID and was not handed the launch.app.getName()returns "Arduino Agent", userData is%APPDATA%\arduino-agent, and the title issketch | Arduino Agent 0.6.2.config.jsonwere copied. The user's open sketch was restored from the migratedconfig.json. No LevelDB LOCK files were copied (the only two present belong to the new app).%APPDATA%\Arduino Agent\…_log.logwas created, with the bannerArduino Agent 0.6.2.yarn test:bridgepasses 13/13, including a new test that a pre-0.7.0Arduino IDEpath launches the renamed executable.release.ymlparses, and the upload step lists both asset names.serverInfo.name) and the macOS/Linux packaging get confirmed on the release draft.🤖 Generated with Claude Code