@neuralnomads/codenomad-dev 0.20.0-dev-20260911-ea37f97b → 0.20.0-dev-20260917-aa51cbb9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/api-types.js.map +1 -1
- package/dist/opencode/automation-plugin.test.js +32 -38
- package/dist/opencode/automation-plugin.test.js.map +1 -1
- package/dist/opencode/compatibility/contract-fixture.js +15 -0
- package/dist/opencode/compatibility/contract-fixture.js.map +1 -0
- package/dist/opencode/compatibility/events.js +9 -0
- package/dist/opencode/compatibility/events.js.map +1 -0
- package/dist/opencode/compatibility/location.js +89 -0
- package/dist/opencode/compatibility/location.js.map +1 -0
- package/dist/opencode/compatibility/location.test.js +92 -0
- package/dist/opencode/compatibility/location.test.js.map +1 -0
- package/dist/opencode/compatibility/negotiate.js +73 -0
- package/dist/opencode/compatibility/negotiate.js.map +1 -0
- package/dist/opencode/compatibility/negotiate.test.js +61 -0
- package/dist/opencode/compatibility/negotiate.test.js.map +1 -0
- package/dist/opencode/compatibility/proxy-locations.js +137 -0
- package/dist/opencode/compatibility/proxy-locations.js.map +1 -0
- package/dist/opencode/compatibility/proxy-locations.test.js +42 -0
- package/dist/opencode/compatibility/proxy-locations.test.js.map +1 -0
- package/dist/opencode/compatibility/proxy.js +60 -0
- package/dist/opencode/compatibility/proxy.js.map +1 -0
- package/dist/opencode/compatibility/proxy.test.js +47 -0
- package/dist/opencode/compatibility/proxy.test.js.map +1 -0
- package/dist/opencode/compatibility/requests.js +54 -0
- package/dist/opencode/compatibility/requests.js.map +1 -0
- package/dist/opencode/compatibility/runtime.js +26 -0
- package/dist/opencode/compatibility/runtime.js.map +1 -0
- package/dist/opencode/compatibility/transport.js +112 -0
- package/dist/opencode/compatibility/transport.js.map +1 -0
- package/dist/opencode/compatibility/transport.test.js +83 -0
- package/dist/opencode/compatibility/transport.test.js.map +1 -0
- package/dist/opencode/session-pruning/location.js +16 -0
- package/dist/opencode/session-pruning/location.js.map +1 -0
- package/dist/opencode/session-pruning/package.test.js +37 -0
- package/dist/opencode/session-pruning/package.test.js.map +1 -0
- package/dist/opencode/session-pruning/plugin.js +5 -2
- package/dist/opencode/session-pruning/plugin.js.map +1 -1
- package/dist/opencode/session-pruning/preview-store.js +3 -2
- package/dist/opencode/session-pruning/preview-store.js.map +1 -1
- package/dist/opencode/session-pruning/pruning.test.js +7 -5
- package/dist/opencode/session-pruning/pruning.test.js.map +1 -1
- package/dist/opencode/session-pruning/service.js +5 -4
- package/dist/opencode/session-pruning/service.js.map +1 -1
- package/dist/opencode/session-pruning/service.test.js +65 -53
- package/dist/opencode/session-pruning/service.test.js.map +1 -1
- package/dist/permissions/opencode-replier.js +2 -2
- package/dist/permissions/opencode-replier.js.map +1 -1
- package/dist/permissions/opencode-replier.test.js +1 -1
- package/dist/permissions/opencode-replier.test.js.map +1 -1
- package/dist/permissions/opencode-yolo-metadata.js.map +1 -1
- package/dist/permissions/opencode-yolo-metadata.test.js.map +1 -1
- package/dist/plugins/session-pruning/plugin.mjs +422 -271
- package/dist/server/__tests__/instance-proxy-legacy.test.js +111 -0
- package/dist/server/__tests__/instance-proxy-legacy.test.js.map +1 -0
- package/dist/server/__tests__/instance-proxy.test.js +95 -34
- package/dist/server/__tests__/instance-proxy.test.js.map +1 -1
- package/dist/server/http-server.js +147 -237
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/routes/session-pruning.js +4 -2
- package/dist/server/routes/session-pruning.js.map +1 -1
- package/dist/server/routes/session-pruning.test.js +16 -2
- package/dist/server/routes/session-pruning.test.js.map +1 -1
- package/dist/server/routes/worktrees.js +1 -0
- package/dist/server/routes/worktrees.js.map +1 -1
- package/dist/server/routes/worktrees.test.js +54 -1
- package/dist/server/routes/worktrees.test.js.map +1 -1
- package/dist/workspaces/host-opencode-service.test.js +56 -7
- package/dist/workspaces/host-opencode-service.test.js.map +1 -1
- package/dist/workspaces/instance-client.js.map +1 -1
- package/dist/workspaces/instance-events.js +71 -57
- package/dist/workspaces/instance-events.js.map +1 -1
- package/dist/workspaces/instance-events.test.js +122 -9
- package/dist/workspaces/instance-events.test.js.map +1 -1
- package/dist/workspaces/manager.js +24 -39
- package/dist/workspaces/manager.js.map +1 -1
- package/dist/workspaces/manager.test.js +43 -7
- package/dist/workspaces/manager.test.js.map +1 -1
- package/dist/workspaces/opencode-cli-service.js +56 -29
- package/dist/workspaces/opencode-cli-service.js.map +1 -1
- package/dist/workspaces/opencode-connection-generation.test.js +57 -0
- package/dist/workspaces/opencode-connection-generation.test.js.map +1 -0
- package/dist/workspaces/opencode-service.js +70 -16
- package/dist/workspaces/opencode-service.js.map +1 -1
- package/dist/workspaces/opencode-service.test.js +3 -4
- package/dist/workspaces/opencode-service.test.js.map +1 -1
- package/dist/workspaces/worktree-session-evacuation.js +31 -11
- package/dist/workspaces/worktree-session-evacuation.js.map +1 -1
- package/dist/workspaces/worktree-session-evacuation.test.js +211 -0
- package/dist/workspaces/worktree-session-evacuation.test.js.map +1 -1
- package/dist/workspaces/wsl-opencode-service.test.js +64 -24
- package/dist/workspaces/wsl-opencode-service.test.js.map +1 -1
- package/package.json +3 -3
- package/public/assets/App-BROhwPo9.js +54 -0
- package/public/assets/App-BROhwPo9.js.map +1 -0
- package/public/assets/{FilesTab-CRpGDs1B.js → FilesTab-DY3Vr-3r.js} +3 -3
- package/public/assets/{FilesTab-CRpGDs1B.js.map → FilesTab-DY3Vr-3r.js.map} +1 -1
- package/public/assets/{GitChangesTab-DxFebTiq.js → GitChangesTab-BD6CJngE.js} +3 -3
- package/public/assets/{GitChangesTab-DxFebTiq.js.map → GitChangesTab-BD6CJngE.js.map} +1 -1
- package/public/assets/{SplitFilePanel-DgTMrrO-.js → SplitFilePanel-BdY6d_6m.js} +2 -2
- package/public/assets/{SplitFilePanel-DgTMrrO-.js.map → SplitFilePanel-BdY6d_6m.js.map} +1 -1
- package/public/assets/StatusTab-C-_2yaPa.js +2 -0
- package/public/assets/StatusTab-C-_2yaPa.js.map +1 -0
- package/public/assets/{align-justify-v_yPXSys.js → align-justify-DI8VTZ4G.js} +2 -2
- package/public/assets/{align-justify-v_yPXSys.js.map → align-justify-DI8VTZ4G.js.map} +1 -1
- package/public/assets/{bundle-full-HzL_Jtqk.js → bundle-full-D_M65Eb_.js} +2 -2
- package/public/assets/{bundle-full-HzL_Jtqk.js.map → bundle-full-D_M65Eb_.js.map} +1 -1
- package/public/assets/{client-state-CF-PJ0GG.js → client-state-CWCzCOz6.js} +2 -2
- package/public/assets/{client-state-CF-PJ0GG.js.map → client-state-CWCzCOz6.js.map} +1 -1
- package/public/assets/{diff-viewer-BFDQBDVy.js → diff-viewer-CGPsYEr3.js} +2 -2
- package/public/assets/{diff-viewer-BFDQBDVy.js.map → diff-viewer-CGPsYEr3.js.map} +1 -1
- package/public/assets/index-B8-lAqjr.js +2 -0
- package/public/assets/index-B8-lAqjr.js.map +1 -0
- package/public/assets/index-BeUewQym.js +2 -0
- package/public/assets/index-BeUewQym.js.map +1 -0
- package/public/assets/index-BxRFHpJd.js +2 -0
- package/public/assets/{index-D2UHSOG5.js.map → index-BxRFHpJd.js.map} +1 -1
- package/public/assets/index-Bzv1kU-S.js +2 -0
- package/public/assets/{index-CTKYD_VJ.js.map → index-Bzv1kU-S.js.map} +1 -1
- package/public/assets/index-C9tI4CRG.js +2 -0
- package/public/assets/index-C9tI4CRG.js.map +1 -0
- package/public/assets/index-CGYHFZ6F.js +2 -0
- package/public/assets/index-CGYHFZ6F.js.map +1 -0
- package/public/assets/{index-CHYmKl10.js → index-CMEAjBFp.js} +2 -2
- package/public/assets/index-CMEAjBFp.js.map +1 -0
- package/public/assets/index-Cazypvyc.js +2 -0
- package/public/assets/index-Cazypvyc.js.map +1 -0
- package/public/assets/index-CwqzofWP.js +2 -0
- package/public/assets/index-CwqzofWP.js.map +1 -0
- package/public/assets/index-Da9yOa6q.js +2 -0
- package/public/assets/index-Da9yOa6q.js.map +1 -0
- package/public/assets/{index-RK9gf0uk.js → index-Ddjkirek.js} +2 -2
- package/public/assets/{index-RK9gf0uk.js.map → index-Ddjkirek.js.map} +1 -1
- package/public/assets/index-HHgvEOAH.js +3 -0
- package/public/assets/index-HHgvEOAH.js.map +1 -0
- package/public/assets/index-MeFffHqb.css +1 -0
- package/public/assets/loading-CdhHiSED.css +1 -0
- package/public/assets/{loading-BSB82snY.js → loading-Gqh6NPUr.js} +2 -2
- package/public/assets/{loading-BSB82snY.js.map → loading-Gqh6NPUr.js.map} +1 -1
- package/public/assets/main-Cbx7KdTr.js +38 -0
- package/public/assets/main-Cbx7KdTr.js.map +1 -0
- package/public/assets/{markdown-DtidoL2Z.js → markdown-BWnjyvnX.js} +4 -4
- package/public/assets/{markdown-DtidoL2Z.js.map → markdown-BWnjyvnX.js.map} +1 -1
- package/public/assets/monaco-viewer-BEJIiZWL.js +27 -0
- package/public/assets/monaco-viewer-BEJIiZWL.js.map +1 -0
- package/public/assets/{startup-state-settings-card-BY741Rt0.js → startup-state-settings-card-C4E2Itop.js} +2 -2
- package/public/assets/{startup-state-settings-card-BY741Rt0.js.map → startup-state-settings-card-C4E2Itop.js.map} +1 -1
- package/public/assets/{terminal-square-BdC_jwm3.js → terminal-square-C3wutdV0.js} +2 -2
- package/public/assets/{terminal-square-BdC_jwm3.js.map → terminal-square-C3wutdV0.js.map} +1 -1
- package/public/assets/tool-call-DNsAQ_m4.js +60 -0
- package/public/assets/tool-call-DNsAQ_m4.js.map +1 -0
- package/public/assets/{unified-picker-C0eo1chJ.js → unified-picker-tB7y17Qz.js} +2 -2
- package/public/assets/unified-picker-tB7y17Qz.js.map +1 -0
- package/public/assets/{wrap-text-BuMtdvMx.js → wrap-text-CkBxzt04.js} +2 -2
- package/public/assets/{wrap-text-BuMtdvMx.js.map → wrap-text-CkBxzt04.js.map} +1 -1
- package/public/index.html +4 -4
- package/public/loading.html +5 -5
- package/public/sw.js +1 -1
- package/public/sw.js.map +1 -1
- package/public/assets/App-0-FcHzPS.js +0 -44
- package/public/assets/App-0-FcHzPS.js.map +0 -1
- package/public/assets/StatusTab-LKUA9cbH.js +0 -2
- package/public/assets/StatusTab-LKUA9cbH.js.map +0 -1
- package/public/assets/index-8iPlm2r0.js +0 -2
- package/public/assets/index-8iPlm2r0.js.map +0 -1
- package/public/assets/index-B185mC7m.js +0 -2
- package/public/assets/index-B185mC7m.js.map +0 -1
- package/public/assets/index-Bbj1xF8i.js +0 -2
- package/public/assets/index-Bbj1xF8i.js.map +0 -1
- package/public/assets/index-BsmFN3k1.js +0 -2
- package/public/assets/index-BsmFN3k1.js.map +0 -1
- package/public/assets/index-Bz_OQJYA.css +0 -1
- package/public/assets/index-C52CfqK3.js +0 -2
- package/public/assets/index-C52CfqK3.js.map +0 -1
- package/public/assets/index-CHYmKl10.js.map +0 -1
- package/public/assets/index-CTKYD_VJ.js +0 -2
- package/public/assets/index-D2UHSOG5.js +0 -2
- package/public/assets/index-DDoB_Z36.js +0 -2
- package/public/assets/index-DDoB_Z36.js.map +0 -1
- package/public/assets/index-DcwAtZw-.js +0 -3
- package/public/assets/index-DcwAtZw-.js.map +0 -1
- package/public/assets/index-DxUD3RYr.js +0 -2
- package/public/assets/index-DxUD3RYr.js.map +0 -1
- package/public/assets/loading-CmEVQgyj.css +0 -1
- package/public/assets/main-CZztwrfv.js +0 -48
- package/public/assets/main-CZztwrfv.js.map +0 -1
- package/public/assets/monaco-viewer-CpxDfB-6.js +0 -27
- package/public/assets/monaco-viewer-CpxDfB-6.js.map +0 -1
- package/public/assets/tool-call-DbtCsJ4x.js +0 -60
- package/public/assets/tool-call-DbtCsJ4x.js.map +0 -1
- package/public/assets/unified-picker-C0eo1chJ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-events.test.js","sourceRoot":"","sources":["../../src/workspaces/instance-events.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\"\nimport { describe, it } from \"node:test\"\nimport type { OpenCodeEvent } from \"@opencode-ai/client\"\nimport { EventBus } from \"../events/bus\"\nimport type { Logger } from \"../logger\"\nimport { InstanceEventBridge } from \"./instance-events\"\nimport type { WorkspaceManager } from \"./manager\"\n\nconst logger = {\n debug() {},\n warn() {},\n} as unknown as Logger\n\nfunction deferred<T>() {\n let resolve!: (value: T) => void\n const promise = new Promise<T>((done) => { resolve = done })\n return { promise, resolve }\n}\n\nfunction waitFor(check: () => boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(\"Timed out waiting for event\")), 2000)\n const poll = () => {\n if (check()) {\n clearTimeout(timeout)\n resolve()\n } else {\n setTimeout(poll, 0)\n }\n }\n poll()\n })\n}\n\nfunction serverConnected(): OpenCodeEvent {\n return { type: \"server.connected\", data: {} } as OpenCodeEvent\n}\n\nfunction locationlessManager(\n events: OpenCodeEvent[],\n sessionLocations: Record<string, string | Error>,\n workspaces = [{ id: \"a\", path: \"/repo-a\" }],\n) {\n let sessionGets = 0\n const manager = {\n list: () => workspaces,\n ownsDirectory: async (workspaceId: string, directory: string) => (\n workspaces.some((workspace) => workspace.id === workspaceId && workspace.path === directory)\n ),\n getSharedServiceClient: async () => ({\n session: { get: async ({ sessionID }: { sessionID: string }) => {\n sessionGets++\n const location = sessionLocations[sessionID]\n if (location instanceof Error) throw location\n if (!location) throw new Error(\"Session not found\")\n return { id: sessionID, location: { directory: location } }\n } },\n }),\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield* events\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n return { manager, sessionGets: () => sessionGets }\n}\n\ndescribe(\"InstanceEventBridge\", () => {\n it(\"does not publish connected until the stream confirms with its first event\", async () => {\n const gate = deferred<void>()\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => true,\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n await gate.promise\n yield serverConnected()\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const statuses: string[] = []\n bus.on(\"instance.eventStatus\", (event) => statuses.push(event.status))\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => statuses.includes(\"connecting\"))\n assert.equal(statuses.includes(\"connected\"), false)\n gate.resolve()\n await waitFor(() => statuses.includes(\"connected\"))\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"rejects a stream whose first event is not server.connected and reconnects\", async () => {\n let subscriptions = 0\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => true,\n subscribeToSharedService: async (signal?: AbortSignal) => {\n subscriptions += 1\n return (async function* () {\n if (subscriptions === 1) {\n yield { type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } } as OpenCodeEvent\n return\n }\n yield serverConnected()\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })()\n },\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const statuses: Array<{ status: string; reason?: string }> = []\n const received: OpenCodeEvent[] = []\n bus.on(\"instance.eventStatus\", (event) => statuses.push(event))\n bus.on(\"instance.event\", (event) => received.push(event.event))\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => statuses.some((event) => event.status === \"error\"))\n assert.match(statuses.find((event) => event.status === \"error\")?.reason ?? \"\", /expected server\\.connected/)\n assert.deepEqual(received, [])\n await waitFor(() => statuses.some((event) => event.status === \"connected\"))\n assert.equal(subscriptions, 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"clears routing caches before reconnecting\", async () => {\n let subscriptions = 0\n let ownershipChecks = 0\n const event = { type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } } as OpenCodeEvent\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => ++ownershipChecks === 1,\n subscribeToSharedService: async (signal?: AbortSignal) => {\n subscriptions += 1\n const current = subscriptions\n return (async function* () {\n yield serverConnected()\n yield event\n if (current > 1) await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })()\n },\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: unknown[] = []\n bus.on(\"instance.event\", (value) => {\n if (value.event.type !== \"server.connected\") received.push(value)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => subscriptions === 2 && ownershipChecks === 2)\n assert.equal(received.length, 1)\n } finally {\n bridge.shutdown()\n }\n })\n it(\"routes root and owned worktree events to the logical workspace and caches ownership\", async () => {\n const events = [\n { id: \"0\", created: 0, type: \"server.connected\", data: {} },\n { id: \"1\", created: 1, type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } },\n {\n id: \"2\",\n created: 2,\n type: \"session.created\",\n durable: { aggregateID: \"session-1\", seq: 1, version: 1 },\n location: { directory: \"/repo-a\" },\n data: {\n sessionID: \"session-1\",\n projectID: \"project-1\",\n location: { directory: \"/repo-a\" },\n slug: \"session\",\n version: \"1\",\n },\n },\n { id: \"3\", created: 3, type: \"permission.asked\", location: { directory: \"/other\" }, data: { id: \"p2\" } },\n {\n id: \"5\",\n created: 5,\n type: \"session.text.delta\",\n location: { directory: \"/repo-a/.worktrees/feature\" },\n data: { sessionID: \"session-2\", assistantMessageID: \"message-1\", ordinal: 0, delta: \"hello\" },\n },\n {\n id: \"6\",\n created: 6,\n type: \"session.text.delta\",\n location: { directory: \"/repo-a/.worktrees/feature\" },\n data: { sessionID: \"session-2\", assistantMessageID: \"message-1\", ordinal: 1, delta: \" again\" },\n },\n ] as OpenCodeEvent[]\n const ownerLookups = new Map<string, number>()\n const manager = {\n list: () => [\n { id: \"a\", path: \"/repo-a\" },\n { id: \"b\", path: \"/repo-b\" },\n ],\n ownsDirectory: async (workspaceId: string, directory: string) => {\n ownerLookups.set(directory, (ownerLookups.get(directory) ?? 0) + 1)\n await Promise.resolve()\n return workspaceId === \"a\" && (directory === \"/repo-a\" || directory === \"/repo-a/.worktrees/feature\")\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield* events\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => received.push(event))\n\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 6)\n assert.deepEqual(received.slice(0, 2).map((event) => [event.instanceId, event.event.type]), [\n [\"a\", \"server.connected\"],\n [\"b\", \"server.connected\"],\n ])\n assert.equal(received[2].instanceId, \"a\")\n assert.deepEqual(received[2].event.location, { directory: \"/repo-a\" })\n assert.deepEqual(received[2].event.data, { id: \"p1\" })\n assert.equal(received[2].event.properties, undefined)\n assert.equal(received[3].event.data.sessionID, \"session-1\")\n assert.equal(received[3].event.properties, undefined)\n assert.equal(received[4].instanceId, \"a\")\n assert.deepEqual(received[4].event.data, {\n sessionID: \"session-2\",\n assistantMessageID: \"message-1\",\n ordinal: 0,\n delta: \"hello\",\n })\n assert.equal(received[5].instanceId, \"a\")\n assert.equal(received[5].event.data.delta, \" again\")\n assert.equal(ownerLookups.get(\"/repo-a/.worktrees/feature\"), 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"fans an event out to every logical workspace for the same directory\", async () => {\n const manager = {\n list: () => [{ id: \"first\", path: \"/repo\" }, { id: \"second\", path: \"/repo\" }],\n ownsDirectory: async (_workspaceId: string, directory: string) => directory === \"/repo\",\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { id: \"1\", created: 1, type: \"permission.asked\", location: { directory: \"/repo\" }, data: { id: \"p1\" } } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event.instanceId)\n })\n\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received, [\"first\", \"second\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"keeps valid owners when another ownership lookup rejects and retries the lookup\", async () => {\n let failedOwnerChecks = 0\n const manager = {\n list: () => [{ id: \"failed\", path: \"/repo-a\" }, { id: \"owner\", path: \"/repo-b\" }],\n ownsDirectory: async (workspaceId: string) => {\n if (workspaceId === \"failed\" && ++failedOwnerChecks === 1) throw new Error(\"temporary lookup failure\")\n return true\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", location: { directory: \"/repo-b\" }, data: { id: \"p1\" } } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event.instanceId)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received, [\"failed\", \"owner\"])\n assert.equal(failedOwnerChecks, 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"does not publish to an owner stopped during an ownership retry\", async () => {\n const retry = deferred<boolean>()\n let checks = 0\n let workspaces = [{ id: \"owner\", path: \"/repo\" }, { id: \"flaky\", path: \"/other\" }]\n const manager = {\n list: () => workspaces,\n ownsDirectory: async (workspaceId: string) => {\n if (workspaceId === \"owner\") return true\n if (++checks === 1) throw new Error(\"temporary lookup failure\")\n return retry.promise\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", location: { directory: \"/repo\" }, data: { id: \"p1\" } } as OpenCodeEvent\n yield { type: \"catalog.updated\", data: {} } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: workspaces[0] as any })\n await waitFor(() => checks === 2)\n workspaces = [workspaces[1]]\n retry.resolve(false)\n await waitFor(() => received.length === 1)\n assert.equal(received[0].event.type, \"catalog.updated\")\n assert.equal(received[0].instanceId, \"flaky\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes known locationless session events and invalidates the cache after deletion\", async () => {\n const events = [\n { type: \"session.text.delta\", data: { sessionID: \"known\", delta: \"one\" } },\n { type: \"session.status\", data: { sessionID: \"known\", status: { type: \"busy\" } } },\n { type: \"session.deleted\", data: { sessionID: \"known\" } },\n { type: \"session.status\", data: { sessionID: \"known\", status: { type: \"idle\" } } },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { known: \"/repo-a\" })\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 4)\n assert.deepEqual(received.map((event) => event.instanceId), [\"a\", \"a\", \"a\", \"a\"])\n assert.equal(sessionGets(), 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"retries a transient locationless session lookup failure\", async () => {\n const events = [\n { type: \"permission.asked\", data: { id: \"p1\", sessionID: \"retry\" } },\n ] as OpenCodeEvent[]\n let attempts = 0\n const sessionLocations: Record<string, string | Error> = {}\n Object.defineProperty(sessionLocations, \"retry\", {\n get: () => ++attempts === 1 ? new Error(\"temporary session failure\") : \"/repo-a\",\n })\n const { manager, sessionGets } = locationlessManager(events, sessionLocations)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 2)\n assert.equal(received[0].instanceId, \"a\")\n assert.equal(received[0].event.data.id, \"p1\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"drops an unknown locationless session event\", async () => {\n const events = [\n { type: \"session.status\", data: { sessionID: \"unknown\", status: { type: \"idle\" } } },\n { type: \"permission.asked\", data: { id: \"unknown\", sessionID: \"unknown\" } },\n { type: \"catalog.updated\", data: {} },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { unknown: new Error(\"not found\") })\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 2)\n assert.equal(received[0].event.type, \"catalog.updated\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"starts a failed session lookup cache TTL after the retry settles\", async () => {\n const originalNow = Date.now\n let now = 0\n let sessionGets = 0\n Date.now = () => now\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => false,\n getSharedServiceClient: async () => ({\n session: { get: async () => {\n sessionGets++\n if (sessionGets === 2) now = 3_000\n throw new Error(\"temporary lookup failure\")\n } },\n }),\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", data: { id: \"p1\", sessionID: \"missing\" } } as OpenCodeEvent\n now = 3_001\n yield { type: \"permission.asked\", data: { id: \"p2\", sessionID: \"missing\" } } as OpenCodeEvent\n yield { type: \"catalog.updated\", data: {} } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets, 2)\n assert.equal(received[0].event.type, \"catalog.updated\")\n } finally {\n Date.now = originalNow\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless PTY events by cwd without broadcasting ownership\", async () => {\n const events = [\n { type: \"pty.created\", data: { info: { id: \"pty-1\", title: \"dev\", command: \"npm\", args: [], cwd: \"/repo-b\", status: \"running\", pid: 42 } } },\n { type: \"pty.exited\", data: { id: \"pty-1\", exitCode: 0 } },\n { type: \"pty.deleted\", data: { id: \"pty-1\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 3)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.type), [\"pty.created\", \"pty.exited\", \"pty.deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless shell events by cwd without broadcasting ownership\", async () => {\n const events = [\n { type: \"shell.created\", data: { info: { id: \"shell-1\", command: \"npm run dev\", cwd: \"/repo-b\", shell: \"sh\", file: \"/tmp/output\", status: \"running\", metadata: {}, time: { started: 1 } } } },\n { type: \"shell.exited\", data: { id: \"shell-1\", status: \"exited\", exit: 0 } },\n { type: \"shell.deleted\", data: { id: \"shell-1\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 3)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.type), [\"shell.created\", \"shell.exited\", \"shell.deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"broadcasts an unresolvable locationless deletion\", async () => {\n const events = [{ type: \"session.deleted\", data: { sessionID: \"deleted\" } }] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const notFound = Object.assign(new Error(\"not found\"), { _tag: \"SessionNotFoundError\" })\n const { manager, sessionGets } = locationlessManager(events, { deleted: notFound }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.equal(sessionGets(), 1)\n assert.deepEqual(received.map((event) => event.instanceId), [\"a\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.data.sessionID), [\"deleted\", \"deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"keeps locationless session and permission events scoped to their owning workspace\", async () => {\n const events = [\n { type: \"session.status\", data: { sessionID: \"foreign\", status: { type: \"idle\" } } },\n { type: \"permission.asked\", data: { id: \"permission\", sessionID: \"foreign\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, { foreign: \"/repo-b\" }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless form.created through data.form.sessionID\", async () => {\n const events = [{\n type: \"form.created\",\n data: { form: { id: \"form\", sessionID: \"owned\", title: \"Question\", fields: [] } },\n }] as unknown as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager, sessionGets } = locationlessManager(events, { owned: \"/repo-b\" }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 1)\n assert.equal(received[0].instanceId, \"b\")\n assert.equal(received[0].event.data.form.sessionID, \"owned\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"broadcasts safe global locationless service events\", async () => {\n const events = [\n { type: \"agent.updated\", data: {} },\n { type: \"catalog.updated\", data: {} },\n { type: \"command.updated\", data: {} },\n { type: \"config.updated\", data: {} },\n { type: \"integration.connection.updated\", data: { integrationID: \"test\" } },\n { type: \"integration.updated\", data: {} },\n { type: \"mcp.resources.changed\", data: { server: \"test\" } },\n { type: \"mcp.status.changed\", data: { server: \"test\" } },\n { type: \"models-dev.refreshed\", data: {} },\n { type: \"installation.updated\", data: { version: \"1.2.3\" } },\n { type: \"installation.update-available\", data: { version: \"1.2.4\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager, sessionGets } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === events.length * workspaces.length)\n assert.equal(sessionGets(), 0)\n assert.deepEqual(received.map((event) => event.event.type), events.flatMap((event) => [event.type, event.type]))\n assert.deepEqual(received.map((event) => event.instanceId), events.flatMap(() => [\"a\", \"b\"]))\n } finally {\n bridge.shutdown()\n }\n })\n})\n"]}
|
|
1
|
+
{"version":3,"file":"instance-events.test.js","sourceRoot":"","sources":["../../src/workspaces/instance-events.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\"\nimport { describe, it } from \"node:test\"\nimport type { LocationRef, OpenCodeEvent } from \"@opencode/client\"\nimport { EventBus } from \"../events/bus\"\nimport type { Logger } from \"../logger\"\nimport { InstanceEventBridge } from \"./instance-events\"\nimport type { WorkspaceManager } from \"./manager\"\n\nconst logger = {\n debug() {},\n warn() {},\n} as unknown as Logger\n\nfunction deferred<T>() {\n let resolve!: (value: T) => void\n const promise = new Promise<T>((done) => { resolve = done })\n return { promise, resolve }\n}\n\nfunction waitFor(check: () => boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(\"Timed out waiting for event\")), 2000)\n const poll = () => {\n if (check()) {\n clearTimeout(timeout)\n resolve()\n } else {\n setTimeout(poll, 0)\n }\n }\n poll()\n })\n}\n\nfunction serverConnected(): OpenCodeEvent {\n return { type: \"server.connected\", data: {} } as OpenCodeEvent\n}\n\nfunction locationlessManager(\n events: OpenCodeEvent[],\n sessionLocations: Record<string, string | LocationRef | Error>,\n workspaces: Array<{ id: string; path: string; workspaceID?: string }> = [{ id: \"a\", path: \"/repo-a\" }],\n) {\n let sessionGets = 0\n const manager = {\n list: () => workspaces,\n ownsDirectory: async (workspaceId: string, directory: string) => (\n workspaces.some((workspace) => workspace.id === workspaceId && workspace.path === directory)\n ),\n ownsLocation: async (workspaceId: string, location: LocationRef) => workspaces.some(workspace => (\n workspace.id === workspaceId && workspace.path === location.directory && workspace.workspaceID === location.workspaceID\n )),\n getSharedServiceClient: async () => ({\n session: { get: async ({ sessionID }: { sessionID: string }) => {\n sessionGets++\n const location = sessionLocations[sessionID]\n if (location instanceof Error) throw location\n if (!location) throw new Error(\"Session not found\")\n return { id: sessionID, location: typeof location === \"string\" ? { directory: location } : location }\n } },\n }),\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield* events\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n return { manager, sessionGets: () => sessionGets }\n}\n\ndescribe(\"InstanceEventBridge\", () => {\n it(\"keeps same-directory legacy identities separate for scoped and cached locationless events\", async () => {\n const one = { directory: \"/repo\", workspaceID: \"one\" }\n const two = { directory: \"/repo\", workspaceID: \"two\" }\n const events = [\n { type: \"session.text.delta\", location: one, data: { sessionID: \"s1\", delta: \"one\" } },\n { type: \"session.text.delta\", location: two, data: { sessionID: \"s2\", delta: \"two\" } },\n { type: \"session.text.delta\", data: { sessionID: \"s1\", delta: \"cached one\" } },\n { type: \"session.text.delta\", data: { sessionID: \"s2\", delta: \"cached two\" } },\n { type: \"session.text.delta\", data: { sessionID: \"s3\", delta: \"resolved two\" } },\n { type: \"session.text.delta\", data: { sessionID: \"s3\", delta: \"cached resolved two\" } },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { s3: two }, [\n { id: \"a\", path: \"/repo\", workspaceID: \"one\" }, { id: \"b\", path: \"/repo\", workspaceID: \"two\" },\n ])\n let checks = 0\n const owns = manager.ownsLocation.bind(manager)\n manager.ownsLocation = async (...args) => { checks++; return owns(...args) }\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", event => { if (event.event.type !== \"server.connected\") received.push(event.instanceId) })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] })\n await waitFor(() => received.length === events.length)\n assert.deepEqual(received, [\"a\", \"b\", \"a\", \"b\", \"b\", \"b\"])\n assert.equal(checks, 4, \"one lookup per full location and logical workspace\")\n assert.equal(sessionGets(), 1)\n } finally { bridge.shutdown() }\n })\n\n it(\"retains scoped PTY and Shell identity for later locationless events\", async () => {\n const location = { directory: \"/repo\", workspaceID: \"two\" }\n const events = [\n { type: \"pty.created\", location, data: { info: { id: \"p\", cwd: \"/repo\" } } },\n { type: \"pty.updated\", data: { info: { id: \"p\", cwd: \"/repo/subdirectory\" } } },\n { type: \"pty.deleted\", data: { id: \"p\" } },\n { type: \"shell.created\", location, data: { info: { id: \"sh\", cwd: \"/repo\" } } },\n { type: \"shell.exited\", data: { id: \"sh\" } },\n { type: \"shell.deleted\", data: { id: \"sh\" } },\n ] as OpenCodeEvent[]\n const { manager } = locationlessManager(events, {}, [\n { id: \"a\", path: \"/repo\", workspaceID: \"one\" }, { id: \"b\", path: \"/repo\", workspaceID: \"two\" },\n ])\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", event => { if (event.event.type !== \"server.connected\") received.push(event.instanceId) })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] })\n await waitFor(() => received.length === events.length)\n assert.deepEqual(received, events.map(() => \"b\"))\n } finally { bridge.shutdown() }\n })\n\n it(\"does not retain a moved session's old envelope identity\", async () => {\n const one = { directory: \"/repo\", workspaceID: \"one\" }\n const two = { directory: \"/repo\", workspaceID: \"two\" }\n const events = [\n { type: \"session.text.delta\", location: one, data: { sessionID: \"s\", delta: \"before\" } },\n { type: \"session.moved\", location: one, data: { sessionID: \"s\", location: two } },\n { type: \"session.text.delta\", data: { sessionID: \"s\", delta: \"after\" } },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { s: two }, [\n { id: \"a\", path: \"/repo\", workspaceID: \"one\" }, { id: \"b\", path: \"/repo\", workspaceID: \"two\" },\n ])\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", event => { if (event.event.type !== \"server.connected\") received.push(event.instanceId) })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] })\n await waitFor(() => received.length === events.length)\n assert.deepEqual(received, [\"a\", \"a\", \"b\"])\n assert.equal(sessionGets(), 1)\n } finally { bridge.shutdown() }\n })\n\n it(\"never treats the global Form sentinel as a session location cache key\", async () => {\n const location = { directory: \"/repo\", workspaceID: \"one\" }\n const events = [\n { type: \"form.created\", location, data: { form: { id: \"scoped\", sessionID: \"global\" } } },\n { type: \"form.created\", data: { form: { id: \"unscoped\", sessionID: \"global\" } } },\n { type: \"model.updated\", data: {} },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { global: location }, [\n { id: \"a\", path: \"/repo\", workspaceID: \"one\" }, { id: \"b\", path: \"/repo\", workspaceID: \"two\" },\n ])\n const bus = new EventBus()\n const received: Array<{ instanceId: string; event: OpenCodeEvent }> = []\n bus.on(\"instance.event\", event => { if (event.event.type !== \"server.connected\") received.push(event) })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] })\n await waitFor(() => received.length === 3)\n assert.equal(received.filter(event => event.event.type === \"form.created\").length, 1)\n assert.equal(sessionGets(), 0)\n } finally { bridge.shutdown() }\n })\n it(\"does not publish connected until the stream confirms with its first event\", async () => {\n const gate = deferred<void>()\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => true,\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n await gate.promise\n yield serverConnected()\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const statuses: string[] = []\n bus.on(\"instance.eventStatus\", (event) => statuses.push(event.status))\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => statuses.includes(\"connecting\"))\n assert.equal(statuses.includes(\"connected\"), false)\n gate.resolve()\n await waitFor(() => statuses.includes(\"connected\"))\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"rejects a stream whose first event is not server.connected and reconnects\", async () => {\n let subscriptions = 0\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => true,\n subscribeToSharedService: async (signal?: AbortSignal) => {\n subscriptions += 1\n return (async function* () {\n if (subscriptions === 1) {\n yield { type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } } as OpenCodeEvent\n return\n }\n yield serverConnected()\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })()\n },\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const statuses: Array<{ status: string; reason?: string }> = []\n const received: OpenCodeEvent[] = []\n bus.on(\"instance.eventStatus\", (event) => statuses.push(event))\n bus.on(\"instance.event\", (event) => received.push(event.event))\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => statuses.some((event) => event.status === \"error\"))\n assert.match(statuses.find((event) => event.status === \"error\")?.reason ?? \"\", /expected server\\.connected/)\n assert.deepEqual(received, [])\n await waitFor(() => statuses.some((event) => event.status === \"connected\"))\n assert.equal(subscriptions, 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"clears routing caches before reconnecting\", async () => {\n let subscriptions = 0\n let ownershipChecks = 0\n const event = { type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } } as OpenCodeEvent\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => ++ownershipChecks === 1,\n subscribeToSharedService: async (signal?: AbortSignal) => {\n subscriptions += 1\n const current = subscriptions\n return (async function* () {\n yield serverConnected()\n yield event\n if (current > 1) await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })()\n },\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: unknown[] = []\n bus.on(\"instance.event\", (value) => {\n if (value.event.type !== \"server.connected\") received.push(value)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => subscriptions === 2 && ownershipChecks === 2)\n assert.equal(received.length, 1)\n } finally {\n bridge.shutdown()\n }\n })\n it(\"routes root and owned worktree events to the logical workspace and caches ownership\", async () => {\n const events = [\n { id: \"0\", created: 0, type: \"server.connected\", data: {} },\n { id: \"1\", created: 1, type: \"permission.asked\", location: { directory: \"/repo-a\" }, data: { id: \"p1\" } },\n {\n id: \"2\",\n created: 2,\n type: \"session.created\",\n durable: { aggregateID: \"session-1\", seq: 1, version: 1 },\n location: { directory: \"/repo-a\" },\n data: {\n sessionID: \"session-1\",\n projectID: \"project-1\",\n location: { directory: \"/repo-a\" },\n slug: \"session\",\n version: \"1\",\n },\n },\n { id: \"3\", created: 3, type: \"permission.asked\", location: { directory: \"/other\" }, data: { id: \"p2\" } },\n {\n id: \"5\",\n created: 5,\n type: \"session.text.delta\",\n location: { directory: \"/repo-a/.worktrees/feature\" },\n data: { sessionID: \"session-2\", assistantMessageID: \"message-1\", ordinal: 0, delta: \"hello\" },\n },\n {\n id: \"6\",\n created: 6,\n type: \"session.text.delta\",\n location: { directory: \"/repo-a/.worktrees/feature\" },\n data: { sessionID: \"session-2\", assistantMessageID: \"message-1\", ordinal: 1, delta: \" again\" },\n },\n ] as OpenCodeEvent[]\n const ownerLookups = new Map<string, number>()\n const manager = {\n list: () => [\n { id: \"a\", path: \"/repo-a\" },\n { id: \"b\", path: \"/repo-b\" },\n ],\n ownsDirectory: async (workspaceId: string, directory: string) => {\n ownerLookups.set(directory, (ownerLookups.get(directory) ?? 0) + 1)\n await Promise.resolve()\n return workspaceId === \"a\" && (directory === \"/repo-a\" || directory === \"/repo-a/.worktrees/feature\")\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield* events\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => received.push(event))\n\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 6)\n assert.deepEqual(received.slice(0, 2).map((event) => [event.instanceId, event.event.type]), [\n [\"a\", \"server.connected\"],\n [\"b\", \"server.connected\"],\n ])\n assert.equal(received[2].instanceId, \"a\")\n assert.deepEqual(received[2].event.location, { directory: \"/repo-a\" })\n assert.deepEqual(received[2].event.data, { id: \"p1\" })\n assert.equal(received[2].event.properties, undefined)\n assert.equal(received[3].event.data.sessionID, \"session-1\")\n assert.equal(received[3].event.properties, undefined)\n assert.equal(received[4].instanceId, \"a\")\n assert.deepEqual(received[4].event.data, {\n sessionID: \"session-2\",\n assistantMessageID: \"message-1\",\n ordinal: 0,\n delta: \"hello\",\n })\n assert.equal(received[5].instanceId, \"a\")\n assert.equal(received[5].event.data.delta, \" again\")\n assert.equal(ownerLookups.get(\"/repo-a/.worktrees/feature\"), 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"fans an event out to every logical workspace for the same directory\", async () => {\n const manager = {\n list: () => [{ id: \"first\", path: \"/repo\" }, { id: \"second\", path: \"/repo\" }],\n ownsDirectory: async (_workspaceId: string, directory: string) => directory === \"/repo\",\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { id: \"1\", created: 1, type: \"permission.asked\", location: { directory: \"/repo\" }, data: { id: \"p1\" } } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event.instanceId)\n })\n\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received, [\"first\", \"second\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"keeps valid owners when another ownership lookup rejects and retries the lookup\", async () => {\n let failedOwnerChecks = 0\n const manager = {\n list: () => [{ id: \"failed\", path: \"/repo-a\" }, { id: \"owner\", path: \"/repo-b\" }],\n ownsDirectory: async (workspaceId: string) => {\n if (workspaceId === \"failed\" && ++failedOwnerChecks === 1) throw new Error(\"temporary lookup failure\")\n return true\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", location: { directory: \"/repo-b\" }, data: { id: \"p1\" } } as OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: string[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event.instanceId)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received, [\"failed\", \"owner\"])\n assert.equal(failedOwnerChecks, 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"does not publish to an owner stopped during an ownership retry\", async () => {\n const retry = deferred<boolean>()\n let checks = 0\n let workspaces = [{ id: \"owner\", path: \"/repo\" }, { id: \"flaky\", path: \"/other\" }]\n const manager = {\n list: () => workspaces,\n ownsDirectory: async (workspaceId: string) => {\n if (workspaceId === \"owner\") return true\n if (++checks === 1) throw new Error(\"temporary lookup failure\")\n return retry.promise\n },\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", location: { directory: \"/repo\" }, data: { id: \"p1\" } } as OpenCodeEvent\n yield { id: \"model-update\", created: 1, type: \"model.updated\", data: {} } satisfies OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: workspaces[0] as any })\n await waitFor(() => checks === 2)\n workspaces = [workspaces[1]]\n retry.resolve(false)\n await waitFor(() => received.length === 1)\n assert.equal(received[0].event.type, \"model.updated\")\n assert.equal(received[0].instanceId, \"flaky\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes known locationless session events and invalidates the cache after deletion\", async () => {\n const events = [\n { type: \"session.text.delta\", data: { sessionID: \"known\", delta: \"one\" } },\n { type: \"session.status\", data: { sessionID: \"known\", status: { type: \"busy\" } } },\n { type: \"session.deleted\", data: { sessionID: \"known\" } },\n { type: \"session.status\", data: { sessionID: \"known\", status: { type: \"idle\" } } },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { known: \"/repo-a\" })\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 4)\n assert.deepEqual(received.map((event) => event.instanceId), [\"a\", \"a\", \"a\", \"a\"])\n assert.equal(sessionGets(), 2)\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"retries a transient locationless session lookup failure\", async () => {\n const events = [\n { type: \"permission.asked\", data: { id: \"p1\", sessionID: \"retry\" } },\n ] as OpenCodeEvent[]\n let attempts = 0\n const sessionLocations: Record<string, string | Error> = {}\n Object.defineProperty(sessionLocations, \"retry\", {\n get: () => ++attempts === 1 ? new Error(\"temporary session failure\") : \"/repo-a\",\n })\n const { manager, sessionGets } = locationlessManager(events, sessionLocations)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 2)\n assert.equal(received[0].instanceId, \"a\")\n assert.equal(received[0].event.data.id, \"p1\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"drops an unknown locationless session event\", async () => {\n const events = [\n { type: \"session.status\", data: { sessionID: \"unknown\", status: { type: \"idle\" } } },\n { type: \"permission.asked\", data: { id: \"unknown\", sessionID: \"unknown\" } },\n { type: \"model.updated\", data: {} },\n ] as OpenCodeEvent[]\n const { manager, sessionGets } = locationlessManager(events, { unknown: new Error(\"not found\") })\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 2)\n assert.equal(received[0].event.type, \"model.updated\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"starts a failed session lookup cache TTL after the retry settles\", async () => {\n const originalNow = Date.now\n let now = 0\n let sessionGets = 0\n Date.now = () => now\n const manager = {\n list: () => [{ id: \"a\", path: \"/repo-a\" }],\n ownsDirectory: async () => false,\n getSharedServiceClient: async () => ({\n session: { get: async () => {\n sessionGets++\n if (sessionGets === 2) now = 3_000\n throw new Error(\"temporary lookup failure\")\n } },\n }),\n subscribeToSharedService: async (signal?: AbortSignal) => (async function* () {\n yield serverConnected()\n yield { type: \"permission.asked\", data: { id: \"p1\", sessionID: \"missing\" } } as OpenCodeEvent\n now = 3_001\n yield { type: \"permission.asked\", data: { id: \"p2\", sessionID: \"missing\" } } as OpenCodeEvent\n yield { id: \"model-update\", created: 1, type: \"model.updated\", data: {} } satisfies OpenCodeEvent\n await new Promise<void>((resolve) => signal?.addEventListener(\"abort\", () => resolve(), { once: true }))\n })(),\n } as unknown as WorkspaceManager\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets, 2)\n assert.equal(received[0].event.type, \"model.updated\")\n } finally {\n Date.now = originalNow\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless PTY events by cwd without broadcasting ownership\", async () => {\n const events = [\n { type: \"pty.created\", data: { info: { id: \"pty-1\", title: \"dev\", command: \"npm\", args: [], cwd: \"/repo-b\", status: \"running\", pid: 42 } } },\n { type: \"pty.exited\", data: { id: \"pty-1\", exitCode: 0 } },\n { type: \"pty.deleted\", data: { id: \"pty-1\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 3)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.type), [\"pty.created\", \"pty.exited\", \"pty.deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless shell events by cwd without broadcasting ownership\", async () => {\n const events = [\n { type: \"shell.created\", data: { info: { id: \"shell-1\", command: \"npm run dev\", cwd: \"/repo-b\", shell: \"sh\", file: \"/tmp/output\", status: \"running\", metadata: {}, time: { started: 1 } } } },\n { type: \"shell.exited\", data: { id: \"shell-1\", status: \"exited\", exit: 0 } },\n { type: \"shell.deleted\", data: { id: \"shell-1\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 3)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.type), [\"shell.created\", \"shell.exited\", \"shell.deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"broadcasts an unresolvable locationless deletion\", async () => {\n const events = [{ type: \"session.deleted\", data: { sessionID: \"deleted\" } }] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const notFound = Object.assign(new Error(\"not found\"), { _tag: \"SessionNotFoundError\" })\n const { manager, sessionGets } = locationlessManager(events, { deleted: notFound }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.equal(sessionGets(), 1)\n assert.deepEqual(received.map((event) => event.instanceId), [\"a\", \"b\"])\n assert.deepEqual(received.map((event) => event.event.data.sessionID), [\"deleted\", \"deleted\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"keeps locationless session and permission events scoped to their owning workspace\", async () => {\n const events = [\n { type: \"session.status\", data: { sessionID: \"foreign\", status: { type: \"idle\" } } },\n { type: \"permission.asked\", data: { id: \"permission\", sessionID: \"foreign\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager } = locationlessManager(events, { foreign: \"/repo-b\" }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 2)\n assert.deepEqual(received.map((event) => event.instanceId), [\"b\", \"b\"])\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"routes locationless form.created through data.form.sessionID\", async () => {\n const events = [{\n type: \"form.created\",\n data: { form: { id: \"form\", sessionID: \"owned\", title: \"Question\", fields: [] } },\n }] as unknown as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager, sessionGets } = locationlessManager(events, { owned: \"/repo-b\" }, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === 1)\n assert.equal(sessionGets(), 1)\n assert.equal(received[0].instanceId, \"b\")\n assert.equal(received[0].event.data.form.sessionID, \"owned\")\n } finally {\n bridge.shutdown()\n }\n })\n\n it(\"broadcasts safe global locationless service events\", async () => {\n const events = [\n { type: \"agent.updated\", data: {} },\n { type: \"model.updated\", data: {} },\n { type: \"command.updated\", data: {} },\n { type: \"config.updated\", data: {} },\n { type: \"provider.updated\", data: {} },\n { type: \"plugin.updated\", data: {} },\n { type: \"integration.updated\", data: {} },\n { type: \"mcp.resources.changed\", data: { server: \"test\" } },\n { type: \"mcp.status.changed\", data: { server: \"test\" } },\n { type: \"models-dev.refreshed\", data: {} },\n { type: \"installation.updated\", data: { version: \"1.2.3\" } },\n { type: \"installation.update-available\", data: { version: \"1.2.4\" } },\n ] as OpenCodeEvent[]\n const workspaces = [{ id: \"a\", path: \"/repo-a\" }, { id: \"b\", path: \"/repo-b\" }]\n const { manager, sessionGets } = locationlessManager(events, {}, workspaces)\n const bus = new EventBus()\n const received: any[] = []\n bus.on(\"instance.event\", (event) => {\n if (event.event.type !== \"server.connected\") received.push(event)\n })\n const bridge = new InstanceEventBridge({ workspaceManager: manager, eventBus: bus, logger })\n try {\n bus.publish({ type: \"workspace.started\", workspace: manager.list()[0] as any })\n await waitFor(() => received.length === events.length * workspaces.length)\n assert.equal(sessionGets(), 0)\n assert.deepEqual(received.map((event) => event.event.type), events.flatMap((event) => [event.type, event.type]))\n assert.deepEqual(received.map((event) => event.instanceId), events.flatMap(() => [\"a\", \"b\"]))\n } finally {\n bridge.shutdown()\n }\n })\n})\n"]}
|
|
@@ -10,6 +10,7 @@ import { HostOpenCodeService, hostOpenCodeServiceIdentity, startupEnvironmentHas
|
|
|
10
10
|
import { OpenCodeSharedService, } from "./opencode-service";
|
|
11
11
|
import { WslOpenCodeService } from "./wsl-opencode-service";
|
|
12
12
|
import { isPathOwnedByWorktree, resolveOwnedWorktreePath } from "./worktree-directory";
|
|
13
|
+
import { locationRequestOptions, readLocationRef, sameLocation } from "../opencode/compatibility/location";
|
|
13
14
|
const DEFAULT_LAUNCH_TIMEOUT_MS = 30_000;
|
|
14
15
|
const MAX_ACTIVE_WORKSPACE_CREATIONS = 32;
|
|
15
16
|
const WORKSPACE_STATE = Symbol("workspaceState");
|
|
@@ -109,6 +110,14 @@ export class WorkspaceManager {
|
|
|
109
110
|
getSharedServiceClient() {
|
|
110
111
|
return this.sharedService.client();
|
|
111
112
|
}
|
|
113
|
+
getSharedServiceFetch() {
|
|
114
|
+
return this.sharedService.fetch ? this.sharedService.fetch() : Promise.resolve(globalThis.fetch);
|
|
115
|
+
}
|
|
116
|
+
async getSharedServiceConnection(id) {
|
|
117
|
+
if (!this.workspaces.get(id)?.[WORKSPACE_STATE].published)
|
|
118
|
+
return undefined;
|
|
119
|
+
return this.sharedService.acquire?.();
|
|
120
|
+
}
|
|
112
121
|
invalidateSharedServiceConnection() {
|
|
113
122
|
this.sharedService.invalidate?.();
|
|
114
123
|
}
|
|
@@ -125,45 +134,24 @@ export class WorkspaceManager {
|
|
|
125
134
|
const hostDirectory = await this.resolveWslHostDirectory(directory, record.wslDistro, DEFAULT_LAUNCH_TIMEOUT_MS);
|
|
126
135
|
return Boolean(hostDirectory && await this.ownsHostDirectory(record, hostDirectory));
|
|
127
136
|
}
|
|
128
|
-
async ownsLocation(id, location) {
|
|
137
|
+
async ownsLocation(id, location, client) {
|
|
129
138
|
const record = this.workspaces.get(id);
|
|
130
139
|
if (!record?.[WORKSPACE_STATE].published)
|
|
131
140
|
return false;
|
|
132
|
-
const
|
|
133
|
-
if (!
|
|
134
|
-
return false;
|
|
135
|
-
if (!location.workspaceID)
|
|
136
|
-
return true;
|
|
137
|
-
try {
|
|
138
|
-
const candidates = record.location?.workspaceID === location.workspaceID
|
|
139
|
-
? [record.location]
|
|
140
|
-
: (await (await this.sharedService.client(record[WORKSPACE_STATE].serviceOptions)).debug.location.list())
|
|
141
|
-
.filter((candidate) => candidate.workspaceID === location.workspaceID);
|
|
142
|
-
for (const candidate of candidates) {
|
|
143
|
-
const resolved = await this.resolveOwnedWorktree(record, candidate.directory);
|
|
144
|
-
if (resolved && canonicalWorktreeIdentity(resolved.worktreeDirectory, this.options.platform)
|
|
145
|
-
=== canonicalWorktreeIdentity(requested.worktreeDirectory, this.options.platform))
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
141
|
+
const directory = await this.getServiceDirectoryForPath(id, location.directory);
|
|
142
|
+
if (!directory)
|
|
151
143
|
return false;
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
async ownsLocationWorkspace(id, workspaceID) {
|
|
155
|
-
const record = this.workspaces.get(id);
|
|
156
|
-
if (!record?.[WORKSPACE_STATE].published)
|
|
157
|
-
return false;
|
|
158
|
-
if (record.location?.workspaceID === workspaceID)
|
|
144
|
+
if (location.workspaceID === undefined)
|
|
159
145
|
return true;
|
|
146
|
+
// The directory fence alone cannot authorize a legacy native workspace.
|
|
147
|
+
// Resolve the pair with the selected runtime and require exact identity.
|
|
148
|
+
// Modern transports reject the context before making a native request.
|
|
160
149
|
try {
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
return false;
|
|
150
|
+
const requested = readLocationRef({ ...location, directory });
|
|
151
|
+
const resolved = readLocationRef(client
|
|
152
|
+
? await client.location.get({ location: { directory } }, locationRequestOptions(requested))
|
|
153
|
+
: await this.sharedService.validateLocation(requested, undefined, record[WORKSPACE_STATE].serviceOptions));
|
|
154
|
+
return sameLocation(requested, resolved);
|
|
167
155
|
}
|
|
168
156
|
catch {
|
|
169
157
|
return false;
|
|
@@ -444,14 +432,11 @@ export class WorkspaceManager {
|
|
|
444
432
|
this.sharedService.validateLocation({ directory: serviceDirectory }, { signal: state.abortController.signal, deadlineAt: launchDeadlineAt }, serviceOptions),
|
|
445
433
|
]);
|
|
446
434
|
if (state.abortController.signal.aborted && locationResult.status === "fulfilled") {
|
|
447
|
-
cancelledLocation =
|
|
448
|
-
directory: locationResult.value.directory,
|
|
449
|
-
workspaceID: locationResult.value.workspaceID,
|
|
450
|
-
};
|
|
435
|
+
cancelledLocation = readLocationRef(locationResult.value);
|
|
451
436
|
}
|
|
452
437
|
this.throwIfCancelled(record);
|
|
453
438
|
if (locationResult.status === "fulfilled") {
|
|
454
|
-
record.location =
|
|
439
|
+
record.location = readLocationRef(locationResult.value);
|
|
455
440
|
state.locationOwned = true;
|
|
456
441
|
}
|
|
457
442
|
if (headersResult.status === "rejected")
|
|
@@ -691,7 +676,7 @@ export class WorkspaceManager {
|
|
|
691
676
|
if (leftRecord[WORKSPACE_STATE].serviceOptions?.identity !== rightRecord[WORKSPACE_STATE].serviceOptions?.identity) {
|
|
692
677
|
return false;
|
|
693
678
|
}
|
|
694
|
-
return left
|
|
679
|
+
return sameLocation(left, right);
|
|
695
680
|
}
|
|
696
681
|
async withLocationCreation(operation) {
|
|
697
682
|
while (this.pendingLocationEvictions)
|