@agent-native/core 0.16.1 → 0.16.3

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.
Files changed (123) hide show
  1. package/README.md +21 -5
  2. package/dist/cli/code-agent-executor.js +1 -1
  3. package/dist/cli/code-agent-executor.js.map +1 -1
  4. package/dist/cli/code.d.ts.map +1 -1
  5. package/dist/cli/code.js +29 -4
  6. package/dist/cli/code.js.map +1 -1
  7. package/dist/client/AgentPanel.d.ts.map +1 -1
  8. package/dist/client/AgentPanel.js +9 -1
  9. package/dist/client/AgentPanel.js.map +1 -1
  10. package/dist/client/AssistantChat.js +2 -2
  11. package/dist/client/AssistantChat.js.map +1 -1
  12. package/dist/client/ConnectBuilderCard.js +1 -1
  13. package/dist/client/ConnectBuilderCard.js.map +1 -1
  14. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  15. package/dist/client/components/CodeRequiredDialog.js +3 -1
  16. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  17. package/dist/client/composer/AgentComposerFrame.d.ts +3 -1
  18. package/dist/client/composer/AgentComposerFrame.d.ts.map +1 -1
  19. package/dist/client/composer/AgentComposerFrame.js +3 -3
  20. package/dist/client/composer/AgentComposerFrame.js.map +1 -1
  21. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  22. package/dist/client/composer/ComposerPlusMenu.js +2 -7
  23. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  24. package/dist/client/composer/PromptComposer.d.ts +4 -1
  25. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  26. package/dist/client/composer/PromptComposer.js +3 -3
  27. package/dist/client/composer/PromptComposer.js.map +1 -1
  28. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  29. package/dist/client/composer/TiptapComposer.js +13 -3
  30. package/dist/client/composer/TiptapComposer.js.map +1 -1
  31. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  32. package/dist/client/composer/useVoiceDictation.js +16 -10
  33. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  34. package/dist/client/onboarding/OnboardingPanel.js +1 -1
  35. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  36. package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
  37. package/dist/client/settings/BackgroundAgentSection.js +9 -2
  38. package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
  39. package/dist/client/settings/BrowserSection.d.ts.map +1 -1
  40. package/dist/client/settings/BrowserSection.js +17 -3
  41. package/dist/client/settings/BrowserSection.js.map +1 -1
  42. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  43. package/dist/client/settings/SettingsPanel.js +5 -5
  44. package/dist/client/settings/SettingsPanel.js.map +1 -1
  45. package/dist/client/settings/useBuilderStatus.d.ts +15 -2
  46. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  47. package/dist/client/settings/useBuilderStatus.js +99 -11
  48. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  49. package/dist/client/settings/useBuilderStatus.spec.js +12 -6
  50. package/dist/client/settings/useBuilderStatus.spec.js.map +1 -1
  51. package/dist/code-agents/background-controller.d.ts +39 -0
  52. package/dist/code-agents/background-controller.d.ts.map +1 -0
  53. package/dist/code-agents/background-controller.js +249 -0
  54. package/dist/code-agents/background-controller.js.map +1 -0
  55. package/dist/code-agents/background-run.d.ts +58 -0
  56. package/dist/code-agents/background-run.d.ts.map +1 -0
  57. package/dist/code-agents/background-run.js +58 -0
  58. package/dist/code-agents/background-run.js.map +1 -0
  59. package/dist/code-agents/index.d.ts +2 -0
  60. package/dist/code-agents/index.d.ts.map +1 -1
  61. package/dist/code-agents/index.js +2 -0
  62. package/dist/code-agents/index.js.map +1 -1
  63. package/dist/connections/index.d.ts +1 -0
  64. package/dist/connections/index.d.ts.map +1 -1
  65. package/dist/connections/index.js +1 -0
  66. package/dist/connections/index.js.map +1 -1
  67. package/dist/connections/reader.d.ts +248 -0
  68. package/dist/connections/reader.d.ts.map +1 -0
  69. package/dist/connections/reader.js +461 -0
  70. package/dist/connections/reader.js.map +1 -0
  71. package/dist/credentials/index.d.ts +11 -0
  72. package/dist/credentials/index.d.ts.map +1 -1
  73. package/dist/credentials/index.js +40 -15
  74. package/dist/credentials/index.js.map +1 -1
  75. package/dist/index.d.ts +2 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +2 -2
  78. package/dist/index.js.map +1 -1
  79. package/dist/server/agent-chat-plugin.d.ts +18 -0
  80. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  81. package/dist/server/agent-chat-plugin.js +57 -9
  82. package/dist/server/agent-chat-plugin.js.map +1 -1
  83. package/dist/server/agent-teams.d.ts +66 -1
  84. package/dist/server/agent-teams.d.ts.map +1 -1
  85. package/dist/server/agent-teams.js +433 -16
  86. package/dist/server/agent-teams.js.map +1 -1
  87. package/dist/server/builder-browser.d.ts +11 -0
  88. package/dist/server/builder-browser.d.ts.map +1 -1
  89. package/dist/server/builder-browser.js +45 -0
  90. package/dist/server/builder-browser.js.map +1 -1
  91. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  92. package/dist/server/core-routes-plugin.js +25 -2
  93. package/dist/server/core-routes-plugin.js.map +1 -1
  94. package/dist/templates/workspace-root/AGENTS.md +5 -5
  95. package/dist/templates/workspace-root/README.md +1 -1
  96. package/dist/workspace-connections/credentials.d.ts +64 -0
  97. package/dist/workspace-connections/credentials.d.ts.map +1 -0
  98. package/dist/workspace-connections/credentials.js +378 -0
  99. package/dist/workspace-connections/credentials.js.map +1 -0
  100. package/dist/workspace-connections/index.d.ts +2 -1
  101. package/dist/workspace-connections/index.d.ts.map +1 -1
  102. package/dist/workspace-connections/index.js +2 -1
  103. package/dist/workspace-connections/index.js.map +1 -1
  104. package/dist/workspace-connections/store.d.ts +16 -0
  105. package/dist/workspace-connections/store.d.ts.map +1 -1
  106. package/dist/workspace-connections/store.js +57 -1
  107. package/dist/workspace-connections/store.js.map +1 -1
  108. package/docs/content/agent-teams.md +22 -5
  109. package/docs/content/cloneable-saas.md +2 -2
  110. package/docs/content/code-agents-ui.md +103 -3
  111. package/docs/content/creating-templates.md +16 -0
  112. package/docs/content/getting-started.md +40 -14
  113. package/docs/content/migration-workbench.md +25 -2
  114. package/docs/content/multi-app-workspace.md +1 -1
  115. package/docs/content/template-analytics.md +17 -1
  116. package/docs/content/template-brain.md +57 -28
  117. package/docs/content/template-dispatch.md +9 -2
  118. package/docs/content/workspace-connections.md +63 -14
  119. package/docs/content/workspace-management.md +9 -2
  120. package/docs/content/workspace.md +12 -5
  121. package/package.json +1 -1
  122. package/src/templates/workspace-root/AGENTS.md +5 -5
  123. package/src/templates/workspace-root/README.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useBuilderStatus.spec.js","sourceRoot":"","sources":["../../../src/client/settings/useBuilderStatus.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment happy-dom\nimport React, { act } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { useBuilderConnectFlow } from \"./useBuilderStatus.js\";\n\nfunction jsonResponse(data: unknown): Response {\n return new Response(JSON.stringify(data), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n\nfunction setUserAgent(userAgent: string) {\n Object.defineProperty(window.navigator, \"userAgent\", {\n value: userAgent,\n configurable: true,\n });\n}\n\nfunction BuilderConnectProbe({ popupUrl }: { popupUrl?: string }) {\n const flow = useBuilderConnectFlow({ popupUrl });\n return (\n <div>\n <button type=\"button\" onClick={flow.start}>\n Connect\n </button>\n <output data-testid=\"status\">\n {flow.configured ? \"configured\" : \"not-configured\"}{\" \"}\n {flow.connecting ? \"connecting\" : \"idle\"}\n </output>\n <output>{flow.error ?? \"\"}</output>\n </div>\n );\n}\n\nfunction createPopupStub() {\n const doc = document.implementation.createHTMLDocument(\"popup\");\n return {\n closed: false,\n close: vi.fn(),\n document: doc,\n location: { href: \"\" },\n opener: window,\n } as unknown as Window;\n}\n\nconst signedCliAuthUrl =\n \"https://builder.io/cli-auth?response_type=code&host=agent-native-browser&client_id=Agent%20Native%20Browser&redirect_url=https%3A%2F%2Fagent-workspace.builder.io%2Fdispatch%2F_agent-native%2Fbuilder%2Fcallback%3F_an_state%3Dsigned&preview_url=https%3A%2F%2Fagent-workspace.builder.io%2Fdispatch&framework=agent-native\";\nconst staleCliAuthUrl = signedCliAuthUrl.replace(\n \"_an_state%3Dsigned\",\n \"_an_state%3Dstale\",\n);\nconst refreshedCliAuthUrl = signedCliAuthUrl.replace(\n \"_an_state%3Dsigned\",\n \"_an_state%3Drefreshed\",\n);\n\ndescribe(\"useBuilderConnectFlow\", () => {\n let container: HTMLDivElement;\n let root: Root;\n let openSpy: ReturnType<typeof vi.fn>;\n\n beforeEach(() => {\n vi.stubGlobal(\"IS_REACT_ACT_ENVIRONMENT\", true);\n window.history.replaceState({}, \"\", \"http://localhost:3000/settings\");\n vi.stubGlobal(\n \"fetch\",\n vi.fn(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n ),\n );\n openSpy = vi.fn(() => null);\n vi.stubGlobal(\"open\", openSpy);\n container = document.createElement(\"div\");\n document.body.appendChild(container);\n root = createRoot(container);\n });\n\n afterEach(() => {\n act(() => root.unmount());\n container.remove();\n vi.useRealTimers();\n vi.unstubAllGlobals();\n });\n\n it(\"opens a blank web popup and navigates to a freshly fetched cli-auth URL\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(signedCliAuthUrl);\n expect(container.textContent).not.toContain(\"Popup blocked\");\n });\n\n it(\"refreshes an un-timestamped signed prop URL before navigating web popups\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n\n let resolveInitialFetch!: (response: Response) => void;\n const initialFetch = new Promise<Response>((resolve) => {\n resolveInitialFetch = resolve;\n });\n vi.mocked(fetch)\n .mockReturnValueOnce(initialFetch)\n .mockResolvedValue(\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: refreshedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe popupUrl={staleCliAuthUrl} />);\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(refreshedCliAuthUrl);\n\n resolveInitialFetch(jsonResponse({ configured: false }));\n });\n\n it(\"refreshes status when a Builder preview callback posts success\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n vi.mocked(fetch)\n .mockResolvedValueOnce(\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n )\n .mockResolvedValueOnce(\n jsonResponse({\n configured: true,\n envManaged: false,\n builderEnabled: true,\n orgName: \"Builder space\",\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: true,\n privateKeyConfigured: true,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured\");\n\n await act(async () => {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n origin:\n \"https://940ebc5a83164aa6a37dde445e494f3a-fluid-crack-ctnhvsyb.builderio.xyz\",\n data: { type: \"builder-connect-success\" },\n }),\n );\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"configured\");\n });\n\n it(\"clears the spinner when the callback succeeds but status never confirms credentials\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n\n await act(async () => {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n origin: \"https://agent-workspace.builder.io\",\n data: { type: \"builder-connect-success\" },\n }),\n );\n await vi.advanceTimersByTimeAsync(5000);\n });\n\n expect(container.textContent).toContain(\"not-configured idle\");\n expect(container.textContent).toContain(\"couldn't confirm\");\n });\n\n it(\"clears the spinner when the popup closes before status confirms credentials\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n\n (popup as unknown as { closed: boolean }).closed = true;\n await act(async () => {\n await vi.advanceTimersByTimeAsync(8000);\n });\n\n expect(container.textContent).toContain(\"not-configured idle\");\n expect(container.textContent).toContain(\"couldn't confirm\");\n });\n\n it(\"does not replace the desktop webview when Electron reports a handled popup as null\", async () => {\n setUserAgent(\"Mozilla/5.0 Electron/41.2.2 AgentNativeDesktop/0.1.7\");\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n signedCliAuthUrl,\n \"_blank\",\n \"noopener,noreferrer\",\n );\n expect(window.location.href).toBe(\"http://localhost:3000/settings\");\n expect(container.textContent).not.toContain(\"Popup blocked\");\n });\n\n it(\"does not abort a reconnect popup because the old credential was rejected\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n const signedConnectUrl =\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\";\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: true,\n builderEnabled: true,\n orgName: null,\n connectUrl: signedConnectUrl,\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n authError: {\n message: \"Private key does not match spaceId\",\n at: Date.now() - 60_000,\n },\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\n \"Private key does not match spaceId\",\n );\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(signedConnectUrl);\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\n \"Private key does not match spaceId\",\n );\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(2000);\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\n \"Private key does not match spaceId\",\n );\n });\n\n it(\"ignores stale connect callback errors after starting a fresh reconnect\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n const signedConnectUrl =\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\";\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n connectUrl: signedConnectUrl,\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n connectError: {\n message: \"No active connect flow found\",\n at: Date.now() - 60_000,\n },\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"No active connect flow found\");\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n });\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(2000);\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\"No active connect flow found\");\n });\n});\n"]}
