agent-tower 0.7.1-beta.3 → 0.7.1-beta.4
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/dist/executors/__tests__/base.executor.test.js +2 -2
- package/dist/executors/__tests__/base.executor.test.js.map +1 -1
- package/dist/executors/__tests__/codex.executor.test.js +137 -25
- package/dist/executors/__tests__/codex.executor.test.js.map +1 -1
- package/dist/executors/__tests__/providers.test.js +69 -2
- package/dist/executors/__tests__/providers.test.js.map +1 -1
- package/dist/executors/__tests__/stdin-prompt.executors.test.js +61 -3
- package/dist/executors/__tests__/stdin-prompt.executors.test.js.map +1 -1
- package/dist/executors/base.executor.d.ts +8 -1
- package/dist/executors/base.executor.d.ts.map +1 -1
- package/dist/executors/base.executor.js +22 -8
- package/dist/executors/base.executor.js.map +1 -1
- package/dist/executors/claude-code.executor.d.ts +2 -0
- package/dist/executors/claude-code.executor.d.ts.map +1 -1
- package/dist/executors/claude-code.executor.js +51 -41
- package/dist/executors/claude-code.executor.js.map +1 -1
- package/dist/executors/codex.executor.d.ts +3 -0
- package/dist/executors/codex.executor.d.ts.map +1 -1
- package/dist/executors/codex.executor.js +35 -1
- package/dist/executors/codex.executor.js.map +1 -1
- package/dist/executors/cursor-agent.executor.d.ts +1 -0
- package/dist/executors/cursor-agent.executor.d.ts.map +1 -1
- package/dist/executors/cursor-agent.executor.js +2 -0
- package/dist/executors/cursor-agent.executor.js.map +1 -1
- package/dist/executors/default-providers.json +45 -39
- package/dist/executors/gemini-cli.executor.d.ts +3 -1
- package/dist/executors/gemini-cli.executor.d.ts.map +1 -1
- package/dist/executors/gemini-cli.executor.js +18 -12
- package/dist/executors/gemini-cli.executor.js.map +1 -1
- package/dist/executors/index.d.ts +4 -0
- package/dist/executors/index.d.ts.map +1 -1
- package/dist/executors/index.js +14 -4
- package/dist/executors/index.js.map +1 -1
- package/dist/executors/providers.d.ts +4 -1
- package/dist/executors/providers.d.ts.map +1 -1
- package/dist/executors/providers.js +20 -5
- package/dist/executors/providers.js.map +1 -1
- package/dist/output/__tests__/claude-code-parser-lifecycle.test.d.ts +2 -0
- package/dist/output/__tests__/claude-code-parser-lifecycle.test.d.ts.map +1 -0
- package/dist/output/__tests__/claude-code-parser-lifecycle.test.js +84 -0
- package/dist/output/__tests__/claude-code-parser-lifecycle.test.js.map +1 -0
- package/dist/output/claude-code-parser.d.ts +14 -2
- package/dist/output/claude-code-parser.d.ts.map +1 -1
- package/dist/output/claude-code-parser.js +55 -8
- package/dist/output/claude-code-parser.js.map +1 -1
- package/dist/pipeline/__tests__/agent-pipeline.test.js +48 -1
- package/dist/pipeline/__tests__/agent-pipeline.test.js.map +1 -1
- package/dist/pipeline/agent-pipeline.d.ts +6 -1
- package/dist/pipeline/agent-pipeline.d.ts.map +1 -1
- package/dist/pipeline/agent-pipeline.js +42 -4
- package/dist/pipeline/agent-pipeline.js.map +1 -1
- package/dist/routes/__tests__/providers.test.js +287 -12
- package/dist/routes/__tests__/providers.test.js.map +1 -1
- package/dist/routes/__tests__/sessions-runtime.test.js +9 -0
- package/dist/routes/__tests__/sessions-runtime.test.js.map +1 -1
- package/dist/routes/providers.d.ts +2 -0
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +79 -34
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/sessions.js +2 -2
- package/dist/routes/sessions.js.map +1 -1
- package/dist/runtime/__tests__/acp-agent-definitions.test.js +54 -6
- package/dist/runtime/__tests__/acp-agent-definitions.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js +85 -12
- package/dist/runtime/__tests__/acp-driver-lifecycle.test.js.map +1 -1
- package/dist/runtime/__tests__/acp-driver.test.js +38 -1
- package/dist/runtime/__tests__/acp-driver.test.js.map +1 -1
- package/dist/runtime/__tests__/claude-cli-control.test.d.ts +2 -0
- package/dist/runtime/__tests__/claude-cli-control.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/claude-cli-control.test.js +147 -0
- package/dist/runtime/__tests__/claude-cli-control.test.js.map +1 -0
- package/dist/runtime/__tests__/claude-cli-driver.test.d.ts +2 -0
- package/dist/runtime/__tests__/claude-cli-driver.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/claude-cli-driver.test.js +327 -0
- package/dist/runtime/__tests__/claude-cli-driver.test.js.map +1 -0
- package/dist/runtime/__tests__/cli-driver-lifecycle.test.js +107 -2
- package/dist/runtime/__tests__/cli-driver-lifecycle.test.js.map +1 -1
- package/dist/runtime/__tests__/codex-cli-control.test.d.ts +2 -0
- package/dist/runtime/__tests__/codex-cli-control.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js +287 -0
- package/dist/runtime/__tests__/codex-cli-control.test.js.map +1 -0
- package/dist/runtime/__tests__/codex-cli-identity.test.d.ts +2 -0
- package/dist/runtime/__tests__/codex-cli-identity.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/codex-cli-identity.test.js +166 -0
- package/dist/runtime/__tests__/codex-cli-identity.test.js.map +1 -0
- package/dist/runtime/__tests__/codex-runtime-resolution.test.js +34 -0
- package/dist/runtime/__tests__/codex-runtime-resolution.test.js.map +1 -1
- package/dist/runtime/__tests__/runtime-coordinator.test.js +74 -0
- package/dist/runtime/__tests__/runtime-coordinator.test.js.map +1 -1
- package/dist/runtime/acp/acp-driver.d.ts.map +1 -1
- package/dist/runtime/acp/acp-driver.js +27 -9
- package/dist/runtime/acp/acp-driver.js.map +1 -1
- package/dist/runtime/acp/agents/claude-code.d.ts.map +1 -1
- package/dist/runtime/acp/agents/claude-code.js +6 -11
- package/dist/runtime/acp/agents/claude-code.js.map +1 -1
- package/dist/runtime/acp/agents/codex.d.ts.map +1 -1
- package/dist/runtime/acp/agents/codex.js +15 -6
- package/dist/runtime/acp/agents/codex.js.map +1 -1
- package/dist/runtime/acp/agents/cursor-agent.d.ts.map +1 -1
- package/dist/runtime/acp/agents/cursor-agent.js +2 -1
- package/dist/runtime/acp/agents/cursor-agent.js.map +1 -1
- package/dist/runtime/acp/agents/deepseek-hermes.js +3 -3
- package/dist/runtime/acp/agents/deepseek-hermes.js.map +1 -1
- package/dist/runtime/acp/agents/gemini-cli.d.ts.map +1 -1
- package/dist/runtime/acp/agents/gemini-cli.js +1 -0
- package/dist/runtime/acp/agents/gemini-cli.js.map +1 -1
- package/dist/runtime/acp/agents/grok-build.d.ts.map +1 -1
- package/dist/runtime/acp/agents/grok-build.js +4 -1
- package/dist/runtime/acp/agents/grok-build.js.map +1 -1
- package/dist/runtime/acp/agents/kiro-cli.d.ts.map +1 -1
- package/dist/runtime/acp/agents/kiro-cli.js +2 -1
- package/dist/runtime/acp/agents/kiro-cli.js.map +1 -1
- package/dist/runtime/acp/agents/minion-code.js +1 -1
- package/dist/runtime/acp/agents/minion-code.js.map +1 -1
- package/dist/runtime/acp/agents/native-agent.d.ts +2 -0
- package/dist/runtime/acp/agents/native-agent.d.ts.map +1 -1
- package/dist/runtime/acp/agents/native-agent.js +12 -16
- package/dist/runtime/acp/agents/native-agent.js.map +1 -1
- package/dist/runtime/acp/agents/opencode.d.ts.map +1 -1
- package/dist/runtime/acp/agents/opencode.js +50 -2
- package/dist/runtime/acp/agents/opencode.js.map +1 -1
- package/dist/runtime/acp/agents/pi-coding-agent.d.ts.map +1 -1
- package/dist/runtime/acp/agents/pi-coding-agent.js +2 -5
- package/dist/runtime/acp/agents/pi-coding-agent.js.map +1 -1
- package/dist/runtime/acp/agents/qwen-code.d.ts.map +1 -1
- package/dist/runtime/acp/agents/qwen-code.js +9 -11
- package/dist/runtime/acp/agents/qwen-code.js.map +1 -1
- package/dist/runtime/acp/agents/types.d.ts +4 -2
- package/dist/runtime/acp/agents/types.d.ts.map +1 -1
- package/dist/runtime/acp/codex-cli-identity.d.ts +52 -0
- package/dist/runtime/acp/codex-cli-identity.d.ts.map +1 -0
- package/dist/runtime/acp/codex-cli-identity.js +179 -0
- package/dist/runtime/acp/codex-cli-identity.js.map +1 -0
- package/dist/runtime/acp/codex-provider-config.d.ts +15 -2
- package/dist/runtime/acp/codex-provider-config.d.ts.map +1 -1
- package/dist/runtime/acp/codex-provider-config.js +42 -5
- package/dist/runtime/acp/codex-provider-config.js.map +1 -1
- package/dist/runtime/claude-cli-control.d.ts +32 -0
- package/dist/runtime/claude-cli-control.d.ts.map +1 -0
- package/dist/runtime/claude-cli-control.js +156 -0
- package/dist/runtime/claude-cli-control.js.map +1 -0
- package/dist/runtime/cli-action-summary.d.ts +3 -0
- package/dist/runtime/cli-action-summary.d.ts.map +1 -0
- package/dist/runtime/cli-action-summary.js +13 -0
- package/dist/runtime/cli-action-summary.js.map +1 -0
- package/dist/runtime/cli-driver.d.ts.map +1 -1
- package/dist/runtime/cli-driver.js +119 -26
- package/dist/runtime/cli-driver.js.map +1 -1
- package/dist/runtime/cli-parser.d.ts +4 -1
- package/dist/runtime/cli-parser.d.ts.map +1 -1
- package/dist/runtime/cli-parser.js +2 -2
- package/dist/runtime/cli-parser.js.map +1 -1
- package/dist/runtime/codex-cli-control.d.ts +63 -0
- package/dist/runtime/codex-cli-control.d.ts.map +1 -0
- package/dist/runtime/codex-cli-control.js +311 -0
- package/dist/runtime/codex-cli-control.js.map +1 -0
- package/dist/runtime/codex-cli-projector.d.ts +17 -0
- package/dist/runtime/codex-cli-projector.d.ts.map +1 -0
- package/dist/runtime/codex-cli-projector.js +80 -0
- package/dist/runtime/codex-cli-projector.js.map +1 -0
- package/dist/runtime/contracts.d.ts +12 -2
- package/dist/runtime/contracts.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.d.ts +1 -1
- package/dist/runtime/runtime-coordinator.d.ts.map +1 -1
- package/dist/runtime/runtime-coordinator.js +40 -6
- package/dist/runtime/runtime-coordinator.js.map +1 -1
- package/dist/services/__tests__/claude-cli-capabilities.service.test.d.ts +2 -0
- package/dist/services/__tests__/claude-cli-capabilities.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/claude-cli-capabilities.service.test.js +37 -0
- package/dist/services/__tests__/claude-cli-capabilities.service.test.js.map +1 -0
- package/dist/services/__tests__/codex-cli-capabilities.service.test.d.ts +2 -0
- package/dist/services/__tests__/codex-cli-capabilities.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/codex-cli-capabilities.service.test.js +35 -0
- package/dist/services/__tests__/codex-cli-capabilities.service.test.js.map +1 -0
- package/dist/services/__tests__/codex-model-capabilities.service.test.js +23 -2
- package/dist/services/__tests__/codex-model-capabilities.service.test.js.map +1 -1
- package/dist/services/__tests__/execution-permission.service.test.d.ts +2 -0
- package/dist/services/__tests__/execution-permission.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/execution-permission.service.test.js +111 -0
- package/dist/services/__tests__/execution-permission.service.test.js.map +1 -0
- package/dist/services/__tests__/provider-config.service.test.js +1 -0
- package/dist/services/__tests__/provider-config.service.test.js.map +1 -1
- package/dist/services/__tests__/session-manager.lifecycle.test.js +151 -3
- package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
- package/dist/services/claude-cli-capabilities.service.d.ts +11 -0
- package/dist/services/claude-cli-capabilities.service.d.ts.map +1 -0
- package/dist/services/claude-cli-capabilities.service.js +54 -0
- package/dist/services/claude-cli-capabilities.service.js.map +1 -0
- package/dist/services/codex-cli-capabilities.service.d.ts +12 -0
- package/dist/services/codex-cli-capabilities.service.d.ts.map +1 -0
- package/dist/services/codex-cli-capabilities.service.js +65 -0
- package/dist/services/codex-cli-capabilities.service.js.map +1 -0
- package/dist/services/codex-model-capabilities.service.d.ts.map +1 -1
- package/dist/services/codex-model-capabilities.service.js +12 -1
- package/dist/services/codex-model-capabilities.service.js.map +1 -1
- package/dist/services/execution-permission.service.d.ts +30 -0
- package/dist/services/execution-permission.service.d.ts.map +1 -0
- package/dist/services/execution-permission.service.js +149 -0
- package/dist/services/execution-permission.service.js.map +1 -0
- package/dist/services/provider-config.service.d.ts.map +1 -1
- package/dist/services/provider-config.service.js +19 -29
- package/dist/services/provider-config.service.js.map +1 -1
- package/dist/services/session-manager.d.ts +9 -7
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +46 -7
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/task.service.d.ts +4 -4
- package/dist/services/workspace.service.d.ts +7 -7
- package/dist/utils/cli-duplex-channel.d.ts +21 -0
- package/dist/utils/cli-duplex-channel.d.ts.map +1 -0
- package/dist/utils/cli-duplex-channel.js +200 -0
- package/dist/utils/cli-duplex-channel.js.map +1 -0
- package/dist/utils/cli-duplex-channel.test.d.ts +2 -0
- package/dist/utils/cli-duplex-channel.test.d.ts.map +1 -0
- package/dist/utils/cli-duplex-channel.test.js +191 -0
- package/dist/utils/cli-duplex-channel.test.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/process-launch.d.ts +3 -0
- package/dist/utils/process-launch.d.ts.map +1 -1
- package/dist/utils/process-launch.js +129 -10
- package/dist/utils/process-launch.js.map +1 -1
- package/dist/utils/process-launch.test.js +103 -0
- package/dist/utils/process-launch.test.js.map +1 -1
- package/dist/web/assets/{AgentDemoPage-B6pABvRL.js → AgentDemoPage-B__0_CPX.js} +1 -1
- package/dist/web/assets/{AgentEnvironmentSettingsPage-CqMfdwkM.js → AgentEnvironmentSettingsPage-uSnG5iV3.js} +1 -1
- package/dist/web/assets/{AgentLogo-Ntqe3_Mx.js → AgentLogo-CoAT8dNB.js} +1 -1
- package/dist/web/assets/ConversationPage-BOfzGTyj.js +3 -0
- package/dist/web/assets/CreateTaskInput-DwQsAlWX.js +1 -0
- package/dist/web/assets/{DemoPage-D1Ki6sJ0.js → DemoPage-CuDLCuUQ.js} +1 -1
- package/dist/web/assets/ExecutionPermissionSelector-Cu7Z72Yk.js +29 -0
- package/dist/web/assets/{GeneralSettingsPage-DoAXPabw.js → GeneralSettingsPage-CmG_TW4-.js} +1 -1
- package/dist/web/assets/{Icons-KJJd6C8K.js → Icons-B6q-ul89.js} +1 -1
- package/dist/web/assets/{LoadingPreviewPage-BqCKBvgv.js → LoadingPreviewPage-Db5WcYw_.js} +1 -1
- package/dist/web/assets/{McpSettingsPage-QXVD4XCW.js → McpSettingsPage-CQV1RaHW.js} +1 -1
- package/dist/web/assets/{MemberAvatar-kbJEoyh0.js → MemberAvatar-BQA5sE4L.js} +1 -1
- package/dist/web/assets/{NotificationSettingsPage-BrqSeU--.js → NotificationSettingsPage-BGKJ6wO0.js} +1 -1
- package/dist/web/assets/{ProfileSettingsPage-BmWgVdnG.js → ProfileSettingsPage-dTvp-LFa.js} +1 -1
- package/dist/web/assets/{ProjectKanbanPage-D7RJm4yg.js → ProjectKanbanPage-CHZc9WB7.js} +35 -35
- package/dist/web/assets/{ProjectSettingsPage-BVINN99w.js → ProjectSettingsPage-CwLXTwwe.js} +1 -1
- package/dist/web/assets/ProviderSettingsPage-Ced1VN2f.js +67 -0
- package/dist/web/assets/{SettingsMasterDetail-OF28cvPV.js → SettingsMasterDetail-CEZsOwjq.js} +1 -1
- package/dist/web/assets/{TeamSettingsPage-BWGm0m7s.js → TeamSettingsPage-lErIz31n.js} +1 -1
- package/dist/web/assets/{arc-CqFgRaZU.js → arc-CgQPLQJF.js} +1 -1
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-C0PMdIZJ.js → architectureDiagram-3BPJPVTR-BRns2_cB.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-SqqtxqkX.js → blockDiagram-GPEHLZMM-DUIPlzPN.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DYJXB3xL.js → c4Diagram-AAUBKEIU-BfWsGU4R.js} +1 -1
- package/dist/web/assets/channel-CYUMBIeW.js +1 -0
- package/dist/web/assets/check-C_RQ5zOf.js +1 -0
- package/dist/web/assets/{chevron-down-BZfpVhYr.js → chevron-down-Dz61D9cJ.js} +1 -1
- package/dist/web/assets/{chevron-right-D52zUyOF.js → chevron-right-q_hHAFb1.js} +1 -1
- package/dist/web/assets/{chevron-up-CFOy5dmW.js → chevron-up-ChWM4fJS.js} +1 -1
- package/dist/web/assets/{chunk-2J33WTMH-DQCbv8W_.js → chunk-2J33WTMH-DOverrRX.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-B_68_oNW.js → chunk-4BX2VUAB-BakE7rwb.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-Bb-pPIxs.js → chunk-55IACEB6-BJY_hqWJ.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-CAiaySk6.js → chunk-727SXJPM-Bz_y_ixN.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-ChCLJ4Wv.js → chunk-AQP2D5EJ-DPrP1E5u.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-Kz0Cc0mv.js → chunk-FMBD7UC4--yjwIi92.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-BttoT7UR.js → chunk-ND2GUHAM-BlN7Zpnx.js} +1 -1
- package/dist/web/assets/{chunk-QZHKN3VN-BcVhzXXK.js → chunk-QZHKN3VN-b97Y7iON.js} +1 -1
- package/dist/web/assets/{circle-alert-D67xfWMs.js → circle-alert-B3BU6yxp.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-KLi01tMF.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-KLi01tMF.js +1 -0
- package/dist/web/assets/{code-block-OCS4YCEC-CMA1utSp.js → code-block-OCS4YCEC-pXxp6Ipb.js} +1 -1
- package/dist/web/assets/{confirm-dialog-BWvZEHpu.js → confirm-dialog-CeNfH2ZR.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-B391zTey.js → cose-bilkent-S5V4N54A-BE-ASlGZ.js} +1 -1
- package/dist/web/assets/cssMode-B8d06lCF.js +1 -0
- package/dist/web/assets/{dagre-BM42HDAG-CymH_FEZ.js → dagre-BM42HDAG-lAvNJn8H.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-DXOIiLDr.js → diagram-2AECGRRQ-DBgI60j-.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-B9ocgjdh.js → diagram-5GNKFQAL-BqFMhpcI.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DLMpk9Wg.js → diagram-KO2AKTUF-8dtMJ7XC.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-BBnF83je.js → diagram-LMA3HP47-CEbAGy_U.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-AK4FunVI.js → diagram-OG6HWLK6-BTy4Wqho.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-B1mryURg.js → erDiagram-TEJ5UH35-Fe0pjB7H.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-BjIG_1l5.js → flowDiagram-I6XJVG4X-Cn5xoMyS.js} +1 -1
- package/dist/web/assets/{folder-picker-CaM_drIJ.js → folder-picker-DlJ9hExj.js} +1 -1
- package/dist/web/assets/{freemarker2-Dj1C_6Ng.js → freemarker2-WBCTYbCf.js} +2 -2
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-DjR6lyIQ.js → ganttDiagram-6RSMTGT7-Bwf7sOJW.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-BpW2L4ry.js → gitGraphDiagram-PVQCEYII-DEqHf_N3.js} +1 -1
- package/dist/web/assets/handlebars-aoMw8XNP.js +1 -0
- package/dist/web/assets/html-mP4L-gn5.js +1 -0
- package/dist/web/assets/htmlMode-BRkGssBX.js +1 -0
- package/dist/web/assets/index-BoQh7Rhc.css +1 -0
- package/dist/web/assets/{index-DaRxJqVy.js → index-DxE1UagD.js} +4 -4
- package/dist/web/assets/index-_mroLJ3-.js +122 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-Cu-PA_-6.js → infoDiagram-5YYISTIA-BzITBBR6.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-S6Esbkdw.js → ishikawaDiagram-YF4QCWOH-Bd9MT4ne.js} +1 -1
- package/dist/web/assets/javascript-CzeLwCQy.js +1 -0
- package/dist/web/assets/{journeyDiagram-JHISSGLW-wPF9FT9V.js → journeyDiagram-JHISSGLW-CR2x5gV0.js} +1 -1
- package/dist/web/assets/{jsonMode-D6IoFlQF.js → jsonMode-BixD4b0P.js} +4 -4
- package/dist/web/assets/{kanban-definition-UN3LZRKU-C4jl9zOj.js → kanban-definition-UN3LZRKU-DZx-6dHw.js} +1 -1
- package/dist/web/assets/{layers-hQUUT3Gb.js → layers-DOM1D0GC.js} +1 -1
- package/dist/web/assets/{linear-D83xDp0H.js → linear-BBLqccsD.js} +1 -1
- package/dist/web/assets/liquid-DGETTZ3q.js +1 -0
- package/dist/web/assets/{lspLanguageFeatures-CUyibjAN.js → lspLanguageFeatures-DLBGi3go.js} +1 -1
- package/dist/web/assets/mdx-Co95_1jL.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-CGCWmHha.js → mermaid-NOHMQCX5-K1Nm51AP.js} +45 -45
- package/dist/web/assets/{message-square-B-uYQiTq.js → message-square-eTP8tZLX.js} +1 -1
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-D5v2uvjn.js → mindmap-definition-RKZ34NQL-BuB-92St.js} +1 -1
- package/dist/web/assets/{modal-D87uszzb.js → modal-CSnK65Cb.js} +1 -1
- package/dist/web/assets/{monaco-B25-2nEB.js → monaco-C17UmdbS.js} +3 -3
- package/dist/web/assets/{pencil-CY2RnQrx.js → pencil-l1-UifOH.js} +1 -1
- package/dist/web/assets/{pieDiagram-4H26LBE5-6wdFz_7x.js → pieDiagram-4H26LBE5--40xP_i_.js} +1 -1
- package/dist/web/assets/python-CQw9WtC1.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-C1CrGMEK.js → quadrantDiagram-W4KKPZXB-BxiOfFTG.js} +1 -1
- package/dist/web/assets/razor-Du_XbZEg.js +1 -0
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-mDtZrxpp.js → requirementDiagram-4Y6WPE33-GR0Dtr4T.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-hBlj0XoH.js → sankeyDiagram-5OEKKPKP-tWpKambG.js} +1 -1
- package/dist/web/assets/select-DB6L9-KB.js +1 -0
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DsWmMm20.js → sequenceDiagram-3UESZ5HK-ByVTWC_r.js} +1 -1
- package/dist/web/assets/{server-qlZupTvg.js → server-CrODl9NC.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-VNyX1L66.js → stateDiagram-AJRCARHV-Bd8b6zV5.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-A6YN_ZNd.js +1 -0
- package/dist/web/assets/{switch-1pvXCcP-.js → switch-DvXJc47w.js} +1 -1
- package/dist/web/assets/{textarea-D9oaz-Ba.js → textarea-CSKljQWP.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-DuBxxd9E.js → timeline-definition-PNZ67QCA-BZhaE4Q8.js} +1 -1
- package/dist/web/assets/{trash-2-C0P8jNpJ.js → trash-2-DdOhDOCv.js} +1 -1
- package/dist/web/assets/{tsMode-ogL-3MSe.js → tsMode-D9Lc5Ctp.js} +2 -2
- package/dist/web/assets/typescript-jsG0idOk.js +1 -0
- package/dist/web/assets/{upload-BYgsDplu.js → upload-9nN5Lg83.js} +1 -1
- package/dist/web/assets/{use-profiles-BkGnmson.js → use-profiles-8YJrKR2I.js} +1 -1
- package/dist/web/assets/{use-projects-B4w00h5I.js → use-projects-BdSJ4zPv.js} +1 -1
- package/dist/web/assets/use-providers-BlqWIGOP.js +1 -0
- package/dist/web/assets/{useNormalizedLogs-MsDkcnRQ.js → useNormalizedLogs-B_LoDoiT.js} +1 -1
- package/dist/web/assets/{vennDiagram-CIIHVFJN-RbPPOLBo.js → vennDiagram-CIIHVFJN-COnwMBZG.js} +1 -1
- package/dist/web/assets/{wardley-L42UT6IY-DXzUbdMF.js → wardley-L42UT6IY-DnIbpfhs.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-B0QXobQM.js → wardleyDiagram-YWT4CUSO-QNFL1GWo.js} +1 -1
- package/dist/web/assets/xml-C_Zqe3tk.js +1 -0
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-C7bFJItM.js → xychartDiagram-2RQKCTM6-CW7FVlM3.js} +1 -1
- package/dist/web/assets/yaml-CETOqGaS.js +1 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/execution-permission.d.ts +19 -0
- package/node_modules/@agent-tower/shared/dist/execution-permission.d.ts.map +1 -0
- package/node_modules/@agent-tower/shared/dist/execution-permission.js +53 -0
- package/node_modules/@agent-tower/shared/dist/execution-permission.js.map +1 -0
- package/node_modules/@agent-tower/shared/dist/index.d.ts +1 -0
- package/node_modules/@agent-tower/shared/dist/index.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/index.js +1 -0
- package/node_modules/@agent-tower/shared/dist/index.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/provider-capabilities.d.ts +6 -5
- package/node_modules/@agent-tower/shared/dist/provider-capabilities.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/provider-capabilities.js.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.d.ts +49 -2
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/assets/ConversationPage-BINGA8XL.js +0 -3
- package/dist/web/assets/CreateTaskInput-8bLhHYOc.js +0 -1
- package/dist/web/assets/ProviderSettingsPage-BlgfQMwe.js +0 -95
- package/dist/web/assets/channel-B8s9dqlX.js +0 -1
- package/dist/web/assets/check-C1zWgxFO.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-61bPx188.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-61bPx188.js +0 -1
- package/dist/web/assets/cssMode-CNU1q_Gl.js +0 -1
- package/dist/web/assets/handlebars-DNXOgRZc.js +0 -1
- package/dist/web/assets/html-C20FgNS-.js +0 -1
- package/dist/web/assets/htmlMode-CtcV1Ktd.js +0 -1
- package/dist/web/assets/index-dElqH2UR.css +0 -1
- package/dist/web/assets/index-oC5eh7mZ.js +0 -122
- package/dist/web/assets/javascript-CFAVZ6Tb.js +0 -1
- package/dist/web/assets/liquid-CuzuRJIN.js +0 -1
- package/dist/web/assets/mdx-C3rxTvel.js +0 -1
- package/dist/web/assets/python-BYGLbOzO.js +0 -1
- package/dist/web/assets/razor-m0U9iUAj.js +0 -1
- package/dist/web/assets/select-D7WkUiad.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-DHz3oGyD.js +0 -1
- package/dist/web/assets/typescript-rHoDxTY8.js +0 -1
- package/dist/web/assets/use-providers-B70-BYNu.js +0 -1
- package/dist/web/assets/xml-BqnpQrAq.js +0 -1
- package/dist/web/assets/yaml-mz2Zn_K2.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qwen-code.js","sourceRoot":"","sources":["../../../../src/runtime/acp/agents/qwen-code.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"qwen-code.js","sourceRoot":"","sources":["../../../../src/runtime/acp/agents/qwen-code.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,SAAS,mBAAmB,CAC1B,QAA8D,EAC9D,oBAA4C;IAE5C,MAAM,WAAW,GAAG,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAChD,OAAO,WAAW,CAAC,cAAc,CAAC;IAClC,OAAO,WAAW,CAAC,eAAe,CAAC;IACnC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACtF,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QAC9B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY;QACpG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY;QAC9B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,cAAc,GAAG,kCAAkC,CAAC,QAAQ,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC;IAC/G,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,WAAW;QACX,cAAc;QACd,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,WAA8B;IAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC;IACzC,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACjE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAuB;IAC5D,SAAS,EAAE,SAAS,CAAC,SAAS;IAC9B,WAAW,EAAE,WAAW;IAExB,eAAe,EAAE,mBAAmB;IAEpC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO;QAChC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,iBAAiB,CAAC,eAAe,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,IAAI,CAAC,CAAC;QACxG,CAAC;QACD,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE;gBACJ,OAAO;gBACP,uBAAuB;gBACvB,iBAAiB,EAAE,OAAO,CAAC,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAChF,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACtE;YACD,GAAG,EAAE,KAAK,CAAC,UAAU;YACrB,GAAG,EAAE,OAAO,CAAC,WAAW;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAAQ;QAC9B,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAA4B,CAAC,CAAC;QAC5F,OAAO,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE;YAChC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,iBAAiB,CACzB,6BAA6B,EAC7B,SAAS,EACT,gCAAgC,MAAM,GAAG,EACzC,KAAK,CACN,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type * as acp from '@agentclientprotocol/sdk';
|
|
2
|
-
import type { AgentType,
|
|
2
|
+
import type { AgentType, ExecutionPermissionMode } from '@agent-tower/shared';
|
|
3
3
|
import type { AvailabilityInfo } from '../../../executors/base.executor.js';
|
|
4
4
|
import type { Provider } from '../../../executors/providers.js';
|
|
5
5
|
import type { RuntimeOpenInput } from '../../contracts.js';
|
|
6
6
|
export interface AcpAgentProfile {
|
|
7
7
|
agentType: AgentType;
|
|
8
8
|
environment: Record<string, string>;
|
|
9
|
-
permissionMode:
|
|
9
|
+
permissionMode: ExecutionPermissionMode;
|
|
10
10
|
authenticationRequest?: acp.AuthenticateRequest;
|
|
11
11
|
appendPrompt?: string;
|
|
12
12
|
model?: string;
|
|
@@ -28,6 +28,8 @@ export type AcpSessionBootstrapResponse = Pick<acp.NewSessionResponse, 'modes' |
|
|
|
28
28
|
export interface AcpAgentDefinition {
|
|
29
29
|
readonly agentType: AgentType;
|
|
30
30
|
readonly displayName: string;
|
|
31
|
+
/** False when a loaded native session cannot reliably have its permissions reapplied. */
|
|
32
|
+
readonly supportsPermissionRestore?: boolean;
|
|
31
33
|
readonly initializeTimeoutMs?: number;
|
|
32
34
|
readonly maxStdoutFrameBytes?: number;
|
|
33
35
|
readonly transformStdoutFrame?: AcpStdoutFrameTransform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/runtime/acp/agents/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EACV,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/runtime/acp/agents/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `originator` and `user-agent` prefix used by non-interactive `codex exec`.
|
|
3
|
+
*
|
|
4
|
+
* Agent Tower drives Codex through the ACP adapter, which otherwise identifies
|
|
5
|
+
* itself as `@agentclientprotocol/codex-acp` in the `user-agent` header.
|
|
6
|
+
* Some OpenAI-compatible gateways only accept traffic that looks like the
|
|
7
|
+
* native Codex CLI, so the identity is rewritten to match `codex exec`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CODEX_CLI_ORIGINATOR = "codex_exec";
|
|
10
|
+
/** Cache probe results for the lifetime of the process; the runtime rarely changes. */
|
|
11
|
+
export declare function resetCodexCliIdentityCache(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Full `user-agent` value a native `codex exec` process would send.
|
|
14
|
+
*
|
|
15
|
+
* Format verified against Codex CLI 0.156.0:
|
|
16
|
+
* `{name}/{codexVersion} ({platform}) {terminal} ({name}; {clientVersion})`
|
|
17
|
+
* e.g. `codex_exec/0.156.0 (Mac OS 15.6.1; arm64) Apple_Terminal/455.1 (codex_exec; 0.156.0)`
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatCodexCliUserAgent(parts: {
|
|
20
|
+
clientName: string;
|
|
21
|
+
codexVersion: string;
|
|
22
|
+
platform: string;
|
|
23
|
+
terminal: string;
|
|
24
|
+
clientVersion: string;
|
|
25
|
+
}): string;
|
|
26
|
+
/**
|
|
27
|
+
* Terminal segment of the Codex user-agent.
|
|
28
|
+
*
|
|
29
|
+
* Codex prefers `TERM_PROGRAM`, then falls back to well-known session markers
|
|
30
|
+
* and finally reports `unknown`; verified against Codex CLI 0.156.0.
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectCodexTerminal(environment: NodeJS.ProcessEnv): string;
|
|
33
|
+
/** `Mac OS 15.6.1; arm64` — the parenthesised segment of the Codex user-agent. */
|
|
34
|
+
export declare function resolveCodexPlatformDescription(): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve `codex --version` for the binary Agent Tower is about to launch.
|
|
37
|
+
*
|
|
38
|
+
* Best effort: callers must tolerate `undefined` and leave headers untouched.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveCodexVersion(codexPath: string | undefined, environment: NodeJS.ProcessEnv): Promise<string | undefined>;
|
|
41
|
+
/** `codex-cli 0.156.0` -> `0.156.0` */
|
|
42
|
+
export declare function parseCodexVersion(output: string): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Build the `user-agent` that makes an ACP-launched Codex indistinguishable
|
|
45
|
+
* from a native `codex exec` process, or `undefined` when the runtime version
|
|
46
|
+
* cannot be determined.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveCodexCliUserAgent(options: {
|
|
49
|
+
codexPath: string | undefined;
|
|
50
|
+
environment: NodeJS.ProcessEnv;
|
|
51
|
+
}): Promise<string | undefined>;
|
|
52
|
+
//# sourceMappingURL=codex-cli-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli-identity.d.ts","sourceRoot":"","sources":["../../../src/runtime/acp/codex-cli-identity.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAQjD,uFAAuF;AACvF,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAGT;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAS1E;AAcD,kFAAkF;AAClF,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,MAAM,CAAC,CAGvE;AAuDD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,CAAC,UAAU,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO7B;AAqBD,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;CAChC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU9B"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
const VERSION_PROBE_TIMEOUT_MS = 5_000;
|
|
7
|
+
/**
|
|
8
|
+
* `originator` and `user-agent` prefix used by non-interactive `codex exec`.
|
|
9
|
+
*
|
|
10
|
+
* Agent Tower drives Codex through the ACP adapter, which otherwise identifies
|
|
11
|
+
* itself as `@agentclientprotocol/codex-acp` in the `user-agent` header.
|
|
12
|
+
* Some OpenAI-compatible gateways only accept traffic that looks like the
|
|
13
|
+
* native Codex CLI, so the identity is rewritten to match `codex exec`.
|
|
14
|
+
*/
|
|
15
|
+
export const CODEX_CLI_ORIGINATOR = 'codex_exec';
|
|
16
|
+
/** Terminal name Codex reports when it cannot detect a terminal at all. */
|
|
17
|
+
const UNKNOWN_TERMINAL = 'unknown';
|
|
18
|
+
const versionCache = new Map();
|
|
19
|
+
let platformDescription;
|
|
20
|
+
/** Cache probe results for the lifetime of the process; the runtime rarely changes. */
|
|
21
|
+
export function resetCodexCliIdentityCache() {
|
|
22
|
+
versionCache.clear();
|
|
23
|
+
platformDescription = undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Full `user-agent` value a native `codex exec` process would send.
|
|
27
|
+
*
|
|
28
|
+
* Format verified against Codex CLI 0.156.0:
|
|
29
|
+
* `{name}/{codexVersion} ({platform}) {terminal} ({name}; {clientVersion})`
|
|
30
|
+
* e.g. `codex_exec/0.156.0 (Mac OS 15.6.1; arm64) Apple_Terminal/455.1 (codex_exec; 0.156.0)`
|
|
31
|
+
*/
|
|
32
|
+
export function formatCodexCliUserAgent(parts) {
|
|
33
|
+
return `${parts.clientName}/${parts.codexVersion} (${parts.platform}) ${parts.terminal}`
|
|
34
|
+
+ ` (${parts.clientName}; ${parts.clientVersion})`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Terminal segment of the Codex user-agent.
|
|
38
|
+
*
|
|
39
|
+
* Codex prefers `TERM_PROGRAM`, then falls back to well-known session markers
|
|
40
|
+
* and finally reports `unknown`; verified against Codex CLI 0.156.0.
|
|
41
|
+
*/
|
|
42
|
+
export function detectCodexTerminal(environment) {
|
|
43
|
+
const program = environment.TERM_PROGRAM?.trim();
|
|
44
|
+
if (program) {
|
|
45
|
+
const version = environment.TERM_PROGRAM_VERSION?.trim();
|
|
46
|
+
return version ? `${program}/${version}` : program;
|
|
47
|
+
}
|
|
48
|
+
if (environment.WT_SESSION?.trim())
|
|
49
|
+
return 'WindowsTerminal';
|
|
50
|
+
if (environment.TERM_SESSION_ID?.trim())
|
|
51
|
+
return 'Apple_Terminal';
|
|
52
|
+
return UNKNOWN_TERMINAL;
|
|
53
|
+
}
|
|
54
|
+
/** Architecture token as reported by the Rust `os_info` crate Codex uses. */
|
|
55
|
+
function describeArchitecture() {
|
|
56
|
+
switch (process.arch) {
|
|
57
|
+
case 'x64':
|
|
58
|
+
return 'x86_64';
|
|
59
|
+
case 'ia32':
|
|
60
|
+
return 'i686';
|
|
61
|
+
default:
|
|
62
|
+
return process.arch;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** `Mac OS 15.6.1; arm64` — the parenthesised segment of the Codex user-agent. */
|
|
66
|
+
export async function resolveCodexPlatformDescription() {
|
|
67
|
+
platformDescription ??= buildPlatformDescription();
|
|
68
|
+
return await platformDescription;
|
|
69
|
+
}
|
|
70
|
+
async function buildPlatformDescription() {
|
|
71
|
+
const architecture = describeArchitecture();
|
|
72
|
+
if (process.platform === 'darwin') {
|
|
73
|
+
return `Mac OS ${await readMacOsProductVersion()}; ${architecture}`;
|
|
74
|
+
}
|
|
75
|
+
if (process.platform === 'linux') {
|
|
76
|
+
return `${await readLinuxDistributionName()}; ${architecture}`;
|
|
77
|
+
}
|
|
78
|
+
if (process.platform === 'win32') {
|
|
79
|
+
return `Windows ${os.release()}; ${architecture}`;
|
|
80
|
+
}
|
|
81
|
+
return `${process.platform}; ${architecture}`;
|
|
82
|
+
}
|
|
83
|
+
async function readMacOsProductVersion() {
|
|
84
|
+
try {
|
|
85
|
+
const { stdout } = await execFileAsync('sw_vers', ['-productVersion'], {
|
|
86
|
+
encoding: 'utf8',
|
|
87
|
+
timeout: VERSION_PROBE_TIMEOUT_MS,
|
|
88
|
+
});
|
|
89
|
+
const version = String(stdout).trim();
|
|
90
|
+
if (version)
|
|
91
|
+
return version;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Fall through to the Darwin kernel mapping below.
|
|
95
|
+
}
|
|
96
|
+
// Darwin 24.6.0 -> macOS 15.6.0; the kernel release omits the patch version.
|
|
97
|
+
const [major, minor] = os.release().split('.');
|
|
98
|
+
const macosMajor = Number(major);
|
|
99
|
+
if (Number.isFinite(macosMajor) && macosMajor >= 20) {
|
|
100
|
+
return `${macosMajor - 9}.${minor ?? '0'}.0`;
|
|
101
|
+
}
|
|
102
|
+
return os.release();
|
|
103
|
+
}
|
|
104
|
+
async function readLinuxDistributionName() {
|
|
105
|
+
try {
|
|
106
|
+
const contents = await readFile('/etc/os-release', 'utf8');
|
|
107
|
+
const fields = new Map();
|
|
108
|
+
for (const line of contents.split('\n')) {
|
|
109
|
+
const separator = line.indexOf('=');
|
|
110
|
+
if (separator <= 0)
|
|
111
|
+
continue;
|
|
112
|
+
fields.set(line.slice(0, separator).trim(), line.slice(separator + 1).trim().replace(/^"|"$/g, ''));
|
|
113
|
+
}
|
|
114
|
+
const name = fields.get('NAME');
|
|
115
|
+
const version = fields.get('VERSION_ID');
|
|
116
|
+
if (name && version)
|
|
117
|
+
return `${name} ${version}`;
|
|
118
|
+
if (name)
|
|
119
|
+
return name;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Unknown distributions keep the generic platform name.
|
|
123
|
+
}
|
|
124
|
+
return 'Linux';
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resolve `codex --version` for the binary Agent Tower is about to launch.
|
|
128
|
+
*
|
|
129
|
+
* Best effort: callers must tolerate `undefined` and leave headers untouched.
|
|
130
|
+
*/
|
|
131
|
+
export async function resolveCodexVersion(codexPath, environment) {
|
|
132
|
+
if (!codexPath)
|
|
133
|
+
return undefined;
|
|
134
|
+
const cached = versionCache.get(codexPath);
|
|
135
|
+
if (cached)
|
|
136
|
+
return await cached;
|
|
137
|
+
const pending = probeCodexVersion(codexPath, environment);
|
|
138
|
+
versionCache.set(codexPath, pending);
|
|
139
|
+
return await pending;
|
|
140
|
+
}
|
|
141
|
+
async function probeCodexVersion(codexPath, environment) {
|
|
142
|
+
try {
|
|
143
|
+
const { stdout } = await execFileAsync(codexPath, ['--version'], {
|
|
144
|
+
encoding: 'utf8',
|
|
145
|
+
timeout: VERSION_PROBE_TIMEOUT_MS,
|
|
146
|
+
env: environment,
|
|
147
|
+
windowsHide: true,
|
|
148
|
+
// `.cmd` shims on Windows are not directly executable without a shell.
|
|
149
|
+
shell: process.platform === 'win32',
|
|
150
|
+
});
|
|
151
|
+
return parseCodexVersion(String(stdout));
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** `codex-cli 0.156.0` -> `0.156.0` */
|
|
158
|
+
export function parseCodexVersion(output) {
|
|
159
|
+
const match = /(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)/.exec(output);
|
|
160
|
+
return match?.[1];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build the `user-agent` that makes an ACP-launched Codex indistinguishable
|
|
164
|
+
* from a native `codex exec` process, or `undefined` when the runtime version
|
|
165
|
+
* cannot be determined.
|
|
166
|
+
*/
|
|
167
|
+
export async function resolveCodexCliUserAgent(options) {
|
|
168
|
+
const codexVersion = await resolveCodexVersion(options.codexPath, options.environment);
|
|
169
|
+
if (!codexVersion)
|
|
170
|
+
return undefined;
|
|
171
|
+
return formatCodexCliUserAgent({
|
|
172
|
+
clientName: CODEX_CLI_ORIGINATOR,
|
|
173
|
+
codexVersion,
|
|
174
|
+
platform: await resolveCodexPlatformDescription(),
|
|
175
|
+
terminal: detectCodexTerminal(options.environment),
|
|
176
|
+
clientVersion: codexVersion,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=codex-cli-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli-identity.js","sourceRoot":"","sources":["../../../src/runtime/acp/codex-cli-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuC,CAAC;AACpE,IAAI,mBAAgD,CAAC;AAErD,uFAAuF;AACvF,MAAM,UAAU,0BAA0B;IACxC,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,mBAAmB,GAAG,SAAS,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAMvC;IACC,OAAO,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE;UACpF,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,aAAa,GAAG,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAA8B;IAChE,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,WAAW,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACrD,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE;QAAE,OAAO,iBAAiB,CAAC;IAC7D,IAAI,WAAW,CAAC,eAAe,EAAE,IAAI,EAAE;QAAE,OAAO,gBAAgB,CAAC;IACjE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,6EAA6E;AAC7E,SAAS,oBAAoB;IAC3B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,OAAO,CAAC,IAAI,CAAC;IACxB,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,mBAAmB,KAAK,wBAAwB,EAAE,CAAC;IACnD,OAAO,MAAM,mBAAmB,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,UAAU,MAAM,uBAAuB,EAAE,KAAK,YAAY,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,MAAM,yBAAyB,EAAE,KAAK,YAAY,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,YAAY,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE;YACrE,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,6EAA6E;IAC7E,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;QACpD,OAAO,GAAG,UAAU,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,yBAAyB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,SAAS,IAAI,CAAC;gBAAE,SAAS;YAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,IAAI,IAAI,OAAO;YAAE,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;QACjD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA6B,EAC7B,WAA8B;IAE9B,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,MAAM,CAAC;IAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1D,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,OAAO,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,SAAiB,EACjB,WAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;YAC/D,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,wBAAwB;YACjC,GAAG,EAAE,WAAW;YAChB,WAAW,EAAE,IAAI;YACjB,uEAAuE;YACvE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;SACpC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAG9C;IACC,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACvF,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,uBAAuB,CAAC;QAC7B,UAAU,EAAE,oBAAoB;QAChC,YAAY;QACZ,QAAQ,EAAE,MAAM,+BAA+B,EAAE;QACjD,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC;QAClD,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import type * as acp from '@agentclientprotocol/sdk';
|
|
2
|
-
import { type Provider, type
|
|
2
|
+
import { type Provider, type ExecutionPermissionMode } from '@agent-tower/shared';
|
|
3
3
|
export interface CodexAcpProviderProjection {
|
|
4
4
|
environment: Record<string, string>;
|
|
5
|
-
permissionMode:
|
|
5
|
+
permissionMode: ExecutionPermissionMode;
|
|
6
6
|
authenticationRequest?: acp.AuthenticateRequest;
|
|
7
7
|
appendPrompt?: string;
|
|
8
8
|
fastMode?: boolean;
|
|
9
9
|
}
|
|
10
10
|
/** Project the persisted Provider into the environment contract consumed by codex-acp. */
|
|
11
11
|
export declare function projectCodexAcpProvider(provider: Provider | null, inheritedEnvironment: Record<string, string>): CodexAcpProviderProjection;
|
|
12
|
+
/**
|
|
13
|
+
* Add the native Codex CLI `user-agent` to the active custom model provider.
|
|
14
|
+
*
|
|
15
|
+
* The ACP adapter identifies itself as `@agentclientprotocol/codex-acp` in the
|
|
16
|
+
* `user-agent` header, so rewriting `originator` alone still lets a gateway tell
|
|
17
|
+
* Agent Tower traffic apart from a native `codex exec` process. The header can
|
|
18
|
+
* only be replaced through the provider's `http_headers`; the value is resolved
|
|
19
|
+
* in `resolveLaunch` because it depends on the Codex runtime actually launched.
|
|
20
|
+
*
|
|
21
|
+
* Built-in providers without an explicit `model_providers` entry are left
|
|
22
|
+
* untouched, and headers configured by the Provider itself always win.
|
|
23
|
+
*/
|
|
24
|
+
export declare function withCodexCliUserAgent(configJson: string | undefined, userAgent: string | undefined): string | undefined;
|
|
12
25
|
//# sourceMappingURL=codex-provider-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-provider-config.d.ts","sourceRoot":"","sources":["../../../src/runtime/acp/codex-provider-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,
|
|
1
|
+
{"version":3,"file":"codex-provider-config.d.ts","sourceRoot":"","sources":["../../../src/runtime/acp/codex-provider-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;AAU7B,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,uBAAuB,CAAC;IACxC,qBAAqB,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA4BD,0FAA0F;AAC1F,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,0BAA0B,CAyI5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,GAAG,SAAS,CAoBpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parse as parseToml } from 'smol-toml';
|
|
2
|
-
import { AgentType,
|
|
2
|
+
import { AgentType, resolveProviderExecutionPermission, } from '@agent-tower/shared';
|
|
3
3
|
import { CODEX_HTTP_ONLY_OPENAI_PROVIDER_ID } from '../../executors/codex.executor.js';
|
|
4
4
|
import { CODEX_OPENAI_COMPATIBLE_PROVIDER_NAME, resolveEffectiveProviderConnection, } from '../../services/provider-effective-connection.service.js';
|
|
5
5
|
import { AgentRuntimeError } from '../errors.js';
|
|
@@ -126,16 +126,17 @@ export function projectCodexAcpProvider(provider, inheritedEnvironment) {
|
|
|
126
126
|
if (Object.keys(codexConfig).length > 0) {
|
|
127
127
|
environment.CODEX_CONFIG = JSON.stringify(codexConfig);
|
|
128
128
|
}
|
|
129
|
-
const configuredMode = provider.config.permissionMode ?? provider.config.acpPermissionMode;
|
|
130
129
|
const appendPrompt = typeof provider.config.appendPrompt === 'string' && provider.config.appendPrompt
|
|
131
130
|
? provider.config.appendPrompt
|
|
132
131
|
: undefined;
|
|
133
132
|
const fastMode = typeof provider.config.fastMode === 'boolean'
|
|
134
133
|
? provider.config.fastMode
|
|
135
134
|
: undefined;
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
const permission = resolveProviderExecutionPermission(provider);
|
|
136
|
+
if (permission.diagnostics.length) {
|
|
137
|
+
throw new AgentRuntimeError(permission.diagnostics[0].code, 'provider_config', permission.diagnostics.map(item => item.message).join('; '), false);
|
|
138
|
+
}
|
|
139
|
+
const permissionMode = permission.mode;
|
|
139
140
|
return {
|
|
140
141
|
environment,
|
|
141
142
|
permissionMode,
|
|
@@ -144,4 +145,40 @@ export function projectCodexAcpProvider(provider, inheritedEnvironment) {
|
|
|
144
145
|
...(fastMode !== undefined ? { fastMode } : {}),
|
|
145
146
|
};
|
|
146
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Add the native Codex CLI `user-agent` to the active custom model provider.
|
|
150
|
+
*
|
|
151
|
+
* The ACP adapter identifies itself as `@agentclientprotocol/codex-acp` in the
|
|
152
|
+
* `user-agent` header, so rewriting `originator` alone still lets a gateway tell
|
|
153
|
+
* Agent Tower traffic apart from a native `codex exec` process. The header can
|
|
154
|
+
* only be replaced through the provider's `http_headers`; the value is resolved
|
|
155
|
+
* in `resolveLaunch` because it depends on the Codex runtime actually launched.
|
|
156
|
+
*
|
|
157
|
+
* Built-in providers without an explicit `model_providers` entry are left
|
|
158
|
+
* untouched, and headers configured by the Provider itself always win.
|
|
159
|
+
*/
|
|
160
|
+
export function withCodexCliUserAgent(configJson, userAgent) {
|
|
161
|
+
if (!configJson || !userAgent)
|
|
162
|
+
return configJson;
|
|
163
|
+
let config;
|
|
164
|
+
try {
|
|
165
|
+
config = JSON.parse(configJson);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return configJson;
|
|
169
|
+
}
|
|
170
|
+
if (!isRecord(config))
|
|
171
|
+
return configJson;
|
|
172
|
+
const modelProviderId = typeof config.model_provider === 'string' ? config.model_provider : undefined;
|
|
173
|
+
if (!modelProviderId || !isRecord(config.model_providers))
|
|
174
|
+
return configJson;
|
|
175
|
+
const modelProvider = config.model_providers[modelProviderId];
|
|
176
|
+
if (!isRecord(modelProvider))
|
|
177
|
+
return configJson;
|
|
178
|
+
const configuredHeaders = isRecord(modelProvider.http_headers) ? modelProvider.http_headers : {};
|
|
179
|
+
if (typeof configuredHeaders['user-agent'] === 'string')
|
|
180
|
+
return configJson;
|
|
181
|
+
modelProvider.http_headers = { 'user-agent': userAgent, ...configuredHeaders };
|
|
182
|
+
return JSON.stringify(config);
|
|
183
|
+
}
|
|
147
184
|
//# sourceMappingURL=codex-provider-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-provider-config.js","sourceRoot":"","sources":["../../../src/runtime/acp/codex-provider-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EACL,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"codex-provider-config.js","sourceRoot":"","sources":["../../../src/runtime/acp/codex-provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RuntimePermissionRequest } from '@agent-tower/shared';
|
|
2
|
+
import type { CliDuplexIO } from '../utils/cli-duplex-channel.js';
|
|
3
|
+
export { describeCliAction as describeClaudeAction } from './cli-action-summary.js';
|
|
4
|
+
/** Claude codec only: public waiting/state belongs to RuntimeCoordinator. */
|
|
5
|
+
export declare class ClaudeCliControl {
|
|
6
|
+
private readonly io;
|
|
7
|
+
private readonly context;
|
|
8
|
+
private readonly callbacks;
|
|
9
|
+
private closed;
|
|
10
|
+
private ready;
|
|
11
|
+
private readonly controls;
|
|
12
|
+
private readonly pending;
|
|
13
|
+
private readonly seen;
|
|
14
|
+
constructor(io: CliDuplexIO, context: {
|
|
15
|
+
sessionId: string;
|
|
16
|
+
turnId: string;
|
|
17
|
+
runtimeInstanceId: string;
|
|
18
|
+
sensitiveValues?: string[];
|
|
19
|
+
}, callbacks: {
|
|
20
|
+
requested(request: RuntimePermissionRequest): void;
|
|
21
|
+
invalidated(id: string): void;
|
|
22
|
+
failed(error: unknown): void;
|
|
23
|
+
});
|
|
24
|
+
start(initialInput: string, confirmed?: () => void): Promise<void>;
|
|
25
|
+
handle(message: unknown): void;
|
|
26
|
+
resolve(requestId: string, optionId: string, authorizeDelivery?: () => void): Promise<void>;
|
|
27
|
+
close(): void;
|
|
28
|
+
private invalidate;
|
|
29
|
+
private fail;
|
|
30
|
+
private request;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=claude-cli-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli-control.d.ts","sourceRoot":"","sources":["../../src/runtime/claude-cli-control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAQlE,OAAO,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,6EAA6E;AAC7E,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6G;IACtI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoG;IAC5H,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAEvB,EAAE,EAAE,WAAW,EACf,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EACrG,SAAS,EAAE;QAAE,SAAS,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE;IAG3I,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,IAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzF,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA8CxB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjG,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;CAYhB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { AgentRuntimeError } from './errors.js';
|
|
3
|
+
import { describeCliAction } from './cli-action-summary.js';
|
|
4
|
+
function object(value) { return !!value && typeof value === 'object' && !Array.isArray(value); }
|
|
5
|
+
const error = (code, message) => new AgentRuntimeError(code, 'permission', message, false);
|
|
6
|
+
export { describeCliAction as describeClaudeAction } from './cli-action-summary.js';
|
|
7
|
+
/** Claude codec only: public waiting/state belongs to RuntimeCoordinator. */
|
|
8
|
+
export class ClaudeCliControl {
|
|
9
|
+
io;
|
|
10
|
+
context;
|
|
11
|
+
callbacks;
|
|
12
|
+
closed = false;
|
|
13
|
+
ready = false;
|
|
14
|
+
controls = new Map();
|
|
15
|
+
pending = new Map();
|
|
16
|
+
seen = new Set();
|
|
17
|
+
constructor(io, context, callbacks) {
|
|
18
|
+
this.io = io;
|
|
19
|
+
this.context = context;
|
|
20
|
+
this.callbacks = callbacks;
|
|
21
|
+
}
|
|
22
|
+
async start(initialInput, confirmed = () => undefined) {
|
|
23
|
+
await this.request({ subtype: 'initialize' });
|
|
24
|
+
const mode = await this.request({ subtype: 'set_permission_mode', mode: 'default' });
|
|
25
|
+
if (!object(mode) || mode.mode !== 'default')
|
|
26
|
+
throw error('permission_mode_unconfirmed', 'Claude did not confirm default permission mode.');
|
|
27
|
+
if (this.closed)
|
|
28
|
+
throw error('permission_not_found', 'Claude execution has ended.');
|
|
29
|
+
this.ready = true;
|
|
30
|
+
confirmed();
|
|
31
|
+
await this.io.write(initialInput, () => !this.closed);
|
|
32
|
+
}
|
|
33
|
+
handle(message) {
|
|
34
|
+
if (this.closed)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
if (!object(message))
|
|
38
|
+
throw error('control_protocol_invalid', 'Invalid Claude control message.');
|
|
39
|
+
if (message.type === 'control_response') {
|
|
40
|
+
const response = message.response;
|
|
41
|
+
if (!object(response) || typeof response.request_id !== 'string')
|
|
42
|
+
throw error('control_protocol_invalid', 'Invalid Claude control response.');
|
|
43
|
+
const pending = this.controls.get(response.request_id);
|
|
44
|
+
if (!pending)
|
|
45
|
+
return;
|
|
46
|
+
this.controls.delete(response.request_id);
|
|
47
|
+
clearTimeout(pending.timer);
|
|
48
|
+
if (response.subtype === 'success')
|
|
49
|
+
pending.resolve(response.response);
|
|
50
|
+
else
|
|
51
|
+
pending.reject(error('control_request_failed', 'Claude rejected initialization or permission mode configuration.'));
|
|
52
|
+
}
|
|
53
|
+
else if (message.type === 'control_cancel_request') {
|
|
54
|
+
if (typeof message.request_id !== 'string')
|
|
55
|
+
throw error('control_protocol_invalid', 'Invalid Claude cancellation.');
|
|
56
|
+
for (const [id, item] of this.pending)
|
|
57
|
+
if (item.nativeId === message.request_id)
|
|
58
|
+
this.invalidate(id);
|
|
59
|
+
}
|
|
60
|
+
else if (message.type === 'control_request') {
|
|
61
|
+
const request = message.request;
|
|
62
|
+
if (!this.ready || typeof message.request_id !== 'string' || !object(request))
|
|
63
|
+
throw error('control_protocol_invalid', 'Unexpected Claude control request.');
|
|
64
|
+
if (this.seen.has(message.request_id))
|
|
65
|
+
return;
|
|
66
|
+
if (this.seen.size >= 1024 || this.pending.size >= 32)
|
|
67
|
+
throw error('control_request_limit', 'Claude interaction limit exceeded.');
|
|
68
|
+
this.seen.add(message.request_id);
|
|
69
|
+
if (request.subtype !== 'can_use_tool' || request.requires_user_interaction === true || request.requiresUserInteraction === true
|
|
70
|
+
|| ['AskUserQuestion', 'ExitPlanMode', 'EnterPlanMode'].includes(String(request.tool_name))) {
|
|
71
|
+
throw error('native_interaction_unsupported', 'This Claude question, plan confirmation, or native interaction is not supported.');
|
|
72
|
+
}
|
|
73
|
+
if (typeof request.tool_name !== 'string' || typeof request.tool_use_id !== 'string' || !request.tool_use_id || !object(request.input)) {
|
|
74
|
+
throw error('control_protocol_invalid', 'Claude approval request lacks a tool identity or valid input.');
|
|
75
|
+
}
|
|
76
|
+
const id = randomUUID();
|
|
77
|
+
this.pending.set(id, { nativeId: message.request_id, toolId: request.tool_use_id, input: request.input, responding: false });
|
|
78
|
+
this.callbacks.requested({
|
|
79
|
+
requestId: id, ...{ sessionId: this.context.sessionId, turnId: this.context.turnId }, runtimeInstanceId: this.context.runtimeInstanceId,
|
|
80
|
+
toolCallId: request.tool_use_id, toolName: request.tool_name.slice(0, 120), toolSummary: request.tool_name.slice(0, 120),
|
|
81
|
+
actionDetails: describeCliAction(request.input, this.context.sensitiveValues),
|
|
82
|
+
options: [{ optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' }, { optionId: 'reject_once', name: 'Reject once', kind: 'reject_once' }],
|
|
83
|
+
createdAt: new Date().toISOString(),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (String(message.type).startsWith('control_')) {
|
|
87
|
+
throw error('control_protocol_invalid', 'Unknown Claude control message.');
|
|
88
|
+
}
|
|
89
|
+
else if (message.type === 'system' && message.subtype === 'init' && message.permissionMode !== undefined
|
|
90
|
+
&& message.permissionMode !== 'default' && message.permissionMode !== 'manual') {
|
|
91
|
+
throw error('permission_mode_unconfirmed', 'Claude reported a permission mode other than default.');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (failure) {
|
|
95
|
+
this.fail(failure);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async resolve(requestId, optionId, authorizeDelivery) {
|
|
99
|
+
const item = this.pending.get(requestId);
|
|
100
|
+
if (this.closed || !item || item.responding)
|
|
101
|
+
throw error('permission_not_found', 'Permission request is no longer active.');
|
|
102
|
+
if (optionId !== 'allow_once' && optionId !== 'reject_once')
|
|
103
|
+
throw error('permission_option_invalid', 'Permission option was not offered.');
|
|
104
|
+
authorizeDelivery?.();
|
|
105
|
+
item.responding = true;
|
|
106
|
+
try {
|
|
107
|
+
await this.io.write(JSON.stringify({ type: 'control_response', response: {
|
|
108
|
+
subtype: 'success', request_id: item.nativeId, response: optionId === 'allow_once'
|
|
109
|
+
? { behavior: 'allow', updatedInput: item.input, toolUseID: item.toolId }
|
|
110
|
+
: { behavior: 'deny', message: 'User denied this action', toolUseID: item.toolId },
|
|
111
|
+
} }) + '\n', () => { authorizeDelivery?.(); return !this.closed && this.pending.get(requestId) === item; });
|
|
112
|
+
if (this.closed || this.pending.get(requestId) !== item)
|
|
113
|
+
throw error('permission_not_found', 'Permission request was cancelled during delivery.');
|
|
114
|
+
this.invalidate(requestId);
|
|
115
|
+
}
|
|
116
|
+
catch (failure) {
|
|
117
|
+
// Delivery may be uncertain; never replay an allow onto another process.
|
|
118
|
+
if (this.pending.get(requestId) === item && !this.closed)
|
|
119
|
+
this.fail(error('control_write_failed', 'Claude approval could not be delivered. Execution was stopped.'));
|
|
120
|
+
throw failure;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
close() {
|
|
124
|
+
if (this.closed)
|
|
125
|
+
return;
|
|
126
|
+
this.closed = true;
|
|
127
|
+
for (const id of this.pending.keys())
|
|
128
|
+
this.invalidate(id);
|
|
129
|
+
for (const item of this.controls.values()) {
|
|
130
|
+
clearTimeout(item.timer);
|
|
131
|
+
item.reject(error('control_disconnected', 'Claude control channel ended.'));
|
|
132
|
+
}
|
|
133
|
+
this.controls.clear();
|
|
134
|
+
}
|
|
135
|
+
invalidate(id) { if (this.pending.delete(id))
|
|
136
|
+
this.callbacks.invalidated(id); }
|
|
137
|
+
fail(failure) { this.close(); this.callbacks.failed(failure); }
|
|
138
|
+
request(request) {
|
|
139
|
+
if (this.closed)
|
|
140
|
+
return Promise.reject(error('control_disconnected', 'Claude control channel ended.'));
|
|
141
|
+
const id = randomUUID();
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
const timer = setTimeout(() => { this.controls.delete(id); reject(error('control_handshake_timeout', 'Claude initialization or permission confirmation timed out.')); }, 15_000);
|
|
144
|
+
this.controls.set(id, { resolve, reject, timer });
|
|
145
|
+
void this.io.write(JSON.stringify({ type: 'control_request', request_id: id, request }) + '\n', () => !this.closed).catch(failure => {
|
|
146
|
+
const item = this.controls.get(id);
|
|
147
|
+
if (!item)
|
|
148
|
+
return;
|
|
149
|
+
this.controls.delete(id);
|
|
150
|
+
clearTimeout(timer);
|
|
151
|
+
reject(failure);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=claude-cli-control.js.map
|