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
|
@@ -5,10 +5,13 @@ import {
|
|
|
5
5
|
PageError,
|
|
6
6
|
PageLoading,
|
|
7
7
|
PageOffline,
|
|
8
|
+
SettingsActions,
|
|
9
|
+
SettingsNote,
|
|
8
10
|
SettingsSection,
|
|
11
|
+
SettingsToolbar,
|
|
12
|
+
StatusBadge,
|
|
9
13
|
usePageSnapshot,
|
|
10
14
|
} from './page-shell';
|
|
11
|
-
import { InlineWarn } from './components/InlineWarn';
|
|
12
15
|
import { McpServerCard } from './components/McpServerCard';
|
|
13
16
|
import {
|
|
14
17
|
countInstallBundleCandidates,
|
|
@@ -337,46 +340,44 @@ export default function Mcp({ port, client, dirty, registerSave }: SettingsPageP
|
|
|
337
340
|
title="MCP servers"
|
|
338
341
|
hint="Edit each server's command/args/env. Save writes back to mcp.json; Sync pushes the saved config to all CLIs."
|
|
339
342
|
>
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
<
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
})}
|
|
368
|
-
</div>
|
|
343
|
+
{order.length === 0 && (
|
|
344
|
+
<SettingsNote>
|
|
345
|
+
No servers configured. Add one or run <code>Reset to defaults</code>.
|
|
346
|
+
</SettingsNote>
|
|
347
|
+
)}
|
|
348
|
+
{order.map((name) => {
|
|
349
|
+
const srv = draft.servers[name] ?? makeEmptyServer();
|
|
350
|
+
const lower = name.toLowerCase();
|
|
351
|
+
const isDupe = duplicates.has(lower);
|
|
352
|
+
const validation = validateServer(name, srv);
|
|
353
|
+
const error = isDupe
|
|
354
|
+
? 'Duplicate server name (case-insensitive).'
|
|
355
|
+
: validation.kind === 'invalid'
|
|
356
|
+
? validation.reason
|
|
357
|
+
: null;
|
|
358
|
+
return (
|
|
359
|
+
<McpServerCard
|
|
360
|
+
key={name}
|
|
361
|
+
name={name}
|
|
362
|
+
server={srv}
|
|
363
|
+
onRename={(next) => onRenameServer(name, next)}
|
|
364
|
+
onChange={(next) => onChangeServer(name, next)}
|
|
365
|
+
onRemove={() => onRemoveServer(name)}
|
|
366
|
+
nameError={error}
|
|
367
|
+
/>
|
|
368
|
+
);
|
|
369
|
+
})}
|
|
369
370
|
{hasDupes && (
|
|
370
|
-
<
|
|
371
|
+
<SettingsNote tone="error" role="alert">
|
|
371
372
|
Duplicate server name{dupeNames.length === 1 ? '' : 's'}: {dupeNames.join(', ')}.
|
|
372
373
|
Saving is blocked until names are unique.
|
|
373
|
-
</
|
|
374
|
+
</SettingsNote>
|
|
374
375
|
)}
|
|
375
376
|
{hasFieldErrors && !hasDupes && (
|
|
376
|
-
<
|
|
377
|
+
<SettingsNote tone="error" role="alert">
|
|
377
378
|
Some servers have errors (missing command/URL or invalid name).
|
|
378
379
|
Saving is blocked until they are fixed.
|
|
379
|
-
</
|
|
380
|
+
</SettingsNote>
|
|
380
381
|
)}
|
|
381
382
|
</SettingsSection>
|
|
382
383
|
|
|
@@ -384,7 +385,15 @@ export default function Mcp({ port, client, dirty, registerSave }: SettingsPageP
|
|
|
384
385
|
title="Actions"
|
|
385
386
|
hint="These act on the saved config. Save edits first if you want them included."
|
|
386
387
|
>
|
|
387
|
-
<
|
|
388
|
+
<SettingsActions
|
|
389
|
+
status={
|
|
390
|
+
actionState.kind === 'pending' ? (
|
|
391
|
+
<span role="status">{actionState.label}…</span>
|
|
392
|
+
) : actionState.kind === 'success' ? (
|
|
393
|
+
<span role="status">{actionState.message}</span>
|
|
394
|
+
) : undefined
|
|
395
|
+
}
|
|
396
|
+
>
|
|
388
397
|
<button
|
|
389
398
|
type="button"
|
|
390
399
|
className="settings-action"
|
|
@@ -410,7 +419,7 @@ export default function Mcp({ port, client, dirty, registerSave }: SettingsPageP
|
|
|
410
419
|
</button>
|
|
411
420
|
<button
|
|
412
421
|
type="button"
|
|
413
|
-
className="settings-action settings-action-
|
|
422
|
+
className="settings-action settings-action-danger"
|
|
414
423
|
disabled={actionState.kind === 'pending'}
|
|
415
424
|
onClick={() => {
|
|
416
425
|
if (
|
|
@@ -424,15 +433,9 @@ export default function Mcp({ port, client, dirty, registerSave }: SettingsPageP
|
|
|
424
433
|
>
|
|
425
434
|
Reset to defaults
|
|
426
435
|
</button>
|
|
427
|
-
</
|
|
428
|
-
{actionState.kind === 'pending' && (
|
|
429
|
-
<p className="settings-section-hint" role="status">{actionState.label}…</p>
|
|
430
|
-
)}
|
|
431
|
-
{actionState.kind === 'success' && (
|
|
432
|
-
<p className="settings-section-hint" role="status">{actionState.message}</p>
|
|
433
|
-
)}
|
|
436
|
+
</SettingsActions>
|
|
434
437
|
{actionState.kind === 'error' && (
|
|
435
|
-
<
|
|
438
|
+
<SettingsNote tone="error" role="alert">{actionState.message}</SettingsNote>
|
|
436
439
|
)}
|
|
437
440
|
</SettingsSection>
|
|
438
441
|
|
|
@@ -458,183 +461,200 @@ export default function Mcp({ port, client, dirty, registerSave }: SettingsPageP
|
|
|
458
461
|
/>
|
|
459
462
|
)}
|
|
460
463
|
{!isValid && (
|
|
461
|
-
<
|
|
464
|
+
<SettingsNote>
|
|
462
465
|
Save is disabled while validation errors are present.
|
|
463
|
-
</
|
|
466
|
+
</SettingsNote>
|
|
464
467
|
)}
|
|
465
468
|
</SettingsSection>
|
|
466
469
|
|
|
467
470
|
{modalOpen && (
|
|
468
|
-
<div
|
|
471
|
+
<div
|
|
472
|
+
className="settings-memory-modal settings-pi-modal"
|
|
473
|
+
role="dialog"
|
|
474
|
+
aria-modal="true"
|
|
475
|
+
aria-label="MCP Server Management"
|
|
476
|
+
onClick={closeModal}
|
|
477
|
+
>
|
|
469
478
|
<div
|
|
470
|
-
className="
|
|
471
|
-
role="dialog"
|
|
472
|
-
aria-modal="true"
|
|
473
|
-
aria-label="MCP Server Management"
|
|
479
|
+
className="settings-memory-modal-card"
|
|
474
480
|
onClick={(e) => e.stopPropagation()}
|
|
475
481
|
>
|
|
476
|
-
<
|
|
482
|
+
<header className="settings-memory-modal-header">
|
|
483
|
+
<h3>MCP servers</h3>
|
|
477
484
|
<button
|
|
478
485
|
type="button"
|
|
479
|
-
className=
|
|
486
|
+
className="settings-action"
|
|
487
|
+
onClick={closeModal}
|
|
488
|
+
>
|
|
489
|
+
Close
|
|
490
|
+
</button>
|
|
491
|
+
</header>
|
|
492
|
+
|
|
493
|
+
<SettingsToolbar>
|
|
494
|
+
<button
|
|
495
|
+
type="button"
|
|
496
|
+
aria-pressed={modalTab === 'active'}
|
|
497
|
+
className="settings-action"
|
|
480
498
|
onClick={() => setModalTab('active')}
|
|
481
499
|
>
|
|
482
500
|
Active Servers
|
|
483
501
|
</button>
|
|
484
502
|
<button
|
|
485
503
|
type="button"
|
|
486
|
-
|
|
504
|
+
aria-pressed={modalTab === 'add'}
|
|
505
|
+
className="settings-action"
|
|
487
506
|
onClick={() => { setModalTab('add'); resetAddForm(); }}
|
|
488
507
|
>
|
|
489
508
|
Add New
|
|
490
509
|
</button>
|
|
491
|
-
</
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
{
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
>
|
|
513
|
-
Remove
|
|
514
|
-
</button>
|
|
515
|
-
</div>
|
|
516
|
-
);
|
|
517
|
-
})}
|
|
518
|
-
</div>
|
|
519
|
-
)}
|
|
520
|
-
|
|
521
|
-
{modalTab === 'add' && (
|
|
522
|
-
<div className="mcp-add-form">
|
|
523
|
-
<div className="mcp-add-subtabs">
|
|
524
|
-
<button
|
|
525
|
-
type="button"
|
|
526
|
-
className={`mcp-modal-tab${addSubTab === 'local' ? ' is-active' : ''}`}
|
|
527
|
-
onClick={() => setAddSubTab('local')}
|
|
528
|
-
>
|
|
529
|
-
Local
|
|
530
|
-
</button>
|
|
531
|
-
<button
|
|
532
|
-
type="button"
|
|
533
|
-
className={`mcp-modal-tab${addSubTab === 'remote' ? ' is-active' : ''}`}
|
|
534
|
-
onClick={() => setAddSubTab('remote')}
|
|
535
|
-
>
|
|
536
|
-
Remote
|
|
537
|
-
</button>
|
|
538
|
-
</div>
|
|
539
|
-
|
|
540
|
-
<label className="settings-field settings-field-text">
|
|
541
|
-
<span className="settings-field-label">Name</span>
|
|
542
|
-
<input
|
|
543
|
-
type="text"
|
|
544
|
-
value={addName}
|
|
545
|
-
placeholder="my-server"
|
|
546
|
-
spellCheck={false}
|
|
547
|
-
onChange={(e) => setAddName(e.target.value)}
|
|
548
|
-
/>
|
|
549
|
-
</label>
|
|
550
|
-
|
|
551
|
-
{addSubTab === 'local' ? (
|
|
552
|
-
<>
|
|
553
|
-
<label className="settings-field settings-field-text">
|
|
554
|
-
<span className="settings-field-label">Command</span>
|
|
555
|
-
<input
|
|
556
|
-
type="text"
|
|
557
|
-
value={addCommand}
|
|
558
|
-
placeholder="npx"
|
|
559
|
-
spellCheck={false}
|
|
560
|
-
onChange={(e) => setAddCommand(e.target.value)}
|
|
561
|
-
/>
|
|
562
|
-
</label>
|
|
563
|
-
<label className="settings-field settings-field-text">
|
|
564
|
-
<span className="settings-field-label">Args (one per line)</span>
|
|
565
|
-
<textarea
|
|
566
|
-
value={addArgs}
|
|
567
|
-
rows={3}
|
|
568
|
-
spellCheck={false}
|
|
569
|
-
placeholder="-y @upstash/context7-mcp"
|
|
570
|
-
onChange={(e) => setAddArgs(e.target.value)}
|
|
571
|
-
/>
|
|
572
|
-
</label>
|
|
573
|
-
<label className="settings-field settings-field-text">
|
|
574
|
-
<span className="settings-field-label">Env (KEY=value per line)</span>
|
|
575
|
-
<textarea
|
|
576
|
-
value={addEnv}
|
|
577
|
-
rows={2}
|
|
578
|
-
spellCheck={false}
|
|
579
|
-
onChange={(e) => setAddEnv(e.target.value)}
|
|
580
|
-
/>
|
|
581
|
-
</label>
|
|
582
|
-
</>
|
|
583
|
-
) : (
|
|
584
|
-
<>
|
|
585
|
-
<label className="settings-field settings-field-text">
|
|
586
|
-
<span className="settings-field-label">URL</span>
|
|
587
|
-
<input
|
|
588
|
-
type="text"
|
|
589
|
-
value={addUrl}
|
|
590
|
-
placeholder="https://mcp.example.com/sse"
|
|
591
|
-
spellCheck={false}
|
|
592
|
-
onChange={(e) => setAddUrl(e.target.value)}
|
|
593
|
-
/>
|
|
594
|
-
</label>
|
|
595
|
-
<label className="settings-field settings-field-text">
|
|
596
|
-
<span className="settings-field-label">Headers (KEY=value per line)</span>
|
|
597
|
-
<textarea
|
|
598
|
-
value={addHeaders}
|
|
599
|
-
rows={2}
|
|
600
|
-
spellCheck={false}
|
|
601
|
-
onChange={(e) => setAddHeaders(e.target.value)}
|
|
602
|
-
/>
|
|
603
|
-
</label>
|
|
604
|
-
</>
|
|
605
|
-
)}
|
|
606
|
-
|
|
607
|
-
{addError && <InlineWarn role="alert">{addError}</InlineWarn>}
|
|
608
|
-
|
|
609
|
-
<div className="mcp-add-actions">
|
|
610
|
-
<button
|
|
611
|
-
type="button"
|
|
612
|
-
className="settings-action"
|
|
613
|
-
onClick={closeModal}
|
|
614
|
-
>
|
|
615
|
-
Cancel
|
|
616
|
-
</button>
|
|
617
|
-
<button
|
|
618
|
-
type="button"
|
|
619
|
-
className="settings-action"
|
|
620
|
-
disabled={addPending}
|
|
621
|
-
onClick={() => void handleAddAndSync()}
|
|
510
|
+
</SettingsToolbar>
|
|
511
|
+
|
|
512
|
+
{modalTab === 'active' && (
|
|
513
|
+
<>
|
|
514
|
+
{Object.keys(original.servers).length === 0 && (
|
|
515
|
+
<SettingsNote>No active MCP servers.</SettingsNote>
|
|
516
|
+
)}
|
|
517
|
+
{Object.entries(original.servers).map(([name, srv]) => {
|
|
518
|
+
const tag = getServerTag(srv);
|
|
519
|
+
return (
|
|
520
|
+
<SettingsActions
|
|
521
|
+
key={name}
|
|
522
|
+
status={
|
|
523
|
+
<>
|
|
524
|
+
<strong>{name}</strong>{' '}
|
|
525
|
+
<code>
|
|
526
|
+
{srv.url || [srv.command, ...(srv.args || [])].filter(Boolean).join(' ')}
|
|
527
|
+
</code>{' '}
|
|
528
|
+
{tag ? <StatusBadge tone="neutral">{tag}</StatusBadge> : null}
|
|
529
|
+
</>
|
|
530
|
+
}
|
|
622
531
|
>
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
532
|
+
<button
|
|
533
|
+
type="button"
|
|
534
|
+
className="settings-action settings-action-danger"
|
|
535
|
+
onClick={() => void handleRemoveFromModal(name)}
|
|
536
|
+
>
|
|
537
|
+
Remove
|
|
538
|
+
</button>
|
|
539
|
+
</SettingsActions>
|
|
540
|
+
);
|
|
541
|
+
})}
|
|
542
|
+
</>
|
|
543
|
+
)}
|
|
544
|
+
|
|
545
|
+
{modalTab === 'add' && (
|
|
546
|
+
<>
|
|
547
|
+
<SettingsToolbar>
|
|
548
|
+
<button
|
|
549
|
+
type="button"
|
|
550
|
+
role="tab"
|
|
551
|
+
aria-selected={addSubTab === 'local'}
|
|
552
|
+
className={`settings-action${addSubTab === 'local' ? ' settings-action-save' : ''}`}
|
|
553
|
+
onClick={() => setAddSubTab('local')}
|
|
554
|
+
>
|
|
555
|
+
Local
|
|
556
|
+
</button>
|
|
557
|
+
<button
|
|
558
|
+
type="button"
|
|
559
|
+
role="tab"
|
|
560
|
+
aria-selected={addSubTab === 'remote'}
|
|
561
|
+
className={`settings-action${addSubTab === 'remote' ? ' settings-action-save' : ''}`}
|
|
562
|
+
onClick={() => setAddSubTab('remote')}
|
|
563
|
+
>
|
|
564
|
+
Remote
|
|
565
|
+
</button>
|
|
566
|
+
</SettingsToolbar>
|
|
567
|
+
|
|
568
|
+
<label className="settings-field settings-field-text">
|
|
569
|
+
<span className="settings-field-label">Name</span>
|
|
570
|
+
<input
|
|
571
|
+
type="text"
|
|
572
|
+
value={addName}
|
|
573
|
+
placeholder="my-server"
|
|
574
|
+
spellCheck={false}
|
|
575
|
+
onChange={(e) => setAddName(e.target.value)}
|
|
576
|
+
/>
|
|
577
|
+
</label>
|
|
578
|
+
|
|
579
|
+
{addSubTab === 'local' ? (
|
|
580
|
+
<>
|
|
581
|
+
<label className="settings-field settings-field-text">
|
|
582
|
+
<span className="settings-field-label">Command</span>
|
|
583
|
+
<input
|
|
584
|
+
type="text"
|
|
585
|
+
value={addCommand}
|
|
586
|
+
placeholder="npx"
|
|
587
|
+
spellCheck={false}
|
|
588
|
+
onChange={(e) => setAddCommand(e.target.value)}
|
|
589
|
+
/>
|
|
590
|
+
</label>
|
|
591
|
+
<label className="settings-field settings-field-text">
|
|
592
|
+
<span className="settings-field-label">Args (one per line)</span>
|
|
593
|
+
<textarea
|
|
594
|
+
value={addArgs}
|
|
595
|
+
rows={3}
|
|
596
|
+
spellCheck={false}
|
|
597
|
+
placeholder="-y @upstash/context7-mcp"
|
|
598
|
+
onChange={(e) => setAddArgs(e.target.value)}
|
|
599
|
+
/>
|
|
600
|
+
</label>
|
|
601
|
+
<label className="settings-field settings-field-text">
|
|
602
|
+
<span className="settings-field-label">Env (KEY=value per line)</span>
|
|
603
|
+
<textarea
|
|
604
|
+
value={addEnv}
|
|
605
|
+
rows={2}
|
|
606
|
+
spellCheck={false}
|
|
607
|
+
onChange={(e) => setAddEnv(e.target.value)}
|
|
608
|
+
/>
|
|
609
|
+
</label>
|
|
610
|
+
</>
|
|
611
|
+
) : (
|
|
612
|
+
<>
|
|
613
|
+
<label className="settings-field settings-field-text">
|
|
614
|
+
<span className="settings-field-label">URL</span>
|
|
615
|
+
<input
|
|
616
|
+
type="text"
|
|
617
|
+
value={addUrl}
|
|
618
|
+
placeholder="https://mcp.example.com/sse"
|
|
619
|
+
spellCheck={false}
|
|
620
|
+
onChange={(e) => setAddUrl(e.target.value)}
|
|
621
|
+
/>
|
|
622
|
+
</label>
|
|
623
|
+
<label className="settings-field settings-field-text">
|
|
624
|
+
<span className="settings-field-label">Headers (KEY=value per line)</span>
|
|
625
|
+
<textarea
|
|
626
|
+
value={addHeaders}
|
|
627
|
+
rows={2}
|
|
628
|
+
spellCheck={false}
|
|
629
|
+
onChange={(e) => setAddHeaders(e.target.value)}
|
|
630
|
+
/>
|
|
631
|
+
</label>
|
|
632
|
+
</>
|
|
633
|
+
)}
|
|
634
|
+
|
|
635
|
+
{addError && (
|
|
636
|
+
<SettingsNote tone="error" role="alert">{addError}</SettingsNote>
|
|
637
|
+
)}
|
|
638
|
+
|
|
639
|
+
<SettingsActions>
|
|
640
|
+
<button
|
|
641
|
+
type="button"
|
|
642
|
+
className="settings-action"
|
|
643
|
+
onClick={closeModal}
|
|
644
|
+
>
|
|
645
|
+
Cancel
|
|
646
|
+
</button>
|
|
647
|
+
<button
|
|
648
|
+
type="button"
|
|
649
|
+
className="settings-action settings-action-save"
|
|
650
|
+
disabled={addPending}
|
|
651
|
+
onClick={() => void handleAddAndSync()}
|
|
652
|
+
>
|
|
653
|
+
{addPending ? 'Adding…' : 'Add & Sync'}
|
|
654
|
+
</button>
|
|
655
|
+
</SettingsActions>
|
|
656
|
+
</>
|
|
657
|
+
)}
|
|
638
658
|
</div>
|
|
639
659
|
</div>
|
|
640
660
|
)}
|
|
@@ -16,6 +16,8 @@ import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
16
16
|
import type { SettingsPageProps, DirtyEntry } from '../types';
|
|
17
17
|
import { NumberField, SelectField, ToggleField } from '../fields';
|
|
18
18
|
import {
|
|
19
|
+
SettingsActions,
|
|
20
|
+
SettingsNote,
|
|
19
21
|
SettingsSection,
|
|
20
22
|
PageError,
|
|
21
23
|
PageLoading,
|
|
@@ -335,55 +337,42 @@ export default function Memory({ port, client, dirty, registerSave }: SettingsPa
|
|
|
335
337
|
hint={`Read-only browse of the key/value memory table (${MEMORY_PAGE_SIZE}/page).`}
|
|
336
338
|
>
|
|
337
339
|
{memorySnap.state.kind === 'loading' ? (
|
|
338
|
-
<
|
|
340
|
+
<SettingsNote>Loading entries…</SettingsNote>
|
|
339
341
|
) : memorySnap.state.kind === 'offline' ? (
|
|
340
342
|
<PageOffline port={port} />
|
|
341
343
|
) : memorySnap.state.kind === 'error' ? (
|
|
342
344
|
<PageError message={memorySnap.state.message} />
|
|
343
345
|
) : allRows.length === 0 ? (
|
|
344
|
-
<
|
|
346
|
+
<SettingsNote>No memory entries yet.</SettingsNote>
|
|
345
347
|
) : (
|
|
346
348
|
<>
|
|
347
|
-
|
|
348
|
-
<
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
</
|
|
356
|
-
|
|
357
|
-
{slice.map((row) => (
|
|
358
|
-
<MemoryRow
|
|
359
|
-
key={row.key}
|
|
360
|
-
row={row}
|
|
361
|
-
onOpen={setOpenEntry}
|
|
362
|
-
/>
|
|
363
|
-
))}
|
|
364
|
-
</tbody>
|
|
365
|
-
</table>
|
|
366
|
-
<div className="settings-memory-pagination">
|
|
349
|
+
{slice.map((row) => (
|
|
350
|
+
<MemoryRow
|
|
351
|
+
key={row.key}
|
|
352
|
+
row={row}
|
|
353
|
+
onOpen={setOpenEntry}
|
|
354
|
+
/>
|
|
355
|
+
))}
|
|
356
|
+
<SettingsActions
|
|
357
|
+
status={<span>Page {page + 1} / {pageCount}</span>}
|
|
358
|
+
>
|
|
367
359
|
<button
|
|
368
360
|
type="button"
|
|
369
|
-
className="settings-action
|
|
361
|
+
className="settings-action"
|
|
370
362
|
disabled={page === 0}
|
|
371
363
|
onClick={() => setPage((p) => Math.max(0, p - 1))}
|
|
372
364
|
>
|
|
373
365
|
Prev
|
|
374
366
|
</button>
|
|
375
|
-
<span className="settings-memory-pageinfo">
|
|
376
|
-
Page {page + 1} / {pageCount}
|
|
377
|
-
</span>
|
|
378
367
|
<button
|
|
379
368
|
type="button"
|
|
380
|
-
className="settings-action
|
|
369
|
+
className="settings-action"
|
|
381
370
|
disabled={!hasMore}
|
|
382
371
|
onClick={() => setPage((p) => p + 1)}
|
|
383
372
|
>
|
|
384
373
|
Next
|
|
385
374
|
</button>
|
|
386
|
-
</
|
|
375
|
+
</SettingsActions>
|
|
387
376
|
</>
|
|
388
377
|
)}
|
|
389
378
|
</SettingsSection>
|
|
@@ -392,7 +381,13 @@ export default function Memory({ port, client, dirty, registerSave }: SettingsPa
|
|
|
392
381
|
title="Actions"
|
|
393
382
|
hint="Flush runs async — the browse list refreshes when it finishes."
|
|
394
383
|
>
|
|
395
|
-
<
|
|
384
|
+
<SettingsActions
|
|
385
|
+
status={
|
|
386
|
+
actionState.notice ? (
|
|
387
|
+
<span role="status">{actionState.notice}</span>
|
|
388
|
+
) : undefined
|
|
389
|
+
}
|
|
390
|
+
>
|
|
396
391
|
<button
|
|
397
392
|
type="button"
|
|
398
393
|
className="settings-action settings-action-save"
|
|
@@ -411,28 +406,23 @@ export default function Memory({ port, client, dirty, registerSave }: SettingsPa
|
|
|
411
406
|
</button>
|
|
412
407
|
<button
|
|
413
408
|
type="button"
|
|
414
|
-
className="settings-action
|
|
409
|
+
className="settings-action"
|
|
415
410
|
disabled={memorySnap.state.kind !== 'ready'}
|
|
416
411
|
onClick={onExport}
|
|
417
412
|
>
|
|
418
413
|
Export memory
|
|
419
414
|
</button>
|
|
420
|
-
</
|
|
421
|
-
{actionState.notice ? (
|
|
422
|
-
<p className="settings-section-hint" role="status">
|
|
423
|
-
{actionState.notice}
|
|
424
|
-
</p>
|
|
425
|
-
) : null}
|
|
415
|
+
</SettingsActions>
|
|
426
416
|
{actionState.error ? (
|
|
427
|
-
<
|
|
417
|
+
<SettingsNote tone="error" role="alert">
|
|
428
418
|
{actionState.error}
|
|
429
|
-
</
|
|
419
|
+
</SettingsNote>
|
|
430
420
|
) : null}
|
|
431
421
|
</SettingsSection>
|
|
432
422
|
|
|
433
423
|
{openEntry ? (
|
|
434
424
|
<div
|
|
435
|
-
className="settings-memory-modal"
|
|
425
|
+
className="settings-memory-modal settings-pi-modal"
|
|
436
426
|
role="dialog"
|
|
437
427
|
aria-modal="true"
|
|
438
428
|
aria-label={`Memory entry ${openEntry.key}`}
|
|
@@ -445,14 +435,18 @@ export default function Memory({ port, client, dirty, registerSave }: SettingsPa
|
|
|
445
435
|
<h3>{openEntry.key}</h3>
|
|
446
436
|
<button
|
|
447
437
|
type="button"
|
|
448
|
-
className="settings-action
|
|
438
|
+
className="settings-action"
|
|
449
439
|
onClick={() => setOpenEntry(null)}
|
|
450
440
|
aria-label="Close memory entry"
|
|
451
441
|
>
|
|
452
442
|
Close
|
|
453
443
|
</button>
|
|
454
444
|
</header>
|
|
455
|
-
<pre
|
|
445
|
+
<pre
|
|
446
|
+
className="settings-memory-modal-body"
|
|
447
|
+
>
|
|
448
|
+
{openEntry.value}
|
|
449
|
+
</pre>
|
|
456
450
|
</div>
|
|
457
451
|
</div>
|
|
458
452
|
) : null}
|