@vantran-se/openchamber-web 1.24.4 → 2.0.2
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 +2 -8
- package/bin/lib/commands-connect-url.js +3 -8
- package/bin/lib/commands-tunnel.js +3 -0
- package/dist/assets/{CodeMirrorCommentWidgets-B4a0JkUz.js → CodeMirrorCommentWidgets-B82Oye3V.js} +1 -1
- package/dist/assets/DiffView-DJLmWn6Z.js +4 -0
- package/dist/assets/FilesView-DjksmZRo.js +17 -0
- package/dist/assets/{GitView-Byu2DY7s.js → GitView-DiUsUIgr.js} +4 -4
- package/dist/assets/{GuestAttachDialog-B808E0-d.js → GuestAttachDialog-CYwWYLr3.js} +1 -1
- package/dist/assets/GuestSurfacePane-CmctyRI4.js +1 -0
- package/dist/assets/{JsonTreeView-VW_7czo3.js → JsonTreeView-DOHHcbgJ.js} +1 -1
- package/dist/assets/LinearIssuesView-DaqnylcV.js +1 -0
- package/dist/assets/MarkdownImageGallery-HJNvWt7L.js +1 -0
- package/dist/assets/MarkdownRendererImpl-nDZRGg2I.js +12 -0
- package/dist/assets/OnboardingScreen-C2B5Bsof.js +1 -0
- package/dist/assets/{PatchDiff-DCjGhlYV.js → PatchDiff-C4FLBjpt.js} +1 -1
- package/dist/assets/{PierreDiffViewer-CEDZNkU2.js → PierreDiffViewer-C_1S9c9n.js} +1 -1
- package/dist/assets/PlanView-_eZvb-G5.js +5 -0
- package/dist/assets/PluginPane-sM8fcZIV.js +3 -0
- package/dist/assets/SettingsView-BRfr46hb.js +29 -0
- package/dist/assets/SettingsWindow-CcUDwQHg.js +1 -0
- package/dist/assets/SubmoduleDiffSummary-CrN1ZGwl.js +1 -0
- package/dist/assets/ToolOutputDialog-Cij4jI09.js +15 -0
- package/dist/assets/ToolPartDiffPreview-BXzwQ-JY.js +8 -0
- package/dist/assets/{VirtualizedFileDiff-NU0FHFhT.js → VirtualizedFileDiff-DSWTLJNH.js} +4 -4
- package/dist/assets/{WalkthroughView-BZyjhqHv.js → WalkthroughView-CpUUgY8H.js} +2 -2
- package/dist/assets/appThemeRegistry-B5tHTkR8.js +1 -0
- package/dist/assets/{commitAndPush-BDftrjr6.js → commitAndPush-D7D8qV8p.js} +1 -1
- package/dist/assets/{computeVirtualFileMetrics-DlWlEM3x.js → computeVirtualFileMetrics-cq9uQ30i.js} +1 -1
- package/dist/assets/de-CUO1-KqF.js +10 -0
- package/dist/assets/es-BlbC6sGJ.js +16 -0
- package/dist/assets/fr-D2nwe_0W.js +14 -0
- package/dist/assets/index-BQOoYIOu.js +1 -0
- package/dist/assets/index-CLcM8HKx.css +1 -0
- package/dist/assets/index-CvLgnuNI.js +41 -0
- package/dist/assets/{isDiffPlainText-CO4e5J_S.js → isDiffPlainText-D0obJ2p8.js} +1 -1
- package/dist/assets/{isFilePlainText-ue6kCou7.js → isFilePlainText-DB3_rjyW.js} +1 -1
- package/dist/assets/ja-CA7vnDsZ.js +16 -0
- package/dist/assets/ko-Chy6a9l-.js +16 -0
- package/dist/assets/main-B9JFK3vF.js +896 -0
- package/dist/assets/main-Bhiqnrhd.js +2 -0
- package/dist/assets/{markdownCore-CK48LG0z.js → markdownCore-tfqOFaBd.js} +4 -4
- package/dist/assets/miniChat-B0UOL5zA.js +2 -0
- package/dist/assets/mobile-BJppFIEo.js +2 -0
- package/dist/assets/{patchFileDiff-D7QVlovD.js → patchFileDiff-Db6KuwCP.js} +3 -3
- package/dist/assets/pl-CTR5A_1P.js +16 -0
- package/dist/assets/pt-BR-BE1O1KEx.js +16 -0
- package/dist/assets/renderElectronMiniChatApp-Yz5sfoFh.js +2 -0
- package/dist/assets/renderMobileApp-QQ-yB8aY.js +25 -0
- package/dist/assets/runtimeEndpointReset-DKDdzRzm.js +27 -0
- package/dist/assets/scheduledTasksApi-C5sCuNqf.js +1 -0
- package/dist/assets/{shikiHighlight-BPu3JiQs.js → shikiHighlight-xURoo5t_.js} +1 -1
- package/dist/assets/{textMateThemeFromAppTheme-DWqRPo9A.js → textMateThemeFromAppTheme-BZLGuYTU.js} +1 -1
- package/dist/assets/tr-Bh5vK6cW.js +7 -0
- package/dist/assets/uk-CLDkZFy_.js +16 -0
- package/dist/assets/useAppFontEffects-BxrtCnfR.js +7337 -0
- package/dist/assets/{useInlineCommentController-CgS0fnw_.js → useInlineCommentController-CeXuR-SR.js} +2 -2
- package/dist/assets/useRootScrollLock-DgWxezc1.js +2 -0
- package/dist/assets/{vendor-codemirror-language-data-Bx2EHc1O.js → vendor-codemirror-language-data-DOuaQUZ0.js} +2 -2
- package/dist/assets/vendor-cron-parser-CjvYVigk.js +2 -0
- package/dist/assets/vendor-opencode-client-_BAHQo4R.js +12 -0
- package/dist/assets/{vendor-remixicon-react-BDmGmFCA.js → vendor-remixicon-react-D6dZ0UwF.js} +1 -1
- package/dist/assets/{vendor-zod-CgAdXWZO.js → vendor-zod-Gea9uBlY.js} +1 -1
- package/dist/assets/{web-components-DxX8bZ1o.js → web-components-63H1h21j.js} +2 -2
- package/dist/assets/zh-CN-DODgcmYj.js +16 -0
- package/dist/assets/zh-TW-ByNfIwLA.js +16 -0
- package/dist/index.html +13 -7
- package/dist/mini-chat.html +5 -5
- package/dist/mobile.html +5 -5
- package/package.json +6 -5
- package/server/index.d.ts +1 -0
- package/server/index.js +246 -91
- package/server/lib/agent-tool/DOCUMENTATION.md +32 -15
- package/server/lib/agent-tool/runtime.js +135 -54
- package/server/lib/agent-tool/runtime.test.js +155 -87
- package/server/lib/browser-control/DOCUMENTATION.md +37 -2
- package/server/lib/browser-control/provider.js +217 -0
- package/server/lib/browser-control/provider.test.js +251 -0
- package/server/lib/context-obligatory/runtime.js +61 -50
- package/server/lib/context-obligatory/runtime.test.js +62 -162
- package/server/lib/event-stream/DOCUMENTATION.md +12 -1
- package/server/lib/event-stream/delta-coalescer.js +0 -0
- package/server/lib/event-stream/delta-coalescer.test.js +68 -57
- package/server/lib/event-stream/directory-ws-bridge.js +1 -1
- package/server/lib/event-stream/global-hub.js +10 -1
- package/server/lib/event-stream/global-hub.test.js +27 -26
- package/server/lib/event-stream/index.js +6 -0
- package/server/lib/event-stream/protocol.js +26 -19
- package/server/lib/event-stream/protocol.test.js +18 -7
- package/server/lib/event-stream/rebind.test.js +5 -5
- package/server/lib/event-stream/runtime.test.js +17 -15
- package/server/lib/event-stream/translate-v2.js +313 -0
- package/server/lib/event-stream/translate-v2.test.js +209 -0
- package/server/lib/event-stream/upstream-reader.test.js +16 -16
- package/server/lib/fs/DOCUMENTATION.md +4 -2
- package/server/lib/fs/byte-range.js +35 -0
- package/server/lib/fs/byte-range.test.js +31 -0
- package/server/lib/fs/routes.js +47 -42
- package/server/lib/fs/routes.test.js +123 -18
- package/server/lib/git/service.js +12 -0
- package/server/lib/github/DOCUMENTATION.md +1 -1
- package/server/lib/github/pr-status.js +22 -2
- package/server/lib/github/pr-status.test.js +27 -14
- package/server/lib/guests/DOCUMENTATION.md +13 -0
- package/server/lib/guests/catalog.js +12 -0
- package/server/lib/guests/catalog.test.js +33 -0
- package/server/lib/guests/routes.js +10 -1
- package/server/lib/guests/service.js +192 -14
- package/server/lib/guests/service.test.js +201 -1
- package/server/lib/guests/surface.js +630 -0
- package/server/lib/guests/surface.test.js +486 -0
- package/server/lib/markdown-image-grants/routes.js +18 -5
- package/server/lib/markdown-image-grants/routes.test.js +9 -6
- package/server/lib/message-queue/DOCUMENTATION.md +33 -22
- package/server/lib/message-queue/runtime.js +155 -100
- package/server/lib/message-queue/runtime.test.js +168 -82
- package/server/lib/notifications/DOCUMENTATION.md +28 -0
- package/server/lib/notifications/control-stream.http.test.js +68 -0
- package/server/lib/notifications/emitter-runtime.js +15 -0
- package/server/lib/notifications/emitter-runtime.test.js +32 -0
- package/server/lib/notifications/push-runtime.js +5 -1
- package/server/lib/notifications/push-runtime.test.js +2 -2
- package/server/lib/notifications/routes.js +1 -1
- package/server/lib/notifications/runtime.js +115 -26
- package/server/lib/notifications/template-runtime.js +13 -15
- package/server/lib/notifications/template-runtime.test.js +16 -9
- package/server/lib/notifications/trigger-runtime.test.js +187 -0
- package/server/lib/openchamber-control/DOCUMENTATION.md +10 -0
- package/server/lib/openchamber-control/actions.js +3 -2
- package/server/lib/openchamber-control/error.js +1 -1
- package/server/lib/openchamber-control/file-open.js +59 -0
- package/server/lib/openchamber-control/file-open.test.js +57 -0
- package/server/lib/openchamber-control/routes.test.js +12 -0
- package/server/lib/openchamber-control/service.js +102 -49
- package/server/lib/openchamber-control/service.test.js +84 -44
- package/server/lib/openchamber-sessions/archive-store.js +224 -0
- package/server/lib/openchamber-sessions/archive-store.test.js +187 -0
- package/server/lib/openchamber-sessions/opencode-client.js +22 -0
- package/server/lib/openchamber-sessions/routes.js +398 -328
- package/server/lib/openchamber-sessions/routes.test.js +777 -740
- package/server/lib/openchamber-sessions/session-metadata-store.js +285 -0
- package/server/lib/openchamber-sessions/session-metadata-store.test.js +259 -0
- package/server/lib/opencode/DOCUMENTATION.md +449 -29
- package/server/lib/opencode/agents.js +233 -327
- package/server/lib/opencode/auth.js +41 -44
- package/server/lib/opencode/auth.test.js +92 -0
- package/server/lib/opencode/cli-upgrade.d.ts +4 -0
- package/server/lib/opencode/cli-upgrade.js +18 -0
- package/server/lib/opencode/cli-upgrade.test.js +36 -0
- package/server/lib/opencode/commands.js +164 -145
- package/server/lib/opencode/compatibility.d.ts +16 -0
- package/server/lib/opencode/compatibility.js +88 -0
- package/server/lib/opencode/compatibility.test.js +62 -0
- package/server/lib/opencode/config-entity-routes.js +58 -29
- package/server/lib/opencode/config-entity-v2.test.js +290 -0
- package/server/lib/opencode/config-mutation-response.js +17 -7
- package/server/lib/opencode/config-mutation-response.test.js +4 -7
- package/server/lib/opencode/config-paths.test.js +2 -2
- package/server/lib/opencode/config-v2.d.ts +183 -0
- package/server/lib/opencode/config-v2.js +801 -0
- package/server/lib/opencode/config-v2.test.js +466 -0
- package/server/lib/opencode/credential-db.js +144 -0
- package/server/lib/opencode/credential-db.test.js +104 -0
- package/server/lib/opencode/env-runtime.js +48 -9
- package/server/lib/opencode/env-runtime.test.js +45 -0
- package/server/lib/opencode/feature-routes-runtime.js +15 -5
- package/server/lib/opencode/lifecycle-process.test.js +7 -4
- package/server/lib/opencode/lifecycle.js +85 -30
- package/server/lib/opencode/lifecycle.test.js +80 -8
- package/server/lib/opencode/login-shell-env.js +27 -0
- package/server/lib/opencode/managed-config-file.js +119 -0
- package/server/lib/opencode/managed-config-file.test.js +152 -0
- package/server/lib/opencode/managed-plugin-config.js +33 -13
- package/server/lib/opencode/mcp.js +43 -149
- package/server/lib/opencode/network-runtime.js +6 -7
- package/server/lib/opencode/openchamber-routes.test.js +2 -5
- package/server/lib/opencode/plugin-routes.js +3 -3
- package/server/lib/opencode/plugin-routes.test.js +6 -24
- package/server/lib/opencode/plugins.js +91 -40
- package/server/lib/opencode/plugins.test.js +28 -15
- package/server/lib/opencode/providers.js +63 -83
- package/server/lib/opencode/providers.test.js +128 -59
- package/server/lib/opencode/proxy-agent-wiring.test.js +4 -2
- package/server/lib/opencode/proxy.js +179 -129
- package/server/lib/opencode/pwa-manifest-routes.js +4 -2
- package/server/lib/opencode/pwa-manifest-routes.test.js +3 -2
- package/server/lib/opencode/response-envelope.js +14 -0
- package/server/lib/opencode/response-envelope.test.js +23 -0
- package/server/lib/opencode/routes-upgrade.test.js +73 -116
- package/server/lib/opencode/routes.js +121 -428
- package/server/lib/opencode/server-utils-runtime.js +10 -4
- package/server/lib/opencode/session-activity.js +78 -0
- package/server/lib/opencode/session-runtime.js +21 -10
- package/server/lib/opencode/session-runtime.test.js +9 -9
- package/server/lib/opencode/settings-helpers.js +9 -9
- package/server/lib/opencode/settings-helpers.test.js +7 -12
- package/server/lib/opencode/settings-registry.json +6 -8
- package/server/lib/opencode/settings-runtime.js +18 -1
- package/server/lib/opencode/settings-runtime.test.js +31 -2
- package/server/lib/opencode/shared.js +54 -22
- package/server/lib/opencode/shared.test.js +8 -4
- package/server/lib/opencode/shutdown-runtime.js +54 -7
- package/server/lib/opencode/shutdown-runtime.test.js +224 -30
- package/server/lib/opencode/skill-routes.js +23 -24
- package/server/lib/opencode/skills.js +7 -5
- package/server/lib/opencode/tunnel-wiring-runtime.js +2 -1
- package/server/lib/opencode/upgrade-capability.test.js +1 -1
- package/server/lib/opencode/v1-migration-topup.js +288 -0
- package/server/lib/opencode/v1-migration-topup.test.js +266 -0
- package/server/lib/opencode/v2-install.d.ts +8 -0
- package/server/lib/opencode/v2-install.js +158 -0
- package/server/lib/opencode/v2-install.test.js +124 -0
- package/server/lib/opencode/watcher.js +10 -3
- package/server/lib/opencode/watcher.test.js +17 -21
- package/server/lib/opencode/websearch-config.js +66 -0
- package/server/lib/package-manager.js +55 -68
- package/server/lib/package-manager.test.js +241 -75
- package/server/lib/permission-auto-accept/runtime.js +38 -22
- package/server/lib/permission-auto-accept/runtime.test.js +39 -17
- package/server/lib/quota/DOCUMENTATION.md +4 -0
- package/server/lib/quota/providers/xai.js +4 -4
- package/server/lib/relay/tunnel-host.js +4 -1
- package/server/lib/relay/tunnel-host.test.js +7 -0
- package/server/lib/routing/DOCUMENTATION.md +52 -21
- package/server/lib/routing/defaults.js +23 -6
- package/server/lib/routing/jev.js +17 -7
- package/server/lib/routing/routes.http.test.js +68 -33
- package/server/lib/routing/routes.js +65 -22
- package/server/lib/routing/runtime.js +145 -48
- package/server/lib/routing/runtime.test.js +79 -55
- package/server/lib/scheduled-tasks/DOCUMENTATION.md +4 -0
- package/server/lib/scheduled-tasks/issue-2710-double-execution.test.js +51 -46
- package/server/lib/scheduled-tasks/runtime.js +81 -74
- package/server/lib/scheduled-tasks/runtime.test.js +53 -1
- package/server/lib/session-assist/DOCUMENTATION.md +8 -3
- package/server/lib/session-assist/context.js +122 -46
- package/server/lib/session-assist/context.test.js +117 -49
- package/server/lib/session-assist/runtime.js +52 -22
- package/server/lib/session-assist/runtime.test.js +145 -173
- package/server/lib/session-goal/DOCUMENTATION.md +23 -15
- package/server/lib/session-goal/create.js +9 -12
- package/server/lib/session-goal/create.test.js +27 -28
- package/server/lib/session-goal/runtime.js +164 -77
- package/server/lib/session-goal/runtime.test.js +271 -519
- package/server/lib/session-knowledge/DOCUMENTATION.md +5 -0
- package/server/lib/session-knowledge/runtime.js +59 -41
- package/server/lib/session-knowledge/runtime.test.js +90 -20
- package/server/lib/small-model/DOCUMENTATION.md +154 -208
- package/server/lib/small-model/client.js +113 -0
- package/server/lib/small-model/index.js +296 -158
- package/server/lib/small-model/index.test.js +423 -256
- package/server/lib/small-model/routes.js +1 -1
- package/server/lib/spaces/DOCUMENTATION.md +807 -0
- package/server/lib/spaces/code-in-bait.js +185 -0
- package/server/lib/spaces/code-in.js +641 -0
- package/server/lib/spaces/code-in.test.js +1048 -0
- package/server/lib/spaces/errors.js +8 -0
- package/server/lib/spaces/exec-http.js +94 -0
- package/server/lib/spaces/gatekeeper-channel.js +202 -0
- package/server/lib/spaces/gatekeeper-channel.test.js +215 -0
- package/server/lib/spaces/gatekeeper-program.cjs +914 -0
- package/server/lib/spaces/gatekeeper-program.test.js +1391 -0
- package/server/lib/spaces/hardening.js +457 -0
- package/server/lib/spaces/hardening.test.js +368 -0
- package/server/lib/spaces/host-git.js +127 -0
- package/server/lib/spaces/host-git.test.js +137 -0
- package/server/lib/spaces/labels.js +234 -0
- package/server/lib/spaces/labels.test.js +219 -0
- package/server/lib/spaces/layout.js +184 -0
- package/server/lib/spaces/layout.test.js +30 -0
- package/server/lib/spaces/manager.js +82 -0
- package/server/lib/spaces/manager.test.js +114 -0
- package/server/lib/spaces/places/code-in.docker.live.test.js +216 -0
- package/server/lib/spaces/places/contract-suite.js +156 -0
- package/server/lib/spaces/places/contract.docker.live.test.js +7 -0
- package/server/lib/spaces/places/contract.test.js +6 -0
- package/server/lib/spaces/places/docker-engine.js +126 -0
- package/server/lib/spaces/places/docker-live-support.js +202 -0
- package/server/lib/spaces/places/docker-tools.js +186 -0
- package/server/lib/spaces/places/docker.js +587 -0
- package/server/lib/spaces/places/docker.test.js +1610 -0
- package/server/lib/spaces/places/escape-suite.js +1018 -0
- package/server/lib/spaces/places/escape.docker.live.test.js +7 -0
- package/server/lib/spaces/places/fake-docker.js +375 -0
- package/server/lib/spaces/places/memory-place.js +103 -0
- package/server/lib/spaces/places/packed.docker.live.test.js +77 -0
- package/server/lib/spaces/places/registry.js +43 -0
- package/server/lib/spaces/places/registry.test.js +50 -0
- package/server/lib/spaces/places/server.docker.live.test.js +225 -0
- package/server/lib/spaces/run-command.js +261 -0
- package/server/lib/spaces/run-command.test.js +396 -0
- package/server/lib/spaces/space-server.js +190 -0
- package/server/lib/spaces/space-server.test.js +335 -0
- package/server/lib/spaces/tools-filler.js +82 -0
- package/server/lib/spaces/tools-filler.test.js +148 -0
- package/server/lib/spaces/tools-pack.js +49 -0
- package/server/lib/spaces/tools-pack.test.js +57 -0
- package/server/lib/spaces/tools.js +138 -0
- package/server/lib/spaces/tools.test.js +153 -0
- package/server/lib/tts/openai-sdk.js +11 -0
- package/server/lib/tts/service.js +7 -5
- package/server/lib/tts/stt.js +3 -2
- package/server/lib/tunnels/DOCUMENTATION.md +2 -0
- package/server/lib/tunnels/routes.js +7 -0
- package/server/lib/tunnels/routes.test.js +55 -0
- package/server/lib/ui-auth/ui-auth.js +38 -2
- package/server/lib/ui-auth/ui-auth.test.js +42 -0
- package/server/lib/ui-auth/ui-passkeys.js +12 -10
- package/server/lib/walkthrough/DOCUMENTATION.md +10 -1
- package/server/lib/walkthrough/pull-request.js +61 -8
- package/server/lib/walkthrough/pull-request.test.js +54 -1
- package/server/lib/walkthrough/routes.js +20 -0
- package/server/lib/walkthrough/routes.test.js +19 -0
- package/server/opencode-proxy.test.js +190 -166
- package/server/opencode-worktree-readiness.test.js +5 -4
- package/dist/assets/DiffView-B2CD9wC8.js +0 -4
- package/dist/assets/FilesView-C4vMFclc.js +0 -13
- package/dist/assets/LinearIssuesView-EzGNCGrd.js +0 -1
- package/dist/assets/MarkdownImageGallery-B2YUDFaB.js +0 -1
- package/dist/assets/MarkdownRendererImpl-B4ikIzR3.js +0 -12
- package/dist/assets/OnboardingScreen-CQHBSTEi.js +0 -1
- package/dist/assets/PlanView-D3x-pTkZ.js +0 -5
- package/dist/assets/PluginPane-DEcgDQ9h.js +0 -3
- package/dist/assets/SettingsView-CSinuH-1.js +0 -29
- package/dist/assets/SettingsWindow-B5CHoJFZ.js +0 -1
- package/dist/assets/SubmoduleDiffSummary-oxeACCWs.js +0 -1
- package/dist/assets/ToolOutputDialog-tLNWmfcW.js +0 -15
- package/dist/assets/ToolPartDiffPreview-CflzmK-x.js +0 -8
- package/dist/assets/appThemeRegistry-DLicw4dH.js +0 -1
- package/dist/assets/de-Bro6_zyl.js +0 -10
- package/dist/assets/es-Bb9XQZvd.js +0 -16
- package/dist/assets/fr-Dgfzn-IL.js +0 -14
- package/dist/assets/index-CtQNmqUL.js +0 -1
- package/dist/assets/index-DqaMWNrC.css +0 -1
- package/dist/assets/index-Dqc6USl3.js +0 -40
- package/dist/assets/ja-BYsakGFh.js +0 -16
- package/dist/assets/ko-BSaQz9aN.js +0 -16
- package/dist/assets/main-B62_pjL5.js +0 -2
- package/dist/assets/main-BEdcOI2P.js +0 -896
- package/dist/assets/miniChat-LT8Rqofr.js +0 -2
- package/dist/assets/mobile-CqarEynh.js +0 -2
- package/dist/assets/pl-OIviPdoj.js +0 -16
- package/dist/assets/pt-BR-Cltg-E6s.js +0 -16
- package/dist/assets/renderElectronMiniChatApp-COyLTtZx.js +0 -2
- package/dist/assets/renderMobileApp-BC1MHg6g.js +0 -25
- package/dist/assets/runtimeEndpointReset-DdrazOVH.js +0 -25
- package/dist/assets/scheduledTasksApi-B2SWMGEU.js +0 -1
- package/dist/assets/tr-CQI-KPre.js +0 -7
- package/dist/assets/uk-CqW7R4DA.js +0 -16
- package/dist/assets/useAppFontEffects-ne84JBVL.js +0 -7333
- package/dist/assets/useRootScrollLock-Cpf1qoGp.js +0 -2
- package/dist/assets/vendor-cron-parser-CUcP7OfX.js +0 -2
- package/dist/assets/vendor-opencode-sdk-BJ73u-bH.js +0 -7
- package/dist/assets/zh-CN-CVZG_o_J.js +0 -16
- package/dist/assets/zh-TW-D5ZxzCZp.js +0 -16
- package/server/lib/opencode/mcp-oauth-callback.test.js +0 -111
- package/server/lib/routing/feature-flag.js +0 -11
- package/server/lib/small-model/call.js +0 -851
- package/server/lib/small-model/call.test.js +0 -1292
- package/server/lib/small-model/catalog.js +0 -13
- package/server/lib/small-model/resolve.js +0 -131
- package/server/lib/small-model/resolve.test.js +0 -197
- package/server/lib/small-model/runtime-providers.js +0 -164
- package/server/lib/small-model/runtime-providers.test.js +0 -118
- package/server/lib/system-prompt/DOCUMENTATION.md +0 -36
- package/server/lib/system-prompt/runtime.js +0 -49
- package/server/lib/system-prompt/runtime.test.js +0 -76
- package/server/lib/walkthrough/reproduce-2607.test.js +0 -148
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{R as C,f as ae,j as re}from"./vendor-react-BUCujlKS.js";import{m as Ht}from"./vendor-morphdom-B7dS_VPB.js";import{r as Vt,a as Kt}from"./vendor-beautiful-mermaid-DztCUpLZ.js";import{gu as lt,gv as jt,gw as Ut,gx as Zt,gy as Xt,g as we,bm as Gt,bp as Yt,gz as Jt,gA as Qt,Z as ct,af as dt,gB as ut,f as mt,h as pt,eE as en,eF as qe,gC as tn,gD as Be,gE as nn,gF as rn,gG as on,gH as sn,gI as an,o as ln}from"./useAppFontEffects-ne84JBVL.js";import{h as cn,O as ft,L as oe,cM as dn,u as Y,a as un,a$ as mn,E as pn,F as fn}from"./index-Dqc6USl3.js";import{getCachedMarkdownBlocks as $e,renderMarkdownSync as hn,renderMarkdownBlocks as gn}from"./markdownCore-CK48LG0z.js";import{b as bn,r as wn}from"./textMateThemeFromAppTheme-DWqRPo9A.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-elkjs-BRwcR927.js";import"./vendor-entities-C3BA0AJP.js";import"./vendor-zod-CgAdXWZO.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-base-ui-CsXYnR5c.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-ClYN8CzB.js";import"./vendor-tanstack-virtual-core-BewVQryB.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Bx2EHc1O.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-marked-CX41MkDF.js";import"./vendor-marked-linkify-it-CXI_LHIE.js";import"./vendor-linkify-it-DZCzzDkK.js";import"./vendor-uc.micro-BAd0H0z4.js";import"./vendor-remend-BWYYytN3.js";import"./vendor-katex-CHD9BdDO.js";import"./vendor-dompurify-r8glNMJW.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";const ht=t=>{const e=t.target;if(!(e instanceof Element))return null;const n=e.closest("a[href]");return!(n instanceof HTMLAnchorElement)||n.getAttribute("data-openchamber-file-link")==="true"?null:n},Ne=(t,e)=>{if(t.defaultPrevented)return!1;const r=ht(t)?.getAttribute("href")??"";return jt(r)?(t.preventDefault(),t.stopPropagation(),e?.(r),!0):!1},yn=t=>t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.altKey&&!t.shiftKey,An=(t,e)=>{const n=o=>{if(Ne(o,e.openAppLink)||!e.allowExternalHttp||o.defaultPrevented||!yn(o))return;const s=ht(o)?.getAttribute("href")??"";lt(s)&&(o.preventDefault(),o.stopPropagation(),e.openExternalHttp(s))},r=o=>{o.button===1&&Ne(o,e.openAppLink)},i=o=>{Ne(o)};return t.addEventListener("click",n),t.addEventListener("auxclick",r),t.addEventListener("dragstart",i),()=>{t.removeEventListener("click",n),t.removeEventListener("auxclick",r),t.removeEventListener("dragstart",i)}},gt="openchamber-md",ye={background:"transparent",foreground:"var(--md-syntax-foreground)",comment:"var(--md-syntax-comment)",keyword:"var(--md-syntax-keyword)",string:"var(--md-syntax-string)",number:"var(--md-syntax-number)",function:"var(--md-syntax-function)",variable:"var(--md-syntax-variable)",type:"var(--md-syntax-type)",operator:"var(--md-syntax-operator)"},vn=Object.fromEntries(Object.keys(Ut({base:ye})).map(t=>[t,`var(--md-token-${t})`])),kn={name:gt,colors:{"editor.background":"transparent","editor.foreground":ye.foreground},tokenColors:[...bn({base:ye,tokens:vn}),{scope:["markup.bold","punctuation.definition.bold"],settings:{fontStyle:"bold"}},{scope:["markup.italic","punctuation.definition.italic"],settings:{fontStyle:"italic"}},{scope:["markup.heading","markup.heading entity.name"],settings:{foreground:ye.keyword,fontStyle:"bold"}},{scope:["markup.inserted","punctuation.definition.inserted"],settings:{foreground:"var(--md-syntax-inserted)"}},{scope:["markup.deleted","punctuation.definition.deleted","invalid","invalid.illegal"],settings:{foreground:"var(--md-syntax-deleted)"}}]};let ze=!1;const Cn=()=>{ze||(ze=!0,wn(gt,()=>Promise.resolve(kn)))},T=t=>Number.isFinite(t)&&t>0,He=t=>{if(t==null)return null;const e=String(t).trim().match(/^([+-]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?)(?:px)?$/);if(!e)return null;const n=Number(e[1]);return T(n)?n:null},Re=(t,e,n)=>Math.min(n,Math.max(e,t)),En=6,Ve=1.25,Sn=1.0015,Ln=.5,Mn=12,Ke=3,Nn=400,ie='[data-markdown="mermaid-block"]',I=t=>t.querySelector(ie)!==null,Rn=t=>[t.x,t.y,t.width,t.height].map(e=>{const n=Number(e.toFixed(En));return Object.is(n,-0)?"0":String(n)}).join(" "),Tn=t=>{const e=t.viewBox?.trim().split(/[\s,]+/).map(i=>Number.parseFloat(i));if(e?.length===4){const[i,o,s,a]=e;if(Number.isFinite(i)&&Number.isFinite(o)&&T(s)&&T(a))return{x:i,y:o,width:s,height:a}}const n=He(t.width),r=He(t.height);return n===null||r===null?null:{x:0,y:0,width:n,height:r}},_n=t=>{let e=2166136261;for(let n=0;n<t.length;n+=1)e^=t.charCodeAt(n),e=Math.imul(e,16777619);return(e>>>0).toString(36)},xn=t=>{const e=t.renderMode||"unknown",n=t.svgMarkup??"";if(!n){const r=[t.viewBox??"",t.width??"",t.height??""];return r.some(i=>i!=="")?`${e}:bounds:${r.join(":")}`:`${e}:no-svg`}return[e,_n(n)].join(":")},bt=(t,e)=>{if(!T(e.width)||!T(e.height))return t;const n=t.width/t.height,r=e.width/e.height;if(n>r){const o=t.width/r;return{x:t.x,y:t.y-(o-t.height)/2,width:t.width,height:o}}const i=t.height*r;return{x:t.x-(i-t.width)/2,y:t.y,width:i,height:t.height}},Pn=({currentBox:t,viewport:e,delta:n})=>!T(e.width)||!T(e.height)||!T(t.width)||!T(t.height)?t:{x:t.x-n.x/e.width*t.width,y:t.y-n.y/e.height*t.height,width:t.width,height:t.height},Fn=(t,e)=>{const n=e.x-t.x,r=e.y-t.y;return n*n+r*r>Ke*Ke},In=({currentBox:t,contentBox:e,viewport:n,pointer:r,zoomFactor:i,minScale:o,maxScale:s})=>{if(!T(n.width)||!T(n.height)||!T(i)||!T(t.width)||!T(t.height)||!T(e.width)||!T(e.height)||!T(o)||!T(s))return t;const a=Math.min(o,s),l=Math.max(o,s),c=bt(e,n),u=c.width/t.width,f=Re(u*i,a,l),m=c.width/f,g=m/(t.width/t.height),y=Re(r.x/n.width,0,1),v=Re(r.y/n.height,0,1),S=t.x+y*t.width,p=t.y+v*t.height;return{x:S-y*m,y:p-v*g,width:m,height:g}},Ae=new WeakMap,Ie=new WeakMap,j=new Set,se=new Set;let K=null,ne=null,Q=null;const Dn=t=>t.querySelector('[data-markdown="mermaid-viewport"]')??t.querySelector('[data-markdown="mermaid"]'),wt=t=>{const e=t.querySelector('[data-markdown="mermaid"] svg'),n=t.querySelector('[data-markdown="mermaid"]');return xn({renderMode:t.getAttribute("data-mermaid-render"),svgMarkup:n?.getAttribute("data-md-original-svg")??e?.outerHTML??null,viewBox:e?.getAttribute("viewBox"),width:e?.getAttribute("width"),height:e?.getAttribute("height")})},G=t=>{const e=t.getBoundingClientRect();return{width:e.width,height:e.height}},On=(t,e)=>{const n=e.getBoundingClientRect();return{x:t.clientX-n.left,y:t.clientY-n.top}},Wn=t=>t instanceof Element&&!!t.closest('button, a, [role="button"]'),yt=t=>{const e=t.map(n=>G(n.viewport));t.forEach((n,r)=>{const i=e[r];i&&n.fitToViewport(i)})},At=()=>{Q!==null||j.size===0||(Q=window.requestAnimationFrame(()=>{Q=null,yt(Array.from(j))}))},qn=()=>{if(K)return K;const t=globalThis.ResizeObserver;return t?(K=new t(e=>{for(const n of e)n.target instanceof HTMLElement&&Ie.get(n.target)?.fitToViewport({width:n.contentRect.width,height:n.contentRect.height})}),K):null},Bn=t=>{if(j.has(t))return;const e=j.size===0;j.add(t),Ie.set(t.viewport,t),qn()?.observe(t.viewport),e&&window.addEventListener("resize",At)},$n=t=>{j.delete(t)&&(K?.unobserve(t.viewport),Ie.delete(t.viewport),!(j.size>0)&&(K?.disconnect(),K=null,window.removeEventListener("resize",At),Q!==null&&(window.cancelAnimationFrame(Q),Q=null)))},zn=t=>{const e=Dn(t),n=t.querySelector('[data-markdown="mermaid"] svg');if(!e||!n)return null;const r=Tn({viewBox:n.getAttribute("viewBox"),width:n.getAttribute("width"),height:n.getAttribute("height")});if(!r)return null;let i=r,o=null,s=null,a=null,l=null;const c=d=>{i=d,n.setAttribute("viewBox",Rn(d)),n.removeAttribute("width"),n.removeAttribute("height")},u=d=>{c(bt(r,d))},f=()=>{u(G(e))},m=(d,b)=>{c(In({currentBox:i,contentBox:r,viewport:G(e),pointer:d,zoomFactor:b,minScale:Ln,maxScale:Mn}))},g=()=>{const d=G(e);m({x:d.width/2,y:d.height/2},Ve)},y=()=>{const d=G(e);m({x:d.width/2,y:d.height/2},1/Ve)},v=d=>{!d.ctrlKey&&!d.metaKey||(d.preventDefault(),d.stopPropagation(),m(On(d,e),Math.pow(Sn,-d.deltaY)))},S=d=>{d.button!==0||Wn(d.target)||(o=d.pointerId,s={x:d.clientX,y:d.clientY},a=s,l!==null&&(window.clearTimeout(l),l=null),t.removeAttribute("data-mermaid-suppress-click"),e.setPointerCapture?.(d.pointerId),t.setAttribute("data-mermaid-panning","true"),d.preventDefault())},p=d=>{if(o!==d.pointerId||!a)return;const b={x:d.clientX,y:d.clientY};c(Pn({currentBox:i,viewport:G(e),delta:{x:b.x-a.x,y:b.y-a.y}})),a=b,s&&Fn(s,b)&&t.setAttribute("data-mermaid-suppress-click","true"),d.preventDefault()},h=d=>{o===d.pointerId&&(e.releasePointerCapture?.(d.pointerId),o=null,s=null,a=null,t.removeAttribute("data-mermaid-panning"),t.hasAttribute("data-mermaid-suppress-click")&&(l=window.setTimeout(()=>{t.removeAttribute("data-mermaid-suppress-click"),l=null},Nn)))};e.addEventListener("wheel",v,{passive:!1}),e.addEventListener("pointerdown",S),e.addEventListener("pointermove",p),e.addEventListener("pointerup",h),e.addEventListener("pointercancel",h);const k={viewport:e,zoomIn:g,zoomOut:y,fit:f,fitToViewport:u,cleanup:()=>{$n(k),e.removeEventListener("wheel",v),e.removeEventListener("pointerdown",S),e.removeEventListener("pointermove",p),e.removeEventListener("pointerup",h),e.removeEventListener("pointercancel",h),l!==null&&window.clearTimeout(l),t.removeAttribute("data-mermaid-panning"),t.removeAttribute("data-mermaid-suppress-click"),Ae.delete(t)}};return k},vt=t=>{for(const[e,n]of t.controllers){const r=wt(e);(!t.container.contains(e)||r!==t.signatures.get(e))&&(n.cleanup(),t.controllers.delete(e),t.signatures.delete(e))}},Hn=t=>{if(t.disposed)return[];const e=[];for(const n of Array.from(t.container.querySelectorAll(ie))){if(t.controllers.has(n)||n.querySelector('[data-markdown="mermaid"] svg')===null)continue;const r=zn(n);r&&(t.controllers.set(n,r),t.signatures.set(n,wt(n)),Ae.set(n,r),e.push(r))}return e},kt=()=>{const t=Array.from(se);se.clear();const e=[];for(const n of t)n.disposed||(vt(n),e.push(...Hn(n)));yt(e);for(const n of e)Bn(n)},Vn=()=>{ne===null&&(ne=window.requestAnimationFrame(()=>{ne=null,ne=window.requestAnimationFrame(()=>{ne=null,kt()})}))},Kn=t=>{t.disposed||(vt(t),se.add(t),Vn())},jn=t=>{if(!(t instanceof HTMLElement))return null;const e=Ae.get(t);if(e)return e;for(const n of se)if(n.container.contains(t))return kt(),Ae.get(t)??null;return null},Un=t=>{const e={container:t,controllers:new Map,signatures:new Map,disposed:!1},n=()=>Kn(e),r=()=>{e.disposed=!0,se.delete(e);for(const i of e.controllers.values())i.cleanup();e.controllers.clear(),e.signatures.clear()};return n(),{refresh:n,cleanup:r}},Zn={copy:"file-copy",check:"check",download:"download",zoomIn:"add",zoomOut:"subtract",fit:"refresh",textWrap:"text-wrap",image:"file-image",disclosure:"arrow-right-s"},Ct="p-1 rounded hover:bg-interactive-hover/60 text-muted-foreground hover:text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--interactive-focus-ring)]",ee=(t,e)=>{const n=Zn[e],r=t.ownerDocument.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttribute("class","remixicon size-3.5"),r.setAttribute("viewBox","0 0 24 24"),r.setAttribute("aria-hidden","true");const i=t.ownerDocument.createElementNS("http://www.w3.org/2000/svg","use");i.setAttribute("href",`#oc-${n}`),r.appendChild(i),t.replaceChildren(r)},Xn=t=>{for(const e of Array.from(t.querySelectorAll('[data-openchamber-markdown-image-label="true"]'))){if(e.querySelector("[data-openchamber-markdown-image-label-icon]"))continue;const n=document.createElement("span");n.className="inline-flex shrink-0",n.setAttribute("aria-hidden","true"),n.setAttribute("data-openchamber-markdown-image-label-icon","true"),ee(n,"image"),e.prepend(n)}},Gn=t=>{for(const e of t.querySelectorAll("details[data-md-details] > summary")){if(e.querySelector("[data-md-disclosure-icon]"))continue;const n=document.createElement("span");n.append(...Array.from(e.childNodes));const r=document.createElement("span");r.setAttribute("data-md-disclosure-icon",""),r.setAttribute("aria-hidden","true"),ee(r,"disclosure"),e.append(r,n)}},B=(t,e,n)=>{const r=document.createElement("button");return r.type="button",r.className=Ct,r.setAttribute("data-md-action",n),r.setAttribute("title",e),r.setAttribute("aria-label",e),ee(r,t),r},Et=(t,e,n)=>{const r=t.querySelector("[data-md-code-body]"),i=t.querySelector("pre"),o=t.querySelector("pre code"),s=t.querySelectorAll("[data-md-code-line-content]"),a=t.querySelector('[data-md-action="toggle-code-wrap"]');t.setAttribute("data-code-wrap",e?"true":"false"),r?.classList.toggle("overflow-x-auto",!e),r?.classList.toggle("overflow-x-hidden",e),i?.classList.toggle("whitespace-pre-wrap",e),i?.classList.toggle("break-words",e),o?.classList.toggle("whitespace-pre-wrap",e),o?.classList.toggle("break-words",e),i&&(i.style.whiteSpace=e?"pre-wrap":"pre",i.style.overflowWrap=e?"anywhere":"normal"),o&&(o.style.whiteSpace=e?"pre-wrap":"pre",o.style.overflowWrap=e?"anywhere":"normal");for(const l of Array.from(s))l.style.whiteSpace=e?"pre-wrap":"pre",l.style.overflowWrap=e?"anywhere":"normal";if(a){const l=e?n.disableCodeWrap:n.enableCodeWrap;a.setAttribute("title",l),a.setAttribute("aria-label",l),a.classList.toggle("text-foreground",e),a.classList.toggle("opacity-100",e),a.classList.toggle("text-muted-foreground",!e),a.classList.toggle("opacity-65",!e),a.setAttribute("aria-pressed",e?"true":"false")}},St=t=>{const e=t.querySelector(":scope > code");if(!e||e.hasAttribute("data-md-code-lines"))return;t.removeAttribute("data-md-gutter-reserved");const n=e.textContent??"",r=n.endsWith(`
|
|
2
|
-
`),i=r?n.slice(0,-1).split(`
|
|
3
|
-
`):n.split(`
|
|
4
|
-
`),o=i.length>0?i:[""],s=Array.from(e.children).filter(c=>c.classList.contains("line"));r&&s.length===o.length+1&&s.at(-1)?.textContent===""&&s.pop();const a=s.length===o.length,l=document.createDocumentFragment();o.forEach((c,u)=>{const f=document.createElement("span");f.setAttribute("data-md-code-line","");const m=document.createElement("span");m.setAttribute("data-md-code-line-number",String(u+1)),m.setAttribute("aria-hidden","true");const g=document.createElement("span");if(g.setAttribute("data-md-code-line-content",""),a){const y=s[u];y&&g.append(...Array.from(y.childNodes))}else g.textContent=c;if(f.append(m,g),l.appendChild(f),u<o.length-1||r){const y=document.createElement("span");y.setAttribute("data-md-code-line-break",""),y.textContent=`
|
|
5
|
-
`,l.appendChild(y)}}),e.replaceChildren(l),e.setAttribute("data-md-code-lines",""),e.toggleAttribute("data-md-code-trailing-newline",r)},Lt=t=>{const e=Array.from(t.querySelectorAll("[data-md-code-line-content]"));if(e.length===0)return t.textContent??"";const n=e.map(r=>r.textContent??"").join(`
|
|
6
|
-
`);return t.hasAttribute("data-md-code-trailing-newline")?`${n}
|
|
7
|
-
`:n},je=(t,e,n)=>{const r=t.querySelectorAll('[data-component="markdown-code"]');for(const i of Array.from(r)){const o=i.querySelector("pre");o&&St(o),Et(i,e,n)}},Ue=(t,e,n,r)=>{ee(t,"check"),t.setAttribute("title",e),t.setAttribute("aria-label",e),window.setTimeout(()=>{ee(t,n),t.setAttribute("title",r),t.setAttribute("aria-label",r)},2e3)},Yn=t=>{const e=t.querySelectorAll(":not(pre) > code");for(const n of Array.from(e))n.getAttribute("data-markdown")!=="inline-code"&&n.setAttribute("data-markdown","inline-code")},Jn=(t,e)=>{const n=t.querySelectorAll("pre");for(const r of Array.from(n)){if(r.querySelector("code.language-mermaid"))continue;const i=r.parentElement;if(!i||i.closest('[data-component="markdown-code"]'))continue;const o=r.querySelector("code")?.className.match(/language-([\w+#.-]+)/)?.[1],s=r.getAttribute("data-md-lang")??o??"text",a=document.createElement("div");a.setAttribute("data-component","markdown-code"),a.className="my-4 group overflow-hidden rounded-2xl border border-border/80 bg-[var(--surface-elevated)]";const l=document.createElement("div");l.className="flex items-center justify-between border-b border-border/70 px-3 py-1.5";const c=document.createElement("span");c.className="font-mono text-[13px] text-muted-foreground",c.textContent=s;const u=B("copy",e.labels.copy,"copy-code"),f=B("textWrap",e.codeBlockLineWrap?e.labels.disableCodeWrap:e.labels.enableCodeWrap,"toggle-code-wrap");l.appendChild(c);const m=document.createElement("div");m.className="flex items-center gap-1",m.setAttribute("data-md-code-actions",""),m.appendChild(f),m.appendChild(u),l.appendChild(m);const g=document.createElement("div");g.setAttribute("data-md-code-body",""),g.className="px-3 py-2.5 overflow-x-auto",i.replaceChild(a,r),r.style.margin="0",r.style.background="transparent",r.classList.add("min-w-0","w-full","flex-1"),e.deferCodeLineNumberSync?r.setAttribute("data-md-gutter-reserved",""):St(r),g.appendChild(r),a.appendChild(l),a.appendChild(g),Et(a,e.codeBlockLineWrap,e.labels)}},Ze=t=>{const e=[],n=[],r=t.querySelectorAll("thead th");for(const o of Array.from(r))e.push((o.textContent??"").trim());const i=t.querySelectorAll("tbody tr");for(const o of Array.from(i)){const s=Array.from(o.querySelectorAll("td")).map(a=>(a.textContent??"").trim());s.length>0&&n.push(s)}return{headers:e,rows:n}},Qn=t=>/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t,Xe=({headers:t,rows:e})=>[t,...e].map(n=>n.map(Qn).join(",")).join(`
|
|
8
|
-
`),er=({headers:t,rows:e})=>[t,...e].map(n=>n.join(" ")).join(`
|
|
9
|
-
`),Ge=({headers:t,rows:e})=>{const n=`| ${t.join(" | ")} |`,r=`| ${t.map(()=>"---").join(" | ")} |`,i=e.map(o=>`| ${o.join(" | ")} |`).join(`
|
|
10
|
-
`);return`${n}
|
|
11
|
-
${r}
|
|
12
|
-
${i}`},Ye=(t,e)=>{const n=document.createElement("div");n.className=`absolute top-full right-0 mt-1 hidden ${Gt}`,n.style.backgroundColor="var(--surface-elevated)",n.style.color="var(--surface-elevated-foreground)",n.setAttribute("data-md-menu",t);for(const r of e){const i=document.createElement("button");i.type="button",i.className=`w-full text-left ${Yt}`,i.setAttribute("data-md-action",`${t}-${r.key}`),i.textContent=r.label,n.appendChild(i)}return n},tr=120,nr=320,Fe="data-md-table-layout",rr=(t,e)=>{const n=t.querySelectorAll("table");for(const r of Array.from(n)){if(r.closest('[data-markdown="table-wrapper"]'))continue;const o=document.createElement("div");o.className="group my-4 flex w-fit max-w-full flex-col space-y-2",o.setAttribute("data-markdown","table-wrapper");const s=document.createElement("div");s.className="flex items-center justify-end gap-1";const a=document.createElement("div");a.className="relative",a.appendChild(B("copy",e.copyTable,"table-copy-toggle")),a.appendChild(Ye("table-copy",[{key:"csv",label:"CSV"},{key:"tsv",label:"TSV"},{key:"markdown",label:"Markdown"}]));const l=document.createElement("div");l.className="relative",l.appendChild(B("download",e.downloadTable,"table-download-toggle")),l.appendChild(Ye("table-download",[{key:"csv",label:"CSV"},{key:"markdown",label:"Markdown"}])),s.appendChild(a),s.appendChild(l);const c=document.createElement("div");c.className="overflow-x-auto rounded-lg border border-border/80 bg-[var(--surface-elevated)]";const u=r.parentElement;if(!u)continue;u.replaceChild(o,r),r.setAttribute("data-markdown","table"),r.setAttribute(Fe,"pending"),r.classList.add("w-max","border-collapse","text-sm");for(const m of Array.from(r.querySelectorAll("tr")))m.classList.add("border-b","border-border/60");const f=r.querySelector("tbody tr:last-child");f?.classList.remove("border-b"),f?.classList.add("border-0");for(const m of Array.from(r.querySelectorAll("th")))m.classList.add("min-w-[120px]","max-w-[320px]","whitespace-normal","[overflow-wrap:anywhere]","border-r","border-border/60","px-4","py-2.5","text-left","align-middle","font-semibold","text-foreground","last:border-r-0");for(const m of Array.from(r.querySelectorAll("td")))m.classList.add("min-w-[120px]","max-w-[320px]","whitespace-normal","[overflow-wrap:anywhere]","border-r","border-border/60","px-4","py-2.5","align-middle","text-foreground/90","last:border-r-0");c.appendChild(r),o.appendChild(s),o.appendChild(c)}},or=t=>{const e=Array.from(t.querySelectorAll(`table[data-markdown="table"]:not([${Fe}="fixed"])`));if(e.length===0||!t.isConnected)return;const n=t.ownerDocument.createElement("div");n.setAttribute("aria-hidden","true"),n.setAttribute("data-md-table-measure",""),n.style.position="fixed",n.style.left="-100000px",n.style.top="0",n.style.visibility="hidden",n.style.pointerEvents="none",n.style.width="max-content";const r=e.map(o=>{const s=f=>Array.from(f.children).filter(m=>m.tagName==="TH"||m.tagName==="TD"),a=Array.from(o.querySelectorAll("tbody tr")),l=a.some(f=>s(f).length>0)?a:Array.from(o.querySelectorAll("thead tr")),c=Math.max(0,...Array.from(o.querySelectorAll("tr")).map(f=>s(f).length)),u=[];for(let f=0;f<c;f+=1){const m=t.ownerDocument.createElement("table");m.className=o.className,m.style.tableLayout="auto",m.style.width="max-content";const g=t.ownerDocument.createElement("tbody");for(const y of l){const v=s(y)[f];if(!v)continue;const S=t.ownerDocument.createElement("tr"),p=v.cloneNode(!0);p instanceof HTMLElement&&(p.style.width="auto",p.style.minWidth="0",p.style.maxWidth="none",p.style.whiteSpace="nowrap",p.style.overflowWrap="normal",S.appendChild(p),g.appendChild(S))}m.appendChild(g),n.appendChild(m),u.push(m)}return{table:o,columnProbes:u}});t.appendChild(n);const i=r.map(({table:o,columnProbes:s})=>({table:o,widths:s.map(a=>Math.min(nr,Math.max(tr,Math.ceil(a.getBoundingClientRect().width))))}));n.remove();for(const{table:o,widths:s}of i){Array.from(o.children).find(u=>u.matches("colgroup[data-md-table-columns]"))?.remove();const l=t.ownerDocument.createElement("colgroup");l.setAttribute("data-md-table-columns","");for(const u of s){const f=t.ownerDocument.createElement("col");f.style.width=`${u}px`,l.appendChild(f)}const c=Array.from(o.children).find(u=>u.tagName==="THEAD"||u.tagName==="TBODY"||u.tagName==="TFOOT")??null;o.insertBefore(l,c),o.style.tableLayout="fixed",o.style.width=`${s.reduce((u,f)=>u+f,0)}px`,o.setAttribute(Fe,"fixed")}},ir=(t,e)=>{const n=t.querySelectorAll("pre > code.language-mermaid");for(const r of Array.from(n)){const i=r.parentElement;if(!i)continue;const o=(r.textContent??"").replace(/\s+$/,""),s=e.renderMermaid(o),a=document.createElement("div");a.setAttribute("data-markdown","mermaid-block"),a.setAttribute("data-md-source",o),a.className="group relative";const l=document.createElement("div");l.setAttribute("data-markdown","mermaid-scroll");const c=document.createElement("div");if(c.setAttribute("data-markdown","mermaid-toolbar"),c.className="absolute top-1 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity",s.svg){a.setAttribute("data-mermaid-render","svg");const f=document.createElement("div");f.setAttribute("data-markdown","mermaid-viewport");const m=document.createElement("div");if(m.setAttribute("data-markdown","mermaid"),m.setAttribute("data-md-original-svg",s.svg),m.innerHTML=s.svg,f.appendChild(m),l.appendChild(f),e.mermaidControls.showPanZoomControls&&(c.appendChild(B("zoomIn",e.labels.zoomInDiagram,"mermaid-zoom-in")),c.appendChild(B("zoomOut",e.labels.zoomOutDiagram,"mermaid-zoom-out")),c.appendChild(B("fit",e.labels.resetDiagramView,"mermaid-fit"))),e.mermaidControls.copy){const g=B("copy",e.labels.copyDiagram,"mermaid-copy");g.setAttribute("data-md-source",o),c.appendChild(g)}if(e.mermaidControls.download){const g=B("download",e.labels.downloadDiagram,"mermaid-download");g.setAttribute("data-md-svg","1"),c.appendChild(g)}}else{a.setAttribute("data-mermaid-render","ascii");const f=document.createElement("pre");if(f.setAttribute("data-markdown","mermaid-ascii"),f.textContent=s.ascii||o,l.appendChild(f),e.mermaidControls.copy){const m=B("copy",e.labels.copyDiagram,"mermaid-copy");m.setAttribute("data-md-source",s.ascii||o),c.appendChild(m)}}a.appendChild(l),a.appendChild(c);const u=i.parentElement;u&&u.replaceChild(a,i)}},sr=(t,e)=>{const n=t.querySelectorAll("a[href]");for(const r of Array.from(n)){if(r.getAttribute("data-md-link-decorated")==="true"||r.getAttribute("data-openchamber-file-link")==="true")continue;const i=r.getAttribute("href")??"";if(!lt(i))continue;r.setAttribute("data-md-link-decorated","true");const o=Zt(i);if(o){const s=document.createElement("span");s.className="mr-1 inline-flex size-[18px] items-center justify-center rounded border border-[var(--border)] bg-[var(--interactive-hover)] align-middle";const a=document.createElement("img");a.src=o,a.alt="",a.setAttribute("aria-hidden","true"),a.loading="lazy",a.decoding="async",a.className="size-3.5 rounded-sm",a.addEventListener("error",()=>s.remove(),{once:!0}),s.appendChild(a),r.parentNode?.insertBefore(s,r)}if(e.onPreviewLoopback&&Xt(i)){const s=document.createElement("button");s.type="button",s.className=`ml-1 align-middle ${Ct}`,s.setAttribute("data-md-action","preview-loopback"),s.setAttribute("data-md-url",i),s.setAttribute("title",e.labels.previewTitle),s.setAttribute("aria-label",e.labels.previewLabel),ee(s,"download"),r.parentNode?.insertBefore(s,r.nextSibling)}}},pe=(t,e)=>{Gn(t),Xn(t),Yn(t),ir(t,e),Jn(t,e),rr(t,e.labels),sr(t,e)},Je=(t,e,n)=>{const r=new Blob([e],{type:n}),i=URL.createObjectURL(r),o=document.createElement("a");o.href=i,o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(i)},fe=t=>{for(const e of Array.from(t.querySelectorAll("[data-md-menu]")))e.classList.add("hidden")},Qe=t=>(t.nodeType===1?t:t.parentElement)?.closest("pre code[data-md-code-lines]")??null,ar=t=>{const e=Qe(t.startContainer);return!e||e!==Qe(t.endContainer)?null:t.toString()},he=new WeakMap,lr=t=>{let e=he.get(t);if(!e){const n=()=>{const o=t.getSelection();return!o||o.rangeCount!==1||o.isCollapsed?null:ar(o.getRangeAt(0))},r=o=>{if(!o.clipboardData)return;const s=n();s!==null&&(o.preventDefault(),o.stopPropagation(),o.clipboardData.setData("text/plain",s))},i=o=>{const s=n();s!==null&&(o.preventDefault(),we(s))};e={registrations:0,handler:r,menuHandler:i},he.set(t,e),t.addEventListener("copy",r,!0),t.defaultView?.addEventListener("openchamber:copy",i)}return e.registrations+=1,()=>{const n=he.get(t);n&&(n.registrations-=1,!(n.registrations>0)&&(t.removeEventListener("copy",n.handler,!0),t.defaultView?.removeEventListener("openchamber:copy",n.menuHandler),he.delete(t)))}},cr=(t,e)=>{const n=lr(t.ownerDocument),r=i=>{const o=i.target;if(!(o instanceof Element))return;const s=o.closest("[data-md-action]");if(!s){fe(t);return}const a=s.getAttribute("data-md-action")??"";if(a==="copy-code"){const l=s.closest('[data-component="markdown-code"]')?.querySelector("code"),c=l?Lt(l):"";c&&(s.setAttribute("data-md-copy-pending",""),we(c).then(()=>Ue(s,e.labels.copied,"copy",e.labels.copy)).finally(()=>s.removeAttribute("data-md-copy-pending")));return}if(a==="toggle-code-wrap"){i.preventDefault(),e.onToggleCodeBlockLineWrap?.();return}if(a==="table-copy-toggle"||a==="table-download-toggle"){i.preventDefault();const l=s.parentElement?.querySelector("[data-md-menu]")??null,c=l?.classList.contains("hidden")??!1;fe(t),l&&c&&l.classList.remove("hidden");return}if(a.startsWith("table-copy-")){const l=a.replace("table-copy-",""),c=s.closest('[data-markdown="table-wrapper"]')?.querySelector("table");if(c instanceof HTMLTableElement){const u=Ze(c),f=l==="csv"?Xe(u):l==="tsv"?er(u):Ge(u);we(f)}fe(t);return}if(a.startsWith("table-download-")){const l=a.replace("table-download-",""),c=s.closest('[data-markdown="table-wrapper"]')?.querySelector("table");if(c instanceof HTMLTableElement){const u=Ze(c),f=l==="csv"?Xe(u):Ge(u);Je(l==="csv"?"table.csv":"table.md",f,l==="csv"?"text/csv":"text/markdown")}fe(t);return}if(a==="mermaid-copy"){const l=s.getAttribute("data-md-source")??"";l&&we(l).then(()=>Ue(s,e.labels.copied,"copy",e.labels.copyDiagram));return}if(a==="mermaid-zoom-in"||a==="mermaid-zoom-out"||a==="mermaid-fit"){i.preventDefault();const l=s.closest('[data-markdown="mermaid-block"]'),c=jn(l);a==="mermaid-zoom-in"?c?.zoomIn():a==="mermaid-zoom-out"?c?.zoomOut():c?.fit();return}if(a==="mermaid-download"){const l=s.closest('[data-markdown="mermaid-block"]')?.querySelector('[data-markdown="mermaid"]'),c=l?.getAttribute("data-md-original-svg")??l?.innerHTML??"";c&&Je("diagram.svg",c,"image/svg+xml;charset=utf-8");return}if(a==="preview-loopback"){i.preventDefault();const l=s.getAttribute("data-md-url")??"";l&&e.onPreviewLoopback?.(l);return}};return t.addEventListener("click",r),()=>{n(),t.removeEventListener("click",r)}},et=(t,e,n)=>{let r=0;for(const o of t){const s=r+o.data.length;if(e<s||e===s&&n==="left")return{node:o,offset:Math.max(0,e-r)};r=s}const i=t.at(-1);return i?{node:i,offset:i.data.length}:null},dr=new Set(["dockerfile","makefile","readme","license",".env",".gitignore",".npmrc"]),tt=Array.from(dr).map(t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),Mt=t=>Jt(t),ur=t=>Qt(t),mr=t=>{let e;try{e=new URL(t.trim())}catch{return null}if(e.protocol!=="file:"||e.hostname&&e.hostname!=="localhost")return null;try{const n=decodeURIComponent(e.pathname);return/^\/[A-Za-z]:\//.test(n)?n.slice(1):n.startsWith("/")?n:null}catch{return null}},ve=t=>{let e=(t||"").trim();return e?((e.startsWith("`")&&e.endsWith("`")||e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))&&(e=e.slice(1,-1).trim()),e=e.replace(/[.,;!?]+$/g,""),e.endsWith(")")&&!e.includes("(")&&(e=e.slice(0,-1)),e.endsWith("]")&&!e.includes("[")&&(e=e.slice(0,-1)),e):""},ge=t=>{let e=ve(t);if(!e)return"";const n=e.indexOf(";");n>=0&&(e=e.slice(0,n)),e=e.replace(/#.*$/,"");const r=e.match(/^(.*\.[A-Za-z0-9_-]{1,16}):.*$/);r&&(e=r[1]??e);const i=tt.length>0?e.match(new RegExp(`^(.*(?:/|^)(${tt})):.*$`,"i")):null;return i&&(e=i[1]??e),ve(e)},Nt=t=>{const e=ve(t);if(!e)return null;const n=e.indexOf(";"),r=n>=0?ve(e.slice(0,n)):e;if(!r)return null;const i=r.match(/^(.*?):(\d+)-(\d+)$/);if(i){const l=ge(i[1]??""),c=Number.parseInt(i[2]??"",10),u=Number.parseInt(i[3]??"",10);return!l||!Number.isFinite(c)||!Number.isFinite(u)||u<c?null:{path:l,line:c,endLine:u}}const o=r.match(/^(.*)#L(\d+)(?:C(\d+))?$/i);if(o){const l=ge(o[1]??""),c=Number.parseInt(o[2]??"",10),u=o[3]?Number.parseInt(o[3],10):void 0;return!l||!Number.isFinite(c)?null:{path:l,line:c,column:Number.isFinite(u??Number.NaN)?u:void 0}}const s=r.match(/^(.*?):(\d+)(?::(\d+))?$/);if(s){const l=ge(s[1]??""),c=Number.parseInt(s[2]??"",10),u=s[3]?Number.parseInt(s[3],10):void 0;return!l||!Number.isFinite(c)?null:{path:l,line:c,column:Number.isFinite(u??Number.NaN)?u:void 0}}const a=ge(r);return a?{path:a}:null},Te=/(?:[A-Za-z]:[\\/])?[\w.\-/@+]*[\w\-/@+]\.[A-Za-z0-9]{1,8}(?::\d+(?:-\d+)?(?::\d+)?)?/g,pr=4,fr=1e3,hr=200,z=new Map;let be=0;const nt=[],gr=()=>ft()?hr:fr,br=(t,e)=>`${t}\0${e}`,wr=(t,e)=>{const n=Mt(t);if(!n)return Promise.resolve(!1);const r=br(e,n),i=z.get(r);if(i)return z.delete(r),z.set(r,i),i;const o=new Promise(a=>{const l=()=>{be+=1,cn(`/api/fs/stat?path=${encodeURIComponent(n)}&optional=true`,{method:"GET",cache:"no-store",headers:e?{"x-opencode-directory":e}:void 0}).then(async c=>{if(!c.ok){a(!1);return}const u=await c.json().catch(()=>null);a(u?.exists!==!1)}).catch(()=>a(!1)).finally(()=>{be=Math.max(0,be-1),nt.shift()?.()})};if(be<pr){l();return}nt.push(l)}),s=gr();for(;z.size>=s;){const a=z.keys().next().value;if(typeof a!="string")break;z.delete(a)}return z.set(r,o),o},yr={maxSessions:8,maxEntriesPerSession:4};class Ar{maxSessions;maxEntriesPerSession;sessions=new Map;constructor(e=yr){this.maxSessions=Math.max(1,e.maxSessions),this.maxEntriesPerSession=Math.max(1,e.maxEntriesPerSession)}store(e){const n=e.scope,r=e.id;let i=this.sessions.get(n);for(i===void 0?(i=new Map,this.sessions.set(n,i)):this.refreshSession(n,i),i.delete(r),i.set(r,e);i.size>this.maxEntriesPerSession;)this.removeOldestEntry(i);for(;this.sessions.size>this.maxSessions;)this.removeOldestSession()}take(e){const n=e.scope,r=this.sessions.get(n);if(!r)return null;const i=e.id;this.refreshSession(n,r);const o=r.get(i);return o===void 0||o.locale!==e.locale||o.directory!==e.directory?null:(r.delete(i),r.size===0&&this.sessions.delete(n),o.fragment)}clear(){this.sessions.clear()}stats(){let e=0;for(const n of this.sessions.values())e+=n.size;return{sessions:this.sessions.size,entries:e}}refreshSession(e,n){this.sessions.delete(e),this.sessions.set(e,n)}removeOldestEntry(e){const n=e.keys().next().value;n!==void 0&&e.delete(n)}removeOldestSession(){const e=this.sessions.keys().next().value;e!==void 0&&this.sessions.delete(e)}}const rt=new Ar,Rt=()=>{const t=ae.c(4),e=en();let n;t[0]===Symbol.for("react.memo_cache_sentinel")?(n=qe(!1),t[0]=n):n=t[0];const r=n;let i;t[1]===Symbol.for("react.memo_cache_sentinel")?(i=qe(!0),t[1]=i):i=t[1];const o=i;let s;return t[2]!==e?.currentTheme?(s=e?.currentTheme??(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?o:r),t[2]=e?.currentTheme,t[3]=s):s=t[3],s},Tt=t=>{const e=ae.c(4),{containerRef:n,enabled:r}=t;let i,o;e[0]!==n||e[1]!==r?(i=()=>{const s=n.current;if(s)return An(s,{allowExternalHttp:r!==!1,openAppLink:Br,openExternalHttp:$r})},o=[n,r],e[0]=n,e[1]=r,e[2]=i,e[3]=o):(i=e[2],o=e[3]),C.useEffect(i,o)},te={download:!0,copy:!0,showPanZoomControls:!0},_t=!0,vr=t=>{const e=t.match(/^(?:\uFEFF)?(---|\+\+\+)[^\S\r\n]*\r?\n[\s\S]*?\r?\n\1[^\S\r\n]*(?:\r?\n|$)/);return e?t.slice(e[0].length):t},ot='[data-openchamber-file-link="true"]',xt="data-openchamber-block-path-token",Pt=`[${xt}]`,J="data-openchamber-block-paths-scanned",kr=2e5,Cr=80,Er=40,it=160,Sr=()=>ft()?Er:Cr,Lr=new Set(["dockerfile","makefile","readme","license",".env",".gitignore",".npmrc"]),Ft=t=>Mt(t),Mr=t=>ur(t),Nr=(t,e)=>on(t,e),Rr=t=>{const e=t.split("/").filter(Boolean).pop()??"";return!e||e.endsWith(".")?!1:/\.[A-Za-z0-9_-]{1,16}$/.test(e)},It=t=>{if(!t||t.startsWith("--")||t.includes("://")||/[<>]/.test(t)||/\s{2,}/.test(t))return!1;const e=Ft(t),n=e.split("/").filter(Boolean).pop()??e;if(!n||n==="."||n==="..")return!1;const r=n.toLowerCase();return Lr.has(r)||r.startsWith(".")&&r.length>1?!0:Rr(e)},Dt=t=>{const e=Nt(t);return e?It(e.path):!1},Tr=t=>{const e=t.querySelectorAll(Pt);for(const r of Array.from(e))r.replaceWith(t.ownerDocument.createTextNode(r.textContent??""));const n=t.querySelectorAll(`code[${J}]`);for(const r of Array.from(n))r.removeAttribute(J),r.normalize()},_e=t=>{if(t.tagName.toLowerCase()==="a"){const e=t.getAttribute("href")?.trim(),n=e?mr(e):null;if(n)return n;if(e&&Dt(e))return e}return(t.textContent||"").trim()},_r=t=>{const e=t.querySelectorAll("pre code");if(e.length===0)return;const n=t.ownerDocument;if(n)for(const r of Array.from(e)){if(r.getAttribute(J)==="true")continue;if((r.textContent??"").length>kr){r.setAttribute(J,"true");continue}const i=n.createTreeWalker(r,NodeFilter.SHOW_TEXT),o=[];let s=i.nextNode();for(;s;){const u=s;u.parentElement?.closest("[data-md-code-line-number]")||o.push(u),s=i.nextNode()}const a=Lt(r);if(!a.includes(".")){r.setAttribute(J,"true");continue}Te.lastIndex=0;const l=[];let c=Te.exec(a);for(;c;){const u=c[0];u&&Dt(u)&&l.push({start:c.index,end:c.index+u.length,raw:u}),c=Te.exec(a)}for(const{start:u,end:f,raw:m}of l.reverse()){const g=et(o,u,"right"),y=et(o,f,"left");if(!g||!y)continue;const v=n.createRange();v.setStart(g.node,g.offset),v.setEnd(y.node,y.offset);const S=n.createElement("span");S.setAttribute(xt,"true"),S.textContent=m,v.deleteContents(),v.insertNode(S)}r.setAttribute(J,"true")}},xe=(t,e)=>{const n=Nt(t);if(!n||!It(n.path))return null;const r=Mr(n.path)?Ft(n.path):Nr(e,n.path);return r?{...n,resolvedPath:r}:null},xr=(t,e)=>t||rn(t,e),Ot=({containerRef:t,effectiveDirectory:e,editor:n,preferRuntimeEditor:r,enabled:i})=>{const o=C.useRef(null);C.useEffect(()=>{const s=t.current;if(!s||i&&!e)return;let a=!1;const l=Sr(),c=i&&!mn(),u=d=>{d.removeAttribute("data-openchamber-file-link"),d.removeAttribute("data-openchamber-file-ref"),d.removeAttribute("data-openchamber-file-path"),d.getAttribute("title")==="Open file"&&d.removeAttribute("title"),d.tagName.toLowerCase()!=="a"&&(d.removeAttribute("role"),d.removeAttribute("tabindex"))},f=()=>{const d=s.querySelectorAll(ot);for(const b of Array.from(d))u(b);Tr(s)};if(!c){f();return}const m=(d=0)=>{if(o.current!==null&&typeof window<"u"&&window.clearTimeout(o.current),typeof window>"u"){g();return}o.current=window.setTimeout(()=>{o.current=null,window.requestAnimationFrame(()=>{a||g()})},d)},g=()=>{h+=1;try{y()}finally{queueMicrotask(()=>{h-=1})}},y=()=>{c&&_r(s);const d=s.querySelectorAll(`[data-markdown="inline-code"], a, ${Pt}`);let b=0;for(const w of Array.from(d)){const A=_e(w),M=xe(A,e);if(u(w),!M||b>=l)continue;b+=1,(pn()&&fn()&&!Be(M.resolvedPath,e)?Promise.resolve(!0):wr(M.resolvedPath,e)).then(x=>{if(a||!x||!s.contains(w))return;const L=_e(w),R=xe(L,e);!R||R.resolvedPath!==M.resolvedPath||(w.setAttribute("data-openchamber-file-link","true"),w.setAttribute("data-openchamber-file-ref",L),w.setAttribute("data-openchamber-file-path",R.resolvedPath),w.setAttribute("title","Open file"),w.tagName.toLowerCase()!=="a"&&(w.setAttribute("role","button"),w.setAttribute("tabindex","0")))})}},v=async d=>{const b=d.getAttribute("data-openchamber-file-ref")||_e(d),w=xe(b,e);if(!w)return;const A=xr(e,w.resolvedPath);if(r&&n){n.openFile(w.resolvedPath,Number.isFinite(w.line??Number.NaN)?Math.max(1,Math.trunc(w.line)):void 0,Number.isFinite(w.column??Number.NaN)?Math.max(1,Math.trunc(w.column)):void 0);return}Be(w.resolvedPath,e)||await nn(w.resolvedPath,e);const M=Y.getState();Number.isFinite(w.line??Number.NaN)?M.openContextFileAtLine(A,w.resolvedPath,Math.max(1,Math.trunc(w.line)),Number.isFinite(w.column??Number.NaN)?Math.max(1,Math.trunc(w.column)):1):M.openContextFile(A,w.resolvedPath)},S=d=>{const b=d.target;if(!(b instanceof Element))return;const w=b.closest(ot);w instanceof HTMLElement&&(d.preventDefault(),d.stopPropagation(),v(w))},p=d=>{if(d.key!=="Enter"&&d.key!==" ")return;const b=d.target;!(b instanceof HTMLElement)||b.getAttribute("data-openchamber-file-link")!=="true"||(d.preventDefault(),d.stopPropagation(),v(b))};m(it);let h=0;const k=new MutationObserver(()=>{h>0||m(it)});return k.observe(s,{childList:!0,subtree:!0}),s.addEventListener("click",S),s.addEventListener("keydown",p),()=>{a=!0,o.current!==null&&typeof window<"u"&&window.clearTimeout(o.current),o.current=null,k.disconnect(),s.removeEventListener("click",S),s.removeEventListener("keydown",p)}},[t,n,e,r,i])},Wt=t=>{const e=ae.c(7),{containerRef:n,onShowPopup:r,enableFullscreen:i,enablePanZoom:o,allowMermaidWheelEvents:s}=t;let a,l;e[0]!==s||e[1]!==n||e[2]!==i||e[3]!==o||e[4]!==r?(a=()=>{const c=n.current;if(!c)return;const u=m=>{if(!i||!r)return;const g=m.target;if(!(g instanceof Element)||g.closest('button, a, [role="button"]'))return;const y=g.closest(ie);if(!y)return;if(y instanceof HTMLElement&&y.hasAttribute("data-mermaid-suppress-click")){y.removeAttribute("data-mermaid-suppress-click");return}const S=Array.from(c.querySelectorAll(ie)).indexOf(y);if(S<0)return;const p=y instanceof HTMLElement?y.getAttribute("data-md-source"):null;if(!p||p.trim().length===0)return;const h=`Diagram ${S+1}`;r({open:!0,title:h,content:"",metadata:{tool:"mermaid-preview",filename:h},mermaid:{url:`data:text/plain;charset=utf-8,${encodeURIComponent(p)}`,source:p,filename:h}})},f=m=>{if(s||(m.ctrlKey||m.metaKey)&&o)return;const g=m.target;!(g instanceof Element)||!g.closest(ie)||m.stopPropagation()};return c.addEventListener("click",u),c.addEventListener("wheel",f,{capture:!0,passive:!0}),()=>{c.removeEventListener("click",u),c.removeEventListener("wheel",f,!0)}},l=[s,n,i,o,r],e[0]=s,e[1]=n,e[2]=i,e[3]=o,e[4]=r,e[5]=a,e[6]=l):(a=e[5],l=e[6]),C.useEffect(a,l)},H=new Map,Pr=100,V="data-md-decoration-id",Fr=(t,e,n)=>{const r=t.children;if(r.length!==e.length)return!1;for(let i=0;i<e.length;i+=1){const o=r[i];if(!o||o.getAttribute("data-md-id")!==e[i]?.id||o.getAttribute(V)!==n)return!1}return!0},st=new WeakMap;let at=0;const Ir=2e5,Pe=t=>{const e=st.get(t);if(e)return e;const n=`decoration-${at}`;return at+=1,st.set(t,n),n},Dr=(t,e)=>{const n=H.get(t);if(n)return H.delete(t),H.set(t,n),n;const r=e();if(H.set(t,r),H.size>Pr){const i=H.keys().next().value;i&&H.delete(i)}return r},Or=t=>({bg:t.colors.surface.elevated,fg:t.colors.surface.foreground,line:t.colors.interactive.border,accent:t.colors.primary.base,muted:t.colors.surface.mutedForeground,surface:t.colors.surface.muted,border:t.colors.interactive.border,transparent:!0,font:"system-ui, sans-serif"}),qt=(t,e,n,r=te)=>{const{t:i}=mt(),o=C.useMemo(()=>({copy:i("markdownRenderer.code.actions.copyTitle"),copied:i("markdownRenderer.code.actions.copiedTitle"),enableCodeWrap:i("markdownRenderer.code.actions.enableWrapTitle"),disableCodeWrap:i("markdownRenderer.code.actions.disableWrapTitle"),copyTable:i("markdownRenderer.table.actions.copyTitle"),downloadTable:i("markdownRenderer.table.actions.downloadTitle"),copyDiagram:i("markdownRenderer.mermaid.actions.copySourceTitle"),downloadDiagram:i("markdownRenderer.mermaid.actions.downloadSvgTitle"),zoomInDiagram:i("markdownRenderer.mermaid.actions.zoomInTitle"),zoomOutDiagram:i("markdownRenderer.mermaid.actions.zoomOutTitle"),resetDiagramView:i("markdownRenderer.mermaid.actions.resetViewTitle"),previewLabel:i("terminalView.preview.open"),previewTitle:i("terminalView.preview.openTitle")}),[i]),s=Y(c=>c.codeBlockLineWrap),a=Y(c=>c.setCodeBlockLineWrap),l=C.useCallback(()=>{a(!Y.getState().codeBlockLineWrap)},[a]);return C.useMemo(()=>{const c=Or(t),u=Y.getState().mermaidRenderingMode,f=t.metadata?.id??"theme";return{labels:o,mermaidControls:r,codeBlockLineWrap:s,deferCodeLineNumberSync:e,onToggleCodeBlockLineWrap:l,renderMermaid:g=>Dr(`${f}:${u}:${g}`,()=>{try{return u==="ascii"?{ascii:Vt(g)}:{svg:Kt(g,c)}}catch{return{}}}),onPreviewLoopback:n}},[t,o,r,s,e,l,n])},Bt=({containerRef:t,text:e,streaming:n,imageMode:r="inline",syntaxVars:i,ctx:o,domCacheKey:s,tableLayoutSettled:a})=>{C.useEffect(()=>{Cn()},[]);const l=C.useRef(null),c=C.useRef(0),u=C.useRef(null),f=C.useContext(tn),m=C.useRef(null),g=C.useCallback(()=>{m.current?.(),m.current=null},[]);C.useEffect(()=>g,[g]);const y=C.useRef(null),v=C.useCallback(()=>{const p=t.current;if(p){if(!l.current){if(!I(p))return;l.current=Un(p);return}l.current.refresh()}},[t]),S=C.useCallback(()=>{if(!a)return;const p=u.current;p!==null&&window.cancelAnimationFrame(p);const h=c.current,k=window.requestAnimationFrame(()=>{if(u.current!==k||(u.current=null,c.current!==h))return;const d=t.current,b=d?.querySelector("[data-markdown-content]")??d;b&&or(b)});u.current=k},[t,a]);C.useEffect(()=>()=>{const p=u.current;p!==null&&(window.cancelAnimationFrame(p),u.current=null)},[]),C.useLayoutEffect(()=>{c.current+=1,y.current=null},[o,r,n,e]),C.useLayoutEffect(()=>{if(!s)return;const p=t.current,h=p?.querySelector("[data-markdown-content]")??p;if(!h||h.childNodes.length>0)return;const k=rt.take(s);if(k){h.appendChild(k);const d=Pe(o);for(const b of Array.from(h.children))b.setAttribute(V,d);for(const[b,w]of Object.entries(i))h.style.setProperty(b,w);je(h,o.codeBlockLineWrap,o.labels),y.current={key:s,copiedLabel:o.labels.copied},oe("ui.markdown_renderer.dom_cache.hit")}},[t,o,s,i,e.length]),C.useLayoutEffect(()=>{const p=t.current,h=p?.querySelector("[data-markdown-content]")??p;if(h)return()=>{const k=y.current;if(!k||h.childNodes.length===0||I(h)||Array.from(h.children).some(M=>!M.hasAttribute("data-md-id"))||h.querySelector("[data-md-copy-pending]"))return;const d=window.getSelection();if(d?.rangeCount&&!d.isCollapsed&&d.getRangeAt(0).intersectsNode(h))return;const b=h.querySelector("[data-md-menu]:not(.hidden)"),w=Array.from(h.querySelectorAll("[data-md-action]")).some(M=>M.getAttribute("title")===k.copiedLabel);if(b||w)return;const A=document.createDocumentFragment();A.append(...Array.from(h.childNodes)),rt.store({...k.key,fragment:A}),oe("ui.markdown_renderer.dom_cache.capture")}},[t]),C.useLayoutEffect(()=>{const p=t.current,h=p?.querySelector("[data-markdown-content]")??p;if(!h)return;const k=Pe(o);if(e&&h.childNodes.length===0){const d=n?null:$e(e,r);if(d){let b=!1;for(const w of d){const A=document.createElement("div");A.setAttribute("data-md-block",""),A.style.display="contents",A.innerHTML=w.html,pe(A,o),A.setAttribute("data-md-id",w.id),A.setAttribute(V,k),b||=I(A),h.appendChild(A)}b&&v()}else{!n&&!m.current&&(m.current=f?.hold()??null);const b=document.createElement("div");b.setAttribute("data-md-block",""),b.style.display="contents",b.innerHTML=hn(e,r),pe(b,o),b.setAttribute(V,k),h.appendChild(b),I(b)&&v()}}else!l.current&&I(h)&&v()},[t,e,n,r,o,v,f]),C.useEffect(()=>()=>{l.current?.cleanup(),l.current=null},[]),C.useEffect(()=>{const p=t.current;if(!p)return;const h=p.querySelector("[data-markdown-content]")??p;let k=!0;const d=c.current,b=Pe(o);if(!n){const w=$e(e,r);if(w&&Fr(h,w,b)){y.current=s?{key:s,copiedLabel:o.labels.copied}:null,oe("ui.markdown_renderer.settled_paint.reused"),S(),g();return}}return gn(e,n,r).then(w=>{if(!k||c.current!==d)return;const A=Array.from(h.children),M=Array.from(h.querySelectorAll("details[data-md-details]")).map(L=>({summary:L.querySelector("summary")?.textContent,open:L.open}));let D=0;w.forEach((L,R)=>{let E=A[R],P=!1;if(E||(E=document.createElement("div"),E.setAttribute("data-md-block",""),E.style.display="contents",h.appendChild(E),P=!0),E.getAttribute("data-md-id")===L.id){if(E.getAttribute(V)!==b){const F=I(E);F&&(l.current?.cleanup(),l.current=null);const N=document.createElement("div");N.setAttribute("data-md-block",""),N.style.display="contents",N.innerHTML=L.html,pe(N,o),N.setAttribute("data-md-id",L.id),N.setAttribute(V,b),E.replaceWith(N),(F||I(N))&&v()}!l.current&&I(E)&&v();return}const _=document.createElement("div");if(_.innerHTML=L.html,pe(_,o),P&&n&&R>0){const F=Math.min(D,4)*55;D+=1;for(const N of Array.from(_.children))N.classList.add("oc-md-block-enter"),F>0&&N instanceof HTMLElement&&N.style.setProperty("--oc-md-enter-delay",`${F}ms`)}const O=I(E),W=I(_);Ht(E,_,{childrenOnly:!0,onBeforeElUpdated:(F,N)=>(F.matches("details[data-md-details]")&&N.matches("details[data-md-details]")&&F.querySelector("summary")?.textContent===N.querySelector("summary")?.textContent&&N.toggleAttribute("open",F.hasAttribute("open")),!F.isEqualNode(N))}),E.setAttribute("data-md-id",L.id),E.setAttribute(V,b),(O||W||I(E))&&v()});const $=I(h);let x=!1;for(let L=A.length-1;L>=w.length;L-=1){const R=A[L];R&&I(R)&&(x=!0),R?.remove()}(x||A.length>w.length&&$)&&v(),M.length>0&&h.querySelectorAll("details[data-md-details]").forEach((L,R)=>{const E=M[R];E&&E.summary===L.querySelector("summary")?.textContent&&(L.open=E.open)}),y.current=s?{key:s,copiedLabel:o.labels.copied}:null,S(),g()}),()=>{k=!1}},[t,o,s,r,v,g,S,n,e]),C.useEffect(()=>{const p=t.current;if(p)return cr(p,o)},[t,o]),C.useEffect(()=>{const p=t.current,h=p?.querySelector("[data-markdown-content]")??p;if(h)for(const[k,d]of Object.entries(i))h.style.setProperty(k,d)},[t,i]),C.useEffect(()=>{const p=t.current,h=p?.querySelector("[data-markdown-content]")??p;h&&(o.deferCodeLineNumberSync||je(h,o.codeBlockLineWrap,o.labels))},[t,o.codeBlockLineWrap,o.deferCodeLineNumberSync,o.labels])},$t=t=>t==="tool"?"markdown-content markdown-tool":t==="reasoning"?"markdown-content markdown-reasoning":"markdown-content leading-relaxed",Wr=t=>{const e=ae.c(40),{content:n,part:r,messageId:i,isAnimated:o,skipFadeIn:s,className:a,isStreaming:l,disableStreamAnimation:c,variant:u,onShowPopup:f,enableFileReferences:m}=t,g=o===void 0?!0:o,y=s===void 0?!1:s,v=l===void 0?!1:l,S=c===void 0?!1:c,p=u===void 0?"assistant":u,h=m===void 0?!0:m;oe("ui.markdown_renderer.render"),v&&oe("ui.markdown_renderer.render.streaming"),dn("ui.markdown_renderer.content_len",n.length);const k=Rt(),{editor:d,runtime:b}=ct(),w=C.useRef(null),A=dt()??"",M=Y(zr);let D;e[0]!==A||e[1]!==M?(D=q=>{A&&M(A,q)},e[0]=A,e[1]=M,e[2]=D):D=e[2];const $=D,x=v&&!S;let L;e[3]!==f?(L={containerRef:w,onShowPopup:f,enableFullscreen:_t,enablePanZoom:te.showPanZoomControls},e[3]=f,e[4]=L):L=e[4],Wt(L);const R=h&&!v;let E;e[5]!==d||e[6]!==A||e[7]!==b.isVSCode||e[8]!==R?(E={containerRef:w,effectiveDirectory:A,editor:d,preferRuntimeEditor:b.isVSCode,enabled:R},e[5]=d,e[6]=A,e[7]=b.isVSCode,e[8]=R,e[9]=E):E=e[9],Ot(E);let P;e[10]===Symbol.for("react.memo_cache_sentinel")?(P={containerRef:w},e[10]=P):P=e[10],Tt(P);let _;e[11]!==k?(_=ut(k),e[11]=k,e[12]=_):_=e[12];const O=_,W=qt(k,x,A?$:void 0,te),{locale:F}=mt(),N=p==="assistant"?"label":"inline",ke=r&&(r.type==="text"||r.type==="reasoning")&&r.time?.end!==void 0?r:null;let le;e[13]===Symbol.for("react.memo_cache_sentinel")?(le=un(),e[13]=le):le=e[13];const zt=le,De=ke?.sessionID,Oe=ke?.messageID,We=ke?.id;let Ce;e:{if(v||!De||!Oe||!We||n.length===0||n.length>Ir){Ce=null;break e}const q=`${zt}\0${De}`,Me=`${Oe}\0${We}\0${N}\0${n.length}`;let me;e[14]!==A||e[15]!==F||e[16]!==q||e[17]!==Me?(me={scope:q,id:Me,locale:F,directory:A},e[14]=A,e[15]=F,e[16]=q,e[17]=Me,e[18]=me):me=e[18],Ce=me}const Ee=Ce,Se=`markdown-${r?.id?`part-${r.id}`:`message-${i}`}`,Le=!v;let ce;e[19]!==n||e[20]!==W||e[21]!==Ee||e[22]!==N||e[23]!==x||e[24]!==O||e[25]!==Le?(ce={containerRef:w,text:n,streaming:x,imageMode:N,syntaxVars:O,ctx:W,domCacheKey:Ee,tableLayoutSettled:Le},e[19]=n,e[20]=W,e[21]=Ee,e[22]=N,e[23]=x,e[24]=O,e[25]=Le,e[26]=ce):ce=e[26],Bt(ce);let U;e[27]!==a?(U=pt("break-words w-full min-w-0",a),e[27]=a,e[28]=U):U=e[28];let Z;e[29]!==p?(Z=$t(p),e[29]=p,e[30]=Z):Z=e[30];let X;e[31]!==Z?(X=re.jsx("div",{className:Z,"data-markdown-content":!0}),e[31]=Z,e[32]=X):X=e[32];let de;e[33]!==U||e[34]!==X?(de=re.jsx("div",{className:U,ref:w,children:X}),e[33]=U,e[34]=X,e[35]=de):de=e[35];const ue=de;if(g){let q;return e[36]!==Se||e[37]!==ue||e[38]!==y?(q=re.jsx(sn,{skipAnimation:y,children:ue},Se),e[36]=Se,e[37]=ue,e[38]=y,e[39]=q):q=e[39],q}return ue},ji=C.memo(Wr,(t,e)=>t.content===e.content&&t.isStreaming===e.isStreaming&&t.disableStreamAnimation===e.disableStreamAnimation&&t.variant===e.variant&&t.isAnimated===e.isAnimated&&t.skipFadeIn===e.skipFadeIn&&t.className===e.className&&t.messageId===e.messageId&&t.onShowPopup===e.onShowPopup&&t.enableFileReferences===e.enableFileReferences&&t.part?.id===e.part?.id),qr=t=>{const e=ae.c(29),{content:n,className:r,variant:i,disableLinkSafety:o,stripFrontmatter:s,onShowPopup:a,mermaidControls:l,allowMermaidWheelEvents:c,enableFileReferences:u}=t,f=i===void 0?"assistant":i,m=s===void 0?!1:s,g=l===void 0?te:l,y=c===void 0?!1:c,v=u===void 0?!0:u,{editor:S,runtime:p}=ct(),h=Rt(),k=C.useRef(null),d=dt()??"";let b;e[0]!==n||e[1]!==m?(b=m?vr(n):n,e[0]=n,e[1]=m,e[2]=b):b=e[2];const w=b;let A;e[3]!==y||e[4]!==g.showPanZoomControls||e[5]!==a?(A={containerRef:k,onShowPopup:a,enableFullscreen:_t,enablePanZoom:g.showPanZoomControls,allowMermaidWheelEvents:y},e[3]=y,e[4]=g.showPanZoomControls,e[5]=a,e[6]=A):A=e[6],Wt(A);let M;e[7]!==S||e[8]!==d||e[9]!==v||e[10]!==p.isVSCode?(M={containerRef:k,effectiveDirectory:d,editor:S,preferRuntimeEditor:p.isVSCode,enabled:v},e[7]=S,e[8]=d,e[9]=v,e[10]=p.isVSCode,e[11]=M):M=e[11],Ot(M);const D=!o;let $;e[12]!==D?($={containerRef:k,enabled:D},e[12]=D,e[13]=$):$=e[13],Tt($);let x;e[14]!==h?(x=ut(h),e[14]=h,e[15]=x):x=e[15];const L=x,R=qt(h,!1,void 0,g);let E;e[16]!==R||e[17]!==w||e[18]!==L?(E={containerRef:k,text:w,streaming:!1,syntaxVars:L,ctx:R,tableLayoutSettled:!0},e[16]=R,e[17]=w,e[18]=L,e[19]=E):E=e[19],Bt(E);let P;e[20]!==r?(P=pt("break-words w-full min-w-0",r),e[20]=r,e[21]=P):P=e[21];let _;e[22]!==f?(_=$t(f),e[22]=f,e[23]=_):_=e[23];let O;e[24]!==_?(O=re.jsx("div",{className:_,"data-markdown-content":!0}),e[24]=_,e[25]=O):O=e[25];let W;return e[26]!==P||e[27]!==O?(W=re.jsx("div",{className:P,ref:k,children:O}),e[26]=P,e[27]=O,e[28]=W):W=e[28],W},Ui=C.memo(qr,(t,e)=>{const n=t.mermaidControls??te,r=e.mermaidControls??te;return t.content===e.content&&t.variant===e.variant&&t.className===e.className&&t.disableLinkSafety===e.disableLinkSafety&&t.stripFrontmatter===e.stripFrontmatter&&t.onShowPopup===e.onShowPopup&&n.download===r.download&&n.copy===r.copy&&n.showPanZoomControls===r.showPanZoomControls&&t.allowMermaidWheelEvents===e.allowMermaidWheelEvents&&t.enableFileReferences===e.enableFileReferences});function Br(t){an(t)}function $r(t){ln(t)}function zr(t){return t.openContextPreview}export{ji as MarkdownRenderer,Ui as SimpleMarkdownRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as D,j as e,R as i,f as G}from"./vendor-react-BUCujlKS.js";import{P as W,cD as je,cA as le,cw as z,E as B,ay as O,dP as ke,aE as ue,X as me,h as X,aJ as pe,t as he,U as ne}from"./index-Dqc6USl3.js";import{f as J,B as L,W as V,g as xe,h as re,I as A}from"./useAppFontEffects-ne84JBVL.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CgAdXWZO.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-CsXYnR5c.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-ClYN8CzB.js";import"./vendor-tanstack-virtual-core-BewVQryB.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Bx2EHc1O.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";function Ce(a){switch(a){case"ok":return null;case"auth":return"onboarding.remoteConnection.probe.authMessage";case"update-recommended":return"onboarding.remoteConnection.probe.updateRecommendedMessage";case"incompatible":return"onboarding.remoteConnection.probe.incompatibleMessage";case"wrong-service":return"onboarding.remoteConnection.probe.wrongServiceMessage";case"unreachable":return"onboarding.remoteConnection.probe.unreachableMessage";default:return null}}function oe(a){return a==="wrong-service"||a==="unreachable"||a==="incompatible"}function fe({onBack:a,showBackButton:t=!0,initialUrl:s="",initialLabel:r="",isRecoveryMode:n=!1,onConnect:l,onSwitchToLocal:d,showInstancePicker:h=!1}){const{t:o}=J(),[w,S]=D.useState(s),[j,U]=D.useState(r),[K,x]=D.useState("idle"),[u,k]=D.useState(null),[C,g]=D.useState(""),[T,I]=D.useState([]),[y,f]=D.useState(()=>h?"instances":"add"),[b,R]=D.useState("");D.useEffect(()=>{h&&W().then(p=>I(p.hosts)).catch(p=>{g(p instanceof Error?p.message:String(p))})},[h]);const N=je(w),E=N?.persistedUrl??null,F=D.useCallback(p=>{S(p.target.value),x("idle"),k(null),g("")},[]),H=D.useCallback(p=>{U(p.target.value)},[]),c=D.useCallback(async()=>{if(E){x("testing"),k(null),g("");try{const p=await le(E);k(p),x(p.status==="ok"||p.status==="update-recommended"?"success":"error")}catch(p){g(p instanceof Error?p.message:o("onboarding.remoteConnection.errors.connectionTestFailed")),x("error")}}},[E,o]),_=D.useCallback(async()=>{if(!N)return;const p=N.persistedUrl;x("testing"),k(null),g("");try{const P=await le(p);if(k(P),oe(P.status)){x("error");return}const Z=await W(),ve=j.trim()||p,ee=Z.hosts.find(q=>q.url===p),te=ee?ee.id:`host-${Date.now().toString(16)}`,ie={id:te,label:ve,url:p,apiUrl:p},we=ee?Z.hosts.map(q=>q.id===te?ie:q):[...Z.hosts,ie];if(await z({hosts:we,defaultHostId:te,initialHostChoiceCompleted:!0}),l?.(),N.redeemUrl){window.location.assign(N.redeemUrl);return}B()&&await O()}catch(P){g(P instanceof Error?P.message:o("onboarding.remoteConnection.errors.failedToSaveConnection")),x("error")}},[N,j,l,o]),$=D.useCallback(async p=>{const P=await W();await z({hosts:P.hosts,defaultHostId:p,initialHostChoiceCompleted:!0}),await O()},[]),m=D.useCallback(async()=>{x("testing"),g("");try{const p=await W(),P=await ke(b,p.hosts);await z({hosts:P.hosts,defaultHostId:P.hostId,initialHostChoiceCompleted:!0}),await O()}catch(p){g(p instanceof Error&&p.message==="invalid-connect-link"?o("settings.remoteInstances.direct.error.invalidConnectLink"):o("onboarding.remoteConnection.errors.failedToSaveConnection")),x("error")}},[b,o]),v=K==="testing",M=E!==null&&!v,Q=E!==null&&!v&&!oe(u?.status??null),Y=Ce(u?.status??null),be=u?.status==="ok",ge=u?.status==="update-recommended",ye=u?.status==="auth",ae=oe(u?.status??null);return h&&y==="instances"?e.jsx("div",{className:"flex flex-col items-center justify-center h-full p-8",children:e.jsxs("div",{className:"w-full max-w-md space-y-6",children:[e.jsxs("div",{className:"space-y-2 text-center",children:[e.jsx("h1",{className:"typography-ui-header text-xl font-semibold text-foreground",children:o("desktopHostSwitcher.actions.switchInstance")}),e.jsx("p",{className:"text-muted-foreground text-sm",children:o("settings.remoteInstances.direct.description")})]}),C?e.jsx("div",{className:"text-sm text-[var(--status-error)]",children:C}):null,e.jsx("div",{className:"space-y-2",children:T.length===0?e.jsx("div",{className:"py-4 text-center text-sm text-muted-foreground",children:o("settings.remoteInstances.direct.state.empty")}):T.map(p=>e.jsx(L,{variant:"outline",className:"w-full justify-start",onClick:()=>{$(p.id)},children:e.jsx("span",{className:"min-w-0 truncate",children:p.label})},p.id))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(L,{variant:"outline",className:"flex-1",onClick:()=>f("import"),children:o("settings.remoteInstances.direct.import.action")}),e.jsx(L,{className:"flex-1",onClick:()=>f("add"),children:o("settings.remoteInstances.direct.actions.add")})]})]})}):h&&y==="import"?e.jsx("div",{className:"flex flex-col items-center justify-center h-full p-8",children:e.jsxs("div",{className:"w-full max-w-md space-y-6",children:[e.jsx(L,{variant:"ghost",onClick:()=>f("instances"),className:"p-0 text-muted-foreground",children:o("onboarding.common.actions.back")}),e.jsxs("div",{className:"space-y-2 text-center",children:[e.jsx("h1",{className:"typography-ui-header text-xl font-semibold text-foreground",children:o("settings.remoteInstances.direct.import.action")}),e.jsx("p",{className:"text-muted-foreground text-sm",children:o("settings.remoteInstances.direct.import.description")})]}),e.jsx(V,{value:b,onChange:p=>R(p.target.value),placeholder:o("settings.remoteInstances.direct.import.placeholder"),disabled:v,autoFocus:!0}),C?e.jsx("div",{className:"text-sm text-[var(--status-error)]",children:C}):null,e.jsx(L,{onClick:()=>{m()},disabled:v||!b.trim(),children:o("settings.remoteInstances.direct.import.action")})]})}):e.jsx("div",{className:"flex flex-col items-center justify-center h-full p-8",children:e.jsxs("div",{className:"w-full max-w-md space-y-6",children:[(t||h)&&e.jsx("div",{className:"flex items-center",children:e.jsx(L,{variant:"ghost",onClick:h?()=>f("instances"):a,className:"p-0 text-muted-foreground hover:text-foreground",children:o("onboarding.common.actions.back")})}),e.jsxs("div",{className:"space-y-2 text-center",children:[e.jsx("h1",{className:"typography-ui-header text-xl font-semibold text-foreground",children:o(n?"onboarding.remoteConnection.titleRecovery":"onboarding.remoteConnection.title")}),e.jsx("p",{className:"text-muted-foreground text-sm",children:o("onboarding.remoteConnection.description")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"remote-url",className:"text-sm text-foreground",children:o("onboarding.remoteConnection.field.serverAddress")}),e.jsx(V,{id:"remote-url",type:"url",value:w,onChange:F,placeholder:o("onboarding.remoteConnection.field.serverAddressPlaceholder"),disabled:v})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"remote-label",className:"text-sm text-foreground",children:o("onboarding.remoteConnection.field.nameOptional")}),e.jsx(V,{id:"remote-label",type:"text",value:j,onChange:H,placeholder:o("onboarding.remoteConnection.field.namePlaceholder"),disabled:v})]})]}),u&&be&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-success)",color:"var(--status-success)"},children:o("onboarding.remoteConnection.status.connectedSuccessfully",{latencyMs:u.latencyMs})}),u&&ye&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-warning)",color:"var(--status-warning)"},children:o("onboarding.remoteConnection.status.authWarning")}),u&&ge&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-warning)",color:"var(--status-warning)"},children:Y?o(Y):null}),u&&ae&&e.jsxs("div",{className:"rounded-lg border p-3 text-sm space-y-3",style:{borderColor:"var(--status-error)",color:"var(--status-error)"},children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold mb-1",children:o("onboarding.remoteConnection.status.connectionFailed")}),e.jsx("div",{className:"opacity-90",children:Y?o(Y):null})]}),e.jsx("div",{className:"text-xs opacity-80",children:u.status==="unreachable"?o("onboarding.remoteConnection.status.suggestionsUnreachable"):o("onboarding.remoteConnection.status.suggestionsWrongService")})]}),C&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-error)",color:"var(--status-error)"},children:C}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(L,{variant:"outline",onClick:c,disabled:!M,children:o(v?"onboarding.remoteConnection.actions.testing":"onboarding.remoteConnection.actions.testConnection")}),e.jsx(L,{onClick:_,disabled:!Q,children:o("onboarding.remoteConnection.actions.connectAndRestart")})]}),ae&&e.jsxs("div",{className:"flex flex-col gap-2 pt-2 border-t border-border",children:[e.jsx("div",{className:"text-xs text-muted-foreground text-center",children:o("onboarding.remoteConnection.actions.whatToDo")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(L,{variant:"outline",size:"sm",onClick:a,className:"flex-1",children:o("onboarding.remoteConnection.actions.chooseDifferentServer")}),!n&&d&&e.jsx(L,{variant:"outline",size:"sm",onClick:d,className:"flex-1",children:o("onboarding.remoteConnection.actions.useLocalInstead")})]})]})]})})}const Ne="curl -fsSL https://opencode.ai/install | bash",Se="https://opencode.ai/docs",ce=2500;function Re(a){const t=G.c(5),{onCopy:s,copyTitle:r}=a;let n;t[0]===Symbol.for("react.memo_cache_sentinel")?(n=e.jsxs("code",{className:"flex-1 text-left overflow-x-auto whitespace-nowrap",children:[e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"curl"}),e.jsx("span",{className:"text-muted-foreground",children:" -fsSL "}),e.jsx("span",{style:{color:"var(--syntax-string)"},children:"https://opencode.ai/install"}),e.jsx("span",{className:"text-muted-foreground",children:" | "}),e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"bash"})]}),t[0]=n):n=t[0];let l;t[1]===Symbol.for("react.memo_cache_sentinel")?(l=e.jsx(A,{name:"file-copy",className:"h-4 w-4"}),t[1]=l):l=t[1];let d;return t[2]!==r||t[3]!==s?(d=e.jsxs("div",{className:"flex items-center justify-between gap-3 w-full",children:[n,e.jsx("button",{onClick:s,className:"inline-flex items-center text-muted-foreground hover:text-foreground transition-colors shrink-0",title:r,"aria-label":r,children:l})]}),t[2]=r,t[3]=s,t[4]=d):d=t[4],d}function Le({onCliAvailable:a,localAvailable:t=!0}){const{t:s}=J(),[r,n]=i.useState(!1),[l,d]=i.useState(!1),[h,o]=i.useState(!1),[w,S]=i.useState(!1),[j,U]=i.useState(""),[K,x]=i.useState("unknown"),[u,k]=i.useState(()=>t?"local":"remote"),[C,g]=i.useState(!1),[T,I]=i.useState(!1);i.useEffect(()=>{d(B())},[]),i.useEffect(()=>{if(typeof navigator>"u"){x("unknown");return}const m=navigator.userAgent||"";/Windows/i.test(m)?x("windows"):/Macintosh|Mac OS X/i.test(m)?x("macos"):/Linux/i.test(m)?x("linux"):x("unknown")},[]),i.useEffect(()=>{let m=!1;return(async()=>{try{const v=await ue();if(!v||m)return;const M=v.opencodeBinary??"";M&&U(M)}catch{}})(),()=>{m=!0}},[]);const y=i.useCallback(async m=>{const v=m.target;v.closest(".app-region-no-drag")||v.closest("button, a, input, select, textarea, code, summary, details")||m.button===0&&l&&await me()},[l]),f=i.useCallback(async()=>{try{const m=await X("/health");if(!m.ok)return!1;const v=await m.json();return v.openCodeRunning===!0||v.isOpenCodeReady===!0}catch{return!1}},[]),b=i.useCallback(async m=>{if(!l)return;const v=await W();await z({...v,...m==="local"?{defaultHostId:"local"}:{},initialHostChoiceCompleted:!0})},[l]),R=i.useCallback(async()=>{l&&await b("local"),a?.()},[l,a,b]);i.useEffect(()=>{if(!t||u!=="local")return;let m=!1,v=null;const M=async()=>{if(!m){try{const Q=await f();if(m)return;if(Q){await R();return}}catch{}m||(v=setTimeout(M,ce))}};return v=setTimeout(M,ce),()=>{m=!0,v&&clearTimeout(v)}},[u,f,R,t]);const N=i.useCallback(async()=>{S(!0);try{await f()&&await R()}finally{S(!1)}},[f,R]),E=i.useCallback(async()=>{if(!(typeof window>"u")&&l)try{const m=await pe();m.success&&m.path&&m.path.trim().length>0&&U(m.path.trim())}catch{}},[l]),F=i.useCallback(async()=>{o(!0);try{if(await he({opencodeBinary:j.trim()}),l){await b("local"),await O();return}await X("/api/config/reload",{method:"POST"})}finally{setTimeout(()=>o(!1),1e3)}},[l,j,b]),H=i.useCallback(async()=>{const m=await xe(Ne);m.ok?(n(!0),setTimeout(()=>n(!1),2e3)):console.error("Failed to copy:",m.error)},[]),c=Se,_=K==="windows"?"C:\\Users\\you\\AppData\\Roaming\\npm\\opencode.cmd":K==="linux"?"/home/you/.bun/bin/opencode":"/Users/you/.bun/bin/opencode",$=t&&(!l||u==="local");return e.jsx("div",{className:"app-region-drag h-full flex items-center justify-center bg-transparent p-8 cursor-default select-none overflow-y-auto",onMouseDown:y,children:e.jsxs("div",{className:"w-full max-w-md space-y-7",children:[e.jsxs("header",{className:"text-center space-y-1.5",children:[e.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:s("onboarding.chooser.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s("onboarding.chooser.description")})]}),l&&t&&e.jsxs("div",{className:"app-region-no-drag flex gap-1.5",children:[e.jsx("button",{type:"button",className:re("flex-1 px-4 py-2 rounded-lg border transition-colors text-sm",u==="local"?"border-[var(--interactive-selection)] text-foreground bg-[var(--interactive-selection)]/10":"border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground"),onClick:()=>k("local"),children:s("onboarding.chooser.tabs.localInstall")}),e.jsx("button",{type:"button",className:re("flex-1 px-4 py-2 rounded-lg border transition-colors text-sm",u==="remote"?"border-[var(--interactive-selection)] text-foreground bg-[var(--interactive-selection)]/10":"border-border text-muted-foreground hover:text-foreground hover:border-muted-foreground"),onClick:()=>k("remote"),children:s("onboarding.chooser.tabs.connectRemote")})]}),l&&u==="remote"?e.jsx("div",{className:"app-region-no-drag",children:e.jsx(fe,{onBack:()=>t&&k("local"),showBackButton:!1,showInstancePicker:!t,onSwitchToLocal:t?()=>k("local"):void 0})}):null,$&&e.jsxs("div",{className:"space-y-4",children:[K==="windows"&&e.jsxs("div",{className:"rounded-lg border border-border bg-background/50 p-4",children:[e.jsx("div",{className:"text-sm text-foreground",children:s("onboarding.localSetup.windows.title")}),e.jsxs("ol",{className:"mt-2 list-decimal space-y-1 pl-5 text-sm text-muted-foreground",children:[e.jsx("li",{children:s("onboarding.localSetup.windows.stepRunInstallInWsl")}),e.jsx("li",{children:s("onboarding.localSetup.windows.stepSetBinaryPath")})]})]}),e.jsx("p",{className:"text-sm text-muted-foreground text-center leading-relaxed",children:s("onboarding.localSetup.intro")}),e.jsx("div",{className:"app-region-no-drag rounded-lg border border-border bg-background/60 backdrop-blur-sm px-4 py-3 font-mono text-sm",children:r?e.jsxs("div",{className:"flex items-center gap-2",style:{color:"var(--status-success)"},children:[e.jsx(A,{name:"check",className:"h-4 w-4"}),s("onboarding.common.status.copiedToClipboard")]}):e.jsx(Re,{onCopy:H,copyTitle:s("onboarding.common.copyToClipboard")})}),e.jsxs("div",{className:"app-region-no-drag flex items-center justify-between",children:[e.jsxs("a",{href:c,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1",children:[s(K==="windows"?"onboarding.localSetup.docs.windows":"onboarding.localSetup.docs.default"),e.jsx(A,{name:"external-link",className:"h-3 w-3"})]}),e.jsx("button",{type:"button",onClick:N,disabled:w,className:"text-xs text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50",children:s(w?"onboarding.localSetup.actions.checking":"onboarding.localSetup.actions.checkNow")})]}),e.jsxs("div",{className:"rounded-lg border px-4 py-3 flex items-center gap-3",style:{borderColor:"color-mix(in srgb, var(--primary-base) 20%, transparent)",backgroundColor:"color-mix(in srgb, var(--primary-base) 6%, transparent)"},role:"status","aria-live":"polite",children:[e.jsxs("span",{className:"relative inline-flex h-2.5 w-2.5 shrink-0","aria-hidden":!0,children:[e.jsx("span",{className:"absolute inset-0 rounded-full",style:{backgroundColor:"var(--primary-base)",animation:"pulse-opacity 1.6s ease-in-out infinite"}}),e.jsx("span",{className:"absolute inset-[-4px] rounded-full",style:{backgroundColor:"var(--primary-base)",animation:"pulse-opacity-dim 1.6s ease-in-out infinite",opacity:0}})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-sm text-foreground leading-tight",children:s("onboarding.localSetup.status.watching")}),e.jsx("div",{className:"text-xs text-muted-foreground leading-tight mt-0.5",children:s("onboarding.localSetup.status.autoContinue")})]})]}),e.jsxs("details",{className:"app-region-no-drag group rounded-lg border border-border/60 px-4 open:bg-background/40 transition-colors",open:C,onToggle:m=>g(m.currentTarget.open),children:[e.jsxs("summary",{className:"flex items-center justify-between cursor-pointer py-2.5 text-sm text-muted-foreground hover:text-foreground transition-colors list-none [&::-webkit-details-marker]:hidden",children:[e.jsx("span",{children:s("onboarding.localSetup.advanced.title")}),e.jsx(A,{name:"arrow-down-s",className:"h-4 w-4 transition-transform group-open:rotate-180"})]}),e.jsxs("div",{className:"pb-4 space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(V,{value:j,onChange:m=>U(m.target.value),placeholder:_,disabled:h,className:"flex-1 font-mono text-xs"}),e.jsx(L,{type:"button",variant:"secondary",size:"sm",onClick:E,disabled:h||!l,children:s("onboarding.localSetup.actions.browse")}),e.jsx(L,{type:"button",size:"sm",onClick:F,disabled:h||!j.trim(),children:s("onboarding.localSetup.actions.apply")})]}),e.jsx("p",{className:"text-xs text-muted-foreground/70",children:s("onboarding.localSetup.helper.saveAndReload")})]})]}),e.jsxs("details",{className:"app-region-no-drag group rounded-lg border border-border/60 px-4 open:bg-background/40 transition-colors",open:T,onToggle:m=>I(m.currentTarget.open),children:[e.jsxs("summary",{className:"flex items-center justify-between cursor-pointer py-2.5 text-sm text-muted-foreground hover:text-foreground transition-colors list-none [&::-webkit-details-marker]:hidden",children:[e.jsx("span",{children:s("onboarding.localSetup.troubleshoot.title")}),e.jsx(A,{name:"arrow-down-s",className:"h-4 w-4 transition-transform group-open:rotate-180"})]}),e.jsx("ul",{className:"pb-4 space-y-1.5 text-xs text-muted-foreground list-disc pl-4",children:K==="windows"?e.jsx(e.Fragment,{children:e.jsx("li",{children:s("onboarding.localSetup.windows.hintDetectionFailed")})}):e.jsxs(e.Fragment,{children:[e.jsx("li",{children:s("onboarding.localSetup.hint.ensurePath")}),e.jsx("li",{children:s("onboarding.localSetup.hint.setEnv")}),e.jsx("li",{children:s("onboarding.localSetup.hint.missingRuntime")})]})})]})]})]})})}const Ue="curl -fsSL https://opencode.ai/install | bash",Te="https://opencode.ai/docs";function Ke(a){const t=G.c(5),{onCopy:s,copyTitle:r}=a;let n;t[0]===Symbol.for("react.memo_cache_sentinel")?(n=e.jsxs("code",{children:[e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"curl"}),e.jsx("span",{className:"text-muted-foreground",children:" -fsSL "}),e.jsx("span",{style:{color:"var(--syntax-string)"},children:"https://opencode.ai/install"}),e.jsx("span",{className:"text-muted-foreground",children:" | "}),e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"bash"})]}),t[0]=n):n=t[0];let l;t[1]===Symbol.for("react.memo_cache_sentinel")?(l=e.jsx(A,{name:"file-copy",className:"h-4 w-4"}),t[1]=l):l=t[1];let d;return t[2]!==r||t[3]!==s?(d=e.jsxs("div",{className:"flex items-center justify-center gap-3",children:[n,e.jsx("button",{onClick:s,className:"inline-flex items-center text-muted-foreground hover:text-foreground transition-colors",title:r,children:l})]}),t[2]=r,t[3]=s,t[4]=d):d=t[4],d}const Ie=3e4;function De({onBack:a,onCliAvailable:t,isFromRecovery:s=!1,onSwitchToRemote:r}){const{t:n}=J(),[l,d]=i.useState(!1),[h,o]=i.useState(!1),[w,S]=i.useState(!1),[j,U]=i.useState(!1),[K,x]=i.useState(!1),[u,k]=i.useState(null),[C,g]=i.useState(""),[T,I]=i.useState("unknown");i.useEffect(()=>{const c=setTimeout(()=>o(!0),Ie);return()=>clearTimeout(c)},[]),i.useEffect(()=>{S(B())},[]),i.useEffect(()=>{if(typeof navigator>"u"){I("unknown");return}const c=navigator.userAgent||"";if(/Windows/i.test(c)){I("windows");return}if(/Macintosh|Mac OS X/i.test(c)){I("macos");return}if(/Linux/i.test(c)){I("linux");return}I("unknown")},[]),i.useEffect(()=>{let c=!1;return(async()=>{try{const _=await ue();if(!_||c)return;const $=_.opencodeBinary??"";$&&g($)}catch{}})(),()=>{c=!0}},[]);const y=i.useCallback(async c=>{c.target.closest("button, a, input, select, textarea, code")||c.button===0&&w&&await me()},[w]),f=i.useCallback(async()=>{try{const c=await X("/health");if(!c.ok)return!1;const _=await c.json();return _.openCodeRunning===!0||_.isOpenCodeReady===!0}catch{return!1}},[]),b=i.useCallback(async()=>{if(!(typeof window>"u")&&w)try{const c=await pe();c.success&&c.path&&c.path.trim().length>0&&g(c.path.trim())}catch{}},[w]),R=i.useCallback(async()=>{U(!0);try{if(await he({opencodeBinary:C.trim()}),w){await O();return}await X("/api/config/reload",{method:"POST"})}finally{setTimeout(()=>U(!1),1e3)}},[w,C]),N=i.useCallback(async()=>{const c=await xe(Ue);c.ok?(d(!0),setTimeout(()=>d(!1),2e3)):console.error("Failed to copy:",c.error)},[]),E=i.useCallback(async()=>{x(!0),k(null);try{await f()?t?.():k(n("onboarding.localSetup.errors.cliNotReady"))}catch(c){k(c instanceof Error?c.message:n("onboarding.localSetup.errors.detectionFailed"))}finally{x(!1)}},[f,t,n]),F=Te,H=T==="windows"?"C:\\Users\\you\\AppData\\Roaming\\npm\\opencode.cmd":T==="linux"?"/home/you/.bun/bin/opencode":"/Users/you/.bun/bin/opencode";return e.jsxs("div",{className:"h-full flex items-center justify-center bg-transparent p-8 relative cursor-default select-none",onMouseDown:y,children:[e.jsxs("div",{className:"w-full max-w-lg space-y-4 text-center",children:[e.jsx("div",{className:"flex items-center",children:e.jsx(L,{variant:"ghost",onClick:a,className:"p-0 text-muted-foreground hover:text-foreground",children:n("onboarding.common.actions.back")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h1",{className:"text-3xl font-semibold tracking-tight text-foreground",children:n("onboarding.localSetup.title")}),e.jsx("p",{className:"text-muted-foreground",children:n("onboarding.localSetup.description")})]}),T==="windows"&&e.jsxs("div",{className:"mx-auto max-w-2xl rounded-lg border border-border bg-background/50 p-4 text-left",children:[e.jsx("div",{className:"text-sm text-foreground",children:n("onboarding.localSetup.windows.title")}),e.jsxs("ol",{className:"mt-2 list-decimal space-y-1 pl-5 text-sm text-muted-foreground",children:[e.jsx("li",{children:n("onboarding.localSetup.windows.stepRunInstallInWsl")}),e.jsx("li",{children:n("onboarding.localSetup.windows.stepSetBinaryPath")})]})]}),e.jsx("div",{className:"flex justify-center",children:e.jsx("div",{className:"bg-background/60 backdrop-blur-sm border border-border rounded-lg px-5 py-3 font-mono text-sm w-fit",children:l?e.jsxs("div",{className:"flex items-center justify-center gap-2",style:{color:"var(--status-success)"},children:[e.jsx(A,{name:"check",className:"h-4 w-4"}),n("onboarding.common.status.copiedToClipboard")]}):e.jsx(Ke,{onCopy:N,copyTitle:n("onboarding.common.copyToClipboard")})})}),e.jsxs("a",{href:F,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-muted-foreground hover:text-foreground transition-colors inline-flex items-center gap-1 justify-center",children:[n(T==="windows"?"onboarding.localSetup.docs.windows":"onboarding.localSetup.docs.default"),e.jsx(A,{name:"external-link",className:"h-3 w-3"})]}),u&&e.jsx("div",{className:"mx-auto max-w-md rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive",children:u}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(L,{type:"button",onClick:E,disabled:K,className:"w-full max-w-xs",size:"lg",children:n(K?"onboarding.localSetup.actions.checking":"onboarding.localSetup.actions.checkAndContinue")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:n("onboarding.localSetup.helper.checkAndContinue")})]}),e.jsx("div",{className:"mx-auto w-full max-w-xl pt-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"text-sm text-muted-foreground",children:n("onboarding.localSetup.field.alreadyInstalled")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(V,{value:C,onChange:c=>g(c.target.value),placeholder:H,disabled:j,className:"flex-1 font-mono text-xs"}),e.jsx(L,{type:"button",variant:"secondary",onClick:b,disabled:j||!w,children:n("onboarding.localSetup.actions.browse")}),e.jsx(L,{type:"button",onClick:R,disabled:j,children:n("onboarding.localSetup.actions.apply")})]}),e.jsx("div",{className:"text-xs text-muted-foreground/70",children:n("onboarding.localSetup.helper.saveAndReload")})]})}),s&&r&&e.jsxs("div",{className:"text-center pt-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:n("onboarding.localSetup.remotePreference")}),e.jsx(L,{variant:"link",onClick:r,children:n("onboarding.localSetup.actions.connectRemoteServer")})]})]}),h&&e.jsx("div",{className:"absolute bottom-8 left-0 right-0 text-center space-y-1",children:T==="windows"?e.jsx(e.Fragment,{children:e.jsx("p",{className:"text-sm text-muted-foreground/70",children:n("onboarding.localSetup.windows.hintDetectionFailed")})}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted-foreground/70",children:n("onboarding.localSetup.hint.ensurePath")}),e.jsx("p",{className:"text-sm text-muted-foreground/70",children:n("onboarding.localSetup.hint.setEnv")}),e.jsx("p",{className:"text-sm text-muted-foreground/70",children:n("onboarding.localSetup.hint.missingRuntime")})]})})]})}function se(a,t){if(a?.trim())return ne(a.trim());if(t)return ne(t)}function _e(a,t,s){switch(a){case"local-unavailable":return{title:"Local OpenCode Unavailable",description:"OpenCode CLI could not be started or is not installed. Install OpenCode or connect to a remote server instead.",titleKey:"onboarding.desktopRecovery.localUnavailable.title",descriptionKey:"onboarding.desktopRecovery.localUnavailable.description",iconKey:"local",showRetry:!0,retryLabel:"Retry Local",retryLabelKey:"onboarding.desktopRecovery.localUnavailable.retry",showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Set Up Local",useLocalLabelKey:"onboarding.desktopRecovery.localUnavailable.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"};case"remote-missing":return{title:"No Default Connection",description:"Your saved default connection could not be found. Choose how you want to connect.",titleKey:"onboarding.desktopRecovery.noDefaultConnection.title",descriptionKey:"onboarding.desktopRecovery.noDefaultConnection.description",iconKey:"local",showRetry:!1,showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Use Local",useLocalLabelKey:"onboarding.desktopRecovery.common.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"};case"remote-unreachable":{const r=se(t,s);return{title:"Remote Server Unreachable",description:`Could not connect to "${r||"the remote server"}". Check your network connection and verify the server address.`,titleKey:"onboarding.desktopRecovery.remoteUnreachable.title",descriptionKey:"onboarding.desktopRecovery.remoteUnreachable.description",descriptionParams:r?{host:r}:void 0,iconKey:"remote",showRetry:!0,retryLabel:"Retry Connection",retryLabelKey:"onboarding.desktopRecovery.remoteUnreachable.retry",showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Use Local",useLocalLabelKey:"onboarding.desktopRecovery.common.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"}}case"remote-wrong-service":{const r=se(t,s);return{title:"Incompatible Server",description:`The server at "${r||"unknown"}" is not running OpenChamber. Verify the address points to an OpenChamber server.`,titleKey:"onboarding.desktopRecovery.incompatibleServer.title",descriptionKey:"onboarding.desktopRecovery.incompatibleServer.description",descriptionParams:r?{host:r}:void 0,iconKey:"remote",showRetry:!1,showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Use Local",useLocalLabelKey:"onboarding.desktopRecovery.common.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"}}case"remote-incompatible":{const r=se(t,s);return{title:"Server Update Required",description:`The OpenChamber server at "${r||"unknown"}" is not compatible with this app version. Update OpenChamber on the server, then try again.`,titleKey:"onboarding.desktopRecovery.remoteIncompatible.title",descriptionKey:"onboarding.desktopRecovery.remoteIncompatible.description",descriptionParams:r?{host:r}:void 0,iconKey:"remote",showRetry:!0,retryLabel:"Retry Connection",retryLabelKey:"onboarding.desktopRecovery.remoteUnreachable.retry",showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Use Local",useLocalLabelKey:"onboarding.desktopRecovery.common.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"}}case"missing-default-host":return{title:"No Default Connection",description:"Your saved default connection could not be found. Choose how you want to connect.",titleKey:"onboarding.desktopRecovery.noDefaultConnection.title",descriptionKey:"onboarding.desktopRecovery.noDefaultConnection.description",iconKey:"local",showRetry:!1,showUseLocal:!0,showUseRemote:!0,useLocalLabel:"Use Local",useLocalLabelKey:"onboarding.desktopRecovery.common.useLocal",useRemoteLabel:"Use Remote",useRemoteLabelKey:"onboarding.desktopRecovery.common.useRemote"};default:{const r=a;throw new Error(`Unknown recovery variant: ${r}`)}}}function Ee(a){switch(a){case"local":return e.jsx(A,{name:"macbook",className:"h-8 w-8"});case"remote":return e.jsx(A,{name:"server",className:"h-8 w-8"})}}function Ae({variant:a,hostLabel:t,hostUrl:s,onRetry:r,onUseLocal:n,onUseRemote:l,isRetrying:d=!1}){const{t:h}=J(),o=_e(a,t,s),w=o.retryLabelKey??"onboarding.desktopRecovery.actions.retryConnection",S=i.useMemo(()=>{if(o.descriptionParams?.host)return o.descriptionParams;if(a==="remote-unreachable")return{host:h("onboarding.desktopRecovery.placeholders.remoteServer")};if(a==="remote-wrong-service"||a==="remote-incompatible")return{host:h("onboarding.desktopRecovery.placeholders.unknownServer")}},[o.descriptionParams,h,a]);return e.jsx("div",{className:"flex flex-col items-center justify-center h-full p-8",children:e.jsxs("div",{className:"w-full max-w-md space-y-6",children:[e.jsxs("div",{className:"flex flex-col items-center space-y-3 text-center",children:[e.jsx("div",{className:"p-3 rounded-full",style:{backgroundColor:"var(--status-warning)",opacity:.15},children:e.jsx("div",{style:{color:"var(--status-warning)"},children:Ee(o.iconKey)})}),e.jsx("h1",{className:"typography-ui-header text-xl font-semibold text-foreground",children:h(o.titleKey)}),e.jsx("p",{className:"text-muted-foreground text-sm max-w-sm",children:h(o.descriptionKey,S)})]}),s&&(a==="remote-unreachable"||a==="remote-wrong-service"||a==="remote-incompatible")&&e.jsxs("div",{className:"rounded-lg border border-border bg-background/50 p-3",children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:h("onboarding.remoteConnection.field.serverAddress")}),e.jsx("div",{className:"font-mono text-sm text-foreground truncate",children:ne(s)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[o.showRetry&&r&&e.jsxs(L,{onClick:r,disabled:d,className:"w-full",children:[e.jsx(A,{name:"refresh",className:re("h-4 w-4",d&&"animate-spin")}),h(d?"onboarding.desktopRecovery.actions.retrying":w)]}),e.jsxs("div",{className:"flex gap-2",children:[o.showUseLocal&&n&&e.jsxs(L,{variant:"outline",onClick:n,disabled:d,className:"flex-1",children:[e.jsx(A,{name:"macbook",className:"h-4 w-4"}),h(o.useLocalLabelKey)]}),o.showUseRemote&&l&&e.jsxs(L,{variant:"outline",onClick:l,disabled:d,className:"flex-1",children:[e.jsx(A,{name:"server",className:"h-4 w-4"}),h(o.useRemoteLabelKey)]})]})]})]})})}function de(a,t){if(t==="use-remote")return{kind:"remote-form"};switch(a){case"local-unavailable":return{kind:"local-setup"};case"remote-unreachable":case"remote-incompatible":case"remote-wrong-service":case"remote-missing":case"missing-default-host":return{kind:"switch-default-to-local"};default:{const s=a;throw new Error(`Unhandled RecoveryVariant: ${s}`)}}}function Fe(a){const t=G.c(29),{variant:s,hostUrl:r,hostLabel:n,onRetry:l,onChooseRemote:d,showRemoteForm:h,onCloseRemoteForm:o,onSwitchToLocalFromRemote:w,onEnterLocalSetup:S,isRetrying:j,localAvailable:U}=a,K=h===void 0?!1:h,x=j===void 0?!1:j,u=U===void 0?!0:U,k=Pe;let C;t[0]!==l?(C=async()=>{if(B()){await O();return}await X("/api/config/reload",{method:"POST"}),l?.()},t[0]=l,t[1]=C):C=t[1];const g=C;let T;t[2]!==S||t[3]!==s?(T=async()=>{if(de(s,"use-local").kind==="local-setup"){S?.();return}if(await k("local"),B()){await O();return}window.location.reload()},t[2]=S,t[3]=s,t[4]=T):T=t[4];const I=T;let y;t[5]!==d||t[6]!==s?(y=()=>{de(s,"use-remote").kind==="remote-form"&&d?.()},t[5]=d,t[6]=s,t[7]=y):y=t[7];const f=y;if(K){const N=s==="remote-wrong-service"?"":r||"",E=s==="remote-wrong-service"?"":n||"";let F;t[8]!==d||t[9]!==o?(F=o||(()=>d?.()),t[8]=d,t[9]=o,t[10]=F):F=t[10];const H=!u;let c;t[11]!==u||t[12]!==S||t[13]!==w?(c=u?w||(()=>{k("local").then(()=>{B()?O():S?.()})}):void 0,t[11]=u,t[12]=S,t[13]=w,t[14]=c):c=t[14];let _;return t[15]!==E||t[16]!==N||t[17]!==F||t[18]!==H||t[19]!==c?(_=e.jsx(fe,{onBack:F,initialUrl:N,initialLabel:E,isRecoveryMode:!0,showInstancePicker:H,onSwitchToLocal:c}),t[15]=E,t[16]=N,t[17]=F,t[18]=H,t[19]=c,t[20]=_):_=t[20],_}const b=u?I:void 0;let R;return t[21]!==g||t[22]!==f||t[23]!==n||t[24]!==r||t[25]!==x||t[26]!==b||t[27]!==s?(R=e.jsx(Ae,{variant:s,hostLabel:n,hostUrl:r,onRetry:g,onUseLocal:b,onUseRemote:f,isRetrying:x}),t[21]=g,t[22]=f,t[23]=n,t[24]=r,t[25]=x,t[26]=b,t[27]=s,t[28]=R):R=t[28],R}async function Pe(a){if(!B())return;const t=await W();await z({...t,...a==="local"?{defaultHostId:"local"}:{},initialHostChoiceCompleted:!0})}function po(a){const t=G.c(29),{onBack:s,onCliAvailable:r,mode:n,recoveryVariant:l,recoveryHostUrl:d,recoveryHostLabel:h,onEnterLocalSetup:o,localAvailable:w}=a,S=n===void 0?"first-launch":n,j=l===void 0?"missing-default-host":l,U=w===void 0?!0:w,[K,x]=i.useState(!1),[u,k]=i.useState(!1);let C;t[0]===Symbol.for("react.memo_cache_sentinel")?(C=()=>{k(!1),x(!1)},t[0]=C):C=t[0];let g;t[1]!==S||t[2]!==h||t[3]!==d||t[4]!==j?(g=[S,j,d,h],t[1]=S,t[2]=h,t[3]=d,t[4]=j,t[5]=g):g=t[5],i.useEffect(C,g);const T=u?"local-setup":S;if(T==="recovery"){let y;t[6]===Symbol.for("react.memo_cache_sentinel")?(y=()=>x(!0),t[6]=y):y=t[6];let f,b;t[7]===Symbol.for("react.memo_cache_sentinel")?(f=()=>x(!1),b=()=>{x(!1),k(!0)},t[7]=f,t[8]=b):(f=t[7],b=t[8]);let R;t[9]!==o?(R=()=>{k(!0),o?.()},t[9]=o,t[10]=R):R=t[10];let N;return t[11]!==U||t[12]!==h||t[13]!==d||t[14]!==j||t[15]!==K||t[16]!==R?(N=e.jsx(Fe,{variant:j,hostUrl:d,hostLabel:h,onChooseRemote:y,showRemoteForm:K,onCloseRemoteForm:f,onSwitchToLocalFromRemote:b,onEnterLocalSetup:R,localAvailable:U}),t[11]=U,t[12]=h,t[13]=d,t[14]=j,t[15]=K,t[16]=R,t[17]=N):N=t[17],N}if(T==="local-setup"){let y;t[18]!==s||t[19]!==u?(y=()=>{u?k(!1):s?.()},t[18]=s,t[19]=u,t[20]=y):y=t[20];let f;t[21]===Symbol.for("react.memo_cache_sentinel")?(f=()=>x(!0),t[21]=f):f=t[21];let b;return t[22]!==r||t[23]!==u||t[24]!==y?(b=e.jsx(De,{onBack:y,onCliAvailable:r,isFromRecovery:u,onSwitchToRemote:f}),t[22]=r,t[23]=u,t[24]=y,t[25]=b):b=t[25],b}let I;return t[26]!==U||t[27]!==r?(I=e.jsx(Le,{onCliAvailable:r,localAvailable:U}),t[26]=U,t[27]=r,t[28]=I):I=t[28],I}export{po as OnboardingScreen};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as bt,u as qe,a as he,x as Ze,h as Xe,A as jt}from"./index-Dqc6USl3.js";import{c as Ct,s as Rt,P as Pt,C as Mt}from"./shikiHighlight-BPu3JiQs.js";import{f as Tt,z as H,cA as kt,aF as Nt,b as et,K as Et,af as It,Z as Dt,bg as Vt,S as Ft,fQ as Lt,a0 as At,ic as Ot,l as tt,fP as Kt,av as nt,hc as $t,fN as zt,dv as rt,fS as Wt,fT as _t,m as Bt,id as Gt,ap as st,aa as ge,ab as ve,aq as it,B as ne,I as z,ac as we,as as ot,be as re,g as Jt,c6 as Ut,ay as Ht,cn as Qt,ie as Yt}from"./useAppFontEffects-ne84JBVL.js";import{u as qt,n as Zt}from"./useInlineCommentController-CgS0fnw_.js";import{b as Xt}from"./CodeMirrorCommentWidgets-B4a0JkUz.js";import{getResolvedShikiTheme as en}from"./appThemeRegistry-DLicw4dH.js";import{E as tn}from"./vendor-codemirror-view-CiLROUVV.js";import{am as nn}from"./runtimeEndpointReset-DdrazOVH.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CgAdXWZO.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-search-BmS-GmcX.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-replit-codemirror-vim-B2DJlAhT.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-CsXYnR5c.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-ClYN8CzB.js";import"./vendor-tanstack-virtual-core-BewVQryB.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Bx2EHc1O.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./textMateThemeFromAppTheme-DWqRPo9A.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./GuestAttachDialog-B808E0-d.js";import"./PluginPane-DEcgDQ9h.js";const rn=()=>{const l=new Map,c=new Map;return{schedule:(o,s,f)=>{if(s<=(c.get(o)??Number.NEGATIVE_INFINITY))return l.get(o)??Promise.resolve();c.set(o,s);const g=(l.get(o)??Promise.resolve()).then(f,f);return l.set(o,g.catch(()=>{c.get(o)===s&&c.delete(o)})),g},pendingFor:async o=>{await l.get(o)},reset:o=>{c.delete(o)}}},x=l=>{if(!l)return"";const c=l.replace(/\\/g,"/");return c==="/"?"/":c.replace(/\/+$/,"")},Se=(l,c)=>{const o=x(l),s=c.replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"");return!o||o==="/"?`/${s}`:`${o}/${s}`},sn=(l,c,o)=>Se(Se(Se(l,".opencode"),"plans"),`${c}-${o}.md`),on=(l,c)=>`~/.opencode/plans/${l}-${c}.md`,an=(l,c)=>{const o=l.trim();return o.startsWith("~")?o==="~"?c||o:(o.startsWith("~/")||o.startsWith("~\\"))&&c?`${c}${o.slice(1)}`:o:o},ln=(l,c)=>{const o=x(c.currentDirectory),s=x(c.homeDirectory),f=x(l);return o&&f.startsWith(o+"/")?f.slice(o.length+1):s&&f===s?"~":s&&f.startsWith(s+"/")?`~${f.slice(s.length)}`:f},cn=(l,c,o)=>{const s=x(l.trim());if(!s)return null;const f=o?c.find(g=>g.id===o)??null:null;if(f?.path){const g=x(f.path);if(s===g||s.startsWith(`${g}/`))return{id:f.id,path:f.path}}const N=c.filter(g=>{const E=x(g.path);return s===E||s.startsWith(`${E}/`)}).sort((g,E)=>x(E.path).length-x(g.path).length)[0];return N?{id:N.id,path:N.path}:null},un=l=>jt(()=>l()),ds=({targetPath:l=null,savedProjectPlan:c=null,onNavigatedToChat:o})=>{const{t:s}=Tt(),f=H(e=>e.currentSessionId),N=H(e=>e.createSession),g=H(e=>e.initializeNewOpenChamberSession),E=H(e=>e.sendMessage),ye=H(e=>e.setCurrentSession),xe=kt(),W=bt(e=>e.homeDirectory),be=Nt(e=>e.planModeEnabled),je=et(e=>e.projects),Ce=et(e=>e.activeProjectId),Re=Et(e=>e.directories),Pe=It()??"",Me=qe(e=>e.setSessionSwitcherOpen),_=Dt(),I=t.useSyncExternalStore(un,he,he),{isMobile:Te}=Vt(),{currentTheme:Q}=Ft(),S=t.useMemo(()=>f?xe.find(e=>e.id===f)??null:null,[f,xe]),R=t.useMemo(()=>{const e=typeof S?.directory=="string"?S.directory:"";return x(e||"")},[S?.directory]),ke=t.useMemo(()=>x(Pe||R),[Pe,R]),B=t.useMemo(()=>cn(ke,je,Ce),[Ce,ke,je]),se=c?.projectRef.id??null,ie=c?.projectRef.path??null,w=t.useMemo(()=>se&&ie?{id:se,path:ie}:null,[se,ie]),P=c?.planId??null,G=w&&P?JSON.stringify(["saved-plan",I,Lt(w),P]):null,L=w?.id===At,Y=t.useMemo(()=>{const e=w??B;return e?Re.get(e.path)?.isGitRepo===!0:!1},[B,Re,w]),[D,A]=t.useState(null),[Ne,Ee]=t.useState(!1),[p,M]=t.useState(null),[oe,ae]=t.useState(null),at=!!p||!!oe,le=t.useMemo(()=>!p||!R||!W?p:ln(p,{currentDirectory:R,homeDirectory:W}),[p,R,W]),[h,b]=t.useState(""),{isPlaying:q,play:lt,stop:ct}=Ot(),ut=tt(e=>e.showMessageTTSButtons),[Ie,ce]=t.useState(null),[De,ue]=t.useState(null),de=t.useMemo(()=>le&&le.split("/").pop()||s("planView.file.defaultName"),[le,s]),me=t.useMemo(()=>h.trim()?Kt(h,s("planView.title.default")).title:s("planView.title.default"),[h,s]),Z=t.useMemo(()=>me.trim()||s("planView.title.default"),[me,s]),[dt,V]=t.useState(!1),[mt,Ve]=t.useState(!1),[X,Fe]=t.useState("edit"),J=t.useRef(null),[u,y]=t.useState(null),Le=t.useRef(null),pt=t.useRef(null),Ae="openchamber:plan:md-viewer-mode";t.useEffect(()=>{try{const e=localStorage.getItem(Ae);if(!e)return;const i=JSON.parse(e);(i==="preview"||i==="edit")&&Fe(i)}catch{}},[]);const ft=t.useCallback(e=>{Fe(e);try{localStorage.setItem(Ae,JSON.stringify(e))}catch{}},[]),O=t.useRef(!1),T=t.useRef(null),[Oe,K]=t.useState(!1);t.useEffect(()=>{const e=()=>{O.current=!1,T.current=null,K(!1)};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[]);const ht=t.useCallback((e,i)=>{const a=e.split(`
|
|
2
|
-
`),r=Math.max(1,i.start),d=Math.min(a.length,i.end);return r>d?"":a.slice(r-1,d).join(`
|
|
3
|
-
`)},[]),gt=qt({source:"plan",fileLabel:de,language:p&&nt(p)||"markdown",getCodeForRange:e=>ht(h,Zt(e)),toStoreRange:e=>({startLine:e.start,endLine:e.end}),fromDraftRange:e=>({start:e.startLine,end:e.endLine})}),{drafts:Ke,commentText:ee,setCommentText:$e,editingDraftId:pe,setSelection:ze,saveComment:We,cancel:U,reset:_e,startEdit:Be,deleteDraft:Ge}=gt;t.useEffect(()=>{y(null),_e()},[h,_e]),t.useEffect(()=>{ze(u)},[u,ze]);const Je=t.useCallback(()=>{y(null),U()},[U]),Ue=t.useCallback((e,i)=>{i&&y(i),We(e,i??u??void 0),y(null)},[u,We]);t.useEffect(()=>{if(!u)return;const e=a=>{const r=a.target;r.closest('[data-comment-card="true"]')||r.closest('[data-comment-input="true"]')||r.closest(".oc-block-widget")||r.closest(".cm-gutterElement")||r.closest("[data-sonner-toast]")||r.closest("[data-sonner-toaster]")||ee.trim()||(y(null),U())},i=window.setTimeout(()=>{document.addEventListener("click",e)},100);return()=>{window.clearTimeout(i),document.removeEventListener("click",e)}},[U,ee,pe,Te,u]);const fe=qe(e=>e.editorFontSize),vt=t.useMemo(()=>{const e=p?nt(p):null,i=!!e&&e!=="markdown",a=[Ct(Q,i?{syntaxColors:!1,fontSize:fe}:{fontSize:fe})],r=$t(p||"plan.md");return r&&a.push(r),i&&e&&a.push(Rt({language:e,themeName:Q.metadata.id,theme:en(Q)})),a.push(tn.lineWrapping),a},[Q,p,fe]),j=t.useRef({key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""}),C=t.useState(rn)[0],He=t.useCallback(async(e,i)=>{if("filePath"in e){const r=_.files??Ze()?.files;if(r?.writeFile){if(!(await r.writeFile(e.filePath,i))?.success)throw new Error("Plan file write failed");return}const d=await Xe("/api/fs/write",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.filePath,content:i})});if(!d.ok)throw new Error(`Failed to write plan file (${d.status})`);return}if(!await zt.getState().savePlan(e.projectRef,e.planId,i))throw new Error("Plan save rejected: the plan no longer exists")},[_.files]),Qe=t.useRef(He);Qe.current=He;const F=t.useCallback(()=>{const e=j.current;if(!e.key||!e.target||e.editRevision<=e.savedRevision)return;const i={key:e.key,target:e.target,content:e.content,revision:e.editRevision,runtimeKey:e.runtimeKey,write:Qe.current};C.schedule(i.key,i.revision,async()=>{if(he()!==i.runtimeKey)return;await i.write(i.target,i.content);const a=j.current;a.key===i.key&&(a.savedRevision=Math.max(a.savedRevision,i.revision),ce(null))}).catch(a=>{j.current.key===i.key&&ce(a instanceof Error?a.message:"Plan save failed")})},[C]);t.useEffect(()=>{if(!be&&!l&&!P){F(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},M(null),ae(null),b(""),V(!1);return}let e=!1;const i=async r=>{if(_.files?.readFile)return(await _.files.readFile(r))?.content??"";const d=Ze()?.files;if(d?.readFile)return(await d.readFile(r,{optional:!0}))?.content??"";const m=await Xe(`/api/fs/read?path=${encodeURIComponent(r)}&optional=true`,{cache:"no-store"});if(!m.ok)throw new Error(`Failed to read plan file (${m.status})`);return m.text()};return(async()=>{if(F(),j.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},M(null),ae(null),b(""),ce(null),ue(null),P&&w&&G){if(await C.pendingFor(G),e)return;C.reset(G),V(!0);try{const r=await Yt(w,P);if(e)return;if(!r){ue("Plan not found");return}j.current={key:G,target:{projectRef:w,planId:P},content:r.raw,editRevision:0,savedRevision:0,runtimeKey:I},b(r.raw),ae(P)}catch(r){if(e)return;ue(r instanceof Error?r.message:"Plan load failed")}finally{e||V(!1)}return}if(l){const r=JSON.stringify(["plan-file",I,l]);if(await C.pendingFor(r),e)return;C.reset(r),V(!0);try{const d=await i(l);if(e)return;j.current={key:r,target:{filePath:l},content:d,editRevision:0,savedRevision:0,runtimeKey:I},M(l),b(d)}catch{if(e)return;M(null),b("")}finally{e||V(!1)}return}if(!S?.slug||!S?.time?.created||!R){M(null),b("");return}V(!0);try{const r=sn(R,S.time.created,S.slug),d=an(on(S.time.created,S.slug),W||null);let m=null;try{await i(r),m=r}catch{}if(!m)try{await i(d),m=d}catch{}if(e)return;if(!m){M(null),b("");return}const v=JSON.stringify(["plan-file",I,m]);if(await C.pendingFor(v),e)return;const $=await i(m);if(e)return;C.reset(v),j.current={key:v,target:{filePath:m},content:$,editRevision:0,savedRevision:0,runtimeKey:I},M(m),b($)}catch{if(e)return;M(null),b("")}finally{e||V(!1)}})(),()=>{e=!0}},[I,W,be,_.files,P,G,w,C,F,S?.slug,S?.time?.created,R,l]);const wt=t.useCallback(e=>{j.current.content=e,j.current.editRevision+=1,b(e)},[]);t.useEffect(()=>{if(!p&&!oe)return;const e=window.setTimeout(()=>{F()},350);return()=>{window.clearTimeout(e)}},[h,oe,p,F]),t.useEffect(()=>()=>{F()},[F]),t.useEffect(()=>()=>{J.current!==null&&window.clearTimeout(J.current)},[]);const Ye=t.useCallback(()=>{Me(!1),o?.()},[o,Me]),St=t.useCallback(async e=>{const i=w??B;if(!i||!D||L)return;const a=await rt(D.action==="improve"?"plan.improve.visible":"plan.implement.visible",{plan_title:Z}),r=await rt(D.action==="improve"?"plan.improve.instructions":"plan.implement.instructions",{plan_title:Z,plan_path:p??""}),m=[{synthetic:!0,text:p?r:[r,"","The plan is not stored as a file in the repository and has no file path. Its full current contents follow below this note and are the source of truth for the plan. Where the instructions above refer to the plan file, treat the plan as stored in OpenChamber project knowledge (it is edited through the OpenChamber UI): propose plan revisions as plan text in the chat rather than editing a file.","",h].join(`
|
|
4
|
-
`)}];Ee(!0);try{Ye();let v=null,$=i.path;if(D.target==="worktree"){if(!Y)return;const k=await Wt(i.path,_t());if(!k?.id)return;v=k.id,$=k.path}else{const k=await N(void 0,i.path,null);if(!k?.id)return;v=k.id,$=k.directory??i.path,g(k.id,tt.getState().agents??[])}if(!v)return;const te=Bt.getState();te.saveSessionModelSelection(v,e.providerID,e.modelID),e.agent.trim()&&(te.saveSessionAgentSelection(v,e.agent),te.saveAgentModelForSession(v,e.agent,e.providerID,e.modelID),te.saveAgentModelVariantForSession(v,e.agent,e.providerID,e.modelID,e.variant||void 0)),ye(v,$);const xt=e.runAsGoal===!0?[`Implement the plan "${Z}" end-to-end${p?` (plan file: ${p})`:" (the full plan follows)"}.`,p?"Re-read that file for full details — it is the source of truth.":"The full plan follows in this message and is the source of truth.","",h].join(`
|
|
5
|
-
`):null;Gt.getState().setArmed(e.runAsGoal===!0,xt),await E(a,e.providerID,e.modelID,e.agent.trim()||void 0,void 0,void 0,m,e.variant||void 0),A(null)}finally{Ee(!1)}},[Y,h,N,B,g,L,D,p,Ye,w,E,Z,ye]),yt=t.useMemo(()=>Xt({drafts:Ke,editingDraftId:pe,commentText:ee,onTextChange:$e,selection:u,isDragging:Oe,fileLabel:de,newWidgetId:"plan-new-comment-input",mapDraftToRange:e=>({start:e.startLine,end:e.endLine}),onSave:Ue,onCancel:Je,onEdit:e=>{Be(e),y({start:e.startLine,end:e.endLine})},onDelete:Ge}),[ee,Ge,pe,Je,Ue,Oe,u,Ke,de,$e,Be]);return n.jsxs("div",{className:"relative flex h-full min-h-0 min-w-0 w-full flex-col overflow-hidden bg-background",children:[n.jsxs("div",{className:"flex min-w-0 items-center gap-2 border-b border-border/40 px-3 py-1.5 flex-shrink-0",children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("div",{className:"typography-ui-label font-medium truncate",children:me}),De?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:De,children:s("planView.error.loadFailed")}):null,Ie?n.jsx("div",{className:"typography-micro text-[color:var(--status-error)] truncate",title:Ie,children:s("planView.error.saveFailed")}):null]}),at?n.jsxs("div",{className:"flex items-center gap-1",children:[n.jsxs(st,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(it,{asChild:!0,children:n.jsx(ne,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.improvePlanAria"),disabled:!h.trim()||L,children:n.jsx(z,{name:"loop-right-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.improve")})]}),n.jsxs(ot,{align:"end",children:[n.jsx(re,{onClick:()=>A({action:"improve",target:"session"}),disabled:L,children:s("planView.actions.sendToNewSession")}),n.jsx(re,{onClick:()=>A({action:"improve",target:"worktree"}),disabled:!Y,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsxs(st,{children:[n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(it,{asChild:!0,children:n.jsx(ne,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s("planView.actions.implementPlanAria"),disabled:!h.trim()||L,children:n.jsx(z,{name:"code-ai",className:"size-4"})})})}),n.jsx(we,{sideOffset:8,children:s("planView.actions.implement")})]}),n.jsxs(ot,{align:"end",children:[n.jsx(re,{onClick:()=>A({action:"implement",target:"session"}),disabled:L,children:s("planView.actions.sendToNewSession")}),n.jsx(re,{onClick:()=>A({action:"implement",target:"worktree"}),disabled:!Y,children:s("planView.actions.sendToNewWorktreeSession")})]})]}),n.jsx(Pt,{currentMode:X,onToggle:()=>ft(X==="preview"?"edit":"preview")}),X==="preview"&&ut&&n.jsxs(ge,{children:[n.jsx(ve,{asChild:!0,children:n.jsx(ne,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0","aria-label":s(q?"planView.tts.stopSpeaking":"planView.tts.readAloud"),onClick:()=>{q?ct():h.trim()&<(h)},children:q?n.jsx(z,{name:"stop",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(z,{name:"volume-up",className:"h-4 w-4"})})}),n.jsx(we,{sideOffset:8,children:s(q?"planView.tts.stopSpeaking":"planView.tts.readAloud")})]}),n.jsx(ne,{variant:"ghost",size:"sm",onClick:async()=>{(await Jt(h)).ok&&(Ve(!0),J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{Ve(!1)},1200))},className:"h-5 w-5 p-0",title:s("planView.actions.copyPlanContents"),"aria-label":s("planView.actions.copyPlanContents"),children:mt?n.jsx(z,{name:"check",className:"h-4 w-4 text-[color:var(--status-success)]"}):n.jsx(z,{name:"clipboard",className:"h-4 w-4"})})]}):null]}),n.jsx(nn,{open:D!==null,onOpenChange:e=>{!e&&!Ne&&A(null)},target:D?.target??"session",projectDirectory:w?.path??B?.path??null,submitting:Ne,allowRunAsGoal:!0,onConfirm:St}),n.jsx("div",{className:"flex-1 min-h-0 min-w-0 relative",children:n.jsx(Ut,{outerClassName:"h-full min-w-0",className:"h-full min-w-0",children:dt?n.jsx("div",{className:"p-3 typography-ui text-muted-foreground",children:s("planView.state.loading")}):n.jsx("div",{className:"relative h-full",children:n.jsx("div",{className:"h-full",children:X==="preview"?n.jsx("div",{className:"h-full overflow-auto p-3",children:n.jsx(Ht,{fallback:n.jsxs("div",{className:"rounded-md border border-destructive/20 bg-destructive/10 px-3 py-2",children:[n.jsx("div",{className:"mb-1 font-medium text-destructive",children:s("planView.error.previewUnavailable")}),n.jsx("div",{className:"text-sm text-muted-foreground",children:s("planView.error.switchToEditMode")})]}),children:n.jsx(Qt,{content:h,className:"typography-markdown-body",enableFileReferences:!1})})}):n.jsx("div",{className:"relative h-full",ref:pt,children:n.jsx(Mt,{value:h,onChange:wt,readOnly:!1,className:"h-full",extensions:vt,onViewReady:e=>{Le.current=e},onViewDestroy:()=>{Le.current=null},blockWidgets:yt,highlightLines:u?{start:Math.min(u.start,u.end),end:Math.max(u.start,u.end)}:void 0,lineNumbersConfig:{domEventHandlers:{mousedown:(e,i,a)=>{if(!(a instanceof MouseEvent)||a.button!==0)return!1;a.preventDefault();const r=e.state.doc.lineAt(i.from).number;if(u&&!a.shiftKey&&Math.min(u.start,u.end)===r&&Math.max(u.start,u.end)===r)return y(null),U(),O.current=!1,T.current=null,K(!1),!0;if(Te&&u&&!a.shiftKey){const d=Math.min(u.start,u.end,r),m=Math.max(u.start,u.end,r);return y({start:d,end:m}),O.current=!1,T.current=null,K(!1),!0}if(O.current=!0,T.current=r,K(!0),u&&a.shiftKey){const d=Math.min(u.start,r),m=Math.max(u.end,r);y({start:d,end:m})}else y({start:r,end:r});return!0},mouseover:(e,i,a)=>{if(!(a instanceof MouseEvent)||a.buttons!==1||!O.current||T.current===null)return!1;const r=e.state.doc.lineAt(i.from).number,d=Math.min(T.current,r),m=Math.max(T.current,r);return y({start:d,end:m}),K(!0),!1},mouseup:()=>(O.current=!1,T.current=null,K(!1),!1)}}})})})})})})]})};export{ds as PlanView};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{f as Fn,R as y,j as ce}from"./vendor-react-BUCujlKS.js";import{ij as Pe,ik as Ie,il as Ce,im as $n,io as Xn,ip as qn,iq as Jn,ir as zn,is as Wn,it as Kn,iu as Vn,iv as Yn,iw as Zn,ix as Ut,iy as Qn,iz as es,iA as ts,iB as ns,iC as ss,iD as rs,iE as os,iF as as,iG as is,iH as cs,iI as ls,iJ as J,iK as z,iL as nn,iM as sn,iN as us,iO as ds,iP as ps,iQ as ms,iR as rn,iS as fs,iT as wt,iU as on,iV as an,iW as cn,iX as ln,iY as ys,iZ as jt,i_ as hs,i$ as Ss,j0 as un,j1 as gs,j2 as Es,j3 as Ts,j4 as dn,j5 as ks,j6 as ws,j7 as bs,j8 as xs,j9 as Dt,ja as Lt,jb as _s,jc as Ht,jd as Bt,je as Ft,jf as $t,jg as vs,jh as Rs,ji as As,jj as Is,jk as Os,u as bt,z as ne,b as xt,en as pn,dm as mn,l as le,jl as fn,jm as Ps,fs as yn,bC as Cs,fr as Ms,ee as Gs,fy as Ns,jn as Us,jo as js,ft as Ds,m as Ls,fz as Hs,fA as Bs,fB as Fs,fi as $s,fd as Xs,f as hn,B as Xt,g as Sn,S as qs,af as Js,H as zs,jp as Ws,bY as De,hw as pt,jq as qt,cT as Jt,jr as Ks,js as zt,jt as Vs,h as Ys,ju as Zs,o as Wt,br as ie,jv as Qs,cH as mt}from"./useAppFontEffects-ne84JBVL.js";import{o as r,s,r as Ve,b as K,n as V,_ as v,c as W,a as C,l as c,e as gn,d as Oe,j as Ye,N as er}from"./vendor-zod-CgAdXWZO.js";import{h as F,a as H,u as Ze,aS as tr,dH as nr,a2 as ft,dI as sr,a4 as rr,A as Qe,o as B,aa as or}from"./index-Dqc6USl3.js";import{c as ar}from"./vendor-zustand-BAGL70zf.js";import{toast as X}from"./vendor-sonner-DFyL3AvE.js";const ir=128,cr=65536,lr=2e3,ur=/^(>=)?\d+\.\d+\.\d+$/;class q extends Error{code;constructor(t,n){super(n),this.name="HostRequestError",this.code=t}}const dr=/^[a-z][a-z0-9-]*$/,pr=r({connected:K(),account:s(),hasClient:K(),settings:Ve(s().regex(dr),s()),redirectUri:s().optional()}),mr=r({authorizationUrl:s().min(1)}),fr=r({status:V().int().min(100).max(599),body:s()}),yr=r({error:s().min(1),message:s().min(1).optional()}),Xe=(e,t)=>({ok:!1,code:e,message:t}),hr=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=yr.safeParse(t);return o.success?Xe(Pe(o.data.error),o.data.message??o.data.error):Xe("HOST_REJECTED","Request failed.")}const n=fr.safeParse(t);return n.success?{ok:!0,result:n.data}:Xe("HOST_REJECTED","Request failed.")},Sr=e=>({connection:{connected:e.connected,account:e.account},settings:e.settings,hasClient:e.hasClient,redirectUri:e.redirectUri??""}),Me=async e=>{if(!e.ok)return null;const t=pr.safeParse(await e.json().catch(()=>null));return t.success?Sr(t.data):null},gr=async e=>{try{return await Me(await F(`/api/guests/${e}/oauth/status`))}catch{return null}},Ra=async(e,t,n)=>{const o={clientId:t};n&&(o.clientSecret=n);try{return await Me(await F(`/api/guests/${e}/oauth/client`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}))}catch{return null}},Aa=async(e,t,n)=>{try{return await Me(await F(`/api/guests/${e}/token`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n?{token:t,username:n}:{token:t})}))}catch{return null}},Ia=async(e,t)=>{try{return await Me(await F(`/api/guests/${e}/settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))}catch{return null}},Er=async e=>{try{const t=await F(`/api/guests/${e}/oauth/start`,{method:"POST"});if(!t.ok)return null;const n=mr.safeParse(await t.json().catch(()=>null));return n.success?n.data.authorizationUrl:null}catch{return null}},Tr=async e=>{try{return await Me(await F(`/api/guests/${e}/oauth`,{method:"DELETE"}))}catch{return null}},kr=3*6e4,wr=1500,br=(e,t)=>t.connected?e.connected?t.account!==e.account:!0:!1,xr=async(e,t)=>{try{const n=await F(`/api/guests/${e}/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return hr(n)}catch{return Xe("HOST_REJECTED","Request failed.")}};let yt=0;const Le=ar(e=>({byId:{},setStatus:(t,n)=>{e(o=>({byId:{...o.byId,[t]:n}}))},refresh:async t=>{const n=yt,o=H(),a=await gr(t);return n!==yt||H()!==o?null:(a&&e(p=>({byId:{...p.byId,[t]:a}})),a)},resetForRuntimeSwitch:()=>{yt++,e({byId:{}})}})),_r=r({status:V().int().min(100).max(599),body:s()}),vr=r({error:s().min(1),message:s().min(1).optional()}),Rr=r({status:v(["stopped","starting","ready","failed"])}),qe=(e,t)=>({ok:!1,code:e,message:t}),Ar=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=vr.safeParse(t);return o.success?qe(Pe(o.data.error),o.data.message??o.data.error):qe("HOST_REJECTED","Request failed.")}const n=_r.safeParse(t);return n.success?{ok:!0,result:n.data}:qe("HOST_REJECTED","Request failed.")},Ir=async(e,t)=>{try{const n=await F(`/api/guests/${e}/service/request`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return Ar(n)}catch{return qe("HOST_REJECTED","Request failed.")}},Or=async e=>{try{const t=await F(`/api/guests/${e}/service/status`);if(!t.ok)return{ok:!1,code:"NO_SERVICE",message:"No service for this extension."};const n=Rr.safeParse(await t.json().catch(()=>null));return n.success?{ok:!0,result:n.data}:{ok:!1,code:"HOST_REJECTED",message:"Service status was empty."}}catch{return{ok:!1,code:"HOST_REJECTED",message:"Could not read service status."}}},Pr=r({guest:r({id:s().min(1)}).passthrough()}),Oa=async(e,t,n)=>{try{const o=await F(`/api/guests/${e}/service/sockets`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t,path:n})});return o.ok?Pr.safeParse(await o.json().catch(()=>null)).success:!1}catch{return!1}},En=e=>{const t=Ze.getState();for(const[n,o]of Object.entries(t.contextPanelByDirectory)){const a=o.tabs.filter(p=>p.mode===e).map(p=>p.id);a.length>0&&t.closeContextPanelTabs(n,a)}},Pa=e=>En(tr(e)),_t=e=>Ce.test(e)||ls(e),Kt=e=>{try{const t=new URL(e);return t.protocol==="https:"&&t.username===""&&t.password===""}catch{return!1}},Tn=e=>{try{const t=new URL(e);return t.protocol==="https:"&&t.username===""&&t.password===""&&t.pathname==="/"&&t.search===""&&t.hash===""&&e===t.origin}catch{return!1}},kn=e=>!e.startsWith("/")||e.includes("\0")||e.includes("\\")||e.includes("://")?!1:!e.split("/").some(n=>n==="."||n===".."),wn=/^[A-Za-z][A-Za-z0-9_]*(\.[A-Za-z][A-Za-z0-9_]*)*$/,bn=v(["panel","dialog"]),Cr=r({mode:bn,entry:s().trim().refine(Ie).optional()}).refine(e=>e.mode==="dialog"||e.entry===void 0,{path:["entry"]}),Mr=W([K(),bn,Cr]),Gr=r({id:s().trim().regex(Ce),name:s().trim().min(1),icon:s().trim().refine(_t),entry:s().trim().refine(Ie).optional()}),Nr=r({id:s().trim().regex(Ce),label:s().trim().min(1)}),Ur=r({authorizeUrl:s().trim().refine(Kt),tokenUrl:s().trim().refine(Kt),apiOrigin:s().trim().refine(Tn),scopes:C(s().trim().min(1)).optional(),account:r({path:s().trim().refine(kn),name:s().trim().regex(wn)}).optional()}),jr=r({apiOrigin:s().trim().refine(Tn),account:r({path:s().trim().refine(kn),name:s().trim().regex(wn)}).optional(),scheme:v(["raw","bearer","basic"]).optional(),usernameLabel:s().trim().min(1).max(64).optional()}),Dr=r({provider:v(["linear"])}),Lr=r({name:s().trim().min(1),description:s().trim().min(1),oauth:Ur.optional(),token:jr.optional(),host:Dr.optional(),settings:C(Nr).optional()}).refine(e=>$n(e)!==null,{path:["oauth"]}),Vt=["linux","darwin","win32"],Ae=s().trim().min(1).max(512),Hr=r({linux:C(Ae).max(16).optional(),darwin:C(Ae).max(16).optional(),win32:C(Ae).max(16).optional()}).strict(),Br=r({id:s().trim().regex(Ce).max(64),path:Ae.optional(),candidates:Hr.optional()}).strict().refine(e=>!!e.path||!!e.candidates,{message:"socket binding needs path or candidates"}),Fr=e=>{const t={};if(e.candidates)for(const n of Vt){const o=e.candidates[n];o&&o.length>0&&(t[n]=[...o])}else if(e.path)for(const n of Vt)t[n]=[e.path];return{id:e.id,candidatesByPlatform:t}},$r=W([Ae.transform(e=>({id:e,candidatesByPlatform:{linux:[e],darwin:[e],win32:[e]}})),Br.transform(Fr)]),Xr=r({sockets:C($r).max(32).optional(),exec:C(s().trim().min(1).max(128)).max(32).optional()}).strict().transform(e=>{const t={};return e.sockets&&e.sockets.length>0&&(t.sockets=e.sockets),e.exec&&e.exec.length>0&&(t.exec=[...e.exec]),t}),qr=r({entry:s().trim().refine(Ie),runtime:c("host"),permissions:Xr.optional()}),xn=(e,t)=>new Set(e.map(t)).size===e.length,Jr=r({id:s().trim().regex(Ce).max(64),label:s().trim().min(1).max(Xn),icon:s().trim().refine(_t).optional(),where:v(["message","session"]),mode:v(["open","background"]).optional(),roles:C(v(["user","assistant"])).min(1).max(2).optional(),payload:C(v(["messages"])).max(1).optional()}).refine(e=>e.where==="message"||e.roles===void 0,{path:["roles"]}).refine(e=>e.where==="session"||e.payload===void 0,{path:["payload"]}),zr=C(Jr).min(1).max(qn).refine(e=>xn(e,t=>t.id),{message:"action ids must be unique"}),Wr=r({name:s().trim().regex(zn),description:s().trim().min(1).max(Jn).optional()}),Kr=C(Wr).min(1).max(Wn).refine(e=>xn(e,t=>t.name),{message:"command names must be unique"}),Vr=r({match:s().trim().min(1).max(es).regex(ts),name:s().trim().min(1).max(Qn).optional(),icon:s().trim().refine(_t).optional(),title:s().trim().min(1).max(Ut).optional(),subtitle:s().trim().min(1).max(Ut).optional(),output:v(Zn).optional(),language:s().trim().min(1).max(Yn).optional(),columns:C(s().trim().min(1).max(Kn)).min(1).max(Vn).optional()}).refine(e=>e.output==="code"||e.language===void 0,{path:["language"]}).refine(e=>e.output==="table"==(e.columns!==void 0),{path:["columns"]}),Yr=C(Vr).min(1).max(ns),Zr=r({panel:Gr,background:r({entry:s().trim().refine(e=>Ie(e)&&e.toLowerCase().endsWith(".html"))}).optional(),attach:Mr.optional(),page:W([c(!0),r({entry:s().trim().refine(Ie),title:s().trim().min(1).max(200).optional()})]).optional(),capabilities:C(v(as)).max(8).optional(),integration:Lr.optional(),service:qr.optional(),filesystem:C(s().max(ss).refine(rs)).min(1).max(os).optional(),actions:zr.optional(),commands:Kr.optional(),tools:Yr.optional()}),Qr=e=>{const t=[];return e.page!==void 0&&t.push("page"),e.attach!==void 0&&e.attach!==!1&&t.push("attach"),e.capabilities&&e.capabilities.length>0&&t.push("capabilities"),e.integration!==void 0&&t.push("integration"),e.service!==void 0&&t.push("service"),e.filesystem!==void 0&&t.push("filesystem"),e.actions!==void 0&&t.push("actions"),e.commands!==void 0&&t.push("commands"),t},eo=r({apiVersion:c(cs[0]),engines:r({openchamber:s().trim().regex(ur)}).strict().optional(),contributes:Zr.superRefine((e,t)=>{if(is(e))return;if(e.background){const o=[];e.page!==void 0&&o.push("page"),e.attach!==void 0&&e.attach!==!1&&o.push("attach"),e.actions?.some(a=>a.mode!=="background")&&o.push('actions with mode "open"'),o.length>0&&t.addIssue({code:"custom",path:["panel"],message:`${o.join(", ")} needs panel.entry; background-only actions must declare mode "background".`});return}const n=Qr(e);n.length!==0&&t.addIssue({code:"custom",path:["panel"],message:`${n.map(o=>`contributes.${o}`).join(", ")} needs panel.entry or background.entry; an extension without either may only declare tools.`})})}),to=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,no=s().trim().regex(to).max(64);r({version:no.optional(),openchamber:eo});W([r({openchamber:gn()}),r({openchamber:r({}).passthrough()})]);const $=s().trim().min(1).max(1024),He=v(["loading","ready","error"]),Yt=r({directory:$,name:s(),branch:s(),status:v(["ready","pending","invalid","missing"])}),Zt=Oe("kind",[r({kind:c("projects")}).strict(),r({kind:c("worktrees"),projectId:$}).strict(),r({kind:c("sessions"),projectId:$}).strict()]),_n=Oe("kind",[r({kind:c("projects"),state:He,projects:C(r({id:$,name:s(),directory:$}))}),r({kind:c("worktrees"),projectId:$,state:He,worktrees:C(Yt)}),r({kind:c("sessions"),projectId:$,state:He,coverage:C(r({directory:$,state:He})),sessions:C(r({id:$,title:s(),projectId:$,directory:$,parentId:$.nullable(),createdAt:V(),updatedAt:V(),archivedAt:V().nullable(),worktree:Yt.nullable(),activity:v(["unknown","idle","running","retrying","waiting-permission","waiting-question"]),outcome:v(["completed","failed"]).nullable(),items:C(r({id:$,data:Ye().optional()}))}))})]),so=W([K(),r({kind:c("existing"),directory:$}).strict(),r({kind:c("new"),name:s().trim().min(1).max(200).optional(),baseBranch:s().trim().min(1).max(200).optional()}).strict()]),Je=s().min(1).max(ir),ro=Oe("op",[r({op:c("get"),key:Je}).strict(),r({op:c("delete"),key:Je}).strict(),r({op:c("set"),key:Je,value:Ye().refine(e=>new TextEncoder().encode(JSON.stringify(e)).length<=cr)}).strict(),r({op:c("keys")}).strict()]),vn=W([r({storage:c(!0),op:c("get"),found:c(!1)}),r({storage:c(!0),op:c("get"),found:c(!0),value:Ye()}),r({storage:c(!0),op:v(["set","delete"])}),r({storage:c(!0),op:c("keys"),keys:C(Je).max(lr)})]),E={channel:c(z),v:c(J)},oo=r({background:s().min(1),elevated:s().min(1),foreground:s().min(1),muted:s().min(1),subtle:s().min(1),border:s().min(1),hover:s().min(1),selection:s().min(1),focus:s().min(1),primary:s().min(1),mutedSurface:s().min(1),elevatedForeground:s().min(1),active:s().min(1),selectionForeground:s().min(1),primaryForeground:s().min(1),primaryText:s().min(1),successText:s().min(1),warningText:s().min(1),errorText:s().min(1),infoText:s().min(1),success:s().min(1),warning:s().min(1),error:s().min(1),info:s().min(1),font:s().min(1),mono:s().min(1),radius:s().min(1)}),Rn=r({id:s().min(1),title:s().min(1),busy:K().optional().default(!1),model:s().min(1).max(sn).optional(),agent:s().min(1).max(nn).optional()}).nullable(),An=r({connected:K(),account:s().max(us)}),In=Ve(s().regex(ps),s().max(ds)),ao=r({status:V().int().min(100).max(599),body:s().max(ms)}),Qt=r({directory:s(),name:s(),branch:s(),status:v(["ready","pending","invalid","missing"])}),io=W([r({sessionId:s().min(1),sent:v(rn),directory:s().optional(),worktree:Qt.optional(),linked:K().optional()}),r({sessionId:gn(),sent:c("skipped"),directory:s(),worktree:Qt,failure:v(["bootstrap-failed","session-create-failed"])})]),co=r({sent:v(rn)}),lo=r({status:v(fs)}),uo=r({content:s().max(wt)}),po=r({written:c(!0)}),mo=r({entries:C(r({name:s().min(1),kind:v(on)})).max(an)}),fo=r({kind:v(cn),size:V().int().min(0),mtime:V().int().min(0)}),yo=r({text:s().max(ln)}),ho=W([vn,_n,io,ao,co,lo,uo,po,mo,fo,yo]),Re=r({providerId:s().trim().regex(Ts),id:s().trim().min(1).max(Es),title:s().trim().min(1).max(gs),url:s().trim().min(1).max(un),text:s().trim().min(1).max(Ss).optional(),kind:v(["issue","pull"]).optional(),author:s().trim().min(1).max(hs).optional(),branches:r({head:s().trim().min(1).max(jt),base:s().trim().min(1).max(jt)}).optional(),data:Ye().refine(e=>JSON.stringify(e).length<=ys).optional()}),On=v(["user","assistant"]),Pn=r({kind:c("message"),action:s().trim().min(1).max(64),sessionId:s().min(1),sessionTitle:s(),directory:s().nullable(),messageId:s().min(1),role:On,text:s().max(dn)}),Cn=r({kind:c("session"),action:s().trim().min(1).max(64),sessionId:s().min(1),sessionTitle:s(),directory:s().nullable(),messages:C(r({id:s().min(1),role:On,text:s().max(dn),createdAt:V().int().min(0)})).optional(),truncated:K().optional()}).refine(e=>JSON.stringify(e).length<=ks),Mn=W([Pn,Cn,Re]).nullable(),So=r({theme:r({mode:v(["light","dark"]),tokens:oo}),locale:s().min(1),directory:s().nullable(),session:Rn,surface:v(["panel","dialog","page","background"]),connection:An,settings:In,item:Mn}),go=r({...E,type:c("result"),id:s().min(1),ok:K(),error:s().min(1).optional(),code:s().min(1).optional(),payload:ho.optional()}).transform((e,t)=>e.ok?e.payload?{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!0,payload:e.payload}:{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!0}:e.error?{channel:e.channel,v:e.v,type:"result",id:e.id,ok:!1,error:e.error,code:Pe(e.code)}:(t.addIssue({code:"custom",message:"Failed result needs an error string."}),er));W([r({...E,type:c("workspace"),payload:r({subscriptionId:s().min(1).max(128),snapshot:_n})}),r({...E,type:c("ready"),payload:So}),r({...E,type:c("directory"),payload:r({directory:s().nullable()})}),r({...E,type:c("session"),payload:r({session:Rn})}),r({...E,type:c("connection"),payload:r({connection:An})}),r({...E,type:c("settings"),payload:r({settings:In})}),r({...E,type:c("session-lifecycle"),payload:r({sessionId:s().min(1),phase:v(ws)})}),r({...E,type:c("item"),payload:r({item:Mn})}),r({...E,type:c("resolve"),id:s().min(1),payload:r({command:s().min(1),args:s()})}),go,r({...E,type:c("action"),id:s().min(1),payload:W([Pn,Cn])})]);const Be=s().min(1).max(bs).refine(xs),Eo=Oe("type",[r({...E,type:c("action-result"),id:s().min(1),payload:Oe("ok",[r({ok:c(!0)}),r({ok:c(!1),error:s().trim().min(1).max(Dt)})])}),r({...E,type:c("workspace-read"),id:s().min(1),payload:Zt}),r({...E,type:c("workspace-subscribe"),id:s().min(1),payload:r({subscriptionId:s().min(1).max(128),query:Zt})}),r({...E,type:c("workspace-unsubscribe"),id:s().min(1),payload:r({subscriptionId:s().min(1).max(128)})}),r({...E,type:c("storage"),id:s().min(1),payload:ro}),r({...E,type:c("open-session"),id:s().min(1),payload:r({sessionId:s().min(1).max(1024)})}),r({...E,type:c("hello")}),r({...E,type:c("toast"),id:s().min(1),payload:r({kind:v(["info","success","error"]),message:s().trim().min(1).max(_s),copy:W([K(),r({text:s().min(1).max(Lt)})]).optional(),dismiss:K().optional(),persistent:K().optional()})}),r({...E,type:c("open-url"),id:s().min(1),payload:r({url:s().trim().min(1).max(un)})}),r({...E,type:c("open-surface"),id:s().min(1),payload:r({surfaceId:s().trim().min(1).max(64)})}),r({...E,type:c("clipboard-write"),id:s().min(1),payload:r({text:s().min(1).max(Lt)})}),r({...E,type:c("compose"),id:s().min(1),payload:r({text:s().trim().min(1).max(Ht),mode:v(["replace","append"]).optional()})}),r({...E,type:c("attach"),id:s().min(1),payload:Re}),r({...E,type:c("start-session"),id:s().min(1),payload:Re.extend({worktree:so.optional(),projectId:s().trim().min(1).max(1024).optional(),navigation:v(["preserve","open"]).optional()})}),r({...E,type:c("prompt"),id:s().min(1),payload:r({text:s().trim().min(1).max(Ht),send:K().optional()})}),r({...E,type:c("session-link"),id:s().min(1),payload:Re}),r({...E,type:c("close"),id:s().min(1)}),r({...E,type:c("oauth-start"),id:s().min(1)}),r({...E,type:c("oauth-disconnect"),id:s().min(1)}),r({...E,type:c("request"),id:s().min(1),payload:r({method:v(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Ft).refine($t),query:Ve(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Bt).optional()})}),r({...E,type:c("service-request"),id:s().min(1),payload:r({method:v(["GET","POST","PUT","PATCH","DELETE"]),path:s().trim().min(1).max(Ft).refine($t),query:Ve(s().min(1).max(128),s().max(2e3)).optional(),body:s().max(Bt).optional()})}),r({...E,type:c("service-status"),id:s().min(1)}),r({...E,type:c("file-read"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("file-write"),id:s().min(1),payload:r({path:Be,content:s().max(wt)})}),r({...E,type:c("file-list"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("file-stat"),id:s().min(1),payload:r({path:Be})}),r({...E,type:c("generate"),id:s().min(1),payload:r({prompt:s().trim().min(1).max(As),system:s().trim().min(1).max(Rs).optional(),maxOutputTokens:V().int().min(1).max(vs).optional()})}),r({...E,type:c("badge"),id:s().min(1),payload:r({count:V().int().min(0).max(Is).nullable()})}),r({...E,type:c("resolve-result"),id:s().min(1),payload:W([r({item:Re.nullable()}),r({error:s().trim().min(1).max(Dt)})])})]),To=e=>({channel:z,v:J,type:"ready",payload:e}),ko=e=>({channel:z,v:J,type:"directory",payload:{directory:e}}),wo=e=>({channel:z,v:J,type:"session",payload:{session:e}}),bo=e=>({channel:z,v:J,type:"connection",payload:{connection:e}}),xo=e=>({channel:z,v:J,type:"settings",payload:{settings:e}}),_o=e=>({channel:z,v:J,type:"item",payload:{item:e}}),vo=(e,t,n)=>({channel:z,v:J,type:"resolve",id:e,payload:{command:t,args:n}}),Ro=e=>({channel:z,v:J,type:"session-lifecycle",payload:e}),Ao=e=>e?.type==="busy"||e?.type==="retry"?"started":e?.type==="idle"?"completed":e?.type?"failure":null,Io=e=>{const t=e?.providerID?.trim(),n=e?.id?.trim();if(!(!t||!n))return`${t}/${n}`},Oo=e=>{if(!e?.id)return null;const t=e.title?.trim(),n={id:e.id,title:t||e.id,busy:!!e.busy},o=e.model?.trim().slice(0,sn);o&&(n.model=o);const a=e.agent?.trim().slice(0,nn);return a&&(n.agent=a),n},M=(e,t)=>t?{channel:z,v:J,type:"result",id:e,ok:!0,payload:t}:{channel:z,v:J,type:"result",id:e,ok:!0},N=(e,t,n="HOST_REJECTED")=>({channel:z,v:J,type:"result",id:e,ok:!1,error:t,code:n}),Fe=(e,t)=>t.ok?M(e,t.result):N(e,t.message,t.code),$e=e=>{try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}},Po=async(e,t)=>{try{switch(e.type){case"workspace-read":return M(e.id,t.workspaceRead(e.payload));case"workspace-subscribe":return t.workspaceSubscribe(e.payload),M(e.id);case"workspace-unsubscribe":return t.workspaceUnsubscribe(e.payload.subscriptionId),M(e.id);case"storage":return M(e.id,await t.storage(e.payload));case"open-session":return t.openSession(e.payload.sessionId),M(e.id);case"hello":case"action-result":return null;case"toast":return t.toast(e.payload),M(e.id);case"open-url":return $e(e.payload.url)?await t.openUrl(e.payload.url)?M(e.id):N(e.id,"Could not open URL."):N(e.id,"URL must be http or https.");case"open-surface":return nr(e.payload.surfaceId)?(t.openSurface(e.payload.surfaceId),M(e.id)):N(e.id,"Unknown surface.");case"clipboard-write":return await t.writeClipboard(e.payload.text)?M(e.id):N(e.id,"Could not write clipboard.");case"compose":return t.compose(e.payload.text,e.payload.mode??"append"),M(e.id);case"attach":return $e(e.payload.url)?(t.attach(e.payload),M(e.id)):N(e.id,"URL must be http or https.");case"start-session":{if(!$e(e.payload.url))return N(e.id,"URL must be http or https.");const n=await t.startSession(e.payload);return n?"sessionId"in n?M(e.id,n):N(e.id,n.message,n.code):N(e.id,"Could not start that session.")}case"prompt":{const n=await t.prompt(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"session-link":{if(!$e(e.payload.url))return N(e.id,"URL must be http or https.");const n=await t.sessionLink(e.payload);return n.ok?M(e.id):N(e.id,n.message,n.code)}case"close":return t.close(),M(e.id);case"oauth-start":return await t.oauthStart()?M(e.id):N(e.id,"Could not start OAuth.");case"oauth-disconnect":return await t.oauthDisconnect()?M(e.id):N(e.id,"Could not disconnect.");case"request":{const n=await t.request(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"service-request":{const n=await t.serviceRequest(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"service-status":{const n=await t.serviceStatus();return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"file-read":return Fe(e.id,await t.file({op:"read",path:e.payload.path}));case"file-write":return Fe(e.id,await t.file({op:"write",path:e.payload.path,content:e.payload.content}));case"file-list":return Fe(e.id,await t.file({op:"list",path:e.payload.path}));case"file-stat":return Fe(e.id,await t.file({op:"stat",path:e.payload.path}));case"generate":{const n=await t.generate(e.payload);return n.ok?M(e.id,n.result):N(e.id,n.message,n.code)}case"badge":return t.setBadge(e.payload.count),M(e.id);case"resolve-result":return t.resolveResult(e.id,e.payload),null}}catch(n){return e.type==="hello"?null:N(e.id,n instanceof q?n.message:"Extension operation failed.",n instanceof q?n.code:"HOST_REJECTED")}},Co=W([r({content:s().max(wt)}),r({written:c(!0)}),r({entries:C(r({name:s().min(1),kind:v(on)})).max(an)}),r({kind:v(cn),size:V().int().min(0),mtime:V().int().min(0)})]),Mo=r({ok:c(!0),result:Co}),Go=r({error:s().min(1),message:s().min(1).optional()}),ze=(e,t)=>({ok:!1,code:e,message:t}),No=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=Go.safeParse(t);return o.success?ze(Pe(o.data.error),o.data.message??o.data.error):ze("HOST_REJECTED","File operation failed.")}const n=Mo.safeParse(t);return n.success?{ok:!0,result:n.data.result}:ze("HOST_REJECTED","File operation failed.")},Uo=async(e,t,n)=>{const o=new Headers({"Content-Type":"application/json"});n&&o.set("x-opencode-directory",n);try{const a=await F(`/api/guests/${e}/files`,{method:"POST",headers:o,body:JSON.stringify(t)});return No(a)}catch{return ze("HOST_REJECTED","File operation failed.")}},jo=r({ok:c(!0),result:r({text:s().max(ln)})}),Do=r({error:s().min(1),message:s().min(1).optional()}),We=(e,t)=>({ok:!1,code:e,message:t}),Tt="Text generation failed.",Lo=async e=>{const t=await e.json().catch(()=>null);if(!e.ok){const o=Do.safeParse(t);return o.success?We(Pe(o.data.error),o.data.message??o.data.error):We("HOST_REJECTED",Tt)}const n=jo.safeParse(t);return n.success?{ok:!0,result:n.data.result}:We("HOST_REJECTED",Tt)},Ho=async(e,t,n)=>{const o=new Headers({"Content-Type":"application/json"});n&&o.set("x-opencode-directory",n);try{const a=await F(`/api/guests/${e}/generate`,{method:"POST",headers:o,body:JSON.stringify(t)});return Lo(a)}catch{return We("HOST_REJECTED",Tt)}},ht="https://extension.invalid",Bo=500,Fo=40*1024*1024,en=64*1024*1024,St=async e=>{const t=new Uint8Array(await e.arrayBuffer());let n="";for(let o=0;o<t.length;o+=8192)n+=String.fromCharCode(...t.subarray(o,o+8192));return`data:${e.type||"application/octet-stream"};base64,${btoa(n)}`},$o=e=>e.replace(/\\(?:([0-9a-f]{1,6})\s?|([\s\S]))/gi,(t,n,o)=>{if(n){const a=Number.parseInt(n,16);return a>0&&a<=1114111?String.fromCodePoint(a):"�"}return o===`
|
|
2
|
-
`||o==="\r"?"":o??""}),Xo=/\/\*[\s\S]*?\*\/|"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|\burl\(\s*(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)'|((?:\\[\s\S]|[^)\\])*?))\s*\)|@import\s+(?:"((?:\\[\s\S]|[^"\\])*)"|'((?:\\[\s\S]|[^'\\])*)')/gi,qo=async(e,t,n)=>{const o=`/api/guests/${e}/`,a=new URL(t,`${ht}${o}`),p=new Map;let x=0,w=0;const A=async i=>{if(i.origin!==ht||!i.pathname.startsWith(o))throw new Error("Extension resource is outside its package");const f=await n(`${i.pathname}${i.search}`);if(!f.ok)throw new Error(`Could not load extension resource (HTTP ${f.status})`);const b=f.body?.getReader();if(!b)throw new Error("Extension resource has no response body");const m=[];try{for(;;){const{done:l,value:u}=await b.read();if(l)break;if(x+=u.byteLength,x>Fo)throw new Error("Extension document exceeds the resource size limit");m.push(new Uint8Array(u))}}catch(l){throw await b.cancel().catch(()=>{}),l}finally{b.releaseLock()}return new Blob(m,{type:f.headers.get("content-type")?.split(";")[0]||"application/octet-stream"})},G=async(i,f,b)=>{const m=i.trim();if(!m||m.startsWith("#"))return i;const l=new URL(m,f);if(l.origin!==ht)return l.href;const u=l.hash;l.hash="";const T=l.href;if(b.includes(T))throw new Error("Circular extension resource reference");let g=p.get(T);if(!g){if(p.size>=Bo)throw new Error("Extension document has too many resources");const R=[...b,T];g=A(l).then(async U=>{const Z=U.type.split(";")[0];return Z==="text/css"||l.pathname.endsWith(".css")?St(new Blob([await h(await U.text(),l,R)],{type:"text/css"})):St(Z==="text/html"?new Blob([await O(await U.text(),l,R)],{type:"text/html"}):U)}),p.set(T,g)}const P=`${await g}${u}`;if(w+=P.length,w>en)throw new Error("Extension document exceeds the embedded size limit");return P},h=async(i,f,b)=>{let m="",l=0;for(const u of i.matchAll(Xo)){const T=u[1]??u[2]??u[3]??u[4]??u[5];if(T===void 0)continue;m+=i.slice(l,u.index);const g=await G($o(T.trim()),f,b),P=JSON.stringify(g);m+=u[4]!==void 0||u[5]!==void 0?`@import url(${P})`:`url(${P})`,l=u.index+u[0].length}return m+i.slice(l)},_=async(i,f,b)=>{const m=[];let l=i;for(;l.trim();){l=l.replace(/^[\s,]+/,"");const u=/^\S+/.exec(l);if(!u)break;const T=u[0];l=l.slice(T.length);let g="";if(!T.endsWith(",")){const R=l.indexOf(",");g=(R<0?l:l.slice(0,R)).trim(),l=R<0?"":l.slice(R+1)}const P=await G(T.replace(/,+$/,""),f,b);m.push(g?`${P} ${g}`:P)}return m.join(", ")},O=async(i,f,b)=>{const m=new DOMParser().parseFromString(i,"text/html"),l=m.querySelector("base[href]")?.getAttribute("href"),u=m.querySelector("base[target]")?.getAttribute("target"),T=l?new URL(l,f):f;for(const R of m.querySelectorAll("base"))R.remove();const g=m.createElement("base");g.href=T.href,u&&(g.target=u),m.head.prepend(g);for(const R of m.querySelectorAll("script[src], link[href], img[src], source[src], video[src], audio[src], iframe[src], embed[src], object[data], image[href], image[xlink\\:href], use[href], use[xlink\\:href]"))for(const U of["src","href","data","xlink:href"]){const Z=R.getAttribute(U);Z!==null&&R.setAttribute(U,await G(Z,T,b))}for(const R of m.querySelectorAll("[poster]"))R.setAttribute("poster",await G(R.getAttribute("poster")??"",T,b));for(const R of m.querySelectorAll("img[srcset], source[srcset]"))R.setAttribute("srcset",await _(R.getAttribute("srcset")??"",T,b));for(const R of m.querySelectorAll("style"))R.textContent=await h(R.textContent??"",T,b);for(const R of m.querySelectorAll("[style]"))R.setAttribute("style",await h(R.getAttribute("style")??"",T,b));const P=`<!doctype html>
|
|
3
|
-
${m.documentElement.outerHTML}`;if(P.length>en)throw new Error("Extension document exceeds the size limit");return P},S=await A(a);if(S.type.split(";")[0]!=="text/html")throw new Error("Extension entry is not HTML");return O(await S.text(),a,[a.href])},Jo=async(e,t,n)=>{const o=H(),a=ft();if(a){const w=await qo(e,t,A=>{if(H()!==o||ft()!==a||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return F(A,{signal:n})});if(H()!==o||ft()!==a||n?.aborted)throw new DOMException("Extension frame owner changed","AbortError");return{kind:"document",html:w}}const{token:p,expiresAt:x}=await sr(e);if(o!==H())throw new Error("Runtime changed while authorizing extension frame");return{kind:"url",url:rr().assetWithUrlToken(`/api/guests/${e}/${t}`,p,{oc_ui:"issue-page"}),expiresAt:x}},zo=e=>{const t=Fn.c(31),{guestId:n,entry:o,instanceKey:a,enabled:p}=e,[x,w]=y.useState(null),[A,G]=y.useState(0),h=y.useRef(!1),[_,O]=y.useState(H);let S;t[0]!==p||t[1]!==o||t[2]!==n||t[3]!==a||t[4]!==_?(S=JSON.stringify([_,n,o,a,p]),t[0]=p,t[1]=o,t[2]=n,t[3]=a,t[4]=_,t[5]=S):S=t[5];const i=S;let f,b;t[6]===Symbol.for("react.memo_cache_sentinel")?(f=()=>Qe(se=>{O(se.runtimeKey)}),b=[],t[6]=f,t[7]=b):(f=t[6],b=t[7]),y.useEffect(f,b);let m;t[8]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{h.current=!1},t[8]=m):m=t[8];let l;t[9]!==i?(l=[i],t[9]=i,t[10]=l):l=t[10],y.useEffect(m,l);let u;t[11]!==p||t[12]!==o||t[13]!==n||t[14]!==i?(u=()=>{if(w({key:i,status:"loading"}),!o||!p)return;let se=!1;const de=new AbortController;return Jo(n,o,de.signal).then(xe=>{se||w({key:i,status:"ready",source:xe})}).catch(()=>{se||w({key:i,status:"error"})}),()=>{se=!0,de.abort()}},t[11]=p,t[12]=o,t[13]=n,t[14]=i,t[15]=u):u=t[15];let T;t[16]!==p||t[17]!==o||t[18]!==n||t[19]!==i||t[20]!==A?(T=[p,o,n,i,A],t[16]=p,t[17]=o,t[18]=n,t[19]=i,t[20]=A,t[21]=T):T=t[21],y.useEffect(u,T);const g=x?.key===i&&x.status==="ready"?x.source:null;let P;t[22]!==g||t[23]!==i?(P=()=>g?g.kind==="document"||Date.now()<g.expiresAt?!1:(h.current?w({key:i,status:"error"}):(w({key:i,status:"loading"}),h.current=!0,G(Wo)),!0):!0,t[22]=g,t[23]=i,t[24]=P):P=t[24];const R=P;let U;t[25]===Symbol.for("react.memo_cache_sentinel")?(U=()=>{h.current=!1},t[25]=U):U=t[25];const Z=U,he=g?.kind==="url"?g.url:"",we=g?.kind==="document"?g.html:void 0,be=x?.key===i?x.status:"loading";let ue;return t[26]!==R||t[27]!==he||t[28]!==we||t[29]!==be?(ue={src:he,srcDoc:we,status:be,recoverExpiredNavigation:R,acknowledgeHandshake:Z},t[26]=R,t[27]=he,t[28]=we,t[29]=be,t[30]=ue):ue=t[30],ue};function Wo(e){return e+1}const Gn="/api/linear/issues/get",Ko=(e,t)=>e==="host"&&t.method==="GET"&&t.path===Gn,Vo=async(e,t)=>{if(Ko(e,t))try{const n=await F(Gn,{query:t.query});return{status:n.status,body:await n.text()}}catch{return null}},Yo=e=>{const t=xt.getState();if(!t.hasServerSnapshot)throw new q("HOST_UNAVAILABLE","The project registry has not loaded.");const n=t.projects.find(o=>o.id===e);if(!n)throw new q("NOT_FOUND","Project is not registered.");return n},Ke=e=>ne.getState().availableWorktreesByProject.get(B(e)??e)??[],Nn=e=>({directory:e.path,name:e.name??e.label,branch:e.branch,status:e.worktreeStatus==="not-a-repo"?"invalid":e.worktreeStatus??"ready"}),Zo=e=>e.includes("error")?"error":e.includes("loading")?"loading":"ready",Qo=(e,t,n,o)=>{const a=e.directory,p=fn(a),x=mn.getState(),w=x.statusById.get(e.id),A=(w&&B(w.directory)===B(a)?w.status:void 0)??p?.session_status[e.id],G=x.observedById.get(e.id),h=G&&B(G.directory)===B(a)?G:void 0,_=ne.getState().worktreeMetadata.get(e.id),O=o.get(B(a)??a)??(_&&B(_.path)===B(a)?Nn(_):null),S=le.getState().isConnected;let i="unknown";return S&&(A?.type==="busy"?i="running":A?.type==="retry"?i="retrying":(A?.type==="idle"||p?.sessionStatusReady||h)&&(i="idle"),p?.permission[e.id]?.length?i="waiting-permission":p?.question[e.id]?.length&&(i="waiting-question")),{id:e.id,title:e.title||e.id,projectId:t,directory:a,parentId:e.parentID??null,createdAt:e.time.created,updatedAt:e.time.updated,archivedAt:e.time.archived||null,worktree:O,activity:i,outcome:i==="idle"?h?.outcome??null:null,items:Ps(e).flatMap(f=>{if(f.kind!=="guest"||f.providerId!==n)return[];const b={id:f.identifier};return f.data!==void 0&&(b.data=f.data),[b]})}},kt=(e,t)=>{const n=xt.getState();if(e.kind==="projects")return{kind:"projects",state:n.serverSnapshotFailed?"error":n.hasServerSnapshot?"ready":"loading",projects:n.hasServerSnapshot?n.projects.map(i=>({id:i.id,name:i.label||i.path.split("/").pop()||i.path,directory:i.path})):[]};const o=n.projects.find(i=>i.id===e.projectId),a=ne.getState(),p=o?B(o.path)??o.path:"",x=o?a.worktreeDiscoveryByProject.get(p)??"loading":n.hasServerSnapshot?"error":"loading",w=o?Ke(o.path).map(Nn):[];if(e.kind==="worktrees")return{...e,state:x,worktrees:w};const A=new Set(o?[p,...w.map(i=>B(i.directory)??i.directory)]:[]),G=pn(),h=bt.getState(),_=[...A].map(i=>{const b=G.getBootstrapState(i)==="failed"||h.status==="error"?"error":h.status==="ready"?"ready":"loading";return{directory:i,state:b}}),O=new Map;for(const i of A)for(const f of h.structure.activeIdsByDirectory.get(i)??[]){const b=h.entityById.get(f);b&&O.set(f,b)}for(const i of h.archivedSessions)A.has(B(i.directory)??i.directory)&&O.set(i.id,i);for(const i of A)for(const f of fn(i)?.session??[])A.has(B(f.directory)??f.directory)&&(O.has(f.id)||O.set(f.id,f));const S=new Map(w.map(i=>[B(i.directory)??i.directory,i]));return{...e,state:Zo([x,..._.map(i=>i.state)]),coverage:_,sessions:[...O.values()].map(i=>Qo(i,e.projectId,t,S))}},gt=new Map,ea=(e,t,n)=>{const o=JSON.stringify([H(),t,e]);let a=gt.get(o);if(!a){const x=new Set,w={listeners:x,snapshot:kt(e,t),dispose:()=>{}};let A=!1,G=!1,h=JSON.stringify(w.snapshot);const _=()=>{A||G||(A=!0,queueMicrotask(()=>{if(A=!1,G)return;const S=kt(e,t),i=JSON.stringify(S);if(i!==h){h=i,w.snapshot=S;for(const f of x)f(S)}}))},O=[xt.subscribe((S,i)=>{(S.projects!==i.projects||S.hasServerSnapshot!==i.hasServerSnapshot||S.serverSnapshotFailed!==i.serverSnapshotFailed)&&_()})];if(e.kind!=="projects"&&O.push(ne.subscribe((S,i)=>{(S.availableWorktreesByProject!==i.availableWorktreesByProject||S.worktreeDiscoveryByProject!==i.worktreeDiscoveryByProject||S.worktreeMetadata!==i.worktreeMetadata)&&_()})),e.kind==="sessions"){const S=pn();O.push(bt.subscribe((i,f)=>{(i.activeSessions!==f.activeSessions||i.archivedSessions!==f.archivedSessions||i.status!==f.status)&&_()}),mn.subscribe(_),le.subscribe((i,f)=>{i.isConnected!==f.isConnected&&_()}),S.subscribeBootstrap(_),S.subscribeAllSelected(i=>i.session,_),S.subscribeAllSelected(i=>i.permission,_),S.subscribeAllSelected(i=>i.question,_),S.subscribeAllSelected(i=>i.sessionStatusReady,_))}w.dispose=()=>{G=!0;for(const S of O)S();gt.delete(o)},O.push(Qe(w.dispose)),gt.set(o,w),a=w}a.listeners.add(n),n(a.snapshot);const p=a;return()=>{p.listeners.delete(n),p.listeners.size===0&&p.dispose()}},ta=e=>{const t=Os().get(e)??bt.getState().entityById.get(e);if(!t?.directory)throw new q("NO_SESSION","Session is not available.");ne.getState().setCurrentSession(e,t.directory),Ze.getState().closeMainSurfaces()},na=e=>`${e.id} ${e.title}`.trim(),sa=(e,t)=>{const n=e.replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();return`${t==="pull"?"pr":"issue"}-${n||"guest"}`},Un=(e,t,n)=>{const o=t?.trim()??"";if(!o)return{ok:!1,reason:"no-directory"};const a=js(e),p=a.kind==="pull"?"pull":"issue",x={ok:!0,directory:o,title:na(a),worktree:!!a.worktree,branchName:sa(a.id,p),kind:p==="pull"?"pr":"standard",linked:Ds({providerId:a.providerId,identifier:a.id,title:a.title,url:a.url,thread:p,author:a.author,head:a.branches?.head,base:a.branches?.base,data:a.data,linkedAt:n})};return a.text&&(x.text=a.text),x},ra=async(e,t)=>{const n=e.worktree?await t.createWorktree(e.directory,e.branchName,e.kind):await t.createSession(e.title,e.directory);if(!n)return{ok:!1,reason:e.worktree?"worktree-failed":"create-failed"};if(t.initializeSession(n.id),t.closeSurfaces(),await t.setLinkedIssue(n.id,n.directory,e.linked),!e.text)return{ok:!0,sessionId:n.id,sent:"skipped"};const o=await t.sendFirstMessage(n.id,n.directory,e.text);return{ok:!0,sessionId:n.id,sent:o}},oa=()=>{const e=le.getState();if(e.settingsDefaultAgent)return e.settingsDefaultAgent;const t=e.agents.filter(n=>!n.hidden);return e.currentAgentName||t.find(n=>n.mode==="primary"||!n.mode)?.name||t[0]?.name},aa=()=>{const e=$s(le.getState().settingsDefaultModel);return!e||!le.getState().getModelMetadata(e.providerId,e.modelId)?null:{providerID:e.providerId,modelID:e.modelId}},ia=(e,t)=>{const n=le.getState(),o=n.settingsDefaultVariant,a=n.currentProviderId===e&&n.currentModelId===t?n.currentVariant:void 0,x=n.providers.find(A=>A.id===e)?.models.find(A=>A.id===t),w=Xs(x);if(w.length===0)return o||a||void 0;if(o&&w.includes(o))return o;if(a&&w.includes(a))return a},jn=()=>{const e=le.getState(),t=Ls.getState().lastUsedProvider,n=aa(),o=n?.providerID||e.currentProviderId||t?.providerID,a=n?.modelID||e.currentModelId||t?.modelID,p=oa()||e.currentAgentName||void 0;return!o||!a?null:{providerID:o,modelID:a,agentName:p,variant:ia(o,a)}},Dn=async(e,t,n,o=jn())=>{if(!o)return"no-model";try{return await ne.getState().sendMessage(n,o.providerID,o.modelID,o.agentName,void 0,void 0,void 0,o.variant,void 0,{sessionId:e,directory:t}),"sent"}catch{return"failed"}},ca=(e,t,n,o)=>{const a=n?.trim()??"";if(!a)return{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"};const p=t?.trim()??"";if(!p)return{ok:!1,code:"NO_SESSION",message:"No open session.",toastKey:"contextPanel.plugin.sessionLink.noSession"};const x=Un(e,a,o);return x.ok?{ok:!0,sessionId:p,directory:a,linked:x.linked}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},la=async e=>{const t=ca(e.request,e.sessionId,e.directory,Date.now());if(!t.ok)return X.error(e.t(t.toastKey)),{ok:!1,code:t.code,message:t.message};try{return await yn(t.sessionId,t.directory,t.linked,!0),X.success(e.t("contextPanel.plugin.sessionLink.linked")),{ok:!0}}catch{return X.error(e.t("contextPanel.plugin.sessionLink.failed")),{ok:!1,code:"HOST_REJECTED",message:"Could not link that item."}}},ua=e=>{const t=Us(e.request),n=e.sessionId?.trim()??"";if(!n)return{ok:!1,code:"NO_SESSION",message:"No open session.",toastKey:"contextPanel.plugin.prompt.noSession"};if(!t.send)return{ok:!0,action:"compose",text:t.text};if(e.busy)return{ok:!1,code:"SESSION_BUSY",message:"Session is busy.",toastKey:"contextPanel.plugin.prompt.busy"};const o=e.directory?.trim()??"";return o?{ok:!0,action:"send",text:t.text,sessionId:n,directory:o}:{ok:!1,code:"HOST_REJECTED",message:"Open a project first.",toastKey:"contextPanel.plugin.startSession.noProject"}},da=async e=>{const t=ua(e);if(!t.ok)return X.error(e.t(t.toastKey)),{ok:!1,code:t.code,message:t.message};if(t.action==="compose")return e.compose(t.text,"replace"),{ok:!0,result:{sent:"skipped"}};const n=await Dn(t.sessionId,t.directory,t.text);return n==="no-model"?X.error(e.t("contextPanel.plugin.prompt.noModel")):n==="failed"&&X.error(e.t("contextPanel.plugin.prompt.sendFailed")),{ok:!0,result:{sent:n}}},pa=async e=>{e.assertAuthorized();const t=e.request.projectId?Yo(e.request.projectId):e.directory?Cs(e.directory):null,n=e.request.worktree;let o=e.request.projectId?t?.path??null:e.directory,a;if(n&&n!==!0&&n.kind==="existing"){if(!t)throw new q("NO_DIRECTORY","Project is not registered.");if(a=Ke(t.path).find(m=>B(m.path)===B(n.directory)),!a)throw new q("NOT_FOUND","Worktree does not belong to this project or has not loaded yet.");if(a.worktreeStatus==="missing"||a.worktreeStatus==="invalid"||a.worktreeStatus==="not-a-repo")throw new q("HOST_REJECTED","Worktree is unavailable.");o=a.path}const p=n===!0||!!(n&&n.kind==="new"),x=Un({...e.request,worktree:p},o,Date.now());if(!x.ok)return X.error(e.t("contextPanel.plugin.startSession.noProject")),null;const w=e.request.navigation??"preserve",A=jn();let G=!1;const h=Qe(()=>{G=!0}),_=()=>{if(G)throw new q("DISCONNECTED","The connected server changed.");e.assertAuthorized()};let O="session-create-failed",S=!0,i=o??"";const f=()=>{if(!a)return;const m=t?Ke(t.path).find(l=>l.path===a?.path)??a:a;return{directory:m.path,name:m.name??m.label,branch:m.branch,status:m.worktreeStatus==="not-a-repo"?"invalid":m.worktreeStatus??"ready"}},b=async(m,l)=>{if(a&&t){O="bootstrap-failed";const T=await Hs(t);_(),T&&await Bs(a.path)}_(),O="session-create-failed";const u=await Fs(m,l,null,void 0,void 0,w);if(_(),!u)return null;if(i=u.directory??l,a){const T=t?Ke(t.path).find(g=>g.path===a?.path):void 0;a={...a,worktreeStatus:T?.worktreeStatus??a.worktreeStatus},ne.getState().setWorktreeMetadata(u.id,a)}return{id:u.id,directory:i}};try{const m=await ra(x,{createSession:b,createWorktree:async(l,u,T)=>{if(!t)throw new q("NO_DIRECTORY","Project is not registered.");const g=n&&n!==!0&&n.kind==="new"?n:void 0,P=g?.name??`${u}-${Ms()}`,R=await Gs(t);return _(),a=await Ns(t,{preferredName:P,mode:"new",branchName:P,worktreeName:P,startRef:g?.baseBranch,setupCommands:R,returnAfterDirectoryCreated:!0}),_(),a={...a,kind:T,createdFromBranch:g?.baseBranch},b(x.title,a.path)},initializeSession:l=>{ne.getState().initializeNewOpenChamberSession(l,le.getState().agents)},setLinkedIssue:async(l,u,T)=>{_(),await yn(l,u,T,!0).catch(()=>{S=!1}),_()},sendFirstMessage:(l,u,T)=>(_(),Dn(l,u,T,A)),closeSurfaces:()=>{w==="open"&&Ze.getState().closeMainSurfaces()}});if(_(),!m.ok){const l=f();return l?{sessionId:null,sent:"skipped",directory:l.directory,worktree:l,failure:O}:(X.error(e.t("contextPanel.plugin.startSession.failed")),null)}return m.sent==="no-model"?X.error(e.t("contextPanel.plugin.startSession.noModel")):m.sent==="failed"?X.error(e.t("contextPanel.plugin.startSession.sendFailed")):X.success(e.t("contextPanel.plugin.startSession.created")),{sessionId:m.sessionId,sent:m.sent,directory:i,worktree:f(),linked:S}}catch(m){_();const l=f();if(l)return{sessionId:null,sent:"skipped",directory:l.directory,worktree:l,failure:O};throw m}finally{h()}},ma=async(e,t)=>{const n=await F(`/api/guests/${encodeURIComponent(e)}/storage`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new q("HOST_REJECTED","Storage operation failed. Check extension approval and storage limits.");return vn.parse(await n.json())},fa=({copyText:e,dismiss:t,onDismiss:n})=>{const{t:o}=hn(),[a,p]=y.useState("idle"),x=async()=>{if(!(e===void 0||a==="copying")){p("copying");try{const w=await Sn(e);p(w.ok?"copied":"failed")}catch{p("failed")}}};return ce.jsxs("div",{className:"ml-auto flex shrink-0 flex-col items-end gap-1",children:[ce.jsxs("div",{className:"flex items-center gap-2",children:[e!==void 0&&ce.jsx(Xt,{type:"button",variant:"secondary",size:"xs",disabled:a==="copying",onClick:()=>{x()},"aria-live":"polite",children:o(a==="copied"?"contextPanel.plugin.toast.copied":"contextPanel.plugin.toast.copy")}),t&&ce.jsx(Xt,{type:"button",size:"xs",onClick:n,children:o("contextPanel.plugin.toast.ok")})]}),a==="failed"&&ce.jsx("span",{role:"status",className:"typography-micro text-[var(--status-error-text)]",children:o("contextPanel.plugin.toast.copyFailed")})]})},ya=e=>{const t=e.copy===!0?e.message:e.copy?e.copy.text:void 0,n=e.dismiss===!0||e.persistent===!0;if(t===void 0&&!n){X[e.kind](e.message);return}const o=crypto.randomUUID(),a={id:o,action:ce.jsx(fa,{copyText:t,dismiss:n,onDismiss:()=>X.dismiss(o)})};e.persistent&&(a.duration=1/0),X[e.kind](e.message,a)},tn="*",ha='"SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif',Sa='ui-monospace, "SFMono-Regular", "Menlo", "Cascadia Mono", "Segoe UI Mono", monospace',ga="0.5625rem",ke="The user has not allowed this capability for the extension.",Ea=(e,t)=>e.type==="attach"||e.type==="start-session"||e.type==="session-link"?e.payload.providerId===t?e:{...e,payload:{...e.payload,providerId:t}}:e,Et=(e,t)=>getComputedStyle(document.documentElement).getPropertyValue(e).trim()||t,Ta=({mode:e,surface:t="panel",item:n,headless:o=!1,backgroundAction:a,onDismiss:p,onAttach:x,onSessionStarted:w})=>{const{t:A,locale:G}=hn(),{currentTheme:h}=qs(),_=Js(),O=ne(k=>k.currentSessionId),S=a?a.item.directory??"":_,i=a?a.item.sessionId:O,f=zs(i,S||void 0),b=Ws(i??"",S||void 0),m=y.useRef(null),l=or(e),u=De(k=>k.guests.find(Y=>Y.id===l)??null),T=De(k=>k.status),g=u?pt(u):!0,P=Le(k=>k.byId[l]),R=Le(k=>k.setStatus),U=Le(k=>k.refresh),Z=qt(k=>k.pendingItemByGuest[l]),he=qt(k=>k.takePendingItem),[we,be]=y.useState(null);y.useEffect(()=>{o||n!==void 0||!Z||be(he(l))},[l,o,n,Z,he]);const ue=o?null:n!==void 0?n:we,se=Jt(k=>k.clearBadge);y.useEffect(()=>{t==="panel"&&!o&&se(l)},[se,l,o,t]);const de=b?.type==="busy"||b?.type==="retry",xe=Ao(b),vt=y.useMemo(()=>Oo(i?{id:f?.id??i,title:f?.title??a?.item.sessionTitle,busy:de,model:Io(f?.model),agent:f?.agent}:null),[a,i,f,de]),pe=y.useMemo(()=>Ks(h),[h]),et=y.useMemo(()=>({theme:{mode:h.metadata.variant==="dark"?"dark":"light",tokens:{background:h.colors.surface.background,elevated:h.colors.surface.elevated,foreground:h.colors.surface.foreground,muted:h.colors.surface.mutedForeground,subtle:h.colors.surface.subtle,border:h.colors.interactive.border,hover:h.colors.interactive.hover,selection:h.colors.interactive.selection,focus:h.colors.interactive.focusRing,primary:h.colors.primary.base,mutedSurface:h.colors.surface.muted,elevatedForeground:h.colors.surface.elevatedForeground,active:h.colors.interactive.active,selectionForeground:pe.selectionForeground,primaryForeground:h.colors.primary.foreground??"#ffffff",primaryText:pe.tinted.primary,successText:pe.tinted.success,warningText:pe.tinted.warning,errorText:pe.tinted.error,infoText:pe.tinted.info,success:h.colors.status.success,warning:h.colors.status.warning,error:h.colors.status.error,info:h.colors.status.info,font:Et("--font-sans",ha),mono:Et("--font-mono",Sa),radius:Et("--radius",ga)}},locale:G,directory:S||null,session:vt,surface:o&&u?.backgroundEntry?"background":t,connection:P?.connection??zt,settings:P?.settings??{},item:ue}),[h,pe,S,u?.backgroundEntry,o,ue,G,P,vt,t]),_e=`${l}:${u?.version??""}:${g}:service-${u?.service?.granted?"1":"0"}:${u?.entry??""}:${u?.backgroundEntry??""}`,Ln=u?o?u.backgroundEntry??u.entry??null:t==="page"?u.pageEntry??null:t==="dialog"&&u.attachEntry?u.attachEntry:u.entry??null:null,{src:Ge,srcDoc:Ne,status:tt,recoverExpiredNavigation:Hn,acknowledgeHandshake:Rt}=zo({guestId:l,entry:Ln,instanceKey:_e,enabled:g}),Se=y.useRef(et);Se.current=et;const re=y.useRef(S);re.current=S;const nt=y.useRef(i);nt.current=i;const At=y.useRef(de);At.current=de;const D=y.useRef(l);D.current=l;const oe=y.useRef(g);oe.current=g;const Q=y.useRef(u);Q.current=u;const It=y.useRef(u?.integration?.auth);It.current=u?.integration?.auth;const Ue=y.useRef(A);Ue.current=A;const st=y.useRef(x);st.current=x;const rt=y.useRef(p);rt.current=p;const Ot=y.useRef(w);Ot.current=w;const je=y.useRef(null),ge=y.useRef(new Map),Pt=y.useRef(0),me=y.useCallback(()=>{je.current!=null&&(window.clearInterval(je.current),je.current=null)},[]),L=y.useCallback(k=>{m.current?.contentWindow?.postMessage(k,tn)},[]),ot=y.useCallback(()=>{const k=a?.takeMessage();k&&L(k)},[a,L]),at=y.useRef(!1),it=y.useRef(null),ct=y.useCallback(()=>{if(at.current||t!=="panel"||!o&&Q.current?.backgroundEntry)return;at.current=!0;const k=Q.current,Y=H();it.current=Vs(D.current,fe=>{const ee=De.getState().guests.find(ae=>ae.id===k?.id);return H()!==Y||!ee||!pt(ee)||ee.version!==k?.version||ee.entry!==k?.entry||ee.backgroundEntry!==k?.backgroundEntry?Promise.resolve({ok:!1,reason:"unavailable"}):new Promise(ae=>{Pt.current+=1;const te=`resolve-${Pt.current}`,ut=window.setTimeout(()=>{ge.current.delete(te),ae({ok:!1,reason:"timeout"})},Zs);ge.current.set(te,Ee=>{window.clearTimeout(ut),ge.current.delete(te),ae(Ee)}),m.current?.contentWindow?.postMessage(vo(te,fe.command,fe.args),tn)})})},[o,t]);y.useEffect(()=>()=>{it.current?.(),it.current=null,at.current=!1;for(const k of ge.current.values())k({ok:!1,reason:"unavailable"});ge.current.clear()},[_e,Ge,Ne]);const ve=y.useCallback(()=>{L(To(Se.current)),L(ko(re.current||null)),L(wo(Se.current.session)),L(bo(Se.current.connection)),L(xo(Se.current.settings)),L(_o(Se.current.item))},[L]);y.useEffect(()=>{u?.integration&&U(u.id)},[u?.id,u?.integration,U]),y.useEffect(()=>{u&&!g&&p?.()},[u,g,p]),y.useEffect(()=>{const k=new Map;let Y=!1;const fe=H(),ee=D.current,ae=()=>De.getState().guests.find(Te=>Te.id===ee)??null,te=()=>{for(const Te of k.values())Te();k.clear()},ut=Qe(()=>{Y=!0,te(),me()}),Ee=()=>{if(!ie(ae(),"sessions"))throw new q("NOT_GRANTED",ke)},Ct=Te=>{const dt=m.current;if(!dt||Te.source!==dt.contentWindow)return;const Mt=Eo.safeParse(Te.data);if(!Mt.success||Y||H()!==fe||a&&!a.isActive())return;const ye=Ea(Mt.data,D.current),Gt=ae();if(!Gt||!pt(Gt)){te(),"id"in ye&&L({channel:z,v:J,type:"result",id:ye.id,ok:!1,error:"Extension is unavailable.",code:"DISABLED"});return}if(ye.type==="hello"){Rt(),te(),ve(),ct(),ot();return}if(ye.type==="action-result"){ye.id===a?.id&&a.complete(ye.payload);return}Po(ye,{workspaceRead:d=>(Ee(),kt(d,D.current)),workspaceSubscribe:({subscriptionId:d,query:I})=>{if(Ee(),k.get(d)?.(),k.delete(d),k.size>=32)throw new q("HOST_REJECTED","At most 32 workspace subscriptions per frame.");k.set(d,ea(I,D.current,j=>{!Y&&ie(Q.current,"sessions")&&L({channel:z,v:J,type:"workspace",payload:{subscriptionId:d,snapshot:j}})}))},workspaceUnsubscribe:d=>{k.get(d)?.(),k.delete(d)},storage:d=>ma(D.current,d),openSession:d=>{Ee(),ta(d)},toast:d=>{oe.current&&ya(d)},openUrl:Wt,openSurface:d=>{const I=re.current||"";I&&Ze.getState().openContextSurface(I,d)},writeClipboard:async d=>(await Sn(d)).ok,compose:(d,I)=>{mt.getState().setPendingInputText(d,I)},attach:d=>{if(st.current){st.current(d);return}mt.getState().setPendingGuestIssue(d)},startSession:async d=>{if(!ie(Q.current,"sessions")||d.text&&!ie(Q.current,"prompt"))return{ok:!1,code:"NOT_GRANTED",message:ke};const I=await pa({request:d,directory:re.current||null,t:Ue.current,assertAuthorized:()=>{if(Ee(),d.text&&!ie(ae(),"prompt"))throw new q("NOT_GRANTED",ke)}});return I?.sessionId&&d.navigation==="open"&&(Ot.current?.(),rt.current?.()),I},prompt:d=>d.send&&!ie(Q.current,"prompt")?Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke}):da({request:d,sessionId:nt.current,directory:re.current||null,busy:At.current,compose:(I,j)=>{mt.getState().setPendingInputText(I,j)},t:Ue.current}),sessionLink:d=>la({request:d,sessionId:nt.current,directory:re.current||null,t:Ue.current}),close:()=>{rt.current?.()},oauthStart:async()=>{if(!oe.current)return!1;const d=D.current,I=Le.getState().byId[d]?.connection??zt,j=await Er(d);if(!j||Y||H()!==fe)return!1;Wt(j),me();const Bn=Date.now()+kr;return je.current=window.setInterval(()=>{(async()=>{if(Date.now()>Bn){me();return}const Nt=await U(d);Nt&&br(I,Nt.connection)&&me()})()},wr),!0},oauthDisconnect:async()=>{const d=await Tr(ee);return!d||Y||H()!==fe?!1:(R(ee,d),!0)},request:async d=>{if(!oe.current)return{ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."};const I=await Vo(It.current,d);if(I!==void 0)return I?{ok:!0,result:I}:{ok:!1,code:"HOST_REJECTED",message:"Request failed."};const j=await xr(D.current,d);return j.ok||U(D.current),j},serviceRequest:d=>oe.current?Ir(D.current,d):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),serviceStatus:()=>Or(D.current),file:d=>{if(!oe.current)return Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."});const I=Qs(d.path);if(!ie(Q.current,I==="project"?"files":"filesystem"))return Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke});const j=re.current||null;return I==="project"&&!j?Promise.resolve({ok:!1,code:"NO_DIRECTORY",message:"No project is open."}):Uo(D.current,d,j)},generate:d=>oe.current?ie(Q.current,"model")?Ho(D.current,d,re.current||null):Promise.resolve({ok:!1,code:"NOT_GRANTED",message:ke}):Promise.resolve({ok:!1,code:"DISABLED",message:"This extension is disabled in Settings → Extensions."}),setBadge:d=>{oe.current&&Jt.getState().setBadge(D.current,d)},resolveResult:(d,I)=>{const j=ge.current.get(d);if(j){if("error"in I){j({ok:!1,reason:"error",message:I.error});return}j({ok:!0,item:I.item})}}}).then(d=>{d&&!Y&&dt===m.current&&H()===fe&&(!a||a.isActive())&&L(d)})};return window.addEventListener("message",Ct),()=>{Y=!0,te(),ut(),window.removeEventListener("message",Ct)}},[Rt,a,_e,g,L,ve,U,ct,ot,R,Ge,Ne,me]),y.useEffect(()=>{a&&(tt==="error"||!g)&&a.complete({ok:!1,reason:"unavailable"})},[a,tt,g]);const lt=y.useRef(!1);return y.useEffect(()=>(lt.current=!0,()=>{lt.current=!1,queueMicrotask(()=>{lt.current||a?.complete({ok:!1,reason:"unavailable"})})}),[a]),y.useEffect(()=>()=>me(),[_e,me]),y.useEffect(()=>{ve()},[ve,et,S]),y.useEffect(()=>{o||T!=="ready"||u?.entry||(En(e),p?.())},[T,u?.entry,o,e,p]),y.useEffect(()=>{!i||!xe||L(Ro({sessionId:i,phase:xe}))},[i,xe,L]),!u&&T!=="ready"&&T!=="error"?null:!u||!Ge&&!Ne?ce.jsx("div",{className:"flex h-full items-center justify-center px-6 text-sm text-muted-foreground",children:A(u&&tt==="loading"?"common.loading":"contextPanel.plugin.loadFailed")}):g?ce.jsx("iframe",{ref:m,title:u.name,src:Ge||void 0,srcDoc:Ne,sandbox:"allow-scripts",className:Ys("h-full w-full min-h-0 min-w-0 border-0 overflow-hidden",t==="dialog"?"bg-transparent":"bg-[var(--surface-background)]"),onLoad:()=>{Hn()||(ve(),ct(),ot())}},_e):null},Ca=Object.freeze(Object.defineProperty({__proto__:null,PluginPane:Ta},Symbol.toStringTag,{value:"Module"}));export{kr as A,Ta as P,sa as a,Er as b,br as c,Tr as d,wr as e,Aa as f,na as g,Ra as h,Pa as i,Oa as j,Ca as k,Ia as s,Le as u};
|