cli-jaw 2.17.62 → 2.17.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +17 -17
- package/README.ko.md +17 -17
- package/README.md +17 -17
- package/README.zh-CN.md +17 -17
- package/dist/bin/commands/tui/input-handler.js +19 -0
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +8 -4
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/star-prompt.js +1 -1
- package/dist/bin/star-prompt.js.map +1 -1
- package/dist/server.js +14 -1
- package/dist/server.js.map +1 -1
- package/dist/src/agent/claude-runtime-pool.js +2 -1
- package/dist/src/agent/claude-runtime-pool.js.map +1 -1
- package/dist/src/agent/claude-runtime-run.js +28 -7
- package/dist/src/agent/claude-runtime-run.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +34 -6
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-events.js +136 -9
- package/dist/src/agent/runtime/claude-sdk-events.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-history-loader.js +24 -0
- package/dist/src/agent/runtime/claude-sdk-history-loader.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-hooks.js +10 -4
- package/dist/src/agent/runtime/claude-sdk-hooks.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-messages.js +25 -2
- package/dist/src/agent/runtime/claude-sdk-messages.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-options.js +36 -3
- package/dist/src/agent/runtime/claude-sdk-options.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-permissions.js +32 -9
- package/dist/src/agent/runtime/claude-sdk-permissions.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-session.js +165 -17
- package/dist/src/agent/runtime/claude-sdk-session.js.map +1 -1
- package/dist/src/agent/runtime/claude-sdk-version.js +8 -0
- package/dist/src/agent/runtime/claude-sdk-version.js.map +1 -0
- package/dist/src/agent/spawn/backend-codex-app.js +619 -0
- package/dist/src/agent/spawn/backend-codex-app.js.map +1 -0
- package/dist/src/agent/spawn/backend-context.js +2 -0
- package/dist/src/agent/spawn/backend-context.js.map +1 -0
- package/dist/src/agent/spawn/backend-copilot.js +385 -0
- package/dist/src/agent/spawn/backend-copilot.js.map +1 -0
- package/dist/src/agent/spawn/backend-native-acp.js +379 -0
- package/dist/src/agent/spawn/backend-native-acp.js.map +1 -0
- package/dist/src/agent/spawn/backend-pi.js +565 -0
- package/dist/src/agent/spawn/backend-pi.js.map +1 -0
- package/dist/src/agent/spawn/types.js +2 -0
- package/dist/src/agent/spawn/types.js.map +1 -0
- package/dist/src/agent/spawn.js +44 -1858
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/claude-default-model-boot.js +36 -0
- package/dist/src/cli/claude-default-model-boot.js.map +1 -0
- package/dist/src/cli/claude-model-discovery.js +13 -1
- package/dist/src/cli/claude-model-discovery.js.map +1 -1
- package/dist/src/cli/claude-models.js +7 -1
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/commands.js +5 -15
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/tui/composer.js +3 -3
- package/dist/src/cli/tui/composer.js.map +1 -1
- package/dist/src/cli/tui/skill-mention.js +15 -0
- package/dist/src/cli/tui/skill-mention.js.map +1 -0
- package/dist/src/code-mode/manager.js +174 -9
- package/dist/src/code-mode/manager.js.map +1 -1
- package/dist/src/code-mode/providers/catalog.js +5 -3
- package/dist/src/code-mode/providers/catalog.js.map +1 -1
- package/dist/src/code-mode/providers/claude-history.js +132 -0
- package/dist/src/code-mode/providers/claude-history.js.map +1 -0
- package/dist/src/code-mode/providers/claude.js +74 -7
- package/dist/src/code-mode/providers/claude.js.map +1 -1
- package/dist/src/code-mode/providers/codex-app.js +7 -1
- package/dist/src/code-mode/providers/codex-app.js.map +1 -1
- package/dist/src/code-mode/session.js +158 -11
- package/dist/src/code-mode/session.js.map +1 -1
- package/dist/src/code-mode/store.js +416 -28
- package/dist/src/code-mode/store.js.map +1 -1
- package/dist/src/command-contract/catalog.js +3 -22
- package/dist/src/command-contract/catalog.js.map +1 -1
- package/dist/src/core/codex-config.js +3 -62
- package/dist/src/core/codex-config.js.map +1 -1
- package/dist/src/core/config.js +116 -14
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/runtime-settings.js +20 -10
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/settings-watch.js +1 -0
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/core/skill-mentions.js +83 -0
- package/dist/src/core/skill-mentions.js.map +1 -0
- package/dist/src/manager/registry.js +5 -1
- package/dist/src/manager/registry.js.map +1 -1
- package/dist/src/manager/routes/desktop-status.js +1 -1
- package/dist/src/manager/routes/desktop-status.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +11 -1
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/prompt/builder.js +10 -4
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +1 -1
- package/dist/src/routes/code-native.js +51 -3
- package/dist/src/routes/code-native.js.map +1 -1
- package/dist/src/routes/settings.js +1 -4
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/skills.js +7 -0
- package/dist/src/routes/skills.js.map +1 -1
- package/dist/src/shared/skill-mention.js +61 -0
- package/dist/src/shared/skill-mention.js.map +1 -0
- package/dist/src/shared/tool-input.js +137 -0
- package/dist/src/shared/tool-input.js.map +1 -0
- package/package.json +7 -5
- package/public/css/activity.css +83 -20
- package/public/css/layout.css +2 -2
- package/public/css/sidebar.css +18 -0
- package/public/css/variables.css +23 -2
- package/public/dist/.vite/manifest.json +302 -334
- package/public/dist/assets/Activity-DPLlOJ46.js +1 -0
- package/public/dist/assets/AdvancedExport-BgOgGvc5.js +1 -0
- package/public/dist/assets/Agent-O_U8ny90.js +1 -0
- package/public/dist/assets/Browser-m6VynQXV.js +1 -0
- package/public/dist/assets/BrowserPanel-Bb-Bge6B.js +3 -0
- package/public/dist/assets/ChannelEnablementControl-BSuKQhTW.js +85 -0
- package/public/dist/assets/ChannelSetupEntry-DHLoZEzJ.js +1 -0
- package/public/dist/assets/ChannelsDiscord-B-G8vsYy.js +1 -0
- package/public/dist/assets/ChannelsSlack-oPuh922z.js +1 -0
- package/public/dist/assets/ChannelsTelegram-PmTv43KQ.js +1 -0
- package/public/dist/assets/CodeCanvas-CVbdp0S-.js +3 -0
- package/public/dist/assets/DashboardMeta-BqEiJrvr.js +1 -0
- package/public/dist/assets/DesignPanel-BOb-HMbl.js +2 -0
- package/public/dist/assets/{Developer-BdKPcw8Z.js → Developer-CbySB7_Z.js} +1 -1
- package/public/dist/assets/{DiffPanel-DtJuvU5y.js → DiffPanel-D9Cch5FG.js} +1 -1
- package/public/dist/assets/Display-C0Zdamcb.js +1 -0
- package/public/dist/assets/Display-DU4_76cS.js +1 -0
- package/public/dist/assets/DocPanel-DvtFw8AP.js +1 -0
- package/public/dist/assets/{Embedding-DvdTj1BF.js → Embedding-CCFMOB_2.js} +1 -1
- package/public/dist/assets/Employees-BanvF58d.js +1 -0
- package/public/dist/assets/FolderPanel-CJvwRwIV.js +3 -0
- package/public/dist/assets/Heartbeat-uyi_MpUd.js +1 -0
- package/public/dist/assets/InlineWarn-Cq4z28F3.js +1 -0
- package/public/dist/assets/MarkdownRenderer-Cc3DeHvm.js +1 -0
- package/public/dist/assets/{MarkdownRenderer-DhonsAPC.js → MarkdownRenderer-DzN66XVb.js} +1 -1
- package/public/dist/assets/Mcp-rjPoL_Zo.js +4 -0
- package/public/dist/assets/Memory-C9I33pIi.js +1 -0
- package/public/dist/assets/{MilkdownWysiwygEditor-D6JaLDE4.js → MilkdownWysiwygEditor-xObhviw7.js} +1 -1
- package/public/dist/assets/ModelProvider-fiUktMaO.js +1 -0
- package/public/dist/assets/Network-CuqFrOvR.js +1 -0
- package/public/dist/assets/NotesGraphWorkspace-DO9LtVGF.js +1 -0
- package/public/dist/assets/PanelLayoutProvider-DRZ4QkBC.js +1 -0
- package/public/dist/assets/Permissions-BltXiZnz.js +1 -0
- package/public/dist/assets/{Permissions-BwiMEoTV.js → Permissions-DcCbFMIq.js} +1 -1
- package/public/dist/assets/Profile-DUL7-RE_.js +1 -0
- package/public/dist/assets/Prompts-C9vY8ivQ.js +1 -0
- package/public/dist/assets/SpeechKeys-BJ8V7U5E.js +1 -0
- package/public/dist/assets/TelegramHub-DtyjLGFR.js +1 -0
- package/public/dist/assets/{TerminalPanel-Bu9i-P2f.js → TerminalPanel-c1xhiy53.js} +1 -1
- package/public/dist/assets/app-BjKzqXCv.css +1 -0
- package/public/dist/assets/app-CZwx0V6K.js +59 -0
- package/public/dist/assets/bgtask-badge-CnVkcp3c.js +1 -0
- package/public/dist/assets/{bgtask-badge-DfiHuzxT.js → bgtask-badge-Cp26S8Uq.js} +1 -1
- package/public/dist/assets/client-platform-WO8m6kPQ.js +1 -0
- package/public/dist/assets/{employees-BQaJNp-u.js → employees-CsvI0_5V.js} +1 -1
- package/public/dist/assets/error-normalize-clOi-AAA.js +1 -0
- package/public/dist/assets/fields-CicOWY-X.js +1 -0
- package/public/dist/assets/iframe-renderer-DWx9v2Iz.js +1 -0
- package/public/dist/assets/iframe-renderer-DmHYOI1A.js +142 -0
- package/public/dist/assets/{react-C_pPTFsM.js → jsx-runtime-CkEUZM6i.js} +1 -1
- package/public/dist/assets/manager-CCXm5Yfe.js +5 -0
- package/public/dist/assets/manager-D9rhKFKc.css +1 -0
- package/public/dist/assets/manager-shortcuts-Cqmr0mEq.js +1 -0
- package/public/dist/assets/{memory-EG1B51up.js → memory-C6qtAMdJ.js} +1 -1
- package/public/dist/assets/memory-PPofQPeB.js +1 -0
- package/public/dist/assets/message-history-DcjBuubA.js +4 -0
- package/public/dist/assets/message-history-bw4qF01Z.js +1 -0
- package/public/dist/assets/page-shell-DfinU3mb.js +1 -0
- package/public/dist/assets/react-dom-URBLzV3w.js +1 -0
- package/public/dist/assets/{render-Dp07lZAJ.js → render-DfYro-fG.js} +1 -1
- package/public/dist/assets/{settings-jlI4X-zt.js → settings-CvsLWlJn.js} +38 -30
- package/public/dist/assets/settings-DMiQe469.js +1 -0
- package/public/dist/assets/settings-DgAlohx9.js +1 -0
- package/public/dist/assets/settings-core-BH7J_Rbm.js +1 -0
- package/public/dist/assets/{settings-core-B5Uf_lWY.js → settings-core-pnpw-eZv.js} +1 -1
- package/public/dist/assets/{settings-embedding-BfWzWKMM.js → settings-embedding-BRW0WZvh.js} +3 -3
- package/public/dist/assets/{settings-embedding-DhEdT86W.css → settings-embedding-CUQ8Is3y.css} +1 -1
- package/public/dist/assets/settings-types-CYKy0xz4.js +1 -0
- package/public/dist/assets/shared-D1begqvi.js +1 -0
- package/public/dist/assets/{sidebar-BUemG2ZN.js → sidebar-C_80w4iY.js} +3 -3
- package/public/dist/assets/{skills-CKUcEN9m.js → skills-D_2adqge.js} +1 -1
- package/public/dist/assets/skills-DeNVAVgt.js +1 -0
- package/public/dist/assets/{slash-commands-D34GgHFX.js → slash-commands-B_Hq5RkC.js} +2 -2
- package/public/dist/assets/slash-commands-Cj5qoRWc.js +1 -0
- package/public/dist/assets/tool-input-DI7uu8Ah.js +2 -0
- package/public/dist/assets/{trace-drawer-DBmK-5F_.js → trace-drawer-B6XuPodh.js} +1 -1
- package/public/dist/assets/ui-BbR_fFiK.js +1 -0
- package/public/dist/assets/{ui-vm2iuLcS.js → ui-D8xzm7DN.js} +1 -1
- package/public/dist/index.html +11 -3
- package/public/dist/manager/index.html +3 -3
- package/public/dist/settings/index.html +2 -2
- package/public/index.html +9 -1
- package/public/js/features/activity-history.ts +50 -21
- package/public/js/features/activity-rows.ts +158 -10
- package/public/js/features/activity-view.ts +5 -5
- package/public/js/features/chat.ts +2 -0
- package/public/js/features/employees.ts +1 -0
- package/public/js/features/resize-guard.ts +39 -0
- package/public/js/features/settings-cli-status.ts +49 -17
- package/public/js/features/settings-types.ts +39 -1
- package/public/js/features/skill-mentions.ts +143 -0
- package/public/js/main.ts +15 -0
- package/public/js/virtual-scroll.ts +67 -1
- package/public/locales/en.json +2 -0
- package/public/locales/ja.json +2 -0
- package/public/locales/ko.json +2 -0
- package/public/locales/zh.json +2 -0
- package/public/manager/src/AppChrome.tsx +2 -0
- package/public/manager/src/InstancePreview.tsx +1 -1
- package/public/manager/src/SidebarRailRouter.tsx +3 -1
- package/public/manager/src/browser-panel/BrowserPanel.tsx +47 -12
- package/public/manager/src/browser-panel/browser-address-state.ts +11 -0
- package/public/manager/src/client-platform.ts +18 -0
- package/public/manager/src/code/CodeCanvas.tsx +4 -2
- package/public/manager/src/code/CodeComposer.tsx +22 -10
- package/public/manager/src/code/CodeDraftEmptyState.tsx +64 -0
- package/public/manager/src/code/CodeSessionList.tsx +154 -40
- package/public/manager/src/code/CodeTranscript.tsx +104 -16
- package/public/manager/src/code/CodeWorkbench.tsx +21 -11
- package/public/manager/src/code/CodeWorkspaceHeader.tsx +5 -10
- package/public/manager/src/code/ComposerFooter.tsx +9 -1
- package/public/manager/src/code/code-composer.css +1 -1
- package/public/manager/src/code/code-controller-draft-storage.ts +16 -8
- package/public/manager/src/code/code-controller-drafts.ts +33 -6
- package/public/manager/src/code/code-controller-runtime.ts +189 -17
- package/public/manager/src/code/code-controller-types.ts +19 -1
- package/public/manager/src/code/code-recent-workspaces.ts +25 -0
- package/public/manager/src/code/code-session-client.ts +19 -1
- package/public/manager/src/code/code-session-sidebar.css +38 -0
- package/public/manager/src/code/code-session-state.ts +2 -0
- package/public/manager/src/code/code-types.ts +47 -0
- package/public/manager/src/code/code-workbench.css +36 -1
- package/public/manager/src/code/code.css +171 -7
- package/public/manager/src/code/session-order.ts +80 -0
- package/public/manager/src/code/tool-summary.ts +45 -11
- package/public/manager/src/folder-panel/folder-shortcuts.ts +5 -9
- package/public/manager/src/hooks/useCommandPalette.ts +3 -7
- package/public/manager/src/main.tsx +1 -0
- package/public/manager/src/manager-components.css +25 -23
- package/public/manager/src/manager-dashboard-reminders.css +2 -2
- package/public/manager/src/manager-layout.css +1 -1
- package/public/manager/src/manager-shortcut-runner.ts +9 -2
- package/public/manager/src/manager-shortcuts.ts +83 -21
- package/public/manager/src/panels/desktop-bridge.ts +4 -1
- package/public/manager/src/panels/panels.css +9 -0
- package/public/manager/src/preview.ts +19 -4
- package/public/manager/src/settings/pages/AdvancedExport.tsx +28 -30
- package/public/manager/src/settings/pages/Browser.tsx +45 -47
- package/public/manager/src/settings/pages/ChannelsDiscord.tsx +51 -26
- package/public/manager/src/settings/pages/ChannelsSlack.tsx +59 -17
- package/public/manager/src/settings/pages/ChannelsTelegram.tsx +51 -26
- package/public/manager/src/settings/pages/Display.tsx +2 -1
- package/public/manager/src/settings/pages/Employees.tsx +3 -3
- package/public/manager/src/settings/pages/Mcp.tsx +220 -200
- package/public/manager/src/settings/pages/Memory.tsx +35 -41
- package/public/manager/src/settings/pages/ModelProvider.tsx +23 -98
- package/public/manager/src/settings/pages/Network.tsx +5 -4
- package/public/manager/src/settings/pages/Permissions.tsx +38 -16
- package/public/manager/src/settings/pages/Prompts.tsx +12 -9
- package/public/manager/src/settings/pages/SpeechKeys.tsx +132 -139
- package/public/manager/src/settings/pages/TelegramHub.tsx +67 -20
- package/public/manager/src/settings/pages/components/AvatarCard.tsx +9 -8
- package/public/manager/src/settings/pages/components/ChannelSetupEntry.tsx +2 -2
- package/public/manager/src/settings/pages/components/EmployeeRow.tsx +6 -12
- package/public/manager/src/settings/pages/components/HealthBadge.tsx +11 -6
- package/public/manager/src/settings/pages/components/HeartbeatJobRow.tsx +35 -16
- package/public/manager/src/settings/pages/components/HeartbeatJobsSection.tsx +11 -11
- package/public/manager/src/settings/pages/components/HeartbeatMarkdownSection.tsx +7 -7
- package/public/manager/src/settings/pages/components/InlineWarn.tsx +4 -9
- package/public/manager/src/settings/pages/components/McpServerCard.tsx +39 -27
- package/public/manager/src/settings/pages/components/MemoryRow.tsx +21 -16
- package/public/manager/src/settings/pages/components/PerCliRow.tsx +122 -121
- package/public/manager/src/settings/pages/components/PiProfileDialog.tsx +9 -6
- package/public/manager/src/settings/pages/components/SlackSetup.tsx +8 -8
- package/public/manager/src/settings/pages/components/TransportStatusChips.tsx +14 -10
- package/public/manager/src/settings/pages/components/agent/AgentEmployeesSection.tsx +26 -26
- package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +5 -5
- package/public/manager/src/settings/pages/components/agent/RuntimeEmployeeRow.tsx +14 -11
- package/public/manager/src/settings/pages/components/agent/RuntimeHeader.tsx +1 -3
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +0 -2
- package/public/manager/src/settings/pages/components/runtime-transport-field.tsx +2 -2
- package/public/manager/src/settings/pages/manager/Activity.tsx +6 -2
- package/public/manager/src/settings/pages/manager/Display.tsx +3 -8
- package/public/manager/src/settings/pages/manager/shared.tsx +44 -33
- package/public/manager/src/settings/pages/page-shell.tsx +66 -0
- package/public/manager/src/settings-agent.css +185 -36
- package/public/manager/src/settings-standalone.tsx +1 -0
- package/public/manager/src/settings-surface.css +96 -0
- package/public/manager/src/types.ts +1 -0
- package/scripts/ci/install-ripgrep.sh +35 -0
- package/scripts/collect-fresh-install-evidence.sh +2 -2
- package/scripts/install-risk-gate.mjs +2 -3
- package/scripts/install-wsl.sh +1 -1
- package/scripts/install.ps1 +1 -1
- package/scripts/install.sh +1 -1
- package/scripts/release-1.6.0.sh +1 -1
- package/scripts/release-gates.mjs +48 -13
- package/scripts/release-preview.sh +2 -2
- package/scripts/restack-pr.sh +88 -0
- package/scripts/verify-electron-update-metadata.mjs +1 -1
- package/scripts/windows-support-contract.json +1 -1
- package/public/dist/assets/Activity-BUrp73Re.js +0 -1
- package/public/dist/assets/AdvancedExport-B7h_ZvBu.js +0 -1
- package/public/dist/assets/Agent-DnbZJP7b.js +0 -1
- package/public/dist/assets/Browser-CiBoK5Qx.js +0 -1
- package/public/dist/assets/BrowserPanel-SZAUc9T2.js +0 -3
- package/public/dist/assets/ChannelEnablementControl-Dl0uYx38.js +0 -85
- package/public/dist/assets/ChannelSetupEntry-DxtOrN01.js +0 -1
- package/public/dist/assets/ChannelsDiscord-BEGGwd_3.js +0 -1
- package/public/dist/assets/ChannelsSlack-BryC2Ahr.js +0 -1
- package/public/dist/assets/ChannelsTelegram-CGSpaImJ.js +0 -1
- package/public/dist/assets/CodeCanvas-DpkFi5Au.js +0 -2
- package/public/dist/assets/DashboardMeta-Dh-tasbY.js +0 -1
- package/public/dist/assets/DesignPanel-NLNK9wCo.js +0 -2
- package/public/dist/assets/Display-BHGFX3O0.js +0 -1
- package/public/dist/assets/Display-BW-_pKRf.js +0 -1
- package/public/dist/assets/DocPanel-BM41cYpS.js +0 -1
- package/public/dist/assets/Employees-BuFw6-fT.js +0 -1
- package/public/dist/assets/FolderPanel-C-eQT3Yq.js +0 -3
- package/public/dist/assets/Heartbeat-CIVtKWNc.js +0 -1
- package/public/dist/assets/InlineWarn-DIMbcbzk.js +0 -1
- package/public/dist/assets/MarkdownRenderer-DyVx6DxM.js +0 -1
- package/public/dist/assets/Mcp-uKjor7vh.js +0 -4
- package/public/dist/assets/Memory-BSDIXT0B.js +0 -1
- package/public/dist/assets/ModelProvider-DMh2tXUx.js +0 -1
- package/public/dist/assets/Network-4Pa6JkhK.js +0 -1
- package/public/dist/assets/NotesGraphWorkspace-CgdC-fM6.js +0 -1
- package/public/dist/assets/PanelLayoutProvider-mn8sI0h-.js +0 -1
- package/public/dist/assets/Permissions-CodIW-Yd.js +0 -1
- package/public/dist/assets/Profile-DPqrYA44.js +0 -1
- package/public/dist/assets/Prompts-CvAx7QqR.js +0 -1
- package/public/dist/assets/SpeechKeys-CVBCqoBn.js +0 -1
- package/public/dist/assets/TelegramHub-4zKwpk0P.js +0 -1
- package/public/dist/assets/app-ByMfeXp-.js +0 -55
- package/public/dist/assets/app-DAJWqs33.css +0 -1
- package/public/dist/assets/bgtask-badge-Ch88fnhf.js +0 -1
- package/public/dist/assets/error-normalize-CL69Bl7z.js +0 -1
- package/public/dist/assets/fields-mlGpofqQ.js +0 -1
- package/public/dist/assets/iframe-renderer-Bj1JolO8.js +0 -142
- package/public/dist/assets/iframe-renderer-DWnvUSrx.js +0 -1
- package/public/dist/assets/jsx-runtime-NZYk81nU.js +0 -1
- package/public/dist/assets/manager-Bi_xw7TW.js +0 -5
- package/public/dist/assets/manager-BnQHAKk6.css +0 -1
- package/public/dist/assets/manager-shortcuts-BDOzd8zm.js +0 -1
- package/public/dist/assets/memory-Bk_cb3sw.js +0 -1
- package/public/dist/assets/message-history-D2vniu04.js +0 -4
- package/public/dist/assets/message-history-GAtF_wbZ.js +0 -1
- package/public/dist/assets/page-shell-BeGD0rRQ.js +0 -1
- package/public/dist/assets/react-dom-DyUOYpVL.js +0 -1
- package/public/dist/assets/settings-W4KG9ivu.js +0 -1
- package/public/dist/assets/settings-WVGhtneN.js +0 -1
- package/public/dist/assets/settings-client-CmwRsVd1.js +0 -1
- package/public/dist/assets/settings-core-CgKGnMA5.js +0 -1
- package/public/dist/assets/settings-types-D3cd6SWy.js +0 -1
- package/public/dist/assets/shared-CiNP20HB.js +0 -1
- package/public/dist/assets/skills-Co7Mr-qP.js +0 -1
- package/public/dist/assets/slash-commands-BEr-vmIr.js +0 -1
- package/public/dist/assets/ui-TUyJsMUf.js +0 -1
- package/public/manager/src/settings/pages/components/EngineSubsection.tsx +0 -25
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";import{O as r,P as i,x as a}from"./render-
|
|
1
|
+
import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";import{O as r,P as i,x as a}from"./render-DfYro-fG.js";import{t as o}from"./icons-CVkqyECl.js";import{t as s}from"./copy-text-DjgetgoZ.js";import{r as c}from"./locale-B9w_kUtW.js";import"./settings-core-pnpw-eZv.js";import"./constants-DmZ9Rjym.js";import{a as l,i as u,o as ee,r as d,t as f}from"./settings-types-CYKy0xz4.js";import{n as te,r as ne}from"./provider-icons-Bge6teOj.js";import{a as p,c as m,d as h,f as g,h as _,i as v,l as re,m as ie,n as y,o as b,p as x,r as ae,s as S,t as oe,u as se}from"./channel-onboarding-flow-D73Cze0v.js";function ce(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function C(e){return e===`telegram`||e===`discord`||e===`slack`}function le(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t,r=n.activeInboundChannels,i;if(r!==void 0)i=Array.isArray(r)&&r.every(C)?[...new Set(r)]:null;else{let e=n.activeInbound;i=C(e)?[e]:null}if(!i)return null;let a=n.activeInbound;if(!C(a)||!ce(n.telegram)||!ce(n.discord))return null;let o=ce(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:a,activeInboundChannels:i,telegram:n.telegram,discord:n.discord,slack:o}}function ue(e){let t=[];return t.push(e.configured?i(`settings.channel.configured`):i(`settings.channel.notConfigured`)),e.sendCapable&&t.push(i(`settings.channel.sendCapable`)),e.activeInbound&&t.push(i(`settings.channel.activeInbound`)),t}function de(e,t,n){let a=ue(t).map(e=>`<span class="transport-status-chip">${r(e)}</span>`).join(``),o=t.reason===`not_attach_instance`?`<p class="transport-status-hint">${r(i(`settings.channel.notAttachInstanceHint`))}</p>`:n&&t.configured&&t.sendCapable&&!t.activeInbound?`<p class="transport-status-hint">${r(i(`settings.channel.sendOnlyHint`))}</p>`:``;return`
|
|
2
2
|
<div class="transport-status-block">
|
|
3
3
|
<div class="transport-status-label">${r(e)}</div>
|
|
4
4
|
<div class="transport-status-chips">${a}</div>
|
|
5
5
|
${o}
|
|
6
|
-
</div>`}function
|
|
6
|
+
</div>`}function fe(e,t){e.innerHTML=`
|
|
7
7
|
<h4 class="section-title-row">
|
|
8
8
|
<span><span data-icon="radio"></span> ${r(i(`settings.channel.statusTitle`))}</span>
|
|
9
9
|
</h4>
|
|
10
|
-
${
|
|
11
|
-
${
|
|
12
|
-
${
|
|
13
|
-
`}async function
|
|
10
|
+
${de(`Telegram`,t.telegram,!0)}
|
|
11
|
+
${de(`Discord`,t.discord,!0)}
|
|
12
|
+
${de(`Slack`,t.slack,!0)}
|
|
13
|
+
`}async function pe(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let t=le(await n(`/api/health`));if(!t){e.innerHTML=``,e.style.display=`none`;return}fe(e,t),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}var me=`jaw:notificationsAsked`;function he(){try{return localStorage.getItem(me)===`1`}catch{return!0}}function ge(){try{localStorage.setItem(me,`1`)}catch{}}async function _e(){if(typeof Notification>`u`)return null;if(Notification.permission!=="default")return Notification.permission;if(he())return null;ge();try{return await Notification.requestPermission()}catch{return null}}var w=null,T=null,E=!1,ve=!1,D=`cli-jaw`,O=0;function ye(){document.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-onboard-channel]`);t&&(e.preventDefault(),be(t.getAttribute(`data-onboard-channel`)))}),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&T&&(e.preventDefault(),e.stopImmediatePropagation(),xe())},!0),document.addEventListener(`keydown`,e=>{if(e.key!==`Tab`||!T||!w)return;let t=[...w.querySelectorAll(`button:not([disabled]), input:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])`)];if(!t.length)return;let n=t[0],r=t[t.length-1],i=document.activeElement;e.shiftKey&&(i===n||!w.contains(i))?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())},!0)}function be(e){if(e!==`telegram`&&e!==`discord`&&e!==`slack`)return;let t={};for(let n of S(e))t[n.key]=Se(n.settingsId);T=b(e,t),e===`slack`&&(D=`cli-jaw`),E=!1,ve=!1,O+=1,we(),k(),w?.classList.add(`open`)}function xe(){w?.classList.remove(`open`),T=null}function Se(e){return document.getElementById(e)?.value.trim()||``}function Ce(e,t){let n=document.getElementById(e);n&&(n.value=t)}function we(){w||(w=document.createElement(`div`),w.className=`modal-overlay onboarding-overlay`,w.addEventListener(`click`,e=>{e.target===w&&xe()}),document.body.appendChild(w))}function Te(e){if(e.step===1){let t=e.slackSetupStage;return`
|
|
14
14
|
${e.channel===`slack`?`
|
|
15
15
|
<div class="onboarding-field">
|
|
16
16
|
<label for="onboard-slack-app-name">${r(i(`onboarding.slackAppName`))}</label>
|
|
@@ -48,8 +48,8 @@ import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";
|
|
|
48
48
|
<button type="button" class="perm-btn" data-onboard-validate="1" ${E?`disabled`:``}>
|
|
49
49
|
${r(i(`onboarding.validate`))}
|
|
50
50
|
</button>
|
|
51
|
-
</div>`:`<p class="onboarding-next">${r(i(e.saved?`onboarding.next.${e.channel}`:`onboarding.saveHint`))}</p>`}function
|
|
52
|
-
${e.channel===`slack`&&e.step===1&&!
|
|
51
|
+
</div>`:`<p class="onboarding-next">${r(i(e.saved?`onboarding.next.${e.channel}`:`onboarding.saveHint`))}</p>`}function Ee(e){return e.step===4&&e.saved?`<button type="button" class="perm-btn active" data-onboard-close="1">${r(i(`onboarding.close`))}</button>`:`${e.step>1?`<button type="button" class="perm-btn" data-onboard-back="1">${r(i(`onboarding.back`))}</button>`:``}${e.step===4?`<button type="button" class="perm-btn active" data-onboard-save="1">${r(i(`onboarding.save`))}</button>`:`<button type="button" class="perm-btn ${p(e)?`active`:``}" data-onboard-next="1"
|
|
52
|
+
${e.channel===`slack`&&e.step===1&&!p(e)?`disabled`:``}>${r(i(`onboarding.next`))}</button>`}`}function k(){if(!w||!T)return;let e=T;w.innerHTML=`
|
|
53
53
|
<div class="modal-box onboarding-box" role="dialog" aria-modal="true"
|
|
54
54
|
aria-labelledby="onboarding-title" aria-describedby="onboarding-step-title">
|
|
55
55
|
<div class="onboarding-head">
|
|
@@ -63,7 +63,7 @@ import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";
|
|
|
63
63
|
${Array.from({length:4},(t,n)=>`<span class="onboarding-dot${n+1===e.step?` is-active`:``}${n+1<e.step?` is-done`:``}"></span>`).join(``)}
|
|
64
64
|
</div>
|
|
65
65
|
<div class="onboarding-step-title" id="onboarding-step-title">${r(i(`onboarding.step.${e.step}`))}</div>
|
|
66
|
-
${
|
|
66
|
+
${Te(e)}
|
|
67
67
|
<div class="onboarding-error" role="alert" style="display:${e.error?``:`none`}">
|
|
68
68
|
${e.error?r(i(`onboarding.error.${e.error}`)):``}
|
|
69
69
|
${e.missingScopes.length?`<span class="onboarding-scopes">${r(e.missingScopes.join(`, `))}</span>`:``}
|
|
@@ -71,8 +71,8 @@ import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";
|
|
|
71
71
|
<div class="onboarding-capability-warning" role="status" style="display:${e.missingCapabilities.length?``:`none`}">
|
|
72
72
|
${e.missingCapabilities.length?r(i(`onboarding.warning.missingCapabilities`,{capabilities:e.missingCapabilities.join(`, `)})):``}
|
|
73
73
|
</div>
|
|
74
|
-
<div class="onboarding-actions onboarding-footer">${
|
|
75
|
-
</div>`,w.querySelectorAll(`[data-onboard-close]`).forEach(e=>e.addEventListener(`click`,
|
|
74
|
+
<div class="onboarding-actions onboarding-footer">${Ee(e)}</div>
|
|
75
|
+
</div>`,w.querySelectorAll(`[data-onboard-close]`).forEach(e=>e.addEventListener(`click`,xe)),w.querySelector(`[data-onboard-issuer]`)?.addEventListener(`click`,()=>{T&&(window.open(oe[T.channel],`_blank`,`noopener`),T.channel===`slack`&&(T=se(T),A()))}),w.querySelector(`[data-onboard-generate-manifest]`)?.addEventListener(`click`,()=>{ke()}),w.querySelector(`[data-onboard-app-name]`)?.addEventListener(`input`,e=>{D=e.currentTarget.value,T?.channel===`slack`&&(T=g(T));let t=w?.querySelector(`[data-onboard-manifest-status]`);t?.classList.remove(`is-error`),t&&(t.textContent=``),A()}),w.querySelector(`[data-onboard-app-name]`)?.addEventListener(`keydown`,e=>{let t=e;t.key!==`Enter`||t.shiftKey||t.isComposing||(t.preventDefault(),ke())}),w.querySelector(`[data-onboard-back]`)?.addEventListener(`click`,()=>{T&&(T=m(T),k())}),w.querySelector(`[data-onboard-next]`)?.addEventListener(`click`,()=>{T&&(Ae(),T=y(T),k())}),w.querySelector(`[data-onboard-validate]`)?.addEventListener(`click`,()=>{je()}),w.querySelector(`[data-onboard-save]`)?.addEventListener(`click`,()=>{Me()}),w.querySelectorAll(`[data-onboard-field]`).forEach(e=>{e.addEventListener(`input`,()=>{if(!T)return;let t=e.getAttribute(`data-onboard-field`)||``;T=x(T,t,e.value)}),e.addEventListener(`keydown`,e=>{e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),De())})}),Oe()}function A(){if(!w||T?.channel!==`slack`||T.step!==1)return;let e=T.slackSetupStage,t=w.querySelector(`[data-onboard-generate-manifest]`),n=w.querySelector(`[data-onboard-issuer]`),r=w.querySelector(`[data-onboard-next]`);t?.classList.toggle(`active`,e===`manifest`),n?.classList.toggle(`active`,e===`issuer`),n&&(n.disabled=e===`manifest`),r?.classList.toggle(`active`,e===`ready`),r&&(r.disabled=e!==`ready`)}function De(){if(T){if(T.step===3){je();return}if(T.step===4){T.saved||Me();return}Ae(),T=y(T),k()}}function Oe(){let e=[...w?.querySelectorAll(`[data-onboard-app-name], [data-onboard-field]`)??[]];if(!e.length)return;let t=e.find(e=>!e.value.trim())??e[0];t?.focus();let n=t?.value.length??0;t?.setSelectionRange?.(n,n)}async function ke(){if(!w||T?.channel!==`slack`)return;let e=O,t=w.querySelector(`[data-onboard-app-name]`),r=w.querySelector(`[data-onboard-generate-manifest]`),a=w.querySelector(`[data-onboard-manifest-status]`);if(!t||!r||!a)return;let o=t.value.trim();if(D=o,!o||Array.from(o).length>35){a.classList.add(`is-error`),a.textContent=i(`onboarding.slackAppNameError`),t.focus();return}a.classList.remove(`is-error`),a.textContent=``,r.disabled=!0,r.textContent=i(`onboarding.slackManifestGenerating`);try{let t=await n(`/api/slack/manifest?name=${encodeURIComponent(o)}`);if(e!==O||T?.channel!==`slack`||D.trim()!==o)return;let r=t?.json||``;if(!r)throw Error(`empty manifest`);let c=await s(r);if(!c.ok)throw Error(c.error||`copy failed`);if(e!==O||T?.channel!==`slack`||D.trim()!==o)return;T=h(T);let l=t?.botDisplayName;a.textContent=l&&l!==o?i(`onboarding.slackManifestCopiedWithBot`,{bot:l}):i(`onboarding.slackManifestReady`),A()}catch{a.classList.add(`is-error`),a.textContent=i(`onboarding.slackManifestError`)}finally{r.disabled=!1,r.textContent=i(`onboarding.slackGenerateManifest`),A()}}function Ae(){if(T)for(let e of w?.querySelectorAll(`[data-onboard-field]`)??[]){let t=e.getAttribute(`data-onboard-field`)||``;T=x(T,t,e.value)}}async function je(){if(!T||E)return;let e=O;E=!0,k();let t=await n(`/api/channels/validate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(_(T))});e===O&&(E=!1,T&&(T=ae(T,t||{ok:!1,error:`network`}),k()))}async function Me(){if(!T||ve)return;let e=v({...T,step:3});if(e){T={...T,step:3,error:e},k();return}for(let e of S(T.channel))Ce(e.settingsId,(T.draft[e.key]||``).trim());let n=O;ve=!0;try{await t(`/api/settings`,`PUT`,ie(T))}finally{ve=!1}n===O&&T&&(T=re(T),k(),pe(),_e())}function Ne(e){if(e.url)return`remote`;if(!e.command)return null;let t=e.command;return t===`npx`||t.endsWith(`/npx`)?`npx`:t===`uvx`||t===`uv`||t.endsWith(`/uvx`)?`uvx`:t===`docker`||t.endsWith(`/docker`)?`docker`:null}function Pe(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var j=null;async function M(){try{let e=await n(`/api/mcp`);if(!e)return;j=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let a=Object.entries(e.servers||{});if(!a.length){t.textContent=i(`mcp.noServers`),Fe(0);return}t.innerHTML=a.map(([e,t])=>{let n=Ne(t),i=t.url||[t.command,...(t.args||[]).slice(0,2)].filter(Boolean).map(e=>r(e)).join(` `),a=n?` <span style="opacity:.5;font-size:0.85em">[${r(n)}]</span>`:``;return`<div style="padding:2px 0">• <b>${r(e)}</b> <span style="opacity:.6">${i}</span>${a}</div>`}).join(``),Fe(Pe(e.servers))}catch{}}function Fe(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Ie(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.syncing`);try{let n=await t(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${o.error} sync failed`;return}let i=n.results||{};e.innerHTML=Object.entries(i).map(([e,t])=>`${t?o.check:o.skip} ${r(e)}`).join(` `)}catch(t){e.innerHTML=`${o.error} ${r(t.message)}`}}}async function Le(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.installing`);try{let n=await t(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${o.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,t])=>`${t.status===`installed`?o.check:t.status===`skip`?o.skip:o.error} <b>${r(e)}</b>: ${r(t.status)}${t.bin?` ${o.arrowRight} `+r(t.bin):``}`).join(`<br>`),M()}catch(t){e.innerHTML=`${o.error} ${r(t.message)}`}}}var N=null,P=null,F=null,I=null,L=null,R=null,z=`local`,B=!1,Re=[];function ze(){if(N)return;N=document.createElement(`div`),N.id=`mcpModal`,N.className=`modal-overlay mcp-modal-overlay`,N.setAttribute(`role`,`presentation`),N.setAttribute(`aria-hidden`,`true`),N.addEventListener(`click`,e=>{e.target===N&&W()});let e=document.createElement(`div`);e.className=`modal-box mcp-modal-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-label`,`MCP Server Management`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header`;let n=document.createElement(`span`);n.textContent=`MCP Server Management`;let r=document.createElement(`button`);r.type=`button`,r.className=`help-trigger`,r.textContent=`?`,r.setAttribute(`aria-label`,`MCP help`),r.addEventListener(`click`,()=>Ye());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>W());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),P=document.createElement(`div`),P.style.cssText=`padding:16px;overflow-y:auto;flex:1`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:4px;margin-bottom:12px`;let s=Be(`Active Servers`,!0),c=Be(`Add New`,!1),l=Be(`Browse`,!1);Re=[s,c,l],s.addEventListener(`click`,()=>V(`active`)),c.addEventListener(`click`,()=>V(`add`)),l.addEventListener(`click`,()=>V(`browse`)),o.append(s,c,l),F=document.createElement(`div`),R=document.createElement(`div`),R.style.display=`none`,R.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,I=document.createElement(`div`),I.style.display=`none`,I.innerHTML=Ve(),I.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{z=e.dataset.mcpSubtab,He()})}),L=I.querySelector(`#mcpAddError`);let u=I.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Je());let ee=I.querySelector(`[data-action="closeMcpModal"]`);ee&&ee.addEventListener(`click`,()=>W()),P.append(o,F,R,I);let d=document.createElement(`div`);d.className=`modal-footer`;let f=document.createElement(`button`);f.type=`button`,f.className=`btn-save`,f.textContent=`Close`,f.addEventListener(`click`,()=>W()),d.append(f),e.append(t,P,d),N.append(e),document.body.append(N)}function Be(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`btn-clear btn-tab${t?` is-active`:``}`,n.textContent=e,n}function Ve(){return`
|
|
76
76
|
<div style="display:flex;gap:4px;margin-bottom:8px">
|
|
77
77
|
<button type="button" class="btn-clear btn-tab is-active" data-mcp-subtab="local">Local</button>
|
|
78
78
|
<button type="button" class="btn-clear btn-tab" data-mcp-subtab="remote">Remote</button>
|
|
@@ -92,7 +92,7 @@ import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";
|
|
|
92
92
|
<div style="display:flex;gap:8px;margin-top:12px;justify-content:flex-end">
|
|
93
93
|
<button type="button" class="btn-clear" data-action="closeMcpModal">Cancel</button>
|
|
94
94
|
<button type="button" class="btn-clear btn-save" data-action="mcpAddAndSync">Add & Sync</button>
|
|
95
|
-
</div>`}function V(e){F&&(F.style.display=e===`active`?``:`none`),I&&(I.style.display=e===`add`?``:`none`),R&&(R.style.display=e===`browse`?``:`none`),
|
|
95
|
+
</div>`}function V(e){F&&(F.style.display=e===`active`?``:`none`),I&&(I.style.display=e===`add`?``:`none`),R&&(R.style.display=e===`browse`?``:`none`),Re.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&Ue(),e===`add`&&Ge(),e===`browse`&&Xe()}function He(){let e=I?.querySelector(`#mcpAddLocal`),t=I?.querySelector(`#mcpAddRemote`);e&&(e.style.display=z===`local`?``:`none`),t&&(t.style.display=z===`remote`?``:`none`),I?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===z)})}function Ue(){if(!F||!j)return;let e=Object.entries(j.servers||{});if(!e.length){F.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}F.innerHTML=e.map(([e,t])=>{let n=Ne(t),i=n?`<span class="mcp-active-tag">[${r(n)}]</span>`:``,a=t.command?r(t.command)+(t.args?.length?` `+t.args.map(e=>r(e)).join(` `):``):``,o=t.url?r(t.url):``,s=t.env?Object.keys(t.env):[],c=t.headers?Object.keys(t.headers):[],l=``;return o&&(l+=`<div class="mcp-active-detail">URL: ${o}</div>`),a&&(l+=`<div class="mcp-active-detail">Command: ${a}</div>`),s.length&&(l+=`<div class="mcp-active-detail">Env: ${s.map(e=>r(e)).join(`, `)}</div>`),c.length&&(l+=`<div class="mcp-active-detail">Headers: ${c.map(e=>r(e)).join(`, `)}</div>`),`<div class="mcp-active-row">
|
|
96
96
|
<div style="flex:1">
|
|
97
97
|
<div style="display:flex;align-items:center;gap:6px">
|
|
98
98
|
<span class="mcp-active-name">${r(e)}</span>
|
|
@@ -101,7 +101,7 @@ import{t as e}from"./state-Dl-xxPoS.js";import{i as t,n}from"./api-CUtiCd2-.js";
|
|
|
101
101
|
${l}
|
|
102
102
|
</div>
|
|
103
103
|
<button type="button" class="btn-clear mcp-active-remove" data-mcp-remove="${r(e)}">Remove</button>
|
|
104
|
-
</div>`}).join(``),F.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&
|
|
104
|
+
</div>`}).join(``),F.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&We(t)})})}async function We(e){if(!j)return;let n={...j.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{...j,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await M(),Ue()}catch(e){H(e.message)}}function Ge(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(I??document).querySelector(`#${e}`);t&&(t.value=``)}Ke()}function H(e){L&&(L.style.display=`block`,L.textContent=e)}function Ke(){L&&(L.style.display=`none`)}function qe(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r).trim()]=e.slice(r+1))}return t}function U(e){return(I??document).querySelector(`#${e}`)?.value?.trim()??``}async function Je(){if(!j)return;let e=z===`remote`,n,r;if(e){n=U(`mcpAddRemoteName`);let e=U(`mcpAddUrl`),t=U(`mcpAddHeaders`);if(!n){H(`Name is required.`);return}if(!e){H(`URL is required.`);return}r={url:e};let i=qe(t);Object.keys(i).length>0&&(r.headers=i)}else{n=U(`mcpAddName`);let e=U(`mcpAddCommand`),t=U(`mcpAddArgs`),i=U(`mcpAddEnv`);if(!n){H(`Name is required.`);return}if(!e){H(`Command is required.`);return}r={command:e};let a=t.split(/,|\n/).map(e=>e.trim()).filter(Boolean);a.length>0&&(r.args=a);let o=qe(i);Object.keys(o).length>0&&(r.env=o)}if(j.servers[n]){H(`Server "${n}" already exists.`);return}try{let e={...j,servers:{...j.servers,[n]:r}};await t(`/api/mcp`,`PUT`,e),await t(`/api/mcp/sync`,`POST`,{}),await M(),W()}catch(e){H(e.message)}}function Ye(){let e=document.getElementById(`mcpHelpOverlay`);if(e){e.remove();return}let t=document.createElement(`div`);t.id=`mcpHelpOverlay`,t.className=`mcp-help-overlay`,t.addEventListener(`click`,e=>{e.target===t&&t.remove()});let n=document.createElement(`div`);n.className=`mcp-help-inner`,n.innerHTML=`
|
|
105
105
|
<h4>MCP Server</h4>
|
|
106
106
|
<p>MCP (Model Context Protocol) adds capabilities to AI agents — like installing apps on a phone.</p>
|
|
107
107
|
|
|
@@ -129,7 +129,7 @@ URL: https://mcp.example.com/sse</pre>
|
|
|
129
129
|
<div style="text-align:right;margin-top:12px">
|
|
130
130
|
<button type="button" class="btn-save" id="mcpHelpClose">OK</button>
|
|
131
131
|
</div>
|
|
132
|
-
`,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function
|
|
132
|
+
`,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function Xe(){if(R){R.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,j||await M();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){R.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=j?Object.keys(j.servers):[],i=``;i+=e.entries.map(e=>{let n=t.includes(e.id),i=e.tags?.slice(0,3).map(e=>`<span style="background:var(--border);padding:1px 4px;border-radius:3px;font-size:10px">${r(e)}</span>`).join(` `)||``;return`<div style="padding:10px 0;border-bottom:1px solid var(--border)">
|
|
133
133
|
<div style="display:flex;align-items:center;gap:8px">
|
|
134
134
|
<b>${r(e.name)}</b>
|
|
135
135
|
<span style="opacity:.5;font-size:0.85em">[${r(e.type)}]</span>
|
|
@@ -150,8 +150,8 @@ URL: https://mcp.example.com/sse</pre>
|
|
|
150
150
|
${t?`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-builtin-install="${r(e.id)}">+ Install standalone</button>`:``}
|
|
151
151
|
</div>
|
|
152
152
|
<p style="margin:2px 0;font-size:11px;opacity:.65">${r(e.description)}</p>
|
|
153
|
-
</div>`}).join(``),i+=`</div>`),R.innerHTML=i,R.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&
|
|
154
|
-
`))}"${i?.description?` data-cli-help-desc="${r(i.description)}"`:``}${i?.links?.length?` data-cli-help-links="${r(JSON.stringify(i.links))}"`:``} aria-label="Setup help">?</button>`:``}function
|
|
153
|
+
</div>`}).join(``),i+=`</div>`),R.innerHTML=i,R.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&Ze(r,t)})}),R.querySelectorAll(`[data-builtin-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.builtinInstall,r=e.builtins?.find(e=>e.id===n);r?.standalone_config&&Ze({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){R.innerHTML=`<p style="color:var(--color-error)">${r(e.message)}</p>`}}}async function Ze(e,n){if(j){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config,i={...j,servers:{...j.servers,[e.id]:r}};await t(`/api/mcp`,`PUT`,i),await t(`/api/mcp/sync`,`POST`,{}),await M(),n.textContent=`Installed`,n.style.color=`var(--success)`}catch(e){n.textContent=`Error`,n.disabled=!1,console.error(`[mcp-registry] install failed:`,e.message)}}}function Qe(){ze(),N?.classList.add(`open`),N?.setAttribute(`aria-hidden`,`false`),B=!0,V(`active`)}function W(){B&&(N?.classList.remove(`open`),N?.setAttribute(`aria-hidden`,`true`),B=!1,Ge(),document.getElementById(`mcpHelpOverlay`)?.remove())}var $e=!1;function et(){$e||($e=!0,document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}B&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),W())},!0))}var tt=new Set([`codex-app`]),nt=new Set([`pi`,`gemini`]),rt={},it={cursor:{title:`Native quota access`,description:`Log in with cursor-agent to read quota from its selected account. An explicitly configured dashboard session is also supported.`,commands:[`cursor-agent login`,`export CURSOR_SESSION_TOKEN="<WorkosCursorSessionToken from cursor.com DevTools>"`,`echo "$CURSOR_SESSION_TOKEN" > ~/.cli-jaw/quota/cursor-session-token && chmod 600 ~/.cli-jaw/quota/cursor-session-token`]},agy:{title:`Enable Gem / Cla quota bars`,description:`Read Gem/Cla quota from the running Antigravity IDE or the selected antigravity-usage account. Use its login command if the stored account needs reauthentication.`,commands:[`npx antigravity-usage login`,`npx antigravity-usage --json`]},grok:{title:`Grok login`,description:`Log in with Grok to read weekly usage. Legacy billing credentials remain supported.`,commands:[`grok login`]},opencode:{title:`OpenCode Go quota (API key)`,description:`cli-jaw reads your sk- API key from ~/.local/share/opencode/auth.json (opencode-go) or OPENCODE_GO_API_KEY, then calls GET /zen/go/v1/usage. Rolling, weekly and monthly usage appear when available. Model access and quota availability are checked separately.`,commands:[`opencode providers login`,`export OPENCODE_GO_API_KEY=sk-...`,`curl -s -H "Authorization: Bearer $OPENCODE_GO_API_KEY" https://opencode.ai/zen/go/v1/usage`],note:`Not the opencode-quota plugin (cookie scrape). Built-in opencode stats = session tokens only.`,links:[{label:`OpenCode Go docs`,url:`https://opencode.ai/docs/go/`},{label:`Upstream usage API issue #16017`,url:`https://github.com/anomalyco/opencode/issues/16017`},{label:`Upstream usage API PR #16513`,url:`https://github.com/anomalyco/opencode/pull/16513`},{label:`slkiser/opencode-quota (cookie workaround)`,url:`https://github.com/slkiser/opencode-quota`},{label:`robinebers/openusage (local cost estimate)`,url:`https://github.com/robinebers/openusage`},{label:`Rodowen/oc-go-monitor (cookie + /usage)`,url:`https://github.com/Rodowen/oc-go-monitor`}]}};function at(e,t){return e===`gemini`?t===`Pro`||t===`P`?`P`:t===`Flash`||t===`F`?`F`:t:e===`copilot`&&(t===`Premium`||t===`Prem`||t.includes(`plus monthly subscriber quota`))?`30d`:t.replace(`-hour`,`h`).replace(`-day`,`d`).replace(` Sonnet`,``).replace(` Opus`,``)}function ot(e,t){if(t.delegatedProvider)return`Delegates quota/status to ${t.delegatedProvider}`;let n=t.quotaSource?.match(/^not-exposed-by-(.*?)-cli$/);return n?`Quota not exposed by ${n[1].toUpperCase()} CLI`:t.quotaSource?t.quotaSource:e===`opencode`?`Auth/status only`:`Usage data not exposed by this CLI`}function st(e){return e.toLowerCase().replace(/^cursor\s+/i,``).trim()}var ct=new Set([`auth/status only`,`google cloud code`,`runtime-checked`]),lt=new Set([`cursor`,`antigravity.google`,`antigravity`,`max`,`copilot`,`gemini`]);function ut(e,t){let n=t.account;if(!n)return[];let r=[];n.email&&r.push(n.email);let i=new Set(r.map(st));for(let e of[n.plan,n.tier]){if(!e)continue;let t=st(e);if(t&&!ct.has(t)&&!lt.has(t)&&!i.has(t)){i.add(t),r.push(e);break}}return r}function dt(e,t,n=[]){let i=it[e],a=[...n,...i?i.commands:[],...i?.note?[i.note]:[]].filter(Boolean);return a.length?`<button type="button" class="help-trigger" style="margin-left:4px" data-cli-help="${r(a.join(`
|
|
154
|
+
`))}"${i?.description?` data-cli-help-desc="${r(i.description)}"`:``}${i?.links?.length?` data-cli-help-links="${r(JSON.stringify(i.links))}"`:``} aria-label="Setup help">?</button>`:``}function ft(e,t){let n=it[e],i=t.sessionUsage,a=[];i?.primaryModelId&&a.push(`Model: ${i.primaryModelId}`),i?.contextTokensUsed&&i?.contextWindowTokens?a.push(`Session context: ${Math.round(i.contextTokensUsed).toLocaleString()} / ${Math.round(i.contextWindowTokens).toLocaleString()} tokens`):i?.turnCount&&a.push(`Session turns: ${Math.round(i.turnCount).toLocaleString()}`);let o=dt(e,t,a);if(n){let e=n.commands.map(e=>`
|
|
155
155
|
<div style="margin-top:3px"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px;word-break:break-all">${r(e)}</code></div>
|
|
156
156
|
`).join(``),t=n.description?`<div style="margin-top:3px;color:var(--text-dim);font-size:10px">${r(n.description)}</div>`:``,i=n.links?.length?`<ul style="margin:6px 0 0;padding-left:16px;font-size:10px">${n.links.map(e=>`<li><a href="${r(e.url)}" target="_blank" rel="noopener noreferrer">${r(e.label)}</a></li>`).join(``)}</ul>`:``;return`
|
|
157
157
|
<details class="cli-setup-details" style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
@@ -163,41 +163,49 @@ URL: https://mcp.example.com/sse</pre>
|
|
|
163
163
|
</details>
|
|
164
164
|
`}return`
|
|
165
165
|
<div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
166
|
-
<div style="color:var(--text);font-weight:600">${r(t.displayTier||
|
|
167
|
-
<div style="margin-top:2px">${r(
|
|
166
|
+
<div style="color:var(--text);font-weight:600">${r(t.displayTier||ne(e))}${o}</div>
|
|
167
|
+
<div style="margin-top:2px">${r(ot(e,t))}</div>
|
|
168
168
|
</div>
|
|
169
|
-
`}var
|
|
169
|
+
`}var pt=new Set([0,600,1800]),G=0,mt=2e3,ht=4e3,K=null,gt=!1,q=0,J=null,Y=null,_t=`cliStatusCollapsed`,vt=`cliStatusUndetectedExpanded`;function X(){try{return window.parent!==window}catch{return!0}}function yt(){try{return localStorage.getItem(_t)===`true`}catch{return!1}}function bt(e){try{localStorage.setItem(_t,e?`true`:`false`)}catch{}}function xt(){try{return localStorage.getItem(vt)===`true`}catch{return!1}}function St(e){try{localStorage.setItem(vt,e?`true`:`false`)}catch{}}function Ct(e){return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}function wt(){Y!=null&&(window.clearTimeout(Y),Y=null)}function Tt(e,t=``){wt();let n=document.getElementById(`cliStatusRefreshBtn`),r=document.getElementById(`cliStatusRefreshState`),i=n?.querySelector(`.cli-refresh-label`);n&&(n.classList.remove(`is-refreshing`,`is-success`,`is-error`),n.disabled=e===`refreshing`,e===`idle`?n.removeAttribute(`aria-busy`):n.setAttribute(`aria-busy`,e===`refreshing`?`true`:`false`),e===`refreshing`&&n.classList.add(`is-refreshing`),e===`success`&&n.classList.add(`is-success`),e===`error`&&n.classList.add(`is-error`)),i&&(i.textContent=e===`refreshing`?`Refreshing...`:`Refresh`),r&&(r.textContent=t,r.dataset.state=e)}function Et(e,t){Tt(e,t),Y=window.setTimeout(()=>{Tt(`idle`)},ht)}var Z=!yt();function Dt(){return Z}function Ot(){Z=!0;let e=document.getElementById(`cliStatusList`),t=document.getElementById(`cliStatusHeader`);e&&(e.style.display=`block`),t&&t.classList.add(`expanded`),bt(!1),Q(!0)}function kt(){let e=document.getElementById(`cliStatusHeader`),t=document.getElementById(`cliStatusList`);e&&t&&(Z?(t.style.display=`block`,e.classList.add(`expanded`)):t.style.display=`none`,e.addEventListener(`click`,()=>{Z=!Z,t.style.display=Z?`block`:`none`,e.classList.toggle(`expanded`,Z),bt(!Z),Z&&Q(!0)}))}function At(){let e=Number(localStorage.getItem(`cliStatusInterval`)||G);return pt.has(e)?e:G}function jt(e=At()){let t=document.getElementById(`cliStatusInterval`);if(!t)return;let n=String(e);t.value=Array.from(t.options).some(e=>e.value===n)?n:String(G)}function Mt(){K!=null&&(window.clearInterval(K),K=null);let e=At();jt(e),!(e<=0)&&(K=window.setInterval(()=>{!document.hidden&&Z&&(X()||document.hasFocus())&&Q(!0)},e*1e3))}function Nt(){!gt&&X()&&(gt=!0,window.addEventListener(`message`,e=>{let t=e.data;t?.type===`jaw-preview-visibility`&&t.visible===!0&&Z&&Q(!1)}))}function Pt(e){let t=Number(e),n=pt.has(t)?t:G;localStorage.setItem(`cliStatusInterval`,String(n)),jt(n),Mt()}function Ft(t,r,i){X()&&(async()=>{if(await new Promise(e=>window.setTimeout(e,600)),t!==q)return;let i=await n(`/api/quota`);t===q&&i&&(e.cliStatusCache={cliStatus:r,quota:i},e.cliStatusTs=Date.now(),Rt({cliStatus:r,quota:i}))})()}async function It(t,r,i){let a=await n(`/api/quota`);if(t!==q)return!1;let o=a??i??null;return e.cliStatusCache={cliStatus:r,quota:o},a&&(e.cliStatusTs=Date.now()),Rt({cliStatus:r,quota:o}),a||Ft(t,r,i),!!a}function Lt(e,t,n,r){let i=()=>{It(t,n,r).catch(()=>{})};if(e)return It(t,n,r);window.setTimeout(i,mt)}async function Q(t=!1){if(Z){if(t&&Tt(`refreshing`,`Refreshing quota...`),J){if(t)await J.catch(()=>{});else return}J=(async()=>{let r=++q,i=document.getElementById(`cliStatusList`);try{let a=At();if(!t&&e.cliStatusCache&&a>0&&Date.now()-e.cliStatusTs<a*1e3){Rt({cliStatus:e.cliStatusCache?.cliStatus,quota:e.cliStatusCache?.quota});return}let o=e.cliStatusCache?.quota;i&&!o&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Loading...</div>`);let s=await n(`/api/cli-status`);if(r!==q)return;if(!s||typeof s!=`object`){i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Et(`error`,`Refresh failed`);return}Rt({cliStatus:s,quota:o??null});let c=await Lt(t,r,s,o);t&&r===q&&Et(`success`,`${c?`Updated`:`Checked`} ${Ct(new Date)}`)}catch{i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Et(`error`,`Refresh failed`)}})().finally(()=>{J=null}),await J}}function Rt(e){let{cliStatus:t,quota:a}=e,s=document.getElementById(`cliStatusList`),c={agy:{install:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,auth:`agy runtime auth, antigravity-usage login, or ~/.gemini oauth for quota`},claude:{install:`npm i -g @anthropic-ai/claude-code`,auth:`claude auth`},codex:{install:`npm i -g @openai/codex`,auth:`codex login`},"codex-app":{install:`npm i -g @openai/codex`,auth:`codex login`},cursor:{install:`curl https://cursor.com/install -fsS | bash`,auth:`cursor-agent login, CURSOR_API_KEY, or CURSOR_SESSION_TOKEN for quota`},"kiro-code":{install:`Install Kiro CLI from https://kiro.dev/docs/cli`,auth:`kiro-cli login`},gemini:{install:`npm i -g @google/gemini-cli`,auth:`gemini (${i(`cli.gemini.auth`)})`},grok:{install:`curl -fsSL https://x.ai/cli/install.sh | bash`,auth:`grok login --oauth`},opencode:{install:`npm i -g opencode-ai`,auth:`opencode auth`},copilot:{install:`npm i -g copilot`,auth:i(`cli.copilot.authHint`)}},p=[],m=[];if(!t||typeof t!=`object`){s&&(s.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`);return}for(let[e,n]of Object.entries(t)){if(nt.has(e))continue;let t=f(n),s=t===`checking`,u=t===`unknown`,h=t===`probe-failing`,g=t===`capability-failed`,_=s||u||h?void 0:a?.[e],v;v=s?`checking`:u||h?`warn`:!n.available||g?`missing`:!_||_.error?`ok`:_.authenticated===!1?`warn`:`ok`;let re=``,ie=_?.quotaCapable===!1&&_.authenticated!==!1&&n.available&&!rt[e]&&!tt.has(e);if(_?.account&&!ie){let t=ut(e,_);t.length&&(re=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${r(t.join(` · `))}</div>`)}let y=``;if(!s&&!u&&!h&&(!n.available||v===`warn`)){let t=c[e];if(t){let e=!n.available,a=i(e?`cli.authRequired`:`cli.notAuthenticated`),o=e?`var(--error)`:`var(--warning)`;y=`
|
|
170
170
|
<div style="font-size:10px;margin:4px 0 2px 16px;padding:6px 8px;background:var(--surface);border-radius:4px;border-left:2px solid ${o}">
|
|
171
171
|
<div style="color:${o};margin-bottom:3px">${a}</div>
|
|
172
172
|
${e?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${r(t.install)}</code></div>`:``}
|
|
173
173
|
<div style="color:var(--text-dim)${e?`;margin-top:2px`:``}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${r(t.auth)}</code></div>
|
|
174
174
|
</div>
|
|
175
|
-
`}}let b=``,x=
|
|
175
|
+
`}}let b=``,x=rt[e];if(!tt.has(e)){if(x&&n.available)b=`
|
|
176
176
|
<div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
177
177
|
${r(x)}
|
|
178
178
|
</div>
|
|
179
|
-
`;else if(
|
|
179
|
+
`;else if(ie)b=ft(e,_);else if(_?.windows?.length)b=_.windows.map(t=>{let n=ee(t),i=n.percent??0,a=i>80?`var(--error)`:i>50?`var(--warning)`:`var(--info)`,o=at(e,t.label),s=``;if(t.resetsAt){let e=new Date(typeof t.resetsAt==`number`?t.resetsAt*1e3:t.resetsAt),n=new Date;s=e.toDateString()===n.toDateString()?`${e.getHours()}:${String(e.getMinutes()).padStart(2,`0`)}`:`${e.getMonth()+1}/${e.getDate()}`}let c=n.percent==null?`<span style="flex:1"></span><span style="min-width:52px;text-align:right" title="Exact percentage unavailable">${r(n.text)}</span>`:`<div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden"><div style="width:${i}%;height:100%;background:${a};border-radius:2px"></div></div><span style="width:24px;text-align:right">${n.text}</span>`;return`
|
|
180
180
|
<div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
|
|
181
181
|
<span style="min-width:18px;max-width:48px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${r(o)}</span>
|
|
182
182
|
${c}
|
|
183
183
|
${s?`<span style="width:30px;text-align:right;opacity:0.6">${s}</span>`:``}
|
|
184
184
|
</div>
|
|
185
|
-
`}).join(``);else if(_?.error&&n.available){let e=_.reason===`rate_limited`?`Rate limited — retry in a moment`:`Usage data unavailable`;b=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${o.warning} ${e}</div>`}}let
|
|
185
|
+
`}).join(``);else if(_?.error&&n.available){let e=_.reason===`rate_limited`?`Rate limited — retry in a moment`:`Usage data unavailable`;b=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${o.warning} ${e}</div>`}}let ae=_?.quotaCapable&&it[e]?dt(e,_):``,S=_?.billing?.usedUsd!=null&&_?.billing?.limitUsd?`<span style="margin-left:auto;font-size:10px;color:var(--text-dim);white-space:nowrap">$${_.billing.usedUsd.toFixed(1)}/$${_.billing.limitUsd}</span>`:``,oe=s?`<div role="status" aria-live="polite" style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px">상태 확인 중</div>`:u?`<div role="alert" style="font-size:10px;color:var(--warning);margin:2px 0 0 16px">Probe unavailable${n.probeError?` · ${r(n.probeError)}`:``}</div>`:h?`<div role="alert" style="font-size:10px;color:var(--warning);margin:2px 0 0 16px">상태 확인 실패 · 재시도 중${n.probeError?` · ${r(n.probeError)}`:``}</div>`:g?`<div role="status" style="font-size:10px;color:var(--error);margin:2px 0 0 16px">설치됨, app-server 사용 불가${n.reason?` · ${r(n.reason)}`:``}</div>`:t===`stale`?`<div role="status" style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px">이전 상태 표시 중 · 새로 확인 중</div>`:``,se=d(n),ce=se?`<div role="alert" style="font-size:10px;color:var(--warning);margin:2px 0 0 16px">${r(se.message)}</div>`:``,C=`
|
|
186
186
|
<div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
|
|
187
187
|
<div class="cli-status-row" style="display:flex;align-items:center">
|
|
188
188
|
<span class="cli-dot ${v}"></span>
|
|
189
|
-
<span class="cli-provider-icon" aria-hidden="true">${
|
|
190
|
-
<span class="cli-name" style="font-weight:600">${r(
|
|
189
|
+
<span class="cli-provider-icon" aria-hidden="true">${te(e)||``}</span>
|
|
190
|
+
<span class="cli-name" style="font-weight:600">${r(ne(e))}${ae}</span>${e===`copilot`?`<button id="copilotKeychainBtn" style="font-size:9px;margin-left:6px;padding:1px 5px;background:var(--border);color:var(--text-dim);border:1px solid var(--text-dim);border-radius:3px;cursor:pointer;vertical-align:middle;line-height:1" title="${i(`copilot.keychainHint`)}">${o.key}</button>`:``}${S}
|
|
191
191
|
</div>
|
|
192
|
-
${
|
|
193
|
-
${
|
|
194
|
-
${
|
|
192
|
+
${re}
|
|
193
|
+
${oe}
|
|
194
|
+
${ce}
|
|
195
195
|
${y}
|
|
196
196
|
${b}
|
|
197
197
|
</div>
|
|
198
|
-
|
|
198
|
+
`;(l(n,_)?p:m).push(C)}let h=p.join(``);if(m.length){let e=xt();h+=`
|
|
199
|
+
<div class="cli-undetected-group">
|
|
200
|
+
<button type="button" id="cliUndetectedToggle" class="cli-status-header cli-undetected-toggle${e?` expanded`:``}"
|
|
201
|
+
aria-expanded="${e}" aria-controls="cliUndetectedList">
|
|
202
|
+
${r(i(`cli.undetectedGroup`,{count:m.length}))}
|
|
203
|
+
</button>
|
|
204
|
+
<div id="cliUndetectedList"${e?``:` style="display:none"`}>${m.join(``)}</div>
|
|
205
|
+
</div>
|
|
206
|
+
`}s&&(s.innerHTML=h);let g=Object.entries(t).filter(([e])=>!nt.has(e));g.length>0&&!u(g,a)&&s&&s.insertAdjacentHTML(`afterbegin`,`<div style="padding:8px 10px;margin-bottom:8px;background:var(--warning-dim);border:1px solid var(--warning);border-radius:6px;font-size:11px;color:var(--warning)">
|
|
199
207
|
${o.warning} ${i(`cli.noReadyCli`)}
|
|
200
|
-
</div>`);let
|
|
208
|
+
</div>`);let _=document.getElementById(`cliUndetectedToggle`);_&&_.addEventListener(`click`,()=>{let e=_.getAttribute(`aria-expanded`)!==`true`;_.setAttribute(`aria-expanded`,String(e)),_.classList.toggle(`expanded`,e);let t=document.getElementById(`cliUndetectedList`);t&&(t.style.display=e?`block`:`none`),St(e)});let v=document.getElementById(`copilotKeychainBtn`);v&&v.addEventListener(`click`,async()=>{let e=v;e.disabled=!0,e.innerHTML=o.hourglass;try{let t=await n(`/api/copilot/refresh`,{method:`POST`});e.innerHTML=t?.ok?o.check:o.error,t?.ok&&await Q(!0)}catch{e.innerHTML=o.error}setTimeout(()=>{e.innerHTML=o.key,e.disabled=!1},2e3)}),s&&s.querySelectorAll(`[data-cli-help]`).forEach(e=>{e.addEventListener(`click`,t=>{t.stopPropagation();let n=e.getAttribute(`data-cli-help`)||``,r=e.getAttribute(`data-cli-help-desc`)||void 0,i=e.getAttribute(`data-cli-help-links`),a;if(i)try{a=JSON.parse(i)}catch{a=void 0}zt(n,r,a)})})}function zt(e,t,n){let i=document.getElementById(`cliHelpOverlay`);i&&i.remove();let a=document.createElement(`div`);a.id=`cliHelpOverlay`,a.className=`mcp-help-overlay`,a.addEventListener(`click`,e=>{e.target===a&&a.remove()});let o=document.createElement(`div`);o.className=`mcp-help-inner`;let s=e.split(`
|
|
201
209
|
`).filter(Boolean);o.innerHTML=`
|
|
202
210
|
<h4>CLI Setup</h4>
|
|
203
211
|
${t?`<p style="color:var(--text-dim);font-size:12px;margin:4px 0 8px">${r(t)}</p>`:``}
|
|
@@ -206,4 +214,4 @@ URL: https://mcp.example.com/sse</pre>
|
|
|
206
214
|
<div style="text-align:right;margin-top:12px">
|
|
207
215
|
<button type="button" class="btn-save" id="cliHelpClose">OK</button>
|
|
208
216
|
</div>
|
|
209
|
-
`,a.append(o),document.body.append(a),o.querySelector(`#cliHelpClose`)?.addEventListener(`click`,()=>a.remove()),document.addEventListener(`keydown`,function e(t){t.key===`Escape`&&(a.remove(),document.removeEventListener(`keydown`,e,!0))},!0)}function
|
|
217
|
+
`,a.append(o),document.body.append(a),o.querySelector(`#cliHelpClose`)?.addEventListener(`click`,()=>a.remove()),document.addEventListener(`keydown`,function e(t){t.key===`Escape`&&(a.remove(),document.removeEventListener(`keydown`,e,!0))},!0)}function Bt(){n(`/api/prompt`).then(e=>{if(!e)return;let t=document.getElementById(`modalPromptEditor`);t&&(t.value=e.content||``),document.getElementById(`promptModal`)?.classList.add(`open`)})}function Vt(e){e&&e.target!==e.currentTarget||document.getElementById(`promptModal`)?.classList.remove(`open`)}async function Ht(){let e=document.getElementById(`modalPromptEditor`)?.value||``;await t(`/api/prompt`,`PUT`,{content:e}),document.getElementById(`promptModal`)?.classList.remove(`open`)}var Ut=[],$=!1;async function Wt(){let e=await n(`/api/prompt-templates`);e&&(Ut=e.templates,$=!1,Gt(e.tree),Yt(`tree`),document.getElementById(`templateModal`)?.classList.add(`open`))}function Gt(e){let t=document.getElementById(`templateTree`);if(t){t.innerHTML=``;for(let n of e){let e=document.createElement(`div`);e.style.cssText=`background:var(--bg);border:1px solid var(--accent);border-radius:6px;padding:8px 10px;margin:8px 0 4px;font-size:12px;color:var(--accent);font-weight:600`,e.textContent=`${n.emoji} ${n.label}`,t.appendChild(e);for(let e of n.children){let n=Ut.find(t=>t.id===e);if(!n)continue;let i=document.createElement(`div`);i.style.cssText=`background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 10px;margin:2px 0 2px 24px;font-size:12px;cursor:pointer;transition:border-color .15s`,i.innerHTML=`${o.file} ${r(n.filename)}`,i.addEventListener(`mouseenter`,()=>{i.style.borderColor=`var(--accent2)`}),i.addEventListener(`mouseleave`,()=>{i.style.borderColor=`var(--border)`}),i.addEventListener(`click`,()=>{Kt(n)}),t.appendChild(i)}}}}function Kt(e){let t=document.getElementById(`templateEditor`);t.value=e.content,t.dataset.templateId=e.id,t.readOnly=!0,$=!1;let n=document.getElementById(`templateEditorLabel`);n&&(n.innerHTML=`${o.file} ${r(e.filename)}`);let i=e.content.match(/\{\{[A-Z_]+\}\}/g),a=document.getElementById(`templateVars`);a&&(a.textContent=i?`vars: ${[...new Set(i)].join(`, `)}`:`no variables`);let s=document.getElementById(`templateSaveBtn`);s&&(s.style.display=`none`);let l=document.getElementById(`templateDevToggle`);l&&(l.style.color=`var(--text-dim)`,l.style.borderColor=`var(--border)`,l.innerHTML=`${o.tool} ${c(`devMode`)}`);let u=document.getElementById(`templateModalTitle`);u&&(u.innerHTML=`${o.file} ${r(e.filename)}`),Yt(`editor`)}function qt(){if(!$&&!confirm(c(`promptEditWarning`)))return;$=!$;let e=document.getElementById(`templateEditor`);e.readOnly=!$;let t=document.getElementById(`templateSaveBtn`);t&&(t.style.display=$?``:`none`);let n=document.getElementById(`templateDevToggle`);n&&(n.style.color=$?`var(--stop-btn)`:`var(--text-dim)`,n.style.borderColor=$?`var(--stop-btn)`:`var(--border)`,n.innerHTML=$?`${o.lockOpen} ${c(`devModeOn`)}`:`${o.tool} ${c(`devMode`)}`)}async function Jt(){let e=document.getElementById(`templateEditor`),n=e.dataset.templateId;if(!n)return;await t(`/api/prompt-templates/${n}`,`PUT`,{content:e.value});let i=document.getElementById(`templateEditorLabel`);i&&(i.innerHTML=`${o.check} ${c(`savedAndReloaded`)}`,setTimeout(()=>{i.innerHTML=`${o.file} ${r(n)}.md`},2e3));let a=Ut.find(e=>e.id===n);a&&(a.content=e.value)}function Yt(e){let t=document.getElementById(`templateTreeView`),n=document.getElementById(`templateEditorView`);t&&(t.style.display=e===`tree`?``:`none`),n&&(n.style.display=e===`editor`?`flex`:`none`);let r=document.getElementById(`templateModalTitle`);r&&e===`tree`&&(r.innerHTML=`${o.plan} ${c(`promptStructure`)}`)}function Xt(){Yt(`tree`)}function Zt(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}function Qt(e=document.body.dataset.settingsOpen!==`true`){let t=document.getElementById(`settingsPage`),n=document.querySelector(`.chat-area`);if(!t||!n)return;if(!e){t.querySelector(`iframe`)?.contentWindow?.postMessage({type:`settings:request-back`},window.location.origin);return}let r=n.querySelector(`.chat-header`);r&&t.prepend(r),document.body.dataset.settingsOpen=`true`,n.hidden=!0,n.inert=!0,t.hidden=!1,document.getElementById(`btnSettings`)?.setAttribute(`aria-pressed`,`true`),t.querySelector(`iframe`)?.focus()}function $t(){let e=document.getElementById(`settingsPage`),t=document.querySelector(`.chat-area`);if(!e||!t)return;let n=e.querySelector(`.chat-header`);n&&t.prepend(n),delete document.body.dataset.settingsOpen,t.hidden=!1,t.inert=!1,e.hidden=!0,document.getElementById(`btnSettings`)?.setAttribute(`aria-pressed`,`false`),document.getElementById(`chatInput`)?.focus()}function en(){let e=document.querySelector(`#settingsPage iframe`);if(!e)return()=>{};let t=new URL(`dist/settings/index.html`,document.baseURI);e.src!==t.href&&(e.src=t.href);let n=()=>{try{e.contentWindow?.postMessage({type:`jaw-preview-theme-sync`,theme:document.documentElement.dataset.theme},window.location.origin)}catch(e){console.warn(`[settings-frame] theme sync skipped`,e)}},r=new MutationObserver(n);r.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]});let i=t=>{t.source===e.contentWindow&&t.origin===window.location.origin&&(t.data?.type===`jaw-settings-ready`&&n(),t.data?.type===`settings:back`&&$t())},o=e=>{e.source===window.parent&&a(e.origin)&&e.data?.type===`jaw-preview-settings-open`&&Qt(!0)};return e.addEventListener(`load`,n),window.addEventListener(`message`,i),window.addEventListener(`message`,o),n(),()=>{r.disconnect(),e.removeEventListener(`load`,n),window.removeEventListener(`message`,i),window.removeEventListener(`message`,o)}}export{Ie as C,Qe as S,Mt as _,Bt as a,Le as b,Jt as c,Ot as d,Nt as f,Q as g,X as h,Zt as i,Xt as l,Dt as m,Qt as n,Wt as o,kt as p,Vt as r,Ht as s,en as t,qt as u,Pt as v,ye as w,M as x,et as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./api-CUtiCd2-.js";import{n as t,t as n}from"./settings-embedding-BRW0WZvh.js";import{t as r}from"./jsx-runtime-CkEUZM6i.js";import{f as i}from"./page-shell-DfinU3mb.js";var a=t(),o=r(),s=location.pathname.match(/^\/i\/(\d+)\//),c=s?`/i/${s[1]}`:``,l=document.getElementById(`settings-root`);if(!l)throw Error(`Invalid settings host`);function u(e){if(typeof e!=`number`&&(typeof e!=`string`||!/^\d+$/.test(e)))return null;let t=Number(e);return Number.isInteger(t)&&t>0&&t<=65535?t:null}function d(e){(e===`dark`||e===`light`||e===`auto`)&&(document.documentElement.dataset.theme=e)}if(parent!==window)try{parent.location.origin===location.origin&&d(parent.document.documentElement.dataset.theme)}catch{}window.addEventListener(`message`,e=>{if(e.source===parent&&e.origin===location.origin&&(e.data?.type===`jaw-preview-theme-sync`&&d(e.data.theme),e.data?.type===`settings:request-back`)){let e=l.querySelector(`.settings-back`);e?e.click():parent.postMessage({type:`settings:back`},location.origin)}});var f=i(0,{base:c,getHeaders:async()=>{let t=await e();return t?{Authorization:`Bearer ${t}`}:{}}}),p=null;try{let e=await f.get(`/api/settings`);p=e.data??e}catch{}var m=u(p?.port)??u(location.port);if(m===null)throw l.setAttribute(`role`,`alert`),l.textContent=`Cannot resolve instance settings port`,Error(`Cannot resolve instance settings port`);var h=!1;window.addEventListener(`beforeunload`,e=>{h&&(e.preventDefault(),e.returnValue=``)});var g={scopes:[`instance`],client:f},_=(0,a.createRoot)(l),v=0,y=()=>{(!h||window.confirm(`Discard unsaved changes?`))&&(h&&(v++,b()),parent!==window&&parent.postMessage({type:`settings:back`},location.origin))};function b(){_.render((0,o.jsx)(n,{onBack:y,port:m,instanceUrl:location.origin+c,...g,onDirtyChange:e=>{h=e},onSaved:()=>{parent!==window&&parent.postMessage({type:`jaw-settings-saved`},location.origin)}},v))}b(),parent!==window&&parent.postMessage({type:`jaw-settings-ready`},location.origin);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,n as t}from"./settings-core-pnpw-eZv.js";import"./settings-CvsLWlJn.js";export{t as loadSettings,e as updateSettings};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./settings-core-pnpw-eZv.js";export{e as refreshHeaderFromSettingsChange};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,i as t,n,t as r}from"./api-CUtiCd2-.js";import{O as i,P as a,S as o}from"./render-
|
|
1
|
+
import{a as e,i as t,n,t as r}from"./api-CUtiCd2-.js";import{O as i,P as a,S as o}from"./render-DfYro-fG.js";import{n as s}from"./locale-B9w_kUtW.js";import{n as c,t as l}from"./cli-engine-NdU0lzs_.js";import{a as u,i as d,n as f,o as p,t as m}from"./constants-DmZ9Rjym.js";import{s as h}from"./settings-types-CYKy0xz4.js";import{s as g}from"./pi-settings-tRVfevu-.js";import{n as _,r as v}from"./provider-icons-Bge6teOj.js";import{n as y,t as ee}from"./presentation-preference-D9u6LD07.js";function b(e,t){if(!l(t))return;let n=Array.from(e.options).find(e=>e.value===t);n||(n=e.ownerDocument.createElement(`option`),n.value=t,e.prepend(n)),n.disabled=!0,n.textContent=c(t),e.value=t,e.title=`The saved runtime is retired and cannot execute.`}var te=/^\/(?:Users|home)\/[^/]+/,ne=32;function re(e){return e.replace(te,`~`)}function ie(e){if(e.length<=ne)return e;let t=e.split(`/`);return t.length<=3?e:`${t.slice(0,2).join(`/`)}/…/${t[t.length-1]}`}function ae(e){let t=(e||[]).filter(e=>typeof e==`string`&&e.trim());return t.length===0?null:{text:`${ie(re(t[0]))}${t.length>1?` +${t.length-1}`:``}`,title:t.join(`
|
|
2
2
|
`)}}function x(){return document.getElementById(`headerGitStatus`)}function oe(){let e=x();e&&(e.hidden=!0,e.textContent=``,e.removeAttribute(`title`),e.removeAttribute(`aria-label`))}function S(e){if(!e?.available)return null;let t=e.branch||e.head;if(!t)return null;let n=[`/`,`⑂ ${t}`];e.trackedChangedCount>0&&n.push(`*${e.trackedChangedCount}`),e.untrackedCount>0&&n.push(`?${e.untrackedCount}`);let r=[`Git: ${e.branch?`branch ${e.branch}`:`detached ${e.head}`}`];return e.trackedChangedCount>0&&r.push(`${e.trackedChangedCount} tracked changes`),e.untrackedCount>0&&r.push(`${e.untrackedCount} untracked files`),{text:n.join(` `),title:r.join(`, `)}}function se(e){let t=x();if(!t)return;let n=S(e);if(!n){oe();return}t.hidden=!1,t.textContent=n.text,t.title=n.title,t.setAttribute(`aria-label`,n.title)}async function C(){se(await n(`/api/project/git-summary`))}function ce(e){(Array.isArray(e.changedKeys)?e.changedKeys:[]).includes(`projectDirs`)&&C()}var w=new Set,T,E=!1,D=0,O=0,k=0;function A(e){return!e||typeof e!=`object`?null:`settings`in e&&e.settings?e.settings:`data`in e&&e.data?e.data:e}async function j(t){if(t.runtimeDefaultMigration?.state!==`pending`)return t;let n=window.confirm(`신규 설치의 기본 런타임이 Codex App으로 변경되었습니다. 지금 Codex App을 사용하시겠습니까?`)?`accept`:`keep`;try{let i=await e(),a=await fetch(`${r}/api/settings/runtime-default-migration`,{method:`POST`,headers:{"Content-Type":`application/json`,...i?{Authorization:`Bearer ${i}`}:{}},body:JSON.stringify({action:n})}),o=await a.json().catch(()=>null);if(h(a.status))return A(o)??t;window.alert(`런타임 선택을 저장하지 못했습니다 (${a.status}). 다음 설정 진입 때 다시 안내합니다.`)}catch{window.alert(`런타임 선택을 저장하지 못했습니다. 다음 설정 진입 때 다시 안내합니다.`)}return t}async function M(t){if(t.multiSessionDefaultMigration?.state!==`pending`)return t;let n=window.confirm(`이제 대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 20으로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 켤까요?`)?`accept`:`keep`;try{let i=await e(),a=await fetch(`${r}/api/settings/multi-session-default-migration`,{method:`POST`,headers:{"Content-Type":`application/json`,...i?{Authorization:`Bearer ${i}`}:{}},body:JSON.stringify({action:n})}),o=await a.json().catch(()=>null);if(h(a.status))return A(o)??t;window.alert(`세션 선택을 저장하지 못했습니다 (${a.status}). 다음 설정 진입 때 다시 안내합니다.`)}catch{window.alert(`세션 선택을 저장하지 못했습니다. 다음 설정 진입 때 다시 안내합니다.`)}return t}function N(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=_(e),r=F(e);t.innerHTML=n?`${n} ${i(r)}`:i(r)}function P(e){let t=document.getElementById(`headerProject`);if(!t)return;le(t),t.hidden=!1;let n=ae(e);if(!n){t.classList.add(`is-empty`),t.textContent=`Project: not set`,t.title=`Click to choose the project root folder`;return}t.classList.remove(`is-empty`),t.textContent=`Project ${n.text}`,t.title=`${n.title}\n(click to change)`}function le(e){if(e.dataset.pickerBound)return;e.dataset.pickerBound=`1`,e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`);let n=async()=>{if(e.classList.contains(`is-picking`))return;e.classList.add(`is-picking`);let n=e.textContent;e.textContent=`Choosing folder…`;try{let n=await t(`/api/project/pick`,`POST`,{});if(n&&!n.cancelled&&`projectDirs`in n){e.classList.remove(`is-picking`),P(n.projectDirs);return}}catch{}e.classList.remove(`is-picking`),e.textContent=n};e.addEventListener(`click`,()=>{n()}),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())})}function ue(e){typeof e.cli==`string`&&e.cli&&N(e.cli),`projectDirs`in e&&P(e.projectDirs),ce(e)}function F(e){return u(e)?.label||v(e)||e}function I(e){let t=e.finally(()=>{w.delete(t)});return w.add(t),t}async function L(){for(;w.size;)await Promise.all(w)}function R(e,t,{includeCustom:n=!1,includeDefault:r=!1,selected:o=``}={}){if(!e)return;let s=r?`<option value="default">default</option>`:``,c=n?`<option value="__custom__">${a(`model.customOption`)}</option>`:``;e.innerHTML=s+(t||[]).map(e=>`<option value="${i(e)}">${i(e)}</option>`).join(``)+c,o&&Array.from(e.options).some(e=>e.value===o)&&(e.value=o)}function z(e,t){if(!e||!t||Array.from(e.options).some(e=>e.value===t))return;let n=document.createElement(`option`);n.value=t,n.textContent=t;let r=e.querySelector(`option[value="__custom__"]`);r?e.insertBefore(n,r):e.appendChild(n)}function B(e=null){let t=d().filter(e=>!l(e)),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,o=e=>f.includes(e),s=!o(r)&&t.includes(r),c=n.dataset.expanded===`1`,d=t.filter(o),p=t.filter(e=>!o(e)),m=d.length===0||s||c,h=d.map(e=>{let t=u(e)?.label||e;return`<option value="${i(e)}">${i(t)}</option>`}).join(``);p.length>0&&(m?(h+=`<option disabled>──────</option>`,h+=p.map(e=>{let t=u(e)?.label||e;return`<option value="${i(e)}">${i(t)}</option>`}).join(``)):h+=`<option value="__show_more__">${a(`cli.showMore`)}</option>`),n.innerHTML=h,n.title=l(r)?`The saved runtime is retired and cannot execute.`:``,b(n,r),Array.from(n.options).some(e=>e.value===r)&&(n.value=r)}let r=document.getElementById(`flushCli`);if(r){let n=e?.memory?.cli||r.value||``;r.innerHTML=`<option value="">(active CLI)</option>`+t.map(e=>`<option value="${i(e)}">${i(F(e))}</option>`).join(``),b(r,n),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function V(e,t){return(t||``).trim()}function H(e,t,n,r){let i=(t||``).trim();if(r){let t=e?.effortsByModelByProvider?.[r]?.[i];if(t)return t}return e?.effortsByModel?.[i]||n||e?.efforts||[]}function de(e,t,n){let r=(t||``).trim();return(n?e?.defaultEffortByModelByProvider?.[n]?.[r]:void 0)??e?.defaultEffortByModel?.[r]??``}function U(){return document.getElementById(`selEffort`)?.value||``}function W(e,t=``,n){let r=document.getElementById(`selEffort`);if(!r)return;let a=u(e),o=e!==`pi`&&a?.providers?.length?G(e):``,s=o?a?.effortsByProvider?.[o]||[]:null,c=V(e,n??document.getElementById(`selModel`)?.value??``),l=H(a,c,s,o||void 0);if(l.length===0){let e=a?.effortNote||`— none`;r.innerHTML=`<option value="">${i(e)}</option>`,r.title=e,r.disabled=!0;return}let d=[``].concat(l);r.innerHTML=[...new Set(d)].map(e=>e?`<option value="${i(e)}">${i(e)}</option>`:`<option value="">— none</option>`).join(``),r.disabled=!1,r.title=a?.effortNote||``;let f=!t||l.includes(t)?t:de(a,c,o||void 0);Array.from(r.options).some(e=>e.value===f)&&(r.value=f)}function fe(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${i(e)}">${i(v(e)||e)}</option>`).join(``),Array.from(e.options).some(e=>e.value===t)?e.value=t:e.options.length>0&&(e.value=e.options[0]?.value||t),e.value||t):t}function G(e){let t=document.getElementById(`selCliProvider`),n=u(e);return t?.value||n?.defaultProvider||``}function K(e,t){let n=document.getElementById(`cliProviderWrap`),r=document.getElementById(`selCliProvider`),i=document.getElementById(`cliProviderLabel`),a=u(t);if(!(t!==`pi`&&(a?.providers?.length??0)>0))return n&&(n.style.display=`none`),a?.defaultProvider||``;i&&(i.textContent=`Provider`);let o=fe(r,e?.perCli?.[t]?.provider||r?.value||a?.defaultProvider||``,a.providers);return n&&(n.style.display=``),o}async function q(){let e=D;await p();let t=y(),r=await n(`/api/settings`);if(!r)return;ee(r,t),r=await j(r),r=await M(r),s(r.locale??``),B(r),g(r.pi),K(r,r.cli||``);let a=document.getElementById(`selCli`);a&&Array.from(a.options).some(e=>e.value===r.cli)&&(a.value=r.cli,a.dataset.prev=r.cli);let o=document.getElementById(`inpCwd`);o&&(o.textContent=r.workingDir);let c=document.getElementById(`headerCli`);if(c){let e=_(r.cli),t=F(r.cli);c.innerHTML=e?`${e} ${i(t)}`:i(t)}P(r.projectDirs),await C(),e===D&&!E&&X(r.permissions,!1),Z(!1);let l=r.activeOverrides?.[r.cli]||{},u=r.perCli?.[r.cli]||{},d=l.model||u.model,f=l.effort??u.effort??``,m=document.getElementById(`selModel`);if(d&&m){let e=V(r.cli,d);e&&!Array.from(m.options).some(t=>t.value===e)&&z(m,e),m.value=e}W(r.cli,f)}async function J(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e},r=u(e);return e!==`pi`&&r?.providers?.length&&(n.perCli={[e]:{provider:G(e)}}),I((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await q();return}let i=r.cli||e,a=document.getElementById(`selCli`);a&&Array.from(a.options).some(e=>e.value===i)&&(a.value=i,a.dataset.prev=i),N(i),o([`instances`],`active-cli-changed`)})())}function pe(e){return e===`auto`?`Auto (YOLO)`:e===`safe`?`Safe`:e==null?`Not provided`:Array.isArray(e)&&e.every(e=>typeof e==`string`)?`Custom (${e.length} ${e.length===1?`entry`:`entries`})`:`Unrecognized`}function Y(){let e=T,t=pe(e),n=document.getElementById(`configuredPermText`);n&&(n.textContent=`Configured policy: ${t}`);let r=document.getElementById(`configuredPerm`);r?.classList.toggle(`active`,e===`auto`),r?.classList.toggle(`perm-auto`,e===`auto`);let i=document.getElementById(`selPerm`);i&&(i.options[0].textContent=`Configured policy: ${t}`,i.value=e===`auto`||e===`safe`?e:``,i.disabled=E,i.setAttribute(`aria-busy`,String(E)))}async function X(e,n=!0){if(!n){T=e,Y();return}if(e!==`auto`&&e!==`safe`||e===T||E)return;E=!0,D++,Y();let r=document.getElementById(`permSaveError`);return r&&(r.hidden=!0,r.textContent=``),I((async()=>{try{let n=await t(`/api/settings`,`PUT`,{permissions:e});if(!n)throw Error(`Permission settings save failed`);T=n.permissions}catch{r&&(r.textContent=`Could not save permissions. Please try again.`,r.hidden=!1)}finally{E=!1,D++,Y()}})())}function Z(e=!0){let t=document.getElementById(`selCli`);if(!t)return;let r=++O;if(t.value===`__show_more__`){let e=t.dataset.prev||d()[0]||`claude`;t.dataset.expanded=`1`,B(null),Array.from(t.options).some(t=>t.value===e)&&(t.value=e);try{t.showPicker()}catch{}return}t.dataset.prev=t.value;let o=t.value||`claude`;l(o)||(t.title=``);let s=K(null,o),c=u(o),f=s&&c?.modelsByProvider?.[s]?c.modelsByProvider[s]:m[o]||[],p=document.getElementById(`selModel`);if(l(o)){p&&(p.disabled=!0,p.title=`The saved runtime is retired and cannot execute.`),N(o),W(o);return}c?.modelNote&&p?(p.innerHTML=`<option value="">${i(c.modelNote)}</option>`,p.title=c.modelNote,p.disabled=!0):(R(p,f,{includeCustom:!0,includeDefault:!0}),p&&(p.disabled=!1,p.title=``)),N(o),W(o);let h=document.getElementById(`selModelCustom`);h&&h.remove();let g=document.createElement(`input`);if(g.type=`text`,g.id=`selModelCustom`,g.className=`custom-model-input`,g.placeholder=a(`model.placeholder`),g.style.display=`none`,g.oninput=()=>{k++},g.onchange=function(){let e=this.value.trim();e&&p&&(z(p,e),p.value=e,this.style.display=`none`,W(o,U(),e),Q())},!p){e&&J();return}p.parentElement?.appendChild(g),p.onchange=function(){this.value===`__custom__`?(g.style.display=`block`,g.focus()):(g.style.display=`none`,W(o,U(),this.value),Q())};let _=k,v=document.getElementById(`selCliProvider`),y=document.getElementById(`selEffort`);n(`/api/settings`).then(e=>{if(!e||r!==O||_!==k||document.getElementById(`selCli`)!==t||t.value!==o||document.getElementById(`selCliProvider`)!==v||document.getElementById(`selModel`)!==p||document.getElementById(`selModelCustom`)!==g||document.getElementById(`selEffort`)!==y||(c?.providers?.length??0)>0&&G(o)!==s)return;let n=e.activeOverrides?.[o]||{},i=e.perCli?.[o]||{},a=n.model||i.model,l=n.effort??i.effort??``;if(!(o!==`pi`&&c?.providers?.length&&(i.provider||c.defaultProvider||``)!==s)){if(a&&p){let e=V(o,a);z(p,e),p.value=e}W(o,l)}}),e&&J()}async function Q(){k++;let e=document.getElementById(`selCli`)?.value||`claude`,n=document.getElementById(`selModel`)?.value||`default`;n===`__custom__`&&(n=document.getElementById(`selModelCustom`)?.value?.trim()||`default`);let r=document.getElementById(`selEffort`),i={};i[e]={model:n},r&&!r.disabled&&(i[e].effort=r.value||``);let a={activeOverrides:i},s=u(e);e!==`pi`&&s?.providers?.length&&(a.perCli={[e]:{provider:G(e)}}),await t(`/api/settings`,`PUT`,a)&&o([`instances`],`active-cli-changed`)}function me(){let e=document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`,t=m[e]||[];R(document.getElementById(`flushModel`),t,{includeDefault:!0}),$(),ge()}async function he(){let e=await n(`/api/memory-files`);if(!e)return;let t=document.getElementById(`flushCli`),r=document.getElementById(`flushModel`);t&&e.cli&&(t.value=e.cli);let i=e.cli||document.getElementById(`selCli`)?.value||`claude`;R(r,m[i]||[],{includeDefault:!0}),r&&e.model&&(z(r,e.model),r.value=e.model),$()}async function ge(){let e=document.getElementById(`flushCli`)?.value||``,n=document.getElementById(`flushModel`)?.value||``;await t(`/api/memory-files/settings`,`PUT`,{cli:e,model:n})}function $(){let e=document.getElementById(`flushAgentBadge`);if(!e)return;let t=document.getElementById(`flushCli`)?.value||``,n=document.getElementById(`flushModel`)?.value||``,r=t||document.getElementById(`selCli`)?.value||``,i=[];r&&i.push(t?F(r):`${F(r)}*`),n&&n!=="default"&&i.push(n),e.textContent=i.length?`(${i.join(` / `)})`:``}export{ue as a,J as c,me as i,L as l,q as n,Q as o,Z as r,X as s,he as t};
|