1
+ {"version":3,"file":"useBuilderStatus.spec.js","sourceRoot":"","sources":["../../../src/client/settings/useBuilderStatus.spec.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAE/B,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE;QACnD,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAyB;IAC9D,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjD,OAAO,CACL,0BACE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,wBAExC,EACT,iCAAoB,QAAQ,aACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,GAAG,EACtD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,IACjC,EACT,2BAAS,IAAI,CAAC,KAAK,IAAI,EAAE,GAAU,IAC/B,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO;QACL,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,MAAM,EAAE,MAAM;KACM,CAAC;AACzB,CAAC;AAED,MAAM,gBAAgB,GACpB,+TAA+T,CAAC;AAClU,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAC9C,oBAAoB,EACpB,mBAAmB,CACpB,CAAC;AACF,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,OAAO,CAClD,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;AAEF,SAAS,kBAAkB,CAAC,GAAW;IACrC,OAAO,gCAAgC,CAAC,GAAG,EAAE;QAC3C,MAAM,EAAE,sBAAsB;QAC9B,IAAI,EAAE,aAAa;KACpB,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,SAAyB,CAAC;IAC9B,IAAI,IAAU,CAAC;IACf,IAAI,OAAiC,CAAC;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,gCAAgC,CAAC,CAAC;QACtE,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CACf,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CACH,CACF,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1B,SAAS,CAAC,MAAM,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,aAAa,EACb,QAAQ,EACR,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,mBAAkD,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,EAAE;YACrD,mBAAmB,GAAG,OAAO,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;aACb,mBAAmB,CAAC,YAAY,CAAC;aACjC,iBAAiB,CAChB,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,mBAAmB;YAC/B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CACH,CAAC;QAEJ,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,IAAC,QAAQ,EAAE,eAAe,GAAI,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,aAAa,EACb,QAAQ,EACR,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAE1E,mBAAmB,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;aACb,qBAAqB,CACpB,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CACH;aACA,qBAAqB,CACpB,YAAY,CAAC;YACX,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,eAAe;YACxB,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,IAAI;YACzB,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAEJ,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAE1D,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,CAAC,aAAa,CAClB,IAAI,YAAY,CAAC,SAAS,EAAE;gBAC1B,MAAM,EACJ,6EAA6E;gBAC/E,IAAI,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;aAC1C,CAAC,CACH,CAAC;YACF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAC7C,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAErE,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,CAAC,aAAa,CAClB,IAAI,YAAY,CAAC,SAAS,EAAE;gBAC1B,MAAM,EAAE,oCAAoC;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;aAC1C,CAAC,CACH,CAAC;YACF,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAC7C,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EACR,wEAAwE;YAC1E,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAEpE,KAAwC,CAAC,MAAM,GAAG,IAAI,CAAC;QACxD,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAClG,YAAY,CAAC,sDAAsD,CAAC,CAAC;QAErE,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,kBAAkB,CAAC,gBAAgB,CAAC,EACpC,QAAQ,EACR,qBAAqB,CACtB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,gBAAgB,GACpB,wEAAwE,CAAC;QAC3E,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAC7C,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;YAC3B,SAAS,EAAE;gBACT,OAAO,EAAE,oCAAoC;gBAC7C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;aACxB;SACF,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CACrC,oCAAoC,CACrC,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;YAC3C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,aAAa,EACb,QAAQ,EACR,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CACzC,oCAAoC,CACrC,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CACzC,oCAAoC,CACrC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,gBAAgB,GACpB,wEAAwE,CAAC;QAC3E,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAC7C,YAAY,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,wBAAwB;YACjC,mBAAmB,EAAE,KAAK;YAC1B,oBAAoB,EAAE,KAAK;YAC3B,YAAY,EAAE;gBACZ,OAAO,EAAE,8BAA8B;gBACvC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;aACxB;SACF,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAC,mBAAmB,KAAG,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAExE,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// @vitest-environment happy-dom\nimport React, { act } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport {\n useBuilderConnectFlow,\n withBuilderConnectTrackingParams,\n} from \"./useBuilderStatus.js\";\n\nfunction jsonResponse(data: unknown): Response {\n return new Response(JSON.stringify(data), {\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n\nfunction setUserAgent(userAgent: string) {\n Object.defineProperty(window.navigator, \"userAgent\", {\n value: userAgent,\n configurable: true,\n });\n}\n\nfunction BuilderConnectProbe({ popupUrl }: { popupUrl?: string }) {\n const flow = useBuilderConnectFlow({ popupUrl });\n return (\n <div>\n <button type=\"button\" onClick={() => flow.start()}>\n Connect\n </button>\n <output data-testid=\"status\">\n {flow.configured ? \"configured\" : \"not-configured\"}{\" \"}\n {flow.connecting ? \"connecting\" : \"idle\"}\n </output>\n <output>{flow.error ?? \"\"}</output>\n </div>\n );\n}\n\nfunction createPopupStub() {\n const doc = document.implementation.createHTMLDocument(\"popup\");\n return {\n closed: false,\n close: vi.fn(),\n document: doc,\n location: { href: \"\" },\n opener: window,\n } as unknown as Window;\n}\n\nconst signedCliAuthUrl =\n \"https://builder.io/cli-auth?response_type=code&host=agent-native-browser&client_id=Agent%20Native%20Browser&redirect_url=https%3A%2F%2Fagent-workspace.builder.io%2Fdispatch%2F_agent-native%2Fbuilder%2Fcallback%3F_an_state%3Dsigned&preview_url=https%3A%2F%2Fagent-workspace.builder.io%2Fdispatch&framework=agent-native\";\nconst staleCliAuthUrl = signedCliAuthUrl.replace(\n \"_an_state%3Dsigned\",\n \"_an_state%3Dstale\",\n);\nconst refreshedCliAuthUrl = signedCliAuthUrl.replace(\n \"_an_state%3Dsigned\",\n \"_an_state%3Drefreshed\",\n);\n\nfunction expectedConnectUrl(url: string): string {\n return withBuilderConnectTrackingParams(url, {\n source: \"builder_connect_flow\",\n flow: \"connect_llm\",\n });\n}\n\ndescribe(\"useBuilderConnectFlow\", () => {\n let container: HTMLDivElement;\n let root: Root;\n let openSpy: ReturnType<typeof vi.fn>;\n\n beforeEach(() => {\n vi.stubGlobal(\"IS_REACT_ACT_ENVIRONMENT\", true);\n window.history.replaceState({}, \"\", \"http://localhost:3000/settings\");\n vi.stubGlobal(\n \"fetch\",\n vi.fn(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n ),\n );\n openSpy = vi.fn(() => null);\n vi.stubGlobal(\"open\", openSpy);\n container = document.createElement(\"div\");\n document.body.appendChild(container);\n root = createRoot(container);\n });\n\n afterEach(() => {\n act(() => root.unmount());\n container.remove();\n vi.useRealTimers();\n vi.unstubAllGlobals();\n });\n\n it(\"opens a blank web popup and navigates to a freshly fetched cli-auth URL\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(expectedConnectUrl(signedCliAuthUrl));\n expect(container.textContent).not.toContain(\"Popup blocked\");\n });\n\n it(\"refreshes an un-timestamped signed prop URL before navigating web popups\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n\n let resolveInitialFetch!: (response: Response) => void;\n const initialFetch = new Promise<Response>((resolve) => {\n resolveInitialFetch = resolve;\n });\n vi.mocked(fetch)\n .mockReturnValueOnce(initialFetch)\n .mockResolvedValue(\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: refreshedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe popupUrl={staleCliAuthUrl} />);\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(expectedConnectUrl(refreshedCliAuthUrl));\n\n resolveInitialFetch(jsonResponse({ configured: false }));\n });\n\n it(\"refreshes status when a Builder preview callback posts success\", async () => {\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n vi.mocked(fetch)\n .mockResolvedValueOnce(\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n )\n .mockResolvedValueOnce(\n jsonResponse({\n configured: true,\n envManaged: false,\n builderEnabled: true,\n orgName: \"Builder space\",\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: true,\n privateKeyConfigured: true,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured\");\n\n await act(async () => {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n origin:\n \"https://940ebc5a83164aa6a37dde445e494f3a-fluid-crack-ctnhvsyb.builderio.xyz\",\n data: { type: \"builder-connect-success\" },\n }),\n );\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"configured\");\n });\n\n it(\"clears the spinner when the callback succeeds but status never confirms credentials\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n\n await act(async () => {\n window.dispatchEvent(\n new MessageEvent(\"message\", {\n origin: \"https://agent-workspace.builder.io\",\n data: { type: \"builder-connect-success\" },\n }),\n );\n await vi.advanceTimersByTimeAsync(5000);\n });\n\n expect(container.textContent).toContain(\"not-configured idle\");\n expect(container.textContent).toContain(\"couldn't confirm\");\n });\n\n it(\"clears the spinner when the popup closes before status confirms credentials\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n cliAuthUrl: signedCliAuthUrl,\n connectUrl:\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\",\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n\n (popup as unknown as { closed: boolean }).closed = true;\n await act(async () => {\n await vi.advanceTimersByTimeAsync(8000);\n });\n\n expect(container.textContent).toContain(\"not-configured idle\");\n expect(container.textContent).toContain(\"couldn't confirm\");\n });\n\n it(\"does not replace the desktop webview when Electron reports a handled popup as null\", async () => {\n setUserAgent(\"Mozilla/5.0 Electron/41.2.2 AgentNativeDesktop/0.1.7\");\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n });\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n expectedConnectUrl(signedCliAuthUrl),\n \"_blank\",\n \"noopener,noreferrer\",\n );\n expect(window.location.href).toBe(\"http://localhost:3000/settings\");\n expect(container.textContent).not.toContain(\"Popup blocked\");\n });\n\n it(\"does not abort a reconnect popup because the old credential was rejected\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n const signedConnectUrl =\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\";\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: true,\n builderEnabled: true,\n orgName: null,\n connectUrl: signedConnectUrl,\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n authError: {\n message: \"Private key does not match spaceId\",\n at: Date.now() - 60_000,\n },\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\n \"Private key does not match spaceId\",\n );\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n await Promise.resolve();\n await Promise.resolve();\n });\n\n expect(openSpy).toHaveBeenCalledWith(\n \"about:blank\",\n \"_blank\",\n \"width=600,height=700\",\n );\n expect(popup.location.href).toBe(expectedConnectUrl(signedConnectUrl));\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\n \"Private key does not match spaceId\",\n );\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(2000);\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\n \"Private key does not match spaceId\",\n );\n });\n\n it(\"ignores stale connect callback errors after starting a fresh reconnect\", async () => {\n vi.useFakeTimers();\n vi.setSystemTime(new Date(\"2026-05-14T12:00:00.000Z\"));\n setUserAgent(\"Mozilla/5.0 Chrome/140.0\");\n const popup = createPopupStub();\n openSpy.mockReturnValue(popup);\n const signedConnectUrl =\n \"http://localhost:3000/_agent-native/builder/connect?_an_connect=signed\";\n vi.mocked(fetch).mockImplementation(async () =>\n jsonResponse({\n configured: false,\n envManaged: false,\n builderEnabled: true,\n orgName: null,\n connectUrl: signedConnectUrl,\n appHost: \"https://builder.io\",\n apiHost: \"https://api.builder.io\",\n publicKeyConfigured: false,\n privateKeyConfigured: false,\n connectError: {\n message: \"No active connect flow found\",\n at: Date.now() - 60_000,\n },\n }),\n );\n\n await act(async () => {\n root.render(<BuilderConnectProbe />);\n await Promise.resolve();\n });\n\n expect(container.textContent).toContain(\"No active connect flow found\");\n\n await act(async () => {\n container.querySelector(\"button\")?.click();\n });\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(2000);\n });\n\n expect(container.textContent).toContain(\"not-configured connecting\");\n expect(container.textContent).not.toContain(\"No active connect flow found\");\n });\n});\n"]}
@@ -0,0 +1,39 @@
1
+ import { type CodeAgentFollowUpMode, type CodeAgentPermissionMode } from "../cli/code-agent-runs.js";
2
+ import { type BackgroundAgentRun, type BackgroundAgentTranscriptEvent, type ListBackgroundAgentRunsOptions } from "./background-run.js";
3
+ import type { ReasoningEffort } from "../shared/reasoning-effort.js";
4
+ export type BackgroundAgentControlCommand = "approve" | "resume" | "retry" | "stop";
5
+ export interface BackgroundAgentControlInput {
6
+ runId: string;
7
+ command: BackgroundAgentControlCommand;
8
+ stdout?: NodeJS.WritableStream;
9
+ }
10
+ export interface BackgroundAgentFollowUpInput {
11
+ runId: string;
12
+ prompt: string;
13
+ mode?: CodeAgentFollowUpMode;
14
+ permissionMode?: CodeAgentPermissionMode;
15
+ model?: string;
16
+ reasoningEffort?: ReasoningEffort;
17
+ source?: string;
18
+ metadata?: Record<string, unknown>;
19
+ stdout?: NodeJS.WritableStream;
20
+ }
21
+ export interface BackgroundAgentControlResult {
22
+ ok: boolean;
23
+ runId: string;
24
+ run: BackgroundAgentRun | null;
25
+ queued?: boolean;
26
+ message?: string;
27
+ error?: string;
28
+ }
29
+ export interface BackgroundAgentController {
30
+ list(options?: ListBackgroundAgentRunsOptions): Promise<BackgroundAgentRun[]> | BackgroundAgentRun[];
31
+ get(runId: string): Promise<BackgroundAgentRun | null> | BackgroundAgentRun | null;
32
+ transcript(runId: string): Promise<BackgroundAgentTranscriptEvent[]> | BackgroundAgentTranscriptEvent[];
33
+ sendFollowUp(input: BackgroundAgentFollowUpInput): Promise<BackgroundAgentControlResult>;
34
+ control(input: BackgroundAgentControlInput): Promise<BackgroundAgentControlResult>;
35
+ }
36
+ export declare function createCompositeBackgroundAgentController(controllers: BackgroundAgentController[]): BackgroundAgentController;
37
+ export declare function createLocalCodeBackgroundAgentController(): BackgroundAgentController;
38
+ export declare const localCodeBackgroundAgentController: BackgroundAgentController;
39
+ //# sourceMappingURL=background-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-controller.d.ts","sourceRoot":"","sources":["../../src/code-agents/background-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,MAAM,6BAA6B,GACrC,SAAS,GACT,QAAQ,GACR,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,6BAA6B,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CACF,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC;IACxD,GAAG,CACD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAClE,UAAU,CACR,KAAK,EAAE,MAAM,GAEX,OAAO,CAAC,8BAA8B,EAAE,CAAC,GACzC,8BAA8B,EAAE,CAAC;IACrC,YAAY,CACV,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,OAAO,CACL,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CAAC;CAC1C;AAED,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,yBAAyB,EAAE,GACvC,yBAAyB,CA4C3B;AAED,wBAAgB,wCAAwC,IAAI,yBAAyB,CAQpF;AAED,eAAO,MAAM,kCAAkC,2BACH,CAAC"}
@@ -0,0 +1,249 @@
1
+ import { executeExistingCodeAgentRun, executePendingCodeAgentApproval, } from "../cli/code-agent-executor.js";
2
+ import { appendCodeAgentTranscriptEvent, getCodeAgentRunRecord, isActiveCodeAgentRun, queueCodeAgentFollowUp, updateCodeAgentRunRecord, } from "../cli/code-agent-runs.js";
3
+ import { getBackgroundAgentRun, listBackgroundAgentRuns, listBackgroundAgentTranscriptEvents, toBackgroundAgentRun, } from "./background-run.js";
4
+ export function createCompositeBackgroundAgentController(controllers) {
5
+ const resolveControllerForRun = async (runId) => {
6
+ for (const controller of controllers) {
7
+ const run = await Promise.resolve(controller.get(runId));
8
+ if (run)
9
+ return { controller, run };
10
+ }
11
+ return null;
12
+ };
13
+ return {
14
+ async list(options) {
15
+ const groups = await Promise.all(controllers.map((controller) => Promise.resolve(controller.list(options)).catch(() => [])));
16
+ return groups
17
+ .flat()
18
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
19
+ },
20
+ async get(runId) {
21
+ return (await resolveControllerForRun(runId))?.run ?? null;
22
+ },
23
+ async transcript(runId) {
24
+ const match = await resolveControllerForRun(runId);
25
+ if (!match)
26
+ return [];
27
+ return Promise.resolve(match.controller.transcript(runId));
28
+ },
29
+ async sendFollowUp(input) {
30
+ const match = await resolveControllerForRun(input.runId);
31
+ if (!match)
32
+ return missingRunResult(input.runId);
33
+ return match.controller.sendFollowUp(input);
34
+ },
35
+ async control(input) {
36
+ const match = await resolveControllerForRun(input.runId);
37
+ if (!match)
38
+ return missingRunResult(input.runId);
39
+ return match.controller.control(input);
40
+ },
41
+ };
42
+ }
43
+ export function createLocalCodeBackgroundAgentController() {
44
+ return {
45
+ list: listBackgroundAgentRuns,
46
+ get: getBackgroundAgentRun,
47
+ transcript: listBackgroundAgentTranscriptEvents,
48
+ sendFollowUp: sendLocalCodeBackgroundAgentFollowUp,
49
+ control: controlLocalCodeBackgroundAgentRun,
50
+ };
51
+ }
52
+ export const localCodeBackgroundAgentController = createLocalCodeBackgroundAgentController();
53
+ async function sendLocalCodeBackgroundAgentFollowUp(input) {
54
+ const run = getCodeAgentRunRecord(input.runId);
55
+ if (!run) {
56
+ return missingRunResult(input.runId);
57
+ }
58
+ const prompt = input.prompt.trim();
59
+ if (!prompt) {
60
+ return {
61
+ ok: false,
62
+ runId: input.runId,
63
+ run: toBackgroundAgentRun(run),
64
+ error: "Follow-up prompt is required.",
65
+ };
66
+ }
67
+ const activeRun = input.permissionMode
68
+ ? (updateCodeAgentRunRecord(run.id, {
69
+ permissionMode: input.permissionMode,
70
+ }) ?? run)
71
+ : run;
72
+ const mode = input.mode ?? "immediate";
73
+ const shouldQueue = activeRun.status === "queued" || isActiveCodeAgentRun(activeRun);
74
+ const event = appendCodeAgentTranscriptEvent({
75
+ runId: activeRun.id,
76
+ kind: "user",
77
+ message: prompt,
78
+ metadata: {
79
+ ...(input.metadata ?? {}),
80
+ source: input.source ?? "background-agent-controller",
81
+ permissionMode: input.permissionMode,
82
+ followUpMode: mode,
83
+ delivery: shouldQueue ? mode : "run-now",
84
+ },
85
+ });
86
+ if (shouldQueue) {
87
+ queueCodeAgentFollowUp({
88
+ runId: activeRun.id,
89
+ prompt,
90
+ mode,
91
+ eventId: event.id,
92
+ permissionMode: input.permissionMode,
93
+ source: input.source ?? "background-agent-controller",
94
+ createdAt: event.createdAt,
95
+ });
96
+ return {
97
+ ok: true,
98
+ runId: activeRun.id,
99
+ run: currentBackgroundRun(activeRun.id),
100
+ queued: true,
101
+ message: "Follow-up queued for the active Agent-Native Code run.",
102
+ };
103
+ }
104
+ const updated = await executeExistingCodeAgentRun(activeRun.id, {
105
+ prompt,
106
+ appendUserEvent: false,
107
+ model: input.model,
108
+ reasoningEffort: input.reasoningEffort,
109
+ stdout: input.stdout,
110
+ });
111
+ return {
112
+ ok: Boolean(updated),
113
+ runId: activeRun.id,
114
+ run: updated
115
+ ? toBackgroundAgentRun(updated)
116
+ : currentBackgroundRun(activeRun.id),
117
+ queued: false,
118
+ message: updated
119
+ ? "Follow-up executed for the Agent-Native Code run."
120
+ : undefined,
121
+ error: updated ? undefined : `Run not found: ${activeRun.id}`,
122
+ };
123
+ }
124
+ async function controlLocalCodeBackgroundAgentRun(input) {
125
+ const run = getCodeAgentRunRecord(input.runId);
126
+ if (!run) {
127
+ return missingRunResult(input.runId);
128
+ }
129
+ switch (input.command) {
130
+ case "approve": {
131
+ const approved = await executePendingCodeAgentApproval(run.id, {
132
+ stdout: input.stdout,
133
+ });
134
+ return {
135
+ ok: Boolean(approved),
136
+ runId: run.id,
137
+ run: approved
138
+ ? toBackgroundAgentRun(approved)
139
+ : currentBackgroundRun(run.id),
140
+ message: approved
141
+ ? "Pending approval executed for the Agent-Native Code run."
142
+ : undefined,
143
+ error: approved ? undefined : `Run not found: ${run.id}`,
144
+ };
145
+ }
146
+ case "resume":
147
+ case "retry": {
148
+ // A control action must return immediately — awaiting
149
+ // executeExistingCodeAgentRun() runs the entire code session
150
+ // (potentially minutes), which times out the HTTP/IPC caller.
151
+ // Kick the run off in the background; progress is surfaced via the
152
+ // transcript/poll, exactly like the initial run start.
153
+ void executeExistingCodeAgentRun(run.id, {
154
+ stdout: input.stdout,
155
+ }).catch((err) => {
156
+ appendCodeAgentTranscriptEvent({
157
+ runId: run.id,
158
+ kind: "status",
159
+ message: `Background ${input.command} failed: ${err instanceof Error ? err.message : String(err)}`,
160
+ metadata: {
161
+ source: "background-agent-controller",
162
+ command: input.command,
163
+ failed: true,
164
+ },
165
+ });
166
+ });
167
+ return {
168
+ ok: true,
169
+ runId: run.id,
170
+ run: currentBackgroundRun(run.id),
171
+ message: input.command === "resume"
172
+ ? "Agent-Native Code run resuming in the background."
173
+ : "Agent-Native Code run retrying in the background.",
174
+ };
175
+ }
176
+ case "stop":
177
+ return stopLocalCodeBackgroundAgentRun(run.id);
178
+ default: {
179
+ const exhaustive = input.command;
180
+ return {
181
+ ok: false,
182
+ runId: run.id,
183
+ run: currentBackgroundRun(run.id),
184
+ error: `Unsupported control command: ${String(exhaustive)}`,
185
+ };
186
+ }
187
+ }
188
+ }
189
+ function stopLocalCodeBackgroundAgentRun(runId) {
190
+ const run = getCodeAgentRunRecord(runId);
191
+ if (!run) {
192
+ return missingRunResult(runId);
193
+ }
194
+ if (run.status === "completed" || run.status === "errored") {
195
+ return {
196
+ ok: true,
197
+ runId,
198
+ run: toBackgroundAgentRun(run),
199
+ message: "Agent-Native Code run is already finished.",
200
+ };
201
+ }
202
+ appendCodeAgentTranscriptEvent({
203
+ runId,
204
+ kind: "status",
205
+ message: "Stop requested for Agent-Native Code run. No process signal was sent.",
206
+ metadata: {
207
+ source: "background-agent-controller",
208
+ stoppedWithoutSignal: true,
209
+ },
210
+ });
211
+ const updated = updateCodeAgentRunRecord(runId, {
212
+ status: "paused",
213
+ phase: "stopped",
214
+ progress: {
215
+ label: "Stopped",
216
+ completed: 0,
217
+ total: 1,
218
+ percent: 0,
219
+ },
220
+ metadata: {
221
+ runnerState: "stopped",
222
+ stoppedAt: new Date().toISOString(),
223
+ stoppedBy: "background-agent-controller",
224
+ stopSignalSent: false,
225
+ },
226
+ });
227
+ return {
228
+ ok: Boolean(updated),
229
+ runId,
230
+ run: updated ? toBackgroundAgentRun(updated) : null,
231
+ message: updated
232
+ ? "Agent-Native Code run marked stopped without signaling a process."
233
+ : undefined,
234
+ error: updated ? undefined : `Run not found: ${runId}`,
235
+ };
236
+ }
237
+ function currentBackgroundRun(runId) {
238
+ const run = getCodeAgentRunRecord(runId);
239
+ return run ? toBackgroundAgentRun(run) : null;
240
+ }
241
+ function missingRunResult(runId) {
242
+ return {
243
+ ok: false,
244
+ runId,
245
+ run: null,
246
+ error: `Run not found: ${runId}`,
247
+ };
248
+ }
249
+ //# sourceMappingURL=background-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-controller.js","sourceRoot":"","sources":["../../src/code-agents/background-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n executeExistingCodeAgentRun,\n executePendingCodeAgentApproval,\n} from \"../cli/code-agent-executor.js\";\nimport {\n appendCodeAgentTranscriptEvent,\n getCodeAgentRunRecord,\n isActiveCodeAgentRun,\n queueCodeAgentFollowUp,\n updateCodeAgentRunRecord,\n type CodeAgentFollowUpMode,\n type CodeAgentPermissionMode,\n} from \"../cli/code-agent-runs.js\";\nimport {\n getBackgroundAgentRun,\n listBackgroundAgentRuns,\n listBackgroundAgentTranscriptEvents,\n toBackgroundAgentRun,\n type BackgroundAgentRun,\n type BackgroundAgentTranscriptEvent,\n type ListBackgroundAgentRunsOptions,\n} from \"./background-run.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\n\nexport type BackgroundAgentControlCommand =\n | \"approve\"\n | \"resume\"\n | \"retry\"\n | \"stop\";\n\nexport interface BackgroundAgentControlInput {\n runId: string;\n command: BackgroundAgentControlCommand;\n stdout?: NodeJS.WritableStream;\n}\n\nexport interface BackgroundAgentFollowUpInput {\n runId: string;\n prompt: string;\n mode?: CodeAgentFollowUpMode;\n permissionMode?: CodeAgentPermissionMode;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n source?: string;\n metadata?: Record<string, unknown>;\n stdout?: NodeJS.WritableStream;\n}\n\nexport interface BackgroundAgentControlResult {\n ok: boolean;\n runId: string;\n run: BackgroundAgentRun | null;\n queued?: boolean;\n message?: string;\n error?: string;\n}\n\nexport interface BackgroundAgentController {\n list(\n options?: ListBackgroundAgentRunsOptions,\n ): Promise<BackgroundAgentRun[]> | BackgroundAgentRun[];\n get(\n runId: string,\n ): Promise<BackgroundAgentRun | null> | BackgroundAgentRun | null;\n transcript(\n runId: string,\n ):\n | Promise<BackgroundAgentTranscriptEvent[]>\n | BackgroundAgentTranscriptEvent[];\n sendFollowUp(\n input: BackgroundAgentFollowUpInput,\n ): Promise<BackgroundAgentControlResult>;\n control(\n input: BackgroundAgentControlInput,\n ): Promise<BackgroundAgentControlResult>;\n}\n\nexport function createCompositeBackgroundAgentController(\n controllers: BackgroundAgentController[],\n): BackgroundAgentController {\n const resolveControllerForRun = async (\n runId: string,\n ): Promise<{\n controller: BackgroundAgentController;\n run: BackgroundAgentRun;\n } | null> => {\n for (const controller of controllers) {\n const run = await Promise.resolve(controller.get(runId));\n if (run) return { controller, run };\n }\n return null;\n };\n\n return {\n async list(options?: ListBackgroundAgentRunsOptions) {\n const groups = await Promise.all(\n controllers.map((controller) =>\n Promise.resolve(controller.list(options)).catch(() => []),\n ),\n );\n return groups\n .flat()\n .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));\n },\n async get(runId: string) {\n return (await resolveControllerForRun(runId))?.run ?? null;\n },\n async transcript(runId: string) {\n const match = await resolveControllerForRun(runId);\n if (!match) return [];\n return Promise.resolve(match.controller.transcript(runId));\n },\n async sendFollowUp(input: BackgroundAgentFollowUpInput) {\n const match = await resolveControllerForRun(input.runId);\n if (!match) return missingRunResult(input.runId);\n return match.controller.sendFollowUp(input);\n },\n async control(input: BackgroundAgentControlInput) {\n const match = await resolveControllerForRun(input.runId);\n if (!match) return missingRunResult(input.runId);\n return match.controller.control(input);\n },\n };\n}\n\nexport function createLocalCodeBackgroundAgentController(): BackgroundAgentController {\n return {\n list: listBackgroundAgentRuns,\n get: getBackgroundAgentRun,\n transcript: listBackgroundAgentTranscriptEvents,\n sendFollowUp: sendLocalCodeBackgroundAgentFollowUp,\n control: controlLocalCodeBackgroundAgentRun,\n };\n}\n\nexport const localCodeBackgroundAgentController =\n createLocalCodeBackgroundAgentController();\n\nasync function sendLocalCodeBackgroundAgentFollowUp(\n input: BackgroundAgentFollowUpInput,\n): Promise<BackgroundAgentControlResult> {\n const run = getCodeAgentRunRecord(input.runId);\n if (!run) {\n return missingRunResult(input.runId);\n }\n\n const prompt = input.prompt.trim();\n if (!prompt) {\n return {\n ok: false,\n runId: input.runId,\n run: toBackgroundAgentRun(run),\n error: \"Follow-up prompt is required.\",\n };\n }\n\n const activeRun = input.permissionMode\n ? (updateCodeAgentRunRecord(run.id, {\n permissionMode: input.permissionMode,\n }) ?? run)\n : run;\n const mode = input.mode ?? \"immediate\";\n const shouldQueue =\n activeRun.status === \"queued\" || isActiveCodeAgentRun(activeRun);\n const event = appendCodeAgentTranscriptEvent({\n runId: activeRun.id,\n kind: \"user\",\n message: prompt,\n metadata: {\n ...(input.metadata ?? {}),\n source: input.source ?? \"background-agent-controller\",\n permissionMode: input.permissionMode,\n followUpMode: mode,\n delivery: shouldQueue ? mode : \"run-now\",\n },\n });\n\n if (shouldQueue) {\n queueCodeAgentFollowUp({\n runId: activeRun.id,\n prompt,\n mode,\n eventId: event.id,\n permissionMode: input.permissionMode,\n source: input.source ?? \"background-agent-controller\",\n createdAt: event.createdAt,\n });\n return {\n ok: true,\n runId: activeRun.id,\n run: currentBackgroundRun(activeRun.id),\n queued: true,\n message: \"Follow-up queued for the active Agent-Native Code run.\",\n };\n }\n\n const updated = await executeExistingCodeAgentRun(activeRun.id, {\n prompt,\n appendUserEvent: false,\n model: input.model,\n reasoningEffort: input.reasoningEffort,\n stdout: input.stdout,\n });\n return {\n ok: Boolean(updated),\n runId: activeRun.id,\n run: updated\n ? toBackgroundAgentRun(updated)\n : currentBackgroundRun(activeRun.id),\n queued: false,\n message: updated\n ? \"Follow-up executed for the Agent-Native Code run.\"\n : undefined,\n error: updated ? undefined : `Run not found: ${activeRun.id}`,\n };\n}\n\nasync function controlLocalCodeBackgroundAgentRun(\n input: BackgroundAgentControlInput,\n): Promise<BackgroundAgentControlResult> {\n const run = getCodeAgentRunRecord(input.runId);\n if (!run) {\n return missingRunResult(input.runId);\n }\n\n switch (input.command) {\n case \"approve\": {\n const approved = await executePendingCodeAgentApproval(run.id, {\n stdout: input.stdout,\n });\n return {\n ok: Boolean(approved),\n runId: run.id,\n run: approved\n ? toBackgroundAgentRun(approved)\n : currentBackgroundRun(run.id),\n message: approved\n ? \"Pending approval executed for the Agent-Native Code run.\"\n : undefined,\n error: approved ? undefined : `Run not found: ${run.id}`,\n };\n }\n case \"resume\":\n case \"retry\": {\n // A control action must return immediately — awaiting\n // executeExistingCodeAgentRun() runs the entire code session\n // (potentially minutes), which times out the HTTP/IPC caller.\n // Kick the run off in the background; progress is surfaced via the\n // transcript/poll, exactly like the initial run start.\n void executeExistingCodeAgentRun(run.id, {\n stdout: input.stdout,\n }).catch((err) => {\n appendCodeAgentTranscriptEvent({\n runId: run.id,\n kind: \"status\",\n message: `Background ${input.command} failed: ${\n err instanceof Error ? err.message : String(err)\n }`,\n metadata: {\n source: \"background-agent-controller\",\n command: input.command,\n failed: true,\n },\n });\n });\n return {\n ok: true,\n runId: run.id,\n run: currentBackgroundRun(run.id),\n message:\n input.command === \"resume\"\n ? \"Agent-Native Code run resuming in the background.\"\n : \"Agent-Native Code run retrying in the background.\",\n };\n }\n case \"stop\":\n return stopLocalCodeBackgroundAgentRun(run.id);\n default: {\n const exhaustive: never = input.command;\n return {\n ok: false,\n runId: run.id,\n run: currentBackgroundRun(run.id),\n error: `Unsupported control command: ${String(exhaustive)}`,\n };\n }\n }\n}\n\nfunction stopLocalCodeBackgroundAgentRun(\n runId: string,\n): BackgroundAgentControlResult {\n const run = getCodeAgentRunRecord(runId);\n if (!run) {\n return missingRunResult(runId);\n }\n\n if (run.status === \"completed\" || run.status === \"errored\") {\n return {\n ok: true,\n runId,\n run: toBackgroundAgentRun(run),\n message: \"Agent-Native Code run is already finished.\",\n };\n }\n\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message:\n \"Stop requested for Agent-Native Code run. No process signal was sent.\",\n metadata: {\n source: \"background-agent-controller\",\n stoppedWithoutSignal: true,\n },\n });\n const updated = updateCodeAgentRunRecord(runId, {\n status: \"paused\",\n phase: \"stopped\",\n progress: {\n label: \"Stopped\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n metadata: {\n runnerState: \"stopped\",\n stoppedAt: new Date().toISOString(),\n stoppedBy: \"background-agent-controller\",\n stopSignalSent: false,\n },\n });\n\n return {\n ok: Boolean(updated),\n runId,\n run: updated ? toBackgroundAgentRun(updated) : null,\n message: updated\n ? \"Agent-Native Code run marked stopped without signaling a process.\"\n : undefined,\n error: updated ? undefined : `Run not found: ${runId}`,\n };\n}\n\nfunction currentBackgroundRun(runId: string): BackgroundAgentRun | null {\n const run = getCodeAgentRunRecord(runId);\n return run ? toBackgroundAgentRun(run) : null;\n}\n\nfunction missingRunResult(runId: string): BackgroundAgentControlResult {\n return {\n ok: false,\n runId,\n run: null,\n error: `Run not found: ${runId}`,\n };\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { type CodeAgentPermissionMode, type CodeAgentRunDetail, type CodeAgentRunProgress, type CodeAgentRunRecord, type CodeAgentRunStatus, type CodeAgentTranscriptEvent, type CodeAgentTranscriptEventKind } from "../cli/code-agent-runs.js";
2
+ export type BackgroundAgentRunKind = "code" | "agent-team";
3
+ export type BackgroundAgentRunSource = "local-code" | "hosted-agent-team";
4
+ export type BackgroundAgentRunStatus = CodeAgentRunStatus;
5
+ export interface BackgroundAgentRunSourceRecord {
6
+ type: "code-agent-run" | "agent-team-task";
7
+ id: string;
8
+ threadId?: string;
9
+ }
10
+ export interface BackgroundAgentRun {
11
+ schemaVersion: 1;
12
+ id: string;
13
+ kind: BackgroundAgentRunKind;
14
+ source: BackgroundAgentRunSource;
15
+ sourceLabel?: string;
16
+ sourceRecord: BackgroundAgentRunSourceRecord;
17
+ title: string;
18
+ subtitle?: string;
19
+ status: BackgroundAgentRunStatus;
20
+ phase?: string;
21
+ cwd?: string;
22
+ createdAt: string;
23
+ updatedAt: string;
24
+ goalId: string;
25
+ permissionMode?: CodeAgentPermissionMode;
26
+ progress?: CodeAgentRunProgress;
27
+ needsInput: boolean;
28
+ needsApproval: boolean;
29
+ details?: CodeAgentRunDetail[];
30
+ transcriptPath?: string;
31
+ artifactRoot?: string;
32
+ surfaceUrl?: string;
33
+ metadata?: Record<string, unknown>;
34
+ }
35
+ export interface BackgroundAgentTranscriptEvent {
36
+ schemaVersion: 1;
37
+ id: string;
38
+ runId: string;
39
+ kind: CodeAgentTranscriptEventKind;
40
+ source: BackgroundAgentRunSource;
41
+ sourceRecord: {
42
+ type: "code-agent-transcript-event" | "agent-team-run-event";
43
+ id: string;
44
+ seq?: number;
45
+ };
46
+ message: string;
47
+ createdAt: string;
48
+ metadata?: Record<string, unknown>;
49
+ }
50
+ export interface ListBackgroundAgentRunsOptions {
51
+ goalId?: string;
52
+ }
53
+ export declare function toBackgroundAgentRun(run: CodeAgentRunRecord): BackgroundAgentRun;
54
+ export declare function toBackgroundAgentTranscriptEvent(event: CodeAgentTranscriptEvent): BackgroundAgentTranscriptEvent;
55
+ export declare function listBackgroundAgentRuns(options?: ListBackgroundAgentRunsOptions): BackgroundAgentRun[];
56
+ export declare function getBackgroundAgentRun(runId: string): BackgroundAgentRun | null;
57
+ export declare function listBackgroundAgentTranscriptEvents(runId: string): BackgroundAgentTranscriptEvent[];
58
+ //# sourceMappingURL=background-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-run.d.ts","sourceRoot":"","sources":["../../src/code-agents/background-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,YAAY,CAAC;AAE3D,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAE1D,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,8BAA8B,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,4BAA4B,CAAC;IACnC,MAAM,EAAE,wBAAwB,CAAC;IACjC,YAAY,EAAE;QACZ,IAAI,EAAE,6BAA6B,GAAG,sBAAsB,CAAC;QAC7D,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,GACtB,kBAAkB,CA8BpB;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,wBAAwB,GAC9B,8BAA8B,CAehC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,kBAAkB,EAAE,CAEtB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,kBAAkB,GAAG,IAAI,CAG3B;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,GACZ,8BAA8B,EAAE,CAIlC"}
@@ -0,0 +1,58 @@
1
+ import { codeAgentRunArtifactsDir, codeAgentRunTranscriptPath, getCodeAgentRunRecord, listCodeAgentRunRecords, listCodeAgentTranscriptEvents, } from "../cli/code-agent-runs.js";
2
+ export function toBackgroundAgentRun(run) {
3
+ return {
4
+ schemaVersion: 1,
5
+ id: run.id,
6
+ kind: "code",
7
+ source: "local-code",
8
+ sourceLabel: "Local Code",
9
+ sourceRecord: {
10
+ type: "code-agent-run",
11
+ id: run.id,
12
+ },
13
+ title: run.title,
14
+ subtitle: run.subtitle,
15
+ status: run.status,
16
+ phase: run.phase,
17
+ cwd: run.cwd,
18
+ createdAt: run.createdAt,
19
+ updatedAt: run.updatedAt,
20
+ goalId: run.goalId,
21
+ permissionMode: run.permissionMode,
22
+ progress: run.progress,
23
+ needsInput: run.status === "paused" || run.status === "needs-approval",
24
+ needsApproval: run.needsApproval === true || run.status === "needs-approval",
25
+ details: run.details,
26
+ transcriptPath: codeAgentRunTranscriptPath(run.id),
27
+ artifactRoot: run.artifactRoot ?? codeAgentRunArtifactsDir(run.id),
28
+ surfaceUrl: run.surfaceUrl,
29
+ metadata: run.metadata,
30
+ };
31
+ }
32
+ export function toBackgroundAgentTranscriptEvent(event) {
33
+ return {
34
+ schemaVersion: 1,
35
+ id: event.id,
36
+ runId: event.runId,
37
+ kind: event.kind,
38
+ source: "local-code",
39
+ sourceRecord: {
40
+ type: "code-agent-transcript-event",
41
+ id: event.id,
42
+ },
43
+ message: event.message,
44
+ createdAt: event.createdAt,
45
+ metadata: event.metadata,
46
+ };
47
+ }
48
+ export function listBackgroundAgentRuns(options = {}) {
49
+ return listCodeAgentRunRecords(options.goalId).map(toBackgroundAgentRun);
50
+ }
51
+ export function getBackgroundAgentRun(runId) {
52
+ const run = getCodeAgentRunRecord(runId);
53
+ return run ? toBackgroundAgentRun(run) : null;
54
+ }
55
+ export function listBackgroundAgentTranscriptEvents(runId) {
56
+ return listCodeAgentTranscriptEvents(runId).map(toBackgroundAgentTranscriptEvent);
57
+ }
58
+ //# sourceMappingURL=background-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-run.js","sourceRoot":"","sources":["../../src/code-agents/background-run.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,GAQ9B,MAAM,2BAA2B,CAAC;AA4DnC,MAAM,UAAU,oBAAoB,CAClC,GAAuB;IAEvB,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE;YACZ,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,GAAG,CAAC,EAAE;SACX;QACD,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB;QACtE,aAAa,EACX,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB;QAC/D,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,cAAc,EAAE,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAA+B;IAE/B,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,YAAY;QACpB,YAAY,EAAE;YACZ,IAAI,EAAE,6BAA6B;YACnC,EAAE,EAAE,KAAK,CAAC,EAAE;SACb;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA0C,EAAE;IAE5C,OAAO,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAa;IAEb,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,KAAa;IAEb,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG,CAC7C,gCAAgC,CACjC,CAAC;AACJ,CAAC","sourcesContent":["import {\n codeAgentRunArtifactsDir,\n codeAgentRunTranscriptPath,\n getCodeAgentRunRecord,\n listCodeAgentRunRecords,\n listCodeAgentTranscriptEvents,\n type CodeAgentPermissionMode,\n type CodeAgentRunDetail,\n type CodeAgentRunProgress,\n type CodeAgentRunRecord,\n type CodeAgentRunStatus,\n type CodeAgentTranscriptEvent,\n type CodeAgentTranscriptEventKind,\n} from \"../cli/code-agent-runs.js\";\n\nexport type BackgroundAgentRunKind = \"code\" | \"agent-team\";\n\nexport type BackgroundAgentRunSource = \"local-code\" | \"hosted-agent-team\";\n\nexport type BackgroundAgentRunStatus = CodeAgentRunStatus;\n\nexport interface BackgroundAgentRunSourceRecord {\n type: \"code-agent-run\" | \"agent-team-task\";\n id: string;\n threadId?: string;\n}\n\nexport interface BackgroundAgentRun {\n schemaVersion: 1;\n id: string;\n kind: BackgroundAgentRunKind;\n source: BackgroundAgentRunSource;\n sourceLabel?: string;\n sourceRecord: BackgroundAgentRunSourceRecord;\n title: string;\n subtitle?: string;\n status: BackgroundAgentRunStatus;\n phase?: string;\n cwd?: string;\n createdAt: string;\n updatedAt: string;\n goalId: string;\n permissionMode?: CodeAgentPermissionMode;\n progress?: CodeAgentRunProgress;\n needsInput: boolean;\n needsApproval: boolean;\n details?: CodeAgentRunDetail[];\n transcriptPath?: string;\n artifactRoot?: string;\n surfaceUrl?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface BackgroundAgentTranscriptEvent {\n schemaVersion: 1;\n id: string;\n runId: string;\n kind: CodeAgentTranscriptEventKind;\n source: BackgroundAgentRunSource;\n sourceRecord: {\n type: \"code-agent-transcript-event\" | \"agent-team-run-event\";\n id: string;\n seq?: number;\n };\n message: string;\n createdAt: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ListBackgroundAgentRunsOptions {\n goalId?: string;\n}\n\nexport function toBackgroundAgentRun(\n run: CodeAgentRunRecord,\n): BackgroundAgentRun {\n return {\n schemaVersion: 1,\n id: run.id,\n kind: \"code\",\n source: \"local-code\",\n sourceLabel: \"Local Code\",\n sourceRecord: {\n type: \"code-agent-run\",\n id: run.id,\n },\n title: run.title,\n subtitle: run.subtitle,\n status: run.status,\n phase: run.phase,\n cwd: run.cwd,\n createdAt: run.createdAt,\n updatedAt: run.updatedAt,\n goalId: run.goalId,\n permissionMode: run.permissionMode,\n progress: run.progress,\n needsInput: run.status === \"paused\" || run.status === \"needs-approval\",\n needsApproval:\n run.needsApproval === true || run.status === \"needs-approval\",\n details: run.details,\n transcriptPath: codeAgentRunTranscriptPath(run.id),\n artifactRoot: run.artifactRoot ?? codeAgentRunArtifactsDir(run.id),\n surfaceUrl: run.surfaceUrl,\n metadata: run.metadata,\n };\n}\n\nexport function toBackgroundAgentTranscriptEvent(\n event: CodeAgentTranscriptEvent,\n): BackgroundAgentTranscriptEvent {\n return {\n schemaVersion: 1,\n id: event.id,\n runId: event.runId,\n kind: event.kind,\n source: \"local-code\",\n sourceRecord: {\n type: \"code-agent-transcript-event\",\n id: event.id,\n },\n message: event.message,\n createdAt: event.createdAt,\n metadata: event.metadata,\n };\n}\n\nexport function listBackgroundAgentRuns(\n options: ListBackgroundAgentRunsOptions = {},\n): BackgroundAgentRun[] {\n return listCodeAgentRunRecords(options.goalId).map(toBackgroundAgentRun);\n}\n\nexport function getBackgroundAgentRun(\n runId: string,\n): BackgroundAgentRun | null {\n const run = getCodeAgentRunRecord(runId);\n return run ? toBackgroundAgentRun(run) : null;\n}\n\nexport function listBackgroundAgentTranscriptEvents(\n runId: string,\n): BackgroundAgentTranscriptEvent[] {\n return listCodeAgentTranscriptEvents(runId).map(\n toBackgroundAgentTranscriptEvent,\n );\n}\n"]}
@@ -1,3 +1,5 @@
1
+ export { createCompositeBackgroundAgentController, createLocalCodeBackgroundAgentController, localCodeBackgroundAgentController, type BackgroundAgentController, type BackgroundAgentControlCommand, type BackgroundAgentControlInput, type BackgroundAgentControlResult, type BackgroundAgentFollowUpInput, } from "./background-controller.js";
2
+ export { getBackgroundAgentRun, listBackgroundAgentRuns, listBackgroundAgentTranscriptEvents, toBackgroundAgentRun, toBackgroundAgentTranscriptEvent, type BackgroundAgentRun, type BackgroundAgentRunKind, type BackgroundAgentRunSource, type BackgroundAgentRunSourceRecord, type BackgroundAgentRunStatus, type BackgroundAgentTranscriptEvent, type ListBackgroundAgentRunsOptions, } from "./background-run.js";
1
3
  export { CODE_AGENT_PERMISSION_MODES, appendCodeAgentTranscriptEvent, codeAgentRunArtifactsDir, codeAgentRunTranscriptPath, codeAgentRunsDir, codeAgentStoreRoot, codeAgentTranscriptsDir, createCodeAgentRunRecord, getCodeAgentRunRecord, getLastCodeAgentRunRecord, isActiveCodeAgentRun, listCodeAgentRunRecords, listCodeAgentTranscriptEvents, normalizeCodeAgentPermissionMode, queueCodeAgentFollowUp, updateCodeAgentRunRecord, type AppendCodeAgentTranscriptEventInput, type CodeAgentPermissionMode, type CodeAgentRunDetail, type CodeAgentRunProgress, type CodeAgentRunRecord, type CodeAgentRunStatus, type CodeAgentTranscriptEvent, type CodeAgentTranscriptEventKind, type CreateCodeAgentRunInput, type CodeAgentFollowUpMode, type QueueCodeAgentFollowUpInput, } from "../cli/code-agent-runs.js";
