diff --git a/.changeset/fix-codex-dashboard-origin.md b/.changeset/fix-codex-dashboard-origin.md new file mode 100644 index 00000000..b2647a37 --- /dev/null +++ b/.changeset/fix-codex-dashboard-origin.md @@ -0,0 +1,6 @@ +--- +"cargo-hauler": patch +--- + +Initialize the dashboard in Codex Desktop when MCP Apps use a +`codex-sandbox://` origin (#206). diff --git a/package.json b/package.json index 5ea80bf7..e1cd44af 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "release:version": "changeset version" }, "devDependencies": { - "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe", + "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8", "@changesets/cli": "3.0.2", "@effect/atom-react": "4.0.0-rc.112", "@effect/platform-node": "4.0.0-rc.112", @@ -69,7 +69,7 @@ "@types/react": "^19.2.18", "@types/react-dom": "^19.2.5", "@typescript/native-preview": "^7.0.0-dev.20260707.2", - "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe", + "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8", "bashjsast": "github:woolkingx/bashjsast#131f4b677d1906774fc49cfceab0ccb7b370b2e6", "effect": "4.0.0-rc.112", "effect-rstest": "https://pkg.pr.new/ScriptedAlchemy/effect-rstest@e5f8d5f", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f06859e..009cc4d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,8 +110,8 @@ importers: .: devDependencies: '@agent-bundle/runtime': - specifier: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe - version: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + specifier: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8 + version: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@changesets/cli': specifier: 3.0.2 version: 3.0.2 @@ -146,8 +146,8 @@ importers: specifier: ^7.0.0-dev.20260707.2 version: 7.0.0-dev.20260707.2 agent-bundle: - specifier: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe - version: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe(@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@rspack/core@2.2.2(@swc/helpers@0.5.23))(@rstest/core@0.11.12)(hono@4.13.7)(react@19.2.8)(typescript@7.0.2) + specifier: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8 + version: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@rspack/core@2.2.2(@swc/helpers@0.5.23))(@rstest/core@0.11.12)(hono@4.13.7)(react@19.2.8)(typescript@7.0.2) bashjsast: specifier: github:woolkingx/bashjsast#131f4b677d1906774fc49cfceab0ccb7b370b2e6 version: https://codeload.github.com/woolkingx/bashjsast/tar.gz/131f4b677d1906774fc49cfceab0ccb7b370b2e6 @@ -181,9 +181,9 @@ importers: packages: - '@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe': - resolution: {integrity: sha512-I4zyRcaTFfDW7SeCKe2nGe0qqk3MC9lM7Q65It+8YPWWQBcff5ZdHDzJpSyry/641DkC/YAtYsh1F0bemyKNbg==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe} - version: 0.0.0-preview-5064133 + '@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8': + resolution: {integrity: sha512-/EPzmvZ2zzeu7XXhycJEiEKA2pzuaQEWzFO4Sxr05Fx0smu/iDfRLGE9Na7G1sgi+iLKD0uqbk8URLCiAMNnjw==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8} + version: 0.0.0-preview-b807ca0 engines: {node: '>=22.19.0'} peerDependencies: '@rspack/core': ^2.2.0-0 @@ -960,13 +960,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-bundle@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe: - resolution: {integrity: sha512-ORBKHlLZhkFkea1GaivmfG7wQG2fuLVqNLLaeb45384se8ukpheSTOAyD/Q5hBqLwvqIF5Qedi3TXuDG9iZacQ==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe} - version: 0.0.0-preview-5064133 + agent-bundle@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8: + resolution: {integrity: sha512-6y2tutGcyab0dng+o3UDFjvh4cID7h06Cnaqwap7QuhGsS+CbIO91mmcNoikO65fsC6JlGo9b08wDxvalrxRTg==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8} + version: 0.0.0-preview-b807ca0 engines: {node: '>=22.19.0'} hasBin: true peerDependencies: - '@agent-bundle/runtime': 0.0.0-preview-5064133 + '@agent-bundle/runtime': 0.0.0-preview-b807ca0 '@rstest/core': ^0.11.10 react: 19.2.8 peerDependenciesMeta: @@ -1395,9 +1395,9 @@ packages: typescript: optional: true - rsc-markdown-stream@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@506413326359bff154ce4476eb0f47b0dabf4efe: - resolution: {integrity: sha512-TAJArmDUTILCVTkm4ulGfGUUYVA21pSy83rNYAK8AkO6yD9qsXvTBW73F0YVS/yNNgjODRuVTxlIURtefGapGQ==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@506413326359bff154ce4476eb0f47b0dabf4efe} - version: 0.0.0-preview-5064133 + rsc-markdown-stream@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8: + resolution: {integrity: sha512-GuMpzr7YFNYkDUIyTaFx5PKDuIurCbp80GoBXcCCchaaYgoYBy2u5bHpayA090cqjEDQTAEypJmRvDGgq8KhPQ==, tarball: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8} + version: 0.0.0-preview-b807ca0 engines: {node: '>=22.19.0'} peerDependencies: react: ^19.0.0 @@ -1525,7 +1525,7 @@ packages: snapshots: - '@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + '@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: '@modelcontextprotocol/server': 2.0.0 effect: 4.0.0-rc.112 @@ -1533,7 +1533,7 @@ snapshots: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) react-server-dom-rspack: 0.1.0(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - rsc-markdown-stream: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@506413326359bff154ce4476eb0f47b0dabf4efe(react@19.2.8) + rsc-markdown-stream: https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(react@19.2.8) zod: 4.5.4 optionalDependencies: '@rspack/core': 2.2.2(@swc/helpers@0.5.23) @@ -2182,7 +2182,7 @@ snapshots: acorn@8.18.0: {} - agent-bundle@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@506413326359bff154ce4476eb0f47b0dabf4efe(@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@rspack/core@2.2.2(@swc/helpers@0.5.23))(@rstest/core@0.11.12)(hono@4.13.7)(react@19.2.8)(typescript@7.0.2): + agent-bundle@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@agent-bundle/runtime@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@rspack/core@2.2.2(@swc/helpers@0.5.23))(@rstest/core@0.11.12)(hono@4.13.7)(react@19.2.8)(typescript@7.0.2): dependencies: '@effect/platform-node-shared': 4.0.0-rc.112(effect@4.0.0-rc.112) '@modelcontextprotocol/client': 2.0.0 @@ -2207,7 +2207,7 @@ snapshots: ws: 8.21.3 yaml: 2.9.0 optionalDependencies: - '@agent-bundle/runtime': https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@506413326359bff154ce4476eb0f47b0dabf4efe(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@agent-bundle/runtime': https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(@rspack/core@2.2.2(@swc/helpers@0.5.23))(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@rstest/core': 0.11.12 react: 19.2.8 transitivePeerDependencies: @@ -2573,7 +2573,7 @@ snapshots: optionalDependencies: typescript: 7.0.2 - rsc-markdown-stream@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@506413326359bff154ce4476eb0f47b0dabf4efe(react@19.2.8): + rsc-markdown-stream@https://pkg.pr.new/ScriptedAlchemy/agent-bundle/rsc-markdown-stream@b807ca0eea5c0d5744350e1fa8829e3d59c3c0b8(react@19.2.8): dependencies: react: 19.2.8 diff --git a/tests/route-unit/packed-install.test.ts b/tests/route-unit/packed-install.test.ts index 3d3c8ad2..27d66ed8 100644 --- a/tests/route-unit/packed-install.test.ts +++ b/tests/route-unit/packed-install.test.ts @@ -241,8 +241,8 @@ describe('packed install', () => { expect(help.stdout).not.toContain('--from'); const unselected = runInstaller(['install', 'amp']); - expect(unselected.status).toBe(2); - expect(unselected.stderr).toContain('Install host must be claude, codex, or cursor.'); + expect(unselected.status).toBe(1); + expect(unselected.stderr).toContain('"code":"AB7001"'); const from = runInstaller(['install', 'cursor', '--from', projectRoot]); expect(from.status).toBe(2); expect(from.stderr).toContain("unknown option '--from'"); @@ -352,6 +352,9 @@ describe('packed install', () => { expect(failed).toEqual([]); const tools = await session.client.listTools(); expect(tools.tools.map((tool) => tool.name)).toContain('hauler_status'); + const status = await session.client.callTool({ arguments: {}, name: 'hauler_status' }); + expect(status.isError ?? false).toBe(false); + expect(status.structuredContent).toMatchObject({ daemon: 'stopped', operation: 'status' }); const requested = await session.client.callTool({ arguments: { argv: ['cargo', 'check'] }, name: 'hauler_request',