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
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{c as r}from"./api-B9RiiOMM.js";import{t as i}from"./desktop-bridge-DbRfkg8l.js";import{n as a,t as o}from"./client-platform-WO8m6kPQ.js";import{t as s}from"./copy-text-WsUHYigB.js";import{n as c,t as l}from"./folder-drag-payload-BhV9yzhH.js";var u=e(t(),1);function d(e){return{name:e.name,path:e.path,kind:e.kind===`folder`?`directory`:`file`,size:e.size}}function f(e,t){for(let n of e){if(n.path===t)return n;let e=f(n.children??[],t);if(e)return e}return null}function p(e){return{kind:`electron-folder`,label:`Folder`,canPickRoot:!0,getInitialRoot:async()=>null,pickRoot:async()=>{let t=await e.pickFolder();if(!t.ok&&t.error===`cancelled`)return null;if(!t.ok)throw Error(t.error??`Failed to pick folder`);return t.path??null},registerGitWorktreeRoot:async(t,n,r)=>{let i=await e.registerGitWorktreeRoot?.(t,n,r);if(!i?.ok)throw Error(i?.error??`Failed to register worktree root`)},authorizeRoot:async t=>{let n=await e.authorizeRoot?.(t);if(!n?.ok)throw Error(n?.error??`Failed to authorize folder root`);return n.path??t},listDir:async t=>{let n=await e.listDir(t);if(!n.ok||!n.entries)throw Error(n.error??`Failed to list directory`);return n.entries},readFile:async t=>{let n=await e.readFile(t);if(!n.ok||n.content===void 0)throw Error(n.error??`Failed to read file`);return{content:n.content,...n.binary===void 0?{}:{binary:n.binary}}},movePath:async(t,n)=>{let r=await e.movePath(t,n);if(!r.ok)throw Error(r.error??`Failed to move path`);return r},createFile:async(t,n)=>{let r=await e.createFile(t,n);if(!r.ok)throw Error(r.error??`Failed to create file`);return r},createFolder:async(t,n)=>{let r=await e.createFolder(t,n);if(!r.ok)throw Error(r.error??`Failed to create folder`);return r},renamePath:async(t,n)=>{let r=await e.renamePath(t,n);if(!r.ok)throw Error(r.error??`Failed to rename path`);return r},revealPath:async t=>{let n=await e.revealPath(t);if(!n.ok)throw Error(n.error??`Failed to reveal path`)},watchDir:t=>e.watchDir(t),unwatchDir:t=>e.unwatchDir(t),onDirChange:t=>e.onDirChange(t)}}function m(e,t){return{kind:`notes-vault`,label:t?`Notes: ${t.split(`/`).pop()||t}`:`Notes vault`,canPickRoot:!1,getInitialRoot:async()=>``,listDir:async t=>{if(!t)return e.map(d);let n=f(e,t);return!n||n.kind!==`folder`?[]:(n.children??[]).map(d)},readFile:async e=>({content:(await r(e)).content,binary:!1})}}var h=n();function g(e){return(0,h.jsxs)(`div`,{className:`folder-action-row`,"aria-label":`Folder actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection,onClick:e.onCopyPath,children:`Copy`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection,onClick:e.onCopyRelativePath,children:`Relative`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection||!e.canReveal,onClick:e.onReveal,children:`Finder`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.canMutate,onClick:e.onCreateFile,children:`New File`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.canMutate,onClick:e.onCreateFolder,children:`New Folder`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection||!e.canMutate,onClick:e.onRename,children:`Rename`})]})}function _(e){return(0,h.jsxs)(`div`,{className:`folder-context-menu`,role:`menu`,style:{left:e.x,top:e.y},onPointerDown:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onCopyPath,children:`Copy Path`}),(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onCopyRelativePath,children:`Copy Relative Path`}),(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canReveal,onClick:e.onReveal,children:e.entry.kind===`directory`?`Open Folder`:`Reveal in Finder`}),(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onCreateFile,children:`New File`}),(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onCreateFolder,children:`New Folder`}),(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onRename,children:`Rename`}),e.canRefresh&&(0,h.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onRefresh,children:`Refresh`})]})}function v(e){return(0,h.jsxs)(`div`,{className:`folder-move-confirm`,role:`dialog`,"aria-label":`Confirm folder move`,children:[(0,h.jsxs)(`div`,{className:`folder-move-confirm__title`,children:[`Move "`,e.source.name,`" into "`,e.target.name,`"?`]}),(0,h.jsxs)(`label`,{className:`folder-move-confirm__option`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:e.skipChecked,onChange:t=>e.onSkipCheckedChange(t.target.checked)}),`Don't ask again for internal moves this session`]}),(0,h.jsxs)(`div`,{className:`folder-move-confirm__actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:e.busy,onClick:e.onCancel,children:`Cancel`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn is-primary`,disabled:e.busy,onClick:e.onConfirm,children:e.busy?`Moving...`:`Move`})]})]})}function y(e){return(0,h.jsxs)(h.Fragment,{children:[e.pendingMove&&(0,h.jsx)(v,{source:e.pendingMove.source,target:e.pendingMove.target,busy:e.isMoving,skipChecked:e.skipMoveConfirmChecked,onSkipCheckedChange:e.onSkipMoveConfirmCheckedChange,onCancel:e.onCancelMove,onConfirm:e.onConfirmMove}),e.contextMenu&&(0,h.jsx)(_,{entry:e.contextMenu.entry,x:e.contextMenu.x,y:e.contextMenu.y,canReveal:e.canReveal,canRefresh:e.canRefresh,canMutate:e.canMutate,onCopyPath:e.onCopyContextPath,onCopyRelativePath:e.onCopyContextRelativePath,onReveal:e.onRevealContextPath,onRefresh:e.onRefreshContext,onCreateFile:e.onCreateContextFile,onCreateFolder:e.onCreateContextFolder,onRename:e.onRenameContextPath})]})}function b(e){return e===null?`Open Folder`:e.split(`/`).pop()||e}function x(e){return e.split(`/`).filter(Boolean).pop()||e}function S(e){return e.branch?e.branch:e.detached?e.head?`detached ${e.head}`:`detached`:e.head??`worktree`}function ee(e){let[t,n]=(0,u.useState)(!1),r=e.gitSummary?.loading?`Git ...`:e.gitSummary?.available?`${e.gitSummary.branch??e.gitSummary.head??`detached`} / ${e.gitSummary.dirty?`dirty`:`clean`}`:e.gitSummary?.error?`Git unavailable`:null,i=e.worktreeSummary?.worktrees??[],a=e.rootPath!==null&&(e.worktreeSummary?.loading||e.worktreeSummary?.error||i.length>0),o=e.worktreeSummary?.loading?`Worktrees ...`:i.length>0?`Worktrees ${i.length}`:`Worktrees`;return(0,h.jsxs)(`div`,{className:`folder-toolbar`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-pick-btn`,onClick:e.onPickFolder,disabled:!e.canPickRoot,children:e.canPickRoot?b(e.rootPath):e.label}),r&&(0,h.jsx)(`span`,{className:e.gitSummary?.error?`folder-git-summary is-error`:`folder-git-summary`,title:e.gitSummary?.error??void 0,children:r}),a&&(0,h.jsxs)(`div`,{className:`folder-worktree`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-worktree-btn`,onClick:()=>n(e=>!e),disabled:e.worktreeSummary?.loading||i.length===0,title:e.worktreeSummary?.error??void 0,children:o}),t&&i.length>0&&(0,h.jsx)(`div`,{className:`folder-worktree-menu`,role:`menu`,"aria-label":`Git worktrees`,children:i.map(t=>(0,h.jsxs)(`div`,{className:`folder-worktree-row`,role:`group`,"aria-label":t.path,children:[(0,h.jsxs)(`button`,{type:`button`,className:`folder-worktree-open`,onClick:()=>{n(!1),e.onOpenWorktree?.(t.path)},children:[(0,h.jsxs)(`span`,{className:`folder-worktree-title`,children:[x(t.path),t.current&&(0,h.jsx)(`span`,{className:`folder-worktree-current`,children:`Current`})]}),(0,h.jsxs)(`span`,{className:`folder-worktree-meta`,children:[S(t),` · `,t.path]})]}),(0,h.jsxs)(`span`,{className:`folder-worktree-actions`,children:[(0,h.jsx)(`button`,{type:`button`,onClick:()=>e.onCopyWorktreePath?.(t.path),children:`Copy`}),(0,h.jsx)(`button`,{type:`button`,onClick:()=>e.onRevealWorktreePath?.(t.path),children:`Finder`})]})]},t.path))})]}),e.rootPath!==null&&e.gitSummary?.available&&e.onOpenWorktreeOps&&(0,h.jsx)(`button`,{type:`button`,className:`folder-worktree-btn`,onClick:e.onOpenWorktreeOps,children:`Ops`}),e.rootPath!==null&&(0,h.jsx)(`button`,{type:`button`,className:`folder-refresh`,onClick:e.onRefresh,"aria-label":`Refresh folder`,children:`↻`})]})}async function C(e,t){return await(await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})).json()}async function w(e){let t=e.repoRoot??void 0;try{let n=i()?.git,r=n?await n.previewWorktreeOperation(e.folderPanelRoot,t,e.operation):null,a=r?.ok?r:await C(`/api/dashboard/git/worktree-operation-preview`,{folderPanelRoot:e.folderPanelRoot,...t?{repoRoot:t}:{},operation:e.operation});return{ok:a.ok,preview:a.preview??null,error:a.ok?null:a.error??`Failed to preview git operation`}}catch(e){return{ok:!1,preview:null,error:e instanceof Error?e.message:`Failed to preview git operation`}}}async function T(e){let t=e.repoRoot??void 0;try{let n=i()?.git,r=n?await n.runWorktreeOperation(e.folderPanelRoot,t,e.operation,e.confirmed):null,a=r?.ok?r:await C(`/api/dashboard/git/worktree-operation`,{folderPanelRoot:e.folderPanelRoot,...t?{repoRoot:t}:{},operation:e.operation,confirmed:e.confirmed});return{ok:a.ok,repoRoot:a.repoRoot??null,preview:a.preview??null,stdout:a.stdout??``,worktrees:a.worktrees??[],error:a.ok?null:a.error??`Git operation failed`}}catch(e){return{ok:!1,repoRoot:null,preview:null,stdout:``,worktrees:[],error:e instanceof Error?e.message:`Git operation failed`}}}function E(e){return e.length>0?e.join(` `):`Command unavailable`}function D(e){return e.status===`running`?`Running`:e.status===`succeeded`?`Done`:e.status===`blocked`?`Blocked`:e.status===`cancelled`?`Cancelled`:`Failed`}function te(e){return e.history.length===0?null:(0,h.jsxs)(`div`,{className:`folder-worktree-history`,"aria-label":`Git worktree operation history`,children:[(0,h.jsx)(`div`,{className:`folder-worktree-history__title`,children:`Recent operations`}),e.history.map(t=>(0,h.jsxs)(`div`,{className:`folder-worktree-history__item is-${t.status}`,children:[(0,h.jsxs)(`div`,{className:`folder-worktree-history__main`,children:[(0,h.jsx)(`span`,{className:`folder-worktree-history__label`,children:t.operationLabel}),(0,h.jsx)(`span`,{className:`folder-worktree-history__status`,children:D(t)})]}),(0,h.jsx)(`div`,{className:`folder-worktree-history__command`,title:E(t.commandPreview),children:E(t.commandPreview)}),t.stdout&&(0,h.jsx)(`pre`,{className:`folder-worktree-history__output`,children:t.stdout}),t.stderr&&(0,h.jsx)(`pre`,{className:`folder-worktree-history__output is-error`,children:t.stderr}),t.error&&(0,h.jsx)(`div`,{className:`folder-worktree-history__error`,children:t.error}),(0,h.jsx)(`button`,{type:`button`,className:`folder-worktree-history__retry`,disabled:e.busy||t.status===`running`,onClick:()=>e.onRetry(t.operation),children:`Retry with confirmation`})]},t.id))]})}function ne(e){return e.split(`/`).filter(Boolean).pop()||e}function re(e){return e?e.command.join(` `):`Preview unavailable`}function ie(e){let[t,n]=(0,u.useState)(`worktree-add`),[r,i]=(0,u.useState)(``),[a,o]=(0,u.useState)(``),[s,c]=(0,u.useState)(!1),[l,d]=(0,u.useState)(e.worktrees.find(e=>!e.current)?.path??e.worktrees[0]?.path??``),[f,p]=(0,u.useState)(!1),[m,g]=(0,u.useState)(!1),[_,v]=(0,u.useState)(!1),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(null),ee=(0,u.useCallback)(e=>{n(e.type),g(!1),e.type===`worktree-add`&&(i(e.path),o(e.branch),c(e.createBranch)),e.type===`worktree-remove`&&(d(e.path),p(e.force))},[]),C=(0,u.useMemo)(()=>t===`worktree-add`?{type:t,path:r,branch:a,createBranch:s}:t===`worktree-remove`?{type:t,path:l,force:f}:{type:t},[a,s,f,t,l,r]);(0,u.useEffect)(()=>{let t=!1;return g(!1),v(!0),b(null),S(null),(async()=>{let n=await w({folderPanelRoot:e.folderPanelRoot,repoRoot:e.repoRoot,operation:C});t||(v(!1),S(n.preview),b(n.error))})(),()=>{t=!0}},[C,e.folderPanelRoot,e.repoRoot]);let T=m&&x!==null&&!y&&!_&&!e.busy,E=t===`worktree-remove`;return(0,h.jsx)(`div`,{className:`folder-worktree-ops`,role:`dialog`,"aria-label":`Git worktree operations`,children:(0,h.jsxs)(`div`,{className:`folder-worktree-ops__panel`,children:[(0,h.jsxs)(`div`,{className:`folder-worktree-ops__header`,children:[(0,h.jsx)(`span`,{children:`Worktree Ops`}),(0,h.jsx)(`button`,{type:`button`,onClick:e.onClose,disabled:e.busy,children:`Close`})]}),(0,h.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,h.jsxs)(`label`,{children:[`Operation`,(0,h.jsxs)(`select`,{value:t,onChange:e=>n(e.target.value),disabled:e.busy,children:[(0,h.jsx)(`option`,{value:`worktree-add`,children:`Add worktree`}),(0,h.jsx)(`option`,{value:`worktree-remove`,children:`Remove worktree`}),(0,h.jsx)(`option`,{value:`worktree-prune`,children:`Prune stale worktrees`})]})]})}),t===`worktree-add`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,h.jsxs)(`label`,{children:[`Path`,(0,h.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`/Users/jun/...`,disabled:e.busy})]})}),(0,h.jsxs)(`div`,{className:`folder-worktree-ops__row`,children:[(0,h.jsxs)(`label`,{children:[`Branch / ref`,(0,h.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),placeholder:`feature/name`,disabled:e.busy})]}),(0,h.jsxs)(`label`,{className:`folder-worktree-ops__check`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked),disabled:e.busy}),`Create branch`]})]})]}),E&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,h.jsxs)(`label`,{children:[`Worktree`,(0,h.jsx)(`select`,{value:l,onChange:e=>d(e.target.value),disabled:e.busy,children:e.worktrees.map(e=>(0,h.jsxs)(`option`,{value:e.path,children:[ne(e.path),` - `,e.path]},e.path))})]})}),(0,h.jsxs)(`label`,{className:`folder-worktree-ops__warning`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:f,onChange:e=>p(e.target.checked),disabled:e.busy}),`Force remove dirty worktree`]})]}),(0,h.jsx)(`div`,{className:`folder-worktree-ops__preview`,"aria-busy":_,children:_?`Previewing command...`:re(x)}),y&&(0,h.jsx)(`div`,{className:`folder-worktree-ops__warning`,children:y}),E&&!f&&(0,h.jsx)(`div`,{className:`folder-worktree-ops__hint`,children:`Dirty worktrees are blocked unless force remove is explicitly checked.`}),E&&f&&(0,h.jsx)(`div`,{className:`folder-worktree-ops__hint`,children:`Preview changes to git worktree remove --force for this target.`}),(0,h.jsxs)(`label`,{className:`folder-worktree-ops__check`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:m,onChange:e=>g(e.target.checked),disabled:x===null||!!y||e.busy}),`I understand this will run the previewed git command.`]}),(0,h.jsxs)(`div`,{className:`folder-worktree-ops__actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onClose,disabled:e.busy,children:`Cancel`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn is-primary`,disabled:!T,onClick:()=>e.onRun(C,x),children:e.busy?`Running...`:`Run`})]}),(0,h.jsx)(te,{history:e.history,busy:e.busy,onRetry:ee})]})})}function ae(e){let t=e.lastIndexOf(`/`);return t>0?e.slice(0,t):`/`}function O(e,t){return t===e||t.startsWith(`${e}/`)}function oe(e,t){if(!e)return t;let n=e.endsWith(`/`)?e:`${e}/`;return t.startsWith(n)?t.slice(n.length):t}function se(e,t){let n=new Map(e);for(let e of t)n.delete(e);return n}function ce(e){let t=(0,u.useRef)(null);return(0,u.useEffect)(()=>{let e=t.current;e&&(e.focus(),e.select())},[e.initialName]),(0,h.jsx)(`form`,{className:`folder-inline-editor`,"aria-label":e.label,onSubmit:n=>{n.preventDefault();let r=t.current?.value.trim()??``;r&&e.onSubmit(r)},children:(0,h.jsx)(`input`,{ref:t,className:`folder-inline-editor__input`,defaultValue:e.initialName,disabled:e.busy,onBlur:()=>{e.busy||e.onCancel()},onKeyDown:t=>{t.key===`Escape`&&(t.preventDefault(),e.onCancel()),t.stopPropagation()}})})}function k(){return o()}function le(e){if(typeof HTMLElement>`u`||!(e instanceof HTMLElement))return!1;if(e.isContentEditable)return!0;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||!!e.closest(`[contenteditable="true"], .cm-editor, .ProseMirror, [data-milkdown-root], [role="textbox"]`)}function ue(e,t=k()){return a(t)?e.metaKey:e.ctrlKey}function de(e,t){if(le(e.target??null))return null;let n=e.key.toLowerCase(),r=e.code??``,i=a(t.platform??k())?e.metaKey:e.ctrlKey,o=i&&e.altKey&&!e.shiftKey;return t.chordActive?n===`escape`?`cancel-chord`:i||e.altKey||e.shiftKey?null:n===`p`||r===`KeyP`?`copy-path`:n===`r`||r===`KeyR`?`reveal-path`:`cancel-chord`:i&&!e.altKey&&!e.shiftKey&&(n===`k`||r===`KeyK`)?`start-chord`:o&&(n===`c`||r===`KeyC`)?`copy-path`:o&&(n===`r`||r===`KeyR`)?`reveal-path`:i&&!e.altKey&&n===`c`?e.shiftKey?`copy-path`:`copy-relative-path`:null}function A(e){window.dispatchEvent(new CustomEvent(`jaw-folder-panel-drag`,{detail:{active:e}}))}function fe(e){let t=e.inlineMutation&&e.inlineMutation.kind!==`rename`&&e.inlineMutation.parentDirectory===e.parentPath?e.inlineMutation:null;return(0,h.jsxs)(h.Fragment,{children:[t&&(0,h.jsxs)(`div`,{className:`folder-entry folder-entry-inline`,children:[e.depth>0&&(0,h.jsx)(`span`,{className:`folder-indent`,"aria-hidden":`true`,children:Array.from({length:e.depth},(e,t)=>(0,h.jsx)(`span`,{className:`folder-indent-guide`},t))}),(0,h.jsx)(`span`,{className:`folder-entry-disclosure is-placeholder`,"aria-hidden":`true`,children:`·`}),(0,h.jsx)(ce,{initialName:t.initialName,busy:e.isMutating,label:t.kind===`file`?`New file name`:`New folder name`,onSubmit:e.submitInlineMutation,onCancel:e.cancelInlineMutation})]}),e.entries.map(t=>(0,h.jsxs)(`div`,{children:[(()=>{let n=e.decorationsByPath.get(t.path),r=e.inlineMutation?.kind===`rename`&&e.inlineMutation.targetPath===t.path?e.inlineMutation:null;return(0,h.jsxs)(`div`,{className:[`folder-entry`,`folder-entry-${t.kind}`,n?.className??``,e.selectedPaths.has(t.path)?`is-selected`:``,e.focusedPath===t.path?`is-focused`:``,e.dropTargetPath===t.path?`is-drop-target`:``,e.dragSelection?.primaryEntry.path===t.path?`is-dragging`:``].filter(Boolean).join(` `),role:`treeitem`,"aria-selected":e.selectedPaths.has(t.path),draggable:e.canUseNativeActions,onDragStart:n=>{if(!e.canUseNativeActions)return;let r=e.getDragSelectionFor(t);e.setDragSelection(r),A(!0),n.dataTransfer.effectAllowed=`copyMove`,n.dataTransfer.setData(l,c(r)),n.dataTransfer.setData(`text/plain`,r.entries.map(e=>e.path).join(`
|
|
2
|
+
`))},onDragEnd:()=>{A(!1),e.setDragSelection(null),e.setDropTargetPath(null)},onDragOver:n=>{let r=e.dragSelection?.primaryEntry;r&&t.kind===`directory`&&r.path!==t.path&&(r.kind===`directory`&&O(r.path,t.path)||(n.preventDefault(),n.dataTransfer.dropEffect=`move`,e.setDropTargetPath(t.path)))},onDragLeave:()=>{e.dropTargetPath===t.path&&e.setDropTargetPath(null)},onDrop:n=>{e.dragSelection&&t.kind===`directory`&&(n.preventDefault(),A(!1),e.setDropTargetPath(null),e.requestMove(e.dragSelection.primaryEntry,t))},children:[e.depth>0&&(0,h.jsx)(`span`,{className:`folder-indent`,"aria-hidden":`true`,children:Array.from({length:e.depth},(e,t)=>(0,h.jsx)(`span`,{className:`folder-indent-guide`},t))}),(0,h.jsx)(`button`,{type:`button`,className:t.kind===`directory`?`folder-entry-disclosure`:`folder-entry-disclosure is-placeholder`,"aria-label":t.kind===`directory`?e.expanded.has(t.path)?`Collapse ${t.name}`:`Expand ${t.name}`:void 0,"aria-expanded":t.kind===`directory`?e.expanded.has(t.path):void 0,tabIndex:t.kind===`directory`?0:-1,disabled:t.kind!==`directory`,onClick:n=>{n.stopPropagation(),t.kind===`directory`&&e.toggleEntryExpansion(t)},children:t.kind===`directory`?e.expanded.has(t.path)?`▾`:`▸`:`·`}),r?(0,h.jsx)(ce,{initialName:r.initialName,busy:e.isMutating,label:`Rename`,onSubmit:e.submitInlineMutation,onCancel:e.cancelInlineMutation}):(0,h.jsxs)(`button`,{type:`button`,className:`folder-entry-btn`,"data-folder-path":t.path,onKeyDown:n=>e.handleEntryKeyDown(n,t),onContextMenu:n=>{n.preventDefault(),e.openContextMenu(t,n.clientX,n.clientY)},onClick:n=>e.selectEntry(t,{range:n.shiftKey,toggle:ue(n),preview:!1}),onDoubleClick:()=>{t.kind===`directory`?e.toggleEntryExpansion(t):e.openFileEntry(t)},children:[(0,h.jsx)(`span`,{className:`folder-entry-name`,children:t.name}),n?.label&&(0,h.jsx)(`span`,{className:`folder-entry-git-badge`,title:n.title,"aria-label":n.title??n.label,children:n.label})]})]})})(),t.kind===`directory`&&e.expanded.has(t.path)&&e.childrenCache.has(t.path)&&(0,h.jsx)(fe,{...e,entries:e.childrenCache.get(t.path),parentPath:t.path,depth:e.depth+1})]},t.path))]})}function pe(e){return(0,h.jsxs)(`div`,{className:`folder-unavailable`,children:[(0,h.jsx)(`div`,{className:`folder-unavailable__title`,children:`Folder unavailable`}),(0,h.jsx)(`div`,{className:`folder-unavailable__path`,title:e.path,children:e.path}),(0,h.jsx)(`div`,{className:`folder-unavailable__error`,children:e.error}),(0,h.jsxs)(`div`,{className:`folder-unavailable__actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onOpenFolder,children:`Open Folder`}),(0,h.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onClear,children:`Clear`})]})]})}function me(e){return(0,h.jsxs)(`div`,{ref:e.treeRef,className:e.rootPath===null?`folder-tree folder-empty-root`:`folder-tree`,role:`tree`,"aria-multiselectable":`true`,children:[(0,h.jsx)(fe,{entries:e.entries,parentPath:e.rootPath,depth:0,expanded:e.expanded,childrenCache:e.childrenCache,selectedPaths:e.folderSelection.selectedPaths,focusedPath:e.folderSelection.selection.focusedPath,decorationsByPath:e.decorationsByPath,dropTargetPath:e.dropTargetPath,dragSelection:e.dragSelection,inlineMutation:e.inlineMutation,isMutating:e.isMutating,canUseNativeActions:e.canUseNativeActions,setDragSelection:e.setDragSelection,setDropTargetPath:e.setDropTargetPath,getDragSelectionFor:e.folderSelection.getDragSelectionFor,requestMove:e.requestMove,handleEntryKeyDown:e.handleEntryKeyDown,selectEntry:e.selectEntry,toggleEntryExpansion:e.toggleEntryExpansion,openFileEntry:e.openFileEntry,openContextMenu:e.openContextMenu,submitInlineMutation:e.submitInlineMutation,cancelInlineMutation:e.cancelInlineMutation}),e.rootPath===null&&!e.error&&(0,h.jsx)(`div`,{className:`folder-empty-root__content`,children:`Choose a folder to browse files.`}),e.unavailableRoot&&(0,h.jsx)(pe,{path:e.unavailableRoot.path,error:e.unavailableRoot.error,onOpenFolder:e.onPickFolder,onClear:e.onClearUnavailableRoot}),e.entries.length===0&&!e.inlineMutation&&!e.error&&!e.unavailableRoot&&e.rootPath!==null&&(0,h.jsx)(`div`,{className:`folder-empty`,children:e.sourceKind===`notes-vault`?`No notes in vault`:`Empty directory`})]})}var j={selectedPaths:[],focusedPath:null,anchorPath:null};function he(e,t,n){let r=[],i=e=>{for(let a of e)r.push(a),a.kind===`directory`&&n.has(a.path)&&i(t.get(a.path)??[])};return i(e),r}function ge(e,t){let n=new Set(t),r=e.selectedPaths.filter(e=>n.has(e)),i=e.focusedPath&&n.has(e.focusedPath)?e.focusedPath:r[0]??null;return{selectedPaths:r,focusedPath:i,anchorPath:e.anchorPath&&n.has(e.anchorPath)?e.anchorPath:i}}function M(e,t,n,r={}){if(!n.includes(t))return e;if(r.range&&e.anchorPath&&n.includes(e.anchorPath))return{selectedPaths:ye(n,e.anchorPath,t),focusedPath:t,anchorPath:e.anchorPath};if(r.toggle){let r=new Set(e.selectedPaths);return r.has(t)?r.delete(t):r.add(t),r.size===0&&r.add(t),{selectedPaths:n.filter(e=>r.has(e)),focusedPath:t,anchorPath:t}}return{selectedPaths:[t],focusedPath:t,anchorPath:t}}function _e(e,t,n,r){if(t.length===0)return j;let i=e.focusedPath&&t.includes(e.focusedPath)?e.focusedPath:e.selectedPaths.find(e=>t.includes(e))??t[0],a=t.indexOf(i),o=t[Math.max(0,Math.min(t.length-1,a+(n===`down`?1:-1)))];if(r){let n=e.anchorPath&&t.includes(e.anchorPath)?e.anchorPath:i;return{selectedPaths:ye(t,n,o),focusedPath:o,anchorPath:n}}return{selectedPaths:[o],focusedPath:o,anchorPath:o}}function ve(e,t){return e.filter(e=>t.has(e.path))}function ye(e,t,n){let r=e.indexOf(t),i=e.indexOf(n);if(r<0||i<0)return[n];let a=Math.min(r,i),o=Math.max(r,i);return e.slice(a,o+1)}function N(e){return Array.from(e.entries())}function be(e){return new Map(e)}function xe(e,t){return!e||t&&e.rootPath!==t?null:e}function Se(e){return{rootPath:e.rootPath,entries:e.entries,expandedPaths:Array.from(e.expanded),childrenCache:N(e.childrenCache),selection:e.selection}}function P(e){return/not a git repository/i.test(e)}async function Ce(e,t){return await(await fetch(`/api/dashboard/git/status-map`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({folderPanelRoot:e,...t.repoRoot?{repoRoot:t.repoRoot}:{},options:{includeIgnored:t.includeIgnored!==!1,includeUntracked:t.includeUntracked!==!1}})})).json()}async function F(e,t={}){let n=i()?.git,r=n?await n.getStatusMap(e,t.repoRoot,{includeIgnored:t.includeIgnored!==!1,includeUntracked:t.includeUntracked!==!1}):null,a=r?.ok?r:await Ce(e,t);if(a.ok&&a.status)return{ok:!0,status:a.status};let o=a.error??`Failed to load git status`;return{ok:!1,quiet:P(o),error:o}}var I={available:!1,loading:!1,error:null,repoRoot:null,branch:null,head:null,dirty:!1,decorationsByPath:new Map},we={modified:`M`,added:`A`,deleted:`D`,renamed:`R`,untracked:`?`,ignored:`·`,conflict:`U`,submodule:`S`};function L(e){return{className:`git-${e.kind}`,label:we[e.kind],title:[e.kind,e.staged?`staged`:``,e.unstaged?`unstaged`:``].filter(Boolean).join(` · `)}}function R(e){let t=e.kinds[0]??`modified`;return{className:`git-${t}`,label:`${we[t]}${e.changedCount>1?e.changedCount:``}`,title:`${e.changedCount} changed item${e.changedCount===1?``:`s`}`}}function z(e){let t=new Map;for(let n of e.files)t.set(n.path,L(n));for(let n of e.directories)t.set(n.path,R(n));return{available:!0,loading:!1,error:null,repoRoot:e.repoRoot,branch:e.branch,head:e.head,dirty:e.dirty,decorationsByPath:t}}function Te(e){let{rootPath:t,repoRoot:n,enabled:r,refreshToken:i}=e,[a,o]=(0,u.useState)(I);return(0,u.useEffect)(()=>{if(!r||t===null){o(I);return}let e=!1,i=window.setTimeout(()=>{o(e=>({...e,loading:!0,error:null})),(async()=>{let r=await F(t,{...n?{repoRoot:n}:{},includeIgnored:!0,includeUntracked:!0});if(!e){if(r.ok){o(z(r.status));return}if(n&&/repo root mismatch/i.test(r.error)){let n=await F(t,{includeIgnored:!0,includeUntracked:!0});if(e)return;if(n.ok){o(z(n.status));return}o(n.quiet?I:{...I,error:n.error});return}o(r.quiet?I:{...I,error:r.error})}})()},250);return()=>{e=!0,window.clearTimeout(i)}},[r,i,n,t]),a}function B(e){return/not a git repository/i.test(e)}async function V(e,t){return await(await fetch(`/api/dashboard/git/worktrees`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({folderPanelRoot:e,...t?{repoRoot:t}:{}})})).json()}async function H(e,t){let n=t??void 0;try{let t=i()?.git,r=t?await t.getWorktrees(e,n):null,a=r?.ok?r:await V(e,n);if(a.ok)return{ok:!0,repoRoot:a.repoRoot??n??null,worktrees:a.worktrees??[],error:null};let o=a.error??`Failed to load git worktrees`;return{ok:!1,repoRoot:null,worktrees:[],error:B(o)?null:o}}catch(e){let t=e instanceof Error?e.message:`Failed to load git worktrees`;return{ok:!1,repoRoot:null,worktrees:[],error:B(t)?null:t}}}var U={available:!1,loading:!1,error:null,repoRoot:null,worktrees:[]};function Ee(e){let{folderPanelRoot:t,repoRoot:n,enabled:r,refreshToken:i}=e,[a,o]=(0,u.useState)(0),[s,c]=(0,u.useState)(U),l=(0,u.useCallback)(()=>o(e=>e+1),[]);return(0,u.useEffect)(()=>{if(!r||t===null){c(U);return}let e=!1;return c(e=>({...e,loading:!0,error:null})),(async()=>{let r=await H(t,n??void 0);e||c({available:r.ok&&r.worktrees.length>0,loading:!1,error:r.error,repoRoot:r.repoRoot,worktrees:r.worktrees})})(),()=>{e=!0}},[r,t,a,i,n]),(0,u.useMemo)(()=>({...s,refresh:l}),[l,s])}function De(e=1600){let[t,n]=(0,u.useState)(!1),r=(0,u.useRef)(null),i=(0,u.useCallback)(()=>{r.current!==null&&window.clearTimeout(r.current),r.current=null,n(!1)},[]),a=(0,u.useCallback)(()=>{r.current!==null&&window.clearTimeout(r.current),n(!0),r.current=window.setTimeout(()=>{r.current=null,n(!1)},e)},[e]);return(0,u.useEffect)(()=>()=>i(),[i]),{folderChordActive:t,startFolderChord:a,cancelFolderChord:i}}function Oe(e){let t=e.onPreviewFile,[n,r]=(0,u.useState)(()=>e.initialSelection??j),i=(0,u.useMemo)(()=>he(e.entries,e.childrenCache,e.expanded),[e.childrenCache,e.entries,e.expanded]),a=(0,u.useMemo)(()=>i.map(e=>e.path),[i]),o=(0,u.useMemo)(()=>new Set(n.selectedPaths),[n.selectedPaths]),s=(0,u.useMemo)(()=>ve(i,o),[o,i]),c=n.focusedPath??s[0]?.path??null,l=i.find(e=>e.path===c)??s[0]??null;return(0,u.useEffect)(()=>{r(e=>ge(e,a))},[a]),{selection:n,visibleEntries:i,visiblePaths:a,selectedPaths:o,selectedPath:c,selectedEntries:s,selectedEntry:l,selectEntry:(0,u.useCallback)((e,n={})=>{r(t=>M(t,e.path,a,n)),e.kind===`file`&&n.preview!==!1&&t?.(e.path)},[t,a]),selectOnlyPath:(0,u.useCallback)(e=>{r(e&&a.includes(e)?{selectedPaths:[e],focusedPath:e,anchorPath:e}:j)},[a]),resetSelection:(0,u.useCallback)(()=>{r(j)},[]),moveKeyboardSelection:(0,u.useCallback)((e,t)=>{r(n=>_e(n,a,e,t))},[a]),getDragSelectionFor:(0,u.useCallback)(e=>o.has(e.path)?{primaryEntry:e,entries:s}:{primaryEntry:e,entries:[e]},[s,o])}}var ke=120,Ae=80;function W(e){return e===`watch`?`Updated from file changes`:e===`move`?`Updated after move`:e===`mutation`?`Updated after file change`:e===`git-operation`?`Updated after git operation`:e===`worktree-switch`?`Updated worktree`:e===`root`?`Updated folder root`:`Updated folder`}function je(e){let{rootPath:t,expanded:n,source:r,loadDir:i,loadChildren:a,bumpGitRefresh:o,onGitRefresh:s,refreshWorktrees:c}=e,[l,d]=(0,u.useState)(null),[f,p]=(0,u.useState)(null),[m,h]=(0,u.useState)(!1),g=(0,u.useRef)(!1),_=(0,u.useRef)(null),v=(0,u.useRef)(null),y=(0,u.useRef)(async()=>void 0),b=(0,u.useRef)(!0);(0,u.useEffect)(()=>(b.current=!0,()=>{b.current=!1}),[]);let x=(0,u.useCallback)(()=>{v.current!==null&&(window.clearTimeout(v.current),v.current=null)},[]),S=(0,u.useCallback)(async(e,r={})=>{if(t!==null){if(g.current){let t=_.current;_.current=t?{reason:e,options:{extraPaths:Array.from(new Set([...t.options.extraPaths??[],...r.extraPaths??[]]))}}:{reason:e,options:r};return}g.current=!0,b.current&&(h(!0),d(e===`watch`?`Refreshing changed files...`:`Refreshing folder...`));try{let l=Array.from(new Set([...Array.from(n),...r.extraPaths??[]])).slice(0,Ae);await i(t);for(let e of l)await a(e,{force:!0});if(o(),s?.(),c(),!b.current)return;let u=Math.max(0,n.size-l.length);d(u>0?`${W(e)}; ${u} collapsed/overflow branches skipped`:W(e))}finally{g.current=!1,b.current&&h(!1);let e=_.current;_.current=null,e&&b.current&&y.current(e.reason,e.options)}}},[o,n,a,i,s,c,t]),ee=(0,u.useCallback)(async(e=`manual`,t={})=>{await S(e,t)},[S]);(0,u.useEffect)(()=>{y.current=S},[S]);let C=(0,u.useCallback)(()=>{x(),v.current=window.setTimeout(()=>{v.current=null,y.current(`watch`)},ke)},[x]);return(0,u.useEffect)(()=>{if(!r.watchDir||!r.onDirChange||t===null)return;let e=!1;(async()=>{let n=await r.watchDir?.(t);e||(n&&!n.ok?p(`Watch disabled: ${n.error??`failed to watch directory`}`):p(null))})();let n=r.onDirChange(()=>{C()});return()=>{e=!0,x(),n(),r.unwatchDir?.(t)}},[x,t,C,r]),{isRefreshing:m,refreshStatus:l,watchStatus:f,refreshVisibleTree:ee}}function Me(e){let{selectedFilePath:t,rootPath:n,selectedPath:r,visiblePaths:i,selectOnlyPath:a}=e,o=(0,u.useRef)(null);(0,u.useEffect)(()=>{let e=t??null,s=e!==o.current;s&&(o.current=e),(s||!r)&&e&&n&&O(n,e)&&e!==r&&i.includes(e)&&a(e)},[n,a,t,r,i])}var Ne=8,G=0;function K(){return G+=1,`folder-git-op-${Date.now()}-${G}`}function q(e){return/dirty|uncommitted|confirmation required|not registered|outside home|symlink/i.test(e)}function J(e,t){return{id:K(),operation:e,startedAt:new Date().toISOString(),finishedAt:null,operationLabel:t?.label??e.type,commandPreview:t?.command??[],status:`running`,stdout:``,stderr:``,error:null}}function Y(e,t){return[t,...e].slice(0,Ne)}function Pe(e,t,n){return e.map(e=>e.id===t?n.ok?{...e,finishedAt:new Date().toISOString(),status:`succeeded`,stdout:n.stdout,error:null}:{...e,finishedAt:new Date().toISOString(),status:q(n.error)?`blocked`:`failed`,error:n.error}:e)}function Fe(e){let{rootPath:t,source:n,worktreeState:r,openFolderRoot:i,refreshVisibleTree:a,bumpGitRefresh:o,setActionStatus:c,setError:l}=e,[d,f]=(0,u.useState)(!1),[p,m]=(0,u.useState)(!1),[h,g]=(0,u.useState)([]);return{open:d,setOpen:f,busy:p,history:h,openWorktreeRoot:(0,u.useCallback)(async e=>{await i(e,{registerGitWorktree:!0,repoRoot:r.repoRoot})},[i,r.repoRoot]),copyWorktreePath:(0,u.useCallback)(async e=>{let t=await s(e);t.ok?(c(`Copied worktree path`),l(null)):l(t.error??`Failed to copy worktree path`)},[c,l]),revealWorktreePath:(0,u.useCallback)(async e=>{if(t&&n.registerGitWorktreeRoot&&n.revealPath)try{await n.registerGitWorktreeRoot(t,r.repoRoot??void 0,e),await n.revealPath(e),c(`Opened worktree in Finder`),l(null)}catch(e){l(e.message)}},[t,c,l,n,r.repoRoot]),runWorktreeOperation:(0,u.useCallback)(async(e,n)=>{if(!t)return;let i=J(e,n),s=!1;g(e=>Y(e,i)),m(!0);try{let n=await T({folderPanelRoot:t,repoRoot:r.repoRoot,operation:e,confirmed:!0});if(!n.ok){let e=n.error??`Git operation failed`;throw g(t=>Pe(t,i.id,{ok:!1,error:e})),s=!0,Error(e)}g(e=>Pe(e,i.id,{ok:!0,stdout:n.stdout})),s=!0,c(n.preview?.label??`Git worktree operation completed`),l(null),f(!1),r.refresh(),o(),await a(`git-operation`)}catch(e){let t=e.message;s||g(e=>Pe(e,i.id,{ok:!1,error:t})),l(t)}finally{m(!1)}},[o,a,t,c,l,r])}}function Ie(e){let[t,n]=(0,u.useState)(null),[r,i]=(0,u.useState)(!1),a=(0,u.useCallback)(()=>e.rootPath?e.selectedEntry?e.selectedEntry.kind===`directory`?e.selectedEntry.path:ae(e.selectedEntry.path):e.rootPath:null,[e.rootPath,e.selectedEntry]),o=(0,u.useCallback)(t=>{let r=a();r&&(t!==`file`||e.source.createFile)&&(t!==`directory`||e.source.createFolder)&&(e.setExpanded(e=>new Set(e).add(r)),n({kind:t,parentDirectory:r,initialName:t===`file`?`untitled.txt`:`untitled`}),e.closeContextMenu())},[e,a]),s=(0,u.useCallback)(async(t,r,a)=>{let o=t===`file`?e.source.createFile:e.source.createFolder;if(!o)return;let s=t===`file`?`New file name`:`New folder name`;if(!a.trim()){e.setError(`${s} required`);return}i(!0);try{let i=(await o(r,a.trim())).entry;t===`directory`&&e.selectedEntry?.path===r&&e.setExpanded(e=>new Set(e).add(r)),e.setActionStatus(t===`file`?`Created file`:`Created folder`),e.setError(null),n(null),await e.refreshAfterMutation(r,i?.path??null)}catch(t){e.setError(t.message)}finally{i(!1)}},[e]),c=(0,u.useCallback)(()=>{e.selectedEntry&&e.source.renamePath&&(n({kind:`rename`,parentDirectory:ae(e.selectedEntry.path),targetPath:e.selectedEntry.path,initialName:e.selectedEntry.name}),e.closeContextMenu())},[e]),l=(0,u.useCallback)(async(t,r)=>{if(!t.targetPath||!e.source.renamePath)return;let a=r.trim();if(!a||a===t.initialName){n(null);return}i(!0);try{let r=await e.source.renamePath(t.targetPath,a),i=t.parentDirectory,o=r.entry?.path??null,s=o?e.renamedPreviewPath(e.selectedFilePath,t.targetPath,o):null;e.setActionStatus(`Renamed`),e.setError(null),n(null),await e.refreshAfterMutation(i,o,[t.targetPath]),s&&e.onPreviewFile?.(s)}catch(t){e.setError(t.message)}finally{i(!1)}},[e]);return{inlineMutation:t,isMutating:r,requestCreateEntry:o,requestRenameSelectedEntry:c,submitInlineMutation:(0,u.useCallback)(e=>{t&&(t.kind===`rename`?l(t,e):s(t.kind,t.parentDirectory,e))},[t,s,l]),cancelInlineMutation:()=>n(null)}}function Le(e){let[t,n]=(0,u.useState)(null),r=(0,u.useCallback)(()=>n(null),[]),i=(0,u.useCallback)((t,r,i)=>{e.selectedPaths.has(t.path)||e.selectOnlyPath(t.path),n({entry:t,x:r,y:i})},[e]);return(0,u.useEffect)(()=>{if(!t)return;let e=e=>{e.key===`Escape`&&n(null)},i=()=>{document.activeElement instanceof HTMLIFrameElement&&n(null)};return window.addEventListener(`pointerdown`,r),window.addEventListener(`keydown`,e),window.addEventListener(`blur`,i),()=>{window.removeEventListener(`pointerdown`,r),window.removeEventListener(`keydown`,e),window.removeEventListener(`blur`,i)}},[r,t]),{contextMenu:t,closeContextMenu:r,openContextMenu:i}}function Re(){return i()?.folder??null}function ze(e,t,n){return!e||!O(t,e)?null:e===t?n:`${n}${e.slice(t.length)}`}function Be(e){let t=Re(),n=e.repoRootPath??null,r=e.gitRefreshVersion??0,i=e.onGitRefresh,a=e.onRepoRootChange,o=(0,u.useRef)(!1),c=(0,u.useMemo)(()=>t?p(t):m(e.notesTree??[],e.notesRoot??null),[t,e.notesRoot,e.notesTree]),l=(0,u.useMemo)(()=>xe(e.sessionState??null,e.externalRootPath??null),[e.externalRootPath,e.sessionState]),[d,f]=(0,u.useState)(()=>l?.rootPath??null),[_,v]=(0,u.useState)(()=>l?.entries??[]),[b,x]=(0,u.useState)(()=>new Set(l?.expandedPaths??[])),[S,C]=(0,u.useState)(()=>l?be(l.childrenCache):new Map),[w,T]=(0,u.useState)(null),[E,D]=(0,u.useState)(null),[te,ne]=(0,u.useState)(null),[re,ce]=(0,u.useState)(null),[k,le]=(0,u.useState)(null),[ue,A]=(0,u.useState)(!1),[fe,pe]=(0,u.useState)(!1),[j,he]=(0,u.useState)(!1),[ge,M]=(0,u.useState)(null),[_e,ve]=(0,u.useState)(0),ye=(0,u.useRef)(null),N=(0,u.useRef)(null),{folderChordActive:P,startFolderChord:Ce,cancelFolderChord:F}=De(),I=e.onPreviewFile,we=e.selectedFilePath,L=Oe({entries:_,childrenCache:S,expanded:b,initialSelection:l?.selection,onPreviewFile:I}),R=L.selectedEntry,z=L.selectedEntries,B=Le({selectedPaths:L.selectedPaths,selectOnlyPath:L.selectOnlyPath});Me({selectedFilePath:e.selectedFilePath,rootPath:d,selectedPath:L.selectedPath,visiblePaths:L.visiblePaths,selectOnlyPath:L.selectOnlyPath}),(0,u.useEffect)(()=>{e.onSessionStateChange?.(Se({rootPath:d,entries:_,expanded:b,childrenCache:S,selection:L.selection}))},[S,_,b,L.selection,e.onSessionStateChange,d]);let V=(0,u.useCallback)(async e=>{try{let t=await c.listDir(e);return v(t),T(null),D(t=>t?.path===e?null:t),{ok:!0}}catch(e){let t=e.message;return T(t),{ok:!1,error:t}}},[c]),H=(0,u.useCallback)(async(t,n={})=>{try{let r=t;if(n.registerGitWorktree){if(!d)throw Error(`Current folder root required`);await c.registerGitWorktreeRoot?.(d,n.repoRoot??void 0,t)}else c.authorizeRoot&&(r=await c.authorizeRoot(t));d&&c.unwatchDir&&c.unwatchDir(d),e.onRootChange?.(r),f(r),x(new Set),C(new Map),v([]),L.resetSelection(),T(null),D(null);let i=await V(r);i.ok||D({path:r,error:i.error}),ve(e=>e+1)}catch(e){T(e.message)}},[L,V,e,d,c]),U=(0,u.useCallback)(async(e,t={})=>{if(t.force||!S.has(e))try{let t=await c.listDir(e);C(n=>new Map(n).set(e,t))}catch(e){T(e.message)}},[S,c]),ke=(0,u.useCallback)(()=>{ve(e=>e+1)},[]),Ae=(0,u.useCallback)(e=>{x(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),U(e)),n})},[U]),W=(0,u.useCallback)(async()=>{if(c.pickRoot)try{let e=await c.pickRoot();e&&await H(e)}catch(e){T(e.message)}},[H,c]),Ne=(0,u.useCallback)(()=>{e.onRootChange?.(null),f(null),v([]),L.resetSelection(),D(null),T(null)},[L,e]);(0,u.useEffect)(()=>{if(o.current||d!==null||e.externalRootPath)return;let t=!1;return(async()=>{let e=await c.getInitialRoot();t||(o.current=!0,f(e),e!==null&&await V(e))})(),()=>{t=!0}},[V,e.externalRootPath,d,c]),(0,u.useEffect)(()=>{let t=e.externalRootPath;if(t){if(t===d){if(_.length>0||N.current===t)return;N.current=t}else N.current=null;H(t)}},[_.length,H,e.externalRootPath,d]);let G=Te({rootPath:d,enabled:c.kind===`electron-folder`,refreshToken:_e+r}),K=Ee({folderPanelRoot:d,repoRoot:G.repoRoot??n,enabled:c.kind===`electron-folder`&&G.available,refreshToken:_e+r}),q=je({rootPath:d,expanded:b,source:c,loadDir:V,loadChildren:U,bumpGitRefresh:ke,onGitRefresh:i,refreshWorktrees:K.refresh}),J=q.refreshVisibleTree,Y=Fe({rootPath:d,source:c,worktreeState:K,openFolderRoot:H,refreshVisibleTree:J,bumpGitRefresh:ke,setActionStatus:M,setError:T});(0,u.useEffect)(()=>{G.repoRoot&&G.repoRoot!==n&&a?.(G.repoRoot)},[G.repoRoot,a,n]);let Pe=c.kind===`electron-folder`,Be=!!(c.createFile&&c.createFolder&&c.renamePath),Ve=(0,u.useCallback)(async(e,t)=>{if(!d)return;let n=ae(e);C(e=>se(e,[n,t])),await J(`move`,{extraPaths:[n,t]})},[J,d]),He=(0,u.useCallback)(async(e,t,n=[])=>{d&&(C(t=>se(t,[e,...n])),await J(`mutation`,{extraPaths:[e]}),t&&L.selectOnlyPath(t))},[L,J,d]),Ue=(0,u.useCallback)(async e=>{if(c.movePath){A(!0);try{let t=(await c.movePath(e.source.path,e.target.path)).moved?.to??e.source.path;L.selectOnlyPath(t),M(`Moved ${e.source.name}`),le(null),await Ve(e.source.path,e.target.path)}catch(e){T(e.message)}finally{A(!1)}}},[L,Ve,c]),We=(0,u.useCallback)((e,t)=>{if(!c.movePath||e.path===t.path||e.kind===`directory`&&O(e.path,t.path))return;let n={source:e,target:t};if(fe){Ue(n);return}he(!1),le(n)},[Ue,fe,c.movePath]),X=Ie({rootPath:d,selectedEntry:R,selectedFilePath:we,source:c,folderSelection:L,refreshAfterMutation:He,renamedPreviewPath:ze,onPreviewFile:I,closeContextMenu:B.closeContextMenu,setExpanded:x,setActionStatus:M,setError:T}),Z=(0,u.useCallback)((e,t)=>{L.selectEntry(e,t),B.closeContextMenu()},[B,L]),Ge=(0,u.useCallback)(e=>{e.kind===`file`&&Z(e)},[Z]),Q=(0,u.useCallback)(e=>{L.selectEntry(e,{preview:!1}),B.closeContextMenu(),e.kind===`directory`&&Ae(e.path)},[B,L,Ae]),Ke=(0,u.useCallback)(async(e,t)=>{let n=t===`relative`?oe(d,e.path):e.path,r=await s(n);r.ok?(L.selectOnlyPath(e.path),M(t===`relative`?`Copied relative path`:`Copied path`),T(null)):T(r.error??`Failed to copy path`)},[L,d]),qe=(0,u.useCallback)(async e=>{if(c.revealPath)try{await c.revealPath(e.path),L.selectOnlyPath(e.path),M(e.kind===`directory`?`Opened folder in Finder`:`Revealed file in Finder`),T(null)}catch(e){T(e.message)}},[L,c]),$=(0,u.useCallback)(async e=>{if(z.length===0)return;let t=z.map(t=>e===`relative`?oe(d,t.path):t.path).join(`
|
|
3
|
+
`),n=await s(t);n.ok?(M(e===`relative`?`Copied relative paths`:`Copied paths`),T(null)):T(n.error??`Failed to copy paths`)},[d,z]),Je=(0,u.useCallback)(async()=>{R&&await qe(R)},[qe,R]),Ye=(0,u.useCallback)((e,t)=>{if(e.key===`ArrowUp`||e.key===`ArrowDown`){e.preventDefault(),e.stopPropagation(),L.moveKeyboardSelection(e.key===`ArrowDown`?`down`:`up`,e.shiftKey);return}if(e.key===`ArrowRight`){e.preventDefault(),t.kind===`directory`&&!b.has(t.path)&&Q(t);return}if(e.key===`ArrowLeft`){e.preventDefault(),t.kind===`directory`&&b.has(t.path)&&Q(t);return}let n=de(e,{chordActive:P});if(n){e.preventDefault(),e.stopPropagation(),n===`start-chord`&&Ce(),n===`cancel-chord`&&F();let r=L.selectedPaths.has(t.path);n===`copy-path`&&(F(),r?$(`absolute`):Ke(t,`absolute`)),n===`copy-relative-path`&&(F(),r?$(`relative`):Ke(t,`relative`)),n===`reveal-path`&&(F(),r?Je():qe(t));return}if(e.key===`Enter`){e.preventDefault(),t.kind===`directory`?Q(t):Z(t);return}e.key===` `&&(e.preventDefault(),Z(t))},[F,Ke,$,b,P,L,qe,Je,Z,Ce,Q]);return(0,u.useEffect)(()=>{let e=L.selection.focusedPath;if(!e)return;let t=ye.current?.querySelectorAll(`.folder-entry-btn[data-folder-path]`);Array.from(t??[]).find(t=>t.dataset.folderPath===e)?.focus()},[L.selection.focusedPath]),(0,h.jsxs)(`div`,{className:`folder-panel`,children:[(0,h.jsx)(ee,{canPickRoot:c.canPickRoot,label:c.label,rootPath:d,onPickFolder:()=>void W(),onRefresh:()=>{d!==null&&J(`manual`)},gitSummary:c.kind===`electron-folder`?G:void 0,worktreeSummary:c.kind===`electron-folder`?K:void 0,onOpenWorktree:e=>void Y.openWorktreeRoot(e),onCopyWorktreePath:e=>void Y.copyWorktreePath(e),onRevealWorktreePath:e=>void Y.revealWorktreePath(e),onOpenWorktreeOps:()=>Y.setOpen(!0)}),d!==null&&(0,h.jsx)(g,{hasSelection:!!R,canReveal:!!c.revealPath,onCopyPath:()=>void $(`absolute`),onCopyRelativePath:()=>void $(`relative`),onReveal:()=>void Je(),canMutate:Be,onCreateFile:()=>X.requestCreateEntry(`file`),onCreateFolder:()=>X.requestCreateEntry(`directory`),onRename:()=>X.requestRenameSelectedEntry()}),w&&(0,h.jsx)(`div`,{className:`folder-error`,children:w}),q.watchStatus&&!w&&(0,h.jsx)(`div`,{className:`folder-status`,children:q.watchStatus}),q.refreshStatus&&!w&&!q.watchStatus&&(0,h.jsx)(`div`,{className:`folder-status`,children:q.refreshStatus}),ge&&!w&&!q.refreshStatus&&!q.watchStatus&&(0,h.jsx)(`div`,{className:`folder-status`,children:ge}),P&&(0,h.jsx)(`div`,{className:`folder-shortcut-hint`,children:`Folder shortcut: press P to copy path or R to reveal`}),Y.open&&d!==null&&(0,h.jsx)(ie,{folderPanelRoot:d,repoRoot:K.repoRoot,worktrees:K.worktrees,busy:Y.busy,history:Y.history,onRun:(e,t)=>void Y.runWorktreeOperation(e,t),onClose:()=>Y.setOpen(!1)}),(0,h.jsx)(me,{treeRef:ye,rootPath:d,error:w,entries:_,expanded:b,childrenCache:S,folderSelection:L,decorationsByPath:G.decorationsByPath,dropTargetPath:re,dragSelection:te,inlineMutation:X.inlineMutation,isMutating:X.isMutating,canUseNativeActions:Pe,sourceKind:c.kind,unavailableRoot:E,setDragSelection:ne,setDropTargetPath:ce,requestMove:We,handleEntryKeyDown:Ye,selectEntry:Z,toggleEntryExpansion:Q,openFileEntry:Ge,openContextMenu:B.openContextMenu,submitInlineMutation:X.submitInlineMutation,cancelInlineMutation:X.cancelInlineMutation,onPickFolder:()=>void W(),onClearUnavailableRoot:Ne}),(0,h.jsx)(y,{pendingMove:k,contextMenu:B.contextMenu,isMoving:ue,skipMoveConfirmChecked:j,canReveal:!!c.revealPath,canRefresh:!!d,canMutate:Be,onSkipMoveConfirmCheckedChange:he,onCancelMove:()=>le(null),onConfirmMove:()=>{k&&(j&&pe(!0),Ue(k))},onCopyContextPath:()=>{B.closeContextMenu(),$(`absolute`)},onCopyContextRelativePath:()=>{B.closeContextMenu(),$(`relative`)},onRevealContextPath:()=>{B.closeContextMenu(),Je()},onRefreshContext:()=>{B.closeContextMenu(),J(`manual`)},onCreateContextFile:()=>X.requestCreateEntry(`file`),onCreateContextFolder:()=>X.requestCreateEntry(`directory`),onRenameContextPath:()=>X.requestRenameSelectedEntry()})]})}export{Be as FolderPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t,t as n}from"./cli-engine-NdU0lzs_.js";import{n as r,t as i}from"./jsx-runtime-CkEUZM6i.js";import{i as a,l as o,n as s,o as c,r as l,s as u,t as d,u as f}from"./page-shell-DfinU3mb.js";import{a as p,i as m,s as h}from"./fields-CicOWY-X.js";import{a as g,d as _}from"./agent-meta-94LMwZZK.js";import{t as v}from"./path-utils-B6vBr0DD.js";var y=e(r(),1),b=i(),x=[{value:`every`,label:`every (interval)`},{value:`cron`,label:`cron expression`}];function S({job:e,index:t,bodyError:n,timeZoneError:r,onChange:i,onRemove:a}){let s=(0,y.useId)(),c=e.schedule.kind,l=e.schedule.timeZone??``,u=e.name||`Job ${t+1}`;return(0,b.jsxs)(`div`,{className:`settings-card-group`,role:`group`,"aria-label":`Heartbeat job ${t+1}${e.name?` (${e.name})`:``}`,children:[(0,b.jsxs)(`div`,{className:`settings-card-actions`,children:[(0,b.jsxs)(`div`,{className:`settings-card-actions-status`,children:[(0,b.jsx)(`strong`,{children:u}),` `,e.enabled?(0,b.jsx)(o,{tone:`ok`,children:`Enabled`}):(0,b.jsx)(o,{tone:`neutral`,children:`Disabled`}),` `,(0,b.jsx)(o,{tone:`neutral`,children:c===`every`?`interval`:`cron`})]}),(0,b.jsx)(`div`,{className:`settings-card-actions-buttons`,children:(0,b.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:a,"aria-label":`Remove heartbeat job ${u}`,children:`Remove job`})})]}),(0,b.jsx)(p,{id:`${s}-enabled`,label:`Enabled`,value:e.enabled,onChange:e=>i({enabled:e})}),(0,b.jsx)(h,{id:`${s}-name`,label:`Name`,value:e.name,placeholder:`Morning summary`,onChange:e=>i({name:e})}),(0,b.jsx)(m,{id:`${s}-kind`,label:`Schedule kind`,value:c,options:x,onChange:e=>{e===`every`&&c!==`every`?i({schedule:{kind:`every`,minutes:30,...l?{timeZone:l}:{}}}):e===`cron`&&c!==`cron`&&i({schedule:{kind:`cron`,cron:`0 9 * * *`,...l?{timeZone:l}:{}}})}}),c===`every`?(0,b.jsx)(h,{id:`${s}-minutes`,label:`Every (minutes)`,value:String(e.schedule.minutes??``),placeholder:`30`,error:n??null,onChange:e=>{let t=e.trim(),n=Number(t);i({schedule:{kind:`every`,minutes:Number.isFinite(n)?n:NaN,...l?{timeZone:l}:{}}})}}):(0,b.jsx)(h,{id:`${s}-cron`,label:`Cron expression`,value:e.schedule.cron??``,placeholder:`0 9 * * *`,error:n??null,onChange:e=>i({schedule:{kind:`cron`,cron:e,...l?{timeZone:l}:{}}})}),(0,b.jsx)(h,{id:`${s}-tz`,label:`Time zone (optional)`,value:l,placeholder:`Asia/Seoul`,error:r??null,onChange:t=>{let n=t.trim();i(c===`every`?{schedule:{kind:`every`,minutes:e.schedule.minutes,...n?{timeZone:n}:{}}}:{schedule:{kind:`cron`,cron:e.schedule.cron,...n?{timeZone:n}:{}}})}}),(0,b.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`${s}-prompt`,children:[(0,b.jsx)(`span`,{className:`settings-field-label`,children:`Prompt`}),(0,b.jsx)(`textarea`,{id:`${s}-prompt`,rows:3,value:e.prompt,placeholder:`What should this heartbeat do?`,onChange:e=>i({prompt:e.target.value})})]})]})}var C=/^\d+[smh]$/,w=/^([01]\d|2[0-3]):[0-5]\d$/,T=[`claude`,`codex`,`codex-app`,`copilot`,`cursor`,`kiro-code`,`gemini`,`grok`,`opencode`],E=[`heartbeat.enabled`,`heartbeat.every`,`heartbeat.activeHours.start`,`heartbeat.activeHours.end`,`heartbeat.target`],D=[`heartbeat.jobs`,`heartbeat.md`];function O(e){return C.test(e.trim())}function k(e){return w.test(e.trim())}var A=0;function j(e=Date.now()){return{id:`hb_${e}_${A++}`,name:``,enabled:!0,schedule:{kind:`every`,minutes:30},prompt:``}}function M(e){return e.startsWith(`heartbeat.`)&&e!==`heartbeat.jobs`&&e!==`heartbeat.md`}function N(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=typeof n.id==`string`&&n.id.trim()?n.id.trim():`hb_unknown_${t}`,i=typeof n.name==`string`?n.name:``,a=n.enabled!==!1,o=typeof n.prompt==`string`?n.prompt:``,s=n.schedule,c;if(s&&typeof s==`object`){let e=s;c=e.kind===`cron`&&typeof e.cron==`string`?{kind:`cron`,cron:e.cron,...typeof e.timeZone==`string`&&e.timeZone?{timeZone:e.timeZone}:{}}:{kind:`every`,minutes:typeof e.minutes==`number`?e.minutes:30,...typeof e.timeZone==`string`&&e.timeZone?{timeZone:e.timeZone}:{}}}else c={kind:`every`,minutes:30};return{id:r,name:i,enabled:a,schedule:c,prompt:o}}function P(e){if(!e||typeof e!=`object`)return[];let t=e.jobs;return Array.isArray(t)?t.map((e,t)=>N(e,t)).filter(e=>e!==null):[]}function F(e){if(e.kind===`every`){let t=e.minutes;return!Number.isFinite(t)||t<=0||!Number.isInteger(t)?`Minutes must be a positive integer`:null}let t=e.cron?.trim()??``;return t?t.split(/\s+/).length<5?`Cron must have at least 5 fields`:null:`Cron expression required`}function I(e){return e.some(e=>F(e.schedule)!==null)}function L({port:e,client:t,dirty:n,snapshot:r}){let[i,o]=(0,y.useState)([]),[s,u]=(0,y.useState)([]),[f,p]=(0,y.useState)(!1),[m,h]=(0,y.useState)(null);(0,y.useEffect)(()=>{if(r.kind!==`ready`)return;let e=P(r.data);o(e),u(e)},[r]),(0,y.useEffect)(()=>{n.set(`heartbeat.jobs`,{value:i,original:s,valid:!I(i)})},[i,s,n]),(0,y.useEffect)(()=>()=>{n.remove(`heartbeat.jobs`)},[n]);let g=(0,y.useCallback)(async()=>{if(I(i)){h(`Fix invalid schedules before saving.`);return}p(!0),h(null);try{let e=P(await t.put(`/api/heartbeat`,{jobs:i}));o(e),u(e),n.remove(`heartbeat.jobs`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{p(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,b.jsx)(c,{children:`Loading jobs…`});if(r.kind===`offline`)return(0,b.jsx)(l,{port:e});if(r.kind===`error`)return(0,b.jsx)(d,{message:r.message});let _=n.pending.has(`heartbeat.jobs`),v=I(i);function x(e,t){o(n=>n.map((n,r)=>r===e?{...n,...t}:n))}function C(){o(e=>[...e,j()])}function w(e){o(t=>t.filter((t,n)=>n!==e))}return(0,b.jsxs)(b.Fragment,{children:[i.length===0?(0,b.jsx)(c,{children:`No jobs configured. Add one below.`}):(0,b.jsx)(b.Fragment,{children:i.map((e,t)=>(0,b.jsx)(S,{job:e,index:t,bodyError:F(e.schedule),onChange:e=>x(t,e),onRemove:()=>w(t)},e.id))}),(0,b.jsxs)(a,{children:[(0,b.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:C,children:`+ Add job`}),(0,b.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void g(),disabled:f||!_||v,children:f?`Saving…`:`Apply jobs`})]}),m?(0,b.jsx)(c,{tone:`error`,role:`alert`,children:m}):null]})}function R({port:e,client:t,dirty:n,snapshot:r}){let[i,o]=(0,y.useState)(``),[s,u]=(0,y.useState)(``),[f,p]=(0,y.useState)(!1),[m,h]=(0,y.useState)(null);(0,y.useEffect)(()=>{if(r.kind!==`ready`)return;let e=r.data.content??``;o(e),u(e)},[r]),(0,y.useEffect)(()=>{n.set(`heartbeat.md`,{value:i,original:s,valid:!0})},[i,s,n]),(0,y.useEffect)(()=>()=>{n.remove(`heartbeat.md`)},[n]);let g=(0,y.useCallback)(async()=>{p(!0),h(null);try{await t.put(`/api/heartbeat-md`,{content:i}),u(i),n.remove(`heartbeat.md`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{p(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,b.jsx)(c,{children:`Loading template…`});if(r.kind===`offline`)return(0,b.jsx)(l,{port:e});if(r.kind===`error`)return(0,b.jsx)(d,{message:r.message});let _=n.pending.has(`heartbeat.md`);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`hb-md`,children:[(0,b.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,b.jsx)(`textarea`,{id:`hb-md`,rows:10,spellCheck:!1,value:i,onChange:e=>o(e.target.value),style:{fontFamily:`var(--font-mono, ui-monospace, monospace)`}})]}),(0,b.jsx)(a,{children:(0,b.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void g(),disabled:f||!_,children:f?`Saving…`:`Save template`})}),m?(0,b.jsx)(c,{tone:`error`,role:`alert`,children:m}):null]})}function z({port:e,client:r,dirty:i,registerSave:a}){let o=f(r,`/api/settings`),c=f(r,`/api/heartbeat`),x=f(r,`/api/heartbeat-md`),[S,C]=(0,y.useState)(!1),[w,D]=(0,y.useState)(`30m`),[A,j]=(0,y.useState)(`08:00`),[N,P]=(0,y.useState)(`22:00`),[F,I]=(0,y.useState)(`all`);(0,y.useEffect)(()=>{if(o.state.kind!==`ready`)return;let e=o.state.data.heartbeat||{};C(!!e.enabled),D(typeof e.every==`string`?e.every:`30m`),j(e.activeHours?.start??`08:00`),P(e.activeHours?.end??`22:00`),I(typeof e.target==`string`?e.target:`all`)},[o.state]),(0,y.useEffect)(()=>()=>{for(let e of E)i.remove(e)},[i]);let z=(0,y.useMemo)(()=>o.state.kind===`ready`&&o.state.data.heartbeat||{},[o.state]),B=(0,y.useCallback)((e,t)=>i.set(e,t),[i]),V=(0,y.useRef)(0),H=(0,y.useCallback)(async()=>{let e=i.saveBundle(),t={};for(let[n,r]of Object.entries(e))M(n)&&(t[n]=r);if(Object.keys(t).length===0)return;let n=++V.current,a=v(t),s=await r.put(`/api/settings`,a);if(n!==V.current)return;let c=s&&typeof s==`object`&&`data`in s?s.data:s;for(let e of E)i.remove(e);o.setData(c);let l=c.heartbeat||{};C(!!l.enabled),D(typeof l.every==`string`?l.every:`30m`),j(l.activeHours?.start??`08:00`),P(l.activeHours?.end??`22:00`),I(typeof l.target==`string`?l.target:`all`),await o.refresh()},[r,i,o]);if((0,y.useEffect)(()=>{if(a)return a(H),()=>a(null)},[a,H]),o.state.kind===`loading`)return(0,b.jsx)(s,{});if(o.state.kind===`offline`)return(0,b.jsx)(l,{port:e});if(o.state.kind===`error`)return(0,b.jsx)(d,{message:o.state.message});let U=O(w)?null:"Use the form `<n>s|m|h`, e.g. `30m`",W=k(A)?null:`Use HH:MM (24h)`,G=k(N)?null:`Use HH:MM (24h)`,K=o.state.data.perCli||{},q=_(Object.keys(K)),J=[{value:`all`,label:`all (broadcast)`},...(q.length>0?q:[...T]).map(e=>({value:e,label:g(e).label||e}))];return!n(F)&&!J.some(e=>e.value===F)&&J.push({value:F,label:`${g(F).label||F} (legacy)`}),(0,b.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),H()},children:[(0,b.jsxs)(u,{title:`Heartbeat`,hint:`Background prompts the agent runs on a schedule.`,children:[(0,b.jsx)(p,{id:`hb-enabled`,label:`Heartbeat enabled`,value:S,onChange:e=>{C(e),B(`heartbeat.enabled`,{value:e,original:!!z.enabled,valid:!0})}}),(0,b.jsx)(h,{id:`hb-every`,label:`Default interval`,value:w,placeholder:`30m`,error:U,onChange:e=>{D(e),B(`heartbeat.every`,{value:e,original:z.every??`30m`,valid:O(e)})}}),(0,b.jsx)(h,{id:`hb-start`,label:`Active hours start`,value:A,placeholder:`08:00`,error:W,onChange:e=>{j(e),B(`heartbeat.activeHours.start`,{value:e,original:z.activeHours?.start??`08:00`,valid:k(e)})}}),(0,b.jsx)(h,{id:`hb-end`,label:`Active hours end`,value:N,placeholder:`22:00`,error:G,onChange:e=>{P(e),B(`heartbeat.activeHours.end`,{value:e,original:z.activeHours?.end??`22:00`,valid:k(e)})}}),(0,b.jsx)(m,{id:`hb-target`,label:`Target`,value:F,missingValueLabel:n(F)?t(F):void 0,error:n(F)?`The saved target runtime is retired. Choose an available target.`:null,options:J,onChange:e=>{I(e),B(`heartbeat.target`,{value:e,original:z.target??`all`,valid:!0})}})]}),(0,b.jsx)(u,{title:`Jobs`,hint:`Each job replaces the entire heartbeat.json on save. Concurrent edits from multiple browsers will overwrite — last write wins.`,children:(0,b.jsx)(L,{port:e,client:r,dirty:i,snapshot:c.state})}),(0,b.jsx)(u,{title:`Default heartbeat prompt template`,hint:`Markdown shown to the agent when a heartbeat fires without a job-specific prompt.`,children:(0,b.jsx)(R,{port:e,client:r,dirty:i,snapshot:x.state})})]})}export{D as PAGE_LOCAL_KEYS,E as SECTION_A_KEYS,T as TARGET_FALLBACK,z as default,M as isHeartbeatSettingsKey,F as jobScheduleBodyError,I as jobsHaveErrors,j as makeDefaultJob,P as normalizeJobsResponse,k as validateHHMM,O as validateInterval};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-CkEUZM6i.js";var t=e();function n({children:e,tone:n=`warn`,role:r=`note`}){return(0,t.jsx)(`p`,{className:n===`warn`?`settings-card-note settings-card-note-warn`:`settings-card-note settings-card-note-muted`,role:r,children:e})}export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./MarkdownRenderer-DzN66XVb.js";export{e as MarkdownRenderer};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-DSSkXCir.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,r as t,t as n}from"./rolldown-runtime-hePW80VL.js";import{A as r}from"./vendor-render-Cmfl_oW8.js";import{t as i}from"./preload-helper-CfbQpVni.js";import{i as a,n as o,o as s,r as c,t as l}from"./mermaid-preprocess-D8xe5R2A.js";import{t as u}from"./react-C_pPTFsM.js";import{t as d}from"./jsx-runtime-NZYk81nU.js";import{t as f}from"./copy-text-WsUHYigB.js";import{A as p,C as m,D as ee,E as h,O as g,S as te,T as ne,a as re,b as ie,c as ae,d as oe,f as se,i as ce,j as le,l as ue,m as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,u as ve,w as ye,x as be}from"./wiki-link-resolver-CbJATnBn.js";function xe(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function Se(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}var Ce=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,we=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Te={};function Ee(e,t){return((t||Te).jsx?we:Ce).test(e)}var De=/[ \t\n\f\r]/g;function Oe(e){return typeof e==`object`?e.type===`text`&&ke(e.value):ke(e)}function ke(e){return e.replace(De,``)===``}var _=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};_.prototype.normal={},_.prototype.property={},_.prototype.space=void 0;function Ae(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new _(n,r,t)}function v(e){return e.toLowerCase()}var y=class{constructor(e,t){this.attribute=t,this.property=e}};y.prototype.attribute=``,y.prototype.booleanish=!1,y.prototype.boolean=!1,y.prototype.commaOrSpaceSeparated=!1,y.prototype.commaSeparated=!1,y.prototype.defined=!1,y.prototype.mustUseProperty=!1,y.prototype.number=!1,y.prototype.overloadedBoolean=!1,y.prototype.property=``,y.prototype.spaceSeparated=!1,y.prototype.space=void 0;var je=e({boolean:()=>b,booleanish:()=>x,commaOrSpaceSeparated:()=>E,commaSeparated:()=>T,number:()=>C,overloadedBoolean:()=>S,spaceSeparated:()=>w}),Me=0,b=D(),x=D(),S=D(),C=D(),w=D(),T=D(),E=D();function D(){return 2**++Me}var O=Object.keys(je),k=class extends y{constructor(e,t,n,r){let i=-1;if(super(e,t),Ne(this,`space`,r),typeof n==`number`)for(;++i<O.length;){let e=O[i];Ne(this,O[i],(n&je[e])===je[e])}}};k.prototype.defined=!0;function Ne(e,t,n){n&&(e[t]=n)}function A(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new k(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[v(r)]=r,n[v(a.attribute)]=r}return new _(t,n,e.space)}var Pe=A({properties:{ariaActiveDescendant:null,ariaAtomic:x,ariaAutoComplete:null,ariaBusy:x,ariaChecked:x,ariaColCount:C,ariaColIndex:C,ariaColSpan:C,ariaControls:w,ariaCurrent:null,ariaDescribedBy:w,ariaDetails:null,ariaDisabled:x,ariaDropEffect:w,ariaErrorMessage:null,ariaExpanded:x,ariaFlowTo:w,ariaGrabbed:x,ariaHasPopup:null,ariaHidden:x,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:w,ariaLevel:C,ariaLive:null,ariaModal:x,ariaMultiLine:x,ariaMultiSelectable:x,ariaOrientation:null,ariaOwns:w,ariaPlaceholder:null,ariaPosInSet:C,ariaPressed:x,ariaReadOnly:x,ariaRelevant:null,ariaRequired:x,ariaRoleDescription:w,ariaRowCount:C,ariaRowIndex:C,ariaRowSpan:C,ariaSelected:x,ariaSetSize:C,ariaSort:null,ariaValueMax:C,ariaValueMin:C,ariaValueNow:C,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function Fe(e,t){return t in e?e[t]:t}function Ie(e,t){return Fe(e,t.toLowerCase())}var Le=A({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:T,acceptCharset:w,accessKey:w,action:null,allow:null,allowFullScreen:b,allowPaymentRequest:b,allowUserMedia:b,alt:null,as:null,async:b,autoCapitalize:null,autoComplete:w,autoFocus:b,autoPlay:b,blocking:w,capture:null,charSet:null,checked:b,cite:null,className:w,cols:C,colSpan:null,content:null,contentEditable:x,controls:b,controlsList:w,coords:C|T,crossOrigin:null,data:null,dateTime:null,decoding:null,default:b,defer:b,dir:null,dirName:null,disabled:b,download:S,draggable:x,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:b,formTarget:null,headers:w,height:C,hidden:S,high:C,href:null,hrefLang:null,htmlFor:w,httpEquiv:w,id:null,imageSizes:null,imageSrcSet:null,inert:b,inputMode:null,integrity:null,is:null,isMap:b,itemId:null,itemProp:w,itemRef:w,itemScope:b,itemType:w,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:b,low:C,manifest:null,max:null,maxLength:C,media:null,method:null,min:null,minLength:C,multiple:b,muted:b,name:null,nonce:null,noModule:b,noValidate:b,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:b,optimum:C,pattern:null,ping:w,placeholder:null,playsInline:b,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:b,referrerPolicy:null,rel:w,required:b,reversed:b,rows:C,rowSpan:C,sandbox:w,scope:null,scoped:b,seamless:b,selected:b,shadowRootClonable:b,shadowRootDelegatesFocus:b,shadowRootMode:null,shape:null,size:C,sizes:null,slot:null,span:C,spellCheck:x,src:null,srcDoc:null,srcLang:null,srcSet:null,start:C,step:null,style:null,tabIndex:C,target:null,title:null,translate:null,type:null,typeMustMatch:b,useMap:null,value:x,width:C,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:w,axis:null,background:null,bgColor:null,border:C,borderColor:null,bottomMargin:C,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:b,declare:b,event:null,face:null,frame:null,frameBorder:null,hSpace:C,leftMargin:C,link:null,longDesc:null,lowSrc:null,marginHeight:C,marginWidth:C,noResize:b,noHref:b,noShade:b,noWrap:b,object:null,profile:null,prompt:null,rev:null,rightMargin:C,rules:null,scheme:null,scrolling:x,standby:null,summary:null,text:null,topMargin:C,valueType:null,version:null,vAlign:null,vLink:null,vSpace:C,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:b,disableRemotePlayback:b,prefix:null,property:null,results:C,security:null,unselectable:null},space:`html`,transform:Ie}),Re=A({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:E,accentHeight:C,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:C,amplitude:C,arabicForm:null,ascent:C,attributeName:null,attributeType:null,azimuth:C,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:C,by:null,calcMode:null,capHeight:C,className:w,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:C,diffuseConstant:C,direction:null,display:null,dur:null,divisor:C,dominantBaseline:null,download:b,dx:null,dy:null,edgeMode:null,editable:null,elevation:C,enableBackground:null,end:null,event:null,exponent:C,externalResourcesRequired:null,fill:null,fillOpacity:C,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:T,g2:T,glyphName:T,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:C,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:C,horizOriginX:C,horizOriginY:C,id:null,ideographic:C,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:C,k:C,k1:C,k2:C,k3:C,k4:C,kernelMatrix:E,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:C,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:C,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:C,overlineThickness:C,paintOrder:null,panose1:null,path:null,pathLength:C,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:w,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:C,pointsAtY:C,pointsAtZ:C,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:E,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:E,rev:E,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:E,requiredFeatures:E,requiredFonts:E,requiredFormats:E,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:C,specularExponent:C,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:C,strikethroughThickness:C,string:null,stroke:null,strokeDashArray:E,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:C,strokeOpacity:C,strokeWidth:null,style:null,surfaceScale:C,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:E,tabIndex:C,tableValues:null,target:null,targetX:C,targetY:C,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:E,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:C,underlineThickness:C,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:C,values:null,vAlphabetic:C,vMathematical:C,vectorEffect:null,vHanging:C,vIdeographic:C,version:null,vertAdvY:C,vertOriginX:C,vertOriginY:C,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:C,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:Fe}),ze=A({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),Be=A({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:Ie}),Ve=A({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),He={classId:`classID`,dataType:`datatype`,itemId:`itemID`,strokeDashArray:`strokeDasharray`,strokeDashOffset:`strokeDashoffset`,strokeLineCap:`strokeLinecap`,strokeLineJoin:`strokeLinejoin`,strokeMiterLimit:`strokeMiterlimit`,typeOf:`typeof`,xLinkActuate:`xlinkActuate`,xLinkArcRole:`xlinkArcrole`,xLinkHref:`xlinkHref`,xLinkRole:`xlinkRole`,xLinkShow:`xlinkShow`,xLinkTitle:`xlinkTitle`,xLinkType:`xlinkType`,xmlnsXLink:`xmlnsXlink`},Ue=/[A-Z]/g,We=/-[a-z]/g,Ge=/^data[-\w.:]+$/i;function Ke(e,t){let n=v(t),r=t,i=y;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)===`data`&&Ge.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(We,Je);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!We.test(e)){let n=e.replace(Ue,qe);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=k}return new i(r,t)}function qe(e){return`-`+e.toLowerCase()}function Je(e){return e.charAt(1).toUpperCase()}var Ye=Ae([Pe,Le,ze,Be,Ve],`html`),j=Ae([Pe,Re,ze,Be,Ve],`svg`);function Xe(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function Ze(e){return e.join(` `).trim()}var Qe=n(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,u=1;function f(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(`
|
|
2
|
+
import{n as e,r as t,t as n}from"./rolldown-runtime-hePW80VL.js";import{A as r}from"./vendor-render-Cmfl_oW8.js";import{t as i}from"./preload-helper-CfbQpVni.js";import{i as a,n as o,o as s,r as c,t as l}from"./mermaid-preprocess-D8xe5R2A.js";import{n as u,t as d}from"./jsx-runtime-CkEUZM6i.js";import{t as f}from"./copy-text-WsUHYigB.js";import{A as p,C as m,D as ee,E as h,O as g,S as te,T as ne,a as re,b as ie,c as ae,d as oe,f as se,i as ce,j as le,l as ue,m as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,u as ve,w as ye,x as be}from"./wiki-link-resolver-CbJATnBn.js";function xe(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function Se(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}var Ce=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,we=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Te={};function Ee(e,t){return((t||Te).jsx?we:Ce).test(e)}var De=/[ \t\n\f\r]/g;function Oe(e){return typeof e==`object`?e.type===`text`&&ke(e.value):ke(e)}function ke(e){return e.replace(De,``)===``}var _=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};_.prototype.normal={},_.prototype.property={},_.prototype.space=void 0;function Ae(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new _(n,r,t)}function v(e){return e.toLowerCase()}var y=class{constructor(e,t){this.attribute=t,this.property=e}};y.prototype.attribute=``,y.prototype.booleanish=!1,y.prototype.boolean=!1,y.prototype.commaOrSpaceSeparated=!1,y.prototype.commaSeparated=!1,y.prototype.defined=!1,y.prototype.mustUseProperty=!1,y.prototype.number=!1,y.prototype.overloadedBoolean=!1,y.prototype.property=``,y.prototype.spaceSeparated=!1,y.prototype.space=void 0;var je=e({boolean:()=>b,booleanish:()=>x,commaOrSpaceSeparated:()=>E,commaSeparated:()=>T,number:()=>C,overloadedBoolean:()=>S,spaceSeparated:()=>w}),Me=0,b=D(),x=D(),S=D(),C=D(),w=D(),T=D(),E=D();function D(){return 2**++Me}var O=Object.keys(je),k=class extends y{constructor(e,t,n,r){let i=-1;if(super(e,t),Ne(this,`space`,r),typeof n==`number`)for(;++i<O.length;){let e=O[i];Ne(this,O[i],(n&je[e])===je[e])}}};k.prototype.defined=!0;function Ne(e,t,n){n&&(e[t]=n)}function A(e){let t={},n={};for(let[r,i]of Object.entries(e.properties)){let a=new k(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),t[r]=a,n[v(r)]=r,n[v(a.attribute)]=r}return new _(t,n,e.space)}var Pe=A({properties:{ariaActiveDescendant:null,ariaAtomic:x,ariaAutoComplete:null,ariaBusy:x,ariaChecked:x,ariaColCount:C,ariaColIndex:C,ariaColSpan:C,ariaControls:w,ariaCurrent:null,ariaDescribedBy:w,ariaDetails:null,ariaDisabled:x,ariaDropEffect:w,ariaErrorMessage:null,ariaExpanded:x,ariaFlowTo:w,ariaGrabbed:x,ariaHasPopup:null,ariaHidden:x,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:w,ariaLevel:C,ariaLive:null,ariaModal:x,ariaMultiLine:x,ariaMultiSelectable:x,ariaOrientation:null,ariaOwns:w,ariaPlaceholder:null,ariaPosInSet:C,ariaPressed:x,ariaReadOnly:x,ariaRelevant:null,ariaRequired:x,ariaRoleDescription:w,ariaRowCount:C,ariaRowIndex:C,ariaRowSpan:C,ariaSelected:x,ariaSetSize:C,ariaSort:null,ariaValueMax:C,ariaValueMin:C,ariaValueNow:C,ariaValueText:null,role:null},transform(e,t){return t===`role`?t:`aria-`+t.slice(4).toLowerCase()}});function Fe(e,t){return t in e?e[t]:t}function Ie(e,t){return Fe(e,t.toLowerCase())}var Le=A({attributes:{acceptcharset:`accept-charset`,classname:`class`,htmlfor:`for`,httpequiv:`http-equiv`},mustUseProperty:[`checked`,`multiple`,`muted`,`selected`],properties:{abbr:null,accept:T,acceptCharset:w,accessKey:w,action:null,allow:null,allowFullScreen:b,allowPaymentRequest:b,allowUserMedia:b,alt:null,as:null,async:b,autoCapitalize:null,autoComplete:w,autoFocus:b,autoPlay:b,blocking:w,capture:null,charSet:null,checked:b,cite:null,className:w,cols:C,colSpan:null,content:null,contentEditable:x,controls:b,controlsList:w,coords:C|T,crossOrigin:null,data:null,dateTime:null,decoding:null,default:b,defer:b,dir:null,dirName:null,disabled:b,download:S,draggable:x,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:b,formTarget:null,headers:w,height:C,hidden:S,high:C,href:null,hrefLang:null,htmlFor:w,httpEquiv:w,id:null,imageSizes:null,imageSrcSet:null,inert:b,inputMode:null,integrity:null,is:null,isMap:b,itemId:null,itemProp:w,itemRef:w,itemScope:b,itemType:w,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:b,low:C,manifest:null,max:null,maxLength:C,media:null,method:null,min:null,minLength:C,multiple:b,muted:b,name:null,nonce:null,noModule:b,noValidate:b,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:b,optimum:C,pattern:null,ping:w,placeholder:null,playsInline:b,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:b,referrerPolicy:null,rel:w,required:b,reversed:b,rows:C,rowSpan:C,sandbox:w,scope:null,scoped:b,seamless:b,selected:b,shadowRootClonable:b,shadowRootDelegatesFocus:b,shadowRootMode:null,shape:null,size:C,sizes:null,slot:null,span:C,spellCheck:x,src:null,srcDoc:null,srcLang:null,srcSet:null,start:C,step:null,style:null,tabIndex:C,target:null,title:null,translate:null,type:null,typeMustMatch:b,useMap:null,value:x,width:C,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:w,axis:null,background:null,bgColor:null,border:C,borderColor:null,bottomMargin:C,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:b,declare:b,event:null,face:null,frame:null,frameBorder:null,hSpace:C,leftMargin:C,link:null,longDesc:null,lowSrc:null,marginHeight:C,marginWidth:C,noResize:b,noHref:b,noShade:b,noWrap:b,object:null,profile:null,prompt:null,rev:null,rightMargin:C,rules:null,scheme:null,scrolling:x,standby:null,summary:null,text:null,topMargin:C,valueType:null,version:null,vAlign:null,vLink:null,vSpace:C,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:b,disableRemotePlayback:b,prefix:null,property:null,results:C,security:null,unselectable:null},space:`html`,transform:Ie}),Re=A({attributes:{accentHeight:`accent-height`,alignmentBaseline:`alignment-baseline`,arabicForm:`arabic-form`,baselineShift:`baseline-shift`,capHeight:`cap-height`,className:`class`,clipPath:`clip-path`,clipRule:`clip-rule`,colorInterpolation:`color-interpolation`,colorInterpolationFilters:`color-interpolation-filters`,colorProfile:`color-profile`,colorRendering:`color-rendering`,crossOrigin:`crossorigin`,dataType:`datatype`,dominantBaseline:`dominant-baseline`,enableBackground:`enable-background`,fillOpacity:`fill-opacity`,fillRule:`fill-rule`,floodColor:`flood-color`,floodOpacity:`flood-opacity`,fontFamily:`font-family`,fontSize:`font-size`,fontSizeAdjust:`font-size-adjust`,fontStretch:`font-stretch`,fontStyle:`font-style`,fontVariant:`font-variant`,fontWeight:`font-weight`,glyphName:`glyph-name`,glyphOrientationHorizontal:`glyph-orientation-horizontal`,glyphOrientationVertical:`glyph-orientation-vertical`,hrefLang:`hreflang`,horizAdvX:`horiz-adv-x`,horizOriginX:`horiz-origin-x`,horizOriginY:`horiz-origin-y`,imageRendering:`image-rendering`,letterSpacing:`letter-spacing`,lightingColor:`lighting-color`,markerEnd:`marker-end`,markerMid:`marker-mid`,markerStart:`marker-start`,navDown:`nav-down`,navDownLeft:`nav-down-left`,navDownRight:`nav-down-right`,navLeft:`nav-left`,navNext:`nav-next`,navPrev:`nav-prev`,navRight:`nav-right`,navUp:`nav-up`,navUpLeft:`nav-up-left`,navUpRight:`nav-up-right`,onAbort:`onabort`,onActivate:`onactivate`,onAfterPrint:`onafterprint`,onBeforePrint:`onbeforeprint`,onBegin:`onbegin`,onCancel:`oncancel`,onCanPlay:`oncanplay`,onCanPlayThrough:`oncanplaythrough`,onChange:`onchange`,onClick:`onclick`,onClose:`onclose`,onCopy:`oncopy`,onCueChange:`oncuechange`,onCut:`oncut`,onDblClick:`ondblclick`,onDrag:`ondrag`,onDragEnd:`ondragend`,onDragEnter:`ondragenter`,onDragExit:`ondragexit`,onDragLeave:`ondragleave`,onDragOver:`ondragover`,onDragStart:`ondragstart`,onDrop:`ondrop`,onDurationChange:`ondurationchange`,onEmptied:`onemptied`,onEnd:`onend`,onEnded:`onended`,onError:`onerror`,onFocus:`onfocus`,onFocusIn:`onfocusin`,onFocusOut:`onfocusout`,onHashChange:`onhashchange`,onInput:`oninput`,onInvalid:`oninvalid`,onKeyDown:`onkeydown`,onKeyPress:`onkeypress`,onKeyUp:`onkeyup`,onLoad:`onload`,onLoadedData:`onloadeddata`,onLoadedMetadata:`onloadedmetadata`,onLoadStart:`onloadstart`,onMessage:`onmessage`,onMouseDown:`onmousedown`,onMouseEnter:`onmouseenter`,onMouseLeave:`onmouseleave`,onMouseMove:`onmousemove`,onMouseOut:`onmouseout`,onMouseOver:`onmouseover`,onMouseUp:`onmouseup`,onMouseWheel:`onmousewheel`,onOffline:`onoffline`,onOnline:`ononline`,onPageHide:`onpagehide`,onPageShow:`onpageshow`,onPaste:`onpaste`,onPause:`onpause`,onPlay:`onplay`,onPlaying:`onplaying`,onPopState:`onpopstate`,onProgress:`onprogress`,onRateChange:`onratechange`,onRepeat:`onrepeat`,onReset:`onreset`,onResize:`onresize`,onScroll:`onscroll`,onSeeked:`onseeked`,onSeeking:`onseeking`,onSelect:`onselect`,onShow:`onshow`,onStalled:`onstalled`,onStorage:`onstorage`,onSubmit:`onsubmit`,onSuspend:`onsuspend`,onTimeUpdate:`ontimeupdate`,onToggle:`ontoggle`,onUnload:`onunload`,onVolumeChange:`onvolumechange`,onWaiting:`onwaiting`,onZoom:`onzoom`,overlinePosition:`overline-position`,overlineThickness:`overline-thickness`,paintOrder:`paint-order`,panose1:`panose-1`,pointerEvents:`pointer-events`,referrerPolicy:`referrerpolicy`,renderingIntent:`rendering-intent`,shapeRendering:`shape-rendering`,stopColor:`stop-color`,stopOpacity:`stop-opacity`,strikethroughPosition:`strikethrough-position`,strikethroughThickness:`strikethrough-thickness`,strokeDashArray:`stroke-dasharray`,strokeDashOffset:`stroke-dashoffset`,strokeLineCap:`stroke-linecap`,strokeLineJoin:`stroke-linejoin`,strokeMiterLimit:`stroke-miterlimit`,strokeOpacity:`stroke-opacity`,strokeWidth:`stroke-width`,tabIndex:`tabindex`,textAnchor:`text-anchor`,textDecoration:`text-decoration`,textRendering:`text-rendering`,transformOrigin:`transform-origin`,typeOf:`typeof`,underlinePosition:`underline-position`,underlineThickness:`underline-thickness`,unicodeBidi:`unicode-bidi`,unicodeRange:`unicode-range`,unitsPerEm:`units-per-em`,vAlphabetic:`v-alphabetic`,vHanging:`v-hanging`,vIdeographic:`v-ideographic`,vMathematical:`v-mathematical`,vectorEffect:`vector-effect`,vertAdvY:`vert-adv-y`,vertOriginX:`vert-origin-x`,vertOriginY:`vert-origin-y`,wordSpacing:`word-spacing`,writingMode:`writing-mode`,xHeight:`x-height`,playbackOrder:`playbackorder`,timelineBegin:`timelinebegin`},properties:{about:E,accentHeight:C,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:C,amplitude:C,arabicForm:null,ascent:C,attributeName:null,attributeType:null,azimuth:C,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:C,by:null,calcMode:null,capHeight:C,className:w,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:C,diffuseConstant:C,direction:null,display:null,dur:null,divisor:C,dominantBaseline:null,download:b,dx:null,dy:null,edgeMode:null,editable:null,elevation:C,enableBackground:null,end:null,event:null,exponent:C,externalResourcesRequired:null,fill:null,fillOpacity:C,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:T,g2:T,glyphName:T,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:C,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:C,horizOriginX:C,horizOriginY:C,id:null,ideographic:C,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:C,k:C,k1:C,k2:C,k3:C,k4:C,kernelMatrix:E,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:C,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:C,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:C,overlineThickness:C,paintOrder:null,panose1:null,path:null,pathLength:C,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:w,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:C,pointsAtY:C,pointsAtZ:C,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:E,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:E,rev:E,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:E,requiredFeatures:E,requiredFonts:E,requiredFormats:E,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:C,specularExponent:C,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:C,strikethroughThickness:C,string:null,stroke:null,strokeDashArray:E,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:C,strokeOpacity:C,strokeWidth:null,style:null,surfaceScale:C,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:E,tabIndex:C,tableValues:null,target:null,targetX:C,targetY:C,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:E,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:C,underlineThickness:C,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:C,values:null,vAlphabetic:C,vMathematical:C,vectorEffect:null,vHanging:C,vIdeographic:C,version:null,vertAdvY:C,vertOriginX:C,vertOriginY:C,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:C,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:`svg`,transform:Fe}),ze=A({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:`xlink`,transform(e,t){return`xlink:`+t.slice(5).toLowerCase()}}),Be=A({attributes:{xmlnsxlink:`xmlns:xlink`},properties:{xmlnsXLink:null,xmlns:null},space:`xmlns`,transform:Ie}),Ve=A({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:`xml`,transform(e,t){return`xml:`+t.slice(3).toLowerCase()}}),He={classId:`classID`,dataType:`datatype`,itemId:`itemID`,strokeDashArray:`strokeDasharray`,strokeDashOffset:`strokeDashoffset`,strokeLineCap:`strokeLinecap`,strokeLineJoin:`strokeLinejoin`,strokeMiterLimit:`strokeMiterlimit`,typeOf:`typeof`,xLinkActuate:`xlinkActuate`,xLinkArcRole:`xlinkArcrole`,xLinkHref:`xlinkHref`,xLinkRole:`xlinkRole`,xLinkShow:`xlinkShow`,xLinkTitle:`xlinkTitle`,xLinkType:`xlinkType`,xmlnsXLink:`xmlnsXlink`},Ue=/[A-Z]/g,We=/-[a-z]/g,Ge=/^data[-\w.:]+$/i;function Ke(e,t){let n=v(t),r=t,i=y;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)===`data`&&Ge.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(We,Je);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!We.test(e)){let n=e.replace(Ue,qe);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=k}return new i(r,t)}function qe(e){return`-`+e.toLowerCase()}function Je(e){return e.charAt(1).toUpperCase()}var Ye=Ae([Pe,Le,ze,Be,Ve],`html`),j=Ae([Pe,Re,ze,Be,Ve],`svg`);function Xe(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function Ze(e){return e.join(` `).trim()}var Qe=n(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,u=1;function f(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(`
|
|
3
3
|
`);u=~n?e.length-n:u+e.length}function p(){var e={line:l,column:u};return function(t){return t.position=new m(e),g(),t}}function m(e){this.start=e,this.end={line:l,column:u},this.source=t.source}m.prototype.content=e;function ee(n){var r=Error(t.source+`:`+l+`:`+u+`: `+n);if(r.reason=n,r.filename=t.source,r.line=l,r.column=u,r.source=e,!t.silent)throw r}function h(t){var n=t.exec(e);if(n){var r=n[0];return f(r),e=e.slice(r.length),n}}function g(){h(i)}function te(e){var t;for(e||=[];t=ne();)t!==!1&&e.push(t);return e}function ne(){var t=p();if(e.charAt(0)==`/`&&e.charAt(1)==`*`){for(var n=2;e.charAt(n)!=``&&(e.charAt(n)!=`*`||e.charAt(n+1)!=`/`);)++n;if(n+=2,e.charAt(n-1)===``)return ee(`End of comment missing`);var r=e.slice(2,n-2);return u+=2,f(r),e=e.slice(n),u+=2,t({type:`comment`,comment:r})}}function re(){var e=p(),t=h(a);if(t){if(ne(),!h(o))return ee(`property missing ':'`);var r=h(s),i=e({type:`declaration`,property:d(t[0].replace(n,``)),value:r?d(r[0].replace(n,``)):``});return h(c),i}}function ie(){var e=[];te(e);for(var t;t=re();)t!==!1&&(e.push(t),te(e));return e}return g(),ie()}function d(e){return e?e.replace(l,``):``}t.exports=u})),$e=n((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.default=r;var n=t(Qe());function r(e,t){let r=null;if(!e||typeof e!=`string`)return r;let i=(0,n.default)(e),a=typeof t==`function`;return i.forEach(e=>{if(e.type!==`declaration`)return;let{property:n,value:i}=e;a?t(n,i,e):i&&(r||={},r[n]=i)}),r}})),et=n((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.camelCase=void 0;var t=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,o=function(e){return!e||r.test(e)||t.test(e)},s=function(e,t){return t.toUpperCase()},c=function(e,t){return`${t}-`};e.camelCase=function(e,t){return t===void 0&&(t={}),o(e)?e:(e=e.toLowerCase(),e=t.reactCompat?e.replace(a,c):e.replace(i,c),e.replace(n,s))}})),tt=n(((e,t)=>{var n=(e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})($e()),r=et();function i(e,t){var i={};return!e||typeof e!=`string`||(0,n.default)(e,function(e,n){e&&n&&(i[(0,r.camelCase)(e,t)]=n)}),i}i.default=i,t.exports=i})),nt=rt(`end`),M=rt(`start`);function rt(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function it(e){let t=M(e),n=nt(e);if(t&&n)return{start:t,end:n}}var at=t(tt(),1),N={}.hasOwnProperty,ot=new Map,st=/[A-Z]/g,ct=new Set([`table`,`tbody`,`thead`,`tfoot`,`tr`]),lt=new Set([`td`,`th`]),ut=`https://github.com/syntax-tree/hast-util-to-jsx-runtime`;function dt(e,t){if(!t||t.Fragment===void 0)throw TypeError("Expected `Fragment` in options");let n=t.filePath||void 0,r;if(t.development){if(typeof t.jsxDEV!=`function`)throw TypeError("Expected `jsxDEV` in options when `development: true`");r=xt(n,t.jsxDEV)}else{if(typeof t.jsx!=`function`)throw TypeError("Expected `jsx` in production options");if(typeof t.jsxs!=`function`)throw TypeError("Expected `jsxs` in production options");r=bt(n,t.jsx,t.jsxs)}let i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||`react`,evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space===`svg`?j:Ye,stylePropertyNameCase:t.stylePropertyNameCase||`dom`,tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},a=ft(i,e,void 0);return a&&typeof a!=`string`?a:i.create(e,i.Fragment,{children:a||void 0},void 0)}function ft(e,t,n){if(t.type===`element`)return pt(e,t,n);if(t.type===`mdxFlowExpression`||t.type===`mdxTextExpression`)return mt(e,t);if(t.type===`mdxJsxFlowElement`||t.type===`mdxJsxTextElement`)return gt(e,t,n);if(t.type===`mdxjsEsm`)return ht(e,t);if(t.type===`root`)return _t(e,t,n);if(t.type===`text`)return vt(e,t)}function pt(e,t,n){let r=e.schema,i=r;t.tagName.toLowerCase()===`svg`&&r.space===`html`&&(i=j,e.schema=i),e.ancestors.push(t);let a=Dt(e,t.tagName,!1),o=St(e,t),s=wt(e,t);return ct.has(t.tagName)&&(s=s.filter(function(e){return typeof e!=`string`||!Oe(e)})),yt(e,o,a,t),P(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function mt(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}F(e,t.position)}function ht(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);F(e,t.position)}function gt(e,t,n){let r=e.schema,i=r;t.name===`svg`&&r.space===`html`&&(i=j,e.schema=i),e.ancestors.push(t);let a=t.name===null?e.Fragment:Dt(e,t.name,!0),o=Ct(e,t),s=wt(e,t);return yt(e,o,a,t),P(o,s),e.ancestors.pop(),e.schema=r,e.create(t,a,o,n)}function _t(e,t,n){let r={};return P(r,wt(e,t)),e.create(t,e.Fragment,r,n)}function vt(e,t){return t.value}function yt(e,t,n,r){typeof n!=`string`&&n!==e.Fragment&&e.passNode&&(t.node=r)}function P(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function bt(e,t,n){return r;function r(e,r,i,a){let o=Array.isArray(i.children)?n:t;return a?o(r,i,a):o(r,i)}}function xt(e,t){return n;function n(n,r,i,a){let o=Array.isArray(i.children),s=M(n);return t(r,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function St(e,t){let n={},r,i;for(i in t.properties)if(i!==`children`&&N.call(t.properties,i)){let a=Tt(e,i,t.properties[i]);if(a){let[i,o]=a;e.tableCellAlignToStyle&&i===`align`&&typeof o==`string`&<.has(t.tagName)?r=o:n[i]=o}}if(r){let t=n.style||={};t[e.stylePropertyNameCase===`css`?`text-align`:`textAlign`]=r}return n}function Ct(e,t){let n={};for(let r of t.attributes)if(r.type===`mdxJsxExpressionAttribute`){if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];t.type;let i=t.expression;i.type;let a=i.properties[0];a.type,Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else F(e,t.position)}else{let i=r.name,a;if(r.value&&typeof r.value==`object`){if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];t.type,a=e.evaluater.evaluateExpression(t.expression)}else F(e,t.position)}else a=r.value===null||r.value;n[i]=a}return n}function wt(e,t){let n=[],r=-1,i=e.passKeys?new Map:ot;for(;++r<t.children.length;){let a=t.children[r],o;if(e.passKeys){let e=a.type===`element`?a.tagName:a.type===`mdxJsxFlowElement`||a.type===`mdxJsxTextElement`?a.name:void 0;if(e){let t=i.get(e)||0;o=e+`-`+t,i.set(e,t+1)}}let s=ft(e,a,o);s!==void 0&&n.push(s)}return n}function Tt(e,t,n){let r=Ke(e.schema,t);if(!(n==null||typeof n==`number`&&Number.isNaN(n))){if(Array.isArray(n)&&(n=r.commaSeparated?Se(n):Ze(n)),r.property===`style`){let t=typeof n==`object`?n:Et(e,String(n));return e.stylePropertyNameCase===`css`&&(t=Ot(t)),[`style`,t]}return[e.elementAttributeNameCase===`react`&&r.space?He[r.property]||r.property:r.attribute,n]}}function Et(e,t){try{return(0,at.default)(t,{reactCompat:!0})}catch(t){if(e.ignoreInvalidStyle)return{};let n=t,r=new le("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:`style`,source:`hast-util-to-jsx-runtime`});throw r.file=e.filePath||void 0,r.url=ut+`#cannot-parse-style-attribute`,r}}function Dt(e,t,n){let r;if(!n)r={type:`Literal`,value:t};else if(t.includes(`.`)){let e=t.split(`.`),n=-1,i;for(;++n<e.length;){let t=Ee(e[n])?{type:`Identifier`,name:e[n]}:{type:`Literal`,value:e[n]};i=i?{type:`MemberExpression`,object:i,property:t,computed:!!(n&&t.type===`Literal`),optional:!1}:t}r=i}else r=Ee(t)&&!/^[a-z]/.test(t)?{type:`Identifier`,name:t}:{type:`Literal`,value:t};if(r.type===`Literal`){let t=r.value;return N.call(e.components,t)?e.components[t]:t}if(e.evaluater)return e.evaluater.evaluateExpression(r);F(e)}function F(e,t){let n=new le("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:`mdx-estree`,source:`hast-util-to-jsx-runtime`});throw n.file=e.filePath||void 0,n.url=ut+`#cannot-handle-mdx-estrees-without-createevaluater`,n}function Ot(e){let t={},n;for(n in e)N.call(e,n)&&(t[kt(n)]=e[n]);return t}function kt(e){let t=e.replace(st,At);return t.slice(0,3)===`ms-`&&(t=`-`+t),t}function At(e){return`-`+e.toLowerCase()}var jt={action:[`form`],cite:[`blockquote`,`del`,`ins`,`q`],data:[`object`],formAction:[`button`,`input`],href:[`a`,`area`,`base`,`link`],icon:[`menuitem`],itemId:null,manifest:[`html`],ping:[`a`,`area`],poster:[`video`],src:[`audio`,`embed`,`iframe`,`img`,`input`,`script`,`source`,`track`,`video`]};function I(e){let t=[],n=-1,r=0,i=0;for(;++n<e.length;){let a=e.charCodeAt(n),o=``;if(a===37&&p(e.charCodeAt(n+1))&&p(e.charCodeAt(n+2)))i=2;else if(a<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(a))||(o=String.fromCharCode(a));else if(a>55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function Mt(e,t){let n={type:`element`,tagName:`blockquote`,properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function Nt(e,t){let n={type:`element`,tagName:`br`,properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:`text`,value:`
|
|
4
4
|
`}]}function Pt(e,t){let n=t.value?t.value+`
|
|
5
5
|
`:``,r={},i=t.lang?t.lang.split(/\s+/):[];i.length>0&&(r.className=[`language-`+i[0]]);let a={type:`element`,tagName:`code`,properties:r,children:[{type:`text`,value:n}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:`element`,tagName:`pre`,properties:{},children:[a]},e.patch(t,a),a}function Ft(e,t){let n={type:`element`,tagName:`del`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function It(e,t){let n={type:`element`,tagName:`em`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Lt(e,t){let n=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,r=String(t.identifier).toUpperCase(),i=I(r.toLowerCase()),a=e.footnoteOrder.indexOf(r),o,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),o=e.footnoteOrder.length):o=a+1,s+=1,e.footnoteCounts.set(r,s);let c={type:`element`,tagName:`a`,properties:{href:`#`+n+`fn-`+i,id:n+`fnref-`+i+(s>1?`-`+s:``),dataFootnoteRef:!0,ariaDescribedBy:[`footnote-label`]},children:[{type:`text`,value:String(o)}]};e.patch(t,c);let l={type:`element`,tagName:`sup`,properties:{},children:[c]};return e.patch(t,l),e.applyData(t,l)}function Rt(e,t){let n={type:`element`,tagName:`h`+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function zt(e,t){if(e.options.allowDangerousHtml){let n={type:`raw`,value:t.value};return e.patch(t,n),e.applyData(t,n)}}function Bt(e,t){let n=t.referenceType,r=`]`;if(n===`collapsed`?r+=`[]`:n===`full`&&(r+=`[`+(t.label||t.identifier)+`]`),t.type===`imageReference`)return[{type:`text`,value:`![`+t.alt+r}];let i=e.all(t),a=i[0];a&&a.type===`text`?a.value=`[`+a.value:i.unshift({type:`text`,value:`[`});let o=i[i.length-1];return o&&o.type===`text`?o.value+=r:i.push({type:`text`,value:r}),i}function Vt(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return Bt(e,t);let i={src:I(r.url||``),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`img`,properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)}function Ht(e,t){let n={src:I(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`img`,properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function Ut(e,t){let n={type:`text`,value:t.value.replace(/\r?\n|\r/g,` `)};e.patch(t,n);let r={type:`element`,tagName:`code`,properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function Wt(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return Bt(e,t);let i={href:I(r.url||``)};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`a`,properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function Gt(e,t){let n={href:I(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`a`,properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function Kt(e,t,n){let r=e.all(t),i=n?qt(n):Jt(t),a={},o=[];if(typeof t.checked==`boolean`){let e=r[0],n;e&&e.type===`element`&&e.tagName===`p`?n=e:(n={type:`element`,tagName:`p`,properties:{},children:[]},r.unshift(n)),n.children.length>0&&n.children.unshift({type:`text`,value:` `}),n.children.unshift({type:`element`,tagName:`input`,properties:{type:`checkbox`,checked:t.checked,disabled:!0},children:[]}),a.className=[`task-list-item`]}let s=-1;for(;++s<r.length;){let e=r[s];(i||s!==0||e.type!==`element`||e.tagName!==`p`)&&o.push({type:`text`,value:`
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{c as r,i,l as a,n as o,o as s,r as c,s as l,t as ee,u}from"./page-shell-DfinU3mb.js";import{t as d}from"./fields-CicOWY-X.js";var f=e(t(),1),p=/^[a-zA-Z0-9._-]+$/;function m(e){return typeof e!=`string`||e.length===0||e.length>64?!1:p.test(e)}function h(e){if(!e||typeof e!=`object`)return{servers:{}};let t=e,n=t.servers,r={};if(n&&typeof n==`object`&&!Array.isArray(n))for(let[e,t]of Object.entries(n))r[e]=g(t);return{...t,servers:r}}function g(e){if(!e||typeof e!=`object`)return{};let t=e,n=typeof t.command==`string`&&t.command?t.command:void 0,r=typeof t.url==`string`&&t.url?t.url:void 0,i=Array.isArray(t.args)?t.args.filter(e=>typeof e==`string`):void 0,a=t.env&&typeof t.env==`object`&&!Array.isArray(t.env)?Object.fromEntries(Object.entries(t.env).filter(e=>typeof e[1]==`string`)):void 0,o=t.headers&&typeof t.headers==`object`&&!Array.isArray(t.headers)?Object.fromEntries(Object.entries(t.headers).filter(e=>typeof e[1]==`string`)):void 0,s=typeof t.autostart==`boolean`?t.autostart:void 0,c={};n&&(c.command=n),r&&(c.url=r),i&&i.length>0&&(c.args=i),a&&Object.keys(a).length>0&&(c.env=a),o&&Object.keys(o).length>0&&(c.headers=o),s!==void 0&&(c.autostart=s);for(let[e,n]of Object.entries(t))[`command`,`url`,`args`,`env`,`headers`,`autostart`].includes(e)||(c[e]=n);return c}function _(e=`local`){return e===`remote`?{url:``}:{command:``}}function v(e){return!e||e.length===0?``:e.join(`
|
|
2
|
+
`)}function y(e){if(!e)return[];let t=e.split(/\r?\n|,/),n=[];for(let e of t){let t=e.trim();t.length>0&&n.push(t)}return n}var b=/^[A-Za-z_][A-Za-z0-9_]*$/;function x(e){let t={};if(!e)return t;for(let n of e.split(/\r?\n/)){let e=n.trim();if(e===``||e.startsWith(`#`))continue;let r=e.indexOf(`=`);if(r===-1)continue;let i=e.slice(0,r).trim(),a=e.slice(r+1);b.test(i)&&(t[i]=a)}return t}function S(e){return e?Object.entries(e).map(([e,t])=>`${e}=${t}`).join(`
|
|
3
|
+
`):``}function C(e,t){if(!m(e))return{kind:`invalid`,reason:`Server name must match [a-zA-Z0-9._-] (1–64 chars).`};let n=t.command&&t.command.trim()!==``,r=t.url&&String(t.url).trim()!==``;return!n&&!r?{kind:`invalid`,reason:`Command or URL is required.`}:{kind:`ok`}}function te(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 ne(e){return Object.values(e).filter(e=>e.command?e.command===`npx`||e.command===`uv`||e.command===`uvx`:!1).length}function w(e){let t=new Set,n=new Set;for(let r of e){let e=r.toLowerCase();t.has(e)?n.add(e):t.add(e)}return n}function T(e){let t={};for(let[n,r]of Object.entries(e.servers)){let e={};r.command&&(e.command=r.command),r.url&&(e.url=r.url),r.args&&r.args.length>0&&(e.args=[...r.args]),r.env&&Object.keys(r.env).length>0&&(e.env={...r.env}),r.headers&&Object.keys(r.headers).length>0&&(e.headers={...r.headers}),r.autostart!==void 0&&(e.autostart=r.autostart);for(let[t,n]of Object.entries(r))[`command`,`url`,`args`,`env`,`headers`,`autostart`].includes(t)||(e[t]=n);t[n]=e}return{...e,servers:t}}function re(e){let t=1;for(;e.includes(`server-${t}`);)t+=1;return`server-${t}`}var E=n();function ie({name:e,server:t,onRename:n,onChange:r,onRemove:i,nameError:o}){let s=`mcp-${e||`unnamed`}`,c=v(t.args),l=S(t.env),ee=S(t.headers),u=te(t),d=u===`remote`;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`settings-card-actions`,role:`group`,"aria-label":`MCP server ${e||`(unnamed)`}`,children:[(0,E.jsxs)(`div`,{className:`settings-card-actions-status`,children:[(0,E.jsx)(`strong`,{children:e||`(unnamed)`}),u?(0,E.jsx)(a,{tone:`neutral`,children:u}):null]}),(0,E.jsx)(`div`,{className:`settings-card-actions-buttons`,children:(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:i,"aria-label":`Remove ${e||`server`}`,children:`Remove`})})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-name`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Server name`}),(0,E.jsx)(`input`,{id:`${s}-name`,type:`text`,value:e,spellCheck:!1,placeholder:`my-server`,"aria-invalid":!!o,onChange:e=>n(e.target.value)}),o?(0,E.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:o}):null]}),d?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-url`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`URL`}),(0,E.jsx)(`input`,{id:`${s}-url`,type:`text`,value:t.url||``,placeholder:`https://mcp.example.com/sse`,spellCheck:!1,onChange:e=>r({...t,url:e.target.value})})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-headers`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Headers (KEY=value per line)`}),(0,E.jsx)(`textarea`,{id:`${s}-headers`,value:ee,rows:3,spellCheck:!1,onChange:e=>r({...t,headers:x(e.target.value)})})]})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-command`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Command`}),(0,E.jsx)(`input`,{id:`${s}-command`,type:`text`,value:t.command||``,placeholder:`npx`,spellCheck:!1,onChange:e=>r({...t,command:e.target.value})})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-args`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Args (one per line, or comma-separated)`}),(0,E.jsx)(`textarea`,{id:`${s}-args`,value:c,rows:3,spellCheck:!1,onChange:e=>r({...t,args:y(e.target.value)})})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`${s}-env`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Env (KEY=value per line)`}),(0,E.jsx)(`textarea`,{id:`${s}-env`,value:l,rows:3,spellCheck:!1,onChange:e=>r({...t,env:x(e.target.value)})})]})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-toggle`,htmlFor:`${s}-autostart`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Autostart`}),(0,E.jsx)(`input`,{id:`${s}-autostart`,type:`checkbox`,checked:!!t.autostart,onChange:e=>r({...t,autostart:e.target.checked})})]})]})}var D=`mcp.config`;function O({port:e,client:t,dirty:n,registerSave:p}){let{state:m,refresh:g,setData:v}=u(t,`/api/mcp`),[y,b]=(0,f.useState)({servers:{}}),[x,S]=(0,f.useState)([]),[O,oe]=(0,f.useState)(!1),[k,se]=(0,f.useState)(!0),[A,j]=(0,f.useState)({kind:`idle`}),M=(0,f.useRef)(0),[ce,le]=(0,f.useState)(!1),[N,P]=(0,f.useState)(`active`),[F,ue]=(0,f.useState)(`local`),[I,de]=(0,f.useState)(``),[L,fe]=(0,f.useState)(``),[R,pe]=(0,f.useState)(``),[z,B]=(0,f.useState)(``),[V,me]=(0,f.useState)(``),[H,he]=(0,f.useState)(``),[ge,U]=(0,f.useState)(null),[_e,W]=(0,f.useState)(!1),G=(0,f.useMemo)(()=>m.kind===`ready`?h(m.data):{servers:{}},[m]);(0,f.useEffect)(()=>{if(m.kind===`ready`){let e=h(m.data);b(e),S(Object.keys(e.servers))}},[m]),(0,f.useEffect)(()=>()=>{n.remove(D)},[n]);let K=(0,f.useMemo)(()=>Object.keys(y.servers),[y]),q=(0,f.useMemo)(()=>w(K),[K]),ve=(0,f.useMemo)(()=>K.map(e=>({name:e,result:C(e,y.servers[e]??_())})),[y,K]).some(e=>e.result.kind===`invalid`),J=q.size>0,ye=!ve&&!J&&k,be=(0,f.useMemo)(()=>ne(y.servers),[y]),Y=(0,f.useCallback)((e,t)=>{n.set(D,{value:T(e),original:T(G),valid:t})},[n,G]),X=(0,f.useCallback)((e,t)=>{b(e),t&&S(t);let n=t??Object.keys(e.servers),r=w(n),i=n.every(t=>C(t,e.servers[t]??_()).kind===`ok`);Y(e,i&&r.size===0&&k)},[k,Y]),xe=(0,f.useCallback)((e,t)=>{if(e===t)return;let n=x.map(n=>n===e?t:n),r={};for(let i of n)r[i]=i===t?y.servers[e]??_():y.servers[i]??_();X({...y,servers:r},n)},[y,x,X]),Se=(0,f.useCallback)((e,t)=>{X({...y,servers:{...y.servers,[e]:t}},x)},[y,x,X]),Ce=(0,f.useCallback)(e=>{let t={...y.servers};delete t[e];let n=x.filter(t=>t!==e);X({...y,servers:t},n)},[y,x,X]);(0,f.useCallback)(()=>{let e=re(x);X({...y,servers:{...y.servers,[e]:_()}},[...x,e])},[y,x,X]);let we=(0,f.useCallback)((e,t)=>{if(se(t),!t){Y(y,!1);return}if(e&&typeof e==`object`&&!Array.isArray(e)){let t=h(e);b(t),S(Object.keys(t.servers));let n=w(Object.keys(t.servers)),r=Object.entries(t.servers).every(([e,t])=>C(e,t).kind===`ok`);Y(t,r&&n.size===0)}},[y,Y]),Te=(0,f.useCallback)(async()=>{let e=n.saveBundle();if(!(D in e))return;let r=e[D],i=await t.put(`/api/mcp`,r);n.clear();let a=await t.get(`/api/mcp`).catch(()=>i),o=h(a);b(o),S(Object.keys(o.servers)),v(a),await g()},[t,n,g,v]);(0,f.useEffect)(()=>{if(p)return p(Te),()=>p(null)},[p,Te]);let Z=(0,f.useCallback)(async(e,r)=>{if(n.isDirty()&&typeof window<`u`&&!window.confirm(`You have unsaved MCP edits. ${e} will use the on-disk config, not your unsaved changes. Continue?`))return;let i=M.current+1;M.current=i,j({kind:`pending`,label:e});try{let n=await t.post(r,{});if(M.current!==i)return;j({kind:`success`,message:`${e} succeeded${n?.servers?`: ${JSON.stringify(n.servers)}`:``}`})}catch(e){if(M.current!==i)return;j({kind:`error`,message:e instanceof Error?e.message:String(e)})}},[t,n]),Q=(0,f.useCallback)(()=>{de(``),fe(``),pe(``),B(``),me(``),he(``),U(null),W(!1)},[]),Ee=(0,f.useCallback)(()=>{P(`active`),Q(),le(!0)},[Q]),$=(0,f.useCallback)(()=>{le(!1),Q()},[Q]),De=(0,f.useCallback)(async()=>{let e=I.trim()||re(Object.keys(G.servers)),r=F===`remote`?{url:V.trim(),...H.trim()?{headers:ae(H)}:{}}:{command:L.trim(),...R.trim()?{args:R.split(/\r?\n|,/).map(e=>e.trim()).filter(Boolean)}:{},...z.trim()?{env:ae(z)}:{}},i=C(e,r);if(i.kind===`invalid`){U(i.reason);return}if(G.servers[e]){U(`Server "${e}" already exists.`);return}W(!0),U(null);try{let i={...G,servers:{...G.servers,[e]:r}};await t.put(`/api/mcp`,T(i)),await t.post(`/api/mcp/sync`,{}),n.clear();let a=await t.get(`/api/mcp`).catch(()=>i),o=h(a);b(o),S(Object.keys(o.servers)),v(a),await g(),$()}catch(e){U(e instanceof Error?e.message:String(e)),W(!1)}},[I,F,V,H,L,R,z,G,t,n,g,v,$]),Oe=(0,f.useCallback)(async e=>{let r={...G.servers};delete r[e];let i={...G,servers:r};try{await t.put(`/api/mcp`,T(i)),await t.post(`/api/mcp/sync`,{}),n.clear();let e=await t.get(`/api/mcp`).catch(()=>i),r=h(e);b(r),S(Object.keys(r.servers)),v(e),await g()}catch(e){j({kind:`error`,message:e instanceof Error?e.message:String(e)})}},[G,t,n,g,v]);if(m.kind===`loading`)return(0,E.jsx)(o,{});if(m.kind===`offline`)return(0,E.jsx)(c,{port:e});if(m.kind===`error`)return(0,E.jsx)(ee,{message:m.message});let ke=Array.from(q).sort();return(0,E.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,E.jsxs)(l,{title:`MCP servers`,hint:`Edit each server's command/args/env. Save writes back to mcp.json; Sync pushes the saved config to all CLIs.`,children:[x.length===0&&(0,E.jsxs)(s,{children:[`No servers configured. Add one or run `,(0,E.jsx)(`code`,{children:`Reset to defaults`}),`.`]}),x.map(e=>{let t=y.servers[e]??_(),n=e.toLowerCase(),r=q.has(n),i=C(e,t),a=r?`Duplicate server name (case-insensitive).`:i.kind===`invalid`?i.reason:null;return(0,E.jsx)(ie,{name:e,server:t,onRename:t=>xe(e,t),onChange:t=>Se(e,t),onRemove:()=>Ce(e),nameError:a},e)}),J&&(0,E.jsxs)(s,{tone:`error`,role:`alert`,children:[`Duplicate server name`,ke.length===1?``:`s`,`: `,ke.join(`, `),`. Saving is blocked until names are unique.`]}),ve&&!J&&(0,E.jsx)(s,{tone:`error`,role:`alert`,children:`Some servers have errors (missing command/URL or invalid name). Saving is blocked until they are fixed.`})]}),(0,E.jsxs)(l,{title:`Actions`,hint:`These act on the saved config. Save edits first if you want them included.`,children:[(0,E.jsxs)(i,{status:A.kind===`pending`?(0,E.jsxs)(`span`,{role:`status`,children:[A.label,`…`]}):A.kind===`success`?(0,E.jsx)(`span`,{role:`status`,children:A.message}):void 0,children:[(0,E.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:Ee,children:`+ Add, Set MCP`}),(0,E.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:A.kind===`pending`,onClick:()=>void Z(`Sync to all CLIs`,`/api/mcp/sync`),children:`Sync to all CLIs`}),(0,E.jsxs)(`button`,{type:`button`,className:`settings-action`,disabled:A.kind===`pending`||be===0,onClick:()=>void Z(`Install bundle`,`/api/mcp/install`),children:[`Install bundle (`,be,`)`]}),(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,disabled:A.kind===`pending`,onClick:()=>{typeof window<`u`&&!window.confirm(`Reset MCP config to defaults? Your custom servers will be removed.`)||Z(`Reset to defaults`,`/api/mcp/reset`)},children:`Reset to defaults`})]}),A.kind===`error`&&(0,E.jsx)(s,{tone:`error`,role:`alert`,children:A.message})]}),(0,E.jsxs)(l,{title:`Advanced (raw JSON)`,hint:`Edit the entire config object. Useful for fields not surfaced in the structured editor.`,children:[(0,E.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>oe(e=>!e),"aria-expanded":O,children:O?`Hide raw JSON`:`Show raw JSON`}),O&&(0,E.jsx)(d,{id:`mcp-raw`,label:`mcp.json`,value:T(y),rows:16,onChange:we}),!ye&&(0,E.jsx)(s,{children:`Save is disabled while validation errors are present.`})]}),ce&&(0,E.jsx)(`div`,{className:`settings-memory-modal settings-pi-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`MCP Server Management`,onClick:$,children:(0,E.jsxs)(`div`,{className:`settings-memory-modal-card`,onClick:e=>e.stopPropagation(),children:[(0,E.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,E.jsx)(`h3`,{children:`MCP servers`}),(0,E.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:$,children:`Close`})]}),(0,E.jsxs)(r,{children:[(0,E.jsx)(`button`,{type:`button`,"aria-pressed":N===`active`,className:`settings-action`,onClick:()=>P(`active`),children:`Active Servers`}),(0,E.jsx)(`button`,{type:`button`,"aria-pressed":N===`add`,className:`settings-action`,onClick:()=>{P(`add`),Q()},children:`Add New`})]}),N===`active`&&(0,E.jsxs)(E.Fragment,{children:[Object.keys(G.servers).length===0&&(0,E.jsx)(s,{children:`No active MCP servers.`}),Object.entries(G.servers).map(([e,t])=>{let n=te(t);return(0,E.jsx)(i,{status:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`strong`,{children:e}),` `,(0,E.jsx)(`code`,{children:t.url||[t.command,...t.args||[]].filter(Boolean).join(` `)}),` `,n?(0,E.jsx)(a,{tone:`neutral`,children:n}):null]}),children:(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:()=>void Oe(e),children:`Remove`})},e)})]}),N===`add`&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(r,{children:[(0,E.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":F===`local`,className:`settings-action${F===`local`?` settings-action-save`:``}`,onClick:()=>ue(`local`),children:`Local`}),(0,E.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":F===`remote`,className:`settings-action${F===`remote`?` settings-action-save`:``}`,onClick:()=>ue(`remote`),children:`Remote`})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Name`}),(0,E.jsx)(`input`,{type:`text`,value:I,placeholder:`my-server`,spellCheck:!1,onChange:e=>de(e.target.value)})]}),F===`local`?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Command`}),(0,E.jsx)(`input`,{type:`text`,value:L,placeholder:`npx`,spellCheck:!1,onChange:e=>fe(e.target.value)})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Args (one per line)`}),(0,E.jsx)(`textarea`,{value:R,rows:3,spellCheck:!1,placeholder:`-y
|
|
4
|
+
@upstash/context7-mcp`,onChange:e=>pe(e.target.value)})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Env (KEY=value per line)`}),(0,E.jsx)(`textarea`,{value:z,rows:2,spellCheck:!1,onChange:e=>B(e.target.value)})]})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`URL`}),(0,E.jsx)(`input`,{type:`text`,value:V,placeholder:`https://mcp.example.com/sse`,spellCheck:!1,onChange:e=>me(e.target.value)})]}),(0,E.jsxs)(`label`,{className:`settings-field settings-field-text`,children:[(0,E.jsx)(`span`,{className:`settings-field-label`,children:`Headers (KEY=value per line)`}),(0,E.jsx)(`textarea`,{value:H,rows:2,spellCheck:!1,onChange:e=>he(e.target.value)})]})]}),ge&&(0,E.jsx)(s,{tone:`error`,role:`alert`,children:ge}),(0,E.jsxs)(i,{children:[(0,E.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:$,children:`Cancel`}),(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:_e,onClick:()=>void De(),children:_e?`Adding…`:`Add & Sync`})]})]})]})})]})}function ae(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}export{O as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t,t as n}from"./cli-engine-NdU0lzs_.js";import{n as r,t as i}from"./jsx-runtime-CkEUZM6i.js";import{i as a,l as o,n as s,o as c,r as l,s as u,t as d,u as f}from"./page-shell-DfinU3mb.js";import{a as p,i as m,r as h}from"./fields-CicOWY-X.js";import{a as g,d as _}from"./agent-meta-94LMwZZK.js";import{t as v}from"./path-utils-B6vBr0DD.js";var y=e(r(),1),b=[`memory.enabled`,`memory.flushEvery`,`memory.cli`,`memory.retentionDays`,`memory.autoReflectAfterFlush`,`memory.flushLanguage`],x=[{value:`en`,label:`English (en)`},{value:`ko`,label:`한국어 (ko)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}],S=50;function C(e){return b.includes(e)}function w(e){let t=T(e);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=E(e);t&&n.push(t)}return n}function T(e){if(!e||typeof e!=`object`)return e;let t=e;return Array.isArray(t)?t:`data`in t?t.data:e}function E(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.key==`string`?t.key:null;return n?{key:n,value:typeof t.value==`string`?t.value:``,source:typeof t.source==`string`?t.source:`manual`}:null}function D(e,t){return!Number.isFinite(e)||!Number.isInteger(e)||e<=0?`${t} must be a positive integer`:null}function O(e,t,n=50){let r=Math.max(0,Math.floor(t))*n,i=e.slice(r,r+n),a=Math.max(1,Math.ceil(e.length/n));return{slice:i,hasMore:r+n<e.length,pageCount:a}}function k(e,t=80){return e.length<=t?e:`${e.slice(0,t)}…`}var A=i();function j({row:e,onOpen:t}){return(0,A.jsxs)(`div`,{className:`settings-card-actions`,children:[(0,A.jsxs)(`div`,{className:`settings-card-actions-status`,children:[(0,A.jsx)(`strong`,{children:(0,A.jsx)(`code`,{children:e.key})}),` `,(0,A.jsx)(o,{tone:`neutral`,children:e.source}),` `,(0,A.jsxs)(`span`,{className:`settings-field-hint`,children:[e.value.length,` chars · `,k(e.value)]})]}),(0,A.jsx)(`div`,{className:`settings-card-actions-buttons`,children:(0,A.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>t(e),"aria-label":`Open memory entry ${e.key}`,children:`Open`})})]})}var M={busy:null,notice:null,error:null};function N({port:e,client:r,dirty:i,registerSave:o}){let S=f(r,`/api/settings`),T=f(r,`/api/memory`),[E,k]=(0,y.useState)(!0),[N,P]=(0,y.useState)(10),[F,I]=(0,y.useState)(``),[L,R]=(0,y.useState)(30),[z,B]=(0,y.useState)(!1),[V,H]=(0,y.useState)(`en`),[U,W]=(0,y.useState)(0),[G,K]=(0,y.useState)(null),[q,J]=(0,y.useState)(M);(0,y.useEffect)(()=>{if(S.state.kind!==`ready`)return;let e=S.state.data.memory||{};k(e.enabled!==!1),P(typeof e.flushEvery==`number`?e.flushEvery:10),I(typeof e.cli==`string`?e.cli:``),R(typeof e.retentionDays==`number`?e.retentionDays:30),B(!!e.autoReflectAfterFlush),H(typeof e.flushLanguage==`string`&&e.flushLanguage?e.flushLanguage:`en`)},[S.state]),(0,y.useEffect)(()=>()=>{for(let e of b)i.remove(e)},[i]),(0,y.useEffect)(()=>{if(!G)return;let e=e=>{e.key===`Escape`&&K(null)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[G]);let Y=(0,y.useCallback)((e,t)=>i.set(e,t),[i]),X=(0,y.useMemo)(()=>S.state.kind===`ready`&&S.state.data.memory||{},[S.state]),Z=(0,y.useCallback)(async()=>{let e=i.saveBundle(),t={};for(let[n,r]of Object.entries(e))C(n)&&(t[n]=r);if(Object.keys(t).length===0)return;let n=v(t),a=await r.put(`/api/settings`,n),o=a&&typeof a==`object`&&`data`in a?a.data:a;for(let e of b)i.remove(e);S.setData(o);let s=o.memory||{};k(s.enabled!==!1),P(typeof s.flushEvery==`number`?s.flushEvery:10),I(typeof s.cli==`string`?s.cli:``),R(typeof s.retentionDays==`number`?s.retentionDays:30),B(!!s.autoReflectAfterFlush),H(typeof s.flushLanguage==`string`&&s.flushLanguage?s.flushLanguage:`en`),await S.refresh()},[r,i,S]);(0,y.useEffect)(()=>{if(o)return o(Z),()=>o(null)},[o,Z]);let ee=(0,y.useCallback)(async()=>{J({busy:`flush`,notice:null,error:null});try{await r.post(`/api/jaw-memory/flush`,{}),J({busy:null,notice:`Memory flush queued. Browse refreshes when it completes.`,error:null}),await T.refresh()}catch(e){J({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[r,T]),te=(0,y.useCallback)(async()=>{J({busy:`reflect`,notice:null,error:null});try{await r.post(`/api/jaw-memory/reflect`,{}),J({busy:null,notice:`Reflect complete.`,error:null}),await T.refresh()}catch(e){J({busy:null,notice:null,error:e instanceof Error?e.message:String(e)})}},[r,T]),ne=(0,y.useCallback)(()=>{if(T.state.kind!==`ready`)return;let t=w(T.state.data),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`jaw-memory-${e}-${Date.now()}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)},[T.state,e]);if(S.state.kind===`loading`)return(0,A.jsx)(s,{});if(S.state.kind===`offline`)return(0,A.jsx)(l,{port:e});if(S.state.kind===`error`)return(0,A.jsx)(d,{message:S.state.message});let re=D(N,`Flush every`),ie=D(L,`Retention days`),ae=S.state.data.perCli||{},Q=[{value:``,label:`(profile default)`},..._(Object.keys(ae)).map(e=>({value:e,label:g(e).label||e}))];F&&!n(F)&&!Q.some(e=>e.value===F)&&Q.push({value:F,label:`${g(F).label||F} (legacy)`});let $=T.state.kind===`ready`?w(T.state.data):[],{slice:oe,hasMore:se,pageCount:ce}=O($,Math.min(U,Math.max(0,Math.ceil($.length/50)-1)));return(0,A.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),Z()},children:[(0,A.jsxs)(u,{title:`Memory engine`,hint:`Background memory flush and reflection cadence.`,children:[(0,A.jsx)(p,{id:`memory-enabled`,label:`Memory enabled`,value:E,onChange:e=>{k(e),Y(`memory.enabled`,{value:e,original:X.enabled!==!1,valid:!0})}}),(0,A.jsx)(h,{id:`memory-flush-every`,label:`Flush every (sessions)`,value:N,min:1,error:re,onChange:e=>{P(e),Y(`memory.flushEvery`,{value:e,original:typeof X.flushEvery==`number`?X.flushEvery:10,valid:D(e,`Flush every`)===null})}}),(0,A.jsx)(m,{id:`memory-cli`,label:`Flush CLI`,value:F,missingValueLabel:n(F)?t(F):void 0,error:n(F)?`The saved runtime is retired. Choose an available runtime.`:null,options:Q,onChange:e=>{I(e),Y(`memory.cli`,{value:e,original:X.cli??``,valid:!0})}}),(0,A.jsx)(h,{id:`memory-retention`,label:`Retention days`,value:L,min:1,error:ie,onChange:e=>{R(e),Y(`memory.retentionDays`,{value:e,original:typeof X.retentionDays==`number`?X.retentionDays:30,valid:D(e,`Retention days`)===null})}}),(0,A.jsx)(p,{id:`memory-auto-reflect`,label:`Auto-reflect after flush`,value:z,onChange:e=>{B(e),Y(`memory.autoReflectAfterFlush`,{value:e,original:!!X.autoReflectAfterFlush,valid:!0})}}),(0,A.jsx)(m,{id:`memory-flush-language`,label:`Flush language`,value:V,options:[...x],onChange:e=>{H(e),Y(`memory.flushLanguage`,{value:e,original:X.flushLanguage??`en`,valid:!0})}})]}),(0,A.jsx)(u,{title:`Stored entries`,hint:`Read-only browse of the key/value memory table (50/page).`,children:T.state.kind===`loading`?(0,A.jsx)(c,{children:`Loading entries…`}):T.state.kind===`offline`?(0,A.jsx)(l,{port:e}):T.state.kind===`error`?(0,A.jsx)(d,{message:T.state.message}):$.length===0?(0,A.jsx)(c,{children:`No memory entries yet.`}):(0,A.jsxs)(A.Fragment,{children:[oe.map(e=>(0,A.jsx)(j,{row:e,onOpen:K},e.key)),(0,A.jsxs)(a,{status:(0,A.jsxs)(`span`,{children:[`Page `,U+1,` / `,ce]}),children:[(0,A.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:U===0,onClick:()=>W(e=>Math.max(0,e-1)),children:`Prev`}),(0,A.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:!se,onClick:()=>W(e=>e+1),children:`Next`})]})]})}),(0,A.jsxs)(u,{title:`Actions`,hint:`Flush runs async — the browse list refreshes when it finishes.`,children:[(0,A.jsxs)(a,{status:q.notice?(0,A.jsx)(`span`,{role:`status`,children:q.notice}):void 0,children:[(0,A.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:q.busy!==null,onClick:()=>void ee(),children:q.busy===`flush`?`Queuing…`:`Flush now`}),(0,A.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:q.busy!==null,onClick:()=>void te(),children:q.busy===`reflect`?`Reflecting…`:`Reflect soul`}),(0,A.jsx)(`button`,{type:`button`,className:`settings-action`,disabled:T.state.kind!==`ready`,onClick:ne,children:`Export memory`})]}),q.error?(0,A.jsx)(c,{tone:`error`,role:`alert`,children:q.error}):null]}),G?(0,A.jsx)(`div`,{className:`settings-memory-modal settings-pi-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`Memory entry ${G.key}`,onClick:e=>{e.target===e.currentTarget&&K(null)},children:(0,A.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,A.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,A.jsx)(`h3`,{children:G.key}),(0,A.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:()=>K(null),"aria-label":`Close memory entry`,children:`Close`})]}),(0,A.jsx)(`pre`,{className:`settings-memory-modal-body`,children:G.value})]})}):null]})}export{x as FLUSH_LANGUAGE_OPTIONS,S as MEMORY_PAGE_SIZE,b as MEMORY_SECTION_A_KEYS,N as default,C as isMemorySettingsKey,w as normalizeMemoryRows,O as paginate,k as previewValue,D as validatePositiveInt};
|
package/public/dist/assets/{MilkdownWysiwygEditor-D6JaLDE4.js → MilkdownWysiwygEditor-xObhviw7.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{A as t}from"./vendor-render-Cmfl_oW8.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{A as t}from"./vendor-render-Cmfl_oW8.js";import{n,t as r}from"./jsx-runtime-CkEUZM6i.js";import{t as i}from"./copy-text-WsUHYigB.js";import{n as a,t as o}from"./w3c-keyname-BOAvb0qz.js";import{E as s,O as c,S as l,T as u,_ as d,a as f,d as p,g as m,h,i as g,k as _,l as v,m as y,o as b,p as x,t as S,u as ee,v as te,w as ne,y as re}from"./wiki-link-resolver-CbJATnBn.js";import{n as C,o as ie,r as ae,s as oe,t as se}from"./wiki-link-suggestions-BcEfThgf.js";import{M as ce}from"./vendor-utils-C1xaEGmb.js";var le={}.hasOwnProperty;function ue(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&le.call(t,e)){let n=String(t[e]);i=le.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var de={}.hasOwnProperty;function fe(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)fe(e,t.extensions[n]);for(r in t)if(de.call(t,r))switch(r){case`extensions`:break;case`unsafe`:pe(e[r],t[r]);break;case`join`:pe(e[r],t[r]);break;case`handlers`:me(e[r],t[r]);break;default:e.options[r]=t[r]}return e}function pe(e,t){t&&e.push(...t)}function me(e,t){t&&Object.assign(e,t)}var he=[ge];function ge(e,t,n,r){if(t.type===`code`&&te(t,r)&&(e.type===`list`||e.type===t.type&&te(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&m(t,r))?void 0:+!!n.spread}var _e=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],ve=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`
|
|
2
2
|
`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\[`,inConstruct:`phrasing`,notInConstruct:_e},{character:`"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\r
|
|
3
3
|
]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:_e},{atBreak:!0,before:`\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \r
|
|
4
4
|
*])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:_e},{atBreak:!0,character:`+`,after:`(?:[ \r
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t,t as n}from"./cli-engine-NdU0lzs_.js";import{n as r,t as i}from"./jsx-runtime-CkEUZM6i.js";import{a,c as o,i as s,n as c,o as l,r as u,s as d,t as f,u as p}from"./page-shell-DfinU3mb.js";import{t as m}from"./error-normalize-clOi-AAA.js";import{a as h,i as g,n as _,s as v}from"./fields-CicOWY-X.js";import{a as y,d as b,i as x,o as S,r as C}from"./agent-meta-94LMwZZK.js";import{t as w}from"./path-utils-B6vBr0DD.js";var T=e(r(),1),E=i(),D=[`basic`,`openai`,`anthropic`,`vertex`],O=`[hidden], [inert], [aria-disabled="true"], fieldset[disabled]`;function k(e){return Array.from(e.querySelectorAll(`button, input, select, textarea, a[href], [tabindex]`)).filter(e=>{if(e.tabIndex<0||e.matches(`:disabled`)||e.closest(O))return!1;for(let t=e;t;t=t.parentElement){let e=t.ownerDocument.defaultView?.getComputedStyle(t);if(e?.display===`none`||e?.visibility===`hidden`||e?.visibility===`collapse`)return!1}return!0})}function A(e){return e===`anthropic`?`https://api.anthropic.com/v1/messages`:e===`vertex`?`https://LOCATION-aiplatform.googleapis.com/v1`:`http://127.0.0.1:18645/v1`}function j({client:e,pi:t,provider:n,model:r,onClose:i,onRegistered:a}){let o=(0,T.useRef)(null),c=(0,T.useMemo)(()=>t?.profiles?.find(e=>e.id===n)||t?.profiles?.[0],[t,n]),[u,d]=(0,T.useState)(c?.mode||`basic`),[f,p]=(0,T.useState)(c?.id||n||`progrok`),[m,h]=(0,T.useState)(c?.endpoint||A(u)),[_,y]=(0,T.useState)(r||c?.model||`grok-composer-2.5-fast`),[b,x]=(0,T.useState)(``),[S,C]=(0,T.useState)(!1),[w,j]=(0,T.useState)(null);(0,T.useEffect)(()=>{let e=o.current;if(!e||e.closest(O))return;let t=e.ownerDocument.activeElement,n=k(e);return(n.find(e=>e.id===`pi-profile-id`)??n[0])?.focus(),()=>{t instanceof HTMLElement&&t.isConnected&&!t.matches(`:disabled`)&&!t.closest(O)&&t.focus({preventScroll:!0})}},[]),(0,T.useEffect)(()=>{h(e=>e||A(u))},[u]);let M=e=>{let t=o.current;if(!(!t||t.closest(O)||e.defaultPrevented)){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),i();else if(e.key===`Tab`){let n=k(t),r=n[0],i=n.at(-1),a=t.ownerDocument.activeElement;(!r||!n.some(e=>e===a)||(e.shiftKey?a===r:a===i))&&(e.preventDefault(),(e.shiftKey?i??t:r??t).focus())}}},N=async()=>{let t=o.current,n=t?.querySelector(`.settings-action-save`);t&&n&&t.ownerDocument.activeElement===n&&!t.closest(O)&&k(t).find(e=>e!==n)?.focus(),C(!0),j(null);try{let t=(await e.post(`/api/pi/profiles/register`,{id:f,label:f,mode:u,endpoint:m,model:_,apiKey:b})).data;a({provider:f,model:_,models:t.models||[],pi:t.settings?.pi}),i()}catch(e){j(e instanceof Error?e.message:String(e))}finally{C(!1)}};return(0,E.jsx)(`div`,{className:`settings-memory-modal settings-pi-modal`,ref:o,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pi-profile-title`,tabIndex:-1,onKeyDown:M,children:(0,E.jsxs)(`div`,{className:`settings-memory-modal-card`,children:[(0,E.jsxs)(`header`,{className:`settings-memory-modal-header`,children:[(0,E.jsx)(`h3`,{id:`pi-profile-title`,children:`Pi Settings`}),(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:i,children:`Close`})]}),(0,E.jsxs)(`div`,{className:`settings-section-body`,children:[(0,E.jsx)(g,{id:`pi-profile-mode`,label:`Mode`,value:u,options:D.map(e=>({value:e,label:e})),onChange:e=>d(e)}),(0,E.jsx)(v,{id:`pi-profile-id`,label:`Provider`,value:f,onChange:p,placeholder:`progrok`}),(0,E.jsx)(v,{id:`pi-profile-endpoint`,label:`Endpoint`,value:m,onChange:h,placeholder:A(u)}),(0,E.jsx)(v,{id:`pi-profile-model`,label:`Model`,value:_,onChange:y,placeholder:`grok-composer-2.5-fast`}),(0,E.jsx)(v,{id:`pi-profile-key`,label:`API Key`,value:b,onChange:x,placeholder:c?.apiKeySet?`set (${c.apiKeyLast4||`****`})`:`empty for local proxy`}),(0,E.jsx)(l,{children:`Default: grok-composer-2.5-fast. Bare grok-composer-2.5 currently has no verified team access.`}),w?(0,E.jsx)(l,{tone:`error`,role:`alert`,children:w}):null,(0,E.jsx)(s,{children:(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:S,onClick:()=>void N(),children:S?`Registering...`:`Register`})})]})]})})}function M(e,t,n=``){let r=new Set;n&&r.add(n);for(let n of e?.discoveredModels?.[t]||[])r.add(n);let i=e?.profiles?.find(e=>e.id===t);return i?.model&&r.add(i.model),[...r]}function N(e,t=``){let n=new Set;t&&n.add(t);for(let t of e?.profiles||[])n.add(t.id);return[...n]}function P(e){return e===`cursor`||e===`grok`||e===`claude`}function F(e){return e===`native`||e===`print`}var I=`unrecognized`,L=[{value:`native`,label:`Native session (opt-in)`},{value:`print`,label:`Print compatibility`}];function R({cli:e,original:t,dirty:n,disabled:r=!1,setEntry:i}){let a=P(e)?`perCli.${e}.transport`:null,o=(0,T.useSyncExternalStore)(n.subscribe,()=>a===null?void 0:n.pending.get(a)),s=(0,T.useRef)(r);(0,T.useLayoutEffect)(()=>(s.current=r,()=>{s.current=!0}),[r]);let c=t===void 0?`print`:t,l=o?o.value:c,u=F(l);return a===null?null:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(g,{id:`percli-${e}-transport`,label:`Runtime transport`,value:u?l:I,options:u?L:[...L,{value:I,label:`Unrecognized transport`}],disabled:r,error:u?null:`Choose a supported runtime transport.`,onChange:e=>{!s.current&&F(e)&&i(a,{value:e,original:c,valid:!0})}}),u?null:(0,E.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:`Stored runtime transport is unrecognized.`}),(0,E.jsx)(`p`,{className:`settings-percli-note`,children:`Applies to the next run. Independent of Activity / Legacy presentation.`}),l===`native`?(0,E.jsx)(`p`,{className:`settings-percli-note`,children:e===`claude`?`Claude native supports Auto (YOLO) / Safe permissions.`:`Native requires Auto (YOLO) permissions; no native worker assignments.`}):null]})}function z(e,t,n=!0){return{value:e,original:t,valid:n}}function ee({cli:e,meta:t,original:n,value:r,setValue:i,setEntry:a,dirty:s,disabled:c=!1,client:l,pi:u,setPi:d,onPiRegistered:f}){let p=`percli-${e}-models`,m=e===`pi`,[_,y]=(0,T.useState)(!1),b=(0,T.useRef)(c);(0,T.useLayoutEffect)(()=>(b.current=c,()=>{b.current=!0}),[c]);let S=r.provider||t.defaultProvider||t.providers?.[0]||`claude`,w=m?M(u,S,r.model||``):[],D=!m&&(t.providers?.length??0)>0,O=m?w:D?t.modelsByProvider?.[S]??t.models:t.models,k=D?t.effortsByProvider?.[S]??t.efforts:void 0,A=x(t,r.model||``,k,D?S:void 0);return(0,E.jsxs)(`div`,{className:`settings-percli-row`,"data-cli":e,children:[(0,E.jsx)(o,{children:(0,E.jsx)(`strong`,{className:`settings-percli-title`,children:t.label})}),(0,E.jsxs)(`div`,{className:`settings-percli-grid${m?` settings-percli-grid--pi`:``}`,children:[m&&N(u,S).length?(0,E.jsx)(g,{id:`percli-${e}-provider`,label:`Provider`,disabled:c,value:S,options:N(u,S).map(e=>({value:e,label:e})),onChange:t=>{if(b.current)return;let o=M(u,t),s=o.includes(r.model||``)?r.model||``:o[0]||``;i({...r,provider:t,model:s}),a(`perCli.${e}.provider`,z(t,n.provider??`progrok`)),a(`perCli.${e}.model`,z(s,n.model??``))}}):D?(0,E.jsx)(g,{id:`percli-${e}-provider`,label:`Provider`,disabled:c,value:S,options:(t.providers??[]).map(e=>({value:e,label:e})),onChange:o=>{if(b.current)return;let s=t.modelsByProvider?.[o]??[],c=t.effortsByProvider?.[o]??[],l=s.includes(r.model||``)?r.model||``:s[0]||``,u=C(t,l,r.effort??``,c,o);i({...r,provider:o,model:l,effort:u}),a(`perCli.${e}.provider`,z(o,n.provider??t.defaultProvider??`claude`)),a(`perCli.${e}.model`,z(l,n.model??``)),a(`perCli.${e}.effort`,z(u,n.effort??``))}}):null,m&&O.length>0?(0,E.jsx)(g,{id:`percli-${e}-model`,label:`Model`,disabled:c,value:r.model??O[0]??``,options:O.map(e=>({value:e,label:e})),onChange:o=>{if(b.current)return;let s=C(t,o,r.effort??``,k,D?S:void 0);i({...r,model:o,effort:s}),a(`perCli.${e}.model`,z(o,n.model??``)),s!==(r.effort??``)&&a(`perCli.${e}.effort`,z(s,n.effort??``))}}):(0,E.jsx)(v,{id:`percli-${e}-model`,label:`Model`,disabled:c,value:r.model??``,onChange:t=>{b.current||(i({...r,model:t}),a(`perCli.${e}.model`,z(t,n.model??``)))},placeholder:O[0]??`model id`}),t.modelNote?(0,E.jsx)(`p`,{className:`settings-percli-note`,children:t.modelNote}):null,O.length>0?(0,E.jsx)(`datalist`,{id:p,children:O.map(e=>(0,E.jsx)(`option`,{value:e},e))}):null,A.length>0?(0,E.jsxs)(`div`,{className:`settings-percli-effort`,children:[(0,E.jsx)(g,{id:`percli-${e}-effort`,label:`Effort`,disabled:c,value:r.effort??``,options:[{value:``,label:`(default)`},...A.map(e=>({value:e,label:e}))],onChange:t=>{b.current||(i({...r,effort:t}),a(`perCli.${e}.effort`,z(t,n.effort??``)))}}),t.effortNote?(0,E.jsx)(`p`,{className:`settings-percli-note`,children:t.effortNote}):null]}):t.effortNote?(0,E.jsx)(`p`,{className:`settings-percli-note settings-percli-note--effort`,children:t.effortNote}):null,P(e)?(0,E.jsx)(R,{cli:e,original:n.transport,dirty:s,disabled:c,setEntry:a}):null,(0,E.jsx)(h,{id:`percli-${e}-fastmode`,label:`Fast mode`,disabled:c,value:!!r.fastMode,onChange:t=>{b.current||(i({...r,fastMode:t}),a(`perCli.${e}.fastMode`,z(t,!!n.fastMode)))}}),m&&l?(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-percli-settings`,disabled:c,onClick:()=>{b.current||y(!0)},children:`Settings`}):null]}),m&&l&&_?(0,E.jsx)(`div`,{inert:c,"aria-busy":c,children:(0,E.jsx)(j,{client:l,pi:u,provider:S,model:r.model||`grok-composer-2.5-fast`,onClose:()=>y(!1),onRegistered:t=>{if(f){f(t);return}if(b.current)return;let{provider:o,model:s,pi:c}=t;c&&d&&d(c),i({...r,provider:o,model:s}),a(`perCli.${e}.provider`,z(o,n.provider??`progrok`)),a(`perCli.${e}.model`,z(s,n.model??``))}})}):null]})}var B=e=>e===`fallbackOrder`||e.startsWith(`perCli.`);function V(e){let t=e&&typeof e==`object`&&`data`in e?e.data:e;if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Invalid settings response. Refresh before retrying.`);return t}function H(e){return b(e).sort((e,t)=>e===`pi`?-1:+(t===`pi`))}function te(e){let t=new Set;for(let n of Object.keys(e.activeOverrides||{}))t.add(n);for(let n of Object.keys(e.perCli||{}))t.add(n);let n={};for(let e of t)n[e]={model:``,effort:``};return{activeOverrides:n}}function U({port:e,client:r,dirty:i,registerSave:o}){let h=(0,T.useMemo)(()=>({client:r,port:e,dirty:i}),[r,e,i]),g=(0,T.useRef)(null),v=(0,T.useRef)(null),b=(0,T.useRef)(0),x=(0,T.useMemo)(()=>({...r,get:async(e,t)=>({instance:h,value:await r.get(e,t)})}),[r,h]),{state:C,refresh:D,setData:O}=p(x,`/api/settings`,[e]),k=(0,T.useMemo)(()=>C.kind===`ready`?C.data.instance===h?{kind:`ready`,data:C.data.value}:{kind:`loading`}:C,[C,h]),A=(0,T.useCallback)(e=>O({instance:h,value:e}),[h,O]),[j,M]=(0,T.useState)({}),[N,P]=(0,T.useState)(void 0),[F,I]=(0,T.useState)([]),[L,R]=(0,T.useState)(!1),[z,U]=(0,T.useState)(null),[ne,W]=(0,T.useState)(null),[G,K]=(0,T.useState)(!1),[re,q]=(0,T.useState)(null);(0,T.useLayoutEffect)(()=>(g.current=h,v.current=null,++b.current,K(!1),R(!1),W(null),U(null),q(null),()=>{g.current=null,v.current=null,++b.current}),[h]);let J=(0,T.useCallback)(()=>g.current===h&&!v.current,[h]),Y=(0,T.useCallback)(async()=>{if(g.current!==h)return;let e=++b.current;try{let t=await r.get(`/api/cli-registry`);if(g.current!==h||e!==b.current)return;let n=t&&typeof t==`object`&&`data`in t?t.data:t;q(S(n))}catch{g.current===h&&e===b.current&&q(null)}},[r,h]);(0,T.useEffect)(()=>{Y()},[Y]),(0,T.useEffect)(()=>{if(k.kind!==`ready`)return;let e={...k.data.perCli||{}},t=Object.fromEntries(Object.entries(i.saveBundle()).filter(([e])=>B(e))),n=w(t).perCli;if(n&&typeof n==`object`&&!Array.isArray(n))for(let[t,r]of Object.entries(n))r&&typeof r==`object`&&!Array.isArray(r)&&(e[t]={...e[t],...r});M(e),P(k.data.pi),I([...k.data.fallbackOrder||[]])},[k,i]);let ie=(0,T.useCallback)(e=>{if(g.current!==h)return;let t=k.kind===`ready`?k.data.perCli?.pi:void 0;e.pi&&P(e.pi),M(t=>({...t,pi:{...t.pi,provider:e.provider,model:e.model}})),i.set(`perCli.pi.provider`,{value:e.provider,original:t?.provider??`progrok`,valid:!0}),i.set(`perCli.pi.model`,{value:e.model,original:t?.model??``,valid:!0})},[i,h,k]);(0,T.useEffect)(()=>()=>{for(let e of Array.from(i.pending.keys()))B(e)&&i.remove(e)},[i,h]);let ae=(0,T.useCallback)((e,t)=>{J()&&B(e)&&i.set(e,t)},[i,J]),X=(0,T.useCallback)(()=>{if(g.current!==h)return Promise.resolve();let e=v.current;if(e)return e.kind===`save`?e.promise:Promise.reject(Error(`Wait for the active override reset before saving.`));let t=Object.fromEntries(Object.entries(i.saveBundle()).filter(([e])=>B(e)));if(Object.keys(t).length===0)return Promise.resolve();let n=w(t),a=new Map([...i.pending].filter(([e])=>Object.hasOwn(t,e)));K(!0),W(null);let o={instance:h,kind:`save`,promise:Promise.resolve()};return o.promise=Promise.resolve().then(async()=>{if(g.current!==h)return;let e=await r.put(`/api/settings`,n);if(g.current!==h)return;let t=V(e);for(let[e,t]of a)i.pending.get(e)===t&&i.remove(e);A(t),await D(),await Y()}).catch(e=>{if(g.current===h)throw e}).finally(()=>{v.current===o&&(v.current=null),g.current===h&&K(!1)}),v.current=o,o.promise},[r,i,h,Y,D,A]);(0,T.useEffect)(()=>{if(o)return o(X),()=>o(null)},[o,X]);let oe=(0,T.useCallback)(()=>{if(!J()||k.kind!==`ready`||!window.confirm(`Reset all active overrides?`))return;R(!0),U(null);let e=te(k.data),t={instance:h,kind:`reset`,promise:Promise.resolve()};return t.promise=Promise.resolve().then(async()=>{if(g.current!==h)return;let t=await r.put(`/api/settings`,e);if(g.current!==h)return;let n=V(t);A(n),await D()}).catch(e=>{g.current===h&&U(m(e))}).finally(()=>{v.current===t&&(v.current=null),g.current===h&&R(!1)}),v.current=t,t.promise},[J,r,h,D,A,k]);if(k.kind===`loading`)return(0,E.jsx)(c,{});if(k.kind===`offline`)return(0,E.jsx)(u,{port:e});if(k.kind===`error`)return(0,E.jsx)(f,{message:k.message});let Z=k.data,Q=Z.perCli||{},se=H(Object.keys(Q)),ce=Z.activeOverrides||{},$=Object.entries(ce);return(0,E.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),X().catch(e=>{g.current===h&&W(m(e))})},children:[ne?(0,E.jsx)(f,{message:ne}):null,(0,E.jsx)(d,{title:`Model defaults`,hint:`Per-CLI model and runtime defaults. Runtime transport applies to the next run; display and permissions stay separate.`,children:se.length===0?(0,E.jsx)(l,{children:`No CLIs registered for this instance.`}):se.map(e=>(0,E.jsx)(ee,{cli:e,meta:y(e,re),original:Q[e]||{},value:j[e]||Q[e]||{},dirty:i,disabled:G||L,setValue:t=>{J()&&M({...j,[e]:t})},setEntry:ae,client:r,pi:N,setPi:e=>{J()&&P(e)},onPiRegistered:ie},e))}),(0,E.jsx)(d,{title:`Fallback order`,hint:`Order of CLIs used when the active CLI fails. Press Enter to add a chip; Backspace to remove the last.`,children:(0,E.jsx)(_,{id:`model-fallbackOrder`,label:`Fallback order`,error:(()=>{let e=F.find(n);return e?`A saved ${t(e).replace(` (retired)`,``)} fallback is retired. Remove it before changing this order.`:null})(),disabled:G||L,value:F,onChange:e=>{J()&&(I(e),ae(`fallbackOrder`,{value:e,original:Z.fallbackOrder||[],valid:!e.some(n)}))},placeholder:`cli name`})}),(0,E.jsxs)(d,{title:`Active overrides`,hint:`Per-session overrides applied on top of per-CLI defaults.`,children:[$.length===0?(0,E.jsx)(l,{children:`No active overrides.`}):(0,E.jsx)(a,{items:$.flatMap(([e,t])=>[{label:`${e} model`,value:t?.model||`—`,mono:!0},{label:`${e} effort`,value:t?.effort||`—`,mono:!0}])}),(0,E.jsx)(s,{status:z?(0,E.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:z}):null,children:(0,E.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:()=>void oe(),disabled:G||L||$.length===0,children:L?`Resetting…`:`Reset overrides`})})]})]})}export{te as buildResetOverridesPatch,U as default,H as orderModelCliKeys};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{n as r,o as i,r as a,s as o,t as s,u as c}from"./page-shell-DfinU3mb.js";import{a as l,i as u,s as d}from"./fields-CicOWY-X.js";import{t as f}from"./InlineWarn-Cq4z28F3.js";import{t as p}from"./path-utils-B6vBr0DD.js";var m=e(t(),1),h=n(),g=[`off`,`http-only`,`full`];function _(e){return e===`off`||e===`http-only`||e===`full`}var v=[`network.bindHost`,`network.lanBypass`,`network.remoteAccess.mode`,`network.remoteAccess.trustProxies`,`network.remoteAccess.trustForwardedFor`,`network.remoteAccess.publicOriginHint`],y=[{value:`127.0.0.1`,label:`127.0.0.1 — loopback only (recommended)`},{value:`0.0.0.0`,label:`0.0.0.0 — all interfaces (LAN exposed)`}],b=[{value:`off`,label:`off — block remote requests`},{value:`http-only`,label:`http-only — read-only HTTP from remote`},{value:`full`,label:`full — HTTP + WebSocket from remote`}];function x(e){let t={};return e.bindHost!==void 0&&(t.bindHost=e.bindHost),e.lanBypass!==void 0&&(t.lanBypass=e.lanBypass),t.remoteAccess={...e.remoteAccess??{}},t}function S(e){let t=(e||``).trim();if(t===``)return{kind:`empty`};let n;try{n=new URL(t)}catch{return{kind:`invalid`,reason:`Must be an absolute URL (https://… or http://…).`}}return n.protocol!==`http:`&&n.protocol!==`https:`?{kind:`invalid`,reason:`Only http:// or https:// origins are accepted.`}:n.hostname?n.pathname&&n.pathname!==`/`?{kind:`invalid`,reason:`Origin must not include a path.`}:n.search||n.hash?{kind:`invalid`,reason:`Origin must not include query or hash.`}:{kind:`valid`,origin:n.origin}:{kind:`invalid`,reason:`Origin must include a host.`}}function C(e){let t=(e.locationHost||``).toLowerCase().split(`:`)[0]||``;return t===``||t===`localhost`||t===`127.0.0.1`||t===`::1`||e.currentMode===e.nextMode?!1:e.nextMode===`off`}function w({port:e,client:t,dirty:n,registerSave:g}){let{state:w,refresh:T,setData:E}=c(t,`/api/settings`),[D,O]=(0,m.useState)({});(0,m.useEffect)(()=>{if(w.kind===`ready`){let e=w.data.network??{};O(x(e))}},[w]),(0,m.useEffect)(()=>()=>{for(let e of v)n.remove(e)},[n]);let k=(0,m.useCallback)((e,t)=>n.set(e,t),[n]),A=(0,m.useMemo)(()=>w.kind===`ready`?w.data.network??{}:{},[w]),j=A.remoteAccess??{},M=D.remoteAccess??{},N=D.bindHost??A.bindHost??`127.0.0.1`,P=!!(D.lanBypass??A.lanBypass),F=_(M.mode)?M.mode:_(j.mode)?j.mode:`off`,I=F!==`off`,L=!!(M.trustProxies??j.trustProxies),R=!!(M.trustForwardedFor??j.trustForwardedFor),z=M.publicOriginHint??j.publicOriginHint??``,B=S(z),V=C({currentMode:_(j.mode)?j.mode:`off`,nextMode:F,locationHost:typeof window<`u`?window.location.host:``}),H=(0,m.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0||V&&typeof window<`u`&&!window.confirm(`You are accessing this dashboard over a remote origin. Saving with remote access "off" will lock you out. Continue?`))return;let r=p(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear();let o=a.network??{};O(x(o)),E(a),await T()},[t,n,V,T,E]);if((0,m.useEffect)(()=>{if(g)return g(H),()=>g(null)},[g,H]),w.kind===`loading`)return(0,h.jsx)(r,{});if(w.kind===`offline`)return(0,h.jsx)(a,{port:e});if(w.kind===`error`)return(0,h.jsx)(s,{message:w.message});let U=(D.bindHost??A.bindHost)!==(A.bindHost??`127.0.0.1`);return(0,h.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),H()},children:[(0,h.jsxs)(o,{title:`Bind`,hint:`Listening interface for /i/${e}. Changes require an instance restart.`,children:[(0,h.jsx)(u,{id:`network-bindHost`,label:`Bind host`,value:N,options:y,onChange:e=>{O({...D,bindHost:e}),k(`network.bindHost`,{value:e,original:A.bindHost??`127.0.0.1`,valid:!0})}}),N===`0.0.0.0`&&(0,h.jsxs)(f,{children:[`Listening on `,(0,h.jsx)(`code`,{children:`0.0.0.0`}),` exposes this instance's API to anyone on your LAN. Pair with auth + firewall rules.`]}),U&&(0,h.jsx)(f,{tone:`info`,children:`Restart the instance for the new bind host to take effect.`}),(0,h.jsx)(l,{id:`network-lanBypass`,label:`LAN bypass`,description:`Skip auth checks for clients on the same LAN.`,value:P,onChange:e=>{O({...D,lanBypass:e}),k(`network.lanBypass`,{value:e,original:!!A.lanBypass,valid:!0})}}),P&&(0,h.jsx)(f,{children:`LAN bypass disables auth for any client on the same network. Only enable on a trusted network.`})]}),(0,h.jsxs)(o,{title:`Remote access`,hint:`Mode controls what reaches the API from outside the loopback interface.`,children:[(0,h.jsx)(u,{id:`network-remoteAccess-mode`,label:`Remote access mode`,value:F,options:b,onChange:e=>{_(e)&&(O({...D,remoteAccess:{...M,mode:e}}),k(`network.remoteAccess.mode`,{value:e,original:_(j.mode)?j.mode:`off`,valid:!0}))}}),(0,h.jsxs)(i,{children:[(0,h.jsx)(`strong`,{children:`off`}),` — only loopback can talk to the API.`,` `,(0,h.jsx)(`strong`,{children:`http-only`}),` — remote can issue HTTP requests but no WebSocket upgrades. `,(0,h.jsx)(`strong`,{children:`full`}),` — HTTP + WebSocket open to remote (use with auth).`]}),V&&(0,h.jsxs)(i,{tone:`error`,role:`alert`,children:[`Saving will close remote access while you're connected from`,(0,h.jsxs)(`code`,{children:[` `,typeof window<`u`?window.location.host:``,` `]}),`— you will be locked out. Reach the dashboard over loopback first.`]}),I&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l,{id:`network-remoteAccess-trustProxies`,label:`Trust proxies`,description:`Honor proxy headers when computing the client origin.`,value:L,onChange:e=>{O({...D,remoteAccess:{...M,trustProxies:e}}),k(`network.remoteAccess.trustProxies`,{value:e,original:!!j.trustProxies,valid:!0})}}),(0,h.jsx)(l,{id:`network-remoteAccess-trustForwardedFor`,label:`Trust X-Forwarded-For`,description:`Use X-Forwarded-For for the client IP. Only enable behind a known proxy.`,value:R,onChange:e=>{O({...D,remoteAccess:{...M,trustForwardedFor:e}}),k(`network.remoteAccess.trustForwardedFor`,{value:e,original:!!j.trustForwardedFor,valid:!0})}}),R&&!L&&(0,h.jsx)(f,{children:`Trusting X-Forwarded-For without trusting the proxy chain lets any client spoof its IP. Enable "Trust proxies" too.`}),(0,h.jsx)(d,{id:`network-remoteAccess-publicOriginHint`,label:`Public origin hint`,value:z,placeholder:`https://your-tunnel-url`,error:B.kind===`invalid`?B.reason:null,onChange:e=>{O({...D,remoteAccess:{...M,publicOriginHint:e}});let t=S(e);k(`network.remoteAccess.publicOriginHint`,{value:t.kind===`valid`?t.origin:e,original:j.publicOriginHint??``,valid:t.kind!==`invalid`})}})]})]})]})}export{g as REMOTE_ACCESS_MODES,w as default,C as detectSelfLockoutRisk,_ as isRemoteAccessMode,S as parsePublicOriginHint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{a as r,i,n as a,o,r as s,t as c}from"./notes-graph-settings-BUoTzvqs.js";import{B as l,Bt as u,Ft as d,It as f,Lt as p,Nt as m,Pt as h,V as g,zt as _}from"./vendor-utils-C1xaEGmb.js";var v=e(t(),1);function y(e){return{nodeSize:e.nodeSize,linkDistance:e.linkDistance,chargeStrength:e.chargeStrength,labelDensity:e.labelDensity,showArrows:e.showArrows,animate:e.animate}}function b(e,t){let n=e.kind===`tag`?5:e.kind===`missing`||e.kind===`ambiguous`?6:7,r=Math.sqrt(Math.max(0,e.degree))*2.4;return Math.min(26,Math.max(4,(n+r)*t.nodeSize))}function x(e,t,n){return e.kind===`missing`||e.kind===`ambiguous`?t>=.45:e.kind===`tag`?n.labelDensity>.35&&t>=.65:n.labelDensity>=.75?t>=.35:n.labelDensity>=.45?e.degree>0&&t>=.6:e.degree>=2&&t>=.85}var S=n();function C(e,t){let n=e.id===t?` is-selected`:``;return`notes-graph-node notes-graph-node-${e.kind}${n}`}function w(e){return`notes-graph-link notes-graph-link-${e.status}${e.virtual?` is-virtual`:``}`}function T(e){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(e.onNavigate),[i,a]=(0,v.useState)({width:900,height:650});r.current=e.onNavigate;let o=(0,v.useMemo)(()=>y(e.settings),[e.settings]);return(0,v.useEffect)(()=>{let e=n.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();a({width:Math.max(320,Math.floor(t.width||900)),height:Math.max(320,Math.floor(t.height||650))})};if(t(),typeof window.ResizeObserver!=`function`)return;let r=new window.ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[]),(0,v.useEffect)(()=>{let n=t.current;if(!n)return;let a=u(n);if(a.selectAll(`*`).remove(),a.attr(`viewBox`,`0 0 ${i.width} ${i.height}`),e.data.nodes.length===0)return;let s=window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,c=e.data.nodes.map(e=>({...e})),v=new Map(c.map(e=>[e.id,e])),y=e.data.edges.flatMap(e=>{let t=v.get(e.source),n=v.get(e.target),r={raw:e.raw,status:e.status,...e.resolvedPath?{resolvedPath:e.resolvedPath}:{},...e.virtual?{virtual:e.virtual}:{}};return t&&n?[{...r,source:t,target:n}]:[]});a.append(`defs`).append(`marker`).attr(`id`,`notes-graph-arrow`).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,15).attr(`refY`,0).attr(`markerWidth`,6).attr(`markerHeight`,6).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,`currentColor`);let S=a.append(`g`).attr(`class`,`notes-graph-viewport`),T=S.append(`g`).attr(`class`,`notes-graph-links`).selectAll(`line`).data(y).join(`line`).attr(`class`,w).attr(`marker-end`,o.showArrows?`url(#notes-graph-arrow)`:null),E=S.append(`g`).attr(`class`,`notes-graph-nodes`).selectAll(`g`).data(c).join(`g`).attr(`class`,t=>C(t,e.selectedPath)).attr(`tabindex`,e=>e.kind===`note`?0:-1).attr(`role`,e=>e.kind===`note`?`button`:`img`).attr(`aria-label`,e=>`${e.title}, ${e.kind}, ${e.degree} links`).on(`click`,(e,t)=>{t.kind===`note`&&t.path&&r.current(t.path)}).on(`keydown`,(e,t)=>{t.kind===`note`&&t.path&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),r.current(t.path))});E.append(`circle`).attr(`r`,e=>b(e,o)).attr(`fill`,e=>e.groupColor??null),E.append(`text`).attr(`class`,`notes-graph-label`).attr(`x`,e=>b(e,o)+8).attr(`y`,4).text(e=>e.title),E.append(`title`).text(e=>e.groupLabel?`${e.title} · ${e.groupLabel}`:e.title);let D=h(c).force(`link`,d(y).id(e=>e.id).distance(o.linkDistance)).force(`charge`,m().strength(o.chargeStrength)).force(`center`,p(i.width/2,i.height/2)).force(`collision`,f().radius(e=>b(e,o)+8));function O(){T.attr(`x1`,e=>e.source.x??0).attr(`y1`,e=>e.source.y??0).attr(`x2`,e=>e.target.x??0).attr(`y2`,e=>e.target.y??0),E.attr(`transform`,e=>`translate(${e.x??i.width/2},${e.y??i.height/2})`)}let k=l().scaleExtent([.18,5]).on(`zoom`,e=>{S.attr(`transform`,e.transform),E.classed(`is-label-visible`,t=>x(t,e.transform.k,o))});a.call(k);let A=g.translate(0,0).scale(1);a.call(k.transform,A);let j=_().on(`start`,(e,t)=>{!e.active&&o.animate&&!s&&D.alphaTarget(.25).restart(),t.fx=t.x,t.fy=t.y}).on(`drag`,(e,t)=>{t.fx=e.x,t.fy=e.y}).on(`end`,(e,t)=>{e.active||D.alphaTarget(0),t.fx=null,t.fy=null});return E.call(j),o.animate&&!s?D.on(`tick`,O):(D.tick(120),O(),D.stop()),()=>{D.stop(),a.on(`.zoom`,null)}},[e.data,e.selectedPath,i,o,e.fitToken]),(0,S.jsxs)(`div`,{ref:n,className:`notes-graph-canvas`,"data-empty":e.data.nodes.length===0?`true`:`false`,children:[e.data.nodes.length===0?(0,S.jsx)(`div`,{className:`notes-graph-empty-state`,children:`No matching graph nodes`}):null,(0,S.jsx)(`svg`,{ref:t,className:`notes-graph-svg`,"aria-label":`Notes graph`})]})}function E(e){return e===`filters`?`Filters`:e===`display`?`Display`:e===`forces`?`Forces`:`Groups`}function D(e,t){return{...e,...t,collapsedSections:t.collapsedSections??e.collapsedSections,groups:t.groups??e.groups}}function O(e){return(0,S.jsxs)(`label`,{className:`notes-graph-toggle${e.disabled?` is-disabled`:``}`,children:[(0,S.jsx)(`span`,{children:e.label}),(0,S.jsx)(`input`,{type:`checkbox`,checked:e.checked,disabled:e.disabled,onChange:t=>e.onChange(t.currentTarget.checked)})]})}function k(e){let{settings:t}=e;function n(n){e.onChange(D(t,n))}function i(e){n({[e]:!t[e]})}function o(e){n({collapsedSections:{...t.collapsedSections,[e]:!t.collapsedSections[e]}})}function c(e,r){n({groups:t.groups.map(t=>t.id===e?{...t,...r}:t)})}function l(){n({groups:[...t.groups,r(t.groups.length,t.query)]})}function u(e){n({groups:t.groups.filter(t=>t.id!==e)})}return(0,S.jsxs)(`aside`,{className:`notes-graph-controls`,"aria-label":`Graph controls`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-controls-header`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h3`,{children:`Graph`}),(0,S.jsx)(`span`,{children:e.selectedPath?`Focus-ready`:`Global view`})]}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:e.onClose,"aria-label":`Close graph controls`,children:`X`})]}),s.map(r=>(0,S.jsxs)(`section`,{className:`notes-graph-control-section`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`notes-graph-section-toggle`,onClick:()=>o(r),"aria-expanded":!t.collapsedSections[r],children:[(0,S.jsx)(`span`,{children:E(r)}),(0,S.jsx)(`span`,{children:t.collapsedSections[r]?`+`:`-`})]}),!t.collapsedSections[r]&&r===`filters`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsx)(`span`,{children:`Search`}),(0,S.jsx)(`input`,{value:t.query,onChange:e=>n({query:e.currentTarget.value}),placeholder:`title, path:, tag:, kind:`})]}),(0,S.jsx)(O,{label:`Existing files only`,checked:t.existingFilesOnly,onChange:()=>i(`existingFilesOnly`)}),(0,S.jsx)(O,{label:`Show orphans`,checked:t.showOrphans,onChange:()=>i(`showOrphans`)}),(0,S.jsx)(O,{label:`Show tags`,checked:t.showTags,onChange:()=>i(`showTags`)}),(0,S.jsx)(O,{label:`Show attachments`,checked:t.showAttachments,onChange:()=>i(`showAttachments`)}),(0,S.jsx)(O,{label:`Focus selected`,checked:t.focusSelected,disabled:!e.selectedPath,onChange:()=>i(`focusSelected`)}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Depth `,t.focusDepth]}),(0,S.jsx)(`input`,{type:`range`,min:`1`,max:`4`,value:t.focusDepth,disabled:!t.focusSelected||!e.selectedPath,onChange:e=>n({focusDepth:Number(e.currentTarget.value)})})]})]}):null,!t.collapsedSections[r]&&r===`display`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Node size `,t.nodeSize.toFixed(1)]}),(0,S.jsx)(`input`,{type:`range`,min:`0.6`,max:`2`,step:`0.1`,value:t.nodeSize,onChange:e=>n({nodeSize:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Labels `,Math.round(t.labelDensity*100),`%`]}),(0,S.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.labelDensity,onChange:e=>n({labelDensity:Number(e.currentTarget.value)})})]}),(0,S.jsx)(O,{label:`Show arrows`,checked:t.showArrows,onChange:()=>i(`showArrows`)}),(0,S.jsx)(O,{label:`Animate`,checked:t.animate,onChange:()=>i(`animate`)})]}):null,!t.collapsedSections[r]&&r===`forces`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Link distance `,t.linkDistance]}),(0,S.jsx)(`input`,{type:`range`,min:`40`,max:`240`,value:t.linkDistance,onChange:e=>n({linkDistance:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`label`,{className:`notes-graph-field`,children:[(0,S.jsxs)(`span`,{children:[`Repel `,Math.abs(t.chargeStrength)]}),(0,S.jsx)(`input`,{type:`range`,min:`-800`,max:`-20`,value:t.chargeStrength,onChange:e=>n({chargeStrength:Number(e.currentTarget.value)})})]}),(0,S.jsxs)(`div`,{className:`notes-graph-control-row`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:e.onFit,children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:e.onReset,children:`Reset`})]})]}):null,!t.collapsedSections[r]&&r===`groups`?(0,S.jsxs)(`div`,{className:`notes-graph-control-body`,children:[(0,S.jsx)(O,{label:`Query groups`,checked:t.groupMode===`query`,onChange:e=>n({groupMode:e?`query`:`off`})}),(0,S.jsx)(`div`,{className:`notes-graph-groups`,children:t.groups.map((e,t)=>(0,S.jsxs)(`div`,{className:`notes-graph-group-row`,children:[(0,S.jsx)(`input`,{className:`notes-graph-color`,type:`color`,value:e.color,onChange:t=>c(e.id,{color:t.currentTarget.value})}),(0,S.jsx)(`input`,{value:e.label,onChange:t=>c(e.id,{label:t.currentTarget.value}),"aria-label":`Group ${t+1} label`}),(0,S.jsx)(`input`,{value:e.query,onChange:t=>c(e.id,{query:t.currentTarget.value}),"aria-label":`Group ${t+1} query`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>c(e.id,{enabled:!e.enabled}),"aria-pressed":e.enabled,children:e.enabled?`On`:`Off`}),(0,S.jsx)(`button`,{type:`button`,className:`notes-graph-icon-button`,onClick:()=>u(e.id),"aria-label":`Remove ${e.label}`,children:`X`})]},e.id))}),(0,S.jsx)(`div`,{className:`notes-graph-swatches`,"aria-label":`Group color presets`,children:a.map(e=>(0,S.jsx)(`span`,{style:{background:e}},e))}),(0,S.jsx)(`button`,{type:`button`,onClick:l,children:`Add group`})]}):null]},r))]})}var A={note:0,tag:1,missing:2,ambiguous:3,attachment:4};function j(e){return e.trim().replace(/^#/,``).toLowerCase()}function M(e){return`tag:${j(e)}`}function N(e,t){let n=[e.id,e.title,e.path??``];return t&&n.push(t.title,t.path,...t.aliases,...t.tags),n.filter(Boolean).map(e=>e.toLowerCase())}function P(e,t,n){let r=e.toLowerCase();if(r.startsWith(`kind:`))return t.kind===r.slice(5);if(r.startsWith(`path:`))return(t.path??t.id).toLowerCase().includes(r.slice(5));if(r.startsWith(`tag:`)){let e=j(r.slice(4));return e?t.kind===`tag`?j(t.title).includes(e)||t.id.includes(e):!!n?.tags.some(t=>j(t).includes(e)):!0}return N(t,n).some(e=>e.includes(r))}function F(e,t,n){let r=e.trim().split(/\s+/).filter(Boolean);return r.length===0||r.every(e=>P(e,t,n))}function I(e,t,n){if(n.groupMode!==`off`)return n.groups.find(n=>n.enabled&&F(n.query,e,t))}function L(e,t){let n=new Map;for(let t of e.graph.nodes)n.set(t.id,{...t});for(let t of e.notes)n.has(t.path)||n.set(t.path,{id:t.path,title:t.title,kind:`note`,path:t.path});let r=e.graph.edges.map(e=>({...e}));if(t.showTags)for(let t of e.notes)for(let e of t.tags){let i=j(e);if(!i)continue;let a=M(i);n.has(a)||n.set(a,{id:a,title:`#${i}`,kind:`tag`}),r.push({source:t.path,target:a,raw:`#${i}`,status:`resolved`,resolvedPath:t.path})}return{nodes:[...n.values()],edges:r}}function R(e){let t=new Map;for(let n of e)t.set(n.source,(t.get(n.source)??0)+1),t.set(n.target,(t.get(n.target)??0)+1);return t}function z(e,t,n){let r=new Map;for(let t of e)r.has(t.source)||r.set(t.source,new Set),r.has(t.target)||r.set(t.target,new Set),r.get(t.source)?.add(t.target),r.get(t.target)?.add(t.source);let i=new Set([t]),a=new Set([t]);for(let e=0;e<n;e+=1){let e=new Set;for(let t of a)for(let n of r.get(t)??[])i.has(n)||(i.add(n),e.add(n));if(a=e,a.size===0)break}return i}function B(e,t){return A[e.kind]-A[t.kind]||e.title.localeCompare(t.title)||e.id.localeCompare(t.id)}function V(e,t,n){if(!e)return{nodes:[],edges:[],noteCount:0,linkCount:0,missingCount:0,tagCount:0,hiddenCount:0};let r=new Map(e.notes.map(e=>[e.path,e])),i=L(e,t),a=i.nodes.filter(e=>t.existingFilesOnly&&(e.kind===`missing`||e.kind===`ambiguous`)||!t.showTags&&e.kind===`tag`||!t.showAttachments&&e.kind===`attachment`?!1:F(t.query,e,r.get(e.path??e.id))),o=new Set(a.map(e=>e.id)),s=i.edges.filter(e=>o.has(e.source)&&o.has(e.target));if(!t.showOrphans){let e=R(s);a=a.filter(t=>t.id===n||(e.get(t.id)??0)>0||t.kind!==`note`),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}if(t.focusSelected&&n&&o.has(n)){let e=z(s,n,t.focusDepth);a=a.filter(t=>e.has(t.id)),o=new Set(a.map(e=>e.id)),s=s.filter(e=>o.has(e.source)&&o.has(e.target))}let c=R(s),l=a.map(e=>{let n=r.get(e.path??e.id),i=I(e,n,t);return{...e,degree:c.get(e.id)??0,...i?{groupColor:i.color,groupLabel:i.label}:{},searchMatch:F(t.query,e,n)}}).sort(B),u=new Set(l.map(e=>e.id)),d=s.filter(e=>u.has(e.source)&&u.has(e.target)).map(e=>({...e,virtual:e.target.startsWith(`tag:`)||e.source.startsWith(`tag:`)})).sort((e,t)=>e.source.localeCompare(t.source)||e.target.localeCompare(t.target)||e.raw.localeCompare(t.raw));return{nodes:l,edges:d,noteCount:l.filter(e=>e.kind===`note`).length,linkCount:d.filter(e=>!e.virtual).length,missingCount:l.filter(e=>e.kind===`missing`||e.kind===`ambiguous`).length,tagCount:l.filter(e=>e.kind===`tag`).length,hiddenCount:i.nodes.length-l.length}}var H={dataPlane:`dashboard-notes-api`,shellPanels:`render-only`};function U(){return i(c)}function W(e){let[t,n]=(0,v.useState)(()=>o(e.settings??U())),[r,i]=(0,v.useState)(0),a=(0,v.useRef)(null);(0,v.useEffect)(()=>{n(o(e.settings??U()))},[e.settings]),(0,v.useEffect)(()=>()=>{a.current!=null&&window.clearTimeout(a.current)},[]);function s(t,r=!1){if(n(t),e.onSettingsChange){if(a.current!=null&&window.clearTimeout(a.current),r){e.onSettingsChange(t);return}a.current=window.setTimeout(()=>e.onSettingsChange?.(t),140)}}function c(){s(U(),!0),i(e=>e+1)}function l(){s({...t,panelOpen:!1},!0)}function u(){s({...t,panelOpen:!0},!0)}let d=(0,v.useMemo)(()=>V(e.vaultIndex,t,e.selectedPath),[e.vaultIndex,t,e.selectedPath]);return(0,S.jsxs)(`div`,{className:`notes-graph-workspace${t.panelOpen?` has-controls`:``}`,children:[(0,S.jsxs)(`header`,{className:`notes-graph-toolbar`,children:[(0,S.jsxs)(`div`,{className:`notes-graph-counts`,"aria-live":`polite`,children:[(0,S.jsx)(`strong`,{children:d.noteCount}),` notes`,(0,S.jsxs)(`span`,{children:[d.linkCount,` links`]}),(0,S.jsxs)(`span`,{children:[d.missingCount,` unresolved`]}),d.tagCount>0?(0,S.jsxs)(`span`,{children:[d.tagCount,` tags`]}):null]}),(0,S.jsxs)(`div`,{className:`notes-graph-actions`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>i(e=>e+1),children:`Fit`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,children:`Reset`}),t.panelOpen?null:(0,S.jsx)(`button`,{type:`button`,onClick:u,children:`Controls`})]})]}),(0,S.jsxs)(`div`,{className:`notes-graph-body`,children:[(0,S.jsx)(T,{data:d,selectedPath:e.selectedPath,settings:t,fitToken:r,onNavigate:e.onNavigate}),t.panelOpen?(0,S.jsx)(k,{settings:t,selectedPath:e.selectedPath,onChange:e=>s(e),onReset:c,onFit:()=>i(e=>e+1),onClose:l}):null]})]})}export{H as NOTES_GRAPH_RUNTIME_BOUNDARY,W as NotesGraphWorkspace};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{r}from"./terminal-shortcut-queue-B_AyW1hN.js";var i=e(t(),1),a=null,o={register(e){return a=e,()=>{a===e&&(a=null)}},dispatch(e){return a?.(e)??!1}},s=[`terminal`,`browser`,`logs`,`activity`],c=9999,l=[`files`,`diff`,`browser`,`design`],u={files:`Files`,diff:`Diff`,browser:`Browser`,design:`Design`},d=[`files`,`browser`,`design`],f=`Working tree`,p=.5,m=n();function h(e){return d.includes(e)}function g(e,t){return e===`diff`?`right-diff`:`right-${e}-${t??1}`}function _(e,t){return e===`diff`?f:`${u[e]} ${t??1}`}function v(e,t,n){if(t===`diff`){let t=e.openTabs.find(e=>e.kind===`diff`);if(t)return{...e,activeTabId:t.id};let r={id:g(`diff`),kind:`diff`,title:n?.title??u.diff,specificName:n?.specificName??`Working tree`,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}};return{...e,openTabs:[...e.openTabs,r],activeTabId:r.id}}let r=e.openTabs.filter(e=>e.kind===t).reduce((e,t)=>Math.max(e,t.ordinal??1),0),i=Math.max(e.nextOrdinalByKind[t]??1,r+1),a={id:g(t,i),kind:t,title:n?.title??u[t],specificName:n?.specificName??_(t,i),ordinal:i,...n?.sourceLabel?{sourceLabel:n.sourceLabel}:{}},o=h(t)?{...e.nextOrdinalByKind,[t]:i+1}:e.nextOrdinalByKind;return{openTabs:[...e.openTabs,a],activeTabId:a.id,nextOrdinalByKind:o}}function y(e,t){let n=e.openTabs.find(e=>e.kind===t);return n?{...e,activeTabId:n.id}:v(e,t)}function b(e,t){return e.openTabs.find(e=>e.id===t)?{...e,activeTabId:t}:e}function x(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t);if(r===-1)return e;let i=e.openTabs[r],a={...i,...n.title===void 0?{}:{title:n.title},...n.specificName===void 0?{}:{specificName:n.specificName},...n.sourceLabel===void 0?{}:{sourceLabel:n.sourceLabel}};if(a.title===i.title&&a.specificName===i.specificName&&a.sourceLabel===i.sourceLabel)return e;let o=[...e.openTabs];return o[r]=a,{...e,openTabs:o}}function S(e){if(!e)return null;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``).split(`/`).filter(Boolean);return t[t.length-1]??null}function C(e,t){return S(t.activeFilePath)??S(t.folderRootPath)??_(`files`,e.ordinal)}function w(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`files`);if(r===-1)return e;let i=e.openTabs[r],a={...i.files,...n},o=C(i,a),s=a.activeFilePath??a.folderRootPath??void 0,c=[...e.openTabs];return c[r]={...i,files:a,specificName:o,...s?{sourceLabel:s}:{}},{...e,openTabs:c}}function T(e,t,n,r){let i=e.openTabs.find(e=>e.id===t&&e.kind===`files`);return i?r===`follow-instance`?w(e,t,{repoRootPath:n,repoRootMode:`instance`}):r===`instance`&&i.files?.repoRootMode===`manual`?e:w(e,t,{repoRootPath:n,repoRootMode:r}):e}function E(e){let t=e.openTabs.find(t=>t.id===e.activeTabId);return t?.kind===`files`?t:e.openTabs.find(e=>e.kind===`files`)??null}function D(e,t){let n=e,r=E(n);return r?n=b(n,r.id):(n=v(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?w(n,r.id,{activeFilePath:t}):n}function O(e,t){let n=e,r=E(n);return r?n=b(n,r.id):(n=v(n,`files`),r=n.openTabs[n.openTabs.length-1]??null),r?w(n,r.id,{folderRootPath:t,repoRootPath:null,repoRootMode:`instance`}):n}function k(e){if(!e)return null;try{return new URL(e).hostname.replace(/^www\./,``)||null}catch{return null}}function A(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`browser`);if(r===-1)return e;let i=e.openTabs[r],a=n.url??i.browser?.url,o=n.title?.trim()||k(a)||_(`browser`,i.ordinal),s={...i,...a?{browser:{...i.browser,url:a}}:{},specificName:o,...a?{sourceLabel:a}:{}};if(s.specificName===i.specificName&&s.sourceLabel===i.sourceLabel&&s.browser?.url===i.browser?.url)return e;let c=[...e.openTabs];return c[r]=s,{...e,openTabs:c}}function j(e,t,n){let r=e.openTabs.findIndex(e=>e.id===t&&e.kind===`design`);if(r===-1)return e;let i=e.openTabs[r],a={...i.design};if(n.pageId!==void 0&&(a.pageId=n.pageId),n.zoom!==void 0&&(a.zoom=n.zoom),n.projectKey!==void 0&&(a.projectKey===void 0||a.projectKey===null)&&(a.projectKey=n.projectKey),a.pageId===i.design?.pageId&&a.projectKey===i.design?.projectKey&&a.zoom===i.design?.zoom)return e;let o=[...e.openTabs];return o[r]={...i,design:a},{...e,openTabs:o}}function M(e,t){let n=v(e,`browser`),r=n.openTabs[n.openTabs.length-1];return r?A(n,r.id,{url:t}):n}function N(e,t){let n=e.openTabs.findIndex(e=>e.id===t);if(n===-1)return e;let r=e.openTabs.filter(e=>e.id!==t),i=e.activeTabId;if(e.activeTabId===t){if(r.length===0)i=null;else{let e=Math.min(n,r.length-1);i=(n>0?r[n-1]:r[e])?.id??null}}return{openTabs:r,activeTabId:i,nextOrdinalByKind:e.nextOrdinalByKind}}function P(e){return e<=.12?`folder-only`:e>=.88?`file-only`:`split`}function F(e){return typeof e!=`number`||!Number.isFinite(e)?p:Math.max(0,Math.min(1,e))}function I(e){if(e.mode!==`folder-only`)return e;let t=e.lastSplitRatio||.5;return{mode:`split`,splitRatio:t,lastSplitRatio:t}}function L(e){return typeof e!=`number`||!Number.isFinite(e)?480:Math.min(c,Math.max(260,Math.round(e)))}function R(e){return typeof e!=`number`||!Number.isFinite(e)?320:Math.min(520,Math.max(180,Math.round(e)))}function z(e){let t={...e};t.width=L(t.width);let n=t.tabs.openTabs.filter(e=>l.includes(e.kind));return n.length!==t.tabs.openTabs.length&&(t.tabs={...t.tabs,openTabs:n}),t.tabs.activeTabId&&!n.find(e=>e.id===t.tabs.activeTabId)&&(t.tabs={...t.tabs,activeTabId:n[0]?.id??null}),!t.tabs.activeTabId&&n.length>0&&(t.tabs={...t.tabs,activeTabId:n[0].id}),t.tabs.openTabs.length===0&&t.open&&(t.open=!1),t}function B(e,t){switch(t.type){case`SET_RIGHT_OPEN`:return{...e,rightPanel:{...e.rightPanel,open:t.open}};case`SET_RIGHT_WIDTH`:return{...e,rightPanel:{...e.rightPanel,width:L(t.width)}};case`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`:{let n=y(e.rightPanel.tabs,t.kind);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`CREATE_RIGHT_SIDEBAR_TAB`:{let n=v(e.rightPanel.tabs,t.kind,t.tab);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`ACTIVATE_RIGHT_SIDEBAR_TAB`:{let n=b(e.rightPanel.tabs,t.tabId);return{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_RIGHT_SIDEBAR_TAB_META`:{let n=x(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`CLOSE_RIGHT_SIDEBAR_TAB`:{let n=N(e.rightPanel.tabs,t.tabId),r=n.openTabs.length>0;return{...e,rightPanel:{...e.rightPanel,open:r,tabs:n}}}case`OPEN_FILE_IN_FILES_TAB`:{let n=D(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n,fileFolderLayout:I(e.rightPanel.fileFolderLayout)}}}case`OPEN_FOLDER_IN_FILES_TAB`:{let n=O(e.rightPanel.tabs,t.path);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_FILES_TAB_FILE`:{let n=w(e.rightPanel.tabs,t.tabId,{activeFilePath:t.path});if(n===e.rightPanel.tabs)return e;let r=t.path?I(e.rightPanel.fileFolderLayout):e.rightPanel.fileFolderLayout;return{...e,rightPanel:{...e.rightPanel,tabs:n,fileFolderLayout:r}}}case`SET_FILES_TAB_ROOT`:{let n=w(e.rightPanel.tabs,t.tabId,{folderRootPath:t.path,repoRootPath:null,repoRootMode:`instance`});return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILES_TAB_REPO_ROOT`:{let n=T(e.rightPanel.tabs,t.tabId,t.path,t.mode);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_BROWSER_TAB_STATE`:{let n={};t.url!==void 0&&(n.url=t.url),t.title!==void 0&&(n.title=t.title);let r=A(e.rightPanel.tabs,t.tabId,n);return r===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:r}}}case`OPEN_BROWSER_MODULE_TAB`:{let n=M(e.rightPanel.tabs,t.url);return{...e,rightPanel:{...e.rightPanel,open:!0,tabs:n}}}case`SET_DESIGN_TAB_STATE`:{let n=j(e.rightPanel.tabs,t.tabId,t.patch);return n===e.rightPanel.tabs?e:{...e,rightPanel:{...e.rightPanel,tabs:n}}}case`SET_FILE_FOLDER_SPLIT_RATIO`:{let n=F(t.ratio),r=P(n),i=r===`split`?n:e.rightPanel.fileFolderLayout.lastSplitRatio;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:r,splitRatio:n,lastSplitRatio:i}}}}case`SET_FILE_FOLDER_VIEW_MODE`:{let n=e.rightPanel.fileFolderLayout;if(t.mode===n.mode)return e;let r=n.splitRatio,i=n.lastSplitRatio;return t.mode===`folder-only`?r=0:t.mode===`file-only`?r=1:(r=i||.5,i=r),{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:t.mode,splitRatio:r,lastSplitRatio:i}}}}case`RESTORE_FILE_FOLDER_SPLIT`:{let t=e.rightPanel.fileFolderLayout.lastSplitRatio||.5;return{...e,rightPanel:{...e.rightPanel,fileFolderLayout:{mode:`split`,splitRatio:t,lastSplitRatio:t}}}}case`SET_BOTTOM_OPEN`:return{...e,bottomPanel:{...e.bottomPanel,open:t.open}};case`SET_BOTTOM_HEIGHT`:return{...e,bottomPanel:{...e.bottomPanel,height:R(t.height)}};case`OPEN_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.includes(t.tab)?n.tabs:[...n.tabs,t.tab];return{...e,bottomPanel:{...n,open:!0,tabs:r,activeTab:t.tab}}}case`CLOSE_BOTTOM_TAB`:{let n=e.bottomPanel,r=n.tabs.filter(e=>e!==t.tab),i=n.activeTab===t.tab?r[0]??null:n.activeTab,a=r.length>0;return{...e,bottomPanel:{...n,tabs:r,activeTab:i,open:a}}}case`SET_BOTTOM_ACTIVE_TAB`:return{...e,bottomPanel:{...e.bottomPanel,activeTab:t.tab}};case`HYDRATE`:{let n=t.state,r=z({...e.rightPanel,...n.rightPanel}),i={...e.bottomPanel,...n.bottomPanel};return i.height=R(i.height),i.tabs=(i.tabs??[]).filter(e=>s.includes(e)),i.activeTab!==null&&!i.tabs.includes(i.activeTab)&&(i.activeTab=i.tabs[0]??null),{rightPanel:r,bottomPanel:i}}default:return e}}var V={rightPanel:{open:!1,width:480,tabs:{openTabs:[],activeTabId:null,nextOrdinalByKind:{}},fileFolderLayout:{mode:`split`,splitRatio:p,lastSplitRatio:p}},bottomPanel:{open:!1,height:320,tabs:[],activeTab:null}},H=(0,i.createContext)(null);function U(e){let{tabs:t}=e.rightPanel;return t.activeTabId?t.openTabs.find(e=>e.id===t.activeTabId)?.kind??null:null}function W(e){let[t,n]=(0,i.useReducer)(B,V),a=(0,i.useRef)(null),s=(0,i.useCallback)(e=>{a.current??=r(window),a.current.enqueue(e)},[]);(0,i.useEffect)(()=>()=>{a.current?.dispose(),a.current=null},[]);let c=(0,i.useRef)(!1);(0,i.useEffect)(()=>{e.initialPanelState&&!c.current&&(c.current=!0,n({type:`HYDRATE`,state:e.initialPanelState}))},[e.initialPanelState]);let l=(0,i.useRef)(e.onStateChange);l.current=e.onStateChange,(0,i.useEffect)(()=>{if(!l.current)return;let e=setTimeout(()=>l.current?.(t),300);return()=>clearTimeout(e)},[t]);let u=t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0&&t.rightPanel.tabs.activeTabId!==null,d=U(t);(0,i.useEffect)(()=>o.register(e=>{switch(e){case`toggleBottomPanel`:return t.bottomPanel.open?n({type:`SET_BOTTOM_OPEN`,open:!1}):n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),!0;case`toggleRightPanel`:return n(u?{type:`SET_RIGHT_OPEN`,open:!1}:{type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`focusTerminal`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),s(`focusTerminal`),!0;case`newTerminalSession`:return n({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),s(`newTerminalSession`),!0;case`openDiff`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`diff`}),!0;case`openFolderTree`:return n({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),!0;case`closeActiveBottomTab`:return t.bottomPanel.activeTab&&n({type:`CLOSE_BOTTOM_TAB`,tab:t.bottomPanel.activeTab}),!0;default:return!1}}),[t.bottomPanel.open,t.bottomPanel.activeTab,u,s]);let f=(0,i.useMemo)(()=>({state:t,dispatch:n,effectiveRightOpen:u,activeRightTabKind:d}),[t,u,d]);return(0,m.jsx)(H.Provider,{value:f,children:e.children})}function G(){let e=(0,i.useContext)(H);if(!e)throw Error(`usePanelLayout must be used within PanelLayoutProvider`);return e}function K(){let{dispatch:e,state:t}=G();return(0,i.useMemo)(()=>({focusOrCreateFirstRightSidebarTab:t=>e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:t}),createRightSidebarTab:(t,n)=>e({type:`CREATE_RIGHT_SIDEBAR_TAB`,kind:t,...n?{tab:n}:{}}),activateRightSidebarTab:t=>e({type:`ACTIVATE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightSidebarTabMeta:(t,n)=>e({type:`SET_RIGHT_SIDEBAR_TAB_META`,tabId:t,patch:n}),closeRightSidebarTab:t=>e({type:`CLOSE_RIGHT_SIDEBAR_TAB`,tabId:t}),setRightWidth:t=>e({type:`SET_RIGHT_WIDTH`,width:t}),setFileFolderSplitRatio:t=>e({type:`SET_FILE_FOLDER_SPLIT_RATIO`,ratio:t}),setFileFolderViewMode:t=>e({type:`SET_FILE_FOLDER_VIEW_MODE`,mode:t}),restoreFileFolderSplit:()=>e({type:`RESTORE_FILE_FOLDER_SPLIT`}),toggleRightPanel:()=>t.rightPanel.open&&t.rightPanel.tabs.openTabs.length>0?e({type:`SET_RIGHT_OPEN`,open:!1}):e({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`files`}),openBottomTab:t=>e({type:`OPEN_BOTTOM_TAB`,tab:t}),closeBottomTab:t=>e({type:`CLOSE_BOTTOM_TAB`,tab:t}),setBottomActiveTab:t=>e({type:`SET_BOTTOM_ACTIVE_TAB`,tab:t}),setBottomHeight:t=>e({type:`SET_BOTTOM_HEIGHT`,height:t}),toggleBottomPanel:()=>t.bottomPanel.open?e({type:`SET_BOTTOM_OPEN`,open:!1}):e({type:`OPEN_BOTTOM_TAB`,tab:`terminal`}),hydrate:t=>e({type:`HYDRATE`,state:t})}),[e,t.rightPanel.open,t.bottomPanel.open])}export{p as a,l as c,G as i,u as l,P as n,f as o,K as r,d as s,W as t,o as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{a as r,l as i,n as a,o,r as s,s as c,t as l,u}from"./page-shell-DfinU3mb.js";import{i as d,n as f}from"./fields-CicOWY-X.js";import{t as p}from"./InlineWarn-Cq4z28F3.js";var m=e(t(),1),h=/^[a-zA-Z0-9._:*-]+$/;function g(e){return typeof e==`string`&&e.length>0&&e.length<=64&&h.test(e)}function _(e){if(typeof e!=`string`)return!1;let t=e.trim();return t.length===0||g(t)}function v(e){if(e===`auto`||e===`safe`)return!0;if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t+=1)if(!_(e[t]))return!1;return!0}var y=n(),b=[`bash`,`read`,`write`,`edit`,`mcp.*`];function x(e){return e===`auto`?`Auto (YOLO)`:e===`safe`?`Safe`:e==null?`Not provided`:Array.isArray(e)&&v(e)?`Custom (${e.length} ${e.length===1?`entry`:`entries`})`:`Unrecognized`}function S(e){return e===`auto`}function C(e){return S(e)?{mode:`auto`}:e===`safe`?{mode:`safe`}:Array.isArray(e)?{mode:`custom`,tokens:e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0)}:{mode:`unknown`}}function w(e){return g(e)}function T(e){return v(e)?e===`auto`?`auto`:e===`safe`?`safe`:`custom`:`invalid`}function E(e){return Array.isArray(e)&&e.length>0?Array.from(new Set(e.filter(w))):[...b]}function D(e){return e.length!==0&&e.every(w)}function O(e){return e===`auto`?`warn`:e===`safe`?`ok`:Array.isArray(e)&&v(e)||e==null?`neutral`:`error`}var k=[{value:`auto`,label:`Auto (YOLO)`},{value:`safe`,label:`Safe`},{value:`custom`,label:`Custom — explicit allowlist below`}];function A({port:e,client:t,dirty:n,registerSave:h}){let{state:g,refresh:_,setData:v}=u(t,`/api/settings`),[b,S]=(0,m.useState)(`auto`),[A,j]=(0,m.useState)([]),M=(0,m.useMemo)(()=>g.kind===`ready`?C(g.data.permissions):null,[g]);(0,m.useEffect)(()=>{if(g.kind!==`ready`)return;let e=T(g.data.permissions),t=C(g.data.permissions);S(e),j(e===`custom`&&t.mode===`custom`?t.tokens:[])},[g]),(0,m.useEffect)(()=>()=>{n.remove(`permissions`)},[n]);let N=(0,m.useCallback)(e=>n.set(`permissions`,e),[n]),P=g.kind===`ready`?g.data.permissions:void 0,F=(0,m.useMemo)(()=>M?M.mode===`custom`?M.tokens:M.mode===`safe`?`safe`:M.mode===`unknown`?P:`auto`:`auto`,[M,P]),I=(0,m.useCallback)(e=>{if(e===`auto`){S(`auto`),j([]),N({value:`auto`,original:F,valid:!0});return}if(e===`safe`){S(`safe`),j([]),N({value:`safe`,original:F,valid:!0});return}if(e===`custom`){S(`custom`);let e=M&&M.mode===`custom`&&M.tokens.length>0?[...M.tokens]:E(null);j(e),N({value:e,original:F,valid:D(e)})}},[M,F,N]),L=(0,m.useCallback)(e=>{let t=e.map(e=>e.trim()).filter(e=>e.length>0);j(t),N({value:t,original:F,valid:D(t)})},[F,N]),R=(0,m.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await t.put(`/api/settings`,e),i=r&&typeof r==`object`&&`data`in r?r.data:r;n.clear();let a=T(i.permissions),o=C(i.permissions);S(a),j(a===`custom`&&o.mode===`custom`?o.tokens:[]),v(i),await _()},[t,n,_,v]);if((0,m.useEffect)(()=>{if(h)return h(R),()=>h(null)},[h,R]),g.kind===`loading`)return(0,y.jsx)(a,{});if(g.kind===`offline`)return(0,y.jsx)(s,{port:e});if(g.kind===`error`)return(0,y.jsx)(l,{message:g.message});let z=A.filter(e=>!w(e)),B=z.length>0,V=b===`custom`&&A.length===0,H=x(g.data.permissions),U=O(g.data.permissions);return(0,y.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,y.jsxs)(c,{title:`Saved policy`,hint:`The permission policy currently saved on this instance.`,children:[(0,y.jsx)(r,{items:[{label:`Configured policy:`,value:(0,y.jsxs)(y.Fragment,{children:[` `,(0,y.jsx)(i,{tone:U,children:H})]}),className:`settings-readonly-line`}]}),M?.mode===`unknown`&&(0,y.jsx)(o,{children:`Unrecognized value: choose a policy below (or in Agent) to replace it.`})]}),(0,y.jsxs)(c,{title:`Change policy`,hint:`Selecting a value changes the draft. Save applies it. Auto (YOLO) requests automatic approval or permission bypass. Behavior varies by runtime.`,children:[(0,y.jsx)(d,{id:`permissions-mode`,label:`Change policy to`,value:b,options:k,onChange:I,missingValueLabel:b===`invalid`?`Unrecognized saved policy`:void 0}),b===`invalid`&&(0,y.jsx)(p,{role:`alert`,children:`The saved permissions value is not a recognized policy. Pick a policy above to replace it.`}),b===`custom`&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(f,{id:`permissions-allowlist`,label:`Allowlist`,value:A,onChange:L,placeholder:`bash, read, mcp.*`,error:B?`Invalid token${z.length===1?``:`s`}: ${z.join(`, `)}`:V?`Allowlist cannot be empty in Custom mode.`:null}),(0,y.jsxs)(o,{children:[`Each chip is a permission token. Examples: `,(0,y.jsx)(`code`,{children:`bash`}),`,`,(0,y.jsx)(`code`,{children:` read`}),`, `,(0,y.jsx)(`code`,{children:` write`}),`, `,(0,y.jsx)(`code`,{children:` mcp.*`}),`.`]}),V&&(0,y.jsx)(p,{role:`alert`,children:`An empty Custom allowlist cannot be saved. Add at least one token or switch back to Auto (YOLO).`})]})]})]})}export{S as a,E as c,w as i,x as n,C as o,D as r,T as s,A as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./Permissions-
|
|
1
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./Permissions-BltXiZnz.js";export{r as configuredPolicyLabel,s as default,a as isAllowlistValid,n as isPermissionToken,e as isPermissionsAuto,i as parsePermissionsValue,o as permissionsEditMode,t as seedAutoAllowlist};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./icons-CVkqyECl.js";import{n,t as r}from"./jsx-runtime-CkEUZM6i.js";import{n as i,r as a,s as o,t as s,u as c}from"./page-shell-DfinU3mb.js";import{a as l,i as u}from"./fields-CicOWY-X.js";import{t as d}from"./path-utils-B6vBr0DD.js";var f=e(n(),1),p=r(),m=`image/png,image/jpeg,image/webp,image/gif`;function h({kind:e,port:n}){let[r,i]=(0,f.useState)(null),[a,o]=(0,f.useState)(!1),[s,c]=(0,f.useState)(null),l=(0,f.useRef)(null);(0,f.useEffect)(()=>{let t=!1;return c(null),i(null),fetch(`/i/${n}/api/avatar`).then(e=>e.ok?e.json():Promise.reject(Error(`avatar HTTP ${e.status}`))).then(n=>{if(t)return;let r=(`data`in n&&n.data?n.data:n)[e]||null;i(r)}).catch(e=>{t||c(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e,n]);let u=()=>l.current?.click(),d=async t=>{o(!0),c(null);try{let r=await t.arrayBuffer(),a=t.type||`application/octet-stream`,o=await fetch(`/i/${n}/api/avatar/${e}/upload`,{method:`POST`,headers:{"content-type":a,"x-filename":encodeURIComponent(t.name)},body:r});if(!o.ok){let e=await o.text().catch(()=>``);throw Error(`upload failed: ${o.status} ${e}`)}let s=await o.json(),c=`data`in s&&s.data?s.data:s;i(c)}catch(e){c(e instanceof Error?e.message:String(e))}finally{o(!1),l.current&&(l.current.value=``)}},h=async()=>{o(!0),c(null);try{let t=await fetch(`/i/${n}/api/avatar/${e}/image`,{method:`DELETE`});if(!t.ok)throw Error(`clear failed: ${t.status}`);let r=await t.json(),a=`data`in r&&r.data?r.data:r;i(a)}catch(e){c(e instanceof Error?e.message:String(e))}finally{o(!1)}},g=r&&r.kind===`image`?`/i/${n}${r.imageUrl}`:null,_=e===`agent`?`Agent avatar`:`User avatar`;return(0,p.jsxs)(`div`,{className:`settings-avatar-card`,children:[(0,p.jsx)(`div`,{className:`settings-avatar-preview`,"aria-label":`${_} preview`,children:g?(0,p.jsx)(`img`,{src:g,alt:`${_} current`}):e===`agent`?(0,p.jsx)(`img`,{className:`settings-avatar-mascot`,src:`/icons/mascot.png`,alt:``,"aria-hidden":`true`}):(0,p.jsx)(`span`,{className:`settings-avatar-placeholder`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:t(`user`,28)}})}),(0,p.jsxs)(`div`,{className:`settings-avatar-controls`,children:[(0,p.jsx)(`span`,{className:`settings-field-label`,children:_}),(0,p.jsx)(`input`,{ref:l,type:`file`,accept:m,style:{display:`none`},onChange:e=>{let t=e.target.files?.[0];t&&d(t)}}),(0,p.jsxs)(`div`,{className:`settings-avatar-buttons`,children:[(0,p.jsx)(`button`,{type:`button`,className:`settings-action`,onClick:u,disabled:a,children:a?`Working…`:`Upload image`}),g?(0,p.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:()=>void h(),disabled:a,children:`Clear`}):null]}),s?(0,p.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:s}):null]})]})}var g=[{value:`ko`,label:`한국어 (ko)`},{value:`en`,label:`English (en)`},{value:`ja`,label:`日本語 (ja)`},{value:`zh`,label:`中文 (zh)`}];function _({port:e,client:t,dirty:n,registerSave:r}){let{state:m,refresh:_,setData:v}=c(t,`/api/settings`),[y,b]=(0,f.useState)({});(0,f.useEffect)(()=>{m.kind===`ready`&&b(m.data)},[m]),(0,f.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`locale`||e===`showReasoning`)&&n.remove(e)},[n]);let x=(0,f.useCallback)((e,t)=>n.set(e,t),[n]),S=(0,f.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=d(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),b(a),v(a),await _()},[t,n,_,v]);if((0,f.useEffect)(()=>{if(r)return r(S),()=>r(null)},[r,S]),m.kind===`loading`)return(0,p.jsx)(i,{});if(m.kind===`offline`)return(0,p.jsx)(a,{port:e});if(m.kind===`error`)return(0,p.jsx)(s,{message:m.message});let C=m.data;return(0,p.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),S()},children:[(0,p.jsxs)(o,{title:`Profile`,hint:`Identity and display preferences for this instance.`,children:[(0,p.jsx)(u,{id:`profile-locale`,label:`Locale`,value:y.locale??C.locale??`ko`,options:g,onChange:e=>{b({...y,locale:e}),x(`locale`,{value:e,original:C.locale??`ko`,valid:!0})}}),(0,p.jsx)(l,{id:`profile-showReasoning`,label:`Show reasoning traces`,value:!!(y.showReasoning??C.showReasoning),onChange:e=>{b({...y,showReasoning:e}),x(`showReasoning`,{value:e,original:!!C.showReasoning,valid:!0})}})]}),(0,p.jsxs)(o,{title:`Avatars`,hint:`Uploads write to the instance's home folder.`,children:[(0,p.jsx)(h,{kind:`agent`,port:e}),(0,p.jsx)(h,{kind:`user`,port:e})]})]})}export{_ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{l as r,n as i,o as a,r as o,s,t as c,u as l}from"./page-shell-DfinU3mb.js";var u=e(t(),1),d=n(),f=`prompt.system`;function p(e){return`prompt.template.${e}`}function m(e){return!e||!Array.isArray(e.templates)?[]:e.templates.filter(e=>!!e&&typeof e.id==`string`&&typeof e.content==`string`)}function h(e){let t=m(e),n=e?.tree,r=[],i=new Set;if(Array.isArray(n)){for(let e of n)if(e&&Array.isArray(e.children))for(let n of e.children){if(i.has(n))continue;let a=t.find(e=>e.id===n);if(!a)continue;let o=e.emoji?`${e.emoji} ${e.label} · `:`${e.label} · `;r.push({value:a.id,label:`${o}${a.id}`}),i.add(n)}}for(let e of t)i.has(e.id)||(r.push({value:e.id,label:e.id}),i.add(e.id));return r}function g(e,t){return m(e).find(e=>e.id===t)??null}function _({port:e,client:t,dirty:n,registerSave:_}){let v=l(t,`/api/prompt`),y=l(t,`/api/prompt-templates`),[b,x]=(0,u.useState)(``),[S,C]=(0,u.useState)(null),[w,T]=(0,u.useState)(``),E=(0,u.useMemo)(()=>v.state.kind===`ready`?v.state.data?.content??``:``,[v.state]),D=(0,u.useMemo)(()=>y.state.kind===`ready`?y.state.data:null,[y.state]),O=(0,u.useMemo)(()=>h(D),[D]),k=(0,u.useRef)(new Set);(0,u.useEffect)(()=>{v.state.kind===`ready`&&x(v.state.data?.content??``)},[v.state]),(0,u.useEffect)(()=>{if(!D||S!==null)return;let e=m(D);if(e.length===0)return;let t=O[0]?.value??e[0].id;C(t);let n=g(D,t);T(n?.content??``)},[D,O,S]),(0,u.useEffect)(()=>()=>{n.remove(f);for(let e of k.current)n.remove(e)},[n]);let A=(0,u.useCallback)((e,t)=>{n.set(e,t),k.current.add(e)},[n]),j=(0,u.useCallback)(e=>{x(e),n.set(f,{value:e,original:E,valid:!0})},[n,E]),M=(0,u.useCallback)(e=>{if(!S)return;T(e);let t=g(D,S)?.content??``;A(p(S),{value:e,original:t,valid:!0})},[S,A,D]),N=(0,u.useCallback)(e=>{if(!S||e===S)return;let t=p(S);if(n.pending.get(t)&&typeof window<`u`&&!window.confirm(`You have unsaved edits to "${S}". Switching will keep them pending — Save will write all dirty templates.`))return;C(e);let r=p(e),i=n.pending.get(r),a=g(D,e)?.content??``;T(i&&typeof i.value==`string`?i.value:a)},[S,n,D]),P=(0,u.useCallback)(async()=>{let e=n.saveBundle(),r=[];f in e&&r.push(t.put(`/api/prompt`,{content:e[f]}));for(let[n,i]of Object.entries(e)){if(!n.startsWith(`prompt.template.`))continue;let e=n.slice(16);r.push(t.put(`/api/prompt-templates/${e}`,{content:i}))}if(r.length!==0){for(let e of r)await e;n.clear(),k.current.clear(),await Promise.all([v.refresh(),y.refresh()])}},[t,n,v,y]);if((0,u.useEffect)(()=>{if(_)return _(P),()=>_(null)},[_,P]),v.state.kind===`loading`||y.state.kind===`loading`)return(0,d.jsx)(i,{});if(v.state.kind===`offline`||y.state.kind===`offline`)return(0,d.jsx)(o,{port:e});if(v.state.kind===`error`)return(0,d.jsx)(c,{message:v.state.message});if(y.state.kind===`error`)return(0,d.jsx)(c,{message:y.state.message});let F=m(D),I=S?g(D,S)?.content??``:``,L=S!==null&&w!==I;return(0,d.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:[(0,d.jsxs)(s,{title:`System prompt`,hint:`The agent's a2/system prompt. Saved to a2.md; regenerates the merged b prompt.`,children:[(0,d.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-system-body`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`a2.md`}),(0,d.jsx)(`textarea`,{id:`prompt-system-body`,className:`settings-mono-input`,value:b,rows:14,spellCheck:!1,onChange:e=>j(e.target.value)})]}),b!==E&&(0,d.jsxs)(a,{children:[(0,d.jsx)(r,{tone:`warn`,children:`Unsaved`}),` `,`Pending edits to a2.md.`]})]}),(0,d.jsx)(s,{title:`Templates`,hint:`Edit individual prompt template bodies. Saving regenerates b automatically.`,children:F.length===0?(0,d.jsx)(a,{children:`No templates returned by /api/prompt-templates.`}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(`label`,{className:`settings-field settings-field-select`,htmlFor:`prompt-template-select`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,d.jsx)(`select`,{id:`prompt-template-select`,value:S??``,onChange:e=>N(e.target.value),children:O.map(e=>(0,d.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,d.jsxs)(`label`,{className:`settings-field settings-field-text`,htmlFor:`prompt-template-body`,children:[(0,d.jsx)(`span`,{className:`settings-field-label`,children:S?`${S}.md`:`Template body`}),(0,d.jsx)(`textarea`,{id:`prompt-template-body`,className:`settings-mono-input`,value:w,rows:16,spellCheck:!1,disabled:!S,onChange:e=>M(e.target.value)})]}),L&&(0,d.jsxs)(a,{children:[(0,d.jsx)(r,{tone:`warn`,children:`Unsaved`}),` `,`Pending edits to `,S,`.md.`]})]})})]})}export{h as buildTemplateOptions,_ as default,g as findTemplate,m as flattenTemplates,p as templateDirtyKey};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{n as r,o as i,r as a,s as o,t as s,u as c}from"./page-shell-DfinU3mb.js";import{i as l,o as u,s as d,t as f}from"./fields-CicOWY-X.js";import{t as p}from"./path-utils-B6vBr0DD.js";var m=e(t(),1),h=n(),g=[`auto`,`gemini`,`openai`,`whisper`,`vertex`],_={auto:`Auto (try in order)`,gemini:`Gemini`,openai:`OpenAI`,whisper:`Whisper (local MLX)`,vertex:`Vertex AI`};function v(e){return e===`auto`?[`gemini`,`openai`,`whisper`,`vertex`]:[e]}function y(e){if(e.trim()===``)return{valid:!0,error:null};try{return JSON.parse(e),{valid:!0,error:null}}catch(e){return{valid:!1,error:e instanceof Error?e.message:`Invalid JSON`}}}var b=[`stt.engine`,`stt.geminiApiKey`,`stt.geminiModel`,`stt.openaiApiKey`,`stt.openaiBaseUrl`,`stt.openaiModel`,`stt.whisperModel`,`stt.vertexConfig`];function x(e){return g.includes(e)?e:`auto`}function S({port:e,client:t,dirty:n,registerSave:S}){let{state:C,refresh:w,setData:T}=c(t,`/api/settings`),[E,D]=(0,m.useState)(`auto`),[O,k]=(0,m.useState)(``),[A,j]=(0,m.useState)(``),[M,N]=(0,m.useState)(``),[P,F]=(0,m.useState)(``),[I,L]=(0,m.useState)(``),[R,z]=(0,m.useState)(``),[B,V]=(0,m.useState)(``),[H,U]=(0,m.useState)(null);(0,m.useEffect)(()=>{if(C.kind!==`ready`)return;let e=C.data.stt||{};D(x(e.engine)),k(``),j(e.geminiModel??``),N(``),F(e.openaiBaseUrl??``),L(e.openaiModel??``),z(e.whisperModel??``),V(e.vertexConfig??``),U(null)},[C]),(0,m.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let W=(0,m.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,m.useMemo)(()=>C.kind===`ready`&&C.data.stt||{},[C]),K=(0,m.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=p(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),T(a);let o=a.stt||{};D(x(o.engine)),k(``),j(o.geminiModel??``),N(``),F(o.openaiBaseUrl??``),L(o.openaiModel??``),z(o.whisperModel??``),V(o.vertexConfig??``),U(null),await w()},[t,n,w,T]);if((0,m.useEffect)(()=>{if(S)return S(K),()=>S(null)},[S,K]),C.kind===`loading`)return(0,h.jsx)(r,{});if(C.kind===`offline`)return(0,h.jsx)(a,{port:e});if(C.kind===`error`)return(0,h.jsx)(s,{message:C.message});let q=v(E),J=q.includes(`gemini`),Y=q.includes(`openai`),X=q.includes(`whisper`),Z=q.includes(`vertex`),Q=G.geminiKeySet?`••••••••${G.geminiKeyLast4??``}`:`(empty)`,$=G.openaiKeySet?`••••••••${G.openaiKeyLast4??``}`:`(empty)`;return(0,h.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),K()},children:[(0,h.jsx)(o,{title:`Engine`,hint:`Pick a single engine, or 'auto' to fall back through the ladder.`,children:(0,h.jsx)(l,{id:`stt-engine`,label:`Speech-to-text engine`,value:E,options:g.map(e=>({value:e,label:_[e]})),onChange:e=>{let t=x(e);D(t),W(`stt.engine`,{value:t,original:x(G.engine),valid:!0})}})}),J?(0,h.jsxs)(o,{title:`Gemini`,hint:`Google AI Studio key. Used by the Gemini transcription path.`,children:[(0,h.jsx)(u,{id:`stt-gemini-key`,label:`API key`,value:O,placeholder:Q,onChange:e=>{if(k(e),e.length===0){n.remove(`stt.geminiApiKey`);return}W(`stt.geminiApiKey`,{value:e,original:``,valid:!0})}}),(0,h.jsx)(d,{id:`stt-gemini-model`,label:`Model`,value:A,placeholder:`gemini-2.5-flash-lite`,onChange:e=>{j(e),W(`stt.geminiModel`,{value:e,original:G.geminiModel??``,valid:!0})}})]}):null,Y?(0,h.jsxs)(o,{title:`OpenAI`,hint:`Compatible with OpenAI-style transcription endpoints (incl. self-hosted).`,children:[(0,h.jsx)(u,{id:`stt-openai-key`,label:`API key`,value:M,placeholder:$,onChange:e=>{if(N(e),e.length===0){n.remove(`stt.openaiApiKey`);return}W(`stt.openaiApiKey`,{value:e,original:``,valid:!0})}}),(0,h.jsx)(d,{id:`stt-openai-base-url`,label:`Base URL (optional)`,value:P,placeholder:`https://api.openai.com/v1`,onChange:e=>{F(e),W(`stt.openaiBaseUrl`,{value:e,original:G.openaiBaseUrl??``,valid:!0})}}),(0,h.jsx)(d,{id:`stt-openai-model`,label:`Model`,value:I,placeholder:`whisper-1`,onChange:e=>{L(e),W(`stt.openaiModel`,{value:e,original:G.openaiModel??``,valid:!0})}})]}):null,X?(0,h.jsx)(o,{title:`Whisper (local MLX)`,hint:`Runs on-device via mlx-whisper. No API key required.`,children:(0,h.jsx)(d,{id:`stt-whisper-model`,label:`Model identifier`,value:R,placeholder:`mlx-community/whisper-large-v3-mlx`,onChange:e=>{z(e),W(`stt.whisperModel`,{value:e,original:G.whisperModel??``,valid:!0})}})}):null,Z?(0,h.jsxs)(o,{title:`Vertex AI`,hint:`Service-account credentials JSON for Google Cloud Vertex transcription.`,children:[(0,h.jsx)(i,{children:`Paste the service-account credentials JSON. Treated as a secret — invalid JSON refuses to save.`}),(0,h.jsx)(f,{id:`stt-vertex-config`,label:`Credentials JSON`,value:B,onChange:(e,t)=>{let n=typeof e==`string`?e:e==null?``:JSON.stringify(e);V(n);let r=y(n);U(t?null:r.error),W(`stt.vertexConfig`,{value:n,original:G.vertexConfig??``,valid:t&&r.valid})}}),H?(0,h.jsx)(i,{tone:`error`,role:`alert`,children:H}):null]}):null,(0,h.jsx)(o,{title:`Probe`,hint:`A live mic-test isn't available yet — verify by triggering speech-to-text from the active channel.`,children:(0,h.jsx)(i,{children:`No backend self-test endpoint is exposed for speech today; this lands as a Phase 9 polish.`})})]})}export{g as STT_ENGINES,S as default,v as revealsForEngine,y as validateVertexConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{a as r,l as i,n as a,o,s,t as c,u as l}from"./page-shell-DfinU3mb.js";import{a as u,o as d,s as f}from"./fields-CicOWY-X.js";var p=e(t(),1),m=n(),h=3457,g=3506;function _(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async put(e,t){let n=await fetch(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PUT ${e} → ${n.status}`);return await n.json()},async delete(e){let t=await fetch(e,{method:`DELETE`});if(!t.ok)throw Error(`DELETE ${e} → ${t.status}`);return await t.json()}}}var v=[`hub.enabled`,`hub.token`,`hub.chatId`,`hub.defaultPort`];function y({port:e,client:t,dirty:n,registerSave:y,managerClient:b}){let{state:x}=l(t,`__telegram_hub_unused__`,[e]),[S,C]=(0,p.useState)(null),[w,T]=(0,p.useState)(null),[E,D]=(0,p.useState)(null),[O,k]=(0,p.useState)(!1),[A,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[P,F]=(0,p.useState)(h),I=b||_(),L=(0,p.useCallback)(async()=>{D(null);try{let e=await I.get(`/api/dashboard/telegram-hub`);C(e.config),T(e.runtime||null),k(e.config.enabled),N(e.config.chatId),F(e.config.defaultPort),j(``)}catch(e){D(e instanceof Error?e.message:String(e))}},[I]);(0,p.useEffect)(()=>{L()},[e]),(0,p.useEffect)(()=>()=>{for(let e of v)n.remove(e)},[n]);let R=(0,p.useCallback)(async()=>{let e={enabled:O,chatId:M.trim(),defaultPort:P};A.trim()&&(e.token=A.trim());let t=await I.put(`/api/dashboard/telegram-hub`,e);C(t.config),T(t.runtime||null),j(``);for(let e of v)n.remove(e)},[O,M,P,A,I,n]);(0,p.useEffect)(()=>{if(y)return y(R),()=>y(null)},[y,R]);let z=(0,p.useCallback)(async e=>{try{await I.delete(`/api/dashboard/telegram-hub/routes/${encodeURIComponent(e.chatId)}/${encodeURIComponent(e.threadId)}`)}catch(e){D(e instanceof Error?e.message:String(e))}await L()},[I,L]);if(E)return(0,m.jsx)(c,{message:E});if(!S)return(0,m.jsx)(a,{label:`Loading Telegram hub…`});let B=w?.state===`polling`?`ok`:w?.state===`starting`?`warn`:w?.state===`error`?`error`:`neutral`;return(0,m.jsxs)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),R()},children:[(0,m.jsxs)(s,{title:`Status`,hint:`Live hub runtime reported by the manager.`,children:[(0,m.jsx)(r,{items:[{label:`Hub`,value:O?(0,m.jsx)(i,{tone:`ok`,children:`Enabled`}):(0,m.jsx)(i,{tone:`neutral`,children:`Disabled`})},...w?[{label:`Runtime`,value:(0,m.jsx)(i,{tone:B,children:w.state})}]:[],...w?.chatId?[{label:`Bound chat`,value:w.chatId,mono:!0}]:[]]}),w?.error?(0,m.jsx)(o,{tone:`error`,role:`alert`,children:w.error}):null]}),(0,m.jsxs)(s,{title:`Telegram hub`,hint:`One dashboard-owned bot routes Telegram chat topics to instances 3457–3506.`,children:[(0,m.jsx)(u,{id:`hub-enabled`,label:`Enable hub`,value:O,onChange:e=>{k(e),n.set(`hub.enabled`,{value:e,original:S.enabled,valid:!0})}}),(0,m.jsx)(d,{id:`hub-token`,label:`Bot token`,value:A,placeholder:S.hasToken?`•••• (saved)`:`paste bot token`,onChange:e=>{j(e),n.set(`hub.token`,{value:e,original:``,valid:!0})}}),(0,m.jsx)(f,{id:`hub-chat-id`,label:`Hub chat ID`,value:M,placeholder:`823… or -100…`,onChange:e=>{N(e),n.set(`hub.chatId`,{value:e,original:S.chatId,valid:!0})}}),(0,m.jsxs)(`label`,{className:`settings-field`,htmlFor:`hub-default-port`,children:[(0,m.jsx)(`span`,{className:`settings-field-label`,children:`Default port`}),(0,m.jsx)(`input`,{id:`hub-default-port`,type:`number`,min:h,max:g,value:P,onChange:e=>{let t=Number(e.target.value);F(t),n.set(`hub.defaultPort`,{value:t,original:S.defaultPort,valid:t>=h&&t<=g})}})]})]}),(0,m.jsx)(s,{title:`Topic routes`,hint:`(chatId, threadId) → instance port. Bind in a bot private topic or group topic with /setthread <port>.`,children:S.routes.length===0?(0,m.jsx)(o,{children:`No routes yet.`}):(0,m.jsx)(`div`,{className:`settings-card-scroll`,children:(0,m.jsxs)(`table`,{className:`settings-overrides-table`,children:[(0,m.jsx)(`thead`,{children:(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`th`,{children:`Thread`}),(0,m.jsx)(`th`,{children:`Port`}),(0,m.jsx)(`th`,{children:`Label`}),(0,m.jsx)(`th`,{children:`Model`}),(0,m.jsx)(`th`,{children:`Prompt`}),(0,m.jsx)(`th`,{children:`On`}),(0,m.jsx)(`th`,{})]})}),(0,m.jsx)(`tbody`,{children:S.routes.map(e=>(0,m.jsxs)(`tr`,{children:[(0,m.jsx)(`td`,{children:e.threadId}),(0,m.jsx)(`td`,{children:e.port}),(0,m.jsx)(`td`,{children:e.label||`—`}),(0,m.jsx)(`td`,{children:e.model||`—`}),(0,m.jsx)(`td`,{children:e.systemPrompt?`✓`:`—`}),(0,m.jsx)(`td`,{children:e.enabled?`✓`:`—`}),(0,m.jsx)(`td`,{children:(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-danger`,onClick:()=>void z(e),children:`Delete`})})]},`${e.chatId}:${e.threadId}`))})]})})})]})}function b(e){return e.manager?(0,m.jsx)(y,{...e}):null}export{b as default};
|