2
4
  export { findProjectSlashCommand, isReservedProjectSlashCommandName, listProjectSkills, listProjectSlashCommands, listVisibleProjectSlashCommands, readProjectCodePack, renderProjectSlashCommandPrompt, type CodeAgentCodePack, type CodeAgentProjectCommand, type CodeAgentProjectSkill, type ReadProjectCodePackOptions, } from "../cli/code-agent-commands.js";
3
5
  export { executeCodeAgentRun, executeExistingCodeAgentRun, executePendingCodeAgentApproval, type ExecuteCodeAgentRunOptions, } from "../cli/code-agent-executor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/code-agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mCAAmC,EACxC,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,iBAAiB,EACjB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/code-agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wCAAwC,EACxC,wCAAwC,EACxC,kCAAkC,EAClC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,mCAAmC,EACnC,oBAAoB,EACpB,gCAAgC,EAChC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,GACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mCAAmC,EACxC,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,iBAAiB,EACjB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAC"}
@@ -1,3 +1,5 @@
1
+ export { createCompositeBackgroundAgentController, createLocalCodeBackgroundAgentController, localCodeBackgroundAgentController, } from "./background-controller.js";
2
+ export { getBackgroundAgentRun, listBackgroundAgentRuns, listBackgroundAgentTranscriptEvents, toBackgroundAgentRun, toBackgroundAgentTranscriptEvent, } from "./background-run.js";
1
3
  export { CODE_AGENT_PERMISSION_MODES, appendCodeAgentTranscriptEvent, codeAgentRunArtifactsDir, codeAgentRunTranscriptPath, codeAgentRunsDir, codeAgentStoreRoot, codeAgentTranscriptsDir, createCodeAgentRunRecord, getCodeAgentRunRecord, getLastCodeAgentRunRecord, isActiveCodeAgentRun, listCodeAgentRunRecords, listCodeAgentTranscriptEvents, normalizeCodeAgentPermissionMode, queueCodeAgentFollowUp, updateCodeAgentRunRecord, } from "../cli/code-agent-runs.js";
2
4
  export { findProjectSlashCommand, isReservedProjectSlashCommandName, listProjectSkills, listProjectSlashCommands, listVisibleProjectSlashCommands, readProjectCodePack, renderProjectSlashCommandPrompt, } from "../cli/code-agent-commands.js";
3
5
  export { executeCodeAgentRun, executeExistingCodeAgentRun, executePendingCodeAgentApproval, } from "../cli/code-agent-executor.js";