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,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import type { KeyboardEvent } from 'react';
|
|
3
3
|
import { SelectField, TextField } from '../../fields';
|
|
4
|
+
import { SettingsActions, SettingsNote } from '../page-shell';
|
|
4
5
|
import type { SettingsClient } from '../../types';
|
|
5
6
|
import type { PiProfileMode, PiSettingsView } from './pi-profile';
|
|
6
7
|
|
|
@@ -121,7 +122,7 @@ export function PiProfileDialog({ client, pi, provider, model, onClose, onRegist
|
|
|
121
122
|
<h3 id="pi-profile-title">Pi Settings</h3>
|
|
122
123
|
<button type="button" className="settings-action settings-action-discard" onClick={onClose}>Close</button>
|
|
123
124
|
</header>
|
|
124
|
-
<div className="settings-
|
|
125
|
+
<div className="settings-section-body">
|
|
125
126
|
<SelectField
|
|
126
127
|
id="pi-profile-mode"
|
|
127
128
|
label="Mode"
|
|
@@ -133,11 +134,13 @@ export function PiProfileDialog({ client, pi, provider, model, onClose, onRegist
|
|
|
133
134
|
<TextField id="pi-profile-endpoint" label="Endpoint" value={endpoint} onChange={setEndpoint} placeholder={defaultEndpoint(mode)} />
|
|
134
135
|
<TextField id="pi-profile-model" label="Model" value={modelId} onChange={setModelId} placeholder="grok-composer-2.5-fast" />
|
|
135
136
|
<TextField id="pi-profile-key" label="API Key" value={apiKey} onChange={setApiKey} placeholder={current?.apiKeySet ? `set (${current.apiKeyLast4 || '****'})` : 'empty for local proxy'} />
|
|
136
|
-
<
|
|
137
|
-
{error ? <
|
|
138
|
-
<
|
|
139
|
-
{busy
|
|
140
|
-
|
|
137
|
+
<SettingsNote>Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.</SettingsNote>
|
|
138
|
+
{error ? <SettingsNote tone="error" role="alert">{error}</SettingsNote> : null}
|
|
139
|
+
<SettingsActions>
|
|
140
|
+
<button type="button" className="settings-action settings-action-save" disabled={busy} onClick={() => void register()}>
|
|
141
|
+
{busy ? 'Registering...' : 'Register'}
|
|
142
|
+
</button>
|
|
143
|
+
</SettingsActions>
|
|
141
144
|
</div>
|
|
142
145
|
</div>
|
|
143
146
|
</div>
|
|
@@ -93,15 +93,15 @@ export function ChannelSetupDialog({channel,client,t,initialDraft,returnFocus,on
|
|
|
93
93
|
<label htmlFor="sl-setup-name">{t('onboarding.slackAppName')}</label>
|
|
94
94
|
<input id="sl-setup-name" value={name} onChange={event=>{setName(event.target.value);setFlow(resetSlackSetup);setManifestStatus('');}}/>
|
|
95
95
|
<p>{t('onboarding.guide.slack')}</p>
|
|
96
|
-
<button type="button" onClick={()=>void manifest()}>{t('onboarding.slackGenerateManifest')}</button>
|
|
96
|
+
<button type="button" className="settings-action" onClick={()=>void manifest()}>{t('onboarding.slackGenerateManifest')}</button>
|
|
97
97
|
<p role="status">{manifestStatus}</p>
|
|
98
|
-
<button type="button" disabled={flow.slackSetupStage==='manifest'} onClick={()=>{
|
|
98
|
+
<button type="button" className="settings-action" disabled={flow.slackSetupStage==='manifest'} onClick={()=>{
|
|
99
99
|
window.open(ISSUER_URLS.slack,'_blank','noopener');setFlow(markSlackIssuerOpened);
|
|
100
100
|
}}>{t('onboarding.openIssuer')}</button>
|
|
101
101
|
</>}
|
|
102
102
|
{flow.step===1 && channel!=='slack' && <>
|
|
103
103
|
<p>{t(`onboarding.guide.${channel}`)}</p>
|
|
104
|
-
<button type="button" onClick={()=>window.open(ISSUER_URLS[channel],'_blank','noopener')}>{t('onboarding.openIssuer')}</button>
|
|
104
|
+
<button type="button" className="settings-action" onClick={()=>window.open(ISSUER_URLS[channel],'_blank','noopener')}>{t('onboarding.openIssuer')}</button>
|
|
105
105
|
</>}
|
|
106
106
|
{flow.step===2 && fieldsFor(channel).map(field=><label key={field.key}>
|
|
107
107
|
{t(`onboarding.token.${field.key}`)}{field.optional ? ` (${t('onboarding.optional')})` : ''}
|
|
@@ -110,17 +110,17 @@ export function ChannelSetupDialog({channel,client,t,initialDraft,returnFocus,on
|
|
|
110
110
|
<span>{t(`onboarding.hint.${channel}.${field.key}`)}</span>
|
|
111
111
|
</label>)}
|
|
112
112
|
{flow.step===3 && <>
|
|
113
|
-
<button type="button" onClick={()=>void validate()}>{t('onboarding.validate')}</button>
|
|
113
|
+
<button type="button" className="settings-action" onClick={()=>void validate()}>{t('onboarding.validate')}</button>
|
|
114
114
|
{flow.validatedIdentity && <p>{t('onboarding.valid',{identity:flow.validatedIdentity})}</p>}
|
|
115
115
|
</>}
|
|
116
116
|
{flow.step===4 && <p>{t(flow.saved?`onboarding.next.${channel}`:'onboarding.saveHint')}</p>}
|
|
117
|
-
{flow.step>1 && <button type="button" onClick={()=>setFlow(goBack)}>{t('onboarding.back')}</button>}
|
|
118
|
-
{flow.step<4 ? <button type="button" disabled={!canAdvance(flow)} onClick={()=>setFlow(advance)}>{t('onboarding.next')}</button>
|
|
119
|
-
: <button type="button" disabled={!flow.validatedIdentity} onClick={()=>void save()}>{t('onboarding.save')}</button>}
|
|
117
|
+
{flow.step>1 && <button type="button" className="settings-action" onClick={()=>setFlow(goBack)}>{t('onboarding.back')}</button>}
|
|
118
|
+
{flow.step<4 ? <button type="button" className="settings-action settings-action-save" disabled={!canAdvance(flow)} onClick={()=>setFlow(advance)}>{t('onboarding.next')}</button>
|
|
119
|
+
: <button type="button" className="settings-action settings-action-save" disabled={!flow.validatedIdentity} onClick={()=>void save()}>{t('onboarding.save')}</button>}
|
|
120
120
|
</fieldset>
|
|
121
121
|
{(error || flow.error || (flow.step===2 && blockerForStep(flow))) && <p role="alert">{error ?? t(`onboarding.error.${flow.error ?? blockerForStep(flow)}`)}</p>}
|
|
122
122
|
{!!flow.missingScopes.length && <p role="alert">{flow.missingScopes.join(', ')}</p>}
|
|
123
123
|
{!!flow.missingCapabilities.length && <p role="status">{t('onboarding.warning.missingCapabilities',{capabilities:flow.missingCapabilities.join(', ')})}</p>}
|
|
124
|
-
<button type="button" disabled={channel!=='slack' && busy} onClick={close}>{t('onboarding.close')}</button>
|
|
124
|
+
<button type="button" className="settings-action" disabled={channel!=='slack' && busy} onClick={close}>{t('onboarding.close')}</button>
|
|
125
125
|
</dialog>;
|
|
126
126
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import type { SettingsClient } from '../../types';
|
|
3
|
+
import { StatusBadge } from '../page-shell';
|
|
3
4
|
|
|
4
5
|
export type MessengerChannel = 'telegram' | 'discord' | 'slack';
|
|
5
6
|
|
|
@@ -110,25 +111,28 @@ export function TransportStatusChips({ client, channel }: Props) {
|
|
|
110
111
|
const showHint = Boolean(status?.configured && status.sendCapable && !status.activeInbound);
|
|
111
112
|
|
|
112
113
|
return (
|
|
113
|
-
<div className="settings-transport-status" role="status" aria-live="polite">
|
|
114
|
-
{error ? <
|
|
114
|
+
<div className="settings-transport-status settings-card-toolbar" role="status" aria-live="polite">
|
|
115
|
+
{error ? <span className="settings-field-hint">{error}</span> : null}
|
|
115
116
|
{status ? (
|
|
116
117
|
<>
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
{transportChipLabels(status).map(label => (
|
|
119
|
+
<StatusBadge
|
|
120
|
+
key={label}
|
|
121
|
+
tone={label === 'Not configured' ? 'neutral' : 'ok'}
|
|
122
|
+
>
|
|
123
|
+
{label}
|
|
124
|
+
</StatusBadge>
|
|
125
|
+
))}
|
|
122
126
|
{showHint ? (
|
|
123
|
-
<
|
|
127
|
+
<span className="settings-field-hint">
|
|
124
128
|
This transport is not receiving inbound messages, but send-only delivery remains available.
|
|
125
|
-
</
|
|
129
|
+
</span>
|
|
126
130
|
) : null}
|
|
127
131
|
</>
|
|
128
132
|
) : null}
|
|
129
133
|
<button
|
|
130
134
|
type="button"
|
|
131
|
-
className="settings-action
|
|
135
|
+
className="settings-action"
|
|
132
136
|
onClick={() => void refresh()}
|
|
133
137
|
>
|
|
134
138
|
Refresh transport status
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SettingsSection } from '../../page-shell';
|
|
1
|
+
import { SettingsActions, SettingsNote, SettingsSection, SettingsToolbar, StatusBadge } from '../../page-shell';
|
|
2
2
|
import { RuntimeEmployeeRow } from './RuntimeEmployeeRow';
|
|
3
3
|
import type { CliMeta } from './agent-meta';
|
|
4
4
|
import {
|
|
@@ -43,40 +43,40 @@ export function AgentEmployeesSection({
|
|
|
43
43
|
title="Employees"
|
|
44
44
|
hint="Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited."
|
|
45
45
|
>
|
|
46
|
-
<
|
|
47
|
-
<span
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
<SettingsToolbar>
|
|
47
|
+
<span className="settings-runtime-employee-summary">
|
|
48
|
+
<span>+{summary.added}</span>
|
|
49
|
+
<span>~{summary.updated}</span>
|
|
50
|
+
<span>-{summary.removed}</span>
|
|
51
|
+
</span>
|
|
52
|
+
{hasErrors ? <StatusBadge tone="error">Fix invalid rows before saving.</StatusBadge> : null}
|
|
53
|
+
</SettingsToolbar>
|
|
54
|
+
{loading ? <SettingsNote>Loading employees...</SettingsNote> : null}
|
|
55
|
+
{error ? <SettingsNote tone="error" role="alert">{error}</SettingsNote> : null}
|
|
54
56
|
{roster.length === 0 ? (
|
|
55
|
-
<
|
|
57
|
+
<SettingsNote>No runtime employees configured.</SettingsNote>
|
|
56
58
|
) : (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
))}
|
|
69
|
-
</div>
|
|
59
|
+
roster.map((employee, idx) => (
|
|
60
|
+
<RuntimeEmployeeRow
|
|
61
|
+
key={employee.id}
|
|
62
|
+
employee={employee}
|
|
63
|
+
index={idx}
|
|
64
|
+
cliOptions={cliOptions}
|
|
65
|
+
cliMeta={cliMeta ?? null}
|
|
66
|
+
onChange={(patch) => updateRow(idx, patch)}
|
|
67
|
+
onRemove={() => removeRow(idx)}
|
|
68
|
+
/>
|
|
69
|
+
))
|
|
70
70
|
)}
|
|
71
|
-
<
|
|
71
|
+
<SettingsActions>
|
|
72
72
|
<button
|
|
73
73
|
type="button"
|
|
74
|
-
className="settings-action
|
|
74
|
+
className="settings-action"
|
|
75
75
|
onClick={() => onRosterChange([...roster, makeDefaultRuntimeEmployee(cliOptions, cliMeta)])}
|
|
76
76
|
>
|
|
77
77
|
+ Add employee
|
|
78
78
|
</button>
|
|
79
|
-
</
|
|
79
|
+
</SettingsActions>
|
|
80
80
|
</SettingsSection>
|
|
81
81
|
);
|
|
82
82
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SelectField } from '../../../fields';
|
|
2
|
-
import { SettingsSection } from '../../page-shell';
|
|
2
|
+
import { SettingsNote, SettingsSection } from '../../page-shell';
|
|
3
3
|
import {
|
|
4
4
|
configuredPolicyLabel,
|
|
5
5
|
isAllowlistValid,
|
|
@@ -49,12 +49,12 @@ export function PermissionQuickSection({ value, configuredValue, onChange }: Per
|
|
|
49
49
|
}}
|
|
50
50
|
/>
|
|
51
51
|
{mode === 'invalid' ? (
|
|
52
|
-
<
|
|
52
|
+
<SettingsNote tone="error" role="alert">
|
|
53
53
|
The saved permissions value is not a recognized policy. Choose a policy to replace it.
|
|
54
|
-
</
|
|
54
|
+
</SettingsNote>
|
|
55
55
|
) : null}
|
|
56
|
-
{summary ? <
|
|
57
|
-
<
|
|
56
|
+
{summary ? <SettingsNote>{summary}</SettingsNote> : null}
|
|
57
|
+
<SettingsNote><span id="agent-configured-policy">Configured policy: {configuredPolicyLabel(configuredValue)}</span></SettingsNote>
|
|
58
58
|
</SettingsSection>
|
|
59
59
|
);
|
|
60
60
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SelectField, TextField } from '../../../fields';
|
|
2
|
+
import { SettingsActions, StatusBadge } from '../../page-shell';
|
|
2
3
|
import { metaFor, optionList, selectableRuntimeOptions, isRetiredCliSelection, retiredRuntimeLabel, type CliMeta } from './agent-meta';
|
|
3
4
|
import {
|
|
4
5
|
isStaticEmployee,
|
|
@@ -30,12 +31,13 @@ export function RuntimeEmployeeRow({
|
|
|
30
31
|
const retired = isRetiredCliSelection(employee.cli);
|
|
31
32
|
const cliChoices = selectableRuntimeOptions(Array.from(new Set([...cliOptions, employee.cli, 'claude'])).filter(Boolean));
|
|
32
33
|
|
|
34
|
+
const employeeName = employee.name || `Employee ${index + 1}`;
|
|
33
35
|
return (
|
|
34
|
-
<
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
{locked ? <
|
|
38
|
-
</
|
|
36
|
+
<div className="settings-runtime-employee-row" role="group" aria-label={employeeName}>
|
|
37
|
+
<p className="settings-runtime-employee-head">
|
|
38
|
+
<span className="settings-runtime-employee-name">{employeeName}</span>
|
|
39
|
+
{locked ? <StatusBadge tone="neutral">static</StatusBadge> : null}
|
|
40
|
+
</p>
|
|
39
41
|
<div className="settings-runtime-employee-grid">
|
|
40
42
|
<TextField
|
|
41
43
|
id={`runtime-employee-${employee.id}-name`}
|
|
@@ -74,18 +76,19 @@ export function RuntimeEmployeeRow({
|
|
|
74
76
|
onChange={(next) => onChange({ role: next })}
|
|
75
77
|
/>
|
|
76
78
|
</div>
|
|
77
|
-
<
|
|
78
|
-
<span>{employee.source}{employee.status ? ` / ${employee.status}` : ''}</span>
|
|
79
|
+
<SettingsActions
|
|
80
|
+
status={<span>{employee.source}{employee.status ? ` / ${employee.status}` : ''}</span>}
|
|
81
|
+
>
|
|
79
82
|
<button
|
|
80
83
|
type="button"
|
|
81
|
-
className="settings-action settings-action-
|
|
84
|
+
className="settings-action settings-action-danger"
|
|
82
85
|
disabled={locked}
|
|
83
86
|
onClick={onRemove}
|
|
84
|
-
aria-label={`Remove employee ${
|
|
87
|
+
aria-label={`Remove employee ${employeeName}`}
|
|
85
88
|
>
|
|
86
89
|
Remove
|
|
87
90
|
</button>
|
|
88
|
-
</
|
|
89
|
-
</
|
|
91
|
+
</SettingsActions>
|
|
92
|
+
</div>
|
|
90
93
|
);
|
|
91
94
|
}
|
|
@@ -48,8 +48,7 @@ export function RuntimeHeader({
|
|
|
48
48
|
title="Agent runtime"
|
|
49
49
|
hint="Active CLI, model, effort, and workspace used by this instance."
|
|
50
50
|
>
|
|
51
|
-
<
|
|
52
|
-
<SelectField
|
|
51
|
+
<SelectField
|
|
53
52
|
id="agent-cli"
|
|
54
53
|
label="Active CLI"
|
|
55
54
|
value={cli}
|
|
@@ -95,7 +94,6 @@ export function RuntimeHeader({
|
|
|
95
94
|
placeholder="/path/to/project"
|
|
96
95
|
onChange={onWorkingDirChange}
|
|
97
96
|
/>
|
|
98
|
-
</div>
|
|
99
97
|
</SettingsSection>
|
|
100
98
|
);
|
|
101
99
|
}
|
|
@@ -41,7 +41,7 @@ export function RuntimeTransportField({ cli, original, dirty, disabled = false,
|
|
|
41
41
|
if (key === null) return null;
|
|
42
42
|
|
|
43
43
|
return (
|
|
44
|
-
|
|
44
|
+
<>
|
|
45
45
|
<SelectField
|
|
46
46
|
id={`percli-${cli}-transport`}
|
|
47
47
|
label="Runtime transport"
|
|
@@ -63,6 +63,6 @@ export function RuntimeTransportField({ cli, original, dirty, disabled = false,
|
|
|
63
63
|
: 'Native requires Auto (YOLO) permissions; no native worker assignments.'}
|
|
64
64
|
</p>
|
|
65
65
|
) : null}
|
|
66
|
-
|
|
66
|
+
</>
|
|
67
67
|
);
|
|
68
68
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { SettingsPageProps } from '../../types';
|
|
2
|
+
import { SettingsSection } from '../page-shell';
|
|
2
3
|
import { COPY, normalizeDashboardLocale, TitleSupportSummary } from './shared';
|
|
3
4
|
export default function Activity({manager}: SettingsPageProps) {
|
|
4
5
|
if (!manager) return null;
|
|
5
6
|
const locale = normalizeDashboardLocale(manager.ui.locale), copy = COPY[locale];
|
|
6
|
-
return
|
|
7
|
-
<
|
|
7
|
+
return (
|
|
8
|
+
<SettingsSection title={copy.activityTitle} hint={copy.activityDescription}>
|
|
9
|
+
<TitleSupportSummary support={manager.titleSupport} locale={locale}/>
|
|
10
|
+
</SettingsSection>
|
|
11
|
+
);
|
|
8
12
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SettingsPageProps } from '../../types';
|
|
2
2
|
import type { DashboardShortcutAction } from '../../../types';
|
|
3
3
|
import { formatShortcut, MANAGER_SHORTCUT_ACTIONS } from '../../../manager-shortcuts';
|
|
4
|
+
import { SettingsSection } from '../page-shell';
|
|
4
5
|
import { COPY, LOCALE_OPTIONS, normalizeDashboardLocale, DashboardSettingToggle, DashboardSettingSelect, DashboardShortcutInput, shortcutCopyKey } from './shared';
|
|
5
6
|
export default function Display({manager}: SettingsPageProps) {
|
|
6
7
|
if (!manager) return null;
|
|
@@ -17,12 +18,7 @@ export default function Display({manager}: SettingsPageProps) {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
return (
|
|
20
|
-
<
|
|
21
|
-
<header>
|
|
22
|
-
<h3>{copy.displayTitle}</h3>
|
|
23
|
-
<p>{copy.displayDescription}</p>
|
|
24
|
-
</header>
|
|
25
|
-
<div className="dashboard-settings-field-list">
|
|
21
|
+
<SettingsSection title={copy.displayTitle} hint={copy.displayDescription}>
|
|
26
22
|
<DashboardSettingToggle
|
|
27
23
|
id="dashboard-show-activity-title"
|
|
28
24
|
label={copy.fields.activity.label}
|
|
@@ -86,7 +82,6 @@ export default function Display({manager}: SettingsPageProps) {
|
|
|
86
82
|
/>
|
|
87
83
|
);
|
|
88
84
|
})}
|
|
89
|
-
|
|
90
|
-
</section>
|
|
85
|
+
</SettingsSection>
|
|
91
86
|
);
|
|
92
87
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { DashboardLocale, DashboardShortcutAction } from '../../../types';
|
|
3
|
+
import { SettingsKeyValue, StatusBadge, SettingsNote } from '../page-shell';
|
|
3
4
|
import type { DashboardActivityTitleSupport } from '../../../dashboard-settings/activity-title-support';
|
|
4
5
|
const LOCALE_OPTIONS = [
|
|
5
6
|
{ value: 'ko', label: '한국어 (ko)' },
|
|
@@ -53,7 +54,7 @@ const COPY = {
|
|
|
53
54
|
shortcuts: {
|
|
54
55
|
label: '전역 단축키',
|
|
55
56
|
scope: 'Manager dashboard',
|
|
56
|
-
description: '입력창과 에디터 바깥에서만 작동하는 Manager 이동 단축키를 켭니다.',
|
|
57
|
+
description: '입력창과 에디터 바깥에서만 작동하는 Manager 이동 단축키를 켭니다. Meta는 macOS에서 ⌘, Windows·Linux에서 Ctrl이고, Windows 키는 Win으로 적습니다.',
|
|
57
58
|
},
|
|
58
59
|
shortcutFocusInstances: {
|
|
59
60
|
label: '인스턴스 목록',
|
|
@@ -120,6 +121,11 @@ const COPY = {
|
|
|
120
121
|
scope: '단축키',
|
|
121
122
|
description: '터미널 탭을 열고 새 셸 세션을 시작합니다.',
|
|
122
123
|
},
|
|
124
|
+
shortcutNewCodeSession: {
|
|
125
|
+
label: '새 Code 세션',
|
|
126
|
+
scope: '단축키',
|
|
127
|
+
description: 'Code 모드 사이드바에서 새 세션 초안을 시작합니다.',
|
|
128
|
+
},
|
|
123
129
|
shortcutTerminalNewTab: {
|
|
124
130
|
label: '새 터미널 탭',
|
|
125
131
|
scope: '단축키',
|
|
@@ -244,7 +250,7 @@ const COPY = {
|
|
|
244
250
|
shortcuts: {
|
|
245
251
|
label: 'Global shortcuts',
|
|
246
252
|
scope: 'Manager dashboard',
|
|
247
|
-
description: 'Enable Manager navigation shortcuts outside inputs and editors.',
|
|
253
|
+
description: 'Enable Manager navigation shortcuts outside inputs and editors. Meta means ⌘ on macOS and Ctrl on Windows/Linux; write Win for the Windows key.',
|
|
248
254
|
},
|
|
249
255
|
shortcutFocusInstances: {
|
|
250
256
|
label: 'Instance list',
|
|
@@ -311,6 +317,11 @@ const COPY = {
|
|
|
311
317
|
scope: 'Shortcut',
|
|
312
318
|
description: 'Open the terminal tab and start a new shell session.',
|
|
313
319
|
},
|
|
320
|
+
shortcutNewCodeSession: {
|
|
321
|
+
label: 'New Code session',
|
|
322
|
+
scope: 'Shortcut',
|
|
323
|
+
description: 'Start a new session draft in Code mode.',
|
|
324
|
+
},
|
|
314
325
|
shortcutTerminalNewTab: {
|
|
315
326
|
label: 'New terminal tab',
|
|
316
327
|
scope: 'Shortcut',
|
|
@@ -435,7 +446,7 @@ const COPY = {
|
|
|
435
446
|
shortcuts: {
|
|
436
447
|
label: '全局快捷键',
|
|
437
448
|
scope: 'Manager dashboard',
|
|
438
|
-
description: '在输入框和编辑器外启用 Manager 导航快捷键。',
|
|
449
|
+
description: '在输入框和编辑器外启用 Manager 导航快捷键。Meta 在 macOS 上是 ⌘,在 Windows/Linux 上是 Ctrl;Windows 键请写作 Win。',
|
|
439
450
|
},
|
|
440
451
|
shortcutFocusInstances: {
|
|
441
452
|
label: '实例列表',
|
|
@@ -502,6 +513,11 @@ const COPY = {
|
|
|
502
513
|
scope: '快捷键',
|
|
503
514
|
description: '打开终端标签并启动新的 Shell 会话。',
|
|
504
515
|
},
|
|
516
|
+
shortcutNewCodeSession: {
|
|
517
|
+
label: '新 Code 会话',
|
|
518
|
+
scope: '快捷键',
|
|
519
|
+
description: '在 Code 模式侧边栏中开始新的会话草稿。',
|
|
520
|
+
},
|
|
505
521
|
shortcutTerminalNewTab: {
|
|
506
522
|
label: '新终端标签',
|
|
507
523
|
scope: '快捷键',
|
|
@@ -626,7 +642,7 @@ const COPY = {
|
|
|
626
642
|
shortcuts: {
|
|
627
643
|
label: 'グローバルショートカット',
|
|
628
644
|
scope: 'Manager dashboard',
|
|
629
|
-
description: '入力欄とエディタ外で Manager ナビゲーションショートカットを有効にします。',
|
|
645
|
+
description: '入力欄とエディタ外で Manager ナビゲーションショートカットを有効にします。Meta は macOS では ⌘、Windows/Linux では Ctrl です。Windows キーは Win と書きます。',
|
|
630
646
|
},
|
|
631
647
|
shortcutFocusInstances: {
|
|
632
648
|
label: 'インスタンス一覧',
|
|
@@ -693,6 +709,11 @@ const COPY = {
|
|
|
693
709
|
scope: 'ショートカット',
|
|
694
710
|
description: 'ターミナルタブを開き、新しいシェルセッションを開始します。',
|
|
695
711
|
},
|
|
712
|
+
shortcutNewCodeSession: {
|
|
713
|
+
label: '新しい Code セッション',
|
|
714
|
+
scope: 'ショートカット',
|
|
715
|
+
description: 'Code モードのサイドバーで新しいセッションの下書きを開始します。',
|
|
716
|
+
},
|
|
696
717
|
shortcutTerminalNewTab: {
|
|
697
718
|
label: '新しいターミナルタブ',
|
|
698
719
|
scope: 'ショートカット',
|
|
@@ -790,18 +811,14 @@ type DashboardSettingRowProps = {
|
|
|
790
811
|
|
|
791
812
|
function DashboardSettingRow(props: DashboardSettingRowProps) {
|
|
792
813
|
return (
|
|
793
|
-
<
|
|
794
|
-
<
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
<div className="dashboard-settings-row-control">
|
|
802
|
-
{props.children}
|
|
803
|
-
</div>
|
|
804
|
-
</div>
|
|
814
|
+
<label className="settings-field" htmlFor={props.id}>
|
|
815
|
+
<span className="settings-field-label">{props.label}</span>
|
|
816
|
+
{props.children}
|
|
817
|
+
<span className="settings-field-description">
|
|
818
|
+
<span className="dashboard-settings-row-scope">{props.scope}</span>{' '}
|
|
819
|
+
{props.description}
|
|
820
|
+
</span>
|
|
821
|
+
</label>
|
|
805
822
|
);
|
|
806
823
|
}
|
|
807
824
|
|
|
@@ -819,7 +836,6 @@ function DashboardSettingToggle(props: DashboardSettingToggleProps) {
|
|
|
819
836
|
<DashboardSettingRow id={props.id} label={props.label} scope={props.scope} description={props.description}>
|
|
820
837
|
<input
|
|
821
838
|
id={props.id}
|
|
822
|
-
className="dashboard-settings-toggle"
|
|
823
839
|
type="checkbox"
|
|
824
840
|
checked={props.value}
|
|
825
841
|
onChange={(event) => props.onChange(event.currentTarget.checked)}
|
|
@@ -852,7 +868,6 @@ function DashboardSettingSelect(props: DashboardSettingSelectProps) {
|
|
|
852
868
|
<DashboardSettingRow id={props.id} label={props.label} scope={props.scope} description={props.description}>
|
|
853
869
|
<select
|
|
854
870
|
id={props.id}
|
|
855
|
-
className="dashboard-settings-select"
|
|
856
871
|
value={props.value}
|
|
857
872
|
onChange={(event) => props.onChange(normalizeDashboardLocale(event.currentTarget.value))}
|
|
858
873
|
>
|
|
@@ -869,8 +884,8 @@ function DashboardShortcutInput(props: DashboardShortcutInputProps) {
|
|
|
869
884
|
<DashboardSettingRow id={`dashboard-shortcut-${props.action}`} label={props.label} scope={props.scope} description={props.description}>
|
|
870
885
|
<input
|
|
871
886
|
id={`dashboard-shortcut-${props.action}`}
|
|
872
|
-
className="dashboard-settings-shortcut-input"
|
|
873
887
|
type="text"
|
|
888
|
+
className="dashboard-settings-shortcut-input"
|
|
874
889
|
value={props.value}
|
|
875
890
|
aria-label={`${props.label} shortcut`}
|
|
876
891
|
placeholder="Alt+I"
|
|
@@ -892,6 +907,7 @@ const SHORTCUT_COPY_KEYS: Record<DashboardShortcutAction, keyof typeof COPY.ko.f
|
|
|
892
907
|
toggleLeftSidebar: 'shortcutToggleLeftSidebar',
|
|
893
908
|
focusTerminal: 'shortcutFocusTerminal',
|
|
894
909
|
newTerminalSession: 'shortcutNewTerminalSession',
|
|
910
|
+
newCodeSession: 'shortcutNewCodeSession',
|
|
895
911
|
terminalNewTab: 'shortcutTerminalNewTab',
|
|
896
912
|
terminalClear: 'shortcutTerminalClear',
|
|
897
913
|
openDiff: 'shortcutOpenDiff',
|
|
@@ -927,20 +943,15 @@ function TitleSupportSummary({ support, locale }: { support: DashboardActivityTi
|
|
|
927
943
|
const total = support.ready + support.legacy + support.offline;
|
|
928
944
|
const copy = COPY[locale].support;
|
|
929
945
|
return (
|
|
930
|
-
<div
|
|
931
|
-
<
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
</
|
|
939
|
-
<div>
|
|
940
|
-
<span>{copy.offline}</span>
|
|
941
|
-
<strong>{support.offline}</strong>
|
|
942
|
-
</div>
|
|
943
|
-
<p>{total === 0 ? copy.empty : copy.restart}</p>
|
|
946
|
+
<div role="group" aria-label={copy.ariaLabel}>
|
|
947
|
+
<SettingsKeyValue
|
|
948
|
+
items={[
|
|
949
|
+
{ label: copy.ready, value: <StatusBadge tone="ok">{support.ready}</StatusBadge> },
|
|
950
|
+
{ label: copy.legacy, value: <StatusBadge tone="warn">{support.legacy}</StatusBadge> },
|
|
951
|
+
{ label: copy.offline, value: <StatusBadge tone="neutral">{support.offline}</StatusBadge> },
|
|
952
|
+
]}
|
|
953
|
+
/>
|
|
954
|
+
<SettingsNote>{total === 0 ? copy.empty : copy.restart}</SettingsNote>
|
|
944
955
|
</div>
|
|
945
956
|
);
|
|
946
957
|
}
|
|
@@ -155,3 +155,69 @@ export function SaveBar({ saving, isDirty, error, onDiscard }: SaveBarProps) {
|
|
|
155
155
|
</div>
|
|
156
156
|
);
|
|
157
157
|
}
|
|
158
|
+
|
|
159
|
+
// ─── Card-body primitives ────────────────────────────────────────────
|
|
160
|
+
// Children of `SettingsSection` render as divided rows inside one card.
|
|
161
|
+
// These primitives share that row rhythm so pages never hand-roll grids,
|
|
162
|
+
// emoji status, or free-floating button strips.
|
|
163
|
+
|
|
164
|
+
export type StatusTone = 'ok' | 'warn' | 'error' | 'neutral';
|
|
165
|
+
|
|
166
|
+
export function StatusBadge({ tone, children }: { tone: StatusTone; children: ReactNode }) {
|
|
167
|
+
return (
|
|
168
|
+
<span className={`settings-status settings-status-${tone}`}>
|
|
169
|
+
<span className="settings-status-dot" aria-hidden="true" />
|
|
170
|
+
{children}
|
|
171
|
+
</span>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export type KeyValueItem = { label: string; value: ReactNode; mono?: boolean; className?: string };
|
|
176
|
+
|
|
177
|
+
export function SettingsKeyValue({ items }: { items: ReadonlyArray<KeyValueItem> }) {
|
|
178
|
+
return (
|
|
179
|
+
<dl className="settings-kv">
|
|
180
|
+
{items.map((item, index) => (
|
|
181
|
+
<div className={item.className ? `settings-kv-row ${item.className}` : 'settings-kv-row'} key={index}>
|
|
182
|
+
<dt>{item.label}</dt>
|
|
183
|
+
<dd className={item.mono ? 'settings-kv-mono' : undefined}>{item.value}</dd>
|
|
184
|
+
</div>
|
|
185
|
+
))}
|
|
186
|
+
</dl>
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export function SettingsActions({
|
|
191
|
+
children,
|
|
192
|
+
status,
|
|
193
|
+
}: {
|
|
194
|
+
children: ReactNode;
|
|
195
|
+
status?: ReactNode;
|
|
196
|
+
}) {
|
|
197
|
+
return (
|
|
198
|
+
<div className="settings-card-actions">
|
|
199
|
+
{status ? <div className="settings-card-actions-status">{status}</div> : null}
|
|
200
|
+
<div className="settings-card-actions-buttons">{children}</div>
|
|
201
|
+
</div>
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function SettingsToolbar({ children }: { children: ReactNode }) {
|
|
206
|
+
return <div className="settings-card-toolbar">{children}</div>;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function SettingsNote({
|
|
210
|
+
children,
|
|
211
|
+
tone = 'muted',
|
|
212
|
+
role,
|
|
213
|
+
}: {
|
|
214
|
+
children: ReactNode;
|
|
215
|
+
tone?: 'muted' | 'warn' | 'error';
|
|
216
|
+
role?: 'status' | 'alert';
|
|
217
|
+
}) {
|
|
218
|
+
return (
|
|
219
|
+
<p className={`settings-card-note settings-card-note-${tone}`} role={role}>
|
|
220
|
+
{children}
|
|
221
|
+
</p>
|
|
222
|
+
);
|
|
223
|
+
}
|