cli-jaw 2.17.38 → 2.17.39
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.md +40 -1
- package/dist/bin/commands/chat.js +19 -2
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/dashboard.js +27 -10
- package/dist/bin/commands/dashboard.js.map +1 -1
- package/dist/bin/commands/init.js +10 -1
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/tui/activity-answer-read.js +122 -0
- package/dist/bin/commands/tui/activity-answer-read.js.map +1 -0
- package/dist/bin/commands/tui/activity-fallback.js +40 -0
- package/dist/bin/commands/tui/activity-fallback.js.map +1 -0
- package/dist/bin/commands/tui/activity-handler.js +273 -0
- package/dist/bin/commands/tui/activity-handler.js.map +1 -0
- package/dist/bin/commands/tui/activity-history.js +245 -0
- package/dist/bin/commands/tui/activity-history.js.map +1 -0
- package/dist/bin/commands/tui/activity-http.js +88 -0
- package/dist/bin/commands/tui/activity-http.js.map +1 -0
- package/dist/bin/commands/tui/activity-replay.js +250 -0
- package/dist/bin/commands/tui/activity-replay.js.map +1 -0
- package/dist/bin/commands/tui/api.js +48 -1
- package/dist/bin/commands/tui/api.js.map +1 -1
- package/dist/bin/commands/tui/channel.js +11 -1
- package/dist/bin/commands/tui/channel.js.map +1 -1
- package/dist/bin/commands/tui/fullscreen-mode.js +78 -12
- package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -1
- package/dist/bin/commands/tui/input-handler.js +7 -0
- package/dist/bin/commands/tui/input-handler.js.map +1 -1
- package/dist/bin/commands/tui/overlays.js +6 -3
- package/dist/bin/commands/tui/overlays.js.map +1 -1
- package/dist/bin/commands/tui/renderer.js +27 -15
- package/dist/bin/commands/tui/renderer.js.map +1 -1
- package/dist/bin/commands/tui/types.js.map +1 -1
- package/dist/bin/commands/tui/ws-handler.js +158 -13
- package/dist/bin/commands/tui/ws-handler.js.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/src/agent/claude-runtime-pool.js +386 -0
- package/dist/src/agent/claude-runtime-pool.js.map +1 -0
- package/dist/src/agent/claude-runtime-run.js +366 -0
- package/dist/src/agent/claude-runtime-run.js.map +1 -0
- package/dist/src/agent/codex-app-events.js +3 -1
- package/dist/src/agent/codex-app-events.js.map +1 -1
- package/dist/src/agent/events/claude.js +11 -9
- package/dist/src/agent/events/claude.js.map +1 -1
- package/dist/src/agent/events/codex.js +2 -0
- package/dist/src/agent/events/codex.js.map +1 -1
- package/dist/src/agent/events/cursor.js +49 -21
- package/dist/src/agent/events/cursor.js.map +1 -1
- package/dist/src/agent/events/grok.js +33 -5
- package/dist/src/agent/events/grok.js.map +1 -1
- package/dist/src/agent/events/helpers.js +9 -0
- package/dist/src/agent/events/helpers.js.map +1 -1
- package/dist/src/agent/events/index.js +13 -1
- package/dist/src/agent/events/index.js.map +1 -1
- package/dist/src/agent/events/opencode.js +65 -1
- package/dist/src/agent/events/opencode.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +185 -62
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/merge-tool-log.js +77 -0
- package/dist/src/agent/merge-tool-log.js.map +1 -0
- package/dist/src/agent/native-runtime-run.js +235 -0
- package/dist/src/agent/native-runtime-run.js.map +1 -0
- package/dist/src/agent/pi-runtime.js +468 -101
- package/dist/src/agent/pi-runtime.js.map +1 -1
- package/dist/src/agent/prompt-context.js +88 -2
- package/dist/src/agent/prompt-context.js.map +1 -1
- package/dist/src/agent/runtime/acp/callbacks.js +223 -0
- package/dist/src/agent/runtime/acp/callbacks.js.map +1 -0
- package/dist/src/agent/runtime/acp/config.js +182 -0
- package/dist/src/agent/runtime/acp/config.js.map +1 -0
- package/dist/src/agent/runtime/acp/connection.js +254 -0
- package/dist/src/agent/runtime/acp/connection.js.map +1 -0
- package/dist/src/agent/runtime/acp/content.js +63 -0
- package/dist/src/agent/runtime/acp/content.js.map +1 -0
- package/dist/src/agent/runtime/acp/cursor-session.js +92 -0
- package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-control.js +3 -0
- package/dist/src/agent/runtime/acp/grok-control.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-events.js +28 -0
- package/dist/src/agent/runtime/acp/grok-events.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-options.js +63 -0
- package/dist/src/agent/runtime/acp/grok-options.js.map +1 -0
- package/dist/src/agent/runtime/acp/grok-session.js +118 -0
- package/dist/src/agent/runtime/acp/grok-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/notification-queue.js +107 -0
- package/dist/src/agent/runtime/acp/notification-queue.js.map +1 -0
- package/dist/src/agent/runtime/acp/permissions.js +133 -0
- package/dist/src/agent/runtime/acp/permissions.js.map +1 -0
- package/dist/src/agent/runtime/acp/projection.js +162 -0
- package/dist/src/agent/runtime/acp/projection.js.map +1 -0
- package/dist/src/agent/runtime/acp/replacement-turn.js +187 -0
- package/dist/src/agent/runtime/acp/replacement-turn.js.map +1 -0
- package/dist/src/agent/runtime/acp/replacement.js +159 -0
- package/dist/src/agent/runtime/acp/replacement.js.map +1 -0
- package/dist/src/agent/runtime/acp/runtime-session.js +245 -0
- package/dist/src/agent/runtime/acp/runtime-session.js.map +1 -0
- package/dist/src/agent/runtime/acp/session.js +426 -0
- package/dist/src/agent/runtime/acp/session.js.map +1 -0
- package/dist/src/agent/runtime/acp/wire.js +46 -0
- package/dist/src/agent/runtime/acp/wire.js.map +1 -0
- package/dist/src/agent/runtime/claude-run-controls.js +41 -0
- package/dist/src/agent/runtime/claude-run-controls.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-children.js +405 -0
- package/dist/src/agent/runtime/claude-sdk-children.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-close.js +43 -0
- package/dist/src/agent/runtime/claude-sdk-close.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-content.js +42 -0
- package/dist/src/agent/runtime/claude-sdk-content.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-events.js +337 -0
- package/dist/src/agent/runtime/claude-sdk-events.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-hooks.js +32 -0
- package/dist/src/agent/runtime/claude-sdk-hooks.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-input.js +58 -0
- package/dist/src/agent/runtime/claude-sdk-input.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-loader.js +21 -0
- package/dist/src/agent/runtime/claude-sdk-loader.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-messages.js +133 -0
- package/dist/src/agent/runtime/claude-sdk-messages.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-metadata.js +40 -0
- package/dist/src/agent/runtime/claude-sdk-metadata.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-options.js +70 -0
- package/dist/src/agent/runtime/claude-sdk-options.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-owners.js +113 -0
- package/dist/src/agent/runtime/claude-sdk-owners.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-permissions.js +283 -0
- package/dist/src/agent/runtime/claude-sdk-permissions.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-process.js +72 -0
- package/dist/src/agent/runtime/claude-sdk-process.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-roots.js +103 -0
- package/dist/src/agent/runtime/claude-sdk-roots.js.map +1 -0
- package/dist/src/agent/runtime/claude-sdk-session.js +518 -0
- package/dist/src/agent/runtime/claude-sdk-session.js.map +1 -0
- package/dist/src/agent/runtime/codex-projection.js +126 -0
- package/dist/src/agent/runtime/codex-projection.js.map +1 -0
- package/dist/src/agent/runtime/events.js +39 -0
- package/dist/src/agent/runtime/events.js.map +1 -0
- package/dist/src/agent/runtime/grok-main.js +7 -0
- package/dist/src/agent/runtime/grok-main.js.map +1 -0
- package/dist/src/agent/runtime/outcome.js +28 -0
- package/dist/src/agent/runtime/outcome.js.map +1 -0
- package/dist/src/agent/runtime/pi-projection.js +97 -0
- package/dist/src/agent/runtime/pi-projection.js.map +1 -0
- package/dist/src/agent/runtime/pi-raw-trace.js +87 -0
- package/dist/src/agent/runtime/pi-raw-trace.js.map +1 -0
- package/dist/src/agent/runtime/pi-turn.js +159 -0
- package/dist/src/agent/runtime/pi-turn.js.map +1 -0
- package/dist/src/agent/runtime/print-activity.js +47 -0
- package/dist/src/agent/runtime/print-activity.js.map +1 -0
- package/dist/src/agent/runtime/print-projection.js +51 -0
- package/dist/src/agent/runtime/print-projection.js.map +1 -0
- package/dist/src/agent/runtime/projection.js +283 -0
- package/dist/src/agent/runtime/projection.js.map +1 -0
- package/dist/src/agent/runtime/replace-turn.js +36 -0
- package/dist/src/agent/runtime/replace-turn.js.map +1 -0
- package/dist/src/agent/runtime/requests.js +207 -0
- package/dist/src/agent/runtime/requests.js.map +1 -0
- package/dist/src/agent/runtime/selection.js +31 -0
- package/dist/src/agent/runtime/selection.js.map +1 -0
- package/dist/src/agent/runtime/session.js +2 -0
- package/dist/src/agent/runtime/session.js.map +1 -0
- package/dist/src/agent/runtime-pool-contract.js +2 -0
- package/dist/src/agent/runtime-pool-contract.js.map +1 -0
- package/dist/src/agent/runtime-pool.js +317 -9
- package/dist/src/agent/runtime-pool.js.map +1 -1
- package/dist/src/agent/session-persistence.js +10 -2
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn.js +990 -143
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/steer-input-guard.js +33 -0
- package/dist/src/agent/steer-input-guard.js.map +1 -0
- package/dist/src/cli/acp-client.js +20 -21
- package/dist/src/cli/acp-client.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +21 -12
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/registry.js +2 -0
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/tui/activity-answer.js +97 -0
- package/dist/src/cli/tui/activity-answer.js.map +1 -0
- package/dist/src/cli/tui/activity-history.js +364 -0
- package/dist/src/cli/tui/activity-history.js.map +1 -0
- package/dist/src/cli/tui/activity-linear.js +29 -0
- package/dist/src/cli/tui/activity-linear.js.map +1 -0
- package/dist/src/cli/tui/activity-terminal-text.js +111 -0
- package/dist/src/cli/tui/activity-terminal-text.js.map +1 -0
- package/dist/src/cli/tui/activity.js +95 -0
- package/dist/src/cli/tui/activity.js.map +1 -0
- package/dist/src/cli/tui/cell-width.js +41 -0
- package/dist/src/cli/tui/cell-width.js.map +1 -0
- package/dist/src/cli/tui/events.js +15 -0
- package/dist/src/cli/tui/events.js.map +1 -1
- package/dist/src/cli/tui/keymap.js +2 -0
- package/dist/src/cli/tui/keymap.js.map +1 -1
- package/dist/src/cli/tui/render/composer-box.js +12 -14
- package/dist/src/cli/tui/render/composer-box.js.map +1 -1
- package/dist/src/cli/tui/render/viewport.js +9 -5
- package/dist/src/cli/tui/render/viewport.js.map +1 -1
- package/dist/src/cli/tui/renderers.js +119 -139
- package/dist/src/cli/tui/renderers.js.map +1 -1
- package/dist/src/cli/tui/settings-screen.js +11 -0
- package/dist/src/cli/tui/settings-screen.js.map +1 -1
- package/dist/src/cli/tui/store.js +3 -0
- package/dist/src/cli/tui/store.js.map +1 -1
- package/dist/src/cli/tui/transcript.js +68 -0
- package/dist/src/cli/tui/transcript.js.map +1 -1
- package/dist/src/core/bus.js +8 -0
- package/dist/src/core/bus.js.map +1 -1
- package/dist/src/core/chat-sessions.js +1 -0
- package/dist/src/core/chat-sessions.js.map +1 -1
- package/dist/src/core/compact.js +10 -3
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +21 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +26 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/runtime-settings.js +44 -3
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/session-ops.js +40 -9
- package/dist/src/core/session-ops.js.map +1 -1
- package/dist/src/core/settings-merge.js +31 -1
- package/dist/src/core/settings-merge.js.map +1 -1
- package/dist/src/core/settings-watch.js +8 -1
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/discord/bot.js +28 -9
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/send-only-client.js +4 -0
- package/dist/src/discord/send-only-client.js.map +1 -1
- package/dist/src/manager/routes/telegram-hub.js +2 -1
- package/dist/src/manager/routes/telegram-hub.js.map +1 -1
- package/dist/src/manager/scan.js +12 -0
- package/dist/src/manager/scan.js.map +1 -1
- package/dist/src/manager/server.js +89 -13
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/telegram-hub/hub-bot.js +9 -3
- package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
- package/dist/src/orchestrator/collect.js +80 -6
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +13 -10
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +68 -29
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +2 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -1
- package/dist/src/orchestrator/scope.js +15 -0
- package/dist/src/orchestrator/scope.js.map +1 -1
- package/dist/src/routes/memory.js +2 -2
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/messages.js +51 -18
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/orchestrate.js +29 -17
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/runtime-request-notices.js +23 -0
- package/dist/src/routes/runtime-request-notices.js.map +1 -0
- package/dist/src/routes/runtime-requests.js +43 -0
- package/dist/src/routes/runtime-requests.js.map +1 -0
- package/dist/src/routes/settings.js +7 -1
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/traces.js +93 -6
- package/dist/src/routes/traces.js.map +1 -1
- package/dist/src/shared/activity-read.js +158 -0
- package/dist/src/shared/activity-read.js.map +1 -0
- package/dist/src/shared/activity-replay.js +279 -0
- package/dist/src/shared/activity-replay.js.map +1 -0
- package/dist/src/shared/activity-state.js +144 -0
- package/dist/src/shared/activity-state.js.map +1 -0
- package/dist/src/shared/isolated-qa.js +132 -0
- package/dist/src/shared/isolated-qa.js.map +1 -0
- package/dist/src/shared/presentation.js +21 -0
- package/dist/src/shared/presentation.js.map +1 -0
- package/dist/src/shared/runtime-contract.js +2 -0
- package/dist/src/shared/runtime-contract.js.map +1 -0
- package/dist/src/shared/runtime-event-parse.js +99 -0
- package/dist/src/shared/runtime-event-parse.js.map +1 -0
- package/dist/src/shared/runtime-request-notice.js +9 -0
- package/dist/src/shared/runtime-request-notice.js.map +1 -0
- package/dist/src/shared/tool-log-sanitize.js +11 -5
- package/dist/src/shared/tool-log-sanitize.js.map +1 -1
- package/dist/src/slack/bot.js +20 -7
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/send-only-client.js +3 -0
- package/dist/src/slack/send-only-client.js.map +1 -1
- package/dist/src/telegram/bot.js +27 -5
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/telegram/rich-message.js +47 -1
- package/dist/src/telegram/rich-message.js.map +1 -1
- package/dist/src/trace/activity-control.js +87 -0
- package/dist/src/trace/activity-control.js.map +1 -0
- package/dist/src/trace/activity-journal.js +155 -0
- package/dist/src/trace/activity-journal.js.map +1 -0
- package/dist/src/trace/activity-retention.js +55 -0
- package/dist/src/trace/activity-retention.js.map +1 -0
- package/dist/src/trace/runtime-body-codec.js +162 -0
- package/dist/src/trace/runtime-body-codec.js.map +1 -0
- package/dist/src/trace/store.js +65 -22
- package/dist/src/trace/store.js.map +1 -1
- package/package.json +8 -5
- package/public/css/activity.css +211 -0
- package/public/css/chat-search.css +13 -1
- package/public/css/chat.css +10 -0
- package/public/css/native-requests.css +55 -0
- package/public/css/trace-drawer.css +15 -8
- package/public/dist/assets/AdvancedExport-q4DnVxpT.js +1 -0
- package/public/dist/assets/Agent-CI1AfYOA.js +1 -0
- package/public/dist/assets/Browser-D9kwPJfN.js +1 -0
- package/public/dist/assets/BrowserPanel-CVZyvbth.js +3 -0
- package/public/dist/assets/{ChannelEnablementControl-B9KiYDZZ.js → ChannelEnablementControl-BkxeZonM.js} +1 -1
- package/public/dist/assets/ChannelsDiscord-CulKFTiX.js +1 -0
- package/public/dist/assets/ChannelsSlack-D09H8GKC.js +1 -0
- package/public/dist/assets/ChannelsTelegram-yA_NMLfM.js +1 -0
- package/public/dist/assets/CodeCanvas-DUaLWPBe.js +3 -0
- package/public/dist/assets/{DashboardEmbeddingSection-CIOwsVB5.js → DashboardEmbeddingSection-R9vUu9X2.js} +1 -1
- package/public/dist/assets/{DashboardMeta-D6nJsY8n.js → DashboardMeta-BKutQ9Ps.js} +1 -1
- package/public/dist/assets/DesignPanel-CE5jvzt4.js +2 -0
- package/public/dist/assets/{DiffPanel-ZaDoV7qS.js → DiffPanel-D9Cch5FG.js} +2 -2
- package/public/dist/assets/Display-BPYZ295k.js +1 -0
- package/public/dist/assets/DocPanel-DvtFw8AP.js +1 -0
- package/public/dist/assets/{Employees-CR41RcWo.js → Employees-bxErTlcA.js} +1 -1
- package/public/dist/assets/FolderPanel-u2YeiFFr.js +3 -0
- package/public/dist/assets/HealthBadge-CDPKdSXc.js +1 -0
- package/public/dist/assets/{Heartbeat-CD1R95Kv.js → Heartbeat-BCt4mFWz.js} +1 -1
- package/public/dist/assets/{InlineWarn-B3bJfG-Z.js → InlineWarn-DakL-ThS.js} +1 -1
- package/public/dist/assets/MarkdownRenderer-Cc3DeHvm.js +1 -0
- package/public/dist/assets/MarkdownRenderer-DzN66XVb.js +15 -0
- package/public/dist/assets/{Mcp-DSIEQZfH.js → Mcp-Cp1ffHWt.js} +2 -2
- package/public/dist/assets/{Memory-CpZIdE1o.js → Memory-Rq4fHjZv.js} +1 -1
- package/public/dist/assets/MilkdownWysiwygEditor-xObhviw7.js +160 -0
- package/public/dist/assets/ModelProvider-BNDxlWHC.js +1 -0
- package/public/dist/assets/Network-D_OYGb_C.js +1 -0
- package/public/dist/assets/NotesGraphWorkspace-DO9LtVGF.js +1 -0
- package/public/dist/assets/PanelLayoutProvider-BFxal5fZ.js +1 -0
- package/public/dist/assets/Permissions-DZ3ADB4i.js +1 -0
- package/public/dist/assets/Permissions-wj06yuy6.js +1 -0
- package/public/dist/assets/Profile-BQiNETCP.js +1 -0
- package/public/dist/assets/Prompts-DrMb2Kom.js +1 -0
- package/public/dist/assets/{SpeechKeys-CIq4c1iz.js → SpeechKeys-DqMhN-bl.js} +1 -1
- package/public/dist/assets/{TelegramHub-BrCeAZEf.js → TelegramHub-BSZ3xTdS.js} +1 -1
- package/public/dist/assets/TerminalPanel-Dwfd6Mhs.js +16 -0
- package/public/dist/assets/TerminalPanel-muGat3B1.css +1 -0
- package/public/dist/assets/{abnfDiagram-VCTEODGH-DOF68zXc.js → abnfDiagram-VCTEODGH-Bh3YzulT.js} +1 -1
- package/public/dist/assets/api-CLHen33W.js +1 -0
- package/public/dist/assets/api-CUtiCd2-.js +1 -0
- package/public/dist/assets/{apl-CYLd9I-9.js → apl-gfMMiTNf.js} +1 -1
- package/public/dist/assets/app-Dskscukr.css +1 -0
- package/public/dist/assets/app-ckFtOSgc.js +55 -0
- package/public/dist/assets/architecture-7GRP2DOG-Bp3iCG16.js +1 -0
- package/public/dist/assets/architectureDiagram-5GKGNRK7-COhidFYz.js +36 -0
- package/public/dist/assets/asciiarmor-C_eisQCp.js +1 -0
- package/public/dist/assets/{asn1-BlhHp3qx.js → asn1-DCl_8MCW.js} +1 -1
- package/public/dist/assets/{asterisk-Q0-IBwUt.js → asterisk-BEn0Cwpx.js} +1 -1
- package/public/dist/assets/{bgtask-badge-Cu1w7rg2.js → bgtask-badge-BmSGU6nQ.js} +1 -1
- package/public/dist/assets/bgtask-badge-DKpNEyny.js +1 -0
- package/public/dist/assets/{blockDiagram-OSKFZWR5-CRNzDJwU.js → blockDiagram-OSKFZWR5--OxgY2yr.js} +4 -4
- package/public/dist/assets/bounded-api-DdpT93LB.js +1 -0
- package/public/dist/assets/{bounded-set-DXkYOGnQ.js → bounded-set-BELTet1M.js} +1 -1
- package/public/dist/assets/c4Diagram-7LVT6UL2-C0DocmNb.js +38 -0
- package/public/dist/assets/channel-DO94Q0oH.js +1 -0
- package/public/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/public/dist/assets/{chunk-2ZTRR5NV-DF9qGbFc.js → chunk-2ZTRR5NV-BFt7Dm5O.js} +1 -1
- package/public/dist/assets/chunk-3NF5O7KM-FbOqoUnr.js +168 -0
- package/public/dist/assets/{chunk-3Z5EZCMW-D-umBnbE.js → chunk-3Z5EZCMW-udVqggne.js} +1 -1
- package/public/dist/assets/{chunk-4HAMMTFA-BzeIXjef.js → chunk-4HAMMTFA-UBUVs5kk.js} +2 -2
- package/public/dist/assets/{chunk-5V3GS4D5-DB7RMaO_.js → chunk-5V3GS4D5-ecLo0f1p.js} +1 -1
- package/public/dist/assets/{chunk-5VM5RSS4-CEUkek2W.js → chunk-5VM5RSS4-ZNzvKenW.js} +1 -1
- package/public/dist/assets/{chunk-6AZGARVD-qPN7cVYY.js → chunk-6AZGARVD-Cou1D2Ji.js} +1 -1
- package/public/dist/assets/{chunk-6EIED4P4-Bt6lS0r9.js → chunk-6EIED4P4-DeqPLKcQ.js} +1 -1
- package/public/dist/assets/{chunk-6K3QC6MW-BC_6hNGf.js → chunk-6K3QC6MW-Cn9odKk7.js} +1 -1
- package/public/dist/assets/{chunk-6TQVIW2G-NQr1OdRE.js → chunk-6TQVIW2G-IVBzI7O8.js} +1 -1
- package/public/dist/assets/{chunk-747NJXEK-CukETSeX.js → chunk-747NJXEK-Bxgd5wfl.js} +1 -1
- package/public/dist/assets/{chunk-75Z2AOVW-BLiFJXcr.js → chunk-75Z2AOVW-B1-fK2mN.js} +1 -1
- package/public/dist/assets/chunk-CLGD4ZFX-CotBINqH.js +1 -0
- package/public/dist/assets/{chunk-DU6HZSFF-CqT8wcBs.js → chunk-DU6HZSFF-vsD_dO7e.js} +3 -3
- package/public/dist/assets/{chunk-F27PBJKO-Ccrogyxp.js → chunk-F27PBJKO-C3O21Si2.js} +1 -1
- package/public/dist/assets/{chunk-FOHPRMQF--f9XSh-3.js → chunk-FOHPRMQF-CoA4358r.js} +35 -35
- package/public/dist/assets/{chunk-GMAD6QVW-BJLz4nC-.js → chunk-GMAD6QVW-BSVfzVP1.js} +2 -2
- package/public/dist/assets/chunk-GVQU2GXP-CsYaquup.js +1 -0
- package/public/dist/assets/chunk-H2I77ZZE-ytBKuGMS.js +1 -0
- package/public/dist/assets/{chunk-HLEWEB6X-BKWwzzZJ.js → chunk-HLEWEB6X-bHrMh27k.js} +3 -3
- package/public/dist/assets/{chunk-I5DQTOEV-B46sdKHC.js → chunk-I5DQTOEV-BYKVfZyL.js} +1 -1
- package/public/dist/assets/{chunk-ICYGCRZG-CSu4gXtC.js → chunk-ICYGCRZG-hvV-gq8M.js} +1 -1
- package/public/dist/assets/{chunk-IH6LHLGP-B2m3mWfU.js → chunk-IH6LHLGP-DTNFuJiP.js} +1 -1
- package/public/dist/assets/{chunk-JWPE2WC7-D-FE5omP.js → chunk-JWPE2WC7-DVXcaiue.js} +1 -1
- package/public/dist/assets/{chunk-KI3K4JFJ-Bfn6wbch.js → chunk-KI3K4JFJ-B4ZziqcX.js} +1 -1
- package/public/dist/assets/chunk-L3NEJ4N5-DxbPaCWe.js +1 -0
- package/public/dist/assets/{chunk-LNGE3PJU-Dyjtq0ks.js → chunk-LNGE3PJU-5-SxdO55.js} +7 -7
- package/public/dist/assets/chunk-LQGUR6SS-C7emO-i3.js +2 -0
- package/public/dist/assets/chunk-OSK3NFVY-D_HWIC0H.js +10 -0
- package/public/dist/assets/{chunk-OUJLGHUK-DkWSHliq.js → chunk-OUJLGHUK-CTWiVXba.js} +1 -1
- package/public/dist/assets/{chunk-P2QGCYS3-B-9ymCdr.js → chunk-P2QGCYS3-D9LpOEME.js} +1 -1
- package/public/dist/assets/{chunk-POPQ4Y6H-Df0_Odad.js → chunk-POPQ4Y6H-BzSgf7pO.js} +1 -1
- package/public/dist/assets/{chunk-PWAF6VOD-B1cuaLs-.js → chunk-PWAF6VOD-CqSJPGBE.js} +1 -1
- package/public/dist/assets/{chunk-SVP7TREG-DCh4QTp-.js → chunk-SVP7TREG-NOSK04BT.js} +1 -1
- package/public/dist/assets/{chunk-UY3FDG6J--uyeDRt4.js → chunk-UY3FDG6J-BVPsKpVN.js} +1 -1
- package/public/dist/assets/{chunk-X3CZISLH-C1s9nTVF.js → chunk-X3CZISLH-ChyOdCnY.js} +1 -1
- package/public/dist/assets/{chunk-XHIXRSVI-CQtpMKYq.js → chunk-XHIXRSVI-CQipzMEr.js} +1 -1
- package/public/dist/assets/chunk-XXDRQBXY-Uq2wLB4L.js +1 -0
- package/public/dist/assets/{chunk-ZLD2IHE6-DOKyEMMC.js → chunk-ZLD2IHE6-CWSP7frq.js} +3 -3
- package/public/dist/assets/classDiagram-CYGNFDIV-C1ssjdiH.js +1 -0
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-C1ssjdiH.js +1 -0
- package/public/dist/assets/clike-D_6L3tnO.js +1 -0
- package/public/dist/assets/cmake-84nbDH0I.js +1 -0
- package/public/dist/assets/cobol-DHLQUbN7.js +1 -0
- package/public/dist/assets/coffeescript-De_zI4J0.js +1 -0
- package/public/dist/assets/commonlisp-DgAKBe0r.js +1 -0
- package/public/dist/assets/{constants-BfYYzHNr.js → constants-TRkDoXvF.js} +1 -1
- package/public/dist/assets/{copy-text-Dy0kfmb9.js → copy-text-WsUHYigB.js} +1 -1
- package/public/dist/assets/cose-bilkent-JH36ORCC-BqCMCbxR.js +1 -0
- package/public/dist/assets/crystal-Bsdphhtm.js +1 -0
- package/public/dist/assets/css-CnaYoQib.js +1 -0
- package/public/dist/assets/cynefin-OW5HDTMX-57vG-IQU.js +1 -0
- package/public/dist/assets/cynefinDiagram-5FMLGOSQ-UAM-DZmU.js +62 -0
- package/public/dist/assets/cytoscape.esm-Ql0ZPabT.js +321 -0
- package/public/dist/assets/{d-BfHF1VVF.js → d-DWkQyNnU.js} +1 -1
- package/public/dist/assets/dagre-Fg-GCROL.js +1 -0
- package/public/dist/assets/{dagre-OS7QT2EB-c-JkA4ju.js → dagre-OS7QT2EB-CflcJHKB.js} +2 -2
- package/public/dist/assets/{diagram-S7CK7UJ4-CgObZnGW.js → diagram-S7CK7UJ4-Dzl9sLZD.js} +1 -1
- package/public/dist/assets/{diagram-UQ7AKVKN-DTiko3yH.js → diagram-UQ7AKVKN-BhpfQUAt.js} +2 -2
- package/public/dist/assets/{diagram-VSXAHHWV-BtwoQsOH.js → diagram-VSXAHHWV-CnuHIxOm.js} +1 -1
- package/public/dist/assets/{diagram-VX7I27RA-BvFpphqo.js → diagram-VX7I27RA-CQzbjtqd.js} +13 -13
- package/public/dist/assets/{diagram-Z3DM3KII-Zq8iJClC.js → diagram-Z3DM3KII-DR3Ie5C2.js} +1 -1
- package/public/dist/assets/dist--wUCkuiC.js +9 -0
- package/public/dist/assets/dist-B2ugUS7T.js +1 -0
- package/public/dist/assets/dist-B6-H00Bu.js +1 -0
- package/public/dist/assets/{dist-CD7tjeNO.js → dist-B_o5XbiL.js} +1 -1
- package/public/dist/assets/{dist-D8Zky4R1.js → dist-Bn361Kgk.js} +2 -2
- package/public/dist/assets/{dist-BspKh_Zg.js → dist-Box-O1ow.js} +1 -1
- package/public/dist/assets/dist-Bp7q5-Qc.js +39 -0
- package/public/dist/assets/dist-C9i-hLBK.js +1 -0
- package/public/dist/assets/{dist-JnCmAxGR.js → dist-CGUtB2hn.js} +1 -1
- package/public/dist/assets/dist-CHO5CBK1.js +1 -0
- package/public/dist/assets/dist-CJNnOuaA.js +1 -0
- package/public/dist/assets/dist-CPYD5RoF.js +1 -0
- package/public/dist/assets/dist-CW1HDUim.js +1 -0
- package/public/dist/assets/dist-Cbkb9LHa.js +1 -0
- package/public/dist/assets/dist-CcmA2WLJ.js +2 -0
- package/public/dist/assets/dist-ClT6EIJP.js +1 -0
- package/public/dist/assets/dist-D011G-p-.js +13 -0
- package/public/dist/assets/dist-DBX5LjYY.js +6 -0
- package/public/dist/assets/dist-DBpt7gM8.js +1 -0
- package/public/dist/assets/{dist-CgIOBybm.js → dist-DJGc9cyj.js} +1 -1
- package/public/dist/assets/{dist-CTpw6PFT.js → dist-DUl4SBwX.js} +1 -1
- package/public/dist/assets/{dist-DKd_hdkE.js → dist-DWvaIPaS.js} +1 -1
- package/public/dist/assets/{dist-DS7cuuIk.js → dist-Ds6qQDMC.js} +1 -1
- package/public/dist/assets/dist-Dxy8kUAu.js +1 -0
- package/public/dist/assets/{dist-Bg80xGMJ.js → dist-OaQUa3cd.js} +1 -1
- package/public/dist/assets/dist-Ohtnri73.js +11 -0
- package/public/dist/assets/dist-TN2_Nms3.js +2 -0
- package/public/dist/assets/dist-XM8qpb8C.js +1 -0
- package/public/dist/assets/dist-Y0iINzVl.js +1 -0
- package/public/dist/assets/{dist-uSfGXqs6.js → dist-kYfyPZP9.js} +1 -1
- package/public/dist/assets/{dist-D3ShDeDU.js → dist-lsEiXLAb.js} +1 -1
- package/public/dist/assets/{dockerfile-DkX5AHzr.js → dockerfile-DJkHQgkl.js} +1 -1
- package/public/dist/assets/{dylan-BQ0i5j3T.js → dylan-BCDoL_-p.js} +1 -1
- package/public/dist/assets/{ebnfDiagram-PWID7BFC-_fcO3z5G.js → ebnfDiagram-PWID7BFC-D_FcQuZg.js} +1 -1
- package/public/dist/assets/{ecl-oXh4vhiy.js → ecl-BVIeWmwY.js} +1 -1
- package/public/dist/assets/{employees-qLLnQlAv.js → employees-BJRRI3rV.js} +3 -3
- package/public/dist/assets/{erDiagram-2YWLMYGG-YIq0Go-p.js → erDiagram-2YWLMYGG-CLpGDU8-.js} +3 -3
- package/public/dist/assets/{erlang-GRIYhTbY.js → erlang-BV0c4Hdn.js} +1 -1
- package/public/dist/assets/{error-normalize-CLRJh19F.js → error-normalize-UHvG8s92.js} +1 -1
- package/public/dist/assets/esm-Q6VOkDbn.js +4 -0
- package/public/dist/assets/eventmodeling-NTZA5JFV-Dz1yjNT-.js +1 -0
- package/public/dist/assets/{factor-Xro2mWdw.js → factor-LKH5gN8L.js} +1 -1
- package/public/dist/assets/fields-CSdFjOgg.js +1 -0
- package/public/dist/assets/flowDiagram-T62WH6J4-jooH4x9e.js +1 -0
- package/public/dist/assets/forth-D6RzAl64.js +1 -0
- package/public/dist/assets/ganttDiagram-EL5Y4UJY-B9_NJDV6.js +292 -0
- package/public/dist/assets/gitGraph-4MIJSDKK-NIO2XoGv.js +1 -0
- package/public/dist/assets/{gitGraphDiagram-WWUBYQGX-Bg3OM_0S.js → gitGraphDiagram-WWUBYQGX-BO0vc7Qh.js} +4 -4
- package/public/dist/assets/graphlib-CGJNr7IJ.js +1 -0
- package/public/dist/assets/groovy-CUpZ7dEl.js +1 -0
- package/public/dist/assets/{haxe-BrZpr4Ca.js → haxe-DjVOVvNP.js} +1 -1
- package/public/dist/assets/idb-cache-BRpjf_a8.js +1 -0
- package/public/dist/assets/idb-cache-CFBnPfHz.js +1 -0
- package/public/dist/assets/iframe-renderer-BngLCbh9.js +1 -0
- package/public/dist/assets/iframe-renderer-CFD7rXuQ.js +142 -0
- package/public/dist/assets/info-A6RAGUB7-yRMwEr76.js +1 -0
- package/public/dist/assets/{infoDiagram-FKFFQAWI-Dbi9pIPw.js → infoDiagram-FKFFQAWI-BM2g31_p.js} +1 -1
- package/public/dist/assets/{ishikawaDiagram-5VMMS53U-C1FUP-sO.js → ishikawaDiagram-5VMMS53U-BZvjesKs.js} +2 -2
- package/public/dist/assets/javascript-B9I2pbsP.js +1 -0
- package/public/dist/assets/javascript-DctB8BJo.js +1 -0
- package/public/dist/assets/{journeyDiagram-EYS64GPL-CaEEa3uT.js → journeyDiagram-EYS64GPL-CqtePaqZ.js} +3 -3
- package/public/dist/assets/{jsx-runtime-CYoNlHAD.js → jsx-runtime-CkEUZM6i.js} +1 -1
- package/public/dist/assets/{kanban-definition-UXKFOSKX-DQjqFxtj.js → kanban-definition-UXKFOSKX-ChZA_T7a.js} +5 -5
- package/public/dist/assets/katex-DL-Py6bk.js +1 -0
- package/public/dist/assets/{lua-CxVmDfKg.js → lua-zbJo2mq3.js} +1 -1
- package/public/dist/assets/manager-Bfy42VgJ.css +1 -0
- package/public/dist/assets/manager-CTX6I1Jk.js +13 -0
- package/public/dist/assets/memory-BXcwokaP.js +1 -0
- package/public/dist/assets/{memory-I_6c8skr.js → memory-D2wwkOUi.js} +10 -10
- package/public/dist/assets/mermaid-loader-Beqble_i.js +1 -0
- package/public/dist/assets/{mermaid-parser.core-CBiGpWk6.js → mermaid-parser.core-J035_CYr.js} +1 -1
- package/public/dist/assets/{mermaid-preprocess-4oGDpf1X.js → mermaid-preprocess-D8xe5R2A.js} +1 -1
- package/public/dist/assets/mermaid.core-D1YZrgc_.js +11 -0
- package/public/dist/assets/mermaid.core-DSXunyto.js +1 -0
- package/public/dist/assets/message-history-C2JH-y2v.js +1 -0
- package/public/dist/assets/message-history-CYp7fqXy.js +4 -0
- package/public/dist/assets/{mindmap-definition-THT77NOG-CXOyjall.js → mindmap-definition-THT77NOG-C4c47DPO.js} +3 -3
- package/public/dist/assets/{mumps-BdPrWvs5.js → mumps-BSzj6Xyz.js} +1 -1
- package/public/dist/assets/{nginx-C7cLiM4x.js → nginx-8H7HVH4w.js} +1 -1
- package/public/dist/assets/{notes-graph-settings-Cl4lMj-A.js → notes-graph-settings-BUoTzvqs.js} +1 -1
- package/public/dist/assets/{nsis-iX94j4T9.js → nsis-CfSuhXs5.js} +1 -1
- package/public/dist/assets/{ntriples-DLMpvgb1.js → ntriples-B9h1VB_g.js} +1 -1
- package/public/dist/assets/packet-AYTQ26CC-BreuCLNh.js +1 -0
- package/public/dist/assets/{page-shell-DZ1lls_P.js → page-shell-Bs0RBRoD.js} +1 -1
- package/public/dist/assets/{pegDiagram-XKGWAZYB-DVD3P7WU.js → pegDiagram-XKGWAZYB-BHiELbRn.js} +1 -1
- package/public/dist/assets/perl-BkSkiI9m.js +1 -0
- package/public/dist/assets/pi-settings-B7e38HJP.js +1 -0
- package/public/dist/assets/{pi-settings-DEuKgvIj.js → pi-settings-BmvRWRpc.js} +1 -1
- package/public/dist/assets/pie-WAS4IAKB-Co3_rQ80.js +1 -0
- package/public/dist/assets/{pieDiagram-E7YTZNPT-DEH6UJP4.js → pieDiagram-E7YTZNPT-BEKTktaH.js} +2 -2
- package/public/dist/assets/{powershell-Dfw2t4-B.js → powershell-BcIto6Sf.js} +1 -1
- package/public/dist/assets/preload-helper-CfbQpVni.js +1 -0
- package/public/dist/assets/presentation-DWHWElFr.js +1 -0
- package/public/dist/assets/presentation-preference-BYEPPRPg.js +1 -0
- package/public/dist/assets/presentation-preference-D9u6LD07.js +1 -0
- package/public/dist/assets/{pug-C8nPBT90.js → pug-CqqUmdG7.js} +1 -1
- package/public/dist/assets/puppet-BZyAS7I4.js +1 -0
- package/public/dist/assets/python-B_1Jd8HM.js +1 -0
- package/public/dist/assets/{quadrantDiagram-AXDQQJYC-CAbCNOON.js → quadrantDiagram-AXDQQJYC-CeJGAkDA.js} +2 -2
- package/public/dist/assets/r-CxDmU1I4.js +1 -0
- package/public/dist/assets/radar-RG4KPBEZ-C2cOxc85.js +1 -0
- package/public/dist/assets/railroad-74A4TZTK-BZ4umY4g.js +1 -0
- package/public/dist/assets/railroad-abnf-HS5TGJTU-DxbXiuYs.js +1 -0
- package/public/dist/assets/railroad-ebnf-LZEXJU2U-Bthp2_-B.js +1 -0
- package/public/dist/assets/railroad-peg-WCYAUIDC-YcQ4ouxQ.js +1 -0
- package/public/dist/assets/{railroadDiagram-O6MQD6OU-CEs81LrU.js → railroadDiagram-O6MQD6OU-CsT34rgN.js} +1 -1
- package/public/dist/assets/{render-Cc0Y43E3.js → render-DRweFDYR.js} +13 -13
- package/public/dist/assets/{requirementDiagram-IS5BZ75X-DsPApdKv.js → requirementDiagram-IS5BZ75X-4PwTKQWK.js} +2 -2
- package/public/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/public/dist/assets/{rough.esm-DQG0wzX4.js → rough.esm-Dy-Kn_BL.js} +1 -1
- package/public/dist/assets/ruby-BjXV7-Qa.js +1 -0
- package/public/dist/assets/{sankeyDiagram-P5KCCOFB-Im52Eou9.js → sankeyDiagram-P5KCCOFB-BykRKMDj.js} +2 -2
- package/public/dist/assets/scheme-D9qYN0V5.js +1 -0
- package/public/dist/assets/sequenceDiagram-WJ2MYXX4-Dyj787ok.js +162 -0
- package/public/dist/assets/settings-2diaN51W.js +1 -0
- package/public/dist/assets/{settings-DpjZSu2J.js → settings-DuqNWkxS.js} +3 -3
- package/public/dist/assets/settings-client-CSHmzyxv.js +1 -0
- package/public/dist/assets/settings-core-CIPKFBNN.js +162 -0
- package/public/dist/assets/settings-core-DiYr5EbU.js +1 -0
- package/public/dist/assets/{shell-BBoIO9l0.js → shell-DwuoZtxw.js} +1 -1
- package/public/dist/assets/sidebar-DumxhgAD.js +49 -0
- package/public/dist/assets/{sieve-8oEe6gDx.js → sieve-tLWDfEkZ.js} +1 -1
- package/public/dist/assets/{simple-mode-BNw0K2rL.js → simple-mode-DXiLM1-G.js} +1 -1
- package/public/dist/assets/{sizeCapture-INFHLROL-D9Rpk-aA.js → sizeCapture-INFHLROL-B0uUizjq.js} +1 -1
- package/public/dist/assets/skills-CCXE-bXK.js +1 -0
- package/public/dist/assets/skills-D3AfzYbP.js +12 -0
- package/public/dist/assets/slash-commands-Cn9AWqF6.js +1 -0
- package/public/dist/assets/slash-commands-DCHYDCYa.js +20 -0
- package/public/dist/assets/solr-B78wSQJQ.js +1 -0
- package/public/dist/assets/sql-DuQMFDvy.js +1 -0
- package/public/dist/assets/state-Dl-xxPoS.js +1 -0
- package/public/dist/assets/{stateDiagram-XQSTLZYL-B5CxGVqv.js → stateDiagram-XQSTLZYL-6p5Yrm8S.js} +1 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-DfXrMbZg.js +1 -0
- package/public/dist/assets/{stex-32iK7T_9.js → stex-DNzd62Q_.js} +1 -1
- package/public/dist/assets/{stylus-C689wDNM.js → stylus-BOVgKnng.js} +1 -1
- package/public/dist/assets/swimlanes-V6O3JKXN-Pyw_hrrE.js +1 -0
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-R-OHp34K.js +8 -0
- package/public/dist/assets/textile-C4jVoHG1.js +1 -0
- package/public/dist/assets/tiki-AK6FwT8q.js +1 -0
- package/public/dist/assets/timeline-definition-24CTP7MA-V_LwIXs0.js +120 -0
- package/public/dist/assets/toml-BPTmHmyx.js +1 -0
- package/public/dist/assets/trace-drawer-B05Fa2ja.js +20 -0
- package/public/dist/assets/treeView-Q6P3EWNA-CDjnLfDO.js +1 -0
- package/public/dist/assets/treemap-WGGIJYW6-CbGUwvA1.js +1 -0
- package/public/dist/assets/{ttcn-CPOduycD.js → ttcn-PPSTk1ow.js} +1 -1
- package/public/dist/assets/{ttcn-cfg-DmA__-R_.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
- package/public/dist/assets/turtle-Cx3rYX2g.js +1 -0
- package/public/dist/assets/ui-BO9pdl-p.js +1 -0
- package/public/dist/assets/ui-CCXcKDL5.js +2 -0
- package/public/dist/assets/vendor-render-Cmfl_oW8.js +383 -0
- package/public/dist/assets/vendor-render-DSSkXCir.css +1 -0
- package/public/dist/assets/vendor-utils-C1xaEGmb.js +1 -0
- package/public/dist/assets/{vennDiagram-4TSXK5OY-fVndHq7T.js → vennDiagram-4TSXK5OY-ZagiHlwi.js} +3 -3
- package/public/dist/assets/{verilog-DMw8DKoT.js → verilog-CjI9Y6RI.js} +1 -1
- package/public/dist/assets/vhdl-kS471soi.js +1 -0
- package/public/dist/assets/wardley-WFR3VGLG-Cj73o4Iq.js +1 -0
- package/public/dist/assets/{wardleyDiagram-VM6X3IG4-CXIfS7ZF.js → wardleyDiagram-VM6X3IG4-BBAHdIq-.js} +35 -35
- package/public/dist/assets/wiki-link-resolver-CbJATnBn.js +22 -0
- package/public/dist/assets/wiki-link-suggestions-BcEfThgf.js +2 -0
- package/public/dist/assets/{xquery-CYbd_YmJ.js → xquery-BKJx4mf9.js} +1 -1
- package/public/dist/assets/{xychartDiagram-S5SC5T6Z-CqC-Uvuc.js → xychartDiagram-S5SC5T6Z-C43SenTd.js} +4 -4
- package/public/dist/assets/z80-Co3PbHdE.js +1 -0
- package/public/dist/index.html +4 -4
- package/public/dist/manager/index.html +3 -3
- package/public/index.html +3 -1
- package/public/js/api.ts +2 -2
- package/public/js/bounded-api.ts +49 -0
- package/public/js/features/activity-discovery.ts +142 -0
- package/public/js/features/activity-history.ts +334 -0
- package/public/js/features/activity-http.ts +17 -0
- package/public/js/features/activity-live.ts +330 -0
- package/public/js/features/activity-view.ts +218 -0
- package/public/js/features/chat-messages.ts +13 -4
- package/public/js/features/idb-cache.ts +37 -3
- package/public/js/features/message-history.ts +144 -16
- package/public/js/features/message-item-html.ts +7 -3
- package/public/js/features/native-request-bridge.ts +133 -0
- package/public/js/features/native-requests.ts +337 -0
- package/public/js/features/presentation-preference.ts +52 -0
- package/public/js/features/process-block.ts +35 -1
- package/public/js/features/process-log-adapter.ts +11 -1
- package/public/js/features/settings-core.ts +20 -1
- package/public/js/features/settings-types.ts +5 -1
- package/public/js/features/trace-drawer.ts +145 -43
- package/public/js/features/ui-status.ts +5 -0
- package/public/js/state.ts +3 -0
- package/public/js/ui.ts +41 -8
- package/public/js/virtual-scroll.ts +66 -4
- package/public/js/ws.ts +324 -29
- package/public/manager/src/settings/fields/SelectField.tsx +7 -5
- package/public/manager/src/settings/pages/Agent.tsx +3 -2
- package/public/manager/src/settings/pages/Display.tsx +100 -19
- package/public/manager/src/settings/pages/ModelProvider.tsx +133 -45
- package/public/manager/src/settings/pages/Permissions.tsx +18 -10
- package/public/manager/src/settings/pages/components/PerCliRow.tsx +42 -6
- package/public/manager/src/settings/pages/components/PiProfileDialog.tsx +59 -6
- package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +9 -6
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +3 -0
- package/public/manager/src/settings/pages/components/runtime-transport-field.tsx +68 -0
- package/public/manager/src/settings-controls.css +43 -0
- package/public/manager/src/settings-shell.css +21 -1
- package/scripts/bundle-sidecar.sh +282 -37
- package/scripts/check-sidecar-smoke.mjs +250 -137
- package/scripts/sidecar-smoke-probe.mjs +171 -0
- package/public/dist/assets/AdvancedExport-tXydxVAh.js +0 -1
- package/public/dist/assets/Agent-CHaTUS7c.js +0 -1
- package/public/dist/assets/Browser-Dm5J1gXP.js +0 -1
- package/public/dist/assets/BrowserPanel-0b3deLGR.js +0 -3
- package/public/dist/assets/ChannelsDiscord-D6jmfyHe.js +0 -1
- package/public/dist/assets/ChannelsSlack-BcykASIN.js +0 -1
- package/public/dist/assets/ChannelsTelegram-XkNtVi8o.js +0 -1
- package/public/dist/assets/CodeCanvas-D-JH2Ikl.js +0 -3
- package/public/dist/assets/DesignPanel-SuUOoyQN.js +0 -2
- package/public/dist/assets/Display-B25HqCMH.js +0 -1
- package/public/dist/assets/DocPanel-qiqo6365.js +0 -1
- package/public/dist/assets/FolderPanel-BkggPdTP.js +0 -3
- package/public/dist/assets/HealthBadge-D7BQ-LHD.js +0 -1
- package/public/dist/assets/MarkdownRenderer-DZ-hWmCB.js +0 -15
- package/public/dist/assets/MarkdownRenderer-uwE0Wam5.js +0 -1
- package/public/dist/assets/MilkdownWysiwygEditor-DanGAZL5.js +0 -160
- package/public/dist/assets/ModelProvider-tL42E5dy.js +0 -1
- package/public/dist/assets/Network-ByNu-VCZ.js +0 -1
- package/public/dist/assets/NotesGraphWorkspace-Be6ctzYE.js +0 -1
- package/public/dist/assets/PanelLayoutProvider-B9fYsunp.js +0 -1
- package/public/dist/assets/Permissions-B-74b-nO.js +0 -1
- package/public/dist/assets/Permissions-x_6_kLC1.js +0 -1
- package/public/dist/assets/Profile-Bf9-QN2Y.js +0 -1
- package/public/dist/assets/Prompts-DGDw56NQ.js +0 -1
- package/public/dist/assets/TerminalPanel-DdE69MNo.css +0 -1
- package/public/dist/assets/TerminalPanel-gXH7bTXQ.js +0 -36
- package/public/dist/assets/api-DNnX8m0u.js +0 -1
- package/public/dist/assets/api-tVoG39dL.js +0 -1
- package/public/dist/assets/app-CXraFyoA.js +0 -55
- package/public/dist/assets/app-DuyLYRC6.css +0 -1
- package/public/dist/assets/architecture-7GRP2DOG-DxLizWvy.js +0 -1
- package/public/dist/assets/architectureDiagram-5GKGNRK7-BpxFEoT5.js +0 -36
- package/public/dist/assets/asciiarmor-7YwhfGDq.js +0 -1
- package/public/dist/assets/bgtask-badge-BjyAbBio.js +0 -1
- package/public/dist/assets/c4Diagram-7LVT6UL2-Bg0DdRYW.js +0 -38
- package/public/dist/assets/channel-BjgXjYj8.js +0 -1
- package/public/dist/assets/chunk-2Q5K7J3B-BClkI2P5.js +0 -1
- package/public/dist/assets/chunk-3NF5O7KM-DXOprKA_.js +0 -168
- package/public/dist/assets/chunk-CLGD4ZFX-B5zkZ8n6.js +0 -1
- package/public/dist/assets/chunk-GVQU2GXP-BlVn1fMW.js +0 -1
- package/public/dist/assets/chunk-H2I77ZZE-BXf4_vA2.js +0 -1
- package/public/dist/assets/chunk-L3NEJ4N5-FGXu31jw.js +0 -1
- package/public/dist/assets/chunk-LQGUR6SS-qUTD5FMI.js +0 -2
- package/public/dist/assets/chunk-OSK3NFVY-CrXjNywV.js +0 -10
- package/public/dist/assets/chunk-XXDRQBXY-DEwmqeYc.js +0 -1
- package/public/dist/assets/classDiagram-CYGNFDIV-hbaxbeYd.js +0 -1
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-_OfX3b6Y.js +0 -1
- package/public/dist/assets/clike-BcV5UqGE.js +0 -1
- package/public/dist/assets/cmake-DhPsEu0W.js +0 -1
- package/public/dist/assets/cobol-BEekiT-v.js +0 -1
- package/public/dist/assets/coffeescript-Bgk4ZVWF.js +0 -1
- package/public/dist/assets/commonlisp-Dw4PRJwx.js +0 -1
- package/public/dist/assets/cose-bilkent-JH36ORCC-HnUYAhwC.js +0 -1
- package/public/dist/assets/crystal-CJ-iCD_G.js +0 -1
- package/public/dist/assets/css-BDUaiSMY.js +0 -1
- package/public/dist/assets/cynefin-OW5HDTMX-VXYSLvft.js +0 -1
- package/public/dist/assets/cynefinDiagram-5FMLGOSQ-D0dmg5fA.js +0 -62
- package/public/dist/assets/cytoscape.esm-CS3SmpXd.js +0 -321
- package/public/dist/assets/dagre-DDTOgfwg.js +0 -1
- package/public/dist/assets/dist-BCCaGGDY.js +0 -1
- package/public/dist/assets/dist-BPE4W9iX.js +0 -6
- package/public/dist/assets/dist-BQMBTYXL.js +0 -1
- package/public/dist/assets/dist-BaPGPaX4.js +0 -1
- package/public/dist/assets/dist-CBnlLSQZ.js +0 -1
- package/public/dist/assets/dist-CINTuhik.js +0 -2
- package/public/dist/assets/dist-CX7KjpF3.js +0 -39
- package/public/dist/assets/dist-CczLsP0o.js +0 -9
- package/public/dist/assets/dist-CdfDDy4r.js +0 -1
- package/public/dist/assets/dist-Cl_pRobr.js +0 -1
- package/public/dist/assets/dist-CruwQXwE.js +0 -1
- package/public/dist/assets/dist-CvE8Qa9r.js +0 -2
- package/public/dist/assets/dist-Cy3mcP1e.js +0 -1
- package/public/dist/assets/dist-CzCFEnHw.js +0 -1
- package/public/dist/assets/dist-D2h9T4I9.js +0 -13
- package/public/dist/assets/dist-DLOg6n0b.js +0 -1
- package/public/dist/assets/dist-DW0I56_o.js +0 -1
- package/public/dist/assets/dist-TombgBki.js +0 -11
- package/public/dist/assets/dist-hBRIxDzG.js +0 -1
- package/public/dist/assets/dist-z5Z70wW8.js +0 -1
- package/public/dist/assets/esm-CT1xxdH5.js +0 -4
- package/public/dist/assets/eventmodeling-NTZA5JFV-Csqcv5T_.js +0 -1
- package/public/dist/assets/fields-E1L8aEhU.js +0 -1
- package/public/dist/assets/flowDiagram-T62WH6J4-Del9dfOW.js +0 -1
- package/public/dist/assets/forth-DNnBFTm6.js +0 -1
- package/public/dist/assets/ganttDiagram-EL5Y4UJY-CezfIvti.js +0 -292
- package/public/dist/assets/gitGraph-4MIJSDKK-D_1mlgPm.js +0 -1
- package/public/dist/assets/graphlib-Cjg_soTo.js +0 -1
- package/public/dist/assets/groovy-Cm4gdIYU.js +0 -1
- package/public/dist/assets/idb-cache-B5PX63p7.js +0 -1
- package/public/dist/assets/idb-cache-lOntwU3S.js +0 -1
- package/public/dist/assets/iframe-renderer-BLP8Army.js +0 -1
- package/public/dist/assets/iframe-renderer-vuNrU6aI.js +0 -142
- package/public/dist/assets/info-A6RAGUB7-ce7F80NR.js +0 -1
- package/public/dist/assets/javascript-DD7UxIxH.js +0 -1
- package/public/dist/assets/javascript-DZFdG8BN.js +0 -1
- package/public/dist/assets/katex-BoGadFcG.js +0 -1
- package/public/dist/assets/manager-BspQvGAC.js +0 -13
- package/public/dist/assets/manager-Cmu0aKPb.css +0 -1
- package/public/dist/assets/memory-CRji7xpO.js +0 -1
- package/public/dist/assets/mermaid-loader-BcReSszT.js +0 -1
- package/public/dist/assets/mermaid.core-BJIXJ0Ir.js +0 -11
- package/public/dist/assets/mermaid.core-J6tiqiVK.js +0 -1
- package/public/dist/assets/message-history-C1ThtA4i.js +0 -1
- package/public/dist/assets/message-history-CXg12lcd.js +0 -1
- package/public/dist/assets/packet-AYTQ26CC-86oNpyWh.js +0 -1
- package/public/dist/assets/perl-DfpfXWOH.js +0 -1
- package/public/dist/assets/pi-settings-5HVg1sXJ.js +0 -1
- package/public/dist/assets/pie-WAS4IAKB-CMzmzfvT.js +0 -1
- package/public/dist/assets/preload-helper-DFYRRz9w.js +0 -1
- package/public/dist/assets/puppet-DnsvBfcg.js +0 -1
- package/public/dist/assets/python-mfoZJSDM.js +0 -1
- package/public/dist/assets/r-FO7GgXB8.js +0 -1
- package/public/dist/assets/radar-RG4KPBEZ-CsDBxCx4.js +0 -1
- package/public/dist/assets/railroad-74A4TZTK-B6s85Oul.js +0 -1
- package/public/dist/assets/railroad-abnf-HS5TGJTU-jnABoAnr.js +0 -1
- package/public/dist/assets/railroad-ebnf-LZEXJU2U-C_VWXbk9.js +0 -1
- package/public/dist/assets/railroad-peg-WCYAUIDC-y3jeoP_s.js +0 -1
- package/public/dist/assets/rolldown-runtime-XQCOJYun.js +0 -1
- package/public/dist/assets/ruby-Cg1fwXaw.js +0 -1
- package/public/dist/assets/scheme-DGFmPoR2.js +0 -1
- package/public/dist/assets/sequenceDiagram-WJ2MYXX4-BChOR6yh.js +0 -162
- package/public/dist/assets/settings-B2Ix6Y7k.js +0 -1
- package/public/dist/assets/settings-client-D9KY2Ufl.js +0 -1
- package/public/dist/assets/settings-core-Bkb0BoYY.js +0 -1
- package/public/dist/assets/settings-core-DWYQIIoe.js +0 -162
- package/public/dist/assets/sidebar-C8WKweCz.js +0 -49
- package/public/dist/assets/skills-QWf6vRIB.js +0 -12
- package/public/dist/assets/skills-bEGqvmiQ.js +0 -1
- package/public/dist/assets/slash-commands-BbA0Y1up.js +0 -1
- package/public/dist/assets/slash-commands-qD6yScsx.js +0 -20
- package/public/dist/assets/solr-BwGyzi2H.js +0 -1
- package/public/dist/assets/sql-B6Phvk1R.js +0 -1
- package/public/dist/assets/state-DxpgDKMO.js +0 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-BmdRqxzy.js +0 -1
- package/public/dist/assets/swimlanes-V6O3JKXN-Ckem4dQh.js +0 -1
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-DW_0PiOk.js +0 -8
- package/public/dist/assets/textile-xOWO1SH7.js +0 -1
- package/public/dist/assets/tiki-OG7n6UAo.js +0 -1
- package/public/dist/assets/timeline-definition-24CTP7MA-CJRsjFnd.js +0 -120
- package/public/dist/assets/toml-DkxT-aUR.js +0 -1
- package/public/dist/assets/trace-drawer-Ct8sP4j-.js +0 -15
- package/public/dist/assets/treeView-Q6P3EWNA-ChnMvz2a.js +0 -1
- package/public/dist/assets/treemap-WGGIJYW6-DZJ4jE42.js +0 -1
- package/public/dist/assets/turtle-CEzrJHdY.js +0 -1
- package/public/dist/assets/ui-BZxyyJUk.js +0 -1
- package/public/dist/assets/ui-xoW9x-Pz.js +0 -2
- package/public/dist/assets/vendor-render-BpGO1zp3.js +0 -383
- package/public/dist/assets/vendor-render-kIxHrxDV.css +0 -1
- package/public/dist/assets/vendor-utils-BUFU5ypz.js +0 -1
- package/public/dist/assets/vhdl-M4wLPuJt.js +0 -1
- package/public/dist/assets/wardley-WFR3VGLG-CGM_JiX0.js +0 -1
- package/public/dist/assets/wiki-link-resolver-BGpGBLMp.js +0 -22
- package/public/dist/assets/wiki-link-suggestions-cvpqJp6c.js +0 -2
- package/public/dist/assets/z80-nGsPT_fm.js +0 -1
- /package/public/dist/assets/{agent-meta-KPnVam9G.js → agent-meta-WqLP4HPi.js} +0 -0
- /package/public/dist/assets/{api-FOqKQ9fm.js → api-B9RiiOMM.js} +0 -0
- /package/public/dist/assets/{brainfuck-CM8jf4Gu.js → brainfuck-D5EjA2JK.js} +0 -0
- /package/public/dist/assets/{chunk-Y2CYZVJY-DlLjK0OJ.js → chunk-Y2CYZVJY-DsF7k-Jl.js} +0 -0
- /package/public/dist/assets/{clojure-XHu9GAjV.js → clojure-BflJGmDX.js} +0 -0
- /package/public/dist/assets/{cypher-CJ05ZgAu.js → cypher-p9eYesGn.js} +0 -0
- /package/public/dist/assets/{desktop-bridge-DtydAvqu.js → desktop-bridge-DbRfkg8l.js} +0 -0
- /package/public/dist/assets/{diff-BVcHwfdB.js → diff-ChtP43wD.js} +0 -0
- /package/public/dist/assets/{dtd-Bg0TgBY9.js → dtd-DTF72YNO.js} +0 -0
- /package/public/dist/assets/{ebnf-QSFUkOiT.js → ebnf-D4c0_ac3.js} +0 -0
- /package/public/dist/assets/{eiffel-S15DDWzw.js → eiffel-BEjRio4Q.js} +0 -0
- /package/public/dist/assets/{elm-B746ZFPi.js → elm-Cshzl8qu.js} +0 -0
- /package/public/dist/assets/{fcl-DjQMeb0v.js → fcl-ClOhbFR7.js} +0 -0
- /package/public/dist/assets/{folder-drag-payload-CJ0dxhZa.js → folder-drag-payload-BhV9yzhH.js} +0 -0
- /package/public/dist/assets/{fortran-yg6K9z9n.js → fortran-Bt6PBEDR.js} +0 -0
- /package/public/dist/assets/{gas-fbsH19hy.js → gas-BHEdbvp9.js} +0 -0
- /package/public/dist/assets/{gherkin-BCy9haeT.js → gherkin-oBAE_ms0.js} +0 -0
- /package/public/dist/assets/{haskell-Dq28dVw2.js → haskell-BRsoo5mP.js} +0 -0
- /package/public/dist/assets/{http-B3zr0y0o.js → http-CLVgA2GD.js} +0 -0
- /package/public/dist/assets/{idl-C9CL9hdG.js → idl-BUZw3wgd.js} +0 -0
- /package/public/dist/assets/{julia-CjwfSXBk.js → julia-CQfgDRfP.js} +0 -0
- /package/public/dist/assets/{livescript-vRjI6jFU.js → livescript-BXxG0Yva.js} +0 -0
- /package/public/dist/assets/{locale-DC-ZsWOf.js → locale-B9w_kUtW.js} +0 -0
- /package/public/dist/assets/{mathematica-DJZPFt8k.js → mathematica-u8YMmbU0.js} +0 -0
- /package/public/dist/assets/{mbox-CxBBnlIA.js → mbox-BEMVcqjs.js} +0 -0
- /package/public/dist/assets/{mirc-CBWc0vcU.js → mirc-C9zpzAZU.js} +0 -0
- /package/public/dist/assets/{mllike-DYddHpeS.js → mllike-B45xgp2S.js} +0 -0
- /package/public/dist/assets/{modelica-B94rrYMn.js → modelica-CqHI_q-D.js} +0 -0
- /package/public/dist/assets/{mscgen-D0PO0iPT.js → mscgen-qgSLujhx.js} +0 -0
- /package/public/dist/assets/{octave-DeJPElAr.js → octave-D2Q8cUp1.js} +0 -0
- /package/public/dist/assets/{oz-4dtXWqwe.js → oz-BwTct_5T.js} +0 -0
- /package/public/dist/assets/{pascal-TdeXcL-o.js → pascal-Dp_KdFgX.js} +0 -0
- /package/public/dist/assets/{path-utils-QbjARuCC.js → path-utils-B6vBr0DD.js} +0 -0
- /package/public/dist/assets/{pig-xQ4essgV.js → pig-AF4Hwhju.js} +0 -0
- /package/public/dist/assets/{properties-CrJLOvU2.js → properties-C357ku5U.js} +0 -0
- /package/public/dist/assets/{protobuf-BYv78GYU.js → protobuf-D1ij_kNL.js} +0 -0
- /package/public/dist/assets/{provider-icons-CXA2mnPO.js → provider-icons-Det0fC-4.js} +0 -0
- /package/public/dist/assets/{q-BrTIu4PU.js → q-B9NhS7L_.js} +0 -0
- /package/public/dist/assets/{rpm-D8Wbdep5.js → rpm-gpDK5sbt.js} +0 -0
- /package/public/dist/assets/{sas-Ch1GEx-n.js → sas-C2OyD2Y6.js} +0 -0
- /package/public/dist/assets/{settings-types-DPhhM-cj.js → settings-types-B09BmpYe.js} +0 -0
- /package/public/dist/assets/{smalltalk-ChbxX23N.js → smalltalk-BLp5-jwC.js} +0 -0
- /package/public/dist/assets/{sparql-D9wgprRx.js → sparql-Dz-mlCAC.js} +0 -0
- /package/public/dist/assets/{spreadsheet-BySehl32.js → spreadsheet-CTIncYxj.js} +0 -0
- /package/public/dist/assets/{swift-DZwxTp-L.js → swift-DKB6_1j6.js} +0 -0
- /package/public/dist/assets/{tcl-BSOjIY_8.js → tcl-BGfruO1u.js} +0 -0
- /package/public/dist/assets/{tiddlywiki-B8jhOxrf.js → tiddlywiki-VlUiK86J.js} +0 -0
- /package/public/dist/assets/{troff-vE5gOX7Y.js → troff-C2dAgh7P.js} +0 -0
- /package/public/dist/assets/{vb-Cii5IQTv.js → vb-BthdM_4N.js} +0 -0
- /package/public/dist/assets/{vbscript-DcZWGZ_S.js → vbscript-D9f6rSsU.js} +0 -0
- /package/public/dist/assets/{velocity-BEag7EnK.js → velocity-CqftRsjg.js} +0 -0
- /package/public/dist/assets/{vendor-icons-Begb5v1n.js → vendor-icons-CNcMX6Ac.js} +0 -0
- /package/public/dist/assets/{w3c-keyname-hgmz1BF7.js → w3c-keyname-BOAvb0qz.js} +0 -0
- /package/public/dist/assets/{webidl-CjehKbx5.js → webidl-D5jiJvOU.js} +0 -0
- /package/public/dist/assets/{yacas-ClBNsli2.js → yacas-CXXgtw0p.js} +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
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{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./preload-helper-CfbQpVni.js";import{a as n,i as r,n as i,r as a,t as o}from"./esm-Q6VOkDbn.js";import{n as s,t as c}from"./jsx-runtime-CkEUZM6i.js";import{n as l,t as u}from"./bounded-set-BELTet1M.js";import{t as d}from"./desktop-bridge-DbRfkg8l.js";var f=e(s(),1),p=l();function m(e){let t=typeof window<`u`?window.location.origin:``,n=typeof window<`u`?window.location.port:``,r=t&&n===String(e)?t:`http://127.0.0.1:${e}`;async function i(e,t,n){let i={method:e};n&&(i.headers={"Content-Type":`application/json`},i.body=JSON.stringify(n));let a=await(await fetch(`${r}${t}`,i)).json();if(!a.ok)throw Error(a.error||`${e} ${t} failed`);return a}return{async listSessions(){return(await i(`GET`,`/api/code/sessions`)).sessions},async listStoredSessions(e={}){let t=e.scope??`all`,n=new URLSearchParams({scope:t});return t===`cwd`&&e.cwd&&n.set(`cwd`,e.cwd),(await i(`GET`,`/api/code/sessions/stored${`?${n.toString()}`}`)).sessions},async listModelOptions(){return i(`GET`,`/api/code/models`)},async setDefaultModel(e){return i(`POST`,`/api/code/model-default`,{modelId:e})},async listModelAssignments(){return i(`GET`,`/api/code/model-assignments`)},async setModelAssignment(e,t){let n=typeof t==`string`?{modelId:t}:t;return i(`PUT`,`/api/code/model-assignments/${encodeURIComponent(e)}`,n)},async clearModelAssignment(e){return i(`DELETE`,`/api/code/model-assignments/${encodeURIComponent(e)}`)},async listModelPresets(){return i(`GET`,`/api/code/model-presets`)},async getGitInfo(e){return await i(`GET`,`/api/code/git-info?cwd=${encodeURIComponent(e)}`)},async loadSession(e,t){return(await i(`POST`,`/api/code/sessions/load`,{sessionId:e,cwd:t})).session},async createSession(e,t){return(await i(`POST`,`/api/code/sessions`,{cwd:e,...t?{model:t}:{}})).session},async sendPrompt(e,t){return i(`POST`,`/api/code/sessions/${e}/prompt`,{text:t})},async cancelPrompt(e){await i(`POST`,`/api/code/sessions/${e}/cancel`)},async closeSession(e){await i(`DELETE`,`/api/code/sessions/${e}`)},async answerPermission(e,t){await i(`POST`,`/api/code/permissions/${e}`,{optionId:t})},async setSessionConfig(e,t,n){await i(`POST`,`/api/code/sessions/${e}/config`,{configId:t,valueId:n})},async extMethod(e,t,n){return(await i(`POST`,`/api/code/sessions/${e}/ext`,{method:t,params:n})).result},async forkSession(e,t){return(await i(`POST`,`/api/code/sessions/${e}/fork`,{cwd:t})).session},async setSessionModel(e,t){await i(`POST`,`/api/code/sessions/${e}/model`,{modelId:t})},pickWorkspace(){return i(`POST`,`/api/code/workspace/pick`)}}}var h=c();function g({client:e,activeSessionId:t,workingDir:n,onSelectSession:r,onLoadSession:i,onNewSession:a}){let[o,s]=(0,f.useState)([]),[c,l]=(0,f.useState)([]),[u,d]=(0,f.useState)(!0),[p,m]=(0,f.useState)(``),[g,_]=(0,f.useState)(``),[v,y]=(0,f.useState)(`all`),b=(0,f.useCallback)(async()=>{d(!0),m(``);let t=e=>e instanceof Error?e.message:String(e),r=v===`cwd`?{scope:`cwd`,cwd:n}:{scope:`all`},[i,a]=await Promise.allSettled([e.listSessions(),e.listStoredSessions(r)]),o=[];if(i.status===`fulfilled`){let e=i.value;s(e.filter(e=>e.status!==`closed`));let n=new Set(e.map(e=>e.sessionId));a.status===`fulfilled`?l(a.value.filter(e=>!n.has(e.sessionId))):(l([]),o.push(`History: ${t(a.reason)}`))}else s([]),o.push(`Live: ${t(i.reason)}`),a.status===`fulfilled`?l(a.value):(l([]),o.push(`History: ${t(a.reason)}`));o.length>0&&m(o.join(` · `)),d(!1)},[e,v,n]);(0,f.useEffect)(()=>{b()},[b]);let x=e=>e.split(`/`).pop()||e,S=e=>{let t=e.replayEvents?.find(e=>e.event===`code_user_message_chunk`)?.update??{},n=t.content;return String(n?.text??t.text??``).split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()||``},C=e=>e.title?.trim()||S(e)||x(e.cwd)||e.sessionId.slice(0,12)||`Untitled session`,w=e=>x(e.cwd),T=e=>[e.sessionId,e.title??``,S(e),e.cwd].join(` `).toLowerCase(),E=e=>e.title?.trim()||e.firstMessage?.replace(/\s+/g,` `).trim()||e.sessionId.slice(0,12)||`Untitled session`,D=e=>{if(typeof e.lastModified==`number`)return e.lastModified;if(e.updatedAt){let t=Date.parse(e.updatedAt);if(Number.isFinite(t))return t}return 0},O=e=>{let t=[x(e.cwd)];return e.messageCount!==void 0&&t.push(`${e.messageCount} messages`),t.filter(Boolean).join(` · `)},k=e=>[e.sessionId,e.title??``,e.firstMessage??``,e.cwd].join(` `).toLowerCase(),A=c.filter(e=>!g||k(e).includes(g.toLowerCase())).sort((e,t)=>D(t)-D(e)).slice(0,20),j=A.reduce((e,t)=>{let n=e.find(e=>e.cwd===t.cwd);return n?n.sessions.push(t):e.push({cwd:t.cwd,sessions:[t]}),e},[]),M=p?`Session data could not fully load.`:v===`cwd`?`No sessions for this cwd. Switch to All to browse global history.`:`No JWC sessions found.`;return(0,h.jsxs)(`div`,{className:`code-session-list`,children:[(0,h.jsxs)(`div`,{className:`code-session-list-header`,children:[(0,h.jsx)(`span`,{className:`code-session-list-title`,children:`Sessions`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-new-btn`,onClick:a,"aria-label":`New code session`,children:`+`})]}),(0,h.jsxs)(`div`,{className:`code-session-view-toggle`,"aria-label":`Session view`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`all`?` active`:``}`,onClick:()=>y(`all`),children:`All`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`cwd`?` active`:``}`,onClick:()=>y(`cwd`),children:`This cwd`}),(0,h.jsx)(`button`,{type:`button`,className:`code-session-view-btn${v===`grouped`?` active`:``}`,onClick:()=>y(`grouped`),children:`Group`})]}),v===`cwd`&&(0,h.jsx)(`div`,{className:`code-session-view-hint`,children:x(n)}),p&&(0,h.jsx)(`div`,{className:`code-session-list-error`,role:`status`,children:p}),o.length+c.length>3&&(0,h.jsx)(`input`,{className:`code-session-search`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Search sessions...`}),u?(0,h.jsx)(`div`,{className:`code-session-list-loading`,children:`Loading...`}):(0,h.jsxs)(h.Fragment,{children:[o.length>0&&(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:o.filter(e=>!g||T(e).includes(g.toLowerCase())).map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item ${e.sessionId===t?`active`:``}`,onClick:()=>r(e),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:C(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:w(e)}),(0,h.jsx)(`span`,{className:`code-session-status code-session-status-${e.status}`,children:e.status})]})},e.sessionId))}),A.length>0&&v!==`grouped`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`code-session-list-divider`,children:`History`}),(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:A.map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item`,onClick:()=>i(e.sessionId,e.cwd),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:E(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:O(e)}),(0,h.jsx)(`span`,{className:`code-session-status`,children:`stored`})]})},e.sessionId))})]}),A.length>0&&v===`grouped`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`code-session-list-divider`,children:`History by cwd`}),j.map(e=>(0,h.jsxs)(`section`,{className:`code-session-group`,children:[(0,h.jsxs)(`div`,{className:`code-session-group-title`,title:e.cwd,children:[x(e.cwd),` `,(0,h.jsx)(`span`,{children:e.sessions.length})]}),(0,h.jsx)(`ul`,{className:`code-session-list-items`,children:e.sessions.map(e=>(0,h.jsx)(`li`,{children:(0,h.jsxs)(`button`,{type:`button`,className:`code-session-item`,onClick:()=>i(e.sessionId,e.cwd),children:[(0,h.jsx)(`span`,{className:`code-session-cwd`,children:E(e)}),(0,h.jsx)(`span`,{className:`code-session-meta`,children:O(e)}),(0,h.jsx)(`span`,{className:`code-session-status`,children:`stored`})]})},e.sessionId))})]},e.cwd))]}),o.length===0&&A.length===0&&(0,h.jsx)(`div`,{className:`code-session-list-empty`,children:M})]})]})}function _(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if(r?.role===`tool`&&r.toolCallId===t)return n}return-1}function v(e,t){return e?`${e}/${t}`:t}var y=[`allow_once`,`allow_always`,`reject_once`,`reject_always`],b={allow_once:`Allow once`,allow_always:`Always allow`,reject_once:`Deny once`,reject_always:`Always deny`},x={allow_once:`allow-once`,allow_always:`allow-always`,reject_once:`deny-once`,reject_always:`deny-always`},S=[{value:`always-allow`,label:`Always allow`,detail:`Auto-allow gated tools`,tone:`allow`},{value:`ask`,label:`Ask first`,detail:`Review each gated tool`,tone:`ask`},{value:`always-deny`,label:`Always deny`,detail:`Auto-deny gated tools`,tone:`deny`}],C={ask:`Review each gated tool`,"always-allow":`Auto-allow gated tools`,"always-deny":`Auto-deny gated tools`},w={allow_once:/^(allow[_\s-]?once|allow once)$/i,allow_always:/^(allow[_\s-]?always|always allow|always approve)$/i,reject_once:/^(reject[_\s-]?once|deny[_\s-]?once|reject|deny)$/i,reject_always:/^(reject[_\s-]?always|deny[_\s-]?always|always reject|always deny)$/i};function T(e){return[e.kind,e.optionId,e.id,e.name,e.label].map(e=>String(e??``)).join(` `).trim()}function E(e){let t=e.optionId??e.id;return t==null||t===``?null:String(t)}function D(e,t){let n=e.name??e.label;return n==null||n===``?b[t]:String(n)}function O(e,t){let n=e.find(e=>e.kind===t),r=e.find(e=>e.optionId===t||e.id===t),i=e.find(e=>w[t].test(T(e))),a=n??r??i;if(!a)return null;let o=E(a);return o?{kind:t,optionId:o,label:D(a,t),raw:a}:null}function k(e){return String(e.toolName??e.title??e.name??`tool`)}function A(e,t){let n={permissionId:e.permissionId,toolName:k(e.toolCall),...t};return{role:`permission`,text:n.error??n.optionLabel??n.decision,permissionAudit:n}}function j(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function M(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`string`){n&&t.push(n);continue}if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=n,r=typeof e.type==`string`?e.type.toLowerCase():``,i=e.text;(!r||r===`text`)&&typeof i==`string`&&i&&t.push(i)}return t.length>0?t.join(`
|
|
3
|
+
`):null}function ee(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=M(t.content);if(n)return n;let r=t.details;if(r&&typeof r==`object`&&!Array.isArray(r)){let e=r.displayContent;if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.text;if(typeof t==`string`&&t)return t}}return null}function N(e){return ee(e)??j(e)}function P(e){if(typeof e==`string`)return{type:`text`,text:e};if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=typeof t.type==`string`?t.type.toLowerCase():``,r=typeof t.label==`string`?t.label:void 0;if(n===`diff`&&typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(n===`error`)return{type:`error`,text:j(t.text??t.error??t.message??t),...r?{label:r}:{}};if(n===`args`||n===`arguments`||n===`input`)return{type:`args`,json:t.json??t.args??t.arguments??t.input??t,...r?{label:r}:{}};if(n===`output`)return{type:`output`,text:N(t.text??t.output??t),...r?{label:r}:{}};if(n===`json`)return{type:`json`,json:t.json??t.value??t,...r?{label:r}:{}};if(typeof t.diff==`string`)return{type:`diff`,diff:t.diff,...r?{label:r}:{}};if(typeof t.text==`string`)return{type:`text`,text:t.text,...r?{label:r}:{}};let i=ee(t);return i?{type:`text`,text:i,...r?{label:r}:{}}:{type:`json`,json:t,...r?{label:r}:{}}}function F(e,t,n,r){r!=null&&r!==``&&(t===`args`||t===`json`?e.push({type:t,label:n,json:r}):e.push({type:t,label:n,text:t===`output`?N(r):j(r)}))}function te(e){let t=[],n=e.content;if(Array.isArray(n))for(let e of n){let n=P(e);n&&t.push(n)}else{let e=P(n);e&&t.push(e)}return F(t,`args`,`Args`,e.args??e.arguments??e.input??e.rawInput),F(t,`output`,`Output`,e.rawOutput??e.output),F(t,`error`,`Error`,e.error??e.errorMessage??e.reason),t}var I={settings:{category:`settings`,popupKind:`settings`},theme:{category:`settings`,popupKind:`settings`},identity:{category:`settings`,popupKind:`settings`},"identity-auto":{category:`settings`,popupKind:`settings`},model:{category:`model`,popupKind:`model`},provider:{category:`provider`,popupKind:`provider`},login:{category:`provider`,popupKind:`provider`}},L={session:`session`,orchestrate:`workflow`,pabcd:`workflow`,goal:`workflow`,mcp:`utility`,move:`utility`,compact:`utility`,dump:`utility`,help:`utility`};function ne(e){return e.trim().replace(/^\/+/,``)}function R(e,t){let n=typeof e.source==`string`?e.source:``,r=typeof e.path==`string`?e.path:``;return n.includes(`skill`)||t.includes(`:`)?`jwc-skill`:n.includes(`custom`)?`jwc-custom`:n.includes(`file`)||r?`jwc-file`:I[t]||L[t]?`jwc-builtin`:`unknown`}function z(e){let t=e.input;if(!t||typeof t!=`object`)return;let n=t.hint;return typeof n==`string`&&n.trim()?n:void 0}function B(e){if(!e||typeof e!=`object`)return null;let t=e,n=ne(String(t.name??``));if(!n)return null;let r=I[n],i=r?.category??L[n]??`unknown`,a=R(t,n),o=t.supported===!1||t.disabled===!0?`unsupported`:r?`popup`:i===`unknown`?`pass-through`:`insert`,s=typeof t.description==`string`&&t.description.trim()?t.description:void 0,c=z(t),l={name:n,displayName:`/${n}`,category:i,actionType:o,source:a,raw:t};return s&&(l.description=s),c&&(l.inputHint=c),r&&(l.popupKind=r.popupKind),o===`unsupported`&&(l.disabledReason=typeof t.disabledReason==`string`&&t.disabledReason.trim()?t.disabledReason:`Unsupported in Code mode`),l}function re(e){let t=Array.isArray(e)?e:[],n=new Set,r=[];for(let e of t){let t=B(e);t&&!n.has(t.name)&&(n.add(t.name),r.push(t))}return r}function V(e){return[e.name,e.displayName,e.description??``,e.inputHint??``,e.category,e.source].join(` `).toLowerCase()}function ie(e,t){let n=ne(t.split(/\s+/)[0]??``).toLowerCase();if(!n)return e;let r=[],i=[];for(let t of e)t.name.toLowerCase().startsWith(n)?r.push(t):V(t).includes(n)&&i.push(t);return[...r,...i]}function ae({value:e,disabled:t,onChange:n}){let r=S.find(t=>t.value===e)??S[0];return(0,h.jsxs)(`div`,{className:`code-permission-mode-field`,children:[(0,h.jsxs)(`div`,{className:`code-permission-mode-label`,children:[(0,h.jsx)(`span`,{children:`Permission mode`}),(0,h.jsx)(`strong`,{children:`Default: Always allow`})]}),(0,h.jsx)(`div`,{className:`code-permission-mode-list`,role:`listbox`,"aria-label":`Permission mode`,children:S.map(r=>(0,h.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r.value===e,disabled:t,className:`code-permission-mode-option is-${r.tone}${r.value===e?` is-selected`:``}`,title:r.detail,onClick:()=>n(r.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:r.label}),(0,h.jsx)(`small`,{children:r.detail})]}),r.value===e&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},r.value))}),(0,h.jsx)(`p`,{className:`code-permission-mode-note is-${r?.tone??`ask`}`,children:`Automatic modes answer with JWC persistent options and write a transcript audit row.`})]})}function oe(e){return e===`provider`?`Provider`:e===`model`?`Model`:e===`permission`?`Permissions`:e===`session`?`Session`:`Settings`}function H(e){return e===`jwc-cache`?`JWC cache`:`static fallback`}function se({popupKind:e,command:t,modelOptions:n,provider:r,model:i,modelAssignments:a,modelPresets:o,permissionMode:s,disabled:c,activeSessionId:l,error:u,onClose:d,onRefreshProviders:p,onProviderChange:m,onUseModel:g,onUseForNewSessions:_,onSetDefaultModel:v,onSetModelAssignment:y,onClearModelAssignment:b,onPermissionModeChange:x}){let S=(0,f.useRef)(null),C=(0,f.useRef)(null),w=n.providers.find(e=>e.id===r)??n.providers[0],[T,E]=(0,f.useState)(``),[D,O]=(0,f.useState)(`models`),[k,A]=(0,f.useState)(r),[j,M]=(0,f.useState)(i),[ee,N]=(0,f.useState)({}),P=n.providers.find(e=>e.id===k)??w,F=T.trim().toLowerCase(),te=(0,f.useMemo)(()=>n.providers.filter(e=>!F||e.id.toLowerCase().includes(F)||e.models.some(e=>e.toLowerCase().includes(F))),[n.providers,F]),I=(0,f.useMemo)(()=>{let e=P?.models??[];return F?e.filter(e=>e.toLowerCase().includes(F)):e},[P?.models,F]),L=oe(e),ne=(0,f.useMemo)(()=>{let e=n.providers.length;return`${e} authenticated provider${e===1?``:`s`}`},[n.providers.length]),R=!!(l&&k&&j&&!c),z=!!(k&&j&&!c),B=(0,f.useMemo)(()=>[`inherit`,...P?.efforts??[]].map(e=>e===`min`?`minimal`:e).filter((e,t,n)=>e&&n.indexOf(e)===t).map(e=>({value:e,label:e===`inherit`?`inherit`:e===`minimal`?`min`:e})),[P?.efforts]);return(0,f.useEffect)(()=>{S.current?.focus()},[e,t.name]),(0,f.useEffect)(()=>{let e=document.activeElement;return()=>{e?.focus?.()}},[]),(0,f.useEffect)(()=>{e===`model`&&(E(``),A(r),M(i))},[i,e,r]),(0,f.useEffect)(()=>{if(e!==`model`)return;let t=P?.models??[];t.length>0&&!t.includes(j)&&M(t[0]??``)},[j,P?.models,e]),(0,f.useEffect)(()=>{if(e!==`model`||!a)return;let t={};for(let e of a.roles){let n=e.thinkingLevel===`min`?`minimal`:e.thinkingLevel;t[e.role]=n||`inherit`}N(t)},[a,e]),(0,f.useEffect)(()=>{let e=e=>{if(e.key===`Escape`){e.preventDefault(),d();return}if(e.key===`Tab`&&C.current){let t=C.current.querySelectorAll(`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`),n=t[0],r=t[t.length-1];if(!n||!r)return;let i=document.activeElement;e.shiftKey&&i===n?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d]),(0,h.jsx)(`div`,{className:`code-popup-backdrop`,role:`presentation`,onMouseDown:e=>{e.target===e.currentTarget&&d()},children:(0,h.jsxs)(`section`,{ref:C,className:`code-popup`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`code-command-popup-title`,children:[(0,h.jsxs)(`header`,{className:`code-popup-header`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`p`,{className:`code-popup-command`,children:t.displayName}),(0,h.jsx)(`h2`,{id:`code-command-popup-title`,children:L})]}),(0,h.jsx)(`button`,{ref:S,type:`button`,className:`code-popup-close`,onClick:d,"aria-label":`Close popup`,children:`x`})]}),e===`provider`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsxs)(`div`,{className:`code-popup-section-head`,children:[(0,h.jsx)(`span`,{children:ne}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:c,onClick:p,children:`Refresh`})]}),n.degraded&&(0,h.jsx)(`p`,{className:`code-popup-warning`,children:n.error??`Provider discovery is degraded.`}),u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-provider-list`,role:`list`,children:n.providers.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-provider-row${e.id===r?` is-selected`:``}`,onClick:()=>m(e.id),disabled:c,children:[(0,h.jsx)(`span`,{className:`code-provider-name`,children:e.id}),(0,h.jsxs)(`span`,{className:`code-provider-meta`,children:[e.models.length,` models · `,H(e.modelSource)]})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Add provider`}),(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Login`}),(0,h.jsx)(`span`,{children:`Provider add/login execution is next slice.`})]})]}),(e===`settings`||e===`permission`)&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[(0,h.jsx)(ae,{value:s,disabled:!!c,onChange:x}),e===`settings`&&(0,h.jsxs)(`div`,{className:`code-popup-summary`,children:[(0,h.jsx)(`span`,{children:`Provider`}),(0,h.jsx)(`strong`,{children:r||`-`}),(0,h.jsx)(`span`,{children:`Model`}),(0,h.jsx)(`strong`,{children:i||`-`})]})]}),e===`model`&&(0,h.jsxs)(`div`,{className:`code-popup-section`,children:[u&&(0,h.jsx)(`p`,{className:`code-popup-error`,children:u}),(0,h.jsx)(`div`,{className:`code-model-tablist`,role:`tablist`,"aria-label":`Model settings tabs`,children:[`models`,`roles`,`profiles`].map(e=>(0,h.jsx)(`button`,{type:`button`,role:`tab`,id:`code-model-tab-${e}`,"aria-selected":D===e,"aria-controls":`code-model-panel-${e}`,tabIndex:D===e?0:-1,className:`code-model-tab${D===e?` is-active`:``}`,onClick:()=>O(e),onKeyDown:e=>{if(e.key!==`ArrowRight`&&e.key!==`ArrowLeft`)return;e.preventDefault();let t=[`models`,`roles`,`profiles`],n=e.key===`ArrowRight`?1:t.length-1,r=t[(t.indexOf(D)+n)%t.length]??`models`;O(r)},children:e===`models`?`Models`:e===`roles`?`Roles`:`Profiles`},e))}),D===`models`&&(0,h.jsxs)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-models`,"aria-labelledby":`code-model-tab-models`,children:[(0,h.jsxs)(`label`,{className:`code-popup-field`,children:[(0,h.jsx)(`span`,{children:`Search models`}),(0,h.jsx)(`input`,{type:`search`,className:`code-model-search`,placeholder:`Search provider or model`,value:T,onChange:e=>E(e.target.value),disabled:c})]}),n.usageOrder&&n.usageOrder.length>0&&(0,h.jsxs)(`div`,{className:`code-model-mru-strip`,"aria-label":`Recently used models`,children:[(0,h.jsx)(`span`,{children:`Recently used`}),n.usageOrder.slice(0,3).map(e=>(0,h.jsx)(`strong`,{children:e},e))]}),(0,h.jsxs)(`div`,{className:`code-model-layout`,children:[(0,h.jsx)(`div`,{className:`code-model-providers`,role:`list`,"aria-label":`Providers`,children:te.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-model-provider${e.id===k?` is-selected`:``}`,onClick:()=>{A(e.id),M(e.models[0]??``)},disabled:c,children:[(0,h.jsx)(`span`,{children:e.id}),(0,h.jsx)(`small`,{children:e.models.length})]},e.id))}),(0,h.jsxs)(`div`,{className:`code-model-list`,role:`list`,"aria-label":`Models`,children:[(0,h.jsxs)(`div`,{className:`code-model-list-head`,children:[(0,h.jsx)(`strong`,{children:P?.id??`No provider`}),(0,h.jsxs)(`span`,{children:[I.length,` models · `,H(P?.modelSource)]})]}),I.length===0?(0,h.jsx)(`p`,{className:`code-popup-note`,children:`No models match this search.`}):I.map(e=>{let t=k===r&&e===i,n=e===j;return(0,h.jsxs)(`button`,{type:`button`,className:`code-model-row${t?` is-active`:``}${n?` is-draft`:``}`,onClick:()=>M(e),disabled:c,children:[(0,h.jsx)(`span`,{children:e}),(0,h.jsx)(`small`,{children:t?`Active`:n?`Selected`:`Available`})]},e)})]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-row`,children:[(0,h.jsxs)(`div`,{className:`code-popup-summary code-popup-summary-compact`,children:[(0,h.jsx)(`span`,{children:`Active`}),(0,h.jsxs)(`strong`,{children:[r||`-`,` / `,i||`-`]}),(0,h.jsx)(`span`,{children:`Selected`}),(0,h.jsxs)(`strong`,{children:[k||`-`,` / `,j||`-`]}),(0,h.jsx)(`span`,{children:`Default`}),(0,h.jsxs)(`strong`,{children:[n.defaultProvider||`-`,` / `,n.defaultModel||`-`]})]}),(0,h.jsxs)(`div`,{className:`code-popup-action-stack`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-primary`,disabled:!R,onClick:()=>{g(k,j)},children:`Use now`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{_(k,j)},children:`Use for new sessions`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!z,onClick:()=>{v(k,j)},children:`Set default`})]})]}),!l&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Start or load a Code session to apply a live model. Use “Use for new sessions” to set the next session’s model.`})]}),D===`roles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-roles`,"aria-labelledby":`code-model-tab-roles`,children:(0,h.jsxs)(`div`,{className:`code-role-assignment-panel`,"aria-label":`Model role assignments`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Role assignments`}),(0,h.jsx)(`span`,{children:a?.activeModel.note??`Role assignments do not mutate the active Code session model.`})]}),(0,h.jsx)(`div`,{className:`code-role-assignment-grid`,role:`list`,children:(a?.roles??[]).map(e=>{let t=e.modelId?e.modelId:`Unset`,n=ee[e.role]??(e.thinkingLevel===`min`?`minimal`:e.thinkingLevel)??`inherit`,r=!!(k&&j&&!c),i=!(!e.modelId||c);return(0,h.jsxs)(`article`,{className:`code-role-card`,role:`listitem`,children:[(0,h.jsxs)(`div`,{className:`code-role-card-head`,children:[(0,h.jsx)(`span`,{className:`code-role-tag`,children:e.tag}),(0,h.jsx)(`strong`,{children:e.name})]}),(0,h.jsx)(`p`,{className:`code-role-path`,children:e.settingsPath}),(0,h.jsx)(`p`,{className:`code-role-model`,title:t,children:t}),(0,h.jsxs)(`label`,{className:`code-role-thinking`,children:[(0,h.jsx)(`span`,{children:`Thinking`}),(0,h.jsx)(`select`,{value:n,disabled:c,onChange:t=>{let n=t.target.value;N(t=>({...t,[e.role]:n}))},children:B.map(e=>(0,h.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,h.jsxs)(`div`,{className:`code-role-actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!r,onClick:()=>{y(e.role,k,j,n===`inherit`?null:n)},children:`Assign selected`}),(0,h.jsx)(`button`,{type:`button`,className:`code-popup-secondary`,disabled:!i,onClick:()=>{b(e.role)},children:`Clear`})]})]},e.role)})}),!a&&(0,h.jsx)(`p`,{className:`code-popup-note`,children:`Loading role assignments.`})]})}),D===`profiles`&&(0,h.jsx)(`div`,{className:`code-popup-tabpanel`,role:`tabpanel`,id:`code-model-panel-profiles`,"aria-labelledby":`code-model-tab-profiles`,children:(0,h.jsxs)(`div`,{className:`code-model-preset-panel`,"aria-label":`Model profiles and presets`,children:[(0,h.jsxs)(`div`,{className:`code-role-assignment-head`,children:[(0,h.jsx)(`strong`,{children:`Profiles and presets`}),(0,h.jsx)(`span`,{children:o?.applyReason??`Loading JWC profile state.`})]}),(0,h.jsxs)(`div`,{className:`code-model-preset-summary`,children:[(0,h.jsx)(`span`,{children:`Startup profile`}),(0,h.jsx)(`strong`,{children:o?.defaultProfile??`Unset`}),(0,h.jsx)(`span`,{children:`Task presets`}),(0,h.jsx)(`strong`,{children:o?o.taskPresets.length:`-`}),(0,h.jsx)(`span`,{children:`Built-in profiles`}),(0,h.jsx)(`strong`,{children:o?o.builtinProfiles.length:`-`})]}),o&&o.taskPresets.length>0&&(0,h.jsx)(`div`,{className:`code-model-preset-list`,role:`list`,"aria-label":`Task model presets`,children:o.taskPresets.slice(0,4).map(e=>(0,h.jsxs)(`div`,{className:`code-model-preset-row`,role:`listitem`,children:[(0,h.jsx)(`strong`,{children:e.name}),(0,h.jsx)(`span`,{children:e.best?`best ${e.best}`:`best unset`}),(0,h.jsx)(`span`,{children:e.cheap?`cheap ${e.cheap}`:`cheap unset`})]},e.name))}),o&&(0,h.jsx)(`div`,{className:`code-model-profile-chips`,"aria-label":`Built-in profile candidates`,children:o.builtinProfiles.slice(0,8).map(e=>(0,h.jsx)(`span`,{children:e.name},e.name))}),(0,h.jsxs)(`div`,{className:`code-popup-placeholder-actions`,children:[(0,h.jsx)(`button`,{type:`button`,disabled:!0,className:`code-popup-secondary`,children:`Apply profile`}),(0,h.jsx)(`span`,{children:`Profile activation is read-only here; JWC runtime owns credential checks and rollback.`})]})]})})]})]})})}function U(e,t,n){return n<=0?0:(e+t+n)%n}function ce(e){return e.disabledReason?`Disabled`:e.actionType===`popup`?e.popupKind?`${e.popupKind} popup`:`Popup`:e.actionType===`pass-through`?`Pass-through`:e.actionType===`unsupported`?`Unsupported`:`Insert`}function le(e){let[t,n]=(0,f.useState)(0),r=(0,f.useMemo)(()=>ie(e.availableCommands,e.inputText).slice(0,10),[e.availableCommands,e.inputText]),i=r[t],a=i?`code-command-option-${i.name.replace(/[^a-z0-9_-]/gi,`-`)}`:void 0;(0,f.useEffect)(()=>{n(0)},[e.inputText,e.availableCommands]),(0,f.useEffect)(()=>{t>=r.length&&n(Math.max(0,r.length-1))},[t,r.length]);let o=t=>{t&&!t.disabledReason&&e.onCommandSelect(t)};return(0,h.jsxs)(`div`,{className:`code-composer`,children:[e.showCommands&&r.length>0&&(0,h.jsx)(`div`,{className:`code-command-palette`,role:`listbox`,"aria-label":`Code commands`,id:`code-command-palette`,children:r.map((e,r)=>{let i=r===t,a=`code-command-option-${e.name.replace(/[^a-z0-9_-]/gi,`-`)}`;return(0,h.jsxs)(`button`,{id:a,type:`button`,role:`option`,"aria-selected":i,"aria-disabled":e.disabledReason?!0:void 0,className:`code-command-item${i?` is-active`:``}${e.disabledReason?` is-disabled`:``}`,onMouseEnter:()=>n(r),onClick:()=>o(e),children:[(0,h.jsxs)(`span`,{className:`code-command-row-main`,children:[(0,h.jsx)(`span`,{className:`code-command-name`,children:e.displayName}),e.description&&(0,h.jsx)(`span`,{className:`code-command-desc`,children:e.description})]}),(0,h.jsxs)(`span`,{className:`code-command-row-meta`,children:[(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.category}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:e.source}),(0,h.jsx)(`span`,{className:`code-command-chip`,children:ce(e)})]})]},e.name)})}),(0,h.jsxs)(`div`,{className:`code-composer-input-shell`,children:[(0,h.jsx)(`textarea`,{className:`code-composer-input`,value:e.inputText,onChange:t=>e.onInputChange(t.target.value),onKeyDown:t=>{if(t.key===`Escape`&&e.showCommands){t.preventDefault(),e.onShowCommandsChange(!1);return}if(e.showCommands&&r.length>0){if(t.key===`ArrowDown`){t.preventDefault(),n(e=>U(e,1,r.length));return}if(t.key===`ArrowUp`){t.preventDefault(),n(e=>U(e,-1,r.length));return}if(t.key===`Enter`&&!t.shiftKey){t.preventDefault(),o(i);return}}t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),e.onSubmit())},"aria-controls":e.showCommands?`code-command-palette`:void 0,"aria-activedescendant":e.showCommands?a:void 0,"aria-expanded":e.showCommands,placeholder:`Describe a task or ask a question...`,rows:1,disabled:e.sending}),(0,h.jsx)(`span`,{className:`code-composer-hint`,children:`Enter to send · / for commands`})]}),(0,h.jsx)(`button`,{type:`button`,className:`code-composer-send`,onClick:e.onSubmit,disabled:!e.inputText.trim()||e.sending,"aria-label":`Send prompt`,children:`Send`})]})}function W({permissions:e,onAnswer:t}){return e.length===0?null:(0,h.jsx)(`div`,{className:`code-permissions`,children:e.map(e=>(0,h.jsxs)(`div`,{className:`code-permission-card`,children:[(0,h.jsxs)(`div`,{className:`code-permission-title`,children:[(0,h.jsx)(`span`,{children:`Permission request`}),(0,h.jsx)(`strong`,{children:k(e.toolCall)}),(0,h.jsxs)(`small`,{children:[e.options.length,` JWC options`]})]}),(0,h.jsx)(`div`,{className:`code-permission-actions`,children:y.map(n=>{let r=O(e.options,n),i=x[n];return(0,h.jsx)(`button`,{type:`button`,className:`code-permission-btn is-${i}`,disabled:!r,title:r?r.optionId:`${b[n]} option was not provided by JWC`,onClick:()=>t(e,n),children:r?.label??b[n]},n)})})]},e.permissionId))})}var ue=92,de=6;function fe(e){let[{virtualItems:t,totalSize:s},c]=(0,f.useState)({virtualItems:[],totalSize:0}),l=(0,f.useRef)(null);l.current||=new o({count:e.count,getScrollElement:()=>e.scrollElementRef.current,estimateSize:e.estimateSize||(()=>ue),overscan:de,getItemKey:e.getItemKey,indexAttribute:`data-code-transcript-idx`,useAnimationFrameWithResizeObserver:!0,observeElementRect:n,observeElementOffset:r,scrollToFn:i,measureElement:a,onChange:e=>{c({virtualItems:e.getVirtualItems(),totalSize:e.getTotalSize()})}});let u=l.current;return(0,f.useEffect)(()=>u._didMount(),[u]),(0,f.useEffect)(()=>{u.measure()},[u,e.resetKey]),(0,f.useEffect)(()=>()=>{l.current=null},[]),(0,f.useLayoutEffect)(()=>{u.setOptions({...u.options,count:e.count,getItemKey:e.getItemKey,estimateSize:e.estimateSize||(()=>ue)}),u._willUpdate(),c({virtualItems:u.getVirtualItems(),totalSize:u.getTotalSize()})},[e.count,e.estimateSize,e.getItemKey,u]),{measureElement:e=>{e&&u.measureElement(e)},virtualItems:t,totalSize:s}}var G=2e3,pe=80,K=400;function me(e){if(e<=G)return pe;let t=e/G*pe;return Math.min(K,Math.round(t))}function he(e){let[t,n]=(0,f.useState)(e),r=(0,f.useRef)(0),i=(0,f.useRef)(null);return(0,f.useEffect)(()=>{if(!(e.length>=t.length&&e.startsWith(t))){i.current!==null&&(window.clearTimeout(i.current),i.current=null),r.current=Date.now(),n(e);return}if(e===t)return;let a=me(e.length),o=Date.now()-r.current;if(o>=a){r.current=Date.now(),n(e);return}i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,r.current=Date.now(),n(e)},a-o)},[e,t]),(0,f.useEffect)(()=>()=>{i.current!==null&&window.clearTimeout(i.current)},[]),t}var ge=(0,f.lazy)(()=>t(()=>import(`./MarkdownRenderer-Cc3DeHvm.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0])));function _e({text:e,onOpenLocalFile:t}){let n=he(e);return(0,h.jsx)(f.Suspense,{fallback:(0,h.jsx)(`span`,{children:n}),children:(0,h.jsx)(ge,{markdown:n,tableMode:`linear`,onLocalFileOpen:t})})}function q(e,t){let n=e.label??(e.type===`args`?`Args`:e.type===`output`?`Output`:e.type===`error`?`Error`:``),r=`code-tool-${e.type}`,i=e.type===`diff`&&e.diff?e.diff:e.type===`json`||e.type===`args`?JSON.stringify(e.json??e,null,2):e.text??JSON.stringify(e,null,2);return n?(0,h.jsxs)(`div`,{className:`code-tool-section`,children:[(0,h.jsx)(`span`,{className:`code-tool-section-label`,children:n}),(0,h.jsx)(`pre`,{className:r,children:i})]},t):e.type===`diff`&&e.diff?(0,h.jsx)(`pre`,{className:`code-tool-diff`,children:e.diff},t):e.text?(0,h.jsx)(`pre`,{className:`code-tool-text`,children:e.text},t):(0,h.jsx)(`pre`,{className:r,children:i},t)}function ve(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function J(e){return(e.toolContent?.find(e=>typeof e.text==`string`&&e.text.trim())?.text??e.toolOutput??``).replace(/\s+/g,` `).trim().slice(0,240)}function Y(e){return e.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()??``}function X(e){let t=e.toolContent?.find(e=>e.type===`args`||e.type===`text`||e.type===`json`);if(!t)return null;if(typeof t.text==`string`){let e=Y(t.text);return e?{text:e,...t.type===`args`?{name:`bash`}:/^https?:\/\//.test(e)||e.startsWith(`/`)?{name:`read`}:{}}:null}if(typeof t.json==`string`){let e=Y(t.json);return e?{text:e,...t.type===`args`?{name:`bash`}:{}}:null}if(t.json&&typeof t.json==`object`&&!Array.isArray(t.json)){let e=t.json;for(let[t,n]of[[`command`,`bash`],[`cmd`,`bash`],[`path`,`read`],[`url`,`read`],[`file`,`read`],[`query`,`search`]]){let r=e[t];if(typeof r==`string`&&r.trim())return{name:n,text:Y(r)}}}return null}function Z(e){let t=Y(e.toolName||e.text||`tool`)||`tool`,n=X(e);return t.includes(`:`)||!n?t:t===`tool`?n.name?`${n.name}: ${n.text}`:n.text:`${t}: ${n.text}`}function ye(e){return e===`pending`?`Pending`:e===`allow_once`?`Allow once`:e===`allow_always`?`Always allow`:e===`reject_once`?`Deny once`:e===`reject_always`?`Always deny`:e===`missing_option`?`Missing JWC option`:e===`answer_error`?`Answer failed`:`Cancelled`}function be(e,t){return`${t}:${e.toolCallId||e.permissionAudit?.permissionId||`${e.role}:${e.text.slice(0,48)}`}`}function xe(e){return e?e.role===`tool`?e.toolStatus===`running`?44:64+Math.min(320,(e.toolOutput?.length??0)/5):e.role===`permission`?72:e.role===`thinking`?48+Math.min(180,e.text.length/8):56+Math.min(420,e.text.length/6):48}function Se(e,t,n){return(0,h.jsx)(`div`,{className:`code-message code-message-${e.role}`,children:e.role===`tool`?(()=>{let t=e.toolStatus??`done`,n=t===`failed`||t===`error`,r=n?J(e):``;return(0,h.jsxs)(`details`,{className:`code-tool-card code-tool-${t}`,open:t===`running`||n,children:[(0,h.jsxs)(`summary`,{className:`code-tool-summary`,children:[(0,h.jsx)(`span`,{className:`code-tool-chevron`,children:`>`}),(0,h.jsx)(`span`,{className:`code-tool-name`,children:Z(e)}),(0,h.jsx)(`span`,{className:`code-tool-status`,children:t})]}),r&&(0,h.jsx)(`div`,{className:`code-tool-error-snippet`,children:r}),(e.toolContent?.length??0)>0&&(0,h.jsx)(`div`,{className:`code-tool-content`,children:e.toolContent.map(q)}),e.toolOutput&&(0,h.jsxs)(`pre`,{className:`code-tool-output`,children:[e.toolOutput.slice(0,2e3),e.toolOutput.length>2e3?`...`:``]})]})})():e.role===`permission`&&e.permissionAudit?(()=>{let t=e.permissionAudit,n=t.decision.startsWith(`allow`)?`is-allow`:t.decision.startsWith(`reject`)?`is-deny`:``;return(0,h.jsxs)(`div`,{className:`code-permission-audit is-${t.decision} ${n}`.trim(),children:[(0,h.jsxs)(`div`,{className:`code-permission-audit-head`,children:[(0,h.jsx)(`span`,{children:`Permission`}),(0,h.jsx)(`strong`,{children:t.toolName}),(0,h.jsx)(`em`,{children:ye(t.decision)})]}),(0,h.jsxs)(`div`,{className:`code-permission-audit-meta`,children:[(0,h.jsxs)(`span`,{children:[`mode `,t.mode]}),(0,h.jsx)(`span`,{children:t.decisionMode}),t.optionId&&(0,h.jsx)(`span`,{children:t.optionId})]}),t.error&&(0,h.jsx)(`div`,{className:`code-permission-audit-error`,children:t.error})]})})():e.role===`thinking`?(0,h.jsxs)(`details`,{className:`code-thinking`,children:[(0,h.jsx)(`summary`,{className:`code-thinking-summary`,children:`Thinking...`}),(0,h.jsx)(`div`,{className:`code-thinking-text`,children:e.text})]}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:e.role===`user`?`You`:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text`,children:e.role===`assistant`?(0,h.jsx)(_e,{text:e.text,onOpenLocalFile:n}):e.text})]})},t)}function Ce(){return(0,h.jsxs)(`div`,{className:`code-message code-message-assistant`,children:[(0,h.jsx)(`span`,{className:`code-message-role`,children:`JWC`}),(0,h.jsx)(`div`,{className:`code-message-text code-streaming`,children:`Thinking...`})]})}function Q({messages:e,sending:t,workingDir:n,transcriptRef:r,onOpenLocalFile:i,sessionId:a}){let o=t&&e[e.length-1]?.role!==`assistant`,s=e.length+ +!!o,c=(0,f.useRef)(e);c.current=e;let l=(0,f.useCallback)(e=>{let t=c.current[e];return t?be(t,e):`sending-${e}`},[]),u=(0,f.useCallback)(e=>xe(c.current[e]),[]),d=fe({count:s,resetKey:a??null,scrollElementRef:r,getItemKey:l,estimateSize:u});function p(e){if(ve(e.target))return;let t=r.current;if(!t)return;let n=e.key.toLowerCase(),i=Math.max(160,Math.floor(t.clientHeight*.78));n===`d`||n===`j`||e.key===`PageDown`?(e.preventDefault(),t.scrollBy({top:i,behavior:`smooth`})):n===`u`||n===`k`||e.key===`PageUp`?(e.preventDefault(),t.scrollBy({top:-i,behavior:`smooth`})):e.key===`End`?(e.preventDefault(),t.scrollTo({top:t.scrollHeight,behavior:`smooth`})):e.key===`Home`&&(e.preventDefault(),t.scrollTo({top:0,behavior:`smooth`}))}return(0,h.jsx)(`div`,{className:`code-transcript`,ref:r,role:`log`,"aria-live":`polite`,tabIndex:0,onKeyDown:p,children:e.length===0?(0,h.jsxs)(`div`,{className:`code-transcript-empty`,children:[(0,h.jsx)(`p`,{children:`Start a Code session by typing a prompt below.`}),(0,h.jsxs)(`p`,{className:`code-transcript-cwd`,children:[`cwd: `,n||`not set`]})]}):(0,h.jsx)(`div`,{className:`code-transcript-virtual-spacer`,style:{height:`${d.totalSize}px`},children:d.virtualItems.map(t=>{let n=e[t.index];return(0,h.jsx)(`div`,{ref:d.measureElement,className:`code-transcript-virtual-row`,"data-code-transcript-idx":t.index,style:{transform:`translateY(${t.start}px)`},children:n?Se(n,t.index,i):Ce()},t.key)})})})}function we(e){return e.split(`/`).filter(Boolean).slice(-2).join(`/`)||e}function Te({workingDir:e,gitInfo:t,modelOptions:n,sessionTitle:r,usage:i,planEntries:a,onWorkingDirChange:o,cwdLocked:s=!1,workspaceFrozen:c=!1,onPickWorkingDir:l}){let[u,d]=(0,f.useState)(!1),[p,m]=(0,f.useState)(``),g=t?.status?.dirty,_=t?.worktrees.length??0,v=c||s,y=!!(!v&&l&&o);async function b(){if(y&&l){d(!0),m(``);try{let e=await l();e&&o?.(e)}catch(e){m(e instanceof Error?e.message:String(e))}finally{d(!1)}}}return(0,h.jsxs)(`div`,{className:`code-workspace-header`,children:[(0,h.jsxs)(`div`,{className:`code-workspace-primary`,children:[v?(0,h.jsx)(`span`,{className:`code-workspace-chip`,title:e,"aria-label":`Current Code workspace: ${e}`,children:we(e||`/tmp`)}):(0,h.jsxs)(`button`,{type:`button`,className:`code-workspace-picker`,disabled:!y||u,title:e||`Select Code workspace folder`,"aria-label":`Code workspace: ${e||`not set`}. Choose a folder.`,onClick:()=>void b(),children:[(0,h.jsx)(`span`,{className:`code-workspace-picker-label`,children:we(e||`/tmp`)}),(0,h.jsx)(`span`,{className:`code-workspace-picker-caret`,"aria-hidden":`true`,children:`▾`})]}),!v&&p&&(0,h.jsx)(`span`,{className:`code-workspace-cwd-error`,children:p}),t?.isRepo&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`span`,{className:`code-workspace-pill`,children:[t.branch??`detached`,t.head?` · ${t.head}`:``]}),(0,h.jsx)(`span`,{className:`code-workspace-pill ${g?`is-dirty`:``}`,children:g?`${t.status?.changed??0} changed · ${t.status?.untracked??0} untracked`:`clean`}),(0,h.jsxs)(`span`,{className:`code-workspace-pill`,title:t.currentWorktree?.path??void 0,children:[`worktree `,_]})]}),n?.degraded&&(0,h.jsx)(`span`,{className:`code-workspace-pill is-warning`,title:n.error,children:`provider fallback`})]}),(r||i.contextTokens!==void 0||a.length>0)&&(0,h.jsxs)(`div`,{className:`code-session-header`,children:[r&&(0,h.jsx)(`span`,{className:`code-session-title`,children:r}),i.contextTokens!==void 0&&i.contextLimit?(0,h.jsx)(`span`,{className:`code-context-meter`,title:`${i.contextTokens.toLocaleString()} / ${i.contextLimit.toLocaleString()} tokens${i.cost===void 0?``:` · $${i.cost.toFixed(4)}`}`,children:(0,h.jsx)(`span`,{className:`code-context-bar`,style:{width:`${Math.min(100,i.contextTokens/i.contextLimit*100)}%`}})}):null,a.length>0&&(0,h.jsx)(`div`,{className:`code-plan-entries`,children:a.map((e,t)=>(0,h.jsxs)(`span`,{className:`code-plan-entry code-plan-${e.status}`,children:[e.status===`completed`?`✓`:e.status===`in_progress`?`↻`:`○`,` `,e.title]},t))})]})]})}function Ee({label:e,value:t,options:n,disabled:r,title:i,className:a=``,onChange:o}){let s=(0,f.useId)(),c=(0,f.useRef)(null),[l,u]=(0,f.useState)(!1),d=n.find(e=>e.value===t)??n[0],p=Math.max(0,n.findIndex(e=>e.value===d?.value));(0,f.useEffect)(()=>{if(!l)return;let e=e=>{c.current?.contains(e.target)||u(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[l]);let m=e=>{o(e),u(!1)};return(0,h.jsxs)(`div`,{ref:c,className:`code-footer-menu ${a}`.trim(),children:[(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-menu-trigger`,disabled:r,title:i,"aria-label":e,"aria-haspopup":`listbox`,"aria-expanded":l,"aria-controls":s,onClick:()=>u(e=>!e),onKeyDown:e=>{if(!r){if(e.key===`Escape`){u(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1,r=n[(p+t+n.length)%n.length];r&&m(r.value);return}(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),u(e=>!e))}},children:[(0,h.jsx)(`span`,{className:`code-footer-label`,children:e}),(0,h.jsx)(`strong`,{children:d?.label??t}),(0,h.jsx)(`span`,{className:`code-footer-chevron`,"aria-hidden":`true`,children:`⌃`})]}),l&&(0,h.jsx)(`div`,{id:s,className:`code-footer-dropup`,role:`listbox`,"aria-label":e,children:n.map(e=>(0,h.jsxs)(`button`,{type:`button`,className:`code-footer-dropup-option${e.value===t?` is-selected`:``}`,role:`option`,"aria-selected":e.value===t,onClick:()=>m(e.value),children:[(0,h.jsxs)(`span`,{children:[(0,h.jsx)(`strong`,{children:e.label}),e.detail&&(0,h.jsx)(`small`,{children:e.detail})]}),e.value===t&&(0,h.jsx)(`em`,{"aria-hidden":`true`,children:`✓`})]},e.value))})]})}function De({provider:e,providerOptions:t,model:n,modelOptions:r,effort:i,effortOptions:a,permissionMode:o,disabled:s,onProviderChange:c,onModelChange:l,onEffortChange:u,onPermissionModeChange:d}){return(0,h.jsxs)(`div`,{className:`code-composer-footer`,children:[(0,h.jsx)(Ee,{label:`Permission`,value:o,options:S,disabled:s,title:C[o],onChange:d}),t.length>0&&(0,h.jsx)(Ee,{label:`Provider`,value:e,options:t.map(e=>({value:e,label:e})),disabled:s,title:e,onChange:c}),(0,h.jsx)(Ee,{label:`Model`,value:n,options:r.map(e=>({value:e,label:e})),disabled:s,title:n,className:`code-footer-field-model`,onChange:l}),a.length>0&&(0,h.jsx)(Ee,{label:`Effort`,value:i,options:a.map(e=>({value:e,label:e})),disabled:s,title:i,onChange:u})]})}function Oe(e){return(0,h.jsxs)(`div`,{className:`code-canvas-main`,children:[(0,h.jsx)(Te,{gitInfo:e.gitInfo,modelOptions:e.modelOptions,sessionTitle:e.sessionTitle,usage:e.usage,planEntries:e.planEntries,workingDir:e.codeWorkingDir,cwdLocked:!!e.activeSessionId,onWorkingDirChange:e.onWorkingDirChange,workspaceFrozen:e.workspaceFrozen,onPickWorkingDir:e.onPickWorkingDir}),e.childRecovery&&(0,h.jsxs)(`section`,{className:`code-child-recovery`,role:`status`,"aria-live":`polite`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`span`,{children:`JWC child recovery`}),(0,h.jsxs)(`strong`,{children:[`ACP child exited: `,e.childRecovery.code]})]}),(0,h.jsx)(`p`,{children:e.childRecovery.message})]}),e.transportState!==`connected`&&(0,h.jsx)(`section`,{className:`code-transport-status is-${e.transportState}`,role:`status`,"aria-live":`polite`,children:e.transportState===`reconnecting`?`Live updates reconnecting…`:`Live updates disconnected — retrying.`}),(0,h.jsx)(Q,{messages:e.messages,sending:e.sending,workingDir:e.codeWorkingDir,transcriptRef:e.transcriptRef,onOpenLocalFile:e.onOpenLocalFile,sessionId:e.activeSessionId}),(0,h.jsx)(W,{permissions:e.permissions,onAnswer:e.onPermissionAnswer}),(0,h.jsx)(`div`,{className:`code-composer-dock`,children:(0,h.jsxs)(`div`,{className:`code-composer-surface`,"aria-label":`Code composer controls`,children:[(0,h.jsx)(le,{inputText:e.inputText,sending:e.sending,showCommands:e.showCommands,availableCommands:e.availableCommands,onInputChange:e.onInputChange,onCommandSelect:e.onCommandSelect,onSubmit:e.onSubmit,onShowCommandsChange:e.onShowCommandsChange}),(0,h.jsx)(De,{provider:e.provider,providerOptions:e.providerOptions,model:e.model,modelOptions:e.currentModelOptions,effort:e.effort,effortOptions:e.currentEffortOptions,permissionMode:e.permissionMode,disabled:e.disabled,onProviderChange:e.onFooterProviderChange,onModelChange:e.onModelChange,onEffortChange:e.onEffortChange,onPermissionModeChange:e.onPermissionModeChange})]})}),e.activePopup&&(0,h.jsx)(se,{popupKind:e.activePopup.kind,command:e.activePopup.command,modelOptions:e.modelOptions,provider:e.provider,model:e.model,modelAssignments:e.modelAssignments,modelPresets:e.modelPresets,permissionMode:e.permissionMode,disabled:e.disabled,activeSessionId:e.activeSessionId,error:e.error,onClose:e.onClosePopup,onRefreshProviders:e.onRefreshProviders,onProviderChange:e.onProviderChange,onUseModel:e.onUseModel,onUseForNewSessions:e.onUseForNewSessions,onSetDefaultModel:e.onSetDefaultModel,onSetModelAssignment:e.onSetModelAssignment,onClearModelAssignment:e.onClearModelAssignment,onPermissionModeChange:e.onPermissionModeChange})]})}var ke={providers:[{id:`anthropic`,models:[`claude-sonnet-4-6`,`claude-opus-5`,`claude-opus-4-8`,`claude-opus-4-7`,`claude-opus-4-6`,`claude-haiku-4-5`,`claude-fable-5`],efforts:[`off`,`min`,`low`,`medium`,`high`,`xhigh`]}],defaultProvider:`anthropic`,defaultModel:`claude-sonnet-4-6`,degraded:!0},Ae=re([{name:`/model`,description:`Choose provider, model, roles, thinking, profiles, and MRU state.`,source:`cli-jaw`},{name:`/provider`,description:`Review authenticated JWC providers.`,source:`cli-jaw`},{name:`/settings`,description:`Adjust Code mode session controls.`,source:`cli-jaw`}]);function je(e){let t=new Set,n=[];for(let r of[...e,...Ae])t.has(r.name)||(t.add(r.name),n.push(r));return n}function Me(e,t,n,r){if(r.appendMessage(A(n,{mode:t,decision:`pending`,decisionMode:t===`ask`?`pending`:`automatic`})),t===`ask`){r.enqueuePermission(n);return}let i=t===`always-allow`?`allow_always`:`reject_always`,a=O(n.options,i);if(!a){r.appendMessage(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${i} was not provided by JWC for this request.`})),r.enqueuePermission(n);return}(async()=>{try{await e.answerPermission(n.permissionId,a.optionId),r.appendMessage(A(n,{mode:t,decision:i,decisionMode:`automatic`,optionId:a.optionId,optionLabel:a.label}))}catch(e){r.appendMessage(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}})()}async function Ne(e,t,n,r,i){let a=O(n.options,r);if(!a)return i(A(n,{mode:t,decision:`missing_option`,decisionMode:`system`,error:`${r} was not provided by JWC for this request.`})),!1;try{await e.answerPermission(n.permissionId,a.optionId),i(A(n,{mode:t,decision:r,decisionMode:`manual`,optionId:a.optionId,optionLabel:a.label}))}catch(e){i(A(n,{mode:t,decision:`answer_error`,decisionMode:`system`,optionId:a.optionId,optionLabel:a.label,error:e instanceof Error?e.message:String(e)}))}return!0}function Pe(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t.toString(36)}var Fe=2e3,Ie=new Set([`code_user_message_chunk`,`code_agent_message_chunk`,`code_agent_thought_chunk`]);function Le(e){let t=e?.content;return String(t?.text??e?.text??``)}function $(e){let t=e?.messageId;return typeof t==`string`?t.trim():``}function Re(e,t){if(!Ie.has(e.event)||!t)return null;let n=$(e.update??{}),r=typeof e.sseEventId==`string`&&e.sseEventId.trim()?e.sseEventId.trim():``,i=n?`msg:${n}`:r?`sse:${r}`:``;return i?`${e.sessionId??``}:${e.event}:${i}:${t.length}:${Pe(t)}`:null}function ze(e,t){for(let n of t){let r=Re(n,Le(n.update));r&&u(e,r,Math.max(Fe,t.length))}}function Be(e,t,n){let r=Re(t,n);return r?e.has(r)?!0:(u(e,r,Fe),!1):!1}function Ve(e,t){let n=e.trim(),r=t.trim();return r.length<80?!1:n===r}var He=80,Ue=.7,We=.78,Ge=32,Ke=8;function qe(e){return e.replace(/\s+/g,` `).trim()}function Je(e){return e.split(/\r?\n/).map(e=>e.replace(/\s+/g,` `).trim()).filter(e=>e.length>=4)}function Ye(e,t){if(e.length===0)return 0;let n=0;for(let r of e)t.has(r)&&(n+=1);return n/e.length}function Xe(e){let t=qe(e);if(t.length<Ge)return[];let n=[];for(let e=0;e<=t.length-Ge;e+=Ke)n.push(t.slice(e,e+Ge));return n}function Ze(e,t){let n=qe(e),r=qe(t);if(n.length<He||r.length<He)return!1;if(r.includes(n))return!0;let i=Je(e),a=new Set(Je(t));if(i.length>=4&&Ye(i,a)>=Ue)return!0;let o=Xe(n);return o.length<3?!1:Ye(o,new Set(Xe(r)))>=We}function Qe(e,t){return!e||!t?`append`:e===t?`drop`:t.startsWith(e)?`replace`:e.startsWith(t)?`drop`:t.length>=e.length&&Ze(e,t)?`replace`:e.length>t.length&&Ze(t,e)?`drop`:`append`}function $e(e){let t=e.toLowerCase();return t===`failed`||t===`error`||t===`errored`?`failed`:t===`completed`||t===`done`||t===`success`?`done`:`running`}function et(e){let t=[];for(let n of e){let e=n.update??{};if(n.event===`code_user_message_chunk`){let n=e.content,r=String(n?.text??e.text??``),i=$(e);r&&t.push({role:`user`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_message_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];if(a?.role===`assistant`){let e=Qe(a.text,r);if(a.messageId&&i&&a.messageId!==i){if(e===`replace`){a.text=r,a.messageId=i;continue}t.push({role:`assistant`,text:r,messageId:i});continue}if(e===`drop`)continue;a.text=e===`replace`?r:a.text+r,i&&!a.messageId&&(a.messageId=i)}else t.push({role:`assistant`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_agent_thought_chunk`){let n=e.content,r=String(n?.text??e.text??``);if(!r)continue;let i=$(e),a=t[t.length-1];a?.role===`thinking`&&(!a.messageId||!i||a.messageId===i)?(a.text+=r,i&&!a.messageId&&(a.messageId=i)):t.push({role:`thinking`,text:r,...i?{messageId:i}:{}})}else if(n.event===`code_tool_call`){let n=String(e.title??e.toolName??`tool`),r=String(e.toolCallId??``),i=String(e.status??`pending`),a=te(e);t.push({role:`tool`,text:n,toolName:n,toolCallId:r,toolContent:a,toolStatus:$e(i)})}else if(n.event===`code_tool_call_update`){let n=String(e.toolCallId??``),r=String(e.status??``),i=te(e),a=_(t,n);if(a<0)continue;let o={...t[a]};r&&(o.toolStatus=$e(r)),i.length>0&&(o.toolContent=i),t[a]=o}}return t}function tt(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return t===`input`||t===`textarea`||t===`select`||e.isContentEditable}function nt(e,t,n){let r=(0,f.useRef)(null),i=(0,f.useMemo)(()=>{let t=e[e.length-1];if(!t)return`empty`;let n=t.toolContent?.reduce((e,t)=>{let n=t;return e+(n.text?.length??0)+(n.diff?.length??0)+(n.output?.length??0)},0)??0;return`${e.length}:${t.role}:${t.text.length}:${t.toolOutput?.length??0}:${n}:${t.toolStatus??``}`},[e]),a=(0,f.useRef)(null),o=(0,f.useRef)(null);(0,f.useEffect)(()=>()=>{a.current!==null&&cancelAnimationFrame(a.current),o.current!==null&&window.clearTimeout(o.current)},[]);let s=(0,f.useCallback)((e=`smooth`)=>{a.current===null&&(a.current=window.requestAnimationFrame(()=>{a.current=null;let t=r.current;t&&(t.scrollTo({top:t.scrollHeight,behavior:e}),o.current!==null&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>{o.current=null;let e=r.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`auto`})},80))}))},[]),c=(0,f.useCallback)((e,t=`smooth`)=>{window.requestAnimationFrame(()=>{let n=r.current;n&&n.scrollBy({top:e,behavior:t})})},[]),l=(0,f.useCallback)((e=`smooth`)=>{window.requestAnimationFrame(()=>{let t=r.current;t&&t.scrollTo({top:0,behavior:e})})},[]);return(0,f.useEffect)(()=>{s(e.length>1?`smooth`:`auto`)},[i,e.length,t,s]),(0,f.useEffect)(()=>{let e=e=>{if(e.defaultPrevented||n||e.metaKey||e.ctrlKey||e.altKey||tt(e.target))return;let t=r.current;if(!t)return;let i=e.key.toLowerCase(),a=Math.max(160,Math.floor(t.clientHeight*.78));i===`d`||i===`j`||e.key===`PageDown`?(e.preventDefault(),c(a)):i===`u`||i===`k`||e.key===`PageUp`?(e.preventDefault(),c(-a)):e.key===`End`?(e.preventDefault(),s(`smooth`)):e.key===`Home`&&(e.preventDefault(),l(`smooth`))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,c,s,l]),{transcriptRef:r,scrollTranscriptToBottom:s}}function rt(e){return typeof window<`u`&&window.location.port===String(e)?`${window.location.origin}/api/events`:`http://127.0.0.1:${e}/api/events`}function it({port:e,sessionId:t,sessionIdRef:n,onEvent:r,onTransport:i}){let a=(0,f.useRef)(r);a.current=r;let o=(0,f.useRef)(i);o.current=i;let s=(0,f.useRef)(t);s.current=t,(0,f.useEffect)(()=>{if(!e)return;let t=new EventSource(rt(e));return t.onopen=()=>{o.current?.(`connected`)},t.onmessage=e=>{try{let t={...JSON.parse(e.data),sseEventId:e.lastEventId||void 0};if(t.topic!==`jwc`)return;let r=t.event===`code_child_exit`,i=n?.current??s.current;if(!i&&!r||!r&&t.sessionId&&t.sessionId!==i)return;a.current(t)}catch{}},t.onerror=()=>{o.current?.(t.readyState===EventSource.CLOSED?`disconnected`:`reconnecting`)},()=>t.close()},[e])}function at({port:e,workingDir:t,onWorkingDirChange:n,onOpenLocalFile:r}){let i=(0,f.useMemo)(()=>m(e),[e]),[a,o]=(0,f.useState)(t),[s,c]=(0,f.useState)(null),[l,u]=(0,f.useState)(!1),[y,b]=(0,f.useState)(``),[x,S]=(0,f.useState)(!1),[C,w]=(0,f.useState)([]),[T,E]=(0,f.useState)([]),[D,O]=(0,f.useState)(Ae),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)(null),[ee,N]=(0,f.useState)(``),[P,F]=(0,f.useState)(``),[I,L]=(0,f.useState)({}),[ne,R]=(0,f.useState)([]),[z,B]=(0,f.useState)(`anthropic`),[V,ie]=(0,f.useState)(`claude-sonnet-4-6`),[ae,oe]=(0,f.useState)(`high`),[H,se]=(0,f.useState)(`always-allow`),[U,ce]=(0,f.useState)(ke),[le,W]=(0,f.useState)(null),[ue,de]=(0,f.useState)(null),[fe,G]=(0,f.useState)(null),[pe,K]=(0,f.useState)(null),[me,he]=(0,f.useState)(`connected`),[ge,_e]=(0,f.useState)(null),q=(0,f.useRef)(null),ve=(0,f.useRef)(!1),J=(0,f.useRef)(null),Y=(0,f.useRef)(null),X=(0,f.useRef)(new Set),Z=(0,f.useRef)(new Set),ye=(0,f.useMemo)(()=>V?v(z,V):``,[z,V]),{transcriptRef:be,scrollTranscriptToBottom:xe}=nt(C,x,!!j);(0,f.useEffect)(()=>{q.current||s||o(t)},[s,t]);let Se=(0,f.useCallback)(e=>{q.current||s||l||(o(e??``),n?.(e))},[s,n,l]),Ce=(0,f.useCallback)(async()=>{let e=d();if(e?.folder?.pickFolder){let t=await e.folder.pickFolder();if(t.ok&&t.path)return t.path;if(t.error&&t.error!==`cancelled`)throw Error(t.error);return null}let t=await i.pickWorkspace();return t.ok&&t.path?t.path:null},[i]),Q=(0,f.useCallback)(e=>{ce(e);let t=e.providers.find(t=>t.id===e.defaultProvider)??e.providers[0],n=t?.models.includes(e.defaultModel)?e.defaultModel:t?.models[0]??``;B(t?.id??`anthropic`),ie(n);let r=t?.efforts??[];r.length>0&&oe(r.includes(`high`)?`high`:r[0]??``)},[]);(0,f.useEffect)(()=>{q.current=s},[s]),(0,f.useEffect)(()=>{if(typeof document>`u`){_e(null);return}return _e(document.getElementById(`code-session-sidebar-host`)),()=>_e(null)},[]);let we=(0,f.useCallback)(async()=>{let e=await i.listModelOptions();Q(e)},[Q,i]),Te=(0,f.useCallback)(async()=>{let e=await i.listModelAssignments();W(e)},[i]);(0,f.useEffect)(()=>{let e=!1;return(async()=>{try{let[t,n,r]=await Promise.all([i.listModelOptions(),i.listModelAssignments(),i.listModelPresets()]);if(e)return;Q(t),W(n),de(r)}catch(t){e||(ce({...ke,error:t instanceof Error?t.message:String(t)}),W(null),de(null))}})(),()=>{e=!0}},[Q,i]),(0,f.useEffect)(()=>{if(!a){G(null);return}let e=!1;return i.getGitInfo(a).then(t=>{e||G(t)},()=>{e||G(null)}),()=>{e=!0}},[i,a]),(0,f.useEffect)(()=>{if(ve.current){ve.current=!1;return}c(null),q.current=null,w([]),E([]),R([]),F(``),L({}),S(!1),K(null),Z.current=new Set},[a]),it({port:e,sessionId:s,sessionIdRef:q,onEvent:(0,f.useCallback)(e=>{let t=e.update??{},n=e.event;if(!(Y.current&&e.sessionId===Y.current&&n!==`code_child_exit`)){if(n===`code_agent_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(X.current.has(n)&&e[e.length-1]?.role===`user`)return X.current.delete(n),e;let t=e[e.length-1];if(t?.role===`assistant`&&Ve(t.text,n))return e;if(t?.role===`assistant`){let i=Qe(t.text,n);if(t.messageId&&r&&t.messageId!==r)return i===`replace`?[...e.slice(0,-1),{...t,text:n,messageId:r}]:[...e,{role:`assistant`,text:n,messageId:r}];if(i===`drop`)return e;let a=i===`replace`?n:t.text+n;return[...e.slice(0,-1),{...t,text:a,...r&&!t.messageId?{messageId:r}:{}}]}return[...e,{role:`assistant`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_user_message_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{if(J.current===n){let t=-1;for(let r=e.length-1;r>=0;--r){let i=e[r];if(i?.role===`user`&&i.text===n&&i.transient===`pending-user-echo`){t=r;break}}if(t>=0){J.current=null;let i=[...e];return i[t]={role:`user`,text:n,...r?{messageId:r}:{}},i}}return[...e,{role:`user`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_agent_thought_chunk`){let n=Le(t);if(!n)return;let r=$(t);if(Be(Z.current,e,n))return;w(e=>{let t=e[e.length-1];return t?.role===`thinking`&&(!t.messageId||!r||t.messageId===r)?[...e.slice(0,-1),{...t,text:t.text+n,...r&&!t.messageId?{messageId:r}:{}}]:[...e,{role:`thinking`,text:n,...r?{messageId:r}:{}}]})}else if(n===`code_tool_call`){let e=String(t.title??t.toolName??`tool`),n=String(t.toolCallId??``),r=String(t.status??`pending`),i=te(t);w(t=>[...t,{role:`tool`,text:e,toolName:e,toolCallId:n,toolContent:i,toolStatus:$e(r)}])}else if(n===`code_tool_call_update`){let e=String(t.toolCallId??``),n=String(t.status??``),r=te(t);w(t=>{let i=_(t,e);if(i<0)return t;let a=[...t],o={...a[i]};return n&&(o.toolStatus=$e(n)),r.length>0&&(o.toolContent=r),a[i]=o,a})}else if(n===`code_permission_request`){let t=String(e.permissionId??``),n=e.toolCall??{},r=e.options??[];t&&Me(i,H,{permissionId:t,toolCall:n,options:r},{appendMessage:e=>w(t=>[...t,e]),enqueuePermission:e=>{E(t=>[...t,e]),xe(`smooth`)}})}else if(n===`code_session_info_update`){let e=t.title;typeof e==`string`&&F(e)}else if(n===`code_usage_update`){let e={};typeof t.contextTokens==`number`&&(e.contextTokens=t.contextTokens),typeof t.contextLimit==`number`&&(e.contextLimit=t.contextLimit),typeof t.totalCost==`number`&&(e.cost=t.totalCost),L(e)}else if(n===`code_plan`){let e=t.entries??[];R(e.filter(e=>e.title).map(e=>({title:String(e.title),status:String(e.status??`pending`)}))),xe(`smooth`)}else if(n===`code_available_commands_update`)O(je(re(t.availableCommands)));else if(n===`code_child_exit`){let t=e.code===null||e.code===void 0?`unknown`:String(e.code),n=`JWC ACP child exited (code ${t}). Active Code sessions were closed. Send the prompt again to start a fresh session, or load a stored session from the sidebar.`;q.current=null,c(null),S(!1),E([]),K({code:t,message:n}),w(e=>[...e,{role:`assistant`,text:n}])}else n===`code_turn_done`?S(!1):n===`code_session_error`&&(w(t=>[...t,{role:`assistant`,text:`Error: ${e.reason??`unknown`}`}]),S(!1))}},[i,H,xe]),onTransport:he});let Ee=(0,f.useCallback)(async()=>{let e=y.trim();if(e&&!x){Y.current=null,S(!0),u(!0),K(null),J.current=e,w(t=>[...t,{role:`user`,text:e,transient:`pending-user-echo`}]),b(``);try{let t=s;if(!t){let e=a||`/tmp`;t=(await i.createSession(e,ye||void 0)).sessionId,q.current=t,c(t)}await i.sendPrompt(t,e)}catch(e){J.current=null,w(t=>[...t,{role:`assistant`,text:`Error: ${e instanceof Error?e.message:String(e)}`}]),S(!1)}}},[y,x,s,i,a,ye]),De=(0,f.useCallback)(e=>{b(e),A(e===`/`||e.startsWith(`/`)&&!e.includes(` `))},[]),Pe=(0,f.useCallback)(e=>{if(!e.disabledReason){if(e.actionType===`popup`&&e.popupKind){N(``),M({kind:e.popupKind,command:e}),A(!1);return}b(`${e.displayName} `),A(!1)}},[]),Fe=(0,f.useCallback)(async(e,t)=>{await Ne(i,H,e,t,e=>w(t=>[...t,e]))&&E(t=>t.filter(t=>t.permissionId!==e.permissionId))},[i,H]),Ie=(0,f.useCallback)(async(e,t,n)=>{N(``),B(e),ie(t);let r=n?.closePopup??!0,a=n?.requireActiveSession??!0;if(!s){a&&N(`Start or load a Code session before applying a live model.`);return}try{await i.setSessionModel(s,v(e,t)),r&&M(null)}catch(e){N(e instanceof Error?e.message:String(e))}},[s,i]),Re=(0,f.useCallback)(async(e,t)=>{N(``);try{let n=await i.setDefaultModel(v(e,t));Q(n),Te()}catch(e){N(e instanceof Error?e.message:String(e))}},[Q,i,Te]),He=(0,f.useCallback)(async(e,t,n,r)=>{N(``);try{let a=await i.setModelAssignment(e,{provider:t,model:n,...r===void 0?{}:{thinkingLevel:r}});W(a)}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),Ue=(0,f.useCallback)(async e=>{N(``);try{let t=await i.clearModelAssignment(e);W(t)}catch(e){N(e instanceof Error?e.message:String(e))}},[i]),We=U.providers.find(e=>e.id===z)??U.providers[0],Ge=U.providers.map(e=>e.id),Ke=We?.models??[],qe=We?.efforts??[],Je=e=>{let t=et(e.replayEvents??[]);Z.current=new Set,ze(Z.current,e.replayEvents??[]),X.current=new Set(t.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),q.current=e.sessionId,c(e.sessionId),e.cwd!==a&&(ve.current=!0,o(e.cwd)),w(t),E([]),R([]),F(e.title?.trim()||t.find(e=>e.role===`user`)?.text.split(/\r?\n/)[0]?.replace(/\s+/g,` `).trim()||``),L({}),S(!1),K(null)};if(!e)return(0,h.jsx)(`div`,{className:`code-canvas`,children:(0,h.jsx)(`div`,{className:`code-transcript-empty`,children:(0,h.jsx)(`p`,{children:`Server not available.`})})});let Ye=(0,h.jsx)(g,{client:i,activeSessionId:s,workingDir:a,onSelectSession:Je,onLoadSession:(e,t)=>{(async()=>{Y.current=e,q.current=e,c(e),J.current=null,X.current=new Set,Z.current=new Set,w([]),R([]),F(``),S(!1);try{let n=await i.loadSession(e,t);if(q.current!==e)return;n.title&&F(n.title);let r=et(n.replayEvents??[]);Z.current=new Set,ze(Z.current,n.replayEvents??[]),X.current=new Set(r.filter(e=>e.role===`assistant`&&e.text).map(e=>e.text)),w(r),S(!1)}catch(t){q.current===e&&(q.current=null,c(null)),w(e=>[...e,{role:`assistant`,text:`Failed to load session: ${t instanceof Error?t.message:String(t)}`}])}finally{Y.current===e&&(Y.current=null)}})()},onNewSession:()=>{q.current=null,Y.current=null,J.current=null,X.current=new Set,Z.current=new Set,c(null),w([]),R([]),F(``),S(!1),u(!1)}}),Xe=e=>{B(e);let t=U.providers.find(t=>t.id===e)?.models[0]??``;ie(t)},Ze=(0,h.jsx)(Oe,{activePopup:j,activeSessionId:s,availableCommands:D,codeWorkingDir:a,currentEffortOptions:qe,currentModelOptions:Ke,disabled:x,effort:ae,gitInfo:fe,childRecovery:pe,transportState:me,inputText:y,messages:C,model:V,modelAssignments:le,modelOptions:U,modelPresets:ue,permissionMode:H,permissions:T,planEntries:ne,error:ee,provider:z,providerOptions:Ge,sending:x,sessionTitle:P,showCommands:k,transcriptRef:be,usage:I,onClearModelAssignment:Ue,onClosePopup:()=>{N(``),M(null)},onCommandSelect:Pe,onEffortChange:e=>{oe(e),s&&i.setSessionConfig(s,`thinking`,e)},onFooterProviderChange:e=>{Xe(e);let t=U.providers.find(t=>t.id===e),n=t?.models[0]??``,r=t?.efforts.includes(`high`)?`high`:t?.efforts[0]??``;oe(r),n&&Ie(e,n,{closePopup:!1,requireActiveSession:!1})},onInputChange:De,onModelChange:e=>{Ie(z,e,{closePopup:!1,requireActiveSession:!1})},onPermissionAnswer:Fe,onPermissionModeChange:se,onProviderChange:Xe,onRefreshProviders:()=>{we()},onSetDefaultModel:Re,onSetModelAssignment:He,onShowCommandsChange:A,onSubmit:()=>{Ee()},onUseModel:Ie,onUseForNewSessions:(e,t)=>{Ie(e,t,{requireActiveSession:!1,closePopup:!1}),M(null)},onWorkingDirChange:Se,onOpenLocalFile:r,workspaceFrozen:l,onPickWorkingDir:Ce});return ge?(0,h.jsxs)(h.Fragment,{children:[(0,p.createPortal)((0,h.jsx)(`div`,{className:`code-manager-session-navigator-content`,children:Ye}),ge),(0,h.jsx)(`div`,{className:`code-canvas code-canvas-workbench`,children:Ze})]}):(0,h.jsxs)(`div`,{className:`code-canvas`,children:[(0,h.jsx)(`div`,{className:`code-canvas-sidebar`,children:Ye}),Ze]})}export{at as CodeCanvas};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";var r=e(t(),1),i=n(),a=`/api/dashboard/memory`,o=[`provider`,`apikey`,`test`,`indexing`,`active`],s={provider:`Provider`,apikey:`API Key`,test:`Test connection`,indexing:`Indexing`,active:`Active`},c=[{value:``,label:`(select)`},{value:`openai`,label:`OpenAI`},{value:`gemini`,label:`Gemini`},{value:`voyage`,label:`Voyage AI`},{value:`vertex`,label:`Vertex AI`},{value:`local`,label:`Local (Ollama)`}],l=[{value:`hybrid`,label:`Hybrid (FTS5 + Embedding)`},{value:`embedding`,label:`Embedding only`},{value:`fts5`,label:`FTS5 only (no vectors)`}],u={openai:{model:`text-embedding-3-small`,dimensions:1536},gemini:{model:`gemini-embedding-001`,dimensions:768},voyage:{model:`voyage-3-lite`,dimensions:512},vertex:{model:`text-embedding-005`,dimensions:768},local:{model:`nomic-embed-text`,dimensions:768}};async function d(e,t){let n=await fetch(`${a}${e}`,{credentials:`same-origin`,headers:{"Content-Type":`application/json`},...t});if(!n.ok)throw Error(`HTTP ${n.status}`);return n.json()}function f(e,t,n){return e?.provider?e.provider!==`local`&&!e.apiKey&&!e.apiKeyPresent?`apikey`:t?.state===`ACTIVE_HYBRID`||t?.state===`ACTIVE_EMBEDDING`?`active`:t?.state===`INDEXING`?`indexing`:n?!t?.active&&(t?.indexedChunks??0)<(t?.totalChunks??1)?`indexing`:`active`:`test`:`provider`}function p({current:e}){let t=o.indexOf(e);return(0,i.jsx)(`div`,{className:`embed-stepper`,role:`list`,children:o.map((e,n)=>{let r=n<t,a=n===t;return(0,i.jsxs)(`div`,{className:r?`embed-step is-done`:a?`embed-step is-active`:`embed-step`,role:`listitem`,"aria-current":a?`step`:void 0,children:[(0,i.jsx)(`span`,{className:`embed-step-badge`,children:r?`✓`:n+1}),(0,i.jsx)(`span`,{className:`embed-step-label`,children:s[e]})]},e)})})}function m(){let[e,t]=(0,r.useState)(null),[n,o]=(0,r.useState)(null),[s,m]=(0,r.useState)(null),[h,g]=(0,r.useState)(!0),[_,v]=(0,r.useState)(``),[y,b]=(0,r.useState)(``),[x,S]=(0,r.useState)(1536),[C,w]=(0,r.useState)(``),[T,E]=(0,r.useState)(`hybrid`),[D,O]=(0,r.useState)(``),[k,A]=(0,r.useState)(null),[j,M]=(0,r.useState)(``),[N,P]=(0,r.useState)(!1),[F,I]=(0,r.useState)(!1),[L,R]=(0,r.useState)({done:0,total:0}),[z,B]=(0,r.useState)(null),V=(0,r.useRef)(null),H=(0,r.useCallback)(async()=>{try{let[e,n,r]=await Promise.all([d(`/embed-config`),d(`/embed-state`),d(`/embed-estimate`)]);t(e.config),o(n.status);let{ok:i,...a}=r;m(a)}catch{B(`Failed to load embedding state`)}finally{g(!1)}},[]);(0,r.useEffect)(()=>{H()},[H]),(0,r.useEffect)(()=>{e&&(v(e.provider||``),b(e.model||u[e.provider||``]?.model||``),S(e.dimensions??u[e.provider||``]?.dimensions??1536),w(e.apiKey||``),E(e.searchMode||`hybrid`),O(e.baseUrl||``))},[e]);let U=f(e,n,k),W=(0,r.useCallback)(async e=>{P(!0),B(null);try{await d(`/embed-config`,{method:`POST`,body:JSON.stringify(e)}),await H()}catch(e){B(e instanceof Error?e.message:String(e))}finally{P(!1)}},[H]),G=(0,r.useCallback)(()=>{if(!_)return;A(null),M(``);let e={provider:_,model:y,dimensions:x,searchMode:T};D&&(e.baseUrl=D),W(e)},[_,y,x,T,D,W]),K=(0,r.useCallback)(()=>{W({apiKey:C})},[C,W]),q=(0,r.useCallback)(async()=>{A(null),M(`Testing...`),B(null);try{let e={provider:_,model:y,dimensions:x,test:!0};C.trim()&&(e.apiKey=C.trim());let t=await d(`/embed-config`,{method:`POST`,body:JSON.stringify(e)});t.testResult===`ok`?(A(!0),M(`Connection successful`)):(A(!1),M(t.testError||`Connection failed`))}catch(e){A(!1),M(e instanceof Error?e.message:String(e))}},[_,y,x,C]),J=(0,r.useCallback)(async()=>{I(!0),R({done:0,total:0}),B(null);let e=new AbortController;V.current=e;try{let t=await fetch(`${a}/reindex-stream`,{signal:e.signal,credentials:`same-origin`});if(!t.ok||!t.body)throw Error(`HTTP ${t.status}`);let n=t.body.getReader(),r=new TextDecoder,i=``;for(;;){let{done:e,value:t}=await n.read();if(e)break;i+=r.decode(t,{stream:!0});let a=i.split(`
|
|
2
2
|
`);i=a.pop()||``;for(let e of a)if(e.startsWith(`data: `))try{let t=JSON.parse(e.slice(6));if(t.complete){I(!1),await H();return}if(t.error){B(String(t.error)),I(!1);return}typeof t.done==`number`&&R({done:t.done,total:t.total||0})}catch{}}I(!1),await H()}catch(e){e.name!==`AbortError`&&B(e instanceof Error?e.message:String(e)),I(!1)}},[H]);if((0,r.useEffect)(()=>()=>V.current?.abort(),[]),h)return(0,i.jsx)(`p`,{className:`dashboard-settings-row-description`,children:`Loading...`});let Y=n?.state===`NEEDS_REINDEX`,X=n?.state===`ACTIVE_HYBRID`||n?.state===`ACTIVE_EMBEDDING`;return(0,i.jsxs)(`div`,{className:`dashboard-embed-section`,children:[(0,i.jsx)(p,{current:U}),(0,i.jsxs)(`fieldset`,{className:`dashboard-embed-fieldset`,children:[(0,i.jsx)(`legend`,{children:`Provider`}),(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-provider`,children:`Provider`}),(0,i.jsx)(`select`,{id:`embed-provider`,value:_,onChange:e=>{let t=e.target.value;v(t),A(null);let n=u[t];n&&(b(n.model),S(n.dimensions))},children:c.map(e=>(0,i.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-search-mode`,children:`Search mode`}),(0,i.jsx)(`select`,{id:`embed-search-mode`,value:T,onChange:e=>E(e.target.value),children:l.map(e=>(0,i.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-model`,children:`Model`}),(0,i.jsx)(`input`,{id:`embed-model`,type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:u[_]?.model||`model name`})]}),(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-dimensions`,children:`Dimensions`}),(0,i.jsx)(`input`,{id:`embed-dimensions`,type:`number`,min:64,max:4096,value:x,onChange:e=>S(Number(e.target.value)||1536)})]}),(_===`local`||_===`vertex`)&&(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-base-url`,children:_===`vertex`?`Project ID / Region`:`Base URL`}),(0,i.jsx)(`input`,{id:`embed-base-url`,type:`text`,value:D,onChange:e=>O(e.target.value),placeholder:_===`local`?`http://localhost:11434`:`project-id/us-central1`})]}),(0,i.jsx)(`button`,{type:`button`,className:`dashboard-embed-btn`,disabled:!_||N,onClick:G,children:N?`Saving...`:`Save provider`})]}),(0,i.jsxs)(`fieldset`,{className:`dashboard-embed-fieldset`,children:[(0,i.jsx)(`legend`,{children:`API Key`}),_===`local`?(0,i.jsx)(`p`,{className:`dashboard-settings-row-description`,children:`Local provider uses Ollama — no API key needed.`}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(`div`,{className:`dashboard-embed-field`,children:[(0,i.jsx)(`label`,{htmlFor:`embed-api-key`,children:`API Key`}),(0,i.jsx)(`input`,{id:`embed-api-key`,type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`sk-...`,disabled:!_})]}),(0,i.jsx)(`button`,{type:`button`,className:`dashboard-embed-btn`,disabled:!C||N,onClick:K,children:`Save key`})]})]}),(0,i.jsxs)(`fieldset`,{className:`dashboard-embed-fieldset`,children:[(0,i.jsx)(`legend`,{children:`Connection test`}),(0,i.jsx)(`button`,{type:`button`,className:`dashboard-embed-btn`,disabled:!_||!C&&!e?.apiKeyPresent&&_!==`local`,onClick:()=>void q(),children:`Test connection`}),j&&(0,i.jsxs)(`p`,{className:k?`dashboard-embed-ok`:`dashboard-embed-err`,role:`status`,children:[k?`✓ `:`✗ `,j]})]}),(0,i.jsxs)(`fieldset`,{className:`dashboard-embed-fieldset`,children:[(0,i.jsxs)(`legend`,{children:[`Indexing`,s&&(0,i.jsxs)(`small`,{children:[` — `,s.totalChunks,` chunks · ~`,s.batches,` batches · ~`,Math.ceil(s.estimatedSeconds),`s · $`,s.estimatedCost.toFixed(4)]})]}),F?(0,i.jsxs)(`div`,{className:`embed-progress`,children:[(0,i.jsx)(`div`,{className:`embed-progress-bar`,children:(0,i.jsx)(`div`,{className:`embed-progress-fill`,style:{width:L.total>0?`${Math.round(L.done/L.total*100)}%`:`0%`}})}),(0,i.jsxs)(`span`,{className:`dashboard-settings-row-description`,children:[L.done,`/`,L.total,` batches`]})]}):(0,i.jsx)(`button`,{type:`button`,className:`dashboard-embed-btn`,disabled:!k&&!X&&!Y,onClick:()=>void J(),children:Y?`Re-index (provider changed)`:X?`Re-index`:`Start indexing`})]}),(0,i.jsxs)(`fieldset`,{className:`dashboard-embed-fieldset`,children:[(0,i.jsx)(`legend`,{children:`Status`}),n?(0,i.jsxs)(`dl`,{className:`embed-status-grid`,children:[(0,i.jsx)(`dt`,{children:`State`}),(0,i.jsx)(`dd`,{children:(0,i.jsx)(`code`,{children:n.state})}),(0,i.jsx)(`dt`,{children:`Mode`}),(0,i.jsx)(`dd`,{children:n.mode}),(0,i.jsx)(`dt`,{children:`Provider`}),(0,i.jsxs)(`dd`,{children:[n.provider||`-`,` / `,n.model||`-`]}),(0,i.jsx)(`dt`,{children:`Indexed`}),(0,i.jsxs)(`dd`,{children:[n.indexedChunks,` chunks`]}),(0,i.jsx)(`dt`,{children:`DB size`}),(0,i.jsx)(`dd`,{children:n.dbSizeBytes>0?`${(n.dbSizeBytes/1024/1024).toFixed(1)} MB`:`-`}),(0,i.jsx)(`dt`,{children:`Last sync`}),(0,i.jsx)(`dd`,{children:n.lastSyncAt||`never`}),(0,i.jsx)(`dt`,{children:`Fallback`}),(0,i.jsx)(`dd`,{children:n.fallback?`Yes (${n.reason})`:`No`})]}):(0,i.jsx)(`p`,{className:`dashboard-settings-row-description`,children:`No state available`})]}),z&&(0,i.jsx)(`p`,{className:`dashboard-embed-err`,role:`alert`,children:z})]})}export{m as DashboardEmbeddingSection};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-
|
|
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,t as o}from"./page-shell-Bs0RBRoD.js";import{a as s,s as c}from"./fields-CSdFjOgg.js";var l=e(t(),1),u=n();function d(){return{async get(e){let t=await fetch(e);if(!t.ok)throw Error(`GET ${e} → ${t.status}`);return await t.json()},async patch(e,t){let n=await fetch(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error(`PATCH ${e} → ${n.status}`);return await n.json()}}}var f=[`meta.label`,`meta.group`,`meta.favorite`,`meta.hidden`,`meta.notes`];function p(e,t){let n=e?.registry?.instances?.[String(t)];return{label:n?.label??null,favorite:n?.favorite===!0,group:n?.group??null,hidden:n?.hidden===!0,notes:n?.notes??null}}function m(e){return{label:e.label||``,group:e.group||``,favorite:e.favorite,hidden:e.hidden,notes:e.notes||``}}function h({port:e,client:t,dirty:n,registerSave:h,managerClient:g}){let{state:_,refresh:v,setData:y}=r(t,`__dashboard_meta_unused__`,[e]),[b,x]=(0,l.useState)(null),[S,C]=(0,l.useState)(null),[w,T]=(0,l.useState)({label:``,group:``,favorite:!1,hidden:!1,notes:``}),E=g||d();(0,l.useEffect)(()=>{let t=!1;return C(null),E.get(`/api/dashboard/registry`).then(n=>{t||(x(n),T(m(p(n,e))))}).catch(e=>{t||C(e instanceof Error?e.message:String(e))}),()=>{t=!0}},[e]),(0,l.useEffect)(()=>()=>{for(let e of f)n.remove(e)},[n]);let D=p(b,e),O=(0,l.useCallback)((e,t)=>n.set(e,t),[n]),k=(0,l.useCallback)(async()=>{let t=w.label.trim()||null,r=w.group.trim()||null,i=w.notes.trim()||null,a={instances:{[String(e)]:{label:t,group:r,favorite:w.favorite,hidden:w.hidden,notes:i}}},o=await E.patch(`/api/dashboard/registry`,a);x(o),T(m(p(o,e)));for(let e of f)n.remove(e)},[w,E,n,e]);return(0,l.useEffect)(()=>{if(h)return h(k),()=>h(null)},[h,k]),S?(0,u.jsx)(o,{message:S}):b?(0,u.jsx)(`form`,{className:`settings-page-form settings-form`,onSubmit:e=>{e.preventDefault(),k()},children:(0,u.jsxs)(i,{title:`Dashboard meta`,hint:`Manager-side metadata for this instance. Stored in the dashboard registry.`,children:[(0,u.jsx)(c,{id:`dashmeta-label`,label:`Label`,value:w.label,placeholder:`(unset — falls back to home folder name)`,onChange:e=>{T({...w,label:e}),O(`meta.label`,{value:e,original:D.label||``,valid:!0})}}),(0,u.jsx)(c,{id:`dashmeta-group`,label:`Group`,value:w.group,placeholder:`e.g. work, personal`,onChange:e=>{T({...w,group:e}),O(`meta.group`,{value:e,original:D.group||``,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-favorite`,label:`Pin favorite`,value:w.favorite,onChange:e=>{T({...w,favorite:e}),O(`meta.favorite`,{value:e,original:D.favorite,valid:!0})}}),(0,u.jsx)(s,{id:`dashmeta-hidden`,label:`Hide by default`,description:`Hide from the default instance list.`,value:w.hidden,onChange:e=>{T({...w,hidden:e}),O(`meta.hidden`,{value:e,original:D.hidden,valid:!0})}}),(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`dashmeta-notes`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Notes`}),(0,u.jsx)(`textarea`,{id:`dashmeta-notes`,rows:4,value:w.notes,placeholder:`Free-form notes only the dashboard remembers.`,onChange:e=>{let t=e.target.value;T({...w,notes:t}),O(`meta.notes`,{value:t,original:D.notes||``,valid:!0})}})]})]})}):(0,u.jsx)(a,{label:`Loading dashboard registry…`})}var g={readInstance:p,toDraft:m,META_KEYS:f};export{g as __test__,h as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{T as r}from"./api-B9RiiOMM.js";import{t as i}from"./desktop-bridge-DbRfkg8l.js";import{i as a}from"./PanelLayoutProvider-BFxal5fZ.js";var o=e(t(),1),s=`/api/dashboard/design`,c=class extends Error{constructor(e){super(`design store unavailable (${e})`),this.name=`DesignApiUnavailableError`}};async function l(e,t){let n=await fetch(`${s}${e}`,t);if(n.status===404||n.status===501)throw new c(n.status);let r=await n.json().catch(()=>null);if(!n.ok||r===null)throw Error(r?.error??`design api failed: ${n.status}`);return r}async function u(e){return(await l(`/pages${e?`?project=${encodeURIComponent(e)}`:``}`)).pages??[]}async function d(e){let t=await l(`/pages`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.page)throw Error(`create failed`);return t.page}async function f(e){let t=await l(`/pages/${encodeURIComponent(e)}/local-paths`);if(!t.paths)throw Error(`paths unavailable`);return t.paths}async function p(e,t){return l(`/pages/${encodeURIComponent(e)}/export`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t?{target:t}:{})})}async function m(e,t=`manual`){let n=await l(`/pages/${encodeURIComponent(e)}/snapshots`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:t})});if(!n.snapshot)throw Error(`snapshot failed`);return n.snapshot}async function h(){return(await l(`/version`)).version??0}function g(e,t){let n=typeof t==`number`?`?rev=${t}`:``;return`${s}/pages/${encodeURIComponent(e)}/preview${n}`}var _=n();function v(e){return(0,_.jsxs)(`select`,{className:`design-page-selector`,"aria-label":`Design pages (${e.pages.length})`,title:`${e.pages.length} pages`,disabled:e.disabled||e.pages.length===0,value:e.selectedPageId??``,onChange:t=>e.onSelect(t.target.value||null),children:[e.pages.length===0&&(0,_.jsx)(`option`,{value:``,children:`No pages`}),e.pages.map(e=>(0,_.jsx)(`option`,{value:e.id,children:e.title},e.id))]})}function y(e){if(!e.previewUrl)return(0,_.jsx)(`div`,{className:`design-viewport design-viewport-empty`,children:(0,_.jsx)(`span`,{children:e.emptyMessage})});let t=e.zoom>0?e.zoom:1;return(0,_.jsx)(`div`,{className:`design-viewport`,children:(0,_.jsx)(`iframe`,{className:`design-viewport-frame`,title:`Design preview`,src:e.previewUrl,sandbox:``,style:t===1?void 0:{transform:`scale(${t})`,transformOrigin:`0 0`,width:`${100/t}%`,height:`${100/t}%`}})})}var b=[.5,.75,1,1.25,1.5];function x(e){let{dispatch:t}=a(),n=e.tab.id,s=e.tab.design??{},l=s.zoom&&s.zoom>0?s.zoom:1,[x,S]=(0,o.useState)({kind:`loading`}),[C,w]=(0,o.useState)(null),[T,E]=(0,o.useState)(!1),[D,O]=(0,o.useState)(``);(0,o.useEffect)(()=>{(s.projectKey===void 0||s.projectKey===null)&&t({type:`SET_DESIGN_TAB_STATE`,tabId:n,patch:{projectKey:e.primaryProjectDir}})},[]);let k=s.projectKey??e.primaryProjectDir??null,A=(0,o.useCallback)(async()=>{S({kind:`loading`});try{let e=await u(k);S({kind:`ready`,pages:e})}catch(e){e instanceof c?S({kind:`unavailable`}):S({kind:`error`,message:e.message})}},[k]);(0,o.useEffect)(()=>{A()},[A]),(0,o.useEffect)(()=>{let e=!1,t=-1,n=window.setInterval(()=>{h().then(n=>{e||(t!==-1&&n!==t&&A(),t=n)}).catch(()=>{})},3e3);return()=>{e=!0,window.clearInterval(n)}},[A]);let j=(0,o.useCallback)(()=>{let e=D.trim();e&&(w(`Creating page...`),d({title:e,projectKey:k}).then(e=>(E(!1),O(``),w(`Created ${e.title}`),t({type:`SET_DESIGN_TAB_STATE`,tabId:n,patch:{pageId:e.id}}),A())).catch(e=>w(e.message)))},[t,D,k,A,n]),M=x.kind===`ready`?x.pages:[],N=M.find(e=>e.id===s.pageId)??M[0]??null;(0,o.useEffect)(()=>{let e=N?.id??null;x.kind===`ready`&&e!==(s.pageId??null)&&t({type:`SET_DESIGN_TAB_STATE`,tabId:n,patch:{pageId:e}})},[s.pageId,t,N?.id,x.kind,n]),(0,o.useEffect)(()=>{N&&t({type:`SET_RIGHT_SIDEBAR_TAB_META`,tabId:n,patch:{specificName:N.title,sourceLabel:N.id}})},[t,N,n]);let P=(0,o.useCallback)(e=>{t({type:`SET_DESIGN_TAB_STATE`,tabId:n,patch:{pageId:e}})},[t,n]),F=(0,o.useCallback)(()=>{if(N){if(e.selectedInstancePort==null){w(`Select an instance before running a design generation.`);return}w(`Queueing design run...`),m(N.id,`before`).then(()=>f(N.id)).then(t=>r(e.selectedInstancePort,[`Design run request`,``,`Page: ${N.title} (${N.id})`,`Page directory (your ONLY write target for this run): ${t.pageDir}`,`Artifact: ${t.artifactPath}`,`Brief: ${t.promptPath} — read it first; it holds the page requirements.`,``,"Update artifact.html in place (direct file write or `jaw design files ... write --stdin`).",`Write allowlist inside the page directory: artifact.html, prompt.md, page.json, assets/*.`,`Preview is CSP-locked (script-src 'none'): produce STATIC self-contained HTML/CSS — no <script>, no external CDN references; inline styles/SVG only.`,`A before-snapshot was already taken; restore points live under the page snapshots/ directory.`,`Do not write anywhere else; the user reviews the result live in the Manager Design tab.`,`If the design skill is active, follow its "Design run request" agent contract.`].join(`
|
|
2
|
+
`))).then(t=>{w(t.ok?`Design run queued on instance ${e.selectedInstancePort}.`:`Run enqueue failed (${t.status}).`)}).catch(e=>w(e.message))}},[e.selectedInstancePort,N]),I=(0,o.useCallback)(()=>{N&&e.onOpenInBrowser&&e.onOpenInBrowser(`${window.location.origin}${g(N.id,N.revision)}`)},[e,N]),L=(0,o.useCallback)(()=>{N&&f(N.id).then(e=>i()?.folder?.revealPath?.(e.pageDir)).catch(e=>w(e.message))},[N]),R=(0,o.useCallback)(()=>{N&&(w(`Exporting...`),p(N.id).then(e=>{w(`Exported to ${e.exportedTo}`),t({type:`FOCUS_OR_CREATE_FIRST_RIGHT_SIDEBAR_TAB`,kind:`diff`})}).catch(e=>w(e.message)))},[t,N]),z=(0,o.useCallback)(()=>{let e=b[(b.indexOf(l)+1)%b.length]??1;t({type:`SET_DESIGN_TAB_STATE`,tabId:n,patch:{zoom:e}})},[t,n,l]),B=N?g(N.id,N.revision):null,V=x.kind===`loading`?`Loading design pages...`:x.kind===`unavailable`?`Design store unavailable — update and restart the manager server (Phase 2 backend).`:x.kind===`error`?`Design store error: ${x.message}`:"No design pages yet. Create one with `jaw design create` or an agent run.";return(0,_.jsxs)(`div`,{className:`design-panel`,children:[(0,_.jsxs)(`div`,{className:`design-toolbar`,children:[(0,_.jsxs)(`div`,{className:`design-toolbar-group`,children:[(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Reveal page directory`,"aria-label":`Reveal page directory`,disabled:!N,onClick:L,children:`Reveal`}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Export to project`,"aria-label":`Export to project`,disabled:!N,onClick:R,children:`Export`}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Reload from disk`,"aria-label":`Reload from disk`,onClick:()=>void A(),children:`Reload`})]}),(0,_.jsx)(v,{pages:M,selectedPageId:N?.id??null,disabled:x.kind!==`ready`,onSelect:P}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`New design page`,"aria-label":`New design page`,disabled:x.kind!==`ready`,onClick:()=>E(e=>!e),children:`+`}),(0,_.jsxs)(`div`,{className:`design-toolbar-group`,children:[(0,_.jsxs)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Cycle zoom`,"aria-label":`Zoom ${Math.round(l*100)}%`,onClick:z,children:[Math.round(l*100),`%`]}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Run: queue a design generation on the selected instance`,"aria-label":`Run design generation`,disabled:!N,onClick:F,children:`Run`}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,title:`Open preview in a Browser tab`,"aria-label":`Open in Browser`,disabled:!N||!e.onOpenInBrowser,onClick:I,children:`Browser`})]})]}),T&&(0,_.jsxs)(`div`,{className:`design-create-row`,children:[(0,_.jsx)(`input`,{className:`design-create-input`,type:`text`,value:D,placeholder:`New page title...`,"aria-label":`New page title`,onChange:e=>O(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j(),e.key===`Escape`&&E(!1)}}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,disabled:!D.trim(),onClick:j,children:`Create`}),(0,_.jsx)(`button`,{type:`button`,className:`design-toolbar-btn`,onClick:()=>E(!1),children:`Cancel`})]}),C&&(0,_.jsxs)(`div`,{className:`design-status`,role:`status`,children:[(0,_.jsx)(`span`,{className:`design-status-text`,children:C}),(0,_.jsx)(`button`,{type:`button`,className:`design-status-dismiss`,"aria-label":`Dismiss`,onClick:()=>w(null),children:`×`})]}),(0,_.jsx)(y,{previewUrl:B,zoom:l,emptyMessage:V})]})}export{x as DesignPanel};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{t as r}from"./desktop-bridge-DbRfkg8l.js";var i=e(t(),1);async function a(e,t){let n=await e();return n.ok?n:t()}function o(e,t){return e?{getRepoRoot:n=>a(()=>e.getRepoRoot(n),()=>t.getRepoRoot(n)),getRepoCandidates:n=>a(()=>e.getRepoCandidates(n),()=>t.getRepoCandidates(n)),getScmSnapshot:(n,r)=>a(()=>e.getScmSnapshot(n,r),()=>t.getScmSnapshot(n,r)),runScmOperation:(n,r)=>a(()=>e.runScmOperation(n,r),()=>t.runScmOperation(n,r)),getDiffSummary:(n,r)=>a(()=>e.getDiffSummary(n,r),()=>t.getDiffSummary(n,r)),getFileDiff:(n,r,i)=>a(()=>e.getFileDiff(n,r,i),()=>t.getFileDiff(n,r,i))}:t}async function s(e,t){let n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>null);return!n.ok||!r?{ok:!1,error:r?.error??`request failed: ${n.status}`}:r}function c(e,t){return{selectedInstancePort:e?.port??null,settings:{diffRootPolicy:t.diffRootPolicy,diffPinnedRootByPort:t.diffPinnedRootByPort,diffRecentRepoRoots:t.diffRecentRepoRoots}}}function l(e,t){return{getRepoRoot:async()=>({ok:!1,error:`Repository root resolution is server-derived in web mode`}),getRepoCandidates:async n=>s(`/api/dashboard/git/repo-candidates`,c(e,t)),getScmSnapshot:async(n,r)=>s(`/api/dashboard/git/scm-snapshot`,{...c(e,t),repoRoot:n,options:r}),runScmOperation:async(n,r)=>s(`/api/dashboard/git/scm-operation`,{...c(e,t),repoRoot:n,operation:r}),getDiffSummary:async(n,r)=>s(`/api/dashboard/git/diff-summary`,{...c(e,t),repoRoot:n,options:r}),getFileDiff:async(n,r,i)=>s(`/api/dashboard/git/file-diff`,{...c(e,t),repoRoot:n,filePath:r,options:i})}}function u(e,t,n){let r=n.path.trim();r&&!t.has(r)&&(t.add(r),e.push({...n,path:r}))}function d(e,t,n){let r=[],i=new Set,a=e?.port==null?null:String(e.port),o=a?n.diffPinnedRootByPort[a]:null,s=e?.projectDirs?.filter(Boolean)??[],c=e?.workingDir??null;n.diffRootPolicy===`manual`&&o&&u(r,i,{path:o,label:`Pinned root`,source:`pinned`});let l=s.map((e,t)=>({path:e,label:t===0?`Project root`:`Project root ${t+1}`,source:`project`})),d=c?[{path:c,label:`Working dir`,source:`working-dir`}]:[],f=n.diffRootPolicy===`working-dir-first`?[...d,...l]:[...l,...d];for(let e of f)u(r,i,e);return n.diffRootPolicy!==`manual`&&o&&u(r,i,{path:o,label:`Pinned root`,source:`pinned`}),n.diffRecentRepoRoots.forEach((e,t)=>{u(r,i,{path:e,label:t===0?`Recent repo`:`Recent repo ${t+1}`,source:`recent`})}),t&&u(r,i,{path:t,label:`Home fallback`,source:`home`}),r}var f=n(),p=[`unstaged`,`staged`,`head`,`base`],m=8;function h(e){return e.startsWith(`@@`)?`diff-line-hunk`:e.startsWith(`diff `)||e.startsWith(`index `)||e.startsWith(`--- `)||e.startsWith(`+++ `)?`diff-line-meta`:e.startsWith(`+`)?`diff-line-add`:e.startsWith(`-`)?`diff-line-del`:``}function g(e){return e?e.split(`
|
|
2
2
|
`).map((e,t)=>{let n=h(e);return(0,f.jsxs)(`span`,{className:`diff-line${n?` ${n}`:``}`,children:[e,`
|
|
3
|
-
`]},t)}):null}function ee(){return r()?.diff??null}function _(e){let t={mode:e.diffDefaultMode,includeUntracked:e.diffIncludeUntracked};return e.diffDefaultMode===`base`&&(t.ref=e.diffBaseRef.trim()||`HEAD`),t}function v(e){let t=e.branch??e.head??`detached`;return`${e.label}: ${e.root} (${t}${e.dirty?`, dirty`:``})`}function y(e,t){return[t,...e.filter(e=>e!==t)].slice(0,m)}function b(e){return{path:e,label:`Picked repo`,source:`recent`}}function x(e){return{path:e,label:`Folder root`,source:`recent`}}function S(e){return e.replace(/\/+$/,``)}function C(e,t){let n=S(e),r=S(t);return n===r||n.startsWith(`${r}/`)}function w(e,t){return!e||!t?null:t.startsWith(`/`)?t:`${S(e)}/${t.replace(/^\/+/,``)}`}function T(e,t){if(!e||!t||!t.startsWith(`/`))return null;let n=S(e),r=S(t);return r===n||!r.startsWith(`${n}/`)?null:r.slice(n.length+1)}function E(e,t){if(t){let n=e.find(e=>C(t,e.root))?.root??null;if(n)return n}return e[0]?.root??null}function D(e,t){if(!e)return t.length>0?[{id:`changes`,label:`Changes`,files:t}]:[];let n=new Map(t.map(e=>[e.path,e]));return e.groups.map(e=>({id:e.id,label:`${e.label} (${e.files.length})`,...e.id===`staged`?{action:`unstage`}:e.id===`changes`||e.id===`untracked`?{action:`stage`}:{},files:e.files.map(e=>{let t=n.get(e.repoRelativePath);return{path:e.repoRelativePath,status:e.kind,insertions:t?.insertions??0,deletions:t?.deletions??0,conflict:e.conflict,staged:e.staged,unstaged:e.unstaged}})})).filter(e=>e.files.length>0)}function O(e){let t=e.repoRootPath??null,n=e.repoRootMode??`instance`,a=e.folderRootPath??null,s=e.onRepoRootChange,c=ee(),u=(0,i.useMemo)(()=>o(c,l(e.selectedInstance,e.settings)),[c,e.selectedInstance,e.settings]),[m,h]=(0,i.useState)([]),[S,C]=(0,i.useState)(null),[O,k]=(0,i.useState)([]),[A,j]=(0,i.useState)(null),[M,N]=(0,i.useState)(null),[P,F]=(0,i.useState)(``),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(null),[B,V]=(0,i.useState)(!1),H=`${e.selectedInstance?.port??`none`}:${e.selectedInstance?.workingDir??``}:${e.selectedInstance?.projectDirs?.join(`\0`)??``}`,U=(0,i.useMemo)(()=>_(e.settings),[e.settings.diffDefaultMode,e.settings.diffBaseRef,e.settings.diffIncludeUntracked]),W=m.find(e=>e.root===S)??null,G=(0,i.useCallback)(async()=>{if(!u)return;let i=r()?.getHomePath?.()||`/tmp`,o=d(e.selectedInstance,i,{diffRootPolicy:e.settings.diffRootPolicy,diffPinnedRootByPort:e.settings.diffPinnedRootByPort,diffRecentRepoRoots:e.settings.diffRecentRepoRoots});a&&o.unshift(x(a));let c=await u.getRepoCandidates(o);if(!c.ok){L(c.error??`Failed to resolve git repositories`);return}let l=c.candidates??[];h(l),C(e=>{let r=t&&l.some(e=>e.root===t)?t:null,i=e&&l.some(t=>t.root===e)?e:null,o=n===`manual`?r??i??l[0]?.root??null:r??E(l,a);return n!==`manual`&&o!==t&&s?.(o,`instance`),o}),l.length===0?(n!==`manual`&&s?.(null,`instance`),L(`No git repository found from the selected instance roots.`)):L(null)},[u,H,a,s,e.selectedInstance,e.settings.diffRootPolicy,e.settings.diffPinnedRootByPort,e.settings.diffRecentRepoRoots,t,n]);(0,i.useEffect)(()=>{if(t!==S){if(t&&m.some(e=>e.root===t)){C(t);return}t===null&&C(null)}},[t,m,S]);let K=(0,i.useCallback)(async()=>{if(!u||!S)return;let[t,n]=await Promise.all([u.getDiffSummary(S,U),u.getScmSnapshot(S,{includeUntracked:e.settings.diffIncludeUntracked})]);t.ok&&t.files?(k(t.files),N(e=>e&&t.files?.some(t=>t.path===e)?e:t.files?.[0]?.path??null),j(n.ok?n.snapshot??null:null),L(null)):(k([]),j(null),N(null),L(t.error??`Failed to get diff summary`))},[u,U,e.settings.diffIncludeUntracked,S]);(0,i.useEffect)(()=>{G()},[G]),(0,i.useEffect)(()=>{K()},[K]),(0,i.useEffect)(()=>{let t=T(S,e.selectedFilePath??null)
|
|
3
|
+
`]},t)}):null}function ee(){return r()?.diff??null}function _(e){let t={mode:e.diffDefaultMode,includeUntracked:e.diffIncludeUntracked};return e.diffDefaultMode===`base`&&(t.ref=e.diffBaseRef.trim()||`HEAD`),t}function v(e){let t=e.branch??e.head??`detached`;return`${e.label}: ${e.root} (${t}${e.dirty?`, dirty`:``})`}function y(e,t){return[t,...e.filter(e=>e!==t)].slice(0,m)}function b(e){return{path:e,label:`Picked repo`,source:`recent`}}function x(e){return{path:e,label:`Folder root`,source:`recent`}}function S(e){return e.replace(/\/+$/,``)}function C(e,t){let n=S(e),r=S(t);return n===r||n.startsWith(`${r}/`)}function w(e,t){return!e||!t?null:t.startsWith(`/`)?t:`${S(e)}/${t.replace(/^\/+/,``)}`}function T(e,t){if(!e||!t||!t.startsWith(`/`))return null;let n=S(e),r=S(t);return r===n||!r.startsWith(`${n}/`)?null:r.slice(n.length+1)}function E(e,t){if(t){let n=e.find(e=>C(t,e.root))?.root??null;if(n)return n}return e[0]?.root??null}function D(e,t){if(!e)return t.length>0?[{id:`changes`,label:`Changes`,files:t}]:[];let n=new Map(t.map(e=>[e.path,e]));return e.groups.map(e=>({id:e.id,label:`${e.label} (${e.files.length})`,...e.id===`staged`?{action:`unstage`}:e.id===`changes`||e.id===`untracked`?{action:`stage`}:{},files:e.files.map(e=>{let t=n.get(e.repoRelativePath);return{path:e.repoRelativePath,status:e.kind,insertions:t?.insertions??0,deletions:t?.deletions??0,conflict:e.conflict,staged:e.staged,unstaged:e.unstaged}})})).filter(e=>e.files.length>0)}function O(e){let t=e.repoRootPath??null,n=e.repoRootMode??`instance`,a=e.folderRootPath??null,s=e.onRepoRootChange,c=ee(),u=(0,i.useMemo)(()=>o(c,l(e.selectedInstance,e.settings)),[c,e.selectedInstance,e.settings]),[m,h]=(0,i.useState)([]),[S,C]=(0,i.useState)(null),[O,k]=(0,i.useState)([]),[A,j]=(0,i.useState)(null),[M,N]=(0,i.useState)(null),[P,F]=(0,i.useState)(``),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(null),[B,V]=(0,i.useState)(!1),H=`${e.selectedInstance?.port??`none`}:${e.selectedInstance?.workingDir??``}:${e.selectedInstance?.projectDirs?.join(`\0`)??``}`,U=(0,i.useMemo)(()=>_(e.settings),[e.settings.diffDefaultMode,e.settings.diffBaseRef,e.settings.diffIncludeUntracked]),W=m.find(e=>e.root===S)??null,G=(0,i.useCallback)(async()=>{if(!u)return;let i=r()?.getHomePath?.()||`/tmp`,o=d(e.selectedInstance,i,{diffRootPolicy:e.settings.diffRootPolicy,diffPinnedRootByPort:e.settings.diffPinnedRootByPort,diffRecentRepoRoots:e.settings.diffRecentRepoRoots});a&&o.unshift(x(a));let c=await u.getRepoCandidates(o);if(!c.ok){L(c.error??`Failed to resolve git repositories`);return}let l=c.candidates??[];h(l),C(e=>{let r=t&&l.some(e=>e.root===t)?t:null,i=e&&l.some(t=>t.root===e)?e:null,o=n===`manual`?r??i??l[0]?.root??null:r??E(l,a);return n!==`manual`&&o!==t&&s?.(o,`instance`),o}),l.length===0?(n!==`manual`&&s?.(null,`instance`),L(`No git repository found from the selected instance roots.`)):L(null)},[u,H,a,s,e.selectedInstance,e.settings.diffRootPolicy,e.settings.diffPinnedRootByPort,e.settings.diffRecentRepoRoots,t,n]);(0,i.useEffect)(()=>{if(t!==S){if(t&&m.some(e=>e.root===t)){C(t);return}t===null&&C(null)}},[t,m,S]);let K=(0,i.useCallback)(async()=>{if(!u||!S)return;let[t,n]=await Promise.all([u.getDiffSummary(S,U),u.getScmSnapshot(S,{includeUntracked:e.settings.diffIncludeUntracked})]);t.ok&&t.files?(k(t.files),N(e=>e&&t.files?.some(t=>t.path===e)?e:t.files?.[0]?.path??null),j(n.ok?n.snapshot??null:null),L(null)):(k([]),j(null),N(null),L(t.error??`Failed to get diff summary`))},[u,U,e.settings.diffIncludeUntracked,S]);(0,i.useEffect)(()=>{G()},[G]),(0,i.useEffect)(()=>{K()},[K]),(0,i.useEffect)(()=>{let t=T(S,e.selectedFilePath??null);t&&t!==M&&O.some(e=>e.path===t)&&N(t)},[O,S,e.selectedFilePath,M]),(0,i.useEffect)(()=>{if(!u||!S||!M){F(``);return}(async()=>{let e=await u.getFileDiff(S,M,U);e.ok&&e.diff!==void 0?F(e.diff||`No textual diff for this file.`):F(`Error: ${e.error??`unknown`}`)})()},[u,U,S,M]);function q(t,n,r=`manual`){C(t),N(null),s?.(t,r);let i=e.selectedInstance?.port,a={};i!=null&&(a.diffPinnedRootByPort={...e.settings.diffPinnedRootByPort,[String(i)]:t}),n&&(a.diffRecentRepoRoots=n),Object.keys(a).length>0&&e.onSettingsPatch?.(a)}function J(){let t=E(m,a);C(t),N(null),e.onFollowInstanceRepoRoot?.(t);let n=e.selectedInstance?.port;if(n==null)return;let r={...e.settings.diffPinnedRootByPort};delete r[String(n)],e.onSettingsPatch?.({diffPinnedRootByPort:r})}function Y(t){N(t);let n=w(S,t);n&&e.onPreviewFile?.(n)}function X(t){e.onSettingsPatch?.({diffDefaultMode:t})}let Z=(0,i.useMemo)(()=>D(A,O),[O,A]);async function Q(t){if(!u||!S)return;z(t.kind===`stage`?`Staging...`:`Unstaging...`);let n=await u.runScmOperation(S,t);if(!n.ok){z(n.error??`Git operation failed`);return}n.result?.snapshot&&j(n.result.snapshot),z(t.kind===`stage`?`Staged`:`Unstaged`),await K(),e.onGitRefresh?.()}function $(e){return e===`stage`?`Stage`:`Unstage`}async function te(){let t=r()?.folder;if(!t?.pickFolder){L(`Choose Repository is available in the Electron app.`);return}if(!u){L(`Diff bridge is unavailable.`);return}V(!0);try{let n=await t.pickFolder();if(!n.ok||!n.path){n.error&&n.error!==`cancelled`&&L(n.error);return}let r=await u.getRepoCandidates([b(n.path)]);if(!r.ok){L(r.error??`Failed to validate selected repository`);return}let i=r.candidates?.[0]??null;if(!i){L(`Selected folder is not a git repository.`);return}let a=y(e.settings.diffRecentRepoRoots,i.root);h(e=>e.some(e=>e.root===i.root)?e.map(e=>e.root===i.root?i:e):[i,...e]),L(null),q(i.root,a,`manual`)}finally{V(!1)}}return(0,f.jsxs)(`div`,{className:`diff-panel`,children:[(0,f.jsxs)(`div`,{className:`diff-toolbar`,children:[(0,f.jsxs)(`select`,{className:`diff-root-select`,value:S??``,"aria-label":`Git repository root`,onChange:e=>q(e.currentTarget.value,void 0,`manual`),children:[m.map(e=>(0,f.jsx)(`option`,{value:e.root,children:v(e)},e.root)),m.length===0&&(0,f.jsx)(`option`,{value:``,children:`No repo`})]}),(0,f.jsx)(`span`,{className:`diff-head-chip`,children:W?.branch??W?.head??`no repo`}),(0,f.jsx)(`button`,{type:`button`,className:`diff-pick-repo`,onClick:()=>void te(),disabled:B,children:B?`Choosing...`:`Choose Repository`}),(0,f.jsx)(`button`,{type:`button`,className:`diff-follow-instance`,onClick:J,disabled:n!==`manual`,children:`Follow Instance`}),(0,f.jsx)(`button`,{type:`button`,className:`diff-refresh`,onClick:()=>void G(),children:`Refresh`})]}),(0,f.jsxs)(`div`,{className:`diff-toolbar diff-options`,children:[(0,f.jsx)(`div`,{className:`diff-mode-group`,"aria-label":`Diff mode`,children:p.map(t=>(0,f.jsx)(`button`,{type:`button`,className:`diff-mode-button${e.settings.diffDefaultMode===t?` is-active`:``}`,"aria-pressed":e.settings.diffDefaultMode===t,onClick:()=>X(t),children:t===`head`?`HEAD`:t===`base`?`Base`:t},t))}),(0,f.jsx)(`input`,{className:`diff-ref-input`,type:`text`,value:e.settings.diffBaseRef,"aria-label":`Base ref`,disabled:e.settings.diffDefaultMode!==`base`,onChange:t=>e.onSettingsPatch?.({diffBaseRef:t.currentTarget.value})}),(0,f.jsxs)(`label`,{className:`diff-untracked-toggle`,children:[(0,f.jsx)(`input`,{type:`checkbox`,checked:e.settings.diffIncludeUntracked,onChange:t=>e.onSettingsPatch?.({diffIncludeUntracked:t.currentTarget.checked})}),(0,f.jsx)(`span`,{children:`untracked`})]})]}),I&&(0,f.jsx)(`div`,{className:`diff-error`,children:I}),R&&(0,f.jsx)(`div`,{className:`diff-action-status`,role:`status`,"aria-live":`polite`,children:R}),(0,f.jsxs)(`div`,{className:`diff-body`,children:[(0,f.jsxs)(`div`,{className:`diff-file-list`,children:[Z.map(e=>(0,f.jsxs)(`div`,{className:`diff-file-group`,children:[(0,f.jsxs)(`div`,{className:`diff-file-group-heading`,children:[(0,f.jsx)(`span`,{children:e.label}),e.action&&(0,f.jsxs)(`button`,{type:`button`,className:`diff-scm-action`,onClick:()=>void Q({kind:e.action,paths:e.files.map(e=>e.path)}),children:[$(e.action),` All`]})]}),e.files.map(t=>(0,f.jsxs)(`div`,{className:`diff-file-item ${t.path===M?`is-selected`:``} diff-status-${t.status}${t.conflict?` is-conflict`:``}`,children:[(0,f.jsxs)(`button`,{type:`button`,className:`diff-file-select`,onClick:()=>Y(t.path),children:[(0,f.jsx)(`span`,{className:`diff-file-name`,children:t.path}),(0,f.jsxs)(`span`,{className:`diff-file-stats`,children:[t.insertions>0&&(0,f.jsxs)(`span`,{className:`diff-ins`,children:[`+`,t.insertions]}),t.deletions>0&&(0,f.jsxs)(`span`,{className:`diff-del`,children:[`-`,t.deletions]}),t.status===`untracked`&&(0,f.jsx)(`span`,{className:`diff-ins`,children:`new`})]})]}),e.action&&(0,f.jsx)(`button`,{type:`button`,className:`diff-scm-inline-action`,onClick:()=>{Q({kind:e.action,paths:[t.path]})},"aria-label":`${$(e.action)} ${t.path}`,children:e.action===`stage`?`+`:`-`})]},`${e.id}:${t.path}`))]},e.id)),Z.length===0&&!I&&(0,f.jsx)(`div`,{className:`diff-empty`,children:`No changes`})]}),(0,f.jsx)(`div`,{className:`diff-content`,children:(0,f.jsx)(`pre`,{className:`diff-pre`,children:g(P)})})]})]})}export{O as DiffPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t,t as n}from"./presentation-DWHWElFr.js";import{n as r,t as i}from"./jsx-runtime-CkEUZM6i.js";import{t as a}from"./error-normalize-UHvG8s92.js";import{a as o,i as s,n as c,r as l,t as u}from"./page-shell-Bs0RBRoD.js";import{i as d,r as f}from"./fields-CSdFjOgg.js";import{t as p}from"./path-utils-B6vBr0DD.js";var m=e(r(),1),h=i(),g=[{value:`jaw-default`,label:`Jaw default`},{value:`jaw-dark`,label:`Jaw dark`},{value:`jaw-light`,label:`Jaw light`},{value:`jaw-contrast`,label:`High contrast`}],_=[{value:`default`,label:`default`},{value:`vim`,label:`vim`},{value:`emacs`,label:`emacs`}],v=[{value:`summary`,label:`summary`},{value:`unified`,label:`unified`},{value:`side-by-side`,label:`side-by-side`}],y=[`presentation.mode`,`tui.themeSeed`,`tui.keymapPreset`,`tui.pasteCollapseLines`,`tui.pasteCollapseChars`,`tui.diffStyle`];function b({port:e,client:r,dirty:i,registerSave:b}){let{state:x,refresh:S,setData:C}=o(r,`/api/settings`,[e]),[w,T]=(0,m.useState)({}),E=(0,m.useSyncExternalStore)(i.subscribe,()=>i.pending.get(`presentation.mode`)?.value,()=>void 0),D=n(E)?E:t(x.kind===`ready`?x.data:void 0),[O,k]=(0,m.useState)(null),[A,j]=(0,m.useState)(!1),M=(0,m.useRef)(null),N=(0,m.useRef)(null);(0,m.useLayoutEffect)(()=>(M.current={client:r,port:e},N.current=null,j(!1),()=>{M.current=null,N.current=null}),[r,e,i]),(0,m.useEffect)(()=>{x.kind===`ready`&&T({...x.data.tui||{}})},[x]),(0,m.useEffect)(()=>(T({}),k(null),()=>{for(let e of y)i.remove(e)}),[r,e,i]);let P=(0,m.useCallback)((e,t)=>i.set(e,t),[i]),F=(0,m.useCallback)(()=>{let t=M.current;if(!t||t.client!==r||t.port!==e)return Promise.resolve();if(N.current?.instance===t)return N.current.promise;k(null);let n=i.saveBundle();if(Object.keys(n).length===0)return Promise.resolve();let a=p(n),o=new Map([...i.pending].filter(([e])=>Object.hasOwn(n,e)));j(!0);let s={instance:t,promise:Promise.resolve()};return s.promise=Promise.resolve().then(async()=>{if(M.current!==t)return;let e=await r.put(`/api/settings`,a);if(M.current!==t)return;let n=e&&typeof e==`object`&&`data`in e?e.data:e;for(let[e,t]of o)i.pending.get(e)===t&&i.remove(e);T({...n.tui||{}}),C(n),await S()}).finally(()=>{N.current===s&&(N.current=null),M.current===t&&j(!1)}),N.current=s,s.promise},[r,e,i,S,C]);if((0,m.useEffect)(()=>{if(b)return b(F),()=>b(null)},[b,F]),x.kind===`loading`)return(0,h.jsx)(c,{});if(x.kind===`offline`)return(0,h.jsx)(l,{port:e});if(x.kind===`error`)return(0,h.jsx)(u,{message:x.message});let I=x.data.tui||{};return(0,h.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault();let t=M.current;F().catch(e=>{t&&M.current===t&&k(a(e))})},children:[O?(0,h.jsx)(u,{message:O}):null,(0,h.jsx)(s,{title:`Conversation display`,hint:`Changes conversation display only. Runtime and permissions stay unchanged.`,children:(0,h.jsx)(d,{disabled:A,id:`display-presentation-mode`,label:`Presentation`,value:D,options:[{value:`activity`,label:`Activity (default)`},{value:`legacy`,label:`Legacy transcript`}],onChange:e=>{N.current||(e===`activity`||e===`legacy`)&&P(`presentation.mode`,{value:e,original:t(x.data),valid:!0})}})}),(0,h.jsxs)(s,{title:`Display`,hint:`TUI options applied to /i/${e}.`,children:[(0,h.jsx)(d,{disabled:A,id:`display-themeSeed`,label:`Theme seed`,value:w.themeSeed??I.themeSeed??`jaw-default`,options:g,onChange:e=>{N.current||(T({...w,themeSeed:e}),P(`tui.themeSeed`,{value:e,original:I.themeSeed??`jaw-default`,valid:!0}))}}),(0,h.jsx)(d,{disabled:A,id:`display-keymapPreset`,label:`Keymap preset`,value:w.keymapPreset??I.keymapPreset??`default`,options:_,onChange:e=>{N.current||(T({...w,keymapPreset:e}),P(`tui.keymapPreset`,{value:e,original:I.keymapPreset??`default`,valid:!0}))}}),(0,h.jsx)(f,{disabled:A,id:`display-pasteCollapseLines`,label:`Paste collapse — lines`,value:w.pasteCollapseLines??I.pasteCollapseLines??2,min:0,step:1,onChange:e=>{N.current||(T({...w,pasteCollapseLines:e}),P(`tui.pasteCollapseLines`,{value:e,original:I.pasteCollapseLines??2,valid:Number.isFinite(e)&&e>=0}))}}),(0,h.jsx)(f,{disabled:A,id:`display-pasteCollapseChars`,label:`Paste collapse — chars`,value:w.pasteCollapseChars??I.pasteCollapseChars??160,min:0,step:10,onChange:e=>{N.current||(T({...w,pasteCollapseChars:e}),P(`tui.pasteCollapseChars`,{value:e,original:I.pasteCollapseChars??160,valid:Number.isFinite(e)&&e>=0}))}}),(0,h.jsx)(d,{disabled:A,id:`display-diffStyle`,label:`Diff style`,value:w.diffStyle??I.diffStyle??`summary`,options:v,onChange:e=>{N.current||(T({...w,diffStyle:e}),P(`tui.diffStyle`,{value:e,original:I.diffStyle??`summary`,valid:!0}))}})]})]})}export{b 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{c as r}from"./api-B9RiiOMM.js";import{t as i}from"./desktop-bridge-DbRfkg8l.js";import{t as a}from"./copy-text-WsUHYigB.js";import{n as o,t as s}from"./MarkdownRenderer-DzN66XVb.js";var c=e(t(),1),l=n(),u={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,py:`python`,rs:`rust`,go:`go`,java:`java`,cpp:`cpp`,c:`cpp`,css:`css`,html:`html`,htm:`html`,xml:`xml`,json:`json`,yaml:`yaml`,yml:`yaml`,sh:`bash`,bash:`bash`,sql:`sql`};function d(e){let t=e.split(`.`).pop()?.toLowerCase();return t?u[t]??null:null}function f(e){return/\.(md|mdx)$/i.test(e)}function p(e){return/\.html?$/i.test(e)}function m(){return i()?.folder??null}function h(e){return!e.startsWith(`/`)&&!/^[a-zA-Z]:[\\/]/.test(e)}function g(e){return e.split(/[\\/]/).pop()||e}function _(e){return[`<!doctype html>`,`<html>`,`<head>`,`<meta http-equiv="Content-Security-Policy" content="${[`default-src 'none'`,`img-src data: blob:`,`style-src 'unsafe-inline' data:`,`font-src data:`,`script-src 'none'`,`connect-src 'none'`,`object-src 'none'`,`base-uri 'none'`,`form-action 'none'`,`frame-src 'none'`].join(`; `)}">`,`<meta charset="utf-8">`,`<style>html,body{margin:0;min-height:100%;}body{font-family:system-ui,sans-serif;}</style>`,`</head>`,`<body>`,e,`</body>`,`</html>`].join(``)}function v(e){return(0,l.jsx)(`iframe`,{className:`doc-html-preview`,title:e.title,sandbox:``,referrerPolicy:`no-referrer`,srcDoc:_(e.content)})}function y(e){if(e.raw)return(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})});if(f(e.filePath))return(0,l.jsx)(`article`,{className:`notes-preview doc-markdown`,children:(0,l.jsx)(s,{markdown:e.content,onLocalFileOpen:e.onOpenLocalFile})});if(p(e.filePath))return(0,l.jsx)(v,{content:e.content,title:`Rendered preview of ${g(e.filePath)}`});let t=d(e.filePath);return t?(0,l.jsx)(o,{code:e.content,language:t}):(0,l.jsx)(`pre`,{className:`doc-pre`,children:(0,l.jsx)(`code`,{children:e.content})})}function b(e){let t=m(),n=(0,c.useRef)(null),i=(0,c.useRef)(null),o=(0,c.useRef)(void 0),s=(0,c.useRef)({filePath:``,scrollTop:0}),u=(0,c.useRef)(null),d=(0,c.useRef)(null),[f,p]=(0,c.useState)(``),[_,v]=(0,c.useState)(null),[b,x]=(0,c.useState)(!1),[S,C]=(0,c.useState)(!1),[w,T]=(0,c.useState)(!1),[E,D]=(0,c.useState)(null),O=(0,c.useCallback)(e=>{d.current!==null&&window.clearTimeout(d.current),D(e),d.current=window.setTimeout(()=>{d.current=null,D(t=>t===e?null:t)},1200)},[]),k=(0,c.useCallback)(()=>{let t=e.filePath;t&&a(t).then(e=>{e.ok?O(`path`):console.error(`[doc-panel:path-copy]`,e.error)})},[O,e.filePath]),A=(0,c.useCallback)(()=>{a(f).then(e=>{e.ok?O(`content`):console.error(`[doc-panel:content-copy]`,e.error)})},[f,O]),j=(0,c.useCallback)(e=>{u.current!==null&&cancelAnimationFrame(u.current);let t=s.current.filePath===e?s.current.scrollTop:0;u.current=requestAnimationFrame(()=>{u.current=null;let r=n.current;r&&s.current.filePath===e&&(r.scrollTop=t)})},[]);return(0,c.useEffect)(()=>{if(!e.filePath){p(``),v(null),C(!1),D(null),T(!1);return}let n=e.filePath,i=!1;return D(null),T(!1),(async()=>{if(t){let e=await t.readFile(n);if(!e.ok&&e.error?.includes(`path not allowed`)){if(await t.getDefaultRoot(),i)return;e=await t.readFile(n)}if(i)return;e.ok&&e.content!==void 0?(x(e.binary===!0),C(e.truncated===!0&&e.binary!==!0),p(e.binary||e.truncated?``:e.content),v(null)):v(e.error??`Failed to read file`);return}if(!h(n)){i||v(`Document preview for arbitrary local files requires Electron desktop app`);return}try{let e=await r(n);if(i)return;x(!1),C(!1),p(e.content),v(null)}catch(e){i||v(e.message)}})(),()=>{i=!0}},[t,e.filePath]),(0,c.useLayoutEffect)(()=>{let t=n.current,r=e.filePath;if(t&&r){if(o.current!==r){o.current=r,t.scrollTop=0,s.current={filePath:r,scrollTop:0};return}j(r)}},[f,e.filePath,j]),(0,c.useEffect)(()=>{let t=i.current,n=e.filePath;if(!t||!n)return;let r=new ResizeObserver(()=>{s.current.filePath===n&&j(n)});return r.observe(t),()=>{r.disconnect()}},[f,e.filePath,j]),(0,c.useEffect)(()=>()=>{u.current!==null&&(cancelAnimationFrame(u.current),u.current=null),d.current!==null&&(window.clearTimeout(d.current),d.current=null)},[]),e.filePath?_?(0,l.jsx)(`div`,{className:`doc-panel doc-error`,children:_}):b?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`Binary file — cannot preview`}):S?(0,l.jsx)(`div`,{className:`doc-panel doc-binary`,children:`File too large to preview (512KB cap) — open it in an editor instead.`}):(0,l.jsxs)(`div`,{className:`doc-panel`,children:[(0,l.jsxs)(`div`,{className:`doc-toolbar`,children:[(0,l.jsx)(`span`,{className:`doc-file-name`,title:e.filePath,children:g(e.filePath)}),(0,l.jsxs)(`div`,{className:`doc-toolbar-actions`,"aria-label":`Document actions`,children:[(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button ${w?`is-active`:``}`,"aria-pressed":w,title:`Show raw source`,onClick:()=>T(e=>!e),children:`Raw`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy full path`,onClick:k,children:E===`path`?`Copied`:`Path`}),(0,l.jsx)(`button`,{type:`button`,className:`doc-toolbar-button`,title:`Copy file content`,onClick:A,children:E===`content`?`Copied`:`Copy`})]})]}),(0,l.jsx)(`div`,{className:`doc-content`,ref:n,onScroll:t=>{e.filePath&&(s.current={filePath:e.filePath,scrollTop:t.currentTarget.scrollTop})},children:(0,l.jsx)(`div`,{className:`doc-content-body`,ref:i,children:(0,l.jsx)(y,{filePath:e.filePath,content:f,raw:w,onOpenLocalFile:e.onOpenLocalFile})})})]}):(0,l.jsx)(`div`,{className:`doc-panel doc-empty`,children:`Open Folders and select a file to preview it here.`})}export{b as DocPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-CkEUZM6i.js";import{i as r}from"./page-shell-Bs0RBRoD.js";var i=e(t(),1),a=n(),o=[`employees`],s=[`ai-e`,`claude`,`claude-e`,`codex`,`codex-app`,`copilot`,`cursor`,`kiro-code`,`gemini`,`grok`,`opencode`],c=0;function l(){return c+=1,`emp_${Date.now().toString(36)}_${c}`}function u(){let e=globalThis.crypto;if(e&&typeof e.randomUUID==`function`)try{return e.randomUUID()}catch{}return l()}function d(e=u()){return{id:e,name:``,cli:`claude`,role:``,prompt:``,active:!0}}function f(e){if(!Array.isArray(e))return[];let t=[],n=0;for(let r of e){if(typeof r==`string`){n+=1,t.push({...d(`emp_legacy_${n}`),name:r});continue}if(!r||typeof r!=`object`)continue;let e=r,i=typeof e.name==`string`?e.name:``;if(!i&&!e.id)continue;n+=1;let a=typeof e.id==`string`&&e.id.trim()?e.id.trim():`emp_unknown_${n}`,o=typeof e.cli==`string`&&e.cli.trim()?e.cli.trim():`claude`,s=typeof e.role==`string`?e.role:``,c=typeof e.prompt==`string`?e.prompt:``,l=e.active!==!1;t.push({id:a,name:i,cli:o,role:s,prompt:c,active:l})}return t}function p(e){return e.name.trim()?e.cli.trim()?null:`CLI is required`:`Name is required`}function m(e){return e.some(e=>p(e)!==null)}function h(e){let t=new Map;for(let n of e){let e=n.name.trim().toLowerCase();e&&t.set(e,(t.get(e)??0)+1)}let n=new Set;for(let[e,r]of t)r>1&&n.add(e);return n}function g(e){return e.map(e=>{let t={id:e.id,name:e.name.trim(),cli:e.cli.trim()||`claude`,role:e.role.trim(),active:e.active};return e.prompt.trim()&&(t.prompt=e.prompt),t})}function _({registerSave:e}){return(0,i.useEffect)(()=>{if(e)return e(null),()=>e(null)},[e]),(0,a.jsx)(`form`,{className:`settings-page-form`,onSubmit:e=>e.preventDefault(),children:(0,a.jsx)(r,{title:`Employees`,hint:`Runtime employees are now managed from the Agent page.`,children:(0,a.jsx)(`p`,{className:`settings-section-hint`,children:`Open Runtime / Agent to edit dispatchable employees, static employee model overrides, and database-backed employees in one place.`})})})}export{s as DEFAULT_CLI_OPTIONS,o as EMPLOYEE_KEYS,_ as default,h as duplicateNameSet,p as employeeRowError,m as employeesHaveErrors,d as makeDefaultEmployee,u as newEmployeeId,f as normalizeEmployees,g as toPersistShape};
|
|
@@ -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{t as a}from"./copy-text-WsUHYigB.js";import{n as o,t as s}from"./folder-drag-payload-BhV9yzhH.js";var c=e(t(),1);function l(e){return{name:e.name,path:e.path,kind:e.kind===`folder`?`directory`:`file`,size:e.size}}function u(e,t){for(let n of e){if(n.path===t)return n;let e=u(n.children??[],t);if(e)return e}return null}function d(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 f(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(l);let n=u(e,t);return!n||n.kind!==`folder`?[]:(n.children??[]).map(l)},readFile:async e=>({content:(await r(e)).content,binary:!1})}}var p=n();function m(e){return(0,p.jsxs)(`div`,{className:`folder-action-row`,"aria-label":`Folder actions`,children:[(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection,onClick:e.onCopyPath,children:`Copy`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection,onClick:e.onCopyRelativePath,children:`Relative`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection||!e.canReveal,onClick:e.onReveal,children:`Finder`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.canMutate,onClick:e.onCreateFile,children:`New File`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.canMutate,onClick:e.onCreateFolder,children:`New Folder`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:!e.hasSelection||!e.canMutate,onClick:e.onRename,children:`Rename`})]})}function h(e){return(0,p.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,p.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onCopyPath,children:`Copy Path`}),(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onCopyRelativePath,children:`Copy Relative Path`}),(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canReveal,onClick:e.onReveal,children:e.entry.kind===`directory`?`Open Folder`:`Reveal in Finder`}),(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onCreateFile,children:`New File`}),(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onCreateFolder,children:`New Folder`}),(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:!e.canMutate,onClick:e.onRename,children:`Rename`}),e.canRefresh&&(0,p.jsx)(`button`,{type:`button`,role:`menuitem`,onClick:e.onRefresh,children:`Refresh`})]})}function g(e){return(0,p.jsxs)(`div`,{className:`folder-move-confirm`,role:`dialog`,"aria-label":`Confirm folder move`,children:[(0,p.jsxs)(`div`,{className:`folder-move-confirm__title`,children:[`Move "`,e.source.name,`" into "`,e.target.name,`"?`]}),(0,p.jsxs)(`label`,{className:`folder-move-confirm__option`,children:[(0,p.jsx)(`input`,{type:`checkbox`,checked:e.skipChecked,onChange:t=>e.onSkipCheckedChange(t.target.checked)}),`Don't ask again for internal moves this session`]}),(0,p.jsxs)(`div`,{className:`folder-move-confirm__actions`,children:[(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,disabled:e.busy,onClick:e.onCancel,children:`Cancel`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn is-primary`,disabled:e.busy,onClick:e.onConfirm,children:e.busy?`Moving...`:`Move`})]})]})}function _(e){return(0,p.jsxs)(p.Fragment,{children:[e.pendingMove&&(0,p.jsx)(g,{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,p.jsx)(h,{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 v(e){return e===null?`Open Folder`:e.split(`/`).pop()||e}function y(e){return e.split(`/`).filter(Boolean).pop()||e}function b(e){return e.branch?e.branch:e.detached?e.head?`detached ${e.head}`:`detached`:e.head??`worktree`}function x(e){let[t,n]=(0,c.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,p.jsxs)(`div`,{className:`folder-toolbar`,children:[(0,p.jsx)(`button`,{type:`button`,className:`folder-pick-btn`,onClick:e.onPickFolder,disabled:!e.canPickRoot,children:e.canPickRoot?v(e.rootPath):e.label}),r&&(0,p.jsx)(`span`,{className:e.gitSummary?.error?`folder-git-summary is-error`:`folder-git-summary`,title:e.gitSummary?.error??void 0,children:r}),a&&(0,p.jsxs)(`div`,{className:`folder-worktree`,children:[(0,p.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,p.jsx)(`div`,{className:`folder-worktree-menu`,role:`menu`,"aria-label":`Git worktrees`,children:i.map(t=>(0,p.jsxs)(`div`,{className:`folder-worktree-row`,role:`group`,"aria-label":t.path,children:[(0,p.jsxs)(`button`,{type:`button`,className:`folder-worktree-open`,onClick:()=>{n(!1),e.onOpenWorktree?.(t.path)},children:[(0,p.jsxs)(`span`,{className:`folder-worktree-title`,children:[y(t.path),t.current&&(0,p.jsx)(`span`,{className:`folder-worktree-current`,children:`Current`})]}),(0,p.jsxs)(`span`,{className:`folder-worktree-meta`,children:[b(t),` · `,t.path]})]}),(0,p.jsxs)(`span`,{className:`folder-worktree-actions`,children:[(0,p.jsx)(`button`,{type:`button`,onClick:()=>e.onCopyWorktreePath?.(t.path),children:`Copy`}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>e.onRevealWorktreePath?.(t.path),children:`Finder`})]})]},t.path))})]}),e.rootPath!==null&&e.gitSummary?.available&&e.onOpenWorktreeOps&&(0,p.jsx)(`button`,{type:`button`,className:`folder-worktree-btn`,onClick:e.onOpenWorktreeOps,children:`Ops`}),e.rootPath!==null&&(0,p.jsx)(`button`,{type:`button`,className:`folder-refresh`,onClick:e.onRefresh,"aria-label":`Refresh folder`,children:`↻`})]})}async function S(e,t){return await(await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})).json()}async function C(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 S(`/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 w(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 S(`/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 T(e){return e.length>0?e.join(` `):`Command unavailable`}function E(e){return e.status===`running`?`Running`:e.status===`succeeded`?`Done`:e.status===`blocked`?`Blocked`:e.status===`cancelled`?`Cancelled`:`Failed`}function ee(e){return e.history.length===0?null:(0,p.jsxs)(`div`,{className:`folder-worktree-history`,"aria-label":`Git worktree operation history`,children:[(0,p.jsx)(`div`,{className:`folder-worktree-history__title`,children:`Recent operations`}),e.history.map(t=>(0,p.jsxs)(`div`,{className:`folder-worktree-history__item is-${t.status}`,children:[(0,p.jsxs)(`div`,{className:`folder-worktree-history__main`,children:[(0,p.jsx)(`span`,{className:`folder-worktree-history__label`,children:t.operationLabel}),(0,p.jsx)(`span`,{className:`folder-worktree-history__status`,children:E(t)})]}),(0,p.jsx)(`div`,{className:`folder-worktree-history__command`,title:T(t.commandPreview),children:T(t.commandPreview)}),t.stdout&&(0,p.jsx)(`pre`,{className:`folder-worktree-history__output`,children:t.stdout}),t.stderr&&(0,p.jsx)(`pre`,{className:`folder-worktree-history__output is-error`,children:t.stderr}),t.error&&(0,p.jsx)(`div`,{className:`folder-worktree-history__error`,children:t.error}),(0,p.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 D(e){return e.split(`/`).filter(Boolean).pop()||e}function te(e){return e?e.command.join(` `):`Preview unavailable`}function O(e){let[t,n]=(0,c.useState)(`worktree-add`),[r,i]=(0,c.useState)(``),[a,o]=(0,c.useState)(``),[s,l]=(0,c.useState)(!1),[u,d]=(0,c.useState)(e.worktrees.find(e=>!e.current)?.path??e.worktrees[0]?.path??``),[f,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)(!1),[_,v]=(0,c.useState)(!1),[y,b]=(0,c.useState)(null),[x,S]=(0,c.useState)(null),w=(0,c.useCallback)(e=>{n(e.type),g(!1),e.type===`worktree-add`&&(i(e.path),o(e.branch),l(e.createBranch)),e.type===`worktree-remove`&&(d(e.path),m(e.force))},[]),T=(0,c.useMemo)(()=>t===`worktree-add`?{type:t,path:r,branch:a,createBranch:s}:t===`worktree-remove`?{type:t,path:u,force:f}:{type:t},[a,s,f,t,u,r]);(0,c.useEffect)(()=>{let t=!1;return g(!1),v(!0),b(null),S(null),(async()=>{let n=await C({folderPanelRoot:e.folderPanelRoot,repoRoot:e.repoRoot,operation:T});t||(v(!1),S(n.preview),b(n.error))})(),()=>{t=!0}},[T,e.folderPanelRoot,e.repoRoot]);let E=h&&x!==null&&!y&&!_&&!e.busy,O=t===`worktree-remove`;return(0,p.jsx)(`div`,{className:`folder-worktree-ops`,role:`dialog`,"aria-label":`Git worktree operations`,children:(0,p.jsxs)(`div`,{className:`folder-worktree-ops__panel`,children:[(0,p.jsxs)(`div`,{className:`folder-worktree-ops__header`,children:[(0,p.jsx)(`span`,{children:`Worktree Ops`}),(0,p.jsx)(`button`,{type:`button`,onClick:e.onClose,disabled:e.busy,children:`Close`})]}),(0,p.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,p.jsxs)(`label`,{children:[`Operation`,(0,p.jsxs)(`select`,{value:t,onChange:e=>n(e.target.value),disabled:e.busy,children:[(0,p.jsx)(`option`,{value:`worktree-add`,children:`Add worktree`}),(0,p.jsx)(`option`,{value:`worktree-remove`,children:`Remove worktree`}),(0,p.jsx)(`option`,{value:`worktree-prune`,children:`Prune stale worktrees`})]})]})}),t===`worktree-add`&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,p.jsxs)(`label`,{children:[`Path`,(0,p.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`/Users/jun/...`,disabled:e.busy})]})}),(0,p.jsxs)(`div`,{className:`folder-worktree-ops__row`,children:[(0,p.jsxs)(`label`,{children:[`Branch / ref`,(0,p.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),placeholder:`feature/name`,disabled:e.busy})]}),(0,p.jsxs)(`label`,{className:`folder-worktree-ops__check`,children:[(0,p.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>l(e.target.checked),disabled:e.busy}),`Create branch`]})]})]}),O&&(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`div`,{className:`folder-worktree-ops__row`,children:(0,p.jsxs)(`label`,{children:[`Worktree`,(0,p.jsx)(`select`,{value:u,onChange:e=>d(e.target.value),disabled:e.busy,children:e.worktrees.map(e=>(0,p.jsxs)(`option`,{value:e.path,children:[D(e.path),` - `,e.path]},e.path))})]})}),(0,p.jsxs)(`label`,{className:`folder-worktree-ops__warning`,children:[(0,p.jsx)(`input`,{type:`checkbox`,checked:f,onChange:e=>m(e.target.checked),disabled:e.busy}),`Force remove dirty worktree`]})]}),(0,p.jsx)(`div`,{className:`folder-worktree-ops__preview`,"aria-busy":_,children:_?`Previewing command...`:te(x)}),y&&(0,p.jsx)(`div`,{className:`folder-worktree-ops__warning`,children:y}),O&&!f&&(0,p.jsx)(`div`,{className:`folder-worktree-ops__hint`,children:`Dirty worktrees are blocked unless force remove is explicitly checked.`}),O&&f&&(0,p.jsx)(`div`,{className:`folder-worktree-ops__hint`,children:`Preview changes to git worktree remove --force for this target.`}),(0,p.jsxs)(`label`,{className:`folder-worktree-ops__check`,children:[(0,p.jsx)(`input`,{type:`checkbox`,checked:h,onChange:e=>g(e.target.checked),disabled:x===null||!!y||e.busy}),`I understand this will run the previewed git command.`]}),(0,p.jsxs)(`div`,{className:`folder-worktree-ops__actions`,children:[(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onClose,disabled:e.busy,children:`Cancel`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn is-primary`,disabled:!E,onClick:()=>e.onRun(T,x),children:e.busy?`Running...`:`Run`})]}),(0,p.jsx)(ee,{history:e.history,busy:e.busy,onRetry:w})]})})}function ne(e){let t=e.lastIndexOf(`/`);return t>0?e.slice(0,t):`/`}function k(e,t){return t===e||t.startsWith(`${e}/`)}function re(e,t){if(!e)return t;let n=e.endsWith(`/`)?e:`${e}/`;return t.startsWith(n)?t.slice(n.length):t}function ie(e,t){let n=new Map(e);for(let e of t)n.delete(e);return n}function ae(e){let t=(0,c.useRef)(null);return(0,c.useEffect)(()=>{let e=t.current;e&&(e.focus(),e.select())},[e.initialName]),(0,p.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,p.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 oe(e){return/mac|iphone|ipad|ipod/i.test(e)}function se(){return typeof navigator>`u`?``:navigator.userAgentData?.platform||navigator.platform||navigator.userAgent||``}function ce(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 le(e,t=se()){return oe(t)?e.metaKey:e.ctrlKey}function ue(e,t){if(ce(e.target??null))return null;let n=e.key.toLowerCase(),r=e.code??``,i=oe(t.platform??se())?e.metaKey:e.ctrlKey,a=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`:a&&(n===`c`||r===`KeyC`)?`copy-path`:a&&(n===`r`||r===`KeyR`)?`reveal-path`:i&&!e.altKey&&n===`c`?e.shiftKey?`copy-path`:`copy-relative-path`:null}function de(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,p.jsxs)(p.Fragment,{children:[t&&(0,p.jsxs)(`div`,{className:`folder-entry folder-entry-inline`,children:[e.depth>0&&(0,p.jsx)(`span`,{className:`folder-indent`,"aria-hidden":`true`,children:Array.from({length:e.depth},(e,t)=>(0,p.jsx)(`span`,{className:`folder-indent-guide`},t))}),(0,p.jsx)(`span`,{className:`folder-entry-disclosure is-placeholder`,"aria-hidden":`true`,children:`·`}),(0,p.jsx)(ae,{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,p.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,p.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),de(!0),n.dataTransfer.effectAllowed=`copyMove`,n.dataTransfer.setData(s,o(r)),n.dataTransfer.setData(`text/plain`,r.entries.map(e=>e.path).join(`
|
|
2
|
+
`))},onDragEnd:()=>{de(!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`&&k(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(),de(!1),e.setDropTargetPath(null),e.requestMove(e.dragSelection.primaryEntry,t))},children:[e.depth>0&&(0,p.jsx)(`span`,{className:`folder-indent`,"aria-hidden":`true`,children:Array.from({length:e.depth},(e,t)=>(0,p.jsx)(`span`,{className:`folder-indent-guide`},t))}),(0,p.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,p.jsx)(ae,{initialName:r.initialName,busy:e.isMutating,label:`Rename`,onSubmit:e.submitInlineMutation,onCancel:e.cancelInlineMutation}):(0,p.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:le(n),preview:!1}),onDoubleClick:()=>{t.kind===`directory`?e.toggleEntryExpansion(t):e.openFileEntry(t)},children:[(0,p.jsx)(`span`,{className:`folder-entry-name`,children:t.name}),n?.label&&(0,p.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,p.jsx)(fe,{...e,entries:e.childrenCache.get(t.path),parentPath:t.path,depth:e.depth+1})]},t.path))]})}function pe(e){return(0,p.jsxs)(`div`,{className:`folder-unavailable`,children:[(0,p.jsx)(`div`,{className:`folder-unavailable__title`,children:`Folder unavailable`}),(0,p.jsx)(`div`,{className:`folder-unavailable__path`,title:e.path,children:e.path}),(0,p.jsx)(`div`,{className:`folder-unavailable__error`,children:e.error}),(0,p.jsxs)(`div`,{className:`folder-unavailable__actions`,children:[(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onOpenFolder,children:`Open Folder`}),(0,p.jsx)(`button`,{type:`button`,className:`folder-action-btn`,onClick:e.onClear,children:`Clear`})]})]})}function me(e){return(0,p.jsxs)(`div`,{ref:e.treeRef,className:e.rootPath===null?`folder-tree folder-empty-root`:`folder-tree`,role:`tree`,"aria-multiselectable":`true`,children:[(0,p.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,p.jsx)(`div`,{className:`folder-empty-root__content`,children:`Choose a folder to browse files.`}),e.unavailableRoot&&(0,p.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,p.jsx)(`div`,{className:`folder-empty`,children:e.sourceKind===`notes-vault`?`No notes in vault`:`Empty directory`})]})}var A={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 _e(e,t,n,r={}){if(!n.includes(t))return e;if(r.range&&e.anchorPath&&n.includes(e.anchorPath))return{selectedPaths:M(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 j(e,t,n,r){if(t.length===0)return A;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:M(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 M(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 ye(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:ye(e.childrenCache),selection:e.selection}}function N(e){return/not a git repository/i.test(e)}async function P(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 P(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:N(o),error:o}}var I={available:!1,loading:!1,error:null,repoRoot:null,branch:null,head:null,dirty:!1,decorationsByPath:new Map},L={modified:`M`,added:`A`,deleted:`D`,renamed:`R`,untracked:`?`,ignored:`·`,conflict:`U`,submodule:`S`};function Ce(e){return{className:`git-${e.kind}`,label:L[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:`${L[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,Ce(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 we(e){let{rootPath:t,repoRoot:n,enabled:r,refreshToken:i}=e,[a,o]=(0,c.useState)(I);return(0,c.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 Te(e){let{folderPanelRoot:t,repoRoot:n,enabled:r,refreshToken:i}=e,[a,o]=(0,c.useState)(0),[s,l]=(0,c.useState)(U),u=(0,c.useCallback)(()=>o(e=>e+1),[]);return(0,c.useEffect)(()=>{if(!r||t===null){l(U);return}let e=!1;return l(e=>({...e,loading:!0,error:null})),(async()=>{let r=await H(t,n??void 0);e||l({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,c.useMemo)(()=>({...s,refresh:u}),[u,s])}function Ee(e=1600){let[t,n]=(0,c.useState)(!1),r=(0,c.useRef)(null),i=(0,c.useCallback)(()=>{r.current!==null&&window.clearTimeout(r.current),r.current=null,n(!1)},[]),a=(0,c.useCallback)(()=>{r.current!==null&&window.clearTimeout(r.current),n(!0),r.current=window.setTimeout(()=>{r.current=null,n(!1)},e)},[e]);return(0,c.useEffect)(()=>()=>i(),[i]),{folderChordActive:t,startFolderChord:a,cancelFolderChord:i}}function De(e){let t=e.onPreviewFile,[n,r]=(0,c.useState)(()=>e.initialSelection??A),i=(0,c.useMemo)(()=>he(e.entries,e.childrenCache,e.expanded),[e.childrenCache,e.entries,e.expanded]),a=(0,c.useMemo)(()=>i.map(e=>e.path),[i]),o=(0,c.useMemo)(()=>new Set(n.selectedPaths),[n.selectedPaths]),s=(0,c.useMemo)(()=>ve(i,o),[o,i]),l=n.focusedPath??s[0]?.path??null,u=i.find(e=>e.path===l)??s[0]??null;return(0,c.useEffect)(()=>{r(e=>ge(e,a))},[a]),{selection:n,visibleEntries:i,visiblePaths:a,selectedPaths:o,selectedPath:l,selectedEntries:s,selectedEntry:u,selectEntry:(0,c.useCallback)((e,n={})=>{r(t=>_e(t,e.path,a,n)),e.kind===`file`&&n.preview!==!1&&t?.(e.path)},[t,a]),selectOnlyPath:(0,c.useCallback)(e=>{r(e&&a.includes(e)?{selectedPaths:[e],focusedPath:e,anchorPath:e}:A)},[a]),resetSelection:(0,c.useCallback)(()=>{r(A)},[]),moveKeyboardSelection:(0,c.useCallback)((e,t)=>{r(n=>j(n,a,e,t))},[a]),getDragSelectionFor:(0,c.useCallback)(e=>o.has(e.path)?{primaryEntry:e,entries:s}:{primaryEntry:e,entries:[e]},[s,o])}}var W=120,Oe=80;function ke(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 Ae(e){let{rootPath:t,expanded:n,source:r,loadDir:i,loadChildren:a,bumpGitRefresh:o,onGitRefresh:s,refreshWorktrees:l}=e,[u,d]=(0,c.useState)(null),[f,p]=(0,c.useState)(null),[m,h]=(0,c.useState)(!1),g=(0,c.useRef)(!1),_=(0,c.useRef)(null),v=(0,c.useRef)(null),y=(0,c.useRef)(async()=>void 0),b=(0,c.useRef)(!0);(0,c.useEffect)(()=>(b.current=!0,()=>{b.current=!1}),[]);let x=(0,c.useCallback)(()=>{v.current!==null&&(window.clearTimeout(v.current),v.current=null)},[]),S=(0,c.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 c=Array.from(new Set([...Array.from(n),...r.extraPaths??[]])).slice(0,Oe);await i(t);for(let e of c)await a(e,{force:!0});if(o(),s?.(),l(),!b.current)return;let u=Math.max(0,n.size-c.length);d(u>0?`${ke(e)}; ${u} collapsed/overflow branches skipped`:ke(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,l,t]),C=(0,c.useCallback)(async(e=`manual`,t={})=>{await S(e,t)},[S]);(0,c.useEffect)(()=>{y.current=S},[S]);let w=(0,c.useCallback)(()=>{x(),v.current=window.setTimeout(()=>{v.current=null,y.current(`watch`)},W)},[x]);return(0,c.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(()=>{w()});return()=>{e=!0,x(),n(),r.unwatchDir?.(t)}},[x,t,w,r]),{isRefreshing:m,refreshStatus:u,watchStatus:f,refreshVisibleTree:C}}function je(e){let{selectedFilePath:t,rootPath:n,selectedPath:r,visiblePaths:i,selectOnlyPath:a}=e,o=(0,c.useRef)(null);(0,c.useEffect)(()=>{let e=t??null,s=e!==o.current;s&&(o.current=e),(s||!r)&&e&&n&&k(n,e)&&e!==r&&i.includes(e)&&a(e)},[n,a,t,r,i])}var Me=8,Ne=0;function G(){return Ne+=1,`folder-git-op-${Date.now()}-${Ne}`}function K(e){return/dirty|uncommitted|confirmation required|not registered|outside home|symlink/i.test(e)}function q(e,t){return{id:G(),operation:e,startedAt:new Date().toISOString(),finishedAt:null,operationLabel:t?.label??e.type,commandPreview:t?.command??[],status:`running`,stdout:``,stderr:``,error:null}}function J(e,t){return[t,...e].slice(0,Me)}function Y(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:K(n.error)?`blocked`:`failed`,error:n.error}:e)}function Pe(e){let{rootPath:t,source:n,worktreeState:r,openFolderRoot:i,refreshVisibleTree:o,bumpGitRefresh:s,setActionStatus:l,setError:u}=e,[d,f]=(0,c.useState)(!1),[p,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)([]);return{open:d,setOpen:f,busy:p,history:h,openWorktreeRoot:(0,c.useCallback)(async e=>{await i(e,{registerGitWorktree:!0,repoRoot:r.repoRoot})},[i,r.repoRoot]),copyWorktreePath:(0,c.useCallback)(async e=>{let t=await a(e);t.ok?(l(`Copied worktree path`),u(null)):u(t.error??`Failed to copy worktree path`)},[l,u]),revealWorktreePath:(0,c.useCallback)(async e=>{if(t&&n.registerGitWorktreeRoot&&n.revealPath)try{await n.registerGitWorktreeRoot(t,r.repoRoot??void 0,e),await n.revealPath(e),l(`Opened worktree in Finder`),u(null)}catch(e){u(e.message)}},[t,l,u,n,r.repoRoot]),runWorktreeOperation:(0,c.useCallback)(async(e,n)=>{if(!t)return;let i=q(e,n),a=!1;g(e=>J(e,i)),m(!0);try{let n=await w({folderPanelRoot:t,repoRoot:r.repoRoot,operation:e,confirmed:!0});if(!n.ok){let e=n.error??`Git operation failed`;throw g(t=>Y(t,i.id,{ok:!1,error:e})),a=!0,Error(e)}g(e=>Y(e,i.id,{ok:!0,stdout:n.stdout})),a=!0,l(n.preview?.label??`Git worktree operation completed`),u(null),f(!1),r.refresh(),s(),await o(`git-operation`)}catch(e){let t=e.message;a||g(e=>Y(e,i.id,{ok:!1,error:t})),u(t)}finally{m(!1)}},[s,o,t,l,u,r])}}function Fe(e){let[t,n]=(0,c.useState)(null),[r,i]=(0,c.useState)(!1),a=(0,c.useCallback)(()=>e.rootPath?e.selectedEntry?e.selectedEntry.kind===`directory`?e.selectedEntry.path:ne(e.selectedEntry.path):e.rootPath:null,[e.rootPath,e.selectedEntry]),o=(0,c.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,c.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]),l=(0,c.useCallback)(()=>{e.selectedEntry&&e.source.renamePath&&(n({kind:`rename`,parentDirectory:ne(e.selectedEntry.path),targetPath:e.selectedEntry.path,initialName:e.selectedEntry.name}),e.closeContextMenu())},[e]),u=(0,c.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:l,submitInlineMutation:(0,c.useCallback)(e=>{t&&(t.kind===`rename`?u(t,e):s(t.kind,t.parentDirectory,e))},[t,s,u]),cancelInlineMutation:()=>n(null)}}function Ie(e){let[t,n]=(0,c.useState)(null),r=(0,c.useCallback)(()=>n(null),[]),i=(0,c.useCallback)((t,r,i)=>{e.selectedPaths.has(t.path)||e.selectOnlyPath(t.path),n({entry:t,x:r,y:i})},[e]);return(0,c.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 Le(){return i()?.folder??null}function Re(e,t,n){return!e||!k(t,e)?null:e===t?n:`${n}${e.slice(t.length)}`}function ze(e){let t=Le(),n=e.repoRootPath??null,r=e.gitRefreshVersion??0,i=e.onGitRefresh,o=e.onRepoRootChange,s=(0,c.useRef)(!1),l=(0,c.useMemo)(()=>t?d(t):f(e.notesTree??[],e.notesRoot??null),[t,e.notesRoot,e.notesTree]),u=(0,c.useMemo)(()=>xe(e.sessionState??null,e.externalRootPath??null),[e.externalRootPath,e.sessionState]),[h,g]=(0,c.useState)(()=>u?.rootPath??null),[v,y]=(0,c.useState)(()=>u?.entries??[]),[b,S]=(0,c.useState)(()=>new Set(u?.expandedPaths??[])),[C,w]=(0,c.useState)(()=>u?be(u.childrenCache):new Map),[T,E]=(0,c.useState)(null),[ee,D]=(0,c.useState)(null),[te,ae]=(0,c.useState)(null),[oe,se]=(0,c.useState)(null),[ce,le]=(0,c.useState)(null),[de,fe]=(0,c.useState)(!1),[pe,A]=(0,c.useState)(!1),[he,ge]=(0,c.useState)(!1),[_e,j]=(0,c.useState)(null),[ve,M]=(0,c.useState)(0),ye=(0,c.useRef)(null),N=(0,c.useRef)(null),{folderChordActive:P,startFolderChord:F,cancelFolderChord:I}=Ee(),L=e.onPreviewFile,Ce=e.selectedFilePath,R=De({entries:v,childrenCache:C,expanded:b,initialSelection:u?.selection,onPreviewFile:L}),z=R.selectedEntry,B=R.selectedEntries,V=Ie({selectedPaths:R.selectedPaths,selectOnlyPath:R.selectOnlyPath});je({selectedFilePath:e.selectedFilePath,rootPath:h,selectedPath:R.selectedPath,visiblePaths:R.visiblePaths,selectOnlyPath:R.selectOnlyPath}),(0,c.useEffect)(()=>{e.onSessionStateChange?.(Se({rootPath:h,entries:v,expanded:b,childrenCache:C,selection:R.selection}))},[C,v,b,R.selection,e.onSessionStateChange,h]);let H=(0,c.useCallback)(async e=>{try{let t=await l.listDir(e);return y(t),E(null),D(t=>t?.path===e?null:t),{ok:!0}}catch(e){let t=e.message;return E(t),{ok:!1,error:t}}},[l]),U=(0,c.useCallback)(async(t,n={})=>{try{let r=t;if(n.registerGitWorktree){if(!h)throw Error(`Current folder root required`);await l.registerGitWorktreeRoot?.(h,n.repoRoot??void 0,t)}else l.authorizeRoot&&(r=await l.authorizeRoot(t));h&&l.unwatchDir&&l.unwatchDir(h),e.onRootChange?.(r),g(r),S(new Set),w(new Map),y([]),R.resetSelection(),E(null),D(null);let i=await H(r);i.ok||D({path:r,error:i.error}),M(e=>e+1)}catch(e){E(e.message)}},[R,H,e,h,l]),W=(0,c.useCallback)(async(e,t={})=>{if(t.force||!C.has(e))try{let t=await l.listDir(e);w(n=>new Map(n).set(e,t))}catch(e){E(e.message)}},[C,l]),Oe=(0,c.useCallback)(()=>{M(e=>e+1)},[]),ke=(0,c.useCallback)(e=>{S(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),W(e)),n})},[W]),Me=(0,c.useCallback)(async()=>{if(l.pickRoot)try{let e=await l.pickRoot();e&&await U(e)}catch(e){E(e.message)}},[U,l]),Ne=(0,c.useCallback)(()=>{e.onRootChange?.(null),g(null),y([]),R.resetSelection(),D(null),E(null)},[R,e]);(0,c.useEffect)(()=>{if(s.current||h!==null||e.externalRootPath)return;let t=!1;return(async()=>{let e=await l.getInitialRoot();t||(s.current=!0,g(e),e!==null&&await H(e))})(),()=>{t=!0}},[H,e.externalRootPath,h,l]),(0,c.useEffect)(()=>{let t=e.externalRootPath;if(t){if(t===h){if(v.length>0||N.current===t)return;N.current=t}else N.current=null;U(t)}},[v.length,U,e.externalRootPath,h]);let G=we({rootPath:h,enabled:l.kind===`electron-folder`,refreshToken:ve+r}),K=Te({folderPanelRoot:h,repoRoot:G.repoRoot??n,enabled:l.kind===`electron-folder`&&G.available,refreshToken:ve+r}),q=Ae({rootPath:h,expanded:b,source:l,loadDir:H,loadChildren:W,bumpGitRefresh:Oe,onGitRefresh:i,refreshWorktrees:K.refresh}),J=q.refreshVisibleTree,Y=Pe({rootPath:h,source:l,worktreeState:K,openFolderRoot:U,refreshVisibleTree:J,bumpGitRefresh:Oe,setActionStatus:j,setError:E});(0,c.useEffect)(()=>{G.repoRoot&&G.repoRoot!==n&&o?.(G.repoRoot)},[G.repoRoot,o,n]);let ze=l.kind===`electron-folder`,Be=!!(l.createFile&&l.createFolder&&l.renamePath),Ve=(0,c.useCallback)(async(e,t)=>{if(!h)return;let n=ne(e);w(e=>ie(e,[n,t])),await J(`move`,{extraPaths:[n,t]})},[J,h]),He=(0,c.useCallback)(async(e,t,n=[])=>{h&&(w(t=>ie(t,[e,...n])),await J(`mutation`,{extraPaths:[e]}),t&&R.selectOnlyPath(t))},[R,J,h]),Ue=(0,c.useCallback)(async e=>{if(l.movePath){fe(!0);try{let t=(await l.movePath(e.source.path,e.target.path)).moved?.to??e.source.path;R.selectOnlyPath(t),j(`Moved ${e.source.name}`),le(null),await Ve(e.source.path,e.target.path)}catch(e){E(e.message)}finally{fe(!1)}}},[R,Ve,l]),We=(0,c.useCallback)((e,t)=>{if(!l.movePath||e.path===t.path||e.kind===`directory`&&k(e.path,t.path))return;let n={source:e,target:t};if(pe){Ue(n);return}ge(!1),le(n)},[Ue,pe,l.movePath]),X=Fe({rootPath:h,selectedEntry:z,selectedFilePath:Ce,source:l,folderSelection:R,refreshAfterMutation:He,renamedPreviewPath:Re,onPreviewFile:L,closeContextMenu:V.closeContextMenu,setExpanded:S,setActionStatus:j,setError:E}),Z=(0,c.useCallback)((e,t)=>{R.selectEntry(e,t),V.closeContextMenu()},[V,R]),Ge=(0,c.useCallback)(e=>{e.kind===`file`&&Z(e)},[Z]),Q=(0,c.useCallback)(e=>{R.selectEntry(e,{preview:!1}),V.closeContextMenu(),e.kind===`directory`&&ke(e.path)},[V,R,ke]),Ke=(0,c.useCallback)(async(e,t)=>{let n=t===`relative`?re(h,e.path):e.path,r=await a(n);r.ok?(R.selectOnlyPath(e.path),j(t===`relative`?`Copied relative path`:`Copied path`),E(null)):E(r.error??`Failed to copy path`)},[R,h]),qe=(0,c.useCallback)(async e=>{if(l.revealPath)try{await l.revealPath(e.path),R.selectOnlyPath(e.path),j(e.kind===`directory`?`Opened folder in Finder`:`Revealed file in Finder`),E(null)}catch(e){E(e.message)}},[R,l]),$=(0,c.useCallback)(async e=>{if(B.length===0)return;let t=B.map(t=>e===`relative`?re(h,t.path):t.path).join(`
|
|
3
|
+
`),n=await a(t);n.ok?(j(e===`relative`?`Copied relative paths`:`Copied paths`),E(null)):E(n.error??`Failed to copy paths`)},[h,B]),Je=(0,c.useCallback)(async()=>{z&&await qe(z)},[qe,z]),Ye=(0,c.useCallback)((e,t)=>{if(e.key===`ArrowUp`||e.key===`ArrowDown`){e.preventDefault(),e.stopPropagation(),R.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=ue(e,{chordActive:P});if(n){e.preventDefault(),e.stopPropagation(),n===`start-chord`&&F(),n===`cancel-chord`&&I();let r=R.selectedPaths.has(t.path);n===`copy-path`&&(I(),r?$(`absolute`):Ke(t,`absolute`)),n===`copy-relative-path`&&(I(),r?$(`relative`):Ke(t,`relative`)),n===`reveal-path`&&(I(),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))},[I,Ke,$,b,P,R,qe,Je,Z,F,Q]);return(0,c.useEffect)(()=>{let e=R.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()},[R.selection.focusedPath]),(0,p.jsxs)(`div`,{className:`folder-panel`,children:[(0,p.jsx)(x,{canPickRoot:l.canPickRoot,label:l.label,rootPath:h,onPickFolder:()=>void Me(),onRefresh:()=>{h!==null&&J(`manual`)},gitSummary:l.kind===`electron-folder`?G:void 0,worktreeSummary:l.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)}),h!==null&&(0,p.jsx)(m,{hasSelection:!!z,canReveal:!!l.revealPath,onCopyPath:()=>void $(`absolute`),onCopyRelativePath:()=>void $(`relative`),onReveal:()=>void Je(),canMutate:Be,onCreateFile:()=>X.requestCreateEntry(`file`),onCreateFolder:()=>X.requestCreateEntry(`directory`),onRename:()=>X.requestRenameSelectedEntry()}),T&&(0,p.jsx)(`div`,{className:`folder-error`,children:T}),q.watchStatus&&!T&&(0,p.jsx)(`div`,{className:`folder-status`,children:q.watchStatus}),q.refreshStatus&&!T&&!q.watchStatus&&(0,p.jsx)(`div`,{className:`folder-status`,children:q.refreshStatus}),_e&&!T&&!q.refreshStatus&&!q.watchStatus&&(0,p.jsx)(`div`,{className:`folder-status`,children:_e}),P&&(0,p.jsx)(`div`,{className:`folder-shortcut-hint`,children:`Folder shortcut: press P to copy path or R to reveal`}),Y.open&&h!==null&&(0,p.jsx)(O,{folderPanelRoot:h,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,p.jsx)(me,{treeRef:ye,rootPath:h,error:T,entries:v,expanded:b,childrenCache:C,folderSelection:R,decorationsByPath:G.decorationsByPath,dropTargetPath:oe,dragSelection:te,inlineMutation:X.inlineMutation,isMutating:X.isMutating,canUseNativeActions:ze,sourceKind:l.kind,unavailableRoot:ee,setDragSelection:ae,setDropTargetPath:se,requestMove:We,handleEntryKeyDown:Ye,selectEntry:Z,toggleEntryExpansion:Q,openFileEntry:Ge,openContextMenu:V.openContextMenu,submitInlineMutation:X.submitInlineMutation,cancelInlineMutation:X.cancelInlineMutation,onPickFolder:()=>void Me(),onClearUnavailableRoot:Ne}),(0,p.jsx)(_,{pendingMove:ce,contextMenu:V.contextMenu,isMoving:de,skipMoveConfirmChecked:he,canReveal:!!l.revealPath,canRefresh:!!h,canMutate:Be,onSkipMoveConfirmCheckedChange:ge,onCancelMove:()=>le(null),onConfirmMove:()=>{ce&&(he&&A(!0),Ue(ce))},onCopyContextPath:()=>{V.closeContextMenu(),$(`absolute`)},onCopyContextRelativePath:()=>{V.closeContextMenu(),$(`relative`)},onRevealContextPath:()=>{V.closeContextMenu(),Je()},onRefreshContext:()=>{V.closeContextMenu(),J(`manual`)},onCreateContextFile:()=>X.requestCreateEntry(`file`),onCreateContextFolder:()=>X.requestCreateEntry(`directory`),onRenameContextPath:()=>X.requestRenameSelectedEntry()})]})}export{ze as FolderPanel};
|
|
@@ -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{t as r}from"./settings-client-CSHmzyxv.js";var i=e(t(),1),a=n();function o({client:e,label:t,endpoint:n,method:o=`GET`,interpret:l,auto:u=!1}){let[d,f]=(0,i.useState)({kind:`idle`}),p=(0,i.useRef)(null),m=(0,i.useRef)(!0),h=(0,i.useCallback)(async()=>{p.current?.abort();let t=new AbortController;p.current=t,f({kind:`checking`});try{let r=o===`POST`?await e.post(n,{},{signal:t.signal}):await e.get(n,{signal:t.signal});if(!m.current||t.signal.aborted)return;f(l(r))}catch(e){if(!m.current||t.signal.aborted)return;if(e instanceof r&&e.status===404){f({kind:`unknown`,reason:`Probe endpoint not implemented on this instance.`});return}let n=e instanceof Error?e.message:String(e);f({kind:`error`,reason:n})}},[e,n,l,o]);return(0,i.useEffect)(()=>(m.current=!0,u&&h(),()=>{m.current=!1,p.current?.abort()}),[u,h]),(0,a.jsxs)(`div`,{className:`settings-health-badge`,role:`status`,"aria-live":`polite`,children:[(0,a.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>void h(),disabled:d.kind===`checking`,children:d.kind===`checking`?`Checking…`:`Check ${t}`}),(0,a.jsx)(`span`,{className:`settings-health-pill is-${d.kind}`,children:s(d)}),c(d)?(0,a.jsx)(`span`,{className:`settings-health-detail`,children:c(d)}):null]})}function s(e){switch(e.kind){case`idle`:return`Not checked`;case`checking`:return`Checking`;case`ok`:return`Healthy`;case`degraded`:return`Degraded`;case`unknown`:return`Unknown`;case`error`:return`Error`}}function c(e){return e.kind===`ok`&&e.detail||e.kind===`degraded`?e.detail:e.kind===`unknown`||e.kind===`error`?e.reason:null}function l(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty probe response.`};let t=e;if(t.ok===!0){let e=typeof t.username==`string`?t.username:void 0;return e?{kind:`ok`,detail:`@${e}`}:{kind:`ok`}}return{kind:`error`,reason:typeof t.error==`string`?t.error:`Probe failed.`}}function u(e){if(!e||typeof e!=`object`)return{kind:`unknown`,reason:`Empty health response.`};let t=e,n=t.discord&&typeof t.discord==`object`?t.discord:null;return n?n.ready===!0&&n.degraded!==!0?{kind:`ok`}:n.degraded===!0?{kind:`degraded`,detail:typeof n.degradedReason==`string`?n.degradedReason:`MESSAGE_CONTENT intent missing — slash commands only.`}:n.ready===!1?{kind:`error`,reason:typeof n.error==`string`?n.error:`Bot not connected.`}:{kind:`unknown`,reason:`Discord status indeterminate.`}:{kind:`unknown`,reason:`No discord block in /api/health.`}}export{u as n,l as r,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-CYoNlHAD.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-DZ1lls_P.js";import{a as c,i as l,s as u}from"./fields-E1L8aEhU.js";import{i as d}from"./agent-meta-KPnVam9G.js";import{t as f}from"./path-utils-QbjARuCC.js";var p=e(t(),1),m=n(),h=[{value:`every`,label:`every (interval)`},{value:`cron`,label:`cron expression`}];function g({job:e,index:t,bodyError:n,timeZoneError:r,onChange:i,onRemove:a}){let o=(0,p.useId)(),s=e.schedule.kind,d=e.schedule.timeZone??``;return(0,m.jsxs)(`fieldset`,{className:`settings-heartbeat-job`,"aria-label":`Heartbeat job ${t+1}${e.name?` (${e.name})`:``}`,children:[(0,m.jsx)(`legend`,{className:`settings-heartbeat-job-legend`,children:e.name||`Job ${t+1}`}),(0,m.jsx)(c,{id:`${o}-enabled`,label:`Enabled`,value:e.enabled,onChange:e=>i({enabled:e})}),(0,m.jsx)(u,{id:`${o}-name`,label:`Name`,value:e.name,placeholder:`Morning summary`,onChange:e=>i({name:e})}),(0,m.jsx)(l,{id:`${o}-kind`,label:`Schedule kind`,value:s,options:h,onChange:e=>{e===`every`&&s!==`every`?i({schedule:{kind:`every`,minutes:30,...d?{timeZone:d}:{}}}):e===`cron`&&s!==`cron`&&i({schedule:{kind:`cron`,cron:`0 9 * * *`,...d?{timeZone:d}:{}}})}}),s===`every`?(0,m.jsx)(u,{id:`${o}-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,...d?{timeZone:d}:{}}})}}):(0,m.jsx)(u,{id:`${o}-cron`,label:`Cron expression`,value:e.schedule.cron??``,placeholder:`0 9 * * *`,error:n??null,onChange:e=>i({schedule:{kind:`cron`,cron:e,...d?{timeZone:d}:{}}})}),(0,m.jsx)(u,{id:`${o}-tz`,label:`Time zone (optional)`,value:d,placeholder:`Asia/Seoul`,error:r??null,onChange:t=>{let n=t.trim();i(s===`every`?{schedule:{kind:`every`,minutes:e.schedule.minutes,...n?{timeZone:n}:{}}}:{schedule:{kind:`cron`,cron:e.schedule.cron,...n?{timeZone:n}:{}}})}}),(0,m.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`${o}-prompt`,children:[(0,m.jsx)(`span`,{className:`settings-field-label`,children:`Prompt`}),(0,m.jsx)(`textarea`,{id:`${o}-prompt`,rows:3,value:e.prompt,placeholder:`What should this heartbeat do?`,onChange:e=>i({prompt:e.target.value})})]}),(0,m.jsx)(`div`,{className:`settings-heartbeat-job-footer`,children:(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:a,children:`Remove job`})})]})}var _=/^\d+[smh]$/,v=/^([01]\d|2[0-3]):[0-5]\d$/,y=[`ai-e`,`claude`,`claude-e`,`codex`,`codex-app`,`copilot`,`cursor`,`kiro-code`,`gemini`,`grok`,`opencode`],b=[`heartbeat.enabled`,`heartbeat.every`,`heartbeat.activeHours.start`,`heartbeat.activeHours.end`,`heartbeat.target`],x=[`heartbeat.jobs`,`heartbeat.md`];function S(e){return _.test(e.trim())}function C(e){return v.test(e.trim())}var w=0;function T(e=Date.now()){return{id:`hb_${e}_${w++}`,name:``,enabled:!0,schedule:{kind:`every`,minutes:30},prompt:``}}function E(e){return e.startsWith(`heartbeat.`)&&e!==`heartbeat.jobs`&&e!==`heartbeat.md`}function D(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 O(e){if(!e||typeof e!=`object`)return[];let t=e.jobs;return Array.isArray(t)?t.map((e,t)=>D(e,t)).filter(e=>e!==null):[]}function k(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 A(e){return e.some(e=>k(e.schedule)!==null)}function j({port:e,client:t,dirty:n,snapshot:r}){let[i,a]=(0,p.useState)([]),[c,l]=(0,p.useState)([]),[u,d]=(0,p.useState)(!1),[f,h]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(r.kind!==`ready`)return;let e=O(r.data);a(e),l(e)},[r]),(0,p.useEffect)(()=>{n.set(`heartbeat.jobs`,{value:i,original:c,valid:!A(i)})},[i,c,n]),(0,p.useEffect)(()=>()=>{n.remove(`heartbeat.jobs`)},[n]);let _=(0,p.useCallback)(async()=>{if(A(i)){h(`Fix invalid schedules before saving.`);return}d(!0),h(null);try{let e=O(await t.put(`/api/heartbeat`,{jobs:i}));a(e),l(e),n.remove(`heartbeat.jobs`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{d(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`Loading jobs…`});if(r.kind===`offline`)return(0,m.jsx)(o,{port:e});if(r.kind===`error`)return(0,m.jsx)(s,{message:r.message});let v=n.pending.has(`heartbeat.jobs`),y=A(i);function b(e,t){a(n=>n.map((n,r)=>r===e?{...n,...t}:n))}function x(){a(e=>[...e,T()])}function S(e){a(t=>t.filter((t,n)=>n!==e))}return(0,m.jsxs)(m.Fragment,{children:[i.length===0?(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No jobs configured. Add one below.`}):(0,m.jsx)(`div`,{className:`settings-heartbeat-jobs-list`,children:i.map((e,t)=>(0,m.jsx)(g,{job:e,index:t,bodyError:k(e.schedule),onChange:e=>b(t,e),onRemove:()=>S(t)},e.id))}),(0,m.jsxs)(`div`,{className:`settings-heartbeat-jobs-footer`,children:[(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:x,children:`+ Add job`}),(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void _(),disabled:u||!v||y,children:u?`Saving…`:`Apply jobs`})]}),f?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:f}):null]})}function M({port:e,client:t,dirty:n,snapshot:r}){let[i,a]=(0,p.useState)(``),[c,l]=(0,p.useState)(``),[u,d]=(0,p.useState)(!1),[f,h]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(r.kind!==`ready`)return;let e=r.data.content??``;a(e),l(e)},[r]),(0,p.useEffect)(()=>{n.set(`heartbeat.md`,{value:i,original:c,valid:!0})},[i,c,n]),(0,p.useEffect)(()=>()=>{n.remove(`heartbeat.md`)},[n]);let g=(0,p.useCallback)(async()=>{d(!0),h(null);try{await t.put(`/api/heartbeat-md`,{content:i}),l(i),n.remove(`heartbeat.md`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{d(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`Loading template…`});if(r.kind===`offline`)return(0,m.jsx)(o,{port:e});if(r.kind===`error`)return(0,m.jsx)(s,{message:r.message});let _=n.pending.has(`heartbeat.md`);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`hb-md`,children:[(0,m.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,m.jsx)(`textarea`,{id:`hb-md`,rows:10,spellCheck:!1,value:i,onChange:e=>a(e.target.value),style:{fontFamily:`ui-monospace, monospace`}})]}),(0,m.jsx)(`div`,{className:`settings-heartbeat-md-footer`,children:(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void g(),disabled:u||!_,children:u?`Saving…`:`Save template`})}),f?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:f}):null]})}function N({port:e,client:t,dirty:n,registerSave:h}){let g=r(t,`/api/settings`),_=r(t,`/api/heartbeat`),v=r(t,`/api/heartbeat-md`),[x,w]=(0,p.useState)(!1),[T,D]=(0,p.useState)(`30m`),[O,k]=(0,p.useState)(`08:00`),[A,N]=(0,p.useState)(`22:00`),[P,F]=(0,p.useState)(`all`);(0,p.useEffect)(()=>{if(g.state.kind!==`ready`)return;let e=g.state.data.heartbeat||{};w(!!e.enabled),D(typeof e.every==`string`?e.every:`30m`),k(e.activeHours?.start??`08:00`),N(e.activeHours?.end??`22:00`),F(typeof e.target==`string`?e.target:`all`)},[g.state]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let I=(0,p.useMemo)(()=>g.state.kind===`ready`&&g.state.data.heartbeat||{},[g.state]),L=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,p.useRef)(0),z=(0,p.useCallback)(async()=>{let e=n.saveBundle(),r={};for(let[t,n]of Object.entries(e))E(t)&&(r[t]=n);if(Object.keys(r).length===0)return;let i=++R.current,a=f(r),o=await t.put(`/api/settings`,a);if(i!==R.current)return;let s=o&&typeof o==`object`&&`data`in o?o.data:o;for(let e of b)n.remove(e);g.setData(s);let c=s.heartbeat||{};w(!!c.enabled),D(typeof c.every==`string`?c.every:`30m`),k(c.activeHours?.start??`08:00`),N(c.activeHours?.end??`22:00`),F(typeof c.target==`string`?c.target:`all`),await g.refresh()},[t,n,g]);if((0,p.useEffect)(()=>{if(h)return h(z),()=>h(null)},[h,z]),g.state.kind===`loading`)return(0,m.jsx)(a,{});if(g.state.kind===`offline`)return(0,m.jsx)(o,{port:e});if(g.state.kind===`error`)return(0,m.jsx)(s,{message:g.state.message});let B=S(T)?null:"Use the form `<n>s|m|h`, e.g. `30m`",V=C(O)?null:`Use HH:MM (24h)`,H=C(A)?null:`Use HH:MM (24h)`,U=g.state.data.perCli||{},W=Object.keys(U),G=[{value:`all`,label:`all (broadcast)`},...(W.length>0?W:[...y]).map(e=>({value:e,label:d(e).label||e}))];return G.some(e=>e.value===P)||G.push({value:P,label:`${d(P).label||P} (legacy)`}),(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),z()},children:[(0,m.jsxs)(i,{title:`Heartbeat`,hint:`Background prompts the agent runs on a schedule.`,children:[(0,m.jsx)(c,{id:`hb-enabled`,label:`Heartbeat enabled`,value:x,onChange:e=>{w(e),L(`heartbeat.enabled`,{value:e,original:!!I.enabled,valid:!0})}}),(0,m.jsx)(u,{id:`hb-every`,label:`Default interval`,value:T,placeholder:`30m`,error:B,onChange:e=>{D(e),L(`heartbeat.every`,{value:e,original:I.every??`30m`,valid:S(e)})}}),(0,m.jsx)(u,{id:`hb-start`,label:`Active hours start`,value:O,placeholder:`08:00`,error:V,onChange:e=>{k(e),L(`heartbeat.activeHours.start`,{value:e,original:I.activeHours?.start??`08:00`,valid:C(e)})}}),(0,m.jsx)(u,{id:`hb-end`,label:`Active hours end`,value:A,placeholder:`22:00`,error:H,onChange:e=>{N(e),L(`heartbeat.activeHours.end`,{value:e,original:I.activeHours?.end??`22:00`,valid:C(e)})}}),(0,m.jsx)(l,{id:`hb-target`,label:`Target`,value:P,options:G,onChange:e=>{F(e),L(`heartbeat.target`,{value:e,original:I.target??`all`,valid:!0})}})]}),(0,m.jsx)(i,{title:`Jobs`,hint:`Each job replaces the entire heartbeat.json on save. Concurrent edits from multiple browsers will overwrite — last write wins.`,children:(0,m.jsx)(j,{port:e,client:t,dirty:n,snapshot:_.state})}),(0,m.jsx)(i,{title:`Default heartbeat prompt template`,hint:`Markdown shown to the agent when a heartbeat fires without a job-specific prompt.`,children:(0,m.jsx)(M,{port:e,client:t,dirty:n,snapshot:v.state})})]})}export{x as PAGE_LOCAL_KEYS,b as SECTION_A_KEYS,y as TARGET_FALLBACK,N as default,E as isHeartbeatSettingsKey,k as jobScheduleBodyError,A as jobsHaveErrors,T as makeDefaultJob,O as normalizeJobsResponse,C as validateHHMM,S as validateInterval};
|
|
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,r as o,t as s}from"./page-shell-Bs0RBRoD.js";import{a as c,i as l,s as u}from"./fields-CSdFjOgg.js";import{i as d}from"./agent-meta-WqLP4HPi.js";import{t as f}from"./path-utils-B6vBr0DD.js";var p=e(t(),1),m=n(),h=[{value:`every`,label:`every (interval)`},{value:`cron`,label:`cron expression`}];function g({job:e,index:t,bodyError:n,timeZoneError:r,onChange:i,onRemove:a}){let o=(0,p.useId)(),s=e.schedule.kind,d=e.schedule.timeZone??``;return(0,m.jsxs)(`fieldset`,{className:`settings-heartbeat-job`,"aria-label":`Heartbeat job ${t+1}${e.name?` (${e.name})`:``}`,children:[(0,m.jsx)(`legend`,{className:`settings-heartbeat-job-legend`,children:e.name||`Job ${t+1}`}),(0,m.jsx)(c,{id:`${o}-enabled`,label:`Enabled`,value:e.enabled,onChange:e=>i({enabled:e})}),(0,m.jsx)(u,{id:`${o}-name`,label:`Name`,value:e.name,placeholder:`Morning summary`,onChange:e=>i({name:e})}),(0,m.jsx)(l,{id:`${o}-kind`,label:`Schedule kind`,value:s,options:h,onChange:e=>{e===`every`&&s!==`every`?i({schedule:{kind:`every`,minutes:30,...d?{timeZone:d}:{}}}):e===`cron`&&s!==`cron`&&i({schedule:{kind:`cron`,cron:`0 9 * * *`,...d?{timeZone:d}:{}}})}}),s===`every`?(0,m.jsx)(u,{id:`${o}-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,...d?{timeZone:d}:{}}})}}):(0,m.jsx)(u,{id:`${o}-cron`,label:`Cron expression`,value:e.schedule.cron??``,placeholder:`0 9 * * *`,error:n??null,onChange:e=>i({schedule:{kind:`cron`,cron:e,...d?{timeZone:d}:{}}})}),(0,m.jsx)(u,{id:`${o}-tz`,label:`Time zone (optional)`,value:d,placeholder:`Asia/Seoul`,error:r??null,onChange:t=>{let n=t.trim();i(s===`every`?{schedule:{kind:`every`,minutes:e.schedule.minutes,...n?{timeZone:n}:{}}}:{schedule:{kind:`cron`,cron:e.schedule.cron,...n?{timeZone:n}:{}}})}}),(0,m.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`${o}-prompt`,children:[(0,m.jsx)(`span`,{className:`settings-field-label`,children:`Prompt`}),(0,m.jsx)(`textarea`,{id:`${o}-prompt`,rows:3,value:e.prompt,placeholder:`What should this heartbeat do?`,onChange:e=>i({prompt:e.target.value})})]}),(0,m.jsx)(`div`,{className:`settings-heartbeat-job-footer`,children:(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:a,children:`Remove job`})})]})}var _=/^\d+[smh]$/,v=/^([01]\d|2[0-3]):[0-5]\d$/,y=[`ai-e`,`claude`,`claude-e`,`codex`,`codex-app`,`copilot`,`cursor`,`kiro-code`,`gemini`,`grok`,`opencode`],b=[`heartbeat.enabled`,`heartbeat.every`,`heartbeat.activeHours.start`,`heartbeat.activeHours.end`,`heartbeat.target`],x=[`heartbeat.jobs`,`heartbeat.md`];function S(e){return _.test(e.trim())}function C(e){return v.test(e.trim())}var w=0;function T(e=Date.now()){return{id:`hb_${e}_${w++}`,name:``,enabled:!0,schedule:{kind:`every`,minutes:30},prompt:``}}function E(e){return e.startsWith(`heartbeat.`)&&e!==`heartbeat.jobs`&&e!==`heartbeat.md`}function D(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 O(e){if(!e||typeof e!=`object`)return[];let t=e.jobs;return Array.isArray(t)?t.map((e,t)=>D(e,t)).filter(e=>e!==null):[]}function k(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 A(e){return e.some(e=>k(e.schedule)!==null)}function j({port:e,client:t,dirty:n,snapshot:r}){let[i,a]=(0,p.useState)([]),[c,l]=(0,p.useState)([]),[u,d]=(0,p.useState)(!1),[f,h]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(r.kind!==`ready`)return;let e=O(r.data);a(e),l(e)},[r]),(0,p.useEffect)(()=>{n.set(`heartbeat.jobs`,{value:i,original:c,valid:!A(i)})},[i,c,n]),(0,p.useEffect)(()=>()=>{n.remove(`heartbeat.jobs`)},[n]);let _=(0,p.useCallback)(async()=>{if(A(i)){h(`Fix invalid schedules before saving.`);return}d(!0),h(null);try{let e=O(await t.put(`/api/heartbeat`,{jobs:i}));a(e),l(e),n.remove(`heartbeat.jobs`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{d(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`Loading jobs…`});if(r.kind===`offline`)return(0,m.jsx)(o,{port:e});if(r.kind===`error`)return(0,m.jsx)(s,{message:r.message});let v=n.pending.has(`heartbeat.jobs`),y=A(i);function b(e,t){a(n=>n.map((n,r)=>r===e?{...n,...t}:n))}function x(){a(e=>[...e,T()])}function S(e){a(t=>t.filter((t,n)=>n!==e))}return(0,m.jsxs)(m.Fragment,{children:[i.length===0?(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`No jobs configured. Add one below.`}):(0,m.jsx)(`div`,{className:`settings-heartbeat-jobs-list`,children:i.map((e,t)=>(0,m.jsx)(g,{job:e,index:t,bodyError:k(e.schedule),onChange:e=>b(t,e),onRemove:()=>S(t)},e.id))}),(0,m.jsxs)(`div`,{className:`settings-heartbeat-jobs-footer`,children:[(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:x,children:`+ Add job`}),(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void _(),disabled:u||!v||y,children:u?`Saving…`:`Apply jobs`})]}),f?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:f}):null]})}function M({port:e,client:t,dirty:n,snapshot:r}){let[i,a]=(0,p.useState)(``),[c,l]=(0,p.useState)(``),[u,d]=(0,p.useState)(!1),[f,h]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(r.kind!==`ready`)return;let e=r.data.content??``;a(e),l(e)},[r]),(0,p.useEffect)(()=>{n.set(`heartbeat.md`,{value:i,original:c,valid:!0})},[i,c,n]),(0,p.useEffect)(()=>()=>{n.remove(`heartbeat.md`)},[n]);let g=(0,p.useCallback)(async()=>{d(!0),h(null);try{await t.put(`/api/heartbeat-md`,{content:i}),l(i),n.remove(`heartbeat.md`)}catch(e){h(e instanceof Error?e.message:String(e))}finally{d(!1)}},[t,n,i]);if(r.kind===`loading`)return(0,m.jsx)(`p`,{className:`settings-section-hint`,children:`Loading template…`});if(r.kind===`offline`)return(0,m.jsx)(o,{port:e});if(r.kind===`error`)return(0,m.jsx)(s,{message:r.message});let _=n.pending.has(`heartbeat.md`);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`label`,{className:`settings-field settings-field-textarea`,htmlFor:`hb-md`,children:[(0,m.jsx)(`span`,{className:`settings-field-label`,children:`Template`}),(0,m.jsx)(`textarea`,{id:`hb-md`,rows:10,spellCheck:!1,value:i,onChange:e=>a(e.target.value),style:{fontFamily:`ui-monospace, monospace`}})]}),(0,m.jsx)(`div`,{className:`settings-heartbeat-md-footer`,children:(0,m.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void g(),disabled:u||!_,children:u?`Saving…`:`Save template`})}),f?(0,m.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:f}):null]})}function N({port:e,client:t,dirty:n,registerSave:h}){let g=r(t,`/api/settings`),_=r(t,`/api/heartbeat`),v=r(t,`/api/heartbeat-md`),[x,w]=(0,p.useState)(!1),[T,D]=(0,p.useState)(`30m`),[O,k]=(0,p.useState)(`08:00`),[A,N]=(0,p.useState)(`22:00`),[P,F]=(0,p.useState)(`all`);(0,p.useEffect)(()=>{if(g.state.kind!==`ready`)return;let e=g.state.data.heartbeat||{};w(!!e.enabled),D(typeof e.every==`string`?e.every:`30m`),k(e.activeHours?.start??`08:00`),N(e.activeHours?.end??`22:00`),F(typeof e.target==`string`?e.target:`all`)},[g.state]),(0,p.useEffect)(()=>()=>{for(let e of b)n.remove(e)},[n]);let I=(0,p.useMemo)(()=>g.state.kind===`ready`&&g.state.data.heartbeat||{},[g.state]),L=(0,p.useCallback)((e,t)=>n.set(e,t),[n]),R=(0,p.useRef)(0),z=(0,p.useCallback)(async()=>{let e=n.saveBundle(),r={};for(let[t,n]of Object.entries(e))E(t)&&(r[t]=n);if(Object.keys(r).length===0)return;let i=++R.current,a=f(r),o=await t.put(`/api/settings`,a);if(i!==R.current)return;let s=o&&typeof o==`object`&&`data`in o?o.data:o;for(let e of b)n.remove(e);g.setData(s);let c=s.heartbeat||{};w(!!c.enabled),D(typeof c.every==`string`?c.every:`30m`),k(c.activeHours?.start??`08:00`),N(c.activeHours?.end??`22:00`),F(typeof c.target==`string`?c.target:`all`),await g.refresh()},[t,n,g]);if((0,p.useEffect)(()=>{if(h)return h(z),()=>h(null)},[h,z]),g.state.kind===`loading`)return(0,m.jsx)(a,{});if(g.state.kind===`offline`)return(0,m.jsx)(o,{port:e});if(g.state.kind===`error`)return(0,m.jsx)(s,{message:g.state.message});let B=S(T)?null:"Use the form `<n>s|m|h`, e.g. `30m`",V=C(O)?null:`Use HH:MM (24h)`,H=C(A)?null:`Use HH:MM (24h)`,U=g.state.data.perCli||{},W=Object.keys(U),G=[{value:`all`,label:`all (broadcast)`},...(W.length>0?W:[...y]).map(e=>({value:e,label:d(e).label||e}))];return G.some(e=>e.value===P)||G.push({value:P,label:`${d(P).label||P} (legacy)`}),(0,m.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),z()},children:[(0,m.jsxs)(i,{title:`Heartbeat`,hint:`Background prompts the agent runs on a schedule.`,children:[(0,m.jsx)(c,{id:`hb-enabled`,label:`Heartbeat enabled`,value:x,onChange:e=>{w(e),L(`heartbeat.enabled`,{value:e,original:!!I.enabled,valid:!0})}}),(0,m.jsx)(u,{id:`hb-every`,label:`Default interval`,value:T,placeholder:`30m`,error:B,onChange:e=>{D(e),L(`heartbeat.every`,{value:e,original:I.every??`30m`,valid:S(e)})}}),(0,m.jsx)(u,{id:`hb-start`,label:`Active hours start`,value:O,placeholder:`08:00`,error:V,onChange:e=>{k(e),L(`heartbeat.activeHours.start`,{value:e,original:I.activeHours?.start??`08:00`,valid:C(e)})}}),(0,m.jsx)(u,{id:`hb-end`,label:`Active hours end`,value:A,placeholder:`22:00`,error:H,onChange:e=>{N(e),L(`heartbeat.activeHours.end`,{value:e,original:I.activeHours?.end??`22:00`,valid:C(e)})}}),(0,m.jsx)(l,{id:`hb-target`,label:`Target`,value:P,options:G,onChange:e=>{F(e),L(`heartbeat.target`,{value:e,original:I.target??`all`,valid:!0})}})]}),(0,m.jsx)(i,{title:`Jobs`,hint:`Each job replaces the entire heartbeat.json on save. Concurrent edits from multiple browsers will overwrite — last write wins.`,children:(0,m.jsx)(j,{port:e,client:t,dirty:n,snapshot:_.state})}),(0,m.jsx)(i,{title:`Default heartbeat prompt template`,hint:`Markdown shown to the agent when a heartbeat fires without a job-specific prompt.`,children:(0,m.jsx)(M,{port:e,client:t,dirty:n,snapshot:v.state})})]})}export{x as PAGE_LOCAL_KEYS,b as SECTION_A_KEYS,y as TARGET_FALLBACK,N as default,E as isHeartbeatSettingsKey,k as jobScheduleBodyError,A as jobsHaveErrors,T as makeDefaultJob,O as normalizeJobsResponse,C as validateHHMM,S as validateInterval};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./jsx-runtime-
|
|
1
|
+
import{t as e}from"./jsx-runtime-CkEUZM6i.js";var t=e();function n({children:e,tone:n=`warn`,role:r=`note`}){let i=`settings-inline-warn settings-inline-warn-${n}`;return r===`alert`?(0,t.jsx)(`p`,{className:i,role:`alert`,children:e}):(0,t.jsx)(`p`,{className:i,role:`note`,children:e})}export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./MarkdownRenderer-DzN66XVb.js";export{e as MarkdownRenderer};
|