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 +0,0 @@
|
|
|
1
|
-
import{k as F,o as be,n as je,q as D,p as de,t as kt,aa as jt,m as rt,r as a,V as Ct,W as ae,u as me,j as e,Q as ge,l as N,ag as Xe,Z as St,E as Tt,F as Et,_ as Ze,X as Mt,D as It,ah as Rt,ai as At}from"./index-oC5eh7mZ.js";import{S as Je,T as Oe,R as ie,l as ce,h as Ne,W as L,u as _t,A as Lt}from"./mermaid-NOHMQCX5-CGCWmHha.js";import{A as he}from"./AgentLogo-Ntqe3_Mx.js";import{C as le}from"./chevron-down-BZfpVhYr.js";import{C as te}from"./check-C1zWgxFO.js";import{d as Ot,F as Pt}from"./use-projects-B4w00h5I.js";import{M as et}from"./MemberAvatar-kbJEoyh0.js";import{u as Dt}from"./use-providers-B70-BYNu.js";import{P as zt}from"./trash-2-C0P8jNpJ.js";import{P as $t}from"./useNormalizedLogs-MsDkcnRQ.js";const qt=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Zn=F("arrow-down",qt);const Ft=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Gt=F("arrow-up",Ft);const Wt=[["path",{d:"m7 6 5 5 5-5",key:"1lc07p"}],["path",{d:"m7 13 5 5 5-5",key:"1d48rs"}]],Ut=F("chevrons-down",Wt);const Bt=[["path",{d:"m17 11-5-5-5 5",key:"e8nh98"}],["path",{d:"m17 18-5-5-5 5",key:"2avn1x"}]],Kt=F("chevrons-up",Bt);const Ht=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],Qt=F("gauge",Ht);const Vt=[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]],Yt=F("git-branch",Vt);const Xt=[["path",{d:"M5 12h14",key:"1ays0h"}]],Zt=F("minus",Xt);const Jt=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Jn=F("search",Jt);const en=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],tn=F("shield-alert",en);const nn=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],sn=F("shield",nn);const rn=[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M17 20V8",key:"1tkaf5"}]],on=F("signal-high",rn);const an=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],es=F("square-pen",an);const cn=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],ln=F("zap",cn);function ot(t){const n=be(),r=rt({queryKey:D.sessions.runtime(t),queryFn:()=>de.get(`/sessions/${t}/runtime`),enabled:!!t});return a.useEffect(()=>{if(!t)return;const o=Ct.connect(),i=x=>{x.sessionId===t&&n.invalidateQueries({queryKey:D.sessions.runtime(t)})},m=x=>{x.sessionId===t&&n.setQueryData(D.sessions.runtime(t),x.state)},u=()=>{n.invalidateQueries({queryKey:D.sessions.runtime(t)})};return o.on(ae.SESSION_PERMISSION_REQUESTED,i),o.on(ae.SESSION_PERMISSION_INVALIDATED,i),o.on(ae.SESSION_RUNTIME_STATE_CHANGED,m),o.on("connect",u),()=>{o.off(ae.SESSION_PERMISSION_REQUESTED,i),o.off(ae.SESSION_PERMISSION_INVALIDATED,i),o.off(ae.SESSION_RUNTIME_STATE_CHANGED,m),o.off("connect",u)}},[t,n]),r}function dn(t){return t==="RUNNING"||t==="AWAITING_PERMISSION"||t==="CANCELLING"}function mn(t){return t===Je.RUNNING||t===Je.PENDING}function ts(t,n){const{data:r}=ot(t);return{runtimeState:r,isActive:mn(n)||dn(r?.turnState),isCancelling:r?.turnState==="CANCELLING"}}function un(){const t=be();return je({mutationFn:({sessionId:n,requestId:r,optionId:o})=>de.post(`/sessions/${n}/permissions/${r}/resolve`,{optionId:o}),onSettled:(n,r,o)=>{t.invalidateQueries({queryKey:D.sessions.runtime(o.sessionId)})}})}function ns(){const t=be();return je({mutationFn:n=>de.post(`/sessions/${n}/start`),onSuccess:(n,r)=>{t.invalidateQueries({queryKey:D.sessions.detail(r)}),t.invalidateQueries({queryKey:D.tasks.all})}})}const pn=45e3;function ss(){const t=be();return je({mutationFn:async n=>{try{return await de.post(`/sessions/${n}/stop`,void 0,{signal:AbortSignal.timeout(pn)})}catch(r){throw r instanceof DOMException&&r.name==="TimeoutError"?new Error("Stop request timed out before the server answered. The session may still be stopping; refresh the status and retry."):r}},onError:n=>{kt.error(jt("Failed to stop session. Refreshing status; check it and try again."),{description:n instanceof Error?n.message:void 0})},onSettled:(n,r,o)=>{t.setQueryData(D.sessions.runtime(o),i=>i?.turnState==="CANCELLING"?{...i,turnState:"IDLE"}:i),Promise.allSettled([t.invalidateQueries({queryKey:D.sessions.detail(o)}),t.invalidateQueries({queryKey:D.sessions.runtime(o)}),t.invalidateQueries({queryKey:D.workspaces.all}),t.invalidateQueries({queryKey:D.tasks.all})])}})}function rs(){const t=be();return je({mutationFn:({id:n,message:r,providerId:o})=>de.post(`/sessions/${n}/message`,{message:r,providerId:o}),onSuccess:()=>{t.invalidateQueries({queryKey:D.workspaces.all}),t.invalidateQueries({queryKey:D.tasks.all})}})}function os({sessionId:t,compact:n=!1}){const{t:r}=me(),{data:o}=ot(t),i=un(),m=o?.pendingPermissions[0],u=m?.requestId,x=i.reset;return a.useEffect(()=>{x()},[u,x]),m?e.jsx("div",{className:N("mb-2 border-l-2 border-warning bg-warning/5 px-3 py-2.5",n&&"px-2.5 py-2"),children:e.jsxs("div",{className:"flex min-w-0 items-start gap-2",children:[e.jsx(tn,{className:"mt-0.5 h-4 w-4 shrink-0 text-warning","aria-hidden":"true"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:r("Permission required")}),e.jsx("div",{className:"mt-0.5 break-words text-xs text-muted-foreground",children:m.toolSummary||m.toolName||r("The agent needs approval to continue.")}),e.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:m.options.map(p=>e.jsxs("button",{type:"button",disabled:i.isPending,onClick:()=>i.mutate({sessionId:t,requestId:m.requestId,optionId:p.optionId}),className:N("inline-flex min-h-8 items-center gap-1.5 border px-3 text-xs font-medium transition-colors disabled:opacity-50",p.kind.startsWith("reject")?"border-destructive/30 text-destructive hover:bg-destructive/10":"border-border bg-background text-foreground hover:bg-muted"),children:[i.isPending&&i.variables?.requestId===m.requestId&&i.variables.optionId===p.optionId?e.jsx(ge,{className:"h-3.5 w-3.5 animate-spin","aria-hidden":"true"}):null,p.name]},p.optionId))}),i.error?e.jsx("div",{className:"mt-1.5 text-xs text-destructive",role:"alert",children:i.error.message}):null]})]})}):null}function we(t){return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}K`:t.toString()}function fn(t){return t>=.9?"text-red-500":t>=.7?"text-amber-500":"text-neutral-400"}function as({usage:t,tooltipSide:n="top"}){const{t:r}=me();if(!t)return null;const o=t.modelContextWindow,i=o?t.totalTokens/o:0,m=o?Math.min(Math.round(i*100),100):null,u=o?fn(i):"text-neutral-400",x=o?e.jsx("span",{children:r("上下文: {used} / {max} tokens",{used:we(t.totalTokens),max:we(o)})}):e.jsx("span",{children:r("已使用: {used} tokens",{used:we(t.totalTokens)})});return e.jsx(Oe,{content:x,side:n,children:e.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1.5 text-xs rounded-lg hover:bg-neutral-100 transition-colors cursor-default select-none",children:[e.jsx(Qt,{size:14,className:u}),e.jsxs("span",{className:`tabular-nums ${u}`,children:[we(t.totalTokens),m!==null&&e.jsxs("span",{className:"text-neutral-300 ml-0.5",children:["/ ",m,"%"]})]})]})})}const xn={damping:.7,stiffness:.05,mass:1.25},hn=70,gn=1e3/60,bn=350;let Ce=!1;globalThis.document?.addEventListener("mousedown",()=>{Ce=!0});globalThis.document?.addEventListener("mouseup",()=>{Ce=!1});globalThis.document?.addEventListener("click",()=>{Ce=!1});const is=(t={})=>{const[n,r]=a.useState(!1),[o,i]=a.useState(t.initial!==!1),[m,u]=a.useState(!1),x=a.useRef(null);x.current=t;const p=a.useCallback(()=>{if(!Ce)return!1;const d=window.getSelection();if(!d||!d.rangeCount)return!1;const g=d.getRangeAt(0);return g.commonAncestorContainer.contains(h.current)||h.current?.contains(g.commonAncestorContainer)},[]),b=a.useCallback(d=>{s.isAtBottom=d,i(d)},[]),k=a.useCallback(d=>{s.escapedFromLock=d,r(d)},[]),s=a.useMemo(()=>{let d;return{escapedFromLock:n,isAtBottom:o,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return h.current?.scrollTop??0},set scrollTop(g){h.current&&(h.current.scrollTop=g,s.ignoreScrollToTop=h.current.scrollTop)},get targetScrollTop(){return!h.current||!I.current?0:h.current.scrollHeight-1-h.current.clientHeight},get calculatedTargetScrollTop(){if(!h.current||!I.current)return 0;const{targetScrollTop:g}=this;if(!t.targetScrollTop)return g;if(d?.targetScrollTop===g)return d.calculatedScrollTop;const y=Math.max(Math.min(t.targetScrollTop(g,{scrollElement:h.current,contentElement:I.current}),g),0);return d={targetScrollTop:g,calculatedScrollTop:y},requestAnimationFrame(()=>{d=void 0}),y},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=hn}}},[]),v=a.useCallback((d={})=>{typeof d=="string"&&(d={animation:d}),d.preserveScrollPosition||b(!0);const g=Date.now()+(Number(d.wait)||0),y=Le(x.current,d.animation),{ignoreEscapes:C=!1}=d;let S,M=s.calculatedTargetScrollTop;d.duration instanceof Promise?d.duration.finally(()=>{S=Date.now()}):S=g+(d.duration??0);const R=async()=>{const U=new Promise(requestAnimationFrame).then(()=>{if(!s.isAtBottom)return s.animation=void 0,!1;const{scrollTop:q}=s,B=performance.now(),Q=(B-(s.lastTick??B))/gn;if(s.animation||(s.animation={behavior:y,promise:U,ignoreEscapes:C}),s.animation.behavior===y&&(s.lastTick=B),p()||g>Date.now())return R();if(q<Math.min(M,s.calculatedTargetScrollTop)){if(s.animation?.behavior===y){if(y==="instant")return s.scrollTop=s.calculatedTargetScrollTop,R();s.velocity=(y.damping*s.velocity+y.stiffness*s.scrollDifference)/y.mass,s.accumulated+=s.velocity*Q,s.scrollTop+=s.accumulated,s.scrollTop!==q&&(s.accumulated=0)}return R()}return S>Date.now()?(M=s.calculatedTargetScrollTop,R()):(s.animation=void 0,s.scrollTop<s.calculatedTargetScrollTop?v({animation:Le(x.current,x.current.resize),ignoreEscapes:C,duration:Math.max(0,S-Date.now())||void 0}):s.isAtBottom)});return U.then(q=>(requestAnimationFrame(()=>{s.animation||(s.lastTick=void 0,s.velocity=0)}),q))};return d.wait!==!0&&(s.animation=void 0),s.animation?.behavior===y?s.animation.promise:R()},[b,p,s]),f=a.useCallback(()=>{k(!0),b(!1)},[k,b]),w=a.useCallback(({target:d})=>{if(d!==h.current)return;const{scrollTop:g,ignoreScrollToTop:y}=s;let{lastScrollTop:C=g}=s;s.lastScrollTop=g,s.ignoreScrollToTop=void 0,y&&y>g&&(C=y),u(s.isNearBottom),setTimeout(()=>{if(s.resizeDifference||g===y)return;if(p()){k(!0),b(!1);return}const S=g>C,M=g<C;if(s.animation?.ignoreEscapes){s.scrollTop=C;return}M&&(k(!0),b(!1)),S&&k(!1),!s.escapedFromLock&&s.isNearBottom&&b(!0)},1)},[k,b,p,s]),O=a.useCallback(({target:d,deltaY:g})=>{let y=d;for(;!["scroll","auto"].includes(getComputedStyle(y).overflow);){if(!y.parentElement)return;y=y.parentElement}y===h.current&&g<0&&h.current.scrollHeight>h.current.clientHeight&&!s.animation?.ignoreEscapes&&(k(!0),b(!1))},[k,b,s]),h=tt(d=>{h.current?.removeEventListener("scroll",w),h.current?.removeEventListener("wheel",O),d?.addEventListener("scroll",w,{passive:!0}),d?.addEventListener("wheel",O,{passive:!0})},[]),I=tt(d=>{if(s.resizeObserver?.disconnect(),!d)return;let g;s.resizeObserver=new ResizeObserver(([y])=>{const{height:C}=y.contentRect,S=C-(g??C);if(s.resizeDifference=S,s.scrollTop>s.targetScrollTop&&(s.scrollTop=s.targetScrollTop),u(s.isNearBottom),S>=0){const M=Le(x.current,g?x.current.resize:x.current.initial);v({animation:M,wait:!0,preserveScrollPosition:!0,duration:M==="instant"?void 0:bn})}else s.isNearBottom&&(k(!1),b(!0));g=C,requestAnimationFrame(()=>{setTimeout(()=>{s.resizeDifference===S&&(s.resizeDifference=0)},1)})}),s.resizeObserver?.observe(d)},[]);return{contentRef:I,scrollRef:h,scrollToBottom:v,stopScroll:f,isAtBottom:o||m,isNearBottom:m,escapedFromLock:n,state:s}};function tt(t,n){const r=a.useCallback(o=>(r.current=o,t(o)),n);return r}const _e=new Map;function Le(...t){const n={...xn};let r=!1;for(const i of t){if(i==="instant"){r=!0;continue}typeof i=="object"&&(r=!1,n.damping=i.damping??n.damping,n.stiffness=i.stiffness??n.stiffness,n.mass=i.mass??n.mass)}const o=JSON.stringify(n);return _e.has(o)||_e.set(o,Object.freeze(n)),r?"instant":_e.get(o)}function cs({providers:t,currentProviderId:n,agentType:r,runtimeType:o,onSelect:i}){const{t:m}=me(),[u,x]=a.useState(!1),p=a.useRef(null),b=o===ie.ACP?ie.ACP:ie.CLI,k=t.filter(v=>String(v.provider.agentType)===r&&(v.provider.runtimeType===ie.ACP?ie.ACP:ie.CLI)===b),s=t.find(v=>v.provider.id===n);return a.useEffect(()=>{function v(f){p.current&&!p.current.contains(f.target)&&x(!1)}if(u)return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[u]),k.length<=1?e.jsxs("div",{className:"flex items-center gap-1 text-xs text-neutral-400 px-2 py-1.5 select-none cursor-default",children:[e.jsx(he,{agentType:s?.provider.agentType??r,className:"size-3.5"}),e.jsx("span",{className:"min-w-0 truncate",children:s?.provider.name?Xe(s.provider.name,12):r})]}):e.jsxs("div",{className:"relative",ref:p,children:[e.jsxs("button",{onClick:()=>x(!u),className:"flex items-center gap-1 text-xs px-2 py-1.5 rounded-lg transition-colors cursor-pointer hover:bg-neutral-100 text-neutral-400 hover:text-neutral-600",title:`Provider: ${s?.provider.name??r} (click to change)`,children:[e.jsx(he,{agentType:s?.provider.agentType??r,className:"size-3.5"}),e.jsx("span",{className:"min-w-0 truncate",children:s?.provider.name?Xe(s.provider.name,12):r}),e.jsx(le,{size:12,className:`shrink-0 transition-transform ${u?"rotate-180":""}`})]}),u&&e.jsxs("div",{className:"absolute bottom-full right-0 mb-1 bg-white rounded-lg border border-neutral-200 shadow-lg py-1 min-w-[160px] z-50",children:[e.jsx("div",{className:"px-2 py-1 text-xs text-neutral-400 border-b border-neutral-100",children:m("切换渠道")}),k.map(v=>e.jsxs("button",{onClick:()=>{i(v.provider.id),x(!1)},className:`w-full flex items-center justify-between px-3 py-2 text-sm text-left hover:bg-neutral-50 transition-colors ${v.provider.id===n?"bg-blue-50 text-blue-600":"text-neutral-700"}`,children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(he,{agentType:v.provider.agentType,className:"size-4"}),e.jsx("span",{className:"truncate max-w-[120px]",children:v.provider.name}),v.provider.isDefault&&e.jsx("span",{className:"text-xs text-neutral-400",children:m("(默认)")})]}),v.provider.id===n&&e.jsx(te,{size:14,className:"shrink-0"})]},v.provider.id))]})]})}function ls(t,n){return a.useMemo(()=>{for(let r=t.length-1;r>=0;r--){const o=t[r];if(o.tokenUsage&&typeof o.tokenUsage.totalTokens=="number"&&o.tokenUsage.totalTokens>0)return{totalTokens:o.tokenUsage.totalTokens,modelContextWindow:o.tokenUsage.modelContextWindow}}return n??null},[t,n])}const Pe=[{value:ce.URGENT,code:"P0",label:"紧急",className:"bg-destructive/10 text-destructive",iconName:"chevrons-up"},{value:ce.HIGH,code:"P1",label:"高",className:"bg-warning/15 text-warning",iconName:"signal-high"},{value:ce.NORMAL,code:"P2",label:"普通",className:"bg-muted text-muted-foreground",iconName:"minus"},{value:ce.LOW,code:"P3",label:"低",className:"bg-info/10 text-info",iconName:"chevrons-down"}];function at(t){return Pe.find(n=>n.value===t)??Pe[2]}function nt({iconName:t,className:n}){switch(t){case"chevrons-up":return e.jsx(Kt,{className:n,"aria-hidden":"true"});case"signal-high":return e.jsx(on,{className:n,"aria-hidden":"true"});case"chevrons-down":return e.jsx(Ut,{className:n,"aria-hidden":"true"});default:return e.jsx(Zt,{className:n,"aria-hidden":"true"})}}function ds({priority:t,className:n}){const r=at(t);return e.jsx("span",{className:N("inline-flex shrink-0 items-center rounded px-1.5 py-0.5 text-[10px] font-semibold leading-none",r.className,n),title:`${r.code} · ${r.label}`,children:r.code})}function vn({value:t,onChange:n,disabled:r=!1,compact:o=!1}){const{t:i}=me(),[m,u]=a.useState(!1),x=a.useRef(null),p=at(t);return a.useEffect(()=>{if(!m)return;const b=k=>{x.current&&!x.current.contains(k.target)&&u(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[m]),e.jsxs("div",{className:"relative",ref:x,children:[e.jsxs("button",{type:"button",disabled:r||!n,onClick:()=>u(b=>!b),"aria-haspopup":"listbox","aria-expanded":m,"aria-label":i("Task priority"),className:N("inline-flex items-center gap-1.5 rounded-md text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 disabled:cursor-not-allowed disabled:opacity-50",o?"px-1.5 py-1":"px-2 py-1.5",p.className),children:[e.jsx(nt,{iconName:p.iconName,className:"size-3.5"}),e.jsx("span",{children:i(p.label)}),n?e.jsx(le,{className:N("size-3 transition-transform",m&&"rotate-180"),"aria-hidden":"true"}):null]}),m&&e.jsx("div",{className:"absolute right-0 top-full z-50 mt-1.5 w-36 rounded-lg border border-border bg-popover p-1 shadow-lg",role:"listbox","aria-label":i("Task priority"),children:Pe.map(b=>{const k=b.value===p.value;return e.jsxs("button",{type:"button",role:"option","aria-selected":k,onClick:()=>{n?.(b.value),u(!1)},className:"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-xs text-foreground/80 transition-colors hover:bg-accent",children:[e.jsx("span",{className:N("inline-flex size-5 items-center justify-center rounded",b.className),children:e.jsx(nt,{iconName:b.iconName,className:"size-3.5"})}),e.jsxs("span",{className:"flex-1",children:[b.code," · ",i(b.label)]}),k?e.jsx(te,{className:"size-3.5 text-foreground","aria-hidden":"true"}):null]},b.value)})})]})}function st(t,n,r,o){if(r.filter(u=>u===o).length<=1)return t;const m=r.slice(0,n+1).filter(u=>u===o).length;return`${t} #${m}`}function yn(t){return Object.values(t).filter(Boolean).length}function Nn({mode:t,setMode:n,selectedTemplateId:r,setSelectedTemplateId:o,selectedMemberPresetIds:i,setSelectedMemberPresetIds:m,disabled:u=!1,compact:x=!1}){const{t:p}=me(),{preserveDesktopSearch:b}=St(),[k,s]=a.useState(!1),{data:v}=Dt(),{data:f,isError:w,isFetching:O,isLoading:h,refetch:I}=Tt(),{data:d,isError:g,isFetching:y,isLoading:C,refetch:S}=Et(),M=a.useMemo(()=>new Map((v??[]).map(({provider:l,availability:j})=>[l.id,l.name+(j.type==="NOT_FOUND"?p(" (不可用)"):"")])),[v,p]),R=a.useMemo(()=>new Map((f??[]).map(l=>[l.id,l])),[f]),U=a.useMemo(()=>new Map((d??[]).map(l=>[l.id,l])),[d]),q=a.useMemo(()=>i.map(l=>R.get(l)).filter(l=>!!l),[R,i]);a.useEffect(()=>{f!==void 0&&m(l=>{const j=l.filter(z=>R.has(z));return j.length===l.length&&j.every((z,G)=>z===l[G])?l:j})},[f,R,m]),a.useEffect(()=>{d!==void 0&&o(l=>!l||U.has(l)?l:null)},[o,U,d]);const B=l=>{u||o(j=>j===l?null:l)},Q=l=>{u||m(j=>[...j,l])},ne=l=>{u||m(j=>j.filter((z,G)=>G!==l))},K=e.jsxs("section",{className:"min-w-0",children:[e.jsx("div",{className:"text-[11px] font-medium text-muted-foreground mb-1.5",children:p("团队模板")}),g?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive",children:[e.jsx("span",{children:p("团队模板加载失败")}),e.jsx("button",{type:"button",onClick:()=>{S()},disabled:u||y,className:"ml-2 underline hover:no-underline",children:p("重试")})]}):C?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(ge,{size:12,className:"animate-spin"}),p("加载中...")]}):(d??[]).length===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border bg-background px-3 py-3 text-xs text-muted-foreground",children:[p("当前没有团队模板"),e.jsx(Ze,{to:b("/settings/team"),className:"ml-1.5 text-info hover:underline",children:p("去创建")})]}):e.jsx("div",{className:N("space-y-1.5",x&&"sm:grid sm:grid-cols-2 sm:gap-1.5 sm:space-y-0"),children:(d??[]).map(l=>{const j=l.id===r,z=l.members?.length??0,G=l.members?.map(H=>H.memberPresetId)??[],Z=l.members?.slice(0,3).map((H,Y)=>st(H.memberPreset?.name??H.memberPresetId,Y,G,H.memberPresetId)).join(", ");return e.jsx("button",{type:"button",onClick:()=>B(l.id),disabled:u,className:N("w-full rounded-lg px-3 py-2 text-left border transition-all disabled:cursor-not-allowed disabled:opacity-60",j?"bg-background border-foreground/20 shadow-sm":"bg-background border-border/60 hover:border-border hover:bg-accent"),children:e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:N("text-xs truncate",j?"font-medium text-foreground":"text-foreground"),children:l.name}),e.jsxs("span",{className:"text-[10px] text-muted-foreground shrink-0",children:[z,p("人")]})]}),Z&&e.jsx("div",{className:"mt-0.5 text-[10px] text-muted-foreground truncate",children:Z})]}),j&&e.jsx(te,{size:13,className:"shrink-0 text-foreground"})]})},l.id)})})]}),se=q.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mb-2",children:q.map((l,j)=>{const z=st(l.name,j,i,l.id);return e.jsxs("div",{className:"inline-flex items-center gap-1 pl-1 pr-0.5 py-0.5 rounded-md border border-border/60 bg-background text-[10px] text-foreground",children:[e.jsx(et,{name:l.name,avatar:l.avatar,className:"h-3.5 w-3.5 text-[7px]"}),e.jsx("span",{className:"max-w-[80px] truncate",children:z}),e.jsx("button",{type:"button",onClick:()=>ne(j),disabled:u,className:"p-0.5 text-muted-foreground hover:text-destructive disabled:opacity-30 rounded transition-colors",children:e.jsx(Mt,{size:9})})]},`${l.id}-${j}`)})}),V=w?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive",children:[e.jsx("span",{children:p("成员预设加载失败")}),e.jsx("button",{type:"button",onClick:()=>{I()},disabled:u||O,className:"ml-2 underline hover:no-underline",children:p("重试")})]}):h?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(ge,{size:12,className:"animate-spin"}),p("加载中...")]}):(f??[]).length===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border bg-background px-3 py-3 text-xs text-muted-foreground",children:[p("当前没有成员预设"),e.jsx(Ze,{to:b("/settings/team"),className:"ml-1.5 text-info hover:underline",children:p("去创建")})]}):e.jsx("div",{className:"space-y-1 max-h-[180px] overflow-y-auto pr-1",children:(f??[]).map(l=>{const j=i.filter(Z=>Z===l.id).length,z=M.get(l.providerId)??l.providerId,G=yn(l.capabilities);return e.jsxs("button",{type:"button",onClick:()=>Q(l.id),disabled:u,className:N("flex items-center gap-2 w-full px-2 py-1.5 rounded-lg text-left border border-transparent transition-all",u&&"cursor-not-allowed opacity-60","bg-background hover:bg-accent hover:border-border/60"),children:[e.jsx(et,{name:l.name,avatar:l.avatar,className:"h-6 w-6 text-[9px] shrink-0"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-xs text-foreground truncate",children:l.name}),e.jsxs("div",{className:"text-[10px] text-muted-foreground truncate",children:[z," · ",G,"/10"]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[j>0&&e.jsxs("span",{className:"text-[10px] text-foreground font-semibold",children:["×",j]}),e.jsx(zt,{size:12,className:"text-muted-foreground"})]})]},l.id)})}),re=q.length>0&&e.jsx("span",{className:"inline-flex items-center justify-center min-w-[16px] h-4 rounded-full bg-primary text-[10px] font-semibold text-primary-foreground px-1.5",children:q.length}),ue=e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-muted-foreground shrink-0",children:p("执行模式")}),e.jsxs("div",{className:"inline-flex items-center h-7 rounded-md border border-border/70 bg-background p-0.5",children:[e.jsxs("button",{type:"button",onClick:()=>!u&&n("AUTO"),disabled:u,className:N("flex items-center gap-1.5 rounded h-full px-2.5 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",t==="AUTO"?"bg-primary text-primary-foreground font-medium shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(ln,{size:11}),p("自动模式")]}),e.jsxs("button",{type:"button",onClick:()=>!u&&n("CONFIRM"),disabled:u,className:N("flex items-center gap-1.5 rounded h-full px-2.5 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",t==="CONFIRM"?"bg-primary text-primary-foreground font-medium shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(sn,{size:11}),p("确认模式")]})]})]});return x?e.jsxs("div",{className:"space-y-3",children:[ue,K,e.jsxs("div",{className:"border-t border-border/50 pt-2.5",children:[e.jsxs("button",{type:"button",onClick:()=>!u&&s(l=>!l),disabled:u,"aria-expanded":k,className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground hover:text-foreground transition-colors disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx(le,{size:12,className:N("transition-transform",k?"":"-rotate-90")}),p("追加独立成员"),re]}),k&&e.jsxs("div",{className:"mt-2",children:[se,V]})]})]}):e.jsxs("div",{className:"space-y-3.5",children:[ue,e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[K,e.jsxs("section",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[e.jsx("span",{className:"text-[11px] font-medium text-muted-foreground",children:p("追加成员")}),re]}),se,V]})]})]})}function wn({commands:t,selectedIndex:n,query:r,hasCatalog:o,title:i="Slash Commands",queryPrefix:m="/",emptyCatalogMessage:u="No slash commands catalog for this agent yet.",emptyQueryMessage:x,insertionHint:p="Enter / Tab to insert",compact:b=!1,onSelect:k}){const s=b?"px-1.5 pb-1.5":"px-2 pb-2",v=b?"px-2 py-1.5":"px-2.5 py-2",f=b?"max-h-36":"max-h-48";return e.jsxs("div",{className:b?"pt-1.5":"pt-2",children:[e.jsxs("div",{className:`mb-1 flex items-center justify-between ${b?"px-2 pt-0.5":"px-3 pt-1"}`,children:[e.jsx("span",{className:"text-[10px] font-medium uppercase tracking-[0.14em] text-neutral-400",children:i}),e.jsx("span",{className:"text-[10px] text-neutral-400",children:p})]}),t.length===0?e.jsx("div",{className:`${b?"px-2 pb-2 pt-1.5 text-[11px]":"px-3 pb-3 pt-2 text-xs"} text-neutral-400`,children:o?x??`No matches for ${m}${r}`:u}):e.jsx("div",{className:`${s} ${f} overflow-y-auto`,children:t.map((w,O)=>e.jsxs("button",{type:"button",onMouseDown:h=>h.preventDefault(),onClick:()=>k(w),className:`w-full rounded-lg border text-left transition-colors ${O===n?"border-neutral-300 bg-neutral-50":"border-transparent hover:border-neutral-200 hover:bg-neutral-50/80"} ${v}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"font-mono text-[13px] text-neutral-900",children:w.command}),w.kind&&w.kind!=="builtin"?e.jsx("span",{className:"rounded-full border border-neutral-200 px-1.5 py-0.5 text-[9px] uppercase tracking-[0.12em] text-neutral-500",children:w.scope?`${w.scope} ${w.kind}`:w.kind}):null]}),e.jsx("div",{className:`${b?"mt-0.5 text-[11px]":"mt-1 text-xs"} text-neutral-500`,children:w.description})]},w.command))})]})}const ee=12,ke=8;function kn({open:t,anchorRef:n,commands:r,selectedIndex:o,query:i,hasCatalog:m,title:u,queryPrefix:x,emptyCatalogMessage:p,emptyQueryMessage:b,insertionHint:k,compact:s=!1,onSelect:v}){const f=a.useRef(null),[w,O]=a.useState(null);return a.useLayoutEffect(()=>{if(!t){O(null);return}const h=n.current;if(!h)return;let I=0;const d=()=>{const C=n.current;if(!C)return;const S=C.getBoundingClientRect(),M=window.innerWidth,R=window.innerHeight,U=s?260:320,q=s?M-ee*2:560,B=Math.min(Math.max(S.width,U),Math.max(U,q)),Q=Math.min(Math.max(ee,S.left),Math.max(ee,M-ee-B)),ne=R-S.bottom-ke-ee,K=S.top-ke-ee,se=f.current?.offsetHeight??(s?220:280),V=s?240:320,re=ne<180&&K>ne,l=Math.max(120,Math.min(V,re?K:ne)),j=re?Math.max(ee,S.top-ke-Math.min(se,l)):Math.min(R-ee-Math.min(se,l),S.bottom+ke);O({top:j,left:Q,width:B,maxHeight:l})},g=()=>{cancelAnimationFrame(I),I=requestAnimationFrame(d)};g();const y=new ResizeObserver(g);return y.observe(h),f.current&&y.observe(f.current),window.addEventListener("resize",g),window.addEventListener("scroll",g,!0),window.visualViewport?.addEventListener("resize",g),window.visualViewport?.addEventListener("scroll",g),()=>{cancelAnimationFrame(I),y.disconnect(),window.removeEventListener("resize",g),window.removeEventListener("scroll",g,!0),window.visualViewport?.removeEventListener("resize",g),window.visualViewport?.removeEventListener("scroll",g)}},[n,r.length,s,t,i,o]),!t||!w||typeof document>"u"?null:It.createPortal(e.jsx("div",{className:"pointer-events-none fixed inset-0 z-[120]",children:e.jsx("div",{ref:f,className:"pointer-events-auto fixed overflow-hidden rounded-xl border border-neutral-200 bg-white shadow-lg shadow-neutral-200/70",style:{top:w.top,left:w.left,width:w.width,maxHeight:w.maxHeight},children:e.jsx(wn,{commands:r,selectedIndex:o,query:i,hasCatalog:m,title:u,queryPrefix:x,emptyCatalogMessage:p,emptyQueryMessage:b,insertionHint:k,compact:s,onSelect:v})})}),document.body)}function jn({agentType:t,workingDir:n}){return rt({queryKey:D.system.slashCommandCatalog(t,n),queryFn:async()=>(await de.get("/system/slash-command-catalog",{params:{agentType:String(t),...n?{workingDir:n}:{}}})).commands,enabled:!!t,staleTime:3e4})}function Cn(t,n){const r=new Set,o=[];for(const i of[...t,...n]){const m=i.command.trim().toLowerCase();!m||r.has(m)||(r.add(m),o.push(i.kind?i:{...i,kind:"builtin"}))}return o}function Se(t){return t.trim().toLowerCase().replace(/^[/$]/,"")}function Sn(t){return Se(t.command)}function Tn(t,n){if(!n)return 1e3;const r=Sn(t),o=t.aliases?.map(Se)??[],i=[r,...o];let m=0;for(const x of i)x===n?m=Math.max(m,500):x.startsWith(n)?m=Math.max(m,400-(x.length-n.length)):x.includes(n)&&(m=Math.max(m,250-x.indexOf(n)));return m>0?m:`${r} ${o.join(" ")} ${t.description}`.toLowerCase().includes(n)?100:0}function ms(t){const n=/(^|[\s])\$([^\s]*)$/.exec(t);if(!n||n.index===void 0)return null;const r=n.index+n[1].length;return{query:Se(n[2]),replaceStart:r}}function En(t,n){const r=Se(n);return r?t.map((o,i)=>({command:o,index:i,score:Tn(o,r)})).filter(o=>o.score>0).sort((o,i)=>i.score-o.score||o.index-i.index||o.command.command.localeCompare(i.command.command)).map(o=>o.command):t.slice()}const Mn=[{command:"/permissions",description:"Manage what Codex can do without approval"},{command:"/sandbox-add-read-dir",description:"Grant read access to another directory"},{command:"/agent",description:"Switch between built-in agent personas"},{command:"/apps",description:"Manage connected apps"},{command:"/clear",description:"Start a fresh conversation"},{command:"/compact",description:"Replace chat context with a summary"},{command:"/copy",description:"Copy the last assistant message to your clipboard"},{command:"/diff",description:"Show the current git diff"},{command:"/experimental",description:"Toggle experimental features"},{command:"/feedback",description:"Share feedback on Codex CLI"},{command:"/init",description:"Create or update AGENTS.md for the repo"},{command:"/logout",description:"Sign out of Codex"},{command:"/mcp",description:"Manage MCP servers"},{command:"/mention",description:"Add files or directories to the conversation context"},{command:"/model",description:"Change the active model"},{command:"/fast",description:"Toggle low reasoning mode"},{command:"/plan",description:"Toggle plan mode for code changes"},{command:"/personality",description:"Select how Codex communicates"},{command:"/ps",description:"List running background tasks"},{command:"/fork",description:"Fork the current conversation state"},{command:"/resume",description:"Resume a previous conversation"},{command:"/new",description:"Open a conversation picker to start or resume"},{command:"/quit",description:"Exit Codex CLI",aliases:["exit"]},{command:"/review",description:"Run a code review"},{command:"/status",description:"Show session and configuration status"},{command:"/debug-config",description:"Inspect the effective configuration"},{command:"/statusline",description:"Configure the custom status line"},{command:"/skills",description:"Browse available skills and insert a $skill mention"}],In=[{command:"/clear",description:"Clear the conversation history"},{command:"/compact",description:"Compact the conversation context",aliases:["compact focus"]},{command:"/config",description:"Open the configuration panel"},{command:"/cost",description:"Show token usage and cost"},{command:"/doctor",description:"Check Claude Code installation health"},{command:"/help",description:"Show help and available commands"},{command:"/init",description:"Initialize project instructions"},{command:"/login",description:"Sign in to Claude Code"},{command:"/logout",description:"Sign out of Claude Code"},{command:"/mcp",description:"Manage MCP servers"},{command:"/memory",description:"Edit project memory files"},{command:"/model",description:"Change the active model"},{command:"/permissions",description:"Review or update tool permissions"},{command:"/pr_comments",description:"Read pull request review comments"},{command:"/review",description:"Run a code review"},{command:"/status",description:"Show account and system status"},{command:"/terminal-setup",description:"Configure terminal newline shortcuts"},{command:"/vim",description:"Toggle vim mode"}],Rn=[{command:"/bug",description:"File an issue about Gemini CLI"},{command:"/chat",description:"Manage chat checkpoints and exports"},{command:"/clear",description:"Clear the terminal display"},{command:"/compress",description:"Replace chat context with a summary"},{command:"/copy",description:"Copy the last Gemini CLI output"},{command:"/directory",description:"Manage additional workspace directories",aliases:["dir"]},{command:"/editor",description:"Choose the preferred editor"},{command:"/extensions",description:"List active Gemini CLI extensions"},{command:"/help",description:"Show help and command usage",aliases:["?"]},{command:"/mcp",description:"Show MCP servers and tools"},{command:"/memory",description:"Manage loaded GEMINI.md memory"},{command:"/restore",description:"Restore files from a tool checkpoint"},{command:"/settings",description:"Open the Gemini CLI settings editor"},{command:"/stats",description:"Show session statistics and token usage"},{command:"/theme",description:"Change the Gemini CLI theme"},{command:"/auth",description:"Change the authentication method"},{command:"/about",description:"Show version information"},{command:"/tools",description:"List currently available tools"},{command:"/privacy",description:"Review privacy and data collection settings"},{command:"/quit",description:"Exit Gemini CLI",aliases:["exit"]},{command:"/vim",description:"Toggle vim mode"},{command:"/init",description:"Generate a tailored GEMINI.md file"}],An=[{command:"/model",description:"Change the active model"},{command:"/plan",description:"Create or reopen a plan"},{command:"/ask",description:"Toggle ask mode (read-only Q&A)"},{command:"/debug",description:"Toggle debug mode"},{command:"/clear",description:"Start a new chat session",aliases:["new","new-chat","newchat"]},{command:"/compress",description:"Summarize the conversation to reduce context"},{command:"/vim",description:"Toggle vim mode"},{command:"/shell",description:"Enter shell mode"},{command:"/about",description:"Show CLI, system, and account information"},{command:"/setup-terminal",description:"Configure terminal newline shortcuts"},{command:"/feedback",description:"Share feedback with the Cursor team"},{command:"/open",description:"Open the repository git root in Cursor"},{command:"/cursor",description:"Alias for /open",aliases:["open"]},{command:"/resume-chat",description:"Resume a previous chat by folder name",aliases:["resume"]},{command:"/copy-request-id",description:"Copy the last request ID"},{command:"/copy-conversation-id",description:"Copy the current conversation ID"},{command:"/logout",description:"Sign out from Cursor"},{command:"/quit",description:"Exit Cursor Agent",aliases:["exit"]},{command:"/mcp",description:"Manage MCP servers"}],_n={[Ne.CODEX]:Mn,[Ne.CLAUDE_CODE]:In,[Ne.GEMINI_CLI]:Rn,[Ne.CURSOR_AGENT]:An};function it(t){return t.trim().toLowerCase().replace(/^\//,"")}function Ln(t){return t?(_n[t]??[]).map(n=>({...n,kind:n.kind??"builtin"})):[]}function On(t){const n=t.match(/^\s*\/([^\s]*)$/);return n?it(n[1]):null}function Pn(t,n){return En(t,it(n))}function Dn(t){const n=t.key==="Enter"&&!t.shiftKey&&!t.repeat&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229,r=t.key==="Tab"&&!t.shiftKey;return n||r}function zn({agentType:t,workingDir:n,input:r,setInput:o,textareaRef:i,minHeight:m,maxHeight:u}){const[x,p]=a.useState(0),{data:b=[]}=jn({agentType:t,workingDir:n}),k=a.useMemo(()=>Cn(Ln(t),b),[t,b]),s=a.useMemo(()=>On(r),[r]),v=a.useMemo(()=>s===null?[]:Pn(k,s),[k,s]),f=a.useCallback(()=>{const h=i.current;h&&(h.style.height="auto",h.style.height=`${Math.max(m,Math.min(h.scrollHeight,u))}px`)},[u,m,i]);a.useEffect(()=>{p(0)},[t,s]),a.useEffect(()=>{x<v.length||p(0)},[v.length,x]);const w=a.useCallback(h=>{const d=`${r.match(/^(\s*)\/[^\s]*$/)?.[1]??""}${h.command} `;o(d),requestAnimationFrame(()=>{const g=i.current;g&&(f(),g.focus(),g.setSelectionRange(d.length,d.length))})},[r,f,o,i]),O=a.useCallback(h=>s===null||v.length===0?!1:h.key==="ArrowDown"?(h.preventDefault(),p(I=>(I+1)%v.length),!0):h.key==="ArrowUp"?(h.preventDefault(),p(I=>(I-1+v.length)%v.length),!0):Dn(h)?(h.preventDefault(),w(v[x]??v[0]),!0):!1,[w,v,s,x]);return{allCommands:k,query:s,filteredCommands:v,selectedIndex:x,setSelectedIndex:p,applyCommand:w,handleKeyDown:O}}const $n="/assets/agent-tower-lockup-DPAcheCt.png";function us({className:t="h-6 w-auto max-[359px]:h-[22px]"}){return e.jsx("img",{src:$n,alt:"Agent Tower",className:`block shrink-0 select-none object-contain ${t}`})}const qn={idle:"","creating-task":"Creating Task...","creating-teamrun":"Creating TeamRun...","creating-workspace":"Creating Workspace...","creating-session":"Creating Session...","starting-session":"Starting Agent..."};function ps({variant:t="task",projects:n,providers:r,isProvidersLoading:o,onSubmit:i,defaultProjectId:m="",defaultProviderId:u="",onProjectChange:x,createStep:p,placeholder:b,submitLabel:k,pendingLabel:s,submitTitle:v}){const{t:f}=me(),[w,O]=a.useState(""),[h,I]=a.useState(m),[d,g]=a.useState(u),[y,C]=a.useState("SOLO"),[S,M]=a.useState(L.WORKTREE),[R,U]=a.useState(ce.NORMAL),[q,B]=a.useState({}),[Q,ne]=a.useState("AUTO"),[K,se]=a.useState(null),[V,re]=a.useState([]),[ue,l]=a.useState(!1),[j,z]=a.useState(!1),[G,Z]=a.useState(!1),[H,Y]=a.useState(!1),Te=a.useRef(null),Ee=a.useRef(null),Me=a.useRef(null),De=a.useRef(null),ze=a.useRef(null),$e=a.useRef(null),{files:qe,addFiles:oe,removeFile:ct,clear:Fe,buildMarkdownLinks:Ge,getDoneAttachments:We,isUploading:ve}=_t(),pe=Ot(),T=t==="conversation",E=t==="task"||t==="conversation",lt=k??f(T?"开始":"创建");a.useEffect(()=>{I(m),x?.(m)},[m,x]),a.useEffect(()=>{g(u)},[u]),a.useEffect(()=>{if(!j)return;const c=A=>{Te.current&&!Te.current.contains(A.target)&&z(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[j]),a.useEffect(()=>{if(!G)return;const c=A=>{Ee.current&&!Ee.current.contains(A.target)&&Z(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[G]),a.useEffect(()=>{if(!H)return;const c=A=>{Me.current&&!Me.current.contains(A.target)&&Y(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[H]);const W=a.useMemo(()=>n.find(c=>c.id===h),[n,h]),ye=a.useMemo(()=>r.find(c=>c.id===d),[r,d]),Ie=h?q[h]:void 0,dt=(Ie?.isGitRepo??W?.isGitRepo)!==!1,mt=(Ie?.worktreeReady??W?.worktreeReady)!==!1,$=!T&&!(dt&&mt),P=$?"SOLO":y,X=$?L.MAIN_DIRECTORY:S,ut=X===L.MAIN_DIRECTORY?f("本地模式"):f("工作树模式"),Ue=f("工作树隔离改动,支持 TeamRun、Merge、Rebase 和冲突解决。"),pt=f("本地模式会直接修改项目主目录,不会自动提交,也不能使用 Merge、Rebase 或冲突解决。"),ft=Ie?.reason??W?.reason,Be=f(ft==="NO_HEAD"?"已检测到 Git,但需要先提交一次才能使用工作树模式。":"初始化 Git 后可使用工作树模式。"),Ke=T||P==="SOLO"?ye?.agentType:null,J=zn({agentType:Ke,workingDir:T?void 0:W?.repoPath,input:w,setInput:O,textareaRef:ze,minHeight:76,maxHeight:220}),_=p!=="idle",He=!!K||V.length>0,fe=!_&&!ve&&w.trim().length>0&&(T?!!d:!!h&&(P==="SOLO"?!!d:He));a.useEffect(()=>{$&&(C("SOLO"),M(L.MAIN_DIRECTORY),l(!1),Y(!1))},[$]),a.useEffect(()=>{$||T||M(L.WORKTREE)},[T,$,W?.id]);const xt=a.useCallback(async()=>{if(!W||pe.isPending)return;const c=await pe.mutateAsync({id:W.id});B(A=>({...A,[W.id]:c})),c.worktreeReady&&(C("SOLO"),M(L.WORKTREE),Y(!1))},[pe,W]),Re=a.useCallback(async()=>{if(!fe)return;const c=E?Ge():"",A=E?We().map(xe=>xe.id):[];try{await i({title:w.trim(),description:"",projectId:T?"":h,providerId:d,mode:T?"SOLO":P,workspaceMode:!T&&P==="SOLO"?X:L.WORKTREE,teamRunMode:T?"AUTO":Q,teamTemplateId:T||$?null:K,memberPresetIds:T||$?[]:V,attachmentLinks:c,attachmentIds:A,priority:R}),O(""),U(ce.NORMAL),E&&Fe()}catch{}},[fe,E,Ge,We,i,w,T,h,d,P,X,Q,$,K,V,Fe,R]),ht=a.useCallback(c=>{J.handleKeyDown(c)||c.key==="Enter"&&!c.shiftKey&&!c.nativeEvent.isComposing&&c.nativeEvent.keyCode!==229&&(c.preventDefault(),Re())},[Re,J]),gt=a.useCallback(c=>{const A=c.target.files;A&&A.length>0&&oe(Array.from(A)),c.target.value=""},[oe]),bt=a.useCallback(c=>{I(c),x?.(c),z(!1)},[x]),vt=a.useCallback(c=>{if(!E)return;const A=c.clipboardData.items,xe=[];for(const Ve of A)if(Ve.kind==="file"){const Ye=Ve.getAsFile();Ye&&xe.push(Ye)}xe.length>0&&(c.preventDefault(),oe(xe))},[oe,E]),[Qe,Ae]=a.useState(!1),yt=a.useCallback(c=>{E&&(c.preventDefault(),Ae(!0))},[E]),Nt=a.useCallback(c=>{E&&(c.preventDefault(),Ae(!1))},[E]),wt=a.useCallback(c=>{if(!E)return;c.preventDefault(),Ae(!1);const A=c.dataTransfer.files;A.length>0&&oe(Array.from(A))},[oe,E]);return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{ref:De,className:N("relative bg-background rounded-xl border transition-colors duration-200","shadow-[0_1px_2px_rgba(0,0,0,0.05)]","hover:border-ring/40 focus-within:border-ring/60",Qe?"border-info bg-info/5":"border-border",_&&"opacity-80"),onDragOver:E?yt:void 0,onDragLeave:E?Nt:void 0,onDrop:E?wt:void 0,children:[E&&qe.length>0&&e.jsx("div",{className:"px-4 pt-3",children:e.jsx(Lt,{files:qe,onRemove:ct})}),e.jsx("textarea",{ref:ze,value:w,onChange:c=>O(c.target.value),onKeyDown:ht,onPaste:E?vt:void 0,placeholder:f(b||"Describe your task..."),disabled:_,autoFocus:!0,rows:1,className:"w-full px-4 pt-4 pb-2 bg-transparent border-none focus:outline-none resize-none text-[15px] text-foreground placeholder:text-muted-foreground/80 leading-relaxed",style:{minHeight:"76px",maxHeight:"220px",fieldSizing:"content"}}),E&&Qe&&e.jsx("div",{className:"px-4 pb-2",children:e.jsx("div",{className:"flex items-center justify-center py-3 border border-dashed border-info/40 rounded-lg text-xs font-medium text-info",children:f("Drop files here")})}),e.jsxs("div",{className:"flex items-center justify-between px-2 pb-2 pt-1",children:[e.jsx("div",{className:"flex items-center gap-1",children:E?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:()=>$e.current?.click(),disabled:_||ve,className:"p-2 text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg transition-colors disabled:opacity-40 disabled:cursor-not-allowed",title:f("Attach files"),children:e.jsx($t,{size:18})}),e.jsx("input",{ref:$e,type:"file",multiple:!0,onChange:gt,className:"hidden"})]}):null}),e.jsxs("div",{className:"flex items-center gap-2",children:[E&&ve&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ge,{size:14,className:"animate-spin"}),f("Uploading...")]}),_&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ge,{size:14,className:"animate-spin"}),f(s??qn[p])]}),!T&&!_&&!ve&&P==="TEAM"&&!He&&w.trim().length>0&&e.jsx("span",{className:"text-[11px] text-warning",children:f("请选择团队模板或追加成员")}),fe&&e.jsxs("span",{className:"hidden sm:inline-flex items-center gap-1 text-[11px] text-muted-foreground/80 select-none",children:[e.jsx("kbd",{className:"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded border border-border bg-muted/60 text-[10px] font-medium text-muted-foreground leading-none",children:"⏎"}),lt]}),e.jsx("button",{type:"button",onClick:Re,disabled:!fe,className:N("flex items-center justify-center size-8 rounded-lg transition-all duration-200",fe?"bg-primary text-primary-foreground hover:bg-primary/90 shadow-sm":"bg-muted text-muted-foreground/40 cursor-not-allowed"),title:f(v||"Create & Start"),children:e.jsx(Gt,{size:16,strokeWidth:2.5})})]})]})]}),e.jsx(kn,{open:!!Ke&&J.query!==null,anchorRef:De,commands:J.filteredCommands,selectedIndex:J.selectedIndex,query:J.query??"",hasCatalog:J.allCommands.length>0,compact:!0,onSelect:J.applyCommand}),e.jsxs("div",{className:"flex items-center flex-wrap gap-1.5 mt-2.5 px-0.5",children:[!T&&e.jsxs("div",{className:"relative",ref:Te,children:[e.jsxs("button",{type:"button",onClick:()=>{_||z(c=>!c)},disabled:_,className:N("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed",W?"text-foreground/80":"text-muted-foreground"),children:[e.jsx(Pt,{size:14,className:"shrink-0",style:{color:W?.color??"var(--muted-foreground)"}}),e.jsx("span",{className:"max-w-[120px] truncate",children:W?.name??f("Project")}),e.jsx(le,{size:12,className:N("text-muted-foreground transition-transform",j&&"rotate-180")})]}),j&&e.jsx("div",{className:"absolute top-full left-0 mt-1.5 w-56 bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 max-h-[240px] overflow-y-auto z-50",children:n.map(c=>e.jsxs("button",{type:"button",onClick:()=>bt(c.id),className:"flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",children:[e.jsx("span",{className:"size-2 rounded-full shrink-0 mr-2",style:{backgroundColor:c.color??"var(--muted-foreground)"}}),e.jsx("span",{className:N("truncate flex-1",c.id===h?"text-foreground font-medium":"text-muted-foreground"),children:c.name}),e.jsx(te,{size:14,className:N("ml-2 shrink-0 text-foreground",c.id===h?"opacity-100":"opacity-0")})]},c.id))})]}),(T||P==="SOLO")&&e.jsxs("div",{className:"relative",ref:Ee,children:[e.jsxs("button",{type:"button",onClick:()=>{_||Z(c=>!c)},disabled:_,className:N("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed",ye?"text-foreground/80":"text-muted-foreground"),children:[e.jsx(he,{agentType:ye?.agentType,className:"size-3.5"}),e.jsx("span",{className:"max-w-[120px] truncate",children:ye?.name??f(o?"Loading...":"Agent")}),e.jsx(le,{size:12,className:N("text-muted-foreground transition-transform",G&&"rotate-180")})]}),G&&e.jsx("div",{className:"absolute top-full left-0 mt-1.5 w-56 bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 max-h-[240px] overflow-y-auto z-50",children:r.map(c=>e.jsxs("button",{type:"button",disabled:!c.available,onClick:()=>{g(c.id),Z(!1)},className:N("flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",!c.available&&"opacity-40 cursor-not-allowed"),children:[e.jsx(te,{size:14,className:N("mr-2 shrink-0 text-foreground",c.id===d?"opacity-100":"opacity-0")}),e.jsx(he,{agentType:c.agentType,className:"mr-2 size-3.5"}),e.jsxs("span",{className:N("min-w-0 truncate",c.id===d?"text-foreground font-medium":"text-muted-foreground"),children:[c.name,c.available?"":f(" (unavailable)")]})]},c.id))})]}),!T&&P==="SOLO"&&e.jsxs("div",{className:"relative",ref:Me,children:[e.jsxs("button",{type:"button",onClick:()=>{_||Y(c=>!c)},disabled:_,className:N("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed text-foreground/80"),children:[e.jsx(Yt,{size:14,className:"text-muted-foreground"}),e.jsx("span",{className:"max-w-[96px] truncate",children:ut}),e.jsx(le,{size:12,className:N("text-muted-foreground transition-transform",H&&"rotate-180")})]}),H&&e.jsxs("div",{className:"absolute top-full left-0 mt-1.5 w-72 max-w-[calc(100vw-2rem)] bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 z-50",children:[$?e.jsx(Oe,{side:"bottom",className:"block w-full",content:Be,children:e.jsxs("div",{tabIndex:0,"aria-label":Be,className:"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsxs("button",{type:"button",disabled:!0,className:"flex w-full cursor-not-allowed items-center px-3 py-2 text-left text-xs opacity-40 transition-colors",children:[e.jsx(te,{size:14,className:"mr-2 mt-0.5 shrink-0 text-foreground opacity-0"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-muted-foreground",children:f("工作树模式")}),e.jsx("span",{className:"mt-0.5 block whitespace-normal text-[11px] leading-snug text-muted-foreground/80",children:Ue})]})]}),e.jsx("button",{type:"button",onClick:xt,disabled:pe.isPending,className:"flex w-full items-center px-3 py-2 text-left text-xs text-muted-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50",children:pe.isPending?f("检测中..."):f("重新检测 Git 状态")})]})}):e.jsxs("button",{type:"button",onClick:()=>{M(L.WORKTREE),Y(!1)},className:"flex w-full items-center px-3 py-2 text-left text-xs transition-colors hover:bg-accent",children:[e.jsx(te,{size:14,className:N("mr-2 mt-0.5 shrink-0 text-foreground",X===L.WORKTREE?"opacity-100":"opacity-0")}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:N("block truncate",X===L.WORKTREE?"text-foreground font-medium":"text-muted-foreground"),children:f("工作树模式")}),e.jsx("span",{className:"mt-0.5 block whitespace-normal text-[11px] leading-snug text-muted-foreground/80",children:Ue})]})]}),e.jsxs("button",{type:"button",onClick:()=>{M(L.MAIN_DIRECTORY),Y(!1)},className:"flex items-start w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",children:[e.jsx(te,{size:14,className:N("mr-2 mt-0.5 shrink-0 text-foreground",X===L.MAIN_DIRECTORY?"opacity-100":"opacity-0")}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:N("block truncate",X===L.MAIN_DIRECTORY?"text-foreground font-medium":"text-muted-foreground"),children:f("本地模式")}),e.jsx("span",{className:"mt-0.5 block whitespace-normal text-[11px] leading-snug text-muted-foreground/80",children:pt})]})]})]})]}),!T&&e.jsx(vn,{value:R,compact:!0,disabled:_,onChange:U}),!T&&e.jsx(Oe,{side:"bottom",className:"ml-auto",content:$?f("Local projects only support local Solo tasks. Initialize Git to use worktrees and TeamRun."):X===L.MAIN_DIRECTORY?f("TeamRun 需要工作树模式。开启团队模式时会自动切换为工作树模式。"):f("启用 TeamRun 后可选择团队模板或成员。"),children:e.jsxs("button",{type:"button",role:"switch","aria-checked":P==="TEAM",onClick:()=>{_||$||(y==="TEAM"?(C("SOLO"),l(!1)):(C("TEAM"),Y(!1),M(L.WORKTREE),l(!0)))},disabled:_||$,className:N("flex items-center gap-2 h-7 pl-2 pr-2 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",P==="TEAM"?"text-foreground/80":"text-muted-foreground"),"aria-label":f("启用团队模式"),children:[e.jsx(Rt,{size:14,className:P==="TEAM"?"text-foreground/80":"text-muted-foreground"}),e.jsx("span",{children:f("团队模式")}),($||X===L.MAIN_DIRECTORY)&&P!=="TEAM"?e.jsx(At,{size:12,className:"text-muted-foreground/70","aria-hidden":"true"}):null,e.jsx("span",{className:N("relative inline-flex h-4 w-7 shrink-0 items-center rounded-full transition-colors",P==="TEAM"?"bg-primary":"bg-border"),children:e.jsx("span",{className:N("inline-block size-3 rounded-full bg-background shadow-sm transition-transform",P==="TEAM"?"translate-x-3.5":"translate-x-0.5")})})]})})]}),!T&&P==="TEAM"&&ue&&e.jsx("div",{className:"mt-2.5 rounded-xl border border-border/60 bg-muted/40 p-3 animate-[fadeInUp_0.25s_cubic-bezier(0.16,1,0.3,1)]",children:e.jsx(Nn,{mode:Q,setMode:ne,selectedTemplateId:K,setSelectedTemplateId:se,selectedMemberPresetIds:V,setSelectedMemberPresetIds:re,disabled:_,compact:!0})})]})}export{Zn as A,us as B,ps as C,Yt as G,cs as P,os as R,es as S,as as T,ln as Z,ls as a,ts as b,Gt as c,Jn as d,ds as e,Pe as f,ns as g,Nn as h,rs as i,ms as j,En as k,zn as l,ss as m,vn as n,kn as o,sn as p,is as u};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import{k as tt,m as Ct,q as St,p as Pt,u as H,r as S,j as n,l as $,a6 as nt,T as Ue,I as oe,B as _,Q as kt,S as We,a1 as At,g as Tt,ae as _t,v as It,C as Ot,t as z,a3 as Dt,i as ke,af as Rt,aa as Ae}from"./index-oC5eh7mZ.js";import{a as Ut,b as Kt,u as Lt,c as Mt,d as Bt,e as zt,f as Ft,g as $t,h as Jt}from"./use-providers-B70-BYNu.js";import{C as Wt}from"./confirm-dialog-BWvZEHpu.js";import{M as Ke}from"./modal-D87uszzb.js";import{S as Te}from"./select-D7WkUiad.js";import{T as qe}from"./textarea-D9oaz-Ba.js";import{S as it}from"./switch-1pvXCcP-.js";import{i as Le,R as F,h as A,P as ye,U as qt,j as Vt,k as Gt}from"./mermaid-NOHMQCX5-CGCWmHha.js";import{A as fe}from"./AgentLogo-Ntqe3_Mx.js";import{C as rt}from"./chevron-down-BZfpVhYr.js";import{S as Xt}from"./SettingsMasterDetail-OF28cvPV.js";import{T as st,P as _e}from"./trash-2-C0P8jNpJ.js";import{U as Yt}from"./upload-BYgsDplu.js";import{P as Zt}from"./pencil-CY2RnQrx.js";import"./check-C1zWgxFO.js";import"./chevron-right-D52zUyOF.js";const Ht=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]],Qt=tt("flask-conical",Ht);const en=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],tn=tt("key-round",en);function nn(e,t){let r=e.slice(0,t).split(/\r\n|\n|\r/g);return[r.length,r.pop().length+1]}function rn(e,t,r){let s=e.split(/\r\n|\n|\r/g),a="",o=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let c=s[i-1];c&&(a+=i.toString().padEnd(o," "),a+=": ",a+=c,a+=`
|
|
2
|
-
`,i===t&&(a+=" ".repeat(o+r+2),a+=`^
|
|
3
|
-
`))}return a}class N extends Error{line;column;codeblock;constructor(t,r){const[s,a]=nn(r.toml,r.ptr),o=rn(r.toml,s,a);super(`Invalid TOML document: ${t}
|
|
4
|
-
|
|
5
|
-
${o}`,r),this.line=s,this.column=a,this.codeblock=o}}function sn(e,t){let r=0;for(;e[t-++r]==="\\";);return--r&&r%2}function Ie(e,t=0,r=e.length){let s=e.indexOf(`
|
|
6
|
-
`,t);return e[s-1]==="\r"&&s--,s<=r?s:-1}function we(e,t){for(let r=t;r<e.length;r++){let s=e[r];if(s===`
|
|
7
|
-
`)return r;if(s==="\r"&&e[r+1]===`
|
|
8
|
-
`)return r+1;if(s<" "&&s!==" "||s==="")throw new N("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function q(e,t,r,s){let a;for(;(a=e[t])===" "||a===" "||!r&&(a===`
|
|
9
|
-
`||a==="\r"&&e[t+1]===`
|
|
10
|
-
`);)t++;return s||a!=="#"?t:q(e,we(e,t),r)}function an(e,t,r,s,a=!1){if(!s)return t=Ie(e,t),t<0?e.length:t;for(let o=t;o<e.length;o++){let i=e[o];if(i==="#")o=Ie(e,o);else{if(i===r)return o+1;if(i===s||a&&(i===`
|
|
11
|
-
`||i==="\r"&&e[o+1]===`
|
|
12
|
-
`))return o}}throw new N("cannot find end of structure",{toml:e,ptr:t})}function at(e,t){let r=e[t],s=r===e[t+1]&&e[t+1]===e[t+2]?e.slice(t,t+3):r;t+=s.length-1;do t=e.indexOf(s,++t);while(t>-1&&r!=="'"&&sn(e,t));return t>-1&&(t+=s.length,s.length>1&&(e[t]===r&&t++,e[t]===r&&t++)),t}let on=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class le extends Date{#t=!1;#n=!1;#e=null;constructor(t){let r=!0,s=!0,a="Z";if(typeof t=="string"){let o=t.match(on);o?(o[1]||(r=!1,t=`0000-01-01T${t}`),s=!!o[2],s&&t[10]===" "&&(t=t.replace(" ","T")),o[2]&&+o[2]>23?t="":(a=o[3]||null,t=t.toUpperCase(),!a&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=r,this.#n=s,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,r="Z"){let s=new le(t);return s.#e=r,s}static wrapAsLocalDateTime(t){let r=new le(t);return r.#e=null,r}static wrapAsLocalDate(t){let r=new le(t);return r.#n=!1,r.#e=null,r}static wrapAsLocalTime(t){let r=new le(t);return r.#t=!1,r.#e=null,r}}let ln=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,cn=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,dn=/^[+-]?0[0-9_]/,un=/^[0-9a-f]{2,8}$/i,Ve={b:"\b",t:" ",n:`
|
|
13
|
-
`,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function ot(e,t=0,r=e.length){let s=e[t]==="'",a=e[t++]===e[t]&&e[t]===e[t+1];a&&(r-=2,e[t+=2]==="\r"&&t++,e[t]===`
|
|
14
|
-
`&&t++);let o=0,i,c="",l=t;for(;t<r-1;){let d=e[t++];if(d===`
|
|
15
|
-
`||d==="\r"&&e[t]===`
|
|
16
|
-
`){if(!a)throw new N("newlines are not allowed in strings",{toml:e,ptr:t-1})}else if(d<" "&&d!==" "||d==="")throw new N("control characters are not allowed in strings",{toml:e,ptr:t-1});if(i){if(i=!1,d==="x"||d==="u"||d==="U"){let m=e.slice(t,t+=d==="x"?2:d==="u"?4:8);if(!un.test(m))throw new N("invalid unicode escape",{toml:e,ptr:o});try{c+=String.fromCodePoint(parseInt(m,16))}catch{throw new N("invalid unicode escape",{toml:e,ptr:o})}}else if(a&&(d===`
|
|
17
|
-
`||d===" "||d===" "||d==="\r")){if(t=q(e,t-1,!0),e[t]!==`
|
|
18
|
-
`&&e[t]!=="\r")throw new N("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:o});t=q(e,t)}else if(d in Ve)c+=Ve[d];else throw new N("unrecognized escape sequence",{toml:e,ptr:o});l=t}else!s&&d==="\\"&&(o=t-1,i=!0,c+=e.slice(l,o))}return c+e.slice(l,r-1)}function mn(e,t,r,s){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return s?0n:0;let a=ln.test(e);if(a||cn.test(e)){if(dn.test(e))throw new N("leading zeroes are not allowed",{toml:t,ptr:r});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new N("invalid number",{toml:t,ptr:r});if(a){if((a=!Number.isSafeInteger(i))&&!s)throw new N("integer value cannot be represented losslessly",{toml:t,ptr:r});(a||s===!0)&&(i=BigInt(e))}return i}const o=new le(e);if(!o.isValid())throw new N("invalid value",{toml:t,ptr:r});return o}function fn(e,t,r){let s=e.slice(t,r),a=s.indexOf("#");return a>-1&&(we(e,a),s=s.slice(0,a)),[s.trimEnd(),a]}function Me(e,t,r,s,a){if(s===0)throw new N("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let o=e[t];if(o==="["||o==="{"){let[l,d]=o==="["?gn(e,t,s,a):xn(e,t,s,a);if(r){if(d=q(e,d),e[d]===",")d++;else if(e[d]!==r)throw new N("expected comma or end of structure",{toml:e,ptr:d})}return[l,d]}let i;if(o==='"'||o==="'"){i=at(e,t);let l=ot(e,t,i);if(r){if(i=q(e,i),e[i]&&e[i]!==","&&e[i]!==r&&e[i]!==`
|
|
19
|
-
`&&e[i]!=="\r")throw new N("unexpected character encountered",{toml:e,ptr:i});i+=+(e[i]===",")}return[l,i]}i=an(e,t,",",r);let c=fn(e,t,i-+(e[i-1]===","));if(!c[0])throw new N("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return r&&c[1]>-1&&(i=q(e,t+c[1]),i+=+(e[i]===",")),[mn(c[0],e,t,a),i]}let pn=/^[a-zA-Z0-9-_]+[ \t]*$/;function Oe(e,t,r="="){let s=t-1,a=[],o=e.indexOf(r,t);if(o<0)throw new N("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let i=e[t=++s];if(i!==" "&&i!==" ")if(i==='"'||i==="'"){if(i===e[t+1]&&i===e[t+2])throw new N("multiline strings are not allowed in keys",{toml:e,ptr:t});let c=at(e,t);if(c<0)throw new N("unfinished string encountered",{toml:e,ptr:t});s=e.indexOf(".",c);let l=e.slice(c,s<0||s>o?o:s),d=Ie(l);if(d>-1)throw new N("newlines are not allowed in keys",{toml:e,ptr:t+s+d});if(l.trimStart())throw new N("found extra tokens after the string part",{toml:e,ptr:c});if(o<c&&(o=e.indexOf(r,c),o<0))throw new N("incomplete key-value: cannot find end of key",{toml:e,ptr:t});a.push(ot(e,t,c))}else{s=e.indexOf(".",t);let c=e.slice(t,s<0||s>o?o:s);if(!pn.test(c))throw new N("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(c.trimEnd())}}while(s+1&&s<o);return[a,q(e,o+1,!0,!0)]}function xn(e,t,r,s){let a={},o=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new N("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=we(e,t);else if(i!==" "&&i!==" "&&i!==`
|
|
20
|
-
`&&i!=="\r"){let c,l=a,d=!1,[m,f]=Oe(e,t-1);for(let E=0;E<m.length;E++){if(E&&(l=d?l[c]:l[c]={}),c=m[E],(d=Object.hasOwn(l,c))&&(typeof l[c]!="object"||o.has(l[c])))throw new N("trying to redefine an already defined value",{toml:e,ptr:t});!d&&c==="__proto__"&&Object.defineProperty(l,c,{enumerable:!0,configurable:!0,writable:!0})}if(d)throw new N("trying to redefine an already defined value",{toml:e,ptr:t});let[v,w]=Me(e,f,"}",r-1,s);o.add(v),l[c]=v,t=w}}if(!i)throw new N("unfinished table encountered",{toml:e,ptr:t});return[a,t]}function gn(e,t,r,s){let a=[],o;for(t++;(o=e[t++])!=="]"&&o;){if(o===",")throw new N("expected value, found comma",{toml:e,ptr:t-1});if(o==="#")t=we(e,t);else if(o!==" "&&o!==" "&&o!==`
|
|
21
|
-
`&&o!=="\r"){let i=Me(e,t-1,"]",r-1,s);a.push(i[0]),t=i[1]}}if(!o)throw new N("unfinished array encountered",{toml:e,ptr:t});return[a,t]}function Ge(e,t,r,s){let a=t,o=r,i,c=!1,l;for(let d=0;d<e.length;d++){if(d){if(a=c?a[i]:a[i]={},o=(l=o[i]).c,s===0&&(l.t===1||l.t===2))return null;if(l.t===2){let m=a.length-1;a=a[m],o=o[m].c}}if(i=e[d],(c=Object.hasOwn(a,i))&&o[i]?.t===0&&o[i]?.d)return null;c||(i==="__proto__"&&(Object.defineProperty(a,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0})),o[i]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(l=o[i],l.t!==s&&!(s===1&&l.t===3)||(s===2&&(l.d||(l.d=!0,a[i]=[]),a[i].push(a={}),l.c[l.i++]=l={t:1,d:!1,i:0,c:{}}),l.d))return null;if(l.d=!0,s===1)a=c?a[i]:a[i]={};else if(s===0&&c)return null;return[i,a,l.c]}function ce(e,{maxDepth:t=1e3,integersAsBigInt:r}={}){let s={},a={},o=s,i=a;for(let c=q(e,0);c<e.length;){if(e[c]==="["){let l=e[++c]==="[",d=Oe(e,c+=+l,"]");if(l){if(e[d[1]-1]!=="]")throw new N("expected end of table declaration",{toml:e,ptr:d[1]-1});d[1]++}let m=Ge(d[0],s,a,l?2:1);if(!m)throw new N("trying to redefine an already defined table or value",{toml:e,ptr:c});i=m[2],o=m[1],c=d[1]}else{let l=Oe(e,c),d=Ge(l[0],o,i,0);if(!d)throw new N("trying to redefine an already defined table or value",{toml:e,ptr:c});let m=Me(e,l[1],void 0,t,r);d[1][d[0]]=m[0],c=m[1]}if(c=q(e,c,!0),e[c]&&e[c]!==`
|
|
22
|
-
`&&e[c]!=="\r")throw new N("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:c});c=q(e,c)}return s}function hn(){return Ct({queryKey:St.system.cursorAgentModels,queryFn:()=>Pt.get("/system/cursor-agent-models"),staleTime:1e3*60*10})}function vn({value:e,onChange:t}){const{t:r}=H(),{data:s,isLoading:a,isError:o}=hn(),i=s?.models??[],[c,l]=S.useState(!1),[d,m]=S.useState(""),f=S.useMemo(()=>{const v=d.trim().toLowerCase();return v?i.filter(w=>w.id.toLowerCase().includes(v)||w.label.toLowerCase().includes(v)):i},[i,d]);return n.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-w-0",children:[n.jsx("input",{type:"text",value:e,onChange:v=>{const w=v.target.value;t(w===""?void 0:w)},placeholder:r("留空为 auto;或直接输入模型 ID(与 cursor-agent --model 一致)"),className:"w-full px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900 font-mono"}),n.jsxs("button",{type:"button",onClick:()=>l(v=>!v),disabled:a,className:"flex items-center gap-1 text-xs text-neutral-600 hover:text-neutral-900 disabled:opacity-50 w-fit",children:[n.jsx(rt,{size:14,className:$("transition-transform",c&&"rotate-180")}),a?r("正在加载 cursor-agent 模型列表…"):c?r("收起列表"):r("从本机 cursor-agent 选择({count} 个)",{count:i.length})]}),c&&!a&&n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-white shadow-sm overflow-hidden",children:[n.jsx("input",{type:"text",value:d,onChange:v=>m(v.target.value),placeholder:r("筛选模型…"),className:"w-full px-3 py-2 text-sm border-b border-neutral-100 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-neutral-300"}),n.jsxs("div",{className:"max-h-[min(50vh,22rem)] overflow-y-auto py-1",children:[n.jsx("button",{type:"button",onClick:()=>{t(void 0),l(!1),m("")},className:$("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50",e?"text-neutral-700":"bg-neutral-50 font-medium"),children:r("默认 (auto)")}),f.map(v=>n.jsxs("button",{type:"button",onClick:()=>{t(v.id),l(!1),m("")},className:$("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50 border-t border-neutral-100",e===v.id?"bg-blue-50/80":""),children:[n.jsx("div",{className:"font-mono text-xs text-neutral-900 break-all",children:v.id}),n.jsx("div",{className:"text-xs text-neutral-500 mt-0.5 break-words",children:v.label})]},v.id)),f.length===0&&n.jsx("div",{className:"px-3 py-4 text-xs text-neutral-400 text-center",children:r("无匹配项")})]})]}),(o||s?.error)&&n.jsxs("p",{className:"text-xs text-amber-700",children:[r("无法从本机加载模型列表({error})。仍可手动输入;或在安装 cursor-agent 的机器上运行",{error:s?.error??r("请求失败")}),n.jsx("code",{className:"mx-0.5 bg-neutral-100 px-1 rounded text-[11px]",children:"cursor-agent --list-models"}),r("查看 ID。")]})]})}function bn(e){if(!e)return null;try{const t=new URL(e);return t.protocol!=="http:"&&t.protocol!=="https:"?null:`${t.origin}${t.pathname}`}catch{return null}}function yn(e,t){if(!e)return null;const r=new Date(e);return Number.isNaN(r.getTime())?null:new Intl.DateTimeFormat(t,{dateStyle:"medium",timeStyle:"medium"}).format(r)}function jn({result:e}){const{locale:t,t:r}=H(),s=bn(e.target?.endpoint),a=yn(e.testedAt,t);return n.jsx("div",{"data-provider-test-result":!0,className:$("rounded-lg border px-4 py-3 text-sm",e.ok?"border-success/30 bg-success/10 text-success":"border-warning/30 bg-warning/10 text-foreground"),children:n.jsxs("div",{className:"flex min-w-0 items-start gap-2",children:[e.ok?n.jsx(nt,{size:16,className:"shrink-0"}):n.jsx(Ue,{size:16,className:"shrink-0 text-warning"}),n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"font-medium",children:e.ok?e.stage==="connection"?r("连接测试通过"):r("本机可用性检查通过"):r("配置检查未通过")}),n.jsx("div",{className:"mt-0.5 break-words text-xs opacity-80",children:e.summary}),(s||a)&&n.jsxs("dl",{className:"mt-2 grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-x-2 gap-y-1 text-xs opacity-80",children:[s&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{className:"font-medium",children:r("测试对象")}),n.jsx("dd",{className:"min-w-0",children:n.jsx("code",{className:"break-all",children:s})})]}),a&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{className:"font-medium",children:r("测试时间")}),n.jsx("dd",{className:"min-w-0 break-words",children:n.jsx("time",{dateTime:e.testedAt,children:a})})]})]}),!e.ok&&n.jsx("div",{className:"mt-1 text-xs opacity-80",children:r("测试失败不会阻止保存。")})]})]})})}function wn({options:e,value:t,onChange:r,label:s,efficiencyLabel:a,intelligenceLabel:o,followCliLabel:i,currentLabel:c,disabled:l=!1,error:d}){const m=e.findIndex(b=>b.value===t),f=t==="",v=S.useRef(m>=0?t:void 0),w=S.useRef(null),E=S.useRef(null),[I,O]=S.useState(!1);S.useEffect(()=>{m>=0&&(v.current=t)},[m,t]);const D=b=>{if(l||f||e.length===0)return;const k=e[Math.max(0,Math.min(e.length-1,b))];k&&k.value!==t&&r(k.value)},V=b=>{const k=E.current?.getBoundingClientRect();if(!k||k.width<=0)return;const X=Math.max(0,Math.min(1,(b-k.left)/k.width));D(Math.round(X*(e.length-1)))},M=m>=0?e[m]:void 0,B=m<0||e.length<2?0:m/(e.length-1)*100,L=S.useId(),Q=`${L}-label`,R=`${L}-current`,K=`${L}-error`;return n.jsxs("div",{className:"space-y-2.5",children:[n.jsxs("div",{className:"flex min-h-8 items-center justify-between gap-3",children:[n.jsx("label",{id:Q,className:"text-xs font-medium text-foreground",children:s}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("span",{className:"text-xs text-muted-foreground",children:i}),n.jsx(it,{checked:f,disabled:l,onCheckedChange:b=>{r(b?"":v.current??e.find(k=>k.value==="medium")?.value??e[0]?.value??"")},"aria-label":i})]})]}),n.jsxs("div",{className:"flex items-center justify-between text-[11px] text-muted-foreground","aria-hidden":"true",children:[n.jsx("span",{children:a}),n.jsx("span",{children:o})]}),n.jsxs("div",{id:L,ref:E,role:"slider",tabIndex:f||l?-1:0,"aria-labelledby":Q,"aria-disabled":f||l,"aria-valuemin":0,"aria-valuemax":Math.max(0,e.length-1),"aria-valuenow":m>=0?m:void 0,"aria-valuetext":M?`${M.label}, ${M.value}`:i,"aria-describedby":d?`${R} ${K}`:R,onKeyDown:b=>{if(f||l||m<0)return;let k=m;if(b.key==="ArrowLeft"||b.key==="ArrowDown")k-=1;else if(b.key==="ArrowRight"||b.key==="ArrowUp")k+=1;else if(b.key==="Home")k=0;else if(b.key==="End")k=e.length-1;else return;b.preventDefault(),D(k)},onPointerDown:b=>{f||l||(w.current=b.pointerId,O(!0),b.currentTarget.setPointerCapture?.(b.pointerId),V(b.clientX))},onPointerMove:b=>{w.current===b.pointerId&&V(b.clientX)},onPointerUp:b=>{w.current===b.pointerId&&(w.current=null,O(!1),b.currentTarget.releasePointerCapture?.(b.pointerId))},onPointerCancel:()=>{w.current=null,O(!1)},className:$("relative mx-2.5 flex h-11 touch-pan-y items-center outline-none select-none",f||l?"cursor-not-allowed opacity-55":"cursor-pointer","focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-2"),children:[n.jsx("div",{className:"absolute inset-x-0 h-1 rounded-full bg-border"}),!f&&n.jsx("div",{className:"absolute left-0 h-1 rounded-full bg-primary transition-[width] duration-150 motion-reduce:transition-none",style:{width:`${B}%`}}),e.map((b,k)=>n.jsx("span",{"aria-hidden":"true",className:$("absolute size-3 -translate-x-1/2 rounded-full border-2 transition-colors motion-reduce:transition-none",!f&&k<=m?"border-primary bg-primary":"border-border bg-background"),style:{left:`${e.length<2?0:k/(e.length-1)*100}%`}},b.value)),!f&&M&&n.jsx("span",{"aria-hidden":"true",className:$("absolute size-5 -translate-x-1/2 rounded-full border-[5px] border-primary bg-background shadow-sm transition-[left,transform] duration-150 motion-reduce:transition-none",I&&"scale-110"),style:{left:`${B}%`}})]}),n.jsx("div",{id:R,className:"min-h-5 text-center text-xs text-muted-foreground",children:f?i:`${c}: ${M?.label??t} (${M?.value??t})`}),d&&n.jsx("p",{id:K,role:"alert",className:"text-xs text-destructive",children:d})]})}function Nn(e){if(!e)return null;const t=e.trim();if(!t.startsWith("http://")&&!t.startsWith("https://"))return"API URL must be a complete http:// or https:// URL";try{if(new URL(t).host)return null}catch{}return"API URL must be a complete http:// or https:// URL"}function En(e,t,r){return r==="advanced"?"advanced":e?.write.action==="clear"?"unconfigured":e?.write.action==="replace"?e.value?"configured":"unconfigured":e?.configured||t?"configured":"unconfigured"}function Cn(e,t,r,s){let a=e.config,o=e.settings;const i=c=>{a={...a},r?a[c]=r:delete a[c]};return t==="apiBaseUrl"&&s.apiBaseUrl?s.apiBaseUrl.kind==="config"?i(s.apiBaseUrl.path):s.apiBaseUrl.kind==="settings"&&(o=e.agentType==="CODEX"?An(o,r):me(o,s.apiBaseUrl.path,r||void 0)):t==="model"?(s.model.kind==="config"?i(s.model.path):s.model.kind==="settings"&&(o=me(o,s.model.path,r||void 0)),e.agentType==="CODEX"&&(o=me(o,"model",void 0))):t==="reasoningEffort"&&s.reasoningEffort&&(s.reasoningEffort.kind==="config"?i(s.reasoningEffort.path):s.reasoningEffort.kind==="settings"&&(o=me(o,s.reasoningEffort.path,r||void 0))),{...e,config:a,settings:o,simplified:{...e.simplified,[t]:r}}}function be(e){let t="",r=!1;for(let s=0;s<e.length;s+=1){const a=e[s];if(r){r=!1;continue}if(t==='"'&&a==="\\"){r=!0;continue}if((a==='"'||a==="'")&&!t)t=a;else if(a===t)t="";else if(a==="#"&&!t)return{value:e.slice(0,s).trimEnd(),comment:e.slice(s)}}return{value:e.trimEnd(),comment:""}}function Xe(e){const t=[];let r=0,s="",a=!1;for(let o=0;o<=e.length;o+=1){const i=e[o]??".";if(a){a=!1;continue}if(s==='"'&&i==="\\"){a=!0;continue}if((i==='"'||i==="'")&&!s)s=i;else if(i===s)s="";else if(i==="."&&!s){const c=e.slice(r,o).trim();if(c.startsWith('"')&&c.endsWith('"'))try{t.push(JSON.parse(c))}catch{t.push(c.slice(1,-1))}else c.startsWith("'")&&c.endsWith("'")?t.push(c.slice(1,-1)):c&&t.push(c);r=o+1}}return t}function Sn(e){let t="",r=!1;for(let s=0;s<e.length;s+=1){const a=e[s];if(r){r=!1;continue}if(t==='"'&&a==="\\"){r=!0;continue}if((a==='"'||a==="'")&&!t)t=a;else if(a===t)t="";else{if(a==="="&&!t)return s;if(a==="#"&&!t)return-1}}return-1}function Ye(e,t){return e.length===t.length&&e.every((r,s)=>r===t[s])}function Pn(e,t){let r=t,s,a;for(let o=0;o<e.length;o+=1){const i=e[o];if(r){if(r==='"""'&&i==="\\"){o+=1;continue}const l=r[0];if(i===l){let d=o+1;for(;e[d]===l;)d+=1;if(d-o<r.length)continue;a??=d,r=void 0,o=d-1}continue}if(s){s==='"'&&i==="\\"?o+=1:i===s&&(s=void 0);continue}if(i==="#")break;const c=e.startsWith('"""',o)?'"""':e.startsWith("'''",o)?"'''":void 0;c?(r=c,o+=2):(i==='"'||i==="'")&&(s=i)}return{multiline:r,closingDelimiterEnd:a}}function kn(e){const t=[],r=new Map;let s,a;for(let o=0;o<e.length;o+=1){t[o]=s===void 0;const{multiline:i,closingDelimiterEnd:c}=Pn(e[o],s);s===void 0&&i!==void 0&&(a=o),s!==void 0&&c!==void 0&&a!==void 0&&(r.set(a,{end:o,suffix:e[o].slice(c)}),a=void 0),s=i}return{structural:t,multilineSpanByStart:r}}function lt(e,t,r){try{ce(e)}catch{return e}const s=e.split(`
|
|
23
|
-
`),{structural:a,multilineSpanByStart:o}=kn(s);let i=[],c=t.length===1?-1:void 0;const l=[];for(let f=0;f<s.length;f+=1){if(!a[f])continue;const v=be(s[f]).value.trim(),w=v.match(/^\[\[(.+)\]\]$/),E=w??v.match(/^\[(.+)\]$/);if(E){i=Xe(E[1]),!w&&Ye(i,t.slice(0,-1))&&(c=f);continue}const I=Sn(s[f]);if(I<0)continue;const O=[...i,...Xe(s[f].slice(0,I))];if(Ye(O,t)){const D=o.get(f);l.push({index:f,equals:I,end:D?.end??f,closingSuffix:D?.suffix})}}if(l.length>1)return e;if(l.length===1){const f=l[0],v=s[f.index],w=v.slice(0,f.equals+1),E=v.slice(f.equals+1),I=E.match(/^\s*/)?.[0]??" ",{comment:O}=be(E),D=f.end-f.index+1,V=f.closingSuffix??(O?` ${O}`:"");return r?s.splice(f.index,D,`${w}${I}${JSON.stringify(r)}${V}`):f.closingSuffix&&be(f.closingSuffix).comment?s.splice(f.index,D,`${v.match(/^\s*/)?.[0]??""}${f.closingSuffix}`):O?s.splice(f.index,D,`${v.match(/^\s*/)?.[0]??""}${O}`):s.splice(f.index,D),s.join(`
|
|
24
|
-
`)}if(!r)return e;const d=`${t.at(-1)} = ${JSON.stringify(r)}`;if(t.length>1)return c===void 0?e:(s.splice(c+1,0,d),s.join(`
|
|
25
|
-
`));const m=s.findIndex((f,v)=>{if(!a[v])return!1;const w=be(f).value.trim();return/^\[\[?.+\]\]?$/.test(w)});return m>=0?(s.splice(m,0,d),s.join(`
|
|
26
|
-
`)):e?e.endsWith(`
|
|
27
|
-
`)?`${e}${d}
|
|
28
|
-
`:`${e}
|
|
29
|
-
${d}`:d}function me(e,t,r){return lt(e,[t],r)}function An(e,t){let r;try{r=ce(e)}catch{return e}const s=typeof r.model_provider=="string"&&r.model_provider.trim()?r.model_provider.trim():"openai",a=t.trim()||void 0;return s==="openai"?me(e,"openai_base_url",a):Le(s)?e:lt(e,["model_providers",s,"base_url"],a)}function Tn(e,t){const r=t.executionPermission;return r.path?De(e,r):{enabled:!1,error:null}}function De(e,t){const r=e[t.path];return r===void 0||r===!1?{enabled:!1,error:null}:r===!0?{enabled:!0,error:null}:{enabled:!1,error:`${t.path} must be true or false`}}function Ze(e,t,r){const s={...e.config};return r===void 0?delete s[t.path]:s[t.path]=r,{...e,config:s}}function ie(e,t){const r=t?.trim();return!!r&&e.trim()===r}function _n(e,t){return ie(e,t.apiKey?.envKey)}function je(e,t){return e.sensitive||/key|token|secret|password|auth/i.test(e.key)||_n(e.key,t)}function In(e,t){const r=e.simplified??{};return Object.entries(e.redactedEnv??{}).map(([s,a])=>({key:s,value:t.apiBaseUrl?.kind==="env"&&s===t.apiBaseUrl.path?r.apiBaseUrl??"":"",write:{action:"keep"},configured:a.configured,sensitive:je({key:s,sensitive:a.sensitive},r)}))}function On(e,t){return e.map(r=>je(r,t)&&!r.sensitive?{...r,sensitive:!0}:r)}function Dn(){let e=0;return{begin:()=>(e+=1,e),invalidate:()=>{e+=1},isCurrent:t=>t===e}}function Rn(e){const t=new Map;for(const a of e){const o=a.key.trim();if(!o)continue;const i=t.get(o)??[];i.push(a),t.set(o,i)}const r=(a,o)=>a<o?-1:a>o?1:0,s=(a,o)=>{const i=o.filter(m=>m.write.action!=="keep");if(i.length===0)return{action:"keep"};const c=i.filter(m=>m.key===a),l=c.length>0?c:i,d=l.find(m=>m.write.action==="clear");return d?d.write:[...l].sort((m,f)=>r(m.key,f.key)||r(m.write.action==="replace"?m.write.value:"",f.write.action==="replace"?f.write.value:""))[0].write};return Object.fromEntries([...t.entries()].sort(([a],[o])=>r(a,o)).map(([a,o])=>[a,s(a,o)]))}function Un(e,t,r){return{...e,model:typeof t[r.model.path]=="string"?t[r.model.path]:"",reasoningEffort:r.reasoningEffort?.kind==="config"?typeof t[r.reasoningEffort.path]=="string"?t[r.reasoningEffort.path]:"":e.reasoningEffort}}function He(e,t,r,s=new Set){if(r!=="CODEX")return e;const a=ce(t),o=typeof a.model_provider=="string"&&a.model_provider.trim()?a.model_provider.trim():"openai",i=typeof a.model_reasoning_effort=="string"?a.model_reasoning_effort:"",c=v=>[...s].some(w=>ie(w,v));if(o==="openai")return{...e,apiBaseUrl:typeof a.openai_base_url=="string"?a.openai_base_url:"",apiKey:{configured:ie(e.apiKey?.envKey??"","OPENAI_API_KEY")?e.apiKey?.configured??!1:c("OPENAI_API_KEY"),envKey:"OPENAI_API_KEY"},reasoningEffort:i};if(Le(o))return{...e,apiBaseUrl:void 0,apiKey:void 0,reasoningEffort:i};const l=a.model_providers,d=l&&typeof l=="object"&&!Array.isArray(l)?l[o]:void 0,m=d&&typeof d=="object"&&!Array.isArray(d)?d:{},f=typeof m.env_key=="string"&&m.env_key.trim()?m.env_key.trim():void 0;return{...e,apiBaseUrl:typeof m.base_url=="string"?m.base_url:"",apiKey:f?{configured:ie(e.apiKey?.envKey??"",f)?e.apiKey?.configured??!1:c(f),envKey:f}:void 0,reasoningEffort:i}}function Kn(e){try{const t=ce(e);return typeof t.model_provider=="string"&&Le(t.model_provider.trim())}catch{return!1}}function Ln(e,t,r){try{if(e.agentType==="CLAUDE_CODE"&&(t==="apiBaseUrl"||t==="apiKey")){const s=JSON.parse(e.settings),a=t==="apiBaseUrl"?r.apiBaseUrl?.path:r.apiKey?.path,o=a?s.env?.[a]:void 0;return typeof o=="string"?o:void 0}if(e.agentType==="CODEX"&&(t==="model"||t==="reasoningEffort")){const s=ce(e.settings),a=t==="model"?"model":r.reasoningEffort?.path,o=a?s[a]:void 0;return typeof o=="string"?o:void 0}}catch{return}}function Mn(e,t,r,s){if(r==="simple")return e;const a=Ln(e,t,s),o={...e.config},i={...e.simplified};let c=e.env;return t==="apiBaseUrl"&&s.apiBaseUrl?(a!==void 0&&(i.apiBaseUrl=a),c=c.map(l=>l.key===s.apiBaseUrl.path?{...l,value:"",write:{action:"clear"}}:l)):t==="apiKey"&&s.apiKey?(i.apiKey={configured:a!==void 0,envKey:s.apiKey.path},c=c.map(l=>l.key===s.apiKey.path?{...l,value:"",write:{action:"clear"}}:l)):t==="model"?(a!==void 0&&(i.model=a),delete o[s.model.path]):t==="reasoningEffort"&&a!==void 0&&(i.reasoningEffort=a),{...e,config:o,env:c,simplified:i}}const W={key:"appendPrompt",label:"追加 Prompt",type:"textarea",rows:3,placeholder:"追加到每次 prompt 末尾的文本"},ct={[A.CLAUDE_CODE]:[{key:"dangerouslySkipPermissions",label:"跳过权限确认",type:"switch"},W],[A.GEMINI_CLI]:[{key:"yolo",label:"自动批准操作(YOLO)",type:"switch"},W],[A.CURSOR_AGENT]:[{key:"force",label:"强制执行",type:"switch"},W],[A.CODEX]:[{key:"dangerouslyBypassApprovalsAndSandbox",label:"跳过所有确认和沙盒",type:"switch"},{key:"fastMode",label:"Fast 模式",type:"switch"},{key:"disableResponsesWebsocket",label:"禁用 WebSocket",type:"switch"},{key:"profile",label:"Profile",type:"input",placeholder:"~/.codex/config.toml 中的 profile 名称"},W],[A.QWEN_CODE]:[W],[A.KIRO_CLI]:[{key:"trustAllTools",label:"信任所有工具",type:"switch"},W],[A.OPENCODE]:[{key:"autoApprove",label:"自动批准操作",type:"switch"},W],[A.PI_CODING_AGENT]:[{key:"autoApprove",label:"自动批准操作",type:"switch"},{key:"supportsImages",label:"模型支持图片输入",type:"switch"},W],[A.GROK_BUILD]:[{key:"alwaysApprove",label:"始终批准操作",type:"switch"},W],[A.MINION_CODE]:[{key:"dangerouslySkipPermissions",label:"跳过权限确认",type:"switch"},W]};function Qe(){return{}}function dt(e,t){return{...t}}const Bn=JSON.stringify({env:{ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:""}},null,2),zn=`# Codex config.toml 配置片段 — 通过 -c 参数注入,不会修改 ~/.codex/config.toml
|
|
30
|
-
# 参考: https://developers.openai.com/codex/config-sample
|
|
31
|
-
|
|
32
|
-
# ─── 模型与推理 ─────────────────────────────────────────────
|
|
33
|
-
# model_reasoning_effort = "medium" # minimal | low | medium | high | xhigh | max | ultra
|
|
34
|
-
# model_reasoning_summary = "auto" # auto | concise | detailed | none
|
|
35
|
-
# model_verbosity = "medium" # low | medium | high
|
|
36
|
-
# service_tier = "fast"
|
|
37
|
-
# features.fast_mode = true
|
|
38
|
-
|
|
39
|
-
# ─── 自定义 Model Provider ──────────────────────────────────
|
|
40
|
-
# model_provider = "azure"
|
|
41
|
-
#
|
|
42
|
-
# [model_providers.azure]
|
|
43
|
-
# name = "Azure OpenAI"
|
|
44
|
-
# base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
|
|
45
|
-
# env_key = "AZURE_OPENAI_API_KEY"
|
|
46
|
-
# env_key_instructions = "Set AZURE_OPENAI_API_KEY in Provider env"
|
|
47
|
-
# wire_api = "responses"
|
|
48
|
-
# query_params = { api-version = "2025-04-01-preview" }
|
|
49
|
-
|
|
50
|
-
# ─── OpenAI 数据驻留 ────────────────────────────────────────
|
|
51
|
-
# [model_providers.openai-us]
|
|
52
|
-
# name = "OpenAI US"
|
|
53
|
-
# base_url = "https://us.api.openai.com/v1"
|
|
54
|
-
# wire_api = "responses"
|
|
55
|
-
# requires_openai_auth = true
|
|
56
|
-
|
|
57
|
-
# ─── 本地 OSS (Ollama) ──────────────────────────────────────
|
|
58
|
-
# [model_providers.ollama]
|
|
59
|
-
# name = "Ollama"
|
|
60
|
-
# base_url = "http://localhost:11434/v1"
|
|
61
|
-
# wire_api = "responses"
|
|
62
|
-
`,Fn=`# Codex config.toml snippet — injected through -c; ~/.codex/config.toml is not modified.
|
|
63
|
-
# Reference: https://developers.openai.com/codex/config-sample
|
|
64
|
-
|
|
65
|
-
# ─── Model and reasoning ────────────────────────────────────
|
|
66
|
-
# model_reasoning_effort = "medium" # minimal | low | medium | high | xhigh | max | ultra
|
|
67
|
-
# model_reasoning_summary = "auto" # auto | concise | detailed | none
|
|
68
|
-
# model_verbosity = "medium" # low | medium | high
|
|
69
|
-
# service_tier = "fast"
|
|
70
|
-
# features.fast_mode = true
|
|
71
|
-
|
|
72
|
-
# ─── Custom Model Provider ──────────────────────────────────
|
|
73
|
-
# model_provider = "azure"
|
|
74
|
-
#
|
|
75
|
-
# [model_providers.azure]
|
|
76
|
-
# name = "Azure OpenAI"
|
|
77
|
-
# base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
|
|
78
|
-
# env_key = "AZURE_OPENAI_API_KEY"
|
|
79
|
-
# env_key_instructions = "Set AZURE_OPENAI_API_KEY in Provider env"
|
|
80
|
-
# wire_api = "responses"
|
|
81
|
-
# query_params = { api-version = "2025-04-01-preview" }
|
|
82
|
-
|
|
83
|
-
# ─── OpenAI data residency ──────────────────────────────────
|
|
84
|
-
# [model_providers.openai-us]
|
|
85
|
-
# name = "OpenAI US"
|
|
86
|
-
# base_url = "https://us.api.openai.com/v1"
|
|
87
|
-
# wire_api = "responses"
|
|
88
|
-
# requires_openai_auth = true
|
|
89
|
-
|
|
90
|
-
# ─── Local OSS (Ollama) ─────────────────────────────────────
|
|
91
|
-
# [model_providers.ollama]
|
|
92
|
-
# name = "Ollama"
|
|
93
|
-
# base_url = "http://localhost:11434/v1"
|
|
94
|
-
# wire_api = "responses"
|
|
95
|
-
`;function $n(e,t){return e===A.CLAUDE_CODE?Bn:e===A.CODEX?t==="zh-CN"?zn:Fn:""}function Jn(e){return e===A.CLAUDE_CODE||e===A.CODEX}const Re="::ACP";function et(e,t){return t===F.ACP?`${e}${Re}`:String(e)}function pe(e,t){const r=Gt(e);return t===F.ACP?`${r} (ACP)`:r}function Wn(e){return e.endsWith(Re)?{agentType:e.slice(0,-Re.length),runtimeType:F.ACP}:{agentType:e,runtimeType:F.CLI}}function qn(e,t){if(!e.trim())return e;try{const r=JSON.parse(e);if(!r.env||typeof r.env!="object"||Array.isArray(r.env))return e;const s=r.env;return t in s?(delete s[t],JSON.stringify(r,null,2)):e}catch{return e}}const ut=Object.values(ct).flat().reduce((e,t)=>(e[t.key]||(e[t.key]=t.label),e),{});ut.permissionMode="权限策略";const mt=Object.values(ct).flat().reduce((e,t)=>(t.options&&(e[t.key]=Object.fromEntries(t.options.map(r=>[r.value,r.label]))),e),{});mt.permissionMode={ASK:"每次询问",AUTO_APPROVE:"无限制",UNRESTRICTED:"无限制"};function Vn(e,t){if(typeof t=="boolean")return t?Ae("是"):Ae("否");if(typeof t=="string"&&t){const r=mt[e]?.[t];return r?Ae(r):t}return String(t)}function ne(e,t){return e instanceof Error?e.message:t}function Gn(e){return e==="apiBaseUrl"?"API 地址":e==="apiKey"?"API Key":e==="reasoningEffort"?"思考强度":e==="model"?"模型":e==="executionPermission"?"执行权限":e==="fastMode"?"Fast 模式":e==="disableResponsesWebsocket"?"禁用 WebSocket":e}function Xn(e){return{minimal:"最低",low:"低",medium:"中",high:"高",xhigh:"超高",max:"最高",ultra:"Ultra"}[e]??e}function Yn(e){return`agent-tower-provider-backup-${e.replace(/[:.]/g,"-")}.json`}function Zn(e,t){const r=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),s=URL.createObjectURL(r),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(s)}function Hn(e){switch(e){case"CREATE":return{label:"新增",className:"bg-success/10 text-success"};case"OVERWRITE":return{label:"覆盖",className:"bg-warning/10 text-warning"};case"SKIP":return{label:"跳过",className:"bg-muted text-muted-foreground"}}}function Qn({type:e}){const t=e==="LOGIN_DETECTED"||e==="INSTALLATION_FOUND";return n.jsx("span",{className:$("inline-block h-2 w-2 rounded-full shrink-0",t?"bg-success":"bg-border"),title:t?"Available":"Unavailable",children:n.jsx("span",{className:"sr-only",children:t?"Available":"Unavailable"})})}function ei({type:e}){const{t}=H();return e==="LOGIN_DETECTED"||e==="INSTALLATION_FOUND"?n.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-success/10 px-2 py-0.5 text-[11px] font-medium text-success",children:[n.jsx(nt,{size:11,"aria-hidden":"true"}),t("可用")]}):n.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[11px] font-medium text-muted-foreground",children:[n.jsx(Rt,{size:11,"aria-hidden":"true"}),t("不可用")]})}function ti({title:e,status:t,defaultOpen:r=!1,children:s}){const[a,o]=S.useState(r);return n.jsxs("div",{className:"rounded-lg border border-border",children:[n.jsxs("button",{type:"button",onClick:()=>o(i=>!i),"aria-expanded":a,className:"w-full flex items-center justify-between rounded-lg px-4 py-2.5 text-sm font-medium text-foreground transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset",children:[n.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[n.jsx("span",{children:e}),t]}),n.jsx(rt,{size:14,"aria-hidden":"true",className:$("text-muted-foreground transition-transform motion-reduce:transition-none",a&&"rotate-180")})]}),a&&n.jsx("div",{className:"px-4 pb-4 space-y-3",children:s})]})}function ni({isOpen:e,onClose:t,providerId:r,initialData:s,onSave:a}){const{locale:o,t:i}=H(),c=Ut(),[l,d]=S.useState(s??{name:"",agentType:A.CLAUDE_CODE,runtimeType:F.CLI,config:Qe(),settings:"",env:[],simplified:{apiKey:{configured:!1,envKey:"ANTHROPIC_API_KEY"}},diagnostics:[],isDefault:!1}),[m,f]=S.useState(()=>JSON.stringify(l.config,null,2)),[v,w]=S.useState(""),[E,I]=S.useState(()=>l.diagnostics?.find(u=>u.field==="settings")?.message??""),[O,D]=S.useState(!1),[V,M]=S.useState(!1),[B,L]=S.useState(null),[Q,R]=S.useState(()=>new Set),[K,b]=S.useState(()=>l.diagnostics?.filter(u=>u.code==="CONFLICT")??[]),[k,X]=S.useState({}),re=S.useRef(Dn()),{data:Ne}=Kt(l.agentType,l.simplified.model),C=Ne?.[l.agentType]??ye[l.agentType],J=C.apiBaseUrl?Nn(l.simplified.apiBaseUrl):null,Y=Tn(l.config,C),G=l.config.permissionMode??l.config.acpPermissionMode,xe=G==="UNRESTRICTED"||G==="AUTO_APPROVE"||G===void 0&&Y.enabled?"UNRESTRICTED":"ASK",ee=l.runtimeType===F.ACP&&G!==void 0&&G!=="ASK"&&G!=="UNRESTRICTED"&&G!=="AUTO_APPROVE"?i("ACP 权限策略必须为 ASK 或 UNRESTRICTED"):null,te=C.disableResponsesWebsocket,h=te?De(l.config,te):null,y=C.fastMode,T=y?De(l.config,y):null,Z=y?l.config[y.path]:void 0,ft=Z===!0?"fast":Z===!1?"standard":"inherit",Ee=l.simplified.reasoningEffort??"",ge=Ee&&!C.reasoningEffort?.options?.includes(Ee)?i("请选择当前 Agent 支持的思考强度档位"):null,Ce=u=>{re.current.invalidate(),u&&d(u),M(!0),L(null)},U=u=>{Ce(u)},Be=()=>{V&&!window.confirm(i("存在未保存的修改,确定放弃吗?"))||t()},pt=u=>l.env.find(p=>ie(p.key,u)),de=(u,p,x="")=>{if(p.action!=="keep"){const g=u===C.apiBaseUrl?.path?"apiBaseUrl":u===C.apiKey?.path?"apiKey":null;g&&X(j=>{const P={...j};return delete P[g],P})}U(g=>{const j=g.env.findIndex(Et=>ie(Et.key,u)),P=[...g.env],ae=j>=0?P[j]:null,ue={key:ae?.key??u,value:x,write:p,configured:ae?.configured??!1,sensitive:ie(u,g.simplified.apiKey?.envKey)||!!ae?.sensitive||/key|token|secret|password|auth/i.test(u)};j>=0?P[j]=ue:P.push(ue);const Nt=g.agentType===A.CLAUDE_CODE&&p.action!=="keep"&&(u===C.apiBaseUrl?.path||u===C.apiKey?.path);return{...g,env:P,settings:Nt?qn(g.settings,u):g.settings}})},he=(u,p)=>{X(x=>{if(!(u in x))return x;const g={...x};return delete g[u],g}),R(x=>new Set(x).add(u)),u==="apiBaseUrl"&&C.apiBaseUrl?.kind==="env"&&de(C.apiBaseUrl.path,p?{action:"replace",value:p}:{action:"clear"},p),U(x=>{const g=Cn(x,u,p,C);return g.config!==x.config&&f(JSON.stringify(g.config,null,2)),g})},xt=u=>{te&&U(p=>{const x=Ze(p,te,u);return f(JSON.stringify(x.config,null,2)),x})},gt=u=>{y&&U(p=>{const x=Ze(p,y,u==="inherit"?void 0:u==="fast");return f(JSON.stringify(x.config,null,2)),x})},ht=u=>{if(V&&!window.confirm(i("切换 Agent 类型会清空当前类型的配置,是否继续?")))return;const{agentType:p,runtimeType:x}=Wn(u),g=ye[p],j=x===F.ACP?{permissionMode:"ASK"}:Qe(),P={...l,agentType:p,runtimeType:x,config:j,settings:"",env:[],simplified:{apiKey:g.apiKey?{configured:!1,envKey:g.apiKey.path}:void 0}};Ce(()=>P),f(JSON.stringify(j,null,2)),w(""),I(""),D(!1),R(new Set),b([]),X({})},ze=(u=!1)=>{let p=!v&&!Y.error&&!ee&&!T?.error&&!h?.error&&!ge;const x=l.settings.trim();if(x&&(O||u))try{if(l.agentType===A.CODEX)ce(x);else if(l.agentType===A.CLAUDE_CODE){const g=JSON.parse(x);if(!g||typeof g!="object"||Array.isArray(g))throw new Error(i("JSON 顶层必须是对象"))}I("")}catch(g){I(i("{format} 语法错误: {message}",{format:l.agentType===A.CODEX?"TOML":"JSON",message:g instanceof Error?g.message:String(g)})),p=!1}return p},Fe=()=>{const u=Rn(l.env),p=Object.fromEntries([...Q].map(x=>[x,l.simplified[x]]));return{providerId:r,name:l.name,agentType:l.agentType,runtimeType:l.runtimeType,env:u,config:l.config,settings:l.settings,simplified:Q.size>0?p:void 0,conflictResolutions:k,isDefault:l.isDefault}},vt=()=>{if(J||!ze(!1))return;const p={...Fe()};delete p.providerId,r&&delete p.runtimeType,a(p)},bt=()=>{if(J||K.length>0||!ze(!0))return;const u=re.current.begin();L(null),c.mutate(Fe(),{onSuccess:p=>{re.current.isCurrent(u)&&L(p)},onError:p=>{re.current.isCurrent(u)&&L({ok:!1,stage:"connection",errorKind:"unknown",summary:ne(p,i("测试配置失败"))})}})};if(!e)return null;const yt=Jn(l.agentType),ve=l.agentType===A.CODEX,Se=ve&&Kn(l.settings),se=l.simplified.apiKey?.envKey??C.apiKey?.path,Pe=se?pt(se):void 0,$e=En(Pe,!!l.simplified.apiKey?.configured,k.apiKey),jt=$e==="advanced",Je=$e!=="unconfigured",wt=!l.name.trim()||!!J||!!v||!!Y.error||!!ee||!!T?.error||!!h?.error||!!ge||!!E&&O||K.length>0;return n.jsx(n.Fragment,{children:n.jsx(Ke,{isOpen:e,onClose:Be,title:i(s?"编辑 Provider":"新建 Provider"),className:"max-w-3xl",action:n.jsxs("div",{className:"flex w-full flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs(_,{variant:"outline",onClick:bt,disabled:c.isPending||!!J||!!v||!!Y.error||!!ee||!!T?.error||!!h?.error||!!ge||!!E&&O||K.length>0,children:[c.isPending?n.jsx(kt,{className:"animate-spin"}):n.jsx(Qt,{}),c.isPending?i("测试中..."):i("测试配置")]}),n.jsxs("div",{className:"flex gap-2",children:[n.jsx(_,{variant:"outline",onClick:Be,children:i("取消")}),n.jsx(_,{onClick:vt,disabled:wt,children:i("保存 Provider")})]})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[n.jsxs("div",{children:[n.jsx("label",{htmlFor:"provider-name",className:"mb-1 block text-xs font-medium text-foreground",children:i("名称")}),n.jsx(oe,{id:"provider-name",value:l.name,onChange:u=>U(p=>({...p,name:u.target.value})),placeholder:i("例如: Claude Code (官方)")})]}),!s&&n.jsxs("div",{children:[n.jsx("label",{className:"mb-1 block text-xs font-medium text-foreground",children:i("Agent 类型")}),n.jsx(Te,{value:et(l.agentType,l.runtimeType),onChange:ht,options:qt.flatMap(u=>Vt[u].map(p=>({value:et(u,p),label:pe(u,p),icon:n.jsx(fe,{agentType:u,className:"size-4"})}))),placeholder:i("选择 Agent 类型")})]}),s&&n.jsxs("div",{children:[n.jsx("label",{className:"mb-1 block text-xs font-medium text-foreground",children:i("Agent 类型")}),n.jsxs("div",{className:"flex h-9 items-center gap-2 rounded-lg border border-neutral-200 bg-muted/30 px-3 text-sm text-muted-foreground",children:[n.jsx(fe,{agentType:l.agentType,className:"size-4"}),n.jsx("span",{className:"min-w-0 truncate",children:pe(l.agentType,l.runtimeType)})]})]})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("input",{type:"checkbox",id:"isDefault",checked:l.isDefault,onChange:u=>U(p=>({...p,isDefault:u.target.checked})),className:"h-4 w-4 rounded border-border accent-primary"}),n.jsx("label",{htmlFor:"isDefault",className:"text-sm text-foreground",children:i("设为该类型的默认 Provider")})]}),n.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-muted/20 p-4",children:[n.jsx("div",{className:"text-sm font-medium text-foreground",children:i("基本配置")}),l.runtimeType===F.ACP&&n.jsxs("div",{children:[n.jsx("label",{className:"mb-1 block text-xs font-medium text-foreground",children:i("权限策略")}),n.jsx(Te,{value:xe,onChange:u=>{U(p=>{const x={...p.config,permissionMode:u};delete x.acpPermissionMode;const g={...p,config:x};return f(JSON.stringify(g.config,null,2)),g})},options:[{value:"ASK",label:i("每次询问")},{value:"UNRESTRICTED",label:i("无限制")}]}),xe==="UNRESTRICTED"&&n.jsx("p",{className:"mt-1 text-xs text-amber-600 dark:text-amber-400",children:i("Agent 将拥有完全访问电脑的权限")}),ee&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:ee})]}),C.apiBaseUrl&&!Se&&n.jsxs("div",{children:[n.jsx("label",{htmlFor:"provider-api-url",className:"mb-1 block text-xs font-medium text-foreground",children:i("API 地址")}),n.jsx(oe,{id:"provider-api-url",type:"url",value:l.simplified.apiBaseUrl??"",onChange:u=>he("apiBaseUrl",u.target.value),placeholder:C.apiBaseUrl.placeholder,"aria-invalid":!!J,"aria-describedby":J?"provider-api-url-error":void 0}),J&&n.jsx("p",{id:"provider-api-url-error",role:"alert",className:"mt-1 text-xs text-destructive",children:i("请输入以 http:// 或 https:// 开头的完整 API 地址")})]}),C.apiKey&&!Se&&(l.agentType!==A.CODEX||!!l.simplified.apiKey)&&n.jsxs("div",{children:[n.jsxs("div",{className:"mb-1 flex items-center justify-between gap-3",children:[n.jsx("label",{htmlFor:"provider-api-key",className:"text-xs font-medium text-foreground",children:"API Key"}),n.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground",children:[n.jsx(tn,{size:12}),i(jt?"由高级配置管理":Je?"已配置":"未配置")]})]}),Pe?.write.action==="replace"||!Je?n.jsxs("div",{className:"flex gap-2",children:[n.jsx(oe,{id:"provider-api-key",type:"password",autoComplete:"new-password",value:Pe?.value??"",onChange:u=>de(se,{action:"replace",value:u.target.value},u.target.value),placeholder:i("输入 API Key")}),l.simplified.apiKey?.configured&&n.jsx(_,{variant:"outline",size:"sm",onClick:()=>de(se,{action:"keep"}),children:i("取消替换")})]}):n.jsxs("div",{className:"flex gap-2",children:[n.jsx(_,{variant:"outline",size:"sm",onClick:()=>de(se,{action:"replace",value:""}),children:i("替换")}),n.jsx(_,{variant:"outline",size:"sm",onClick:()=>{window.confirm(i("确定清除此 API Key?"))&&de(se,{action:"clear"})},children:i("清除")})]})]}),n.jsxs("div",{children:[n.jsx("label",{htmlFor:"provider-model",className:"mb-1 block text-xs font-medium text-foreground",children:i("模型")}),l.agentType===A.CURSOR_AGENT?n.jsx(vn,{value:l.simplified.model??"",onChange:u=>he("model",u??"")}):n.jsx(oe,{id:"provider-model",value:l.simplified.model??"",onChange:u=>he("model",u.target.value),placeholder:C.model.placeholder})]}),C.reasoningEffort&&n.jsx(wn,{options:(C.reasoningEffort.options??[]).map(u=>({value:u,label:i(Xn(u))})),value:Ee,onChange:u=>he("reasoningEffort",u),label:i("思考强度"),efficiencyLabel:i("更高效"),intelligenceLabel:i("更智能"),followCliLabel:i("跟随 CLI"),currentLabel:i("当前"),error:ge}),y&&T&&n.jsxs("section",{className:"border-t border-border pt-3","data-fast-mode-control":!0,children:[n.jsxs("div",{className:"grid gap-2 sm:grid-cols-[minmax(0,1fr)_180px] sm:items-center",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("div",{className:"text-xs font-medium text-foreground",children:i("Fast 模式")}),n.jsx("div",{className:"mt-0.5 text-xs text-muted-foreground",children:i("支持的模型速度约提升至 1.5 倍,并增加用量消耗。ChatGPT 登录消耗更多额度;API Key 按 Priority 处理计费。")})]}),n.jsx(Te,{value:ft,disabled:!!T.error,onChange:gt,options:[{value:"inherit",label:i("跟随 Codex")},{value:"standard",label:i("标准速度")},{value:"fast",label:"Fast"}]})]}),T.error&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:i("Fast 模式字段必须为 true 或 false,请在运行配置 JSON 中修正。")})]}),te&&h&&n.jsxs("section",{className:"border-t border-border pt-3",children:[n.jsxs("div",{className:"flex items-center justify-between gap-3",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("div",{className:"text-xs font-medium text-foreground",children:i("禁用 WebSocket")}),n.jsx("div",{className:"mt-0.5 text-xs text-muted-foreground",children:i(Se?"当前原生 Provider 已使用非 WebSocket 传输;此开关不会添加额外运行时覆盖。":"仅禁用 Codex Responses API 的 WebSocket 传输;新启动和后续继续的请求将使用 HTTP。")})]}),n.jsx(it,{checked:h.enabled,disabled:!!h.error,onCheckedChange:xt,"aria-label":i("禁用 WebSocket")})]}),h.error&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:i("禁用 WebSocket 字段必须为 true 或 false,请在运行配置 JSON 中修正。")})]})]}),B&&n.jsx(jn,{result:B}),K.length>0&&n.jsxs("div",{className:"space-y-3 rounded-lg border border-warning/30 bg-warning/10 p-4",children:[n.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[n.jsx(Ue,{size:16,className:"text-warning"}),i("需要解决配置冲突")]}),K.map(u=>n.jsxs("div",{className:"flex flex-col gap-2 rounded-md border border-warning/20 bg-background/70 p-3 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("div",{className:"text-xs text-muted-foreground",children:[n.jsx("span",{className:"font-medium text-foreground",children:i(Gn(u.field))})," · ",i("简化字段与高级配置值不同")]}),n.jsx("div",{className:"flex flex-wrap gap-2",children:["simple","advanced"].map(p=>n.jsx(_,{variant:"outline",size:"sm",onClick:()=>{const x=u.field,g=Mn(l,x,p,C);U(()=>g),f(JSON.stringify(g.config,null,2)),X(j=>({...j,[x]:p})),p==="advanced"&&(x==="apiBaseUrl"||x==="model"||x==="reasoningEffort")&&R(j=>{const P=new Set(j);return P.delete(x),P}),b(j=>j.filter(P=>P.field!==x))},children:i(p==="simple"?"采用简化值":"保留高级值")},p))})]},u.field))]}),n.jsxs(ti,{title:i("高级配置"),defaultOpen:!!v||!!E||!!Y.error||!!T?.error||K.length>0,children:[n.jsxs("div",{children:[n.jsx("label",{className:"mb-1 block text-xs font-medium text-foreground",children:i("运行配置 (JSON)")}),n.jsx(qe,{value:m,onChange:u=>{const p=u.target.value;f(p);try{const x=JSON.parse(p);if(!x||typeof x!="object"||Array.isArray(x))throw new Error(i("JSON 顶层必须是对象"));const g=x;w(""),R(j=>{const P=new Set(j).add("model");return C.reasoningEffort?.kind==="config"&&P.add("reasoningEffort"),P}),U(j=>({...j,config:g,simplified:Un(j.simplified,g,C)}))}catch(x){Ce(),w(x instanceof Error?x.message:i("JSON 语法错误"))}},rows:7,className:"font-mono","aria-invalid":!!v}),v&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:v}),Y.error&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:i("执行权限字段必须为 true 或 false,请在运行配置 JSON 中修正。")})]}),n.jsxs("div",{className:"border-t border-border pt-3",children:[n.jsx("label",{className:"mb-2 block text-xs font-medium text-foreground",children:i("环境变量")}),n.jsxs("p",{className:"text-xs text-muted-foreground mb-2",children:[i("注入到 Agent 进程的环境变量。Codex 的")," ",n.jsx("code",{className:"rounded bg-muted px-1",children:"env_key"})," ",i("指定的是变量名,实际值需在此处设置。")]}),n.jsxs("div",{className:"space-y-2",children:[l.env.map((u,p)=>u.write.action!=="clear"&&n.jsxs("div",{className:"flex gap-2 items-center",children:[n.jsx(oe,{value:u.key,disabled:u.configured,onChange:x=>{const g=x.target.value;U(j=>{const P=[...j.env],ae=P[p];if(!ae)return j;const ue={...ae,key:g};return P[p]={...ue,sensitive:je(ue,j.simplified)},{...j,env:P}})},placeholder:i("变量名,如 AZURE_OPENAI_API_KEY"),className:"flex-1 py-1.5 font-mono"}),n.jsx(oe,{value:u.value,type:je(u,l.simplified)?"password":"text",onChange:x=>{const g=[...l.env];g[p]={...g[p],value:x.target.value,write:{action:"replace",value:x.target.value}},U(j=>({...j,env:g,simplified:u.key===C.apiBaseUrl?.path?{...j.simplified,apiBaseUrl:x.target.value}:j.simplified})),u.key===C.apiBaseUrl?.path&&R(j=>new Set(j).add("apiBaseUrl"))},placeholder:u.configured&&u.write.action==="keep"?i("已配置,输入新值以替换"):i("值"),className:"flex-1 py-1.5 font-mono"}),n.jsx("button",{type:"button",onClick:()=>{const x=[...l.env];u.configured?x[p]={...u,value:"",write:{action:"clear"}}:x.splice(p,1),U(g=>({...g,env:x,simplified:u.key===C.apiBaseUrl?.path?{...g.simplified,apiBaseUrl:""}:g.simplified})),u.key===C.apiBaseUrl?.path&&R(g=>new Set(g).add("apiBaseUrl"))},"aria-label":i("删除"),className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:n.jsx(st,{size:14})})]},p)),n.jsxs(_,{variant:"outline",size:"sm",onClick:()=>U(u=>({...u,env:[...u.env,{key:"",value:"",write:{action:"replace",value:""},configured:!1,sensitive:!1}]})),children:[n.jsx(_e,{size:12,className:"mr-1"}),i("添加变量")]})]})]}),yt&&n.jsxs("div",{className:"border-t border-border pt-3",children:[n.jsx("label",{className:"mb-2 block text-xs font-medium text-foreground",children:i(ve?"Agent 原生配置 (config.toml)":"Agent 原生配置 (settings.json)")}),n.jsx("p",{className:"text-xs text-muted-foreground mb-2",children:ve?n.jsxs(n.Fragment,{children:[i("直接填写 Codex")," ",n.jsx("code",{className:"rounded bg-muted px-1",children:"config.toml"})," ",i("格式的配置片段,由当前 Runtime 注入。不会修改你的")," ",n.jsx("code",{className:"rounded bg-muted px-1",children:"~/.codex/config.toml"})," ",i("文件。")]}):n.jsxs(n.Fragment,{children:[i("对应 Claude Code 的")," ",n.jsx("code",{className:"rounded bg-muted px-1",children:"~/.claude/settings.json"}),",",i("由当前 Runtime 注入。在")," ",n.jsx("code",{className:"rounded bg-muted px-1",children:"env"})," ",i("中设置 ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL 等。")]})}),n.jsx(qe,{value:l.settings,onChange:u=>{const p=u.target.value;D(!0),I("");let x;if(ve)try{x=He(l.simplified,p,A.CODEX),R(g=>new Set(g).add("reasoningEffort"))}catch{}U(g=>{const j=x===void 0?g.simplified:He(g.simplified,p,A.CODEX,new Set(g.env.flatMap(P=>P.write.action==="clear"?[]:P.write.action==="replace"?P.value?[P.key]:[]:P.configured?[P.key]:[])));return{...g,settings:p,env:On(g.env,j),simplified:j}})},rows:10,className:"font-mono",placeholder:$n(l.agentType,o),"aria-invalid":!!E}),E&&n.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:E})]})]})]})})})}function ii({isOpen:e,onClose:t,onConfirm:r,acknowledged:s,onAcknowledgedChange:a,isLoading:o}){const{t:i}=H();return n.jsx(Ke,{isOpen:e,onClose:t,title:i("导出 Provider 备份"),className:"max-w-xl",action:n.jsxs(n.Fragment,{children:[n.jsx(_,{variant:"outline",onClick:t,disabled:o,children:i("取消")}),n.jsx(_,{onClick:r,disabled:!s||o,children:i(o?"导出中...":"导出备份")})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"flex items-start gap-2.5 rounded-lg border border-warning/30 bg-warning/10 px-4 py-3 text-sm text-foreground",children:[n.jsx(Ue,{size:15,className:"mt-0.5 shrink-0 text-warning","aria-hidden":"true"}),n.jsx("span",{children:i("导出的备份文件将包含完整的 Provider 配置,包括环境变量、CLI settings 等敏感信息。任何拿到文件的人都可能直接使用这些 Provider。")})]}),n.jsxs("div",{className:"space-y-2 text-sm text-muted-foreground",children:[n.jsx("p",{children:i("这个功能用于备份和迁移,不用于分享配置。")}),n.jsx("p",{children:i("导出内容只包含用户层配置:自定义 Provider,以及对内置 Provider 的覆盖。")})]}),n.jsxs("label",{className:"flex items-start gap-3 rounded-lg border border-border px-4 py-3 text-sm text-foreground",children:[n.jsx("input",{type:"checkbox",checked:s,onChange:c=>a(c.target.checked),className:"mt-0.5 h-4 w-4 rounded border-border accent-primary"}),n.jsx("span",{children:i("我已知晓该备份文件包含敏感信息,只会保存在安全位置。")})]})]})})}function ri({isOpen:e,onClose:t,preview:r,backup:s,onConfirm:a,isLoading:o}){const{t:i}=H();if(!r||!s)return null;const c=r.summary.create+r.summary.overwrite,l=[...r.items].sort((d,m)=>{const f={CREATE:0,OVERWRITE:1,SKIP:2};return f[d.action]-f[m.action]});return n.jsx(Ke,{isOpen:e,onClose:t,title:i("导入 Provider 备份"),className:"max-w-3xl",action:n.jsxs(n.Fragment,{children:[n.jsx(_,{variant:"outline",onClick:t,disabled:o,children:i("取消")}),n.jsx(_,{onClick:a,disabled:c===0||o,children:o?i("导入中..."):i("确认导入 {count} 项",{count:c})})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"rounded-lg border border-border bg-muted/40 px-4 py-3 text-sm text-muted-foreground",children:[n.jsx("div",{children:i("导出时间:{value}",{value:new Date(s.exportedAt).toLocaleString()})}),n.jsx("div",{children:i("模式:完整备份(含敏感信息)")}),n.jsx("div",{children:i("文件内 Provider 数量:{count}",{count:s.providers.length})})]}),n.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[n.jsxs("div",{className:"rounded-lg border border-success/25 bg-success/10 px-4 py-3",children:[n.jsx("div",{className:"text-xs font-medium text-success",children:i("新增")}),n.jsx("div",{className:"text-lg font-semibold text-foreground",children:r.summary.create})]}),n.jsxs("div",{className:"rounded-lg border border-warning/25 bg-warning/10 px-4 py-3",children:[n.jsx("div",{className:"text-xs font-medium text-warning",children:i("覆盖")}),n.jsx("div",{className:"text-lg font-semibold text-foreground",children:r.summary.overwrite})]}),n.jsxs("div",{className:"rounded-lg border border-border bg-muted/40 px-4 py-3",children:[n.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:i("跳过")}),n.jsx("div",{className:"text-lg font-semibold text-foreground",children:r.summary.skip})]})]}),n.jsx("div",{className:"max-h-[420px] overflow-y-auto space-y-3 pr-1",children:l.map(d=>{const m=Hn(d.action);return n.jsxs("div",{className:"rounded-lg border border-border px-4 py-3",children:[n.jsx("div",{className:"flex items-center justify-between gap-3",children:n.jsxs("div",{className:"min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("h4",{className:"truncate text-sm font-medium text-foreground",children:d.incoming.name}),n.jsx("span",{className:`inline-flex rounded-full px-2 py-0.5 text-[11px] font-medium ${m.className}`,children:i(m.label)})]}),n.jsxs("div",{className:"mt-1 flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground",children:[n.jsx(fe,{agentType:d.incoming.agentType,className:"size-3.5"}),n.jsx("span",{className:"min-w-0 truncate",children:pe(d.incoming.agentType,d.incoming.runtimeType)})," · ",n.jsx("code",{className:"rounded bg-muted px-1 py-0.5",children:d.incoming.id})]})]})}),d.action==="OVERWRITE"&&d.existing&&n.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:i("将覆盖当前已有的 Provider:{name}",{name:d.existing.name})}),d.action==="SKIP"&&n.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:i("当前同 ID Provider 配置一致,本次不会重复写入。")}),d.action==="CREATE"&&n.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:i("当前不存在同 ID Provider,将直接新增。")})]},d.incoming.id)})})]})})}function si({item:e,onEdit:t,onDelete:r}){const{t:s}=H(),a=e.provider,o=e.availability,i=dt(a.agentType,a.config),c=ye[a.agentType],l=Object.entries(i).filter(([m])=>m!=="cmd"&&m!==c.executionPermission.path),d=Object.keys(a.redactedEnv||{});return n.jsxs("div",{className:"min-w-0 space-y-6",children:[n.jsxs("div",{className:"flex min-w-0 flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[n.jsx("h3",{className:"min-w-0 truncate text-base font-semibold text-foreground",children:a.name}),n.jsx(ei,{type:o.type})]}),n.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[n.jsxs("span",{className:"inline-flex min-w-0 items-center gap-1.5",children:[n.jsx(fe,{agentType:a.agentType,className:"size-3.5"}),n.jsx("span",{className:"truncate",children:pe(a.agentType,a.runtimeType)})]}),a.isDefault&&n.jsx("span",{className:"rounded-full bg-primary/[0.06] px-2 py-0.5 text-[11px] font-medium text-primary",children:s("默认")}),a.builtIn&&n.jsx("span",{className:"rounded-full bg-muted px-2 py-0.5 text-[11px] font-medium text-muted-foreground",children:s("内置")})]})]}),n.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 sm:shrink-0",children:[n.jsxs(_,{size:"sm",variant:"outline",onClick:t,children:[n.jsx(Zt,{size:13}),s("编辑")]}),n.jsxs(_,{size:"sm",variant:a.builtIn?"outline":"destructive",onClick:r,disabled:a.deletable===!1,children:[a.builtIn?n.jsx(Dt,{size:13}):n.jsx(st,{size:13}),a.builtIn?s("恢复默认"):s("删除")]})]})]}),l.length>0&&n.jsxs("div",{children:[n.jsx(ke,{className:"mb-3",children:s("运行配置")}),n.jsx("div",{className:"grid gap-px overflow-hidden rounded-lg border border-border bg-border/60",children:l.map(([m,f])=>n.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-1 bg-background px-4 py-2.5 sm:flex-row sm:items-center sm:gap-4",children:[n.jsx("span",{className:"min-w-0 break-words text-[13px] text-muted-foreground sm:w-32 sm:shrink-0",children:s(ut[m]??m)}),n.jsx("span",{className:"min-w-0 max-w-full break-all font-mono text-[13px] text-foreground",children:Vn(m,f)})]},m))})]}),d.length>0&&n.jsxs("div",{children:[n.jsx(ke,{className:"mb-3",children:s("环境变量")}),n.jsx("div",{className:"grid gap-px overflow-hidden rounded-lg border border-border bg-border/60",children:d.map(m=>n.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-2 bg-background px-4 py-2.5 sm:gap-4",children:[n.jsx("span",{className:"min-w-0 max-w-full break-all font-mono text-[13px] text-foreground",children:m}),n.jsx("span",{className:"text-[13px] text-muted-foreground","aria-label":"hidden",children:"•••••"})]},m))})]}),a.settings?.trim()&&n.jsxs("div",{children:[n.jsx(ke,{className:"mb-3",children:s("Agent 原生配置")}),n.jsx("div",{className:"rounded-lg border border-border bg-muted/40 p-4",children:n.jsx("pre",{className:"max-h-[200px] overflow-y-auto whitespace-pre-wrap break-all font-mono text-xs text-muted-foreground",children:a.settings})})]}),l.length===0&&d.length===0&&!a.settings?.trim()&&n.jsx("div",{className:"py-8 text-center text-sm text-muted-foreground",children:s('该 Provider 未配置额外参数。点击"编辑"添加运行配置、环境变量或 Agent 原生配置。')})]})}function wi(){const{t:e}=H(),{data:t,isLoading:r}=Lt(),s=Mt(),a=Bt(),o=zt(),i=Ft(),c=$t(),l=Jt(),d=S.useRef(null),[m,f]=S.useState(null),[v,w]=S.useState(null),[E,I]=S.useState(null),[O,D]=S.useState(!1),[V,M]=S.useState(!1),[B,L]=S.useState(null),[Q,R]=S.useState(!1),K=t??[],b=m??K[0]?.provider.id??null,k=h=>{s.mutate(h,{onSuccess:()=>w(null),onError:y=>z.error(ne(y,e("创建 Provider 失败")))})},X=(h,y)=>{a.mutate({id:h,data:y},{onSuccess:()=>w(null),onError:T=>z.error(ne(T,e("更新 Provider 失败")))})},re=h=>{if(!(h.deletable??!h.builtIn)){z.error(e("系统内置 Provider 不可删除"));return}I({id:h.id,name:h.name,builtIn:h.builtIn})},Ne=()=>{E&&o.mutate(E.id,{onSuccess:()=>{z.success(E.builtIn?e("已恢复默认 Provider 配置"):e("Provider 已删除")),b===E.id&&f(null),I(null),R(!1)},onError:h=>z.error(ne(h,e("删除 Provider 失败")))})},C=()=>{D(!1),M(!1)},J=()=>L(null),Y=()=>{i.mutate(void 0,{onSuccess:h=>{Zn(Yn(h.exportedAt),h),z.success(e("Provider 备份已导出")),C()},onError:h=>z.error(ne(h,e("导出 Provider 备份失败")))})},G=()=>{d.current&&(d.current.value="",d.current.click())},xe=async h=>{const y=h.target.files?.[0];if(h.target.value="",!y)return;let T;try{T=JSON.parse(await y.text())}catch{z.error(e("备份文件不是有效的 JSON"));return}c.mutate(T,{onSuccess:Z=>L({backup:T,preview:Z}),onError:Z=>z.error(ne(Z,e("导入预览失败")))})},ee=()=>{B&&l.mutate(B.backup,{onSuccess:h=>{const y=h.summary.create+h.summary.overwrite;z.success(y===0?e("导入完成,当前配置无需变更"):e("导入完成:新增 {create},覆盖 {overwrite},跳过 {skip}",{create:h.summary.create,overwrite:h.summary.overwrite,skip:h.summary.skip})),J()},onError:h=>z.error(ne(h,e("导入 Provider 备份失败")))})},te=h=>{const y=h.provider,T=ye[y.agentType],Z=In(y,T);w({id:y.id,data:{name:y.name,agentType:y.agentType,runtimeType:y.runtimeType===F.ACP?F.ACP:F.CLI,config:dt(y.agentType,y.config),settings:y.settings??"",env:Z,simplified:y.simplified??{},diagnostics:y.diagnostics,isDefault:y.isDefault}})};return r?n.jsx(We,{className:"max-w-5xl",children:n.jsx(At,{})}):n.jsxs(We,{className:"max-w-5xl",children:[n.jsx("input",{ref:d,type:"file",accept:".json,application/json",className:"hidden",onChange:xe}),n.jsx(Tt,{title:e("Agent 配置"),actions:n.jsxs(n.Fragment,{children:[n.jsxs(_,{variant:"outline",size:"sm",onClick:G,disabled:c.isPending||l.isPending,children:[n.jsx(Yt,{size:13}),e("导入")]}),n.jsxs(_,{variant:"outline",size:"sm",onClick:()=>D(!0),disabled:i.isPending,children:[n.jsx(_t,{size:13}),e("导出")]}),n.jsxs(_,{size:"sm",onClick:()=>w({}),children:[n.jsx(_e,{size:13,className:"mr-1"}),e("新建")]})]})}),K.length===0?n.jsx(It,{icon:Ot,message:e("暂无 Agent 配置"),action:n.jsxs(_,{size:"sm",onClick:()=>w({}),children:[n.jsx(_e,{size:13,className:"mr-1"}),e("新建配置")]})}):n.jsx(Xt,{items:K,selectedId:b,onSelectItem:h=>{f(h),R(!0)},getItemId:h=>h.provider.id,mobileShowDetail:Q,onMobileBack:()=>R(!1),renderListItem:(h,y)=>{const T=h.provider;return n.jsxs(n.Fragment,{children:[n.jsx(Qn,{type:h.availability.type}),n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"truncate text-[13px] font-medium",children:T.name}),n.jsxs("div",{className:$("flex min-w-0 items-center gap-1.5 text-[11px]",y?"text-primary-foreground/60":"text-muted-foreground"),children:[n.jsx(fe,{agentType:T.agentType,className:"size-3.5",fallbackClassName:y?"text-primary-foreground/70":"text-muted-foreground"}),n.jsx("span",{className:"min-w-0 truncate",children:pe(T.agentType,T.runtimeType)})]})]}),T.isDefault&&n.jsx("span",{className:$("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",y?"bg-white/20 text-primary-foreground":"bg-primary/[0.06] text-primary"),children:e("默认")})]})},renderDetail:h=>h?n.jsx("div",{className:"min-w-0 p-5",children:n.jsx(si,{item:h,onEdit:()=>te(h),onDelete:()=>re(h.provider)})}):n.jsx("div",{className:"py-16 text-center text-sm text-muted-foreground",children:e("选择一个 Provider 查看详情")})}),v&&n.jsx(ni,{isOpen:!0,onClose:()=>w(null),providerId:v.id,initialData:v.data,onSave:h=>{v.id?X(v.id,h):k(h)}}),n.jsx(Wt,{isOpen:E!==null,onClose:()=>{o.isPending||I(null)},onConfirm:Ne,title:E?.builtIn?e("恢复默认 Provider"):e("删除 Provider"),description:E?.builtIn?e('确定删除 "{name}" 的自定义覆盖,并恢复系统默认配置?',{name:E?.name}):e('确定删除 "{name}"?此操作不可撤销。',{name:E?.name}),confirmText:E?.builtIn?e("恢复默认"):e("删除"),cancelText:e("取消"),variant:"danger",isLoading:o.isPending}),n.jsx(ii,{isOpen:O,onClose:C,onConfirm:Y,acknowledged:V,onAcknowledgedChange:M,isLoading:i.isPending}),n.jsx(ri,{isOpen:!!B,onClose:J,preview:B?.preview??null,backup:B?.backup??null,onConfirm:ee,isLoading:l.isPending})]})}export{ni as ProviderFormModal,wi as ProviderSettingsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,V as n}from"./index-DaRxJqVy.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{k as c}from"./index-oC5eh7mZ.js";const e=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],t=c("check",e);export{t as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-CAiaySk6.js";import{_ as i}from"./index-DaRxJqVy.js";import"./chunk-FMBD7UC4-Kz0Cc0mv.js";import"./chunk-ND2GUHAM-BttoT7UR.js";import"./chunk-55IACEB6-Bb-pPIxs.js";import"./chunk-2J33WTMH-DQCbv8W_.js";import"./index-oC5eh7mZ.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-CAiaySk6.js";import{_ as i}from"./index-DaRxJqVy.js";import"./chunk-FMBD7UC4-Kz0Cc0mv.js";import"./chunk-ND2GUHAM-BttoT7UR.js";import"./chunk-55IACEB6-Bb-pPIxs.js";import"./chunk-2J33WTMH-DQCbv8W_.js";import"./index-oC5eh7mZ.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as g,l as o}from"./monaco-B25-2nEB.js";import{C as l,H as h,D as c,a as u,R as f,b as _,c as w,d as k,F as v,e as D,S as P,f as R,g as I}from"./lspLanguageFeatures-CUyibjAN.js";import{h as oe,i as se,j as ne,t as ae,k as pe}from"./lspLanguageFeatures-CUyibjAN.js";import"./ProjectKanbanPage-D7RJm4yg.js";import"./index-oC5eh7mZ.js";import"./mermaid-NOHMQCX5-CGCWmHha.js";import"./chevron-right-D52zUyOF.js";import"./chevron-down-BZfpVhYr.js";import"./confirm-dialog-BWvZEHpu.js";import"./modal-D87uszzb.js";import"./Icons-KJJd6C8K.js";import"./CreateTaskInput-8bLhHYOc.js";import"./AgentLogo-Ntqe3_Mx.js";import"./check-C1zWgxFO.js";import"./use-projects-B4w00h5I.js";import"./MemberAvatar-kbJEoyh0.js";import"./use-providers-B70-BYNu.js";import"./trash-2-C0P8jNpJ.js";import"./useNormalizedLogs-MsDkcnRQ.js";import"./folder-picker-CaM_drIJ.js";import"./circle-alert-D67xfWMs.js";import"./message-square-B-uYQiTq.js";import"./layers-hQUUT3Gb.js";import"./chevron-up-CFOy5dmW.js";import"./select-D7WkUiad.js";import"./textarea-D9oaz-Ba.js";import"./server-qlZupTvg.js";import"./upload-BYgsDplu.js";import"./pencil-CY2RnQrx.js";const C=120*1e3;class A{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>C&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=g({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL("/assets/css.worker-DBVD8oXr.js",import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(a=>{e=a}).then(a=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(a=>e)}}function te(s){const n=[],e=[],a=new A(s);n.push(a);const r=(...t)=>a.getLanguageServiceWorker(...t);function m(){const{languageId:t,modeConfiguration:i}=s;d(e),i.completionItems&&e.push(o.registerCompletionItemProvider(t,new l(r,["/","-",":"]))),i.hovers&&e.push(o.registerHoverProvider(t,new h(r))),i.documentHighlights&&e.push(o.registerDocumentHighlightProvider(t,new c(r))),i.definitions&&e.push(o.registerDefinitionProvider(t,new u(r))),i.references&&e.push(o.registerReferenceProvider(t,new f(r))),i.documentSymbols&&e.push(o.registerDocumentSymbolProvider(t,new _(r))),i.rename&&e.push(o.registerRenameProvider(t,new w(r))),i.colors&&e.push(o.registerColorProvider(t,new k(r))),i.foldingRanges&&e.push(o.registerFoldingRangeProvider(t,new v(r))),i.diagnostics&&e.push(new D(t,r,s.onDidChange)),i.selectionRanges&&e.push(o.registerSelectionRangeProvider(t,new P(r))),i.documentFormattingEdits&&e.push(o.registerDocumentFormattingEditProvider(t,new R(r))),i.documentRangeFormattingEdits&&e.push(o.registerDocumentRangeFormattingEditProvider(t,new I(r)))}return m(),n.push(p(e)),p(n)}function p(s){return{dispose:()=>d(s)}}function d(s){for(;s.length;)s.pop().dispose()}export{l as CompletionAdapter,u as DefinitionAdapter,D as DiagnosticsAdapter,k as DocumentColorAdapter,R as DocumentFormattingEditProvider,c as DocumentHighlightAdapter,oe as DocumentLinkAdapter,I as DocumentRangeFormattingEditProvider,_ as DocumentSymbolAdapter,v as FoldingRangeAdapter,h as HoverAdapter,f as ReferenceAdapter,w as RenameAdapter,P as SelectionRangeAdapter,A as WorkerManager,se as fromPosition,ne as fromRange,te as setupMode,ae as toRange,pe as toTextEdit};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as t}from"./monaco-B25-2nEB.js";import"./ProjectKanbanPage-D7RJm4yg.js";import"./index-oC5eh7mZ.js";import"./mermaid-NOHMQCX5-CGCWmHha.js";import"./chevron-right-D52zUyOF.js";import"./chevron-down-BZfpVhYr.js";import"./confirm-dialog-BWvZEHpu.js";import"./modal-D87uszzb.js";import"./Icons-KJJd6C8K.js";import"./CreateTaskInput-8bLhHYOc.js";import"./AgentLogo-Ntqe3_Mx.js";import"./check-C1zWgxFO.js";import"./use-projects-B4w00h5I.js";import"./MemberAvatar-kbJEoyh0.js";import"./use-providers-B70-BYNu.js";import"./trash-2-C0P8jNpJ.js";import"./useNormalizedLogs-MsDkcnRQ.js";import"./folder-picker-CaM_drIJ.js";import"./circle-alert-D67xfWMs.js";import"./message-square-B-uYQiTq.js";import"./layers-hQUUT3Gb.js";import"./chevron-up-CFOy5dmW.js";import"./select-D7WkUiad.js";import"./textarea-D9oaz-Ba.js";import"./server-qlZupTvg.js";import"./upload-BYgsDplu.js";import"./pencil-CY2RnQrx.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],C={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[["<!--","-->"],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}]},j={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/<!DOCTYPE/,"metatag.html","@doctype"],[/<!--/,"comment.html","@commentHtml"],[/(<)(\w+)(\/>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/</,"delimiter.html"],[/\{/,"delimiter.html"],[/[^<{]+/]],doctype:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/[^>]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}};export{C as conf,j as language};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as t}from"./monaco-B25-2nEB.js";import"./ProjectKanbanPage-D7RJm4yg.js";import"./index-oC5eh7mZ.js";import"./mermaid-NOHMQCX5-CGCWmHha.js";import"./chevron-right-D52zUyOF.js";import"./chevron-down-BZfpVhYr.js";import"./confirm-dialog-BWvZEHpu.js";import"./modal-D87uszzb.js";import"./Icons-KJJd6C8K.js";import"./CreateTaskInput-8bLhHYOc.js";import"./AgentLogo-Ntqe3_Mx.js";import"./check-C1zWgxFO.js";import"./use-projects-B4w00h5I.js";import"./MemberAvatar-kbJEoyh0.js";import"./use-providers-B70-BYNu.js";import"./trash-2-C0P8jNpJ.js";import"./useNormalizedLogs-MsDkcnRQ.js";import"./folder-picker-CaM_drIJ.js";import"./circle-alert-D67xfWMs.js";import"./message-square-B-uYQiTq.js";import"./layers-hQUUT3Gb.js";import"./chevron-up-CFOy5dmW.js";import"./select-D7WkUiad.js";import"./textarea-D9oaz-Ba.js";import"./server-qlZupTvg.js";import"./upload-BYgsDplu.js";import"./pencil-CY2RnQrx.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],j={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["<!--","-->"]},brackets:[["<!--","-->"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*<!--\\s*#region\\b.*-->"),end:new RegExp("^\\s*<!--\\s*#endregion\\b.*-->")}}},P={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,"metatag","@doctype"],[/<!--/,"comment","@comment"],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/</,"delimiter"],[/[^<]+/]],doctype:[[/[^>]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}};export{j as conf,P as language};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as D,l as t}from"./monaco-B25-2nEB.js";import{H as d,D as m,h as l,F as p,b as c,S as u,c as h,f as w,g as _,C as R}from"./lspLanguageFeatures-CUyibjAN.js";import{a as ie,e as oe,d as ne,R as se,i as ae,j as ge,t as de,k as me}from"./lspLanguageFeatures-CUyibjAN.js";import"./ProjectKanbanPage-D7RJm4yg.js";import"./index-oC5eh7mZ.js";import"./mermaid-NOHMQCX5-CGCWmHha.js";import"./chevron-right-D52zUyOF.js";import"./chevron-down-BZfpVhYr.js";import"./confirm-dialog-BWvZEHpu.js";import"./modal-D87uszzb.js";import"./Icons-KJJd6C8K.js";import"./CreateTaskInput-8bLhHYOc.js";import"./AgentLogo-Ntqe3_Mx.js";import"./check-C1zWgxFO.js";import"./use-projects-B4w00h5I.js";import"./MemberAvatar-kbJEoyh0.js";import"./use-providers-B70-BYNu.js";import"./trash-2-C0P8jNpJ.js";import"./useNormalizedLogs-MsDkcnRQ.js";import"./folder-picker-CaM_drIJ.js";import"./circle-alert-D67xfWMs.js";import"./message-square-B-uYQiTq.js";import"./layers-hQUUT3Gb.js";import"./chevron-up-CFOy5dmW.js";import"./select-D7WkUiad.js";import"./textarea-D9oaz-Ba.js";import"./server-qlZupTvg.js";import"./upload-BYgsDplu.js";import"./pencil-CY2RnQrx.js";const I=120*1e3;class f{constructor(o){this._defaults=o,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL("/assets/html.worker-CwpTb9lJ.js",import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...o){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(o)}).then(r=>e)}}class v extends R{constructor(o){super(o,[".",":","<",'"',"=","/"])}}function $(i){const o=new f(i),e=(...n)=>o.getLanguageServiceWorker(...n);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new d(e)),t.registerDocumentHighlightProvider(r,new m(e)),t.registerLinkProvider(r,new l(e)),t.registerFoldingRangeProvider(r,new p(e)),t.registerDocumentSymbolProvider(r,new c(e)),t.registerSelectionRangeProvider(r,new u(e)),t.registerRenameProvider(r,new h(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new _(e)))}function ee(i){const o=[],e=[],r=new f(i);o.push(r);const n=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(n))),a.hovers&&e.push(t.registerHoverProvider(s,new d(n))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new m(n))),a.links&&e.push(t.registerLinkProvider(s,new l(n))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new c(n))),a.rename&&e.push(t.registerRenameProvider(s,new h(n))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new p(n))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new u(n))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(n))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new _(n)))}return P(),o.push(g(e)),g(o)}function g(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,ie as DefinitionAdapter,oe as DiagnosticsAdapter,ne as DocumentColorAdapter,w as DocumentFormattingEditProvider,m as DocumentHighlightAdapter,l as DocumentLinkAdapter,_ as DocumentRangeFormattingEditProvider,c as DocumentSymbolAdapter,p as FoldingRangeAdapter,d as HoverAdapter,se as ReferenceAdapter,h as RenameAdapter,u as SelectionRangeAdapter,f as WorkerManager,ae as fromPosition,ge as fromRange,ee as setupMode,$ as setupMode1,de as toRange,me as toTextEdit};
|