@vantran-se/openchamber-web 2.1.1 → 2.2.0
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 +32 -24
- package/bin/cli.js +1 -3
- package/bin/cli.test.js +40 -16
- package/bin/lib/DOCUMENTATION.md +6 -5
- package/bin/lib/cli-args.js +6 -1
- package/bin/lib/cli-args.test.js +34 -0
- package/bin/lib/cli-lifecycle.js +0 -1
- package/bin/lib/cli-network.js +8 -2
- package/bin/lib/cli-process.js +1 -1
- package/bin/lib/cli-settings-accessors.test.js +21 -13
- package/bin/lib/cli-startup.js +17 -11
- package/bin/lib/cli-startup.test.js +92 -2
- package/bin/lib/commands-connect-url.js +8 -1
- package/bin/lib/commands-schedule.js +8 -2
- package/bin/lib/commands-serve.js +15 -21
- package/bin/lib/commands-update.js +12 -24
- package/bin/lib/commands-update.test.js +14 -46
- package/dist/assets/DiffView-Cv9MSXl1.js +4 -0
- package/dist/assets/FilePreviewCommentMenu-D4kLseHj.js +4 -0
- package/dist/assets/FilesView-BVoD8I2x.js +14 -0
- package/dist/assets/{GitView-DzuzhIPx.js → GitView-Bzb8p-ew.js} +4 -4
- package/dist/assets/GuestSurfacePane-Crdbvsxo.js +1 -0
- package/dist/assets/InProgressOperationBanner-CwMjNQgk.js +2 -0
- package/dist/assets/{JsonTreeView-B_EPRjzy.js → JsonTreeView-DRKHZfsn.js} +1 -1
- package/dist/assets/MarkdownImageGallery-DZtqT1Zn.js +1 -0
- package/dist/assets/MarkdownRendererImpl-CqG7HCNd.js +10 -0
- package/dist/assets/OnboardingScreen-DMIxwYK5.js +1 -0
- package/dist/assets/{PatchDiff-6yh1csza.js → PatchDiff-CUcCg1jk.js} +1 -1
- package/dist/assets/PierreDiffViewer-CnnR-dnD.js +228 -0
- package/dist/assets/PlanView-RCBadcY7.js +5 -0
- package/dist/assets/SettingsView-CjBjZFRO.js +30 -0
- package/dist/assets/SettingsWindow-DyM7QuhI.js +1 -0
- package/dist/assets/SubmoduleDiffSummary-BWIfgMED.js +1 -0
- package/dist/assets/ToolOutputDialog-Q0P3FuAi.js +15 -0
- package/dist/assets/ToolPartDiffPreview-p7qR9FpU.js +8 -0
- package/dist/assets/{VirtualizedFileDiff-BTJVRkyo.js → VirtualizedFileDiff-CFpjL8Ns.js} +3 -3
- package/dist/assets/{Virtualizer-xCEYz34p.js → Virtualizer-C0IsclZn.js} +1 -1
- package/dist/assets/WalkthroughView-DI31zD02.js +4 -0
- package/dist/assets/appThemeRegistry-B9gkFq9i.js +1 -0
- package/dist/assets/{computeVirtualFileMetrics-CmPe29DM.js → computeVirtualFileMetrics-C2WM6JC2.js} +2 -2
- package/dist/assets/de-YKfk5MmC.js +14 -0
- package/dist/assets/es-_gwT0kr-.js +20 -0
- package/dist/assets/fileTreeStatus-D438yi8M.js +1 -0
- package/dist/assets/fr-DqzvXmIm.js +18 -0
- package/dist/assets/index-BLaHKdtx.js +1 -0
- package/dist/assets/index-BkMXRrVQ.css +1 -0
- package/dist/assets/index-DxNa7xYB.js +65 -0
- package/dist/assets/initializeSharedPreferences-Bck5EAWP.js +1 -0
- package/dist/assets/{isDiffPlainText-CQmDCnEv.js → isDiffPlainText-Dgbw8VKk.js} +1 -1
- package/dist/assets/{isFilePlainText-CYBUzW4I.js → isFilePlainText-_ZS5UYRj.js} +1 -1
- package/dist/assets/ja-B-GFYhQE.js +20 -0
- package/dist/assets/ko-mzksfqDC.js +20 -0
- package/dist/assets/main-C5Xx8dn_.js +2 -0
- package/dist/assets/main-CfBSQM1H.js +990 -0
- package/dist/assets/markdownCore-BmWwW1ll.js +7 -0
- package/dist/assets/miniChat-mnKwy4vQ.js +2 -0
- package/dist/assets/mobile-DeEQd0wZ.js +2 -0
- package/dist/assets/nl-CWQr6NSq.js +20 -0
- package/dist/assets/{parseDiffFromFile-Cy0PNxun.js → parseDiffFromFile-BUgn-T9p.js} +2 -2
- package/dist/assets/patchFileDiff-Dt8LhgBh.js +13 -0
- package/dist/assets/pl-UmRcDUX2.js +20 -0
- package/dist/assets/pt-BR-BSLybvVF.js +20 -0
- package/dist/assets/relocateRestoredSession-B5E9xb3T.js +1 -0
- package/dist/assets/renderElectronMiniChatApp-C0a9A5_J.js +2 -0
- package/dist/assets/renderMobileApp-BNncg3Pk.js +25 -0
- package/dist/assets/runtimeEndpointReset-CZ5aafpl.js +62 -0
- package/dist/assets/{selectionMarkdown-TkYk5h9l.js → selectionMarkdown-CUN3wUld.js} +9 -9
- package/dist/assets/{sessionOwnership-Bs1xbRfB.js → sessionOwnership-BSuxCEhb.js} +1 -1
- package/dist/assets/shikiHighlight-DHDx-6eM.js +1 -0
- package/dist/assets/space-apply-DM_2pRW7.js +1 -0
- package/dist/assets/space-close-Bpomt8z0.js +1 -0
- package/dist/assets/{surface-B6n7wJtt.js → surface-C-jQaGnL.js} +1 -1
- package/dist/assets/{textMateThemeFromAppTheme-CDlKffWz.js → textMateThemeFromAppTheme-DlsTphbY.js} +1 -1
- package/dist/assets/tr-gaTrX_HK.js +11 -0
- package/dist/assets/uk-CnJF6ykl.js +20 -0
- package/dist/assets/{useAppFontEffects-DCqCVGlT.js → useAppFontEffects-DGlvOqP_.js} +194 -233
- package/dist/assets/useInlineCommentController-kMN4Wg_D.js +2 -0
- package/dist/assets/{useRootScrollLock-BowwS8kq.js → useRootScrollLock-DMPpvpNP.js} +2 -2
- package/dist/assets/{vendor-base-ui-DX96QhTP.js → vendor-base-ui-Det7U81h.js} +1 -1
- package/dist/assets/{vendor-codemirror-autocomplete-DW1FQz9_.js → vendor-codemirror-autocomplete-BSHQHbKu.js} +1 -1
- package/dist/assets/{vendor-codemirror-commands-DpmhalwN.js → vendor-codemirror-commands-C4G_dPWe.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-angular-BqExbN1M.js → vendor-codemirror-lang-angular-B6LbBGHB.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-cpp-DZA36HfS.js → vendor-codemirror-lang-cpp-BWWXBx7W.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-css-B07blnnZ.js → vendor-codemirror-lang-css-Cayfb29q.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-go-BM8K9D1-.js → vendor-codemirror-lang-go-BoKlCNKw.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-html-DaH9adfE.js → vendor-codemirror-lang-html-BQWerHsJ.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-java-CsdC0viz.js → vendor-codemirror-lang-java-DWX7Fq_K.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-javascript-CpGYXGuo.js → vendor-codemirror-lang-javascript-DbpEcZM0.js} +2 -2
- package/dist/assets/{vendor-codemirror-lang-jinja-BBeGzXw5.js → vendor-codemirror-lang-jinja-D1JIJRA7.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-json-58T70Hqs.js → vendor-codemirror-lang-json-BzgckzmB.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-less-BI-xCA59.js → vendor-codemirror-lang-less-B9EpDXFi.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-liquid-zEcMa-zy.js → vendor-codemirror-lang-liquid-9U7kRbSf.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-markdown-BLKnlLP4.js → vendor-codemirror-lang-markdown-D2TEBIvZ.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-php-9f35M83-.js → vendor-codemirror-lang-php-BT6sDVzE.js} +1 -1
- package/dist/assets/vendor-codemirror-lang-python-jAMtYiA9.js +3 -0
- package/dist/assets/{vendor-codemirror-lang-rust-MNDL_jZQ.js → vendor-codemirror-lang-rust-CVO56EiL.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-sass-p9epsSNm.js → vendor-codemirror-lang-sass-DZlOoUWu.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-sql-Bqzh0EXX.js → vendor-codemirror-lang-sql-fZ6t1DPw.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-vue-BnNUWV-p.js → vendor-codemirror-lang-vue-DxbqrLiE.js} +1 -1
- package/dist/assets/{vendor-codemirror-lang-wast-C2a-oLmk.js → vendor-codemirror-lang-wast-DyU1Gt-I.js} +1 -1
- package/dist/assets/vendor-codemirror-lang-xml-C9a_K5_p.js +1 -0
- package/dist/assets/{vendor-codemirror-lang-yaml-C0sjswB0.js → vendor-codemirror-lang-yaml-Cptq8l0e.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-ByBn5zIW.js → vendor-codemirror-language-DufXoQvE.js} +2 -2
- package/dist/assets/vendor-codemirror-language-data-CtwSWKtX.js +2 -0
- package/dist/assets/{vendor-codemirror-search-ib-sHD5W.js → vendor-codemirror-search-CvXM_pZg.js} +1 -1
- package/dist/assets/{vendor-codemirror-state-G3UuR-be.js → vendor-codemirror-state-Dek9sMtw.js} +1 -1
- package/dist/assets/{vendor-codemirror-view-Bniqp7p5.js → vendor-codemirror-view-1e0FQ6Wn.js} +1 -1
- package/dist/assets/vendor-framer-motion-DxDVhOLc.js +9 -0
- package/dist/assets/vendor-katex-CuQvj9-L.js +257 -0
- package/dist/assets/vendor-katex-DdZNUVNG.css +1 -0
- package/dist/assets/{vendor-motion-dom-DcCgeG69.js → vendor-motion-dom-HXPOMxb7.js} +1 -1
- package/dist/assets/{vendor-opencode-client-DHzhmLwV.js → vendor-opencode-client-BmFcUkbQ.js} +1 -1
- package/dist/assets/{vendor-replit-codemirror-vim-DkzqxN2H.js → vendor-replit-codemirror-vim-BlJRn-cW.js} +2 -2
- package/dist/assets/{vendor-tanstack-react-virtual-H_JmXOFV.js → vendor-tanstack-react-virtual-CvuLsk7D.js} +1 -1
- package/dist/assets/{vendor-tanstack-virtual-core-Dxc8hSTB.js → vendor-tanstack-virtual-core-DPaNcJcT.js} +1 -1
- package/dist/assets/zh-CN-t2vigSB1.js +20 -0
- package/dist/assets/zh-TW-jAgqBokB.js +20 -0
- package/dist/index.html +6 -6
- package/dist/mini-chat.html +6 -6
- package/dist/mobile.html +6 -6
- package/package.json +8 -5
- package/server/index.js +80 -36
- package/server/lib/agent-memory/actions.js +1 -6
- package/server/lib/agent-memory/routes.js +1 -2
- package/server/lib/agent-memory/runtime.js +1 -8
- package/server/lib/agent-tool/DOCUMENTATION.md +7 -3
- package/server/lib/agent-tool/runtime.js +3 -6
- package/server/lib/agent-tool/runtime.test.js +0 -2
- package/server/lib/browser-control/DOCUMENTATION.md +6 -0
- package/server/lib/changelog/update-notes.js +1 -1
- package/server/lib/context-obligatory/runtime.js +1 -2
- package/server/lib/dev-tunnel/DOCUMENTATION.md +8 -0
- package/server/lib/dev-tunnel/client.js +21 -10
- package/server/lib/dev-tunnel/tunnel.test.js +34 -0
- package/server/lib/dispatch-results/runtime.js +1 -1
- package/server/lib/enterprise-mode.d.ts +1 -0
- package/server/lib/enterprise-mode.js +13 -2
- package/server/lib/enterprise-mode.test.js +21 -0
- package/server/lib/event-stream/DOCUMENTATION.md +2 -2
- package/server/lib/event-stream/index.js +1 -3
- package/server/lib/event-stream/translate-v2.js +1 -9
- package/server/lib/event-stream/translate-v2.test.js +0 -11
- package/server/lib/fs/DOCUMENTATION.md +5 -2
- package/server/lib/fs/routes.js +62 -15
- package/server/lib/fs/routes.test.js +278 -48
- package/server/lib/fs/workspace-file-names.js +104 -0
- package/server/lib/fs/workspace-file-names.test.js +62 -0
- package/server/lib/git/DOCUMENTATION.md +17 -5
- package/server/lib/git/contributor-provenance-storage.js +9 -6
- package/server/lib/git/contributor-provenance-storage.test.js +29 -0
- package/server/lib/git/credential-broker.js +1 -1
- package/server/lib/git/credential-resolver.js +1 -4
- package/server/lib/git/credentials.js +1 -0
- package/server/lib/git/discovery-endpoint.js +1 -1
- package/server/lib/git/identity-provisioning.js +2 -1
- package/server/lib/git/identity-storage.js +3 -4
- package/server/lib/git/lfs-discovery.js +14 -14
- package/server/lib/git/lfs-discovery.test.js +16 -6
- package/server/lib/git/network-operation-plan.js +50 -62
- package/server/lib/git/network-operation-plan.test.js +103 -1
- package/server/lib/git/network-operation-registry.js +4 -6
- package/server/lib/git/network-operation-storage.js +4 -6
- package/server/lib/git/network-operations.js +12 -4
- package/server/lib/git/network-operations.test.js +19 -6
- package/server/lib/git/redaction.js +2 -1
- package/server/lib/git/repository-credential-runtime.js +5 -3
- package/server/lib/git/repository-credential-runtime.test.js +22 -0
- package/server/lib/git/routes.js +31 -137
- package/server/lib/git/routes.test.js +2 -2
- package/server/lib/git/service.js +143 -27
- package/server/lib/git/service.test.js +215 -1
- package/server/lib/git/ssh-credential-storage.js +1 -4
- package/server/lib/git/submodule-discovery.js +1 -1
- package/server/lib/git/worktree-bootstrap-storage.js +3 -4
- package/server/lib/git/worktree-bootstrap-storage.test.js +15 -0
- package/server/lib/git/worktree-creation.js +194 -0
- package/server/lib/git/worktree-creation.test.js +155 -0
- package/server/lib/github/DOCUMENTATION.md +11 -6
- package/server/lib/github/auth.js +2 -4
- package/server/lib/github/device-flow.js +2 -2
- package/server/lib/github/gh-cli-credential.js +1 -0
- package/server/lib/github/octokit.js +31 -0
- package/server/lib/github/pr-status.js +35 -18
- package/server/lib/github/pr-status.test.js +271 -3
- package/server/lib/github/reference-search.js +102 -13
- package/server/lib/github/reference-search.test.js +48 -7
- package/server/lib/github/routes.auth.test.js +18 -0
- package/server/lib/github/routes.js +360 -6
- package/server/lib/github/routes.mutations.test.js +239 -0
- package/server/lib/github/routes.test.js +134 -2
- package/server/lib/gitlab/DOCUMENTATION.md +5 -1
- package/server/lib/gitlab/auth-storage.test.js +1 -0
- package/server/lib/gitlab/mappers.js +30 -1
- package/server/lib/gitlab/resources.js +230 -6
- package/server/lib/gitlab/resources.test.js +179 -0
- package/server/lib/gitlab/routes.js +200 -6
- package/server/lib/gitlab/routes.test.js +186 -2
- package/server/lib/gitlab/validation.js +1 -5
- package/server/lib/guests/DOCUMENTATION.md +1 -1
- package/server/lib/guests/oauth.js +2 -2
- package/server/lib/guests/service.js +1 -1
- package/server/lib/guests/sockets.js +1 -1
- package/server/lib/injected-env.d.ts +8 -0
- package/server/lib/injected-env.js +50 -0
- package/server/lib/injected-env.test.js +56 -0
- package/server/lib/linear/DOCUMENTATION.md +5 -6
- package/server/lib/linear/issues.js +62 -4
- package/server/lib/linear/issues.test.js +68 -0
- package/server/lib/linear/oauth.js +5 -5
- package/server/lib/linear/parse.js +2 -9
- package/server/lib/message-queue/DOCUMENTATION.md +23 -1
- package/server/lib/message-queue/runtime.js +85 -12
- package/server/lib/message-queue/runtime.test.js +172 -2
- package/server/lib/notifications/apns-runtime.js +5 -6
- package/server/lib/notifications/apns-runtime.test.js +20 -4
- package/server/lib/openchamber-control/DOCUMENTATION.md +19 -1
- package/server/lib/openchamber-control/actions.js +2 -1
- package/server/lib/openchamber-control/service.js +119 -20
- package/server/lib/openchamber-control/service.test.js +166 -0
- package/server/lib/openchamber-sessions/archive-store.js +1 -6
- package/server/lib/openchamber-sessions/routes.js +47 -12
- package/server/lib/openchamber-sessions/routes.test.js +65 -2
- package/server/lib/openchamber-sessions/session-metadata-store.js +1 -6
- package/server/lib/opencode/DOCUMENTATION.md +22 -8
- package/server/lib/opencode/agents.js +62 -0
- package/server/lib/opencode/auth-state-runtime.js +3 -1
- package/server/lib/opencode/auth.d.ts +1 -1
- package/server/lib/opencode/auth.js +8 -0
- package/server/lib/opencode/auth.test.js +31 -0
- package/server/lib/opencode/config-entity-routes.js +16 -0
- package/server/lib/opencode/config-entity-v2.test.js +16 -1
- package/server/lib/opencode/config-paths.test.js +2 -2
- package/server/lib/opencode/config-v2.js +2 -4
- package/server/lib/opencode/feature-routes-runtime.js +89 -49
- package/server/lib/opencode/lifecycle.js +41 -21
- package/server/lib/opencode/lifecycle.test.js +50 -2
- package/server/lib/opencode/model-discovery.js +1 -1
- package/server/lib/opencode/model-discovery.test.js +17 -0
- package/server/lib/opencode/models-metadata.js +0 -2
- package/server/lib/opencode/openchamber-routes.test.js +3 -3
- package/server/lib/opencode/plugins.js +6 -9
- package/server/lib/opencode/provider-source-route.test.js +101 -3
- package/server/lib/opencode/providers-disabled.test.js +59 -0
- package/server/lib/opencode/providers.js +34 -0
- package/server/lib/opencode/proxy.js +11 -3
- package/server/lib/opencode/routes.js +40 -2
- package/server/lib/opencode/settings-helpers.js +27 -1
- package/server/lib/opencode/settings-helpers.test.js +19 -7
- package/server/lib/opencode/settings-registry.json +27 -16
- package/server/lib/opencode/settings-runtime.test.js +18 -0
- package/server/lib/opencode/shared-service-runtime.js +23 -104
- package/server/lib/opencode/shared.js +77 -46
- package/server/lib/opencode/shared.test.js +12 -12
- package/server/lib/opencode/shutdown-runtime.test.js +2 -3
- package/server/lib/opencode/skill-routes.js +123 -38
- package/server/lib/opencode/skill-routes.test.js +201 -0
- package/server/lib/opencode/skills.js +81 -34
- package/server/lib/opencode/skills.test.js +176 -21
- package/server/lib/opencode/startup-pipeline-runtime.js +6 -3
- package/server/lib/opencode/startup-pipeline-runtime.test.js +2 -1
- package/server/lib/opencode/watcher.test.js +0 -54
- package/server/lib/outbound-proxy.js +52 -0
- package/server/lib/outbound-proxy.test.js +55 -0
- package/server/lib/package-manager.js +23 -17
- package/server/lib/package-manager.test.js +5 -18
- package/server/lib/permission-auto-accept/DOCUMENTATION.md +1 -1
- package/server/lib/permission-auto-accept/runtime.js +19 -47
- package/server/lib/permission-auto-accept/runtime.test.js +2 -2
- package/server/lib/project-context/DOCUMENTATION.md +7 -1
- package/server/lib/project-context/routes.js +1 -2
- package/server/lib/project-context/runtime.js +12 -14
- package/server/lib/project-context/runtime.test.js +78 -2
- package/server/lib/projects/project-config.js +30 -15
- package/server/lib/projects/project-config.test.js +30 -0
- package/server/lib/projects/project-setup.js +1 -2
- package/server/lib/projects/routes.js +1 -2
- package/server/lib/quota/DOCUMENTATION.md +35 -7
- package/server/lib/quota/index.js +1 -0
- package/server/lib/quota/providers/claude/index.js +1 -1
- package/server/lib/quota/providers/cline-pass.js +1 -1
- package/server/lib/quota/providers/exe-dev.js +1 -1
- package/server/lib/quota/providers/google/index.js +1 -1
- package/server/lib/quota/providers/hyper.js +1 -1
- package/server/lib/quota/providers/kimi.js +116 -36
- package/server/lib/quota/providers/kimi.test.js +128 -3
- package/server/lib/quota/providers/opencode-go.js +144 -21
- package/server/lib/quota/providers/opencode-go.test.js +229 -6
- package/server/lib/quota/providers/openrouter.js +1 -1
- package/server/lib/quota/providers/zenmux.js +1 -1
- package/server/lib/quota/utils/auth.js +1 -0
- package/server/lib/quota/utils/transformers.js +2 -6
- package/server/lib/relay/DOCUMENTATION.md +18 -3
- package/server/lib/relay/e2ee.js +7 -7
- package/server/lib/relay/host-client.js +84 -13
- package/server/lib/relay/host-client.test.js +201 -1
- package/server/lib/relay/identity.js +6 -29
- package/server/lib/relay/identity.test.js +18 -28
- package/server/lib/relay/key-store.js +141 -0
- package/server/lib/relay/key-store.test.js +138 -0
- package/server/lib/relay/service.js +8 -8
- package/server/lib/relay/service.test.js +10 -5
- package/server/lib/relay/signing-key.js +13 -36
- package/server/lib/relay/tunnel-codec.js +10 -10
- package/server/lib/route-module-exports.test.js +22 -0
- package/server/lib/routing/DOCUMENTATION.md +23 -3
- package/server/lib/routing/cache.js +87 -0
- package/server/lib/routing/defaults.js +11 -0
- package/server/lib/routing/history.js +12 -4
- package/server/lib/routing/runtime.js +39 -3
- package/server/lib/routing/runtime.test.js +81 -2
- package/server/lib/routing/store.js +12 -1
- package/server/lib/routing/store.test.js +13 -0
- package/server/lib/scheduled-tasks/DOCUMENTATION.md +59 -1
- package/server/lib/scheduled-tasks/existing-session.js +119 -0
- package/server/lib/scheduled-tasks/existing-session.test.js +350 -0
- package/server/lib/scheduled-tasks/loops.js +1 -8
- package/server/lib/scheduled-tasks/routes.js +8 -8
- package/server/lib/scheduled-tasks/runtime.js +103 -13
- package/server/lib/scheduled-tasks/runtime.test.js +48 -0
- package/server/lib/scheduled-tasks/service.js +33 -11
- package/server/lib/scheduled-tasks/service.test.js +128 -2
- package/server/lib/scheduled-tasks/session-defaults.js +27 -0
- package/server/lib/scheduled-tasks/session-defaults.test.js +19 -0
- package/server/lib/session-assist/context.js +1 -0
- package/server/lib/session-folders/routes.js +2 -2
- package/server/lib/session-goal/objectives.js +1 -1
- package/server/lib/session-knowledge/routes.js +2 -2
- package/server/lib/session-knowledge/runtime.js +1 -2
- package/server/lib/session-work/DOCUMENTATION.md +39 -14
- package/server/lib/session-work/questions.js +31 -2
- package/server/lib/session-work/runtime.js +22 -13
- package/server/lib/session-work/runtime.test.js +43 -26
- package/server/lib/session-work/state.js +10 -4
- package/server/lib/session-work/state.test.js +8 -1
- package/server/lib/shared/DOCUMENTATION.md +89 -0
- package/server/lib/shared/guards.js +53 -0
- package/server/lib/shared/guards.test.js +112 -0
- package/server/lib/skills-catalog/DOCUMENTATION.md +10 -8
- package/server/lib/skills-catalog/cache.js +3 -2
- package/server/lib/skills-catalog/curated-sources.js +5 -1
- package/server/lib/skills-catalog/git.js +107 -20
- package/server/lib/skills-catalog/git.test.js +78 -0
- package/server/lib/skills-catalog/install.js +21 -12
- package/server/lib/skills-catalog/scan.js +25 -15
- package/server/lib/skills-catalog/source.js +26 -1
- package/server/lib/skills-catalog/source.test.js +27 -0
- package/server/lib/source-control/DOCUMENTATION.md +2 -1
- package/server/lib/source-control/audit-storage.js +7 -6
- package/server/lib/source-control/audit-storage.test.js +11 -0
- package/server/lib/source-control/binding-service.js +2 -5
- package/server/lib/source-control/change-request-worktree.js +90 -0
- package/server/lib/source-control/change-request-worktree.test.js +121 -0
- package/server/lib/source-control/mutation-executor.js +1 -1
- package/server/lib/source-control/mutation-storage.js +11 -5
- package/server/lib/source-control/provider-instance.js +1 -2
- package/server/lib/source-control/repository-identity.js +1 -1
- package/server/lib/source-control/routes.js +14 -2
- package/server/lib/spaces/DOCUMENTATION.md +42 -17
- package/server/lib/spaces/command-stream.test.js +15 -0
- package/server/lib/spaces/dispatcher.js +7 -0
- package/server/lib/spaces/dispatcher.test.js +17 -0
- package/server/lib/spaces/hardening.js +2 -2
- package/server/lib/spaces/hardening.test.js +1 -1
- package/server/lib/spaces/host.js +2 -0
- package/server/lib/spaces/journey.js +66 -5
- package/server/lib/spaces/journey.test.js +95 -4
- package/server/lib/spaces/layout.js +1 -1
- package/server/lib/spaces/places/docker-disk.js +38 -14
- package/server/lib/spaces/places/docker-disk.test.js +80 -1
- package/server/lib/spaces/places/docker.js +35 -11
- package/server/lib/spaces/places/fake-docker.js +22 -3
- package/server/lib/spaces/places/memory-place.js +3 -0
- package/server/lib/spaces/places/packed.docker.live.test.js +1 -1
- package/server/lib/spaces/routes.js +5 -0
- package/server/lib/spaces/routes.test.js +4 -2
- package/server/lib/spaces/run-command.js +9 -2
- package/server/lib/spaces/tools.js +4 -5
- package/server/lib/spaces/tools.test.js +2 -2
- package/server/lib/terminal/runtime.js +18 -6
- package/server/lib/terminal/runtime.test.js +66 -0
- package/server/lib/tts/index.js +3 -0
- package/server/lib/tts/service.js +4 -2
- package/server/lib/walkthrough/DOCUMENTATION.md +3 -1
- package/server/lib/walkthrough/index.js +2 -3
- package/server/lib/walkthrough/pr-source.test.js +22 -0
- package/server/lib/walkthrough/sources.js +6 -1
- package/server/opencode-proxy.test.js +127 -0
- package/bin/lib/commands-startup.test.js +0 -15
- package/dist/assets/CodeMirrorCommentWidgets-CVDSjcrP.js +0 -1
- package/dist/assets/DiffView-Ct7vL3fD.js +0 -4
- package/dist/assets/FilesView-DT0uEYgT.js +0 -17
- package/dist/assets/GuestSurfacePane-DVvk1VPu.js +0 -1
- package/dist/assets/LinearIssuesView-C10MwA9h.js +0 -1
- package/dist/assets/MarkdownImageGallery-BbN_K_3d.js +0 -1
- package/dist/assets/MarkdownRendererImpl-BLt2Tkk9.js +0 -10
- package/dist/assets/OnboardingScreen-Bgp5A3WB.js +0 -1
- package/dist/assets/PierreDiffViewer-CWJLj-S-.js +0 -210
- package/dist/assets/PlanView-DsRWnsOI.js +0 -5
- package/dist/assets/PublishDialog-CCeKloRu.js +0 -2
- package/dist/assets/SettingsView-BuPPsNPp.js +0 -30
- package/dist/assets/SettingsWindow-CM5fL8Ot.js +0 -1
- package/dist/assets/SubmoduleDiffSummary-CfsMcfiQ.js +0 -1
- package/dist/assets/ToolOutputDialog-mZrfSofz.js +0 -15
- package/dist/assets/ToolPartDiffPreview-BUGCRYEL.js +0 -8
- package/dist/assets/WalkthroughView-ClBo7PPd.js +0 -4
- package/dist/assets/appThemeRegistry-CxzMxR-H.js +0 -1
- package/dist/assets/de-CBla4hjd.js +0 -14
- package/dist/assets/es-BmnZtxTD.js +0 -20
- package/dist/assets/fileTreeStatus-BSHFIGEg.js +0 -1
- package/dist/assets/fr-OVKIBUZO.js +0 -18
- package/dist/assets/index-CKCFKmjF.js +0 -1
- package/dist/assets/index-Dbx4V4GN.css +0 -1
- package/dist/assets/index-vQ1Pg1cr.js +0 -61
- package/dist/assets/ja-6v-yr-gE.js +0 -20
- package/dist/assets/ko-I_ZLvgQ9.js +0 -20
- package/dist/assets/main-CmO4dRtR.js +0 -2
- package/dist/assets/main-b9vqhlYM.js +0 -999
- package/dist/assets/markdownCore-BPEZRQfP.js +0 -7
- package/dist/assets/miniChat-B5Oi7B-6.js +0 -2
- package/dist/assets/mobile-CVtShif9.js +0 -2
- package/dist/assets/nl-DcvIJf46.js +0 -20
- package/dist/assets/patchFileDiff-CW3wCH1O.js +0 -13
- package/dist/assets/pl-JxCUl0sd.js +0 -20
- package/dist/assets/pt-BR-L89mjja2.js +0 -20
- package/dist/assets/relocateRestoredSession-DYh_9oBa.js +0 -1
- package/dist/assets/renderElectronMiniChatApp-BD-1JHSg.js +0 -2
- package/dist/assets/renderMobileApp-7s5InXt1.js +0 -25
- package/dist/assets/runtimeEndpointReset-DqLJC6L1.js +0 -53
- package/dist/assets/shikiHighlight-CXgZnvHh.js +0 -1
- package/dist/assets/space-apply-1trGVIl8.js +0 -1
- package/dist/assets/space-close-y7j-NuBv.js +0 -1
- package/dist/assets/tr-ka5J1flt.js +0 -11
- package/dist/assets/uk-PyGe6Q_u.js +0 -20
- package/dist/assets/useInlineCommentController-CrjSGCpi.js +0 -2
- package/dist/assets/vendor-codemirror-lang-python-B7ClrMIT.js +0 -3
- package/dist/assets/vendor-codemirror-lang-xml-C8tGnS64.js +0 -1
- package/dist/assets/vendor-codemirror-language-data-q2bKO1EM.js +0 -2
- package/dist/assets/vendor-framer-motion-Bq3iTZ6r.js +0 -1
- package/dist/assets/vendor-katex-CHD9BdDO.js +0 -257
- package/dist/assets/vendor-katex-Cp579UoJ.css +0 -1
- package/dist/assets/zh-CN-B0P2tybJ.js +0 -20
- package/dist/assets/zh-TW-Bs9C5cN8.js +0 -20
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as i,j as u}from"./vendor-react-BUCujlKS.js";import{m7 as Q,f as _,cu as ee,jD as te,h as S,B as q,g as ne,m8 as re,m9 as L}from"./useAppFontEffects-DCqCVGlT.js";import{cn as se,bc as ie,bd as oe,ap as ce,am as ae}from"./index-vQ1Pg1cr.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.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-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.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-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-Bniqp7p5.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-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-opencode-client-DHzhmLwV.js";const ue=1,le=8e3,de=6e4,he={refreshAuth:ie,clearUrlAuthToken:se,openSocket:s=>oe(ce().websocket(`/api/guests/${s}/surface/ws`)),isPaused:()=>document.visibilityState==="hidden"||!navigator.onLine,onWake:s=>(window.addEventListener("online",s),document.addEventListener("visibilitychange",s),()=>{window.removeEventListener("online",s),document.removeEventListener("visibilitychange",s)})};class pe{constructor(r,n,c=he){this.guestId=r,this.handlers=n,this.dependencies=c}socket=null;pendingFrame=null;reconnectTimer=null;wakeCleanup=null;failures=0;generation=0;disposed=!1;ended=!1;start(){this.handlers.onConnection({status:"connecting"}),this.connect()}dispose(){this.disposed=!0,this.generation+=1,this.cancelReconnect();const r=this.socket;if(this.socket=null,r)try{r.close()}catch{}}ack(r){this.send({type:"ack",seq:r})}sendInput(r){return r.length===0?!1:this.send({type:"input",events:r})}release(){this.send({type:"release"})}resize(r,n){this.send({type:"resize",width:r,height:n})}requestClipboard(r){this.send({type:"clipboard-read",id:r})}send(r){const n=this.socket;if(!n||n.readyState!==ue)return!1;try{return n.send(JSON.stringify(r)),!0}catch{return!1}}async connect(){if(this.disposed||this.ended)return;const r=this.generation;try{await this.dependencies.refreshAuth()}catch{this.scheduleReconnect();return}if(r!==this.generation||this.disposed)return;let n;try{n=this.dependencies.openSocket(this.guestId)}catch{this.scheduleReconnect();return}n.binaryType="arraybuffer",this.socket=n;let c=!1;n.onopen=()=>{this.socket===n&&(c=!0,this.failures=0,this.pendingFrame=null,this.handlers.onConnection({status:"open"}))},n.onmessage=p=>{this.socket===n&&this.handleMessage(p.data)},n.onerror=()=>{},n.onclose=()=>{this.socket===n&&(this.socket=null,this.pendingFrame=null,!(this.disposed||this.ended)&&(c||this.dependencies.clearUrlAuthToken(),this.scheduleReconnect()))}}handleMessage(r){if(r instanceof ArrayBuffer){const c=this.pendingFrame;if(this.pendingFrame=null,!c)return;this.handlers.onFrame({...c,bytes:r});return}let n;try{const c=Q.safeParse(JSON.parse(r));if(!c.success)return;n=c.data}catch{return}switch(n.type){case"hello":this.handlers.onViewer?.(n.viewerId);return;case"frame":this.pendingFrame={seq:n.seq,width:n.width,height:n.height,mime:n.mime,agentActive:n.agentActive},n.title&&(this.pendingFrame.title=n.title);return;case"control":this.handlers.onControl({controller:n.controller,mine:n.mine});return;case"resized":this.handlers.onResized?.({width:n.width,height:n.height});return;case"clipboard":this.handlers.onClipboard?.(n.id,n.text);return;case"error":this.handlers.onError?.(n.code,n.message);return;case"ended":this.ended=!0,this.cancelReconnect(),this.handlers.onConnection({status:"ended",reason:n.reason});return}}retry(){this.disposed||(this.ended=!1,this.failures=0,this.handlers.onConnection({status:"connecting"}),this.connect())}scheduleReconnect(){if(this.reconnectTimer||this.disposed||this.ended)return;this.failures+=1;const r=this.dependencies.isPaused()?de:Math.min(500*2**Math.min(this.failures-1,10),le);this.handlers.onConnection({status:"reconnecting",attempt:this.failures});const n=()=>{this.dependencies.isPaused()||(this.cancelReconnect(),this.connect())};this.wakeCleanup=this.dependencies.onWake(n),this.reconnectTimer=setTimeout(n,r)}cancelReconnect(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.wakeCleanup?.(),this.wakeCleanup=null}}const me=250,F=s=>({alt:s.altKey,ctrl:s.ctrlKey,meta:s.metaKey,shift:s.shiftKey}),fe=s=>(s.metaKey||s.ctrlKey)&&!s.altKey&&s.key.toLowerCase()==="c",ge=s=>(s.metaKey||s.ctrlKey)&&!s.altKey&&s.key.toLowerCase()==="v",Wt=({mode:s})=>{const{t:r}=_(),n=ae(s),c=ee(t=>t.guests.find(e=>e.id===n)??null),p=c!==null&&te(c)&&c.service?.surface===!0,w=i.useRef(null),b=i.useRef(null),l=i.useRef(null),k=i.useRef(null),y=i.useRef([]),m=i.useRef(null),T=i.useRef(0),C=i.useRef(!1),R=i.useRef({controller:"none",mine:!1}),[d,U]=i.useState({status:"connecting"}),[h,W]=i.useState({controller:"none",mine:!1}),A=i.useCallback(t=>{R.current=t,W(t)},[]),[I,$]=i.useState(""),[V,X]=i.useState(!1),[f,K]=i.useState(!1),[j,M]=i.useState(!1),E=i.useCallback(async t=>{const e=b.current,o=l.current;if(!(!e||!o))try{const a=await createImageBitmap(new Blob([t.bytes],{type:t.mime}));(e.width!==t.width||e.height!==t.height)&&(e.width=t.width,e.height=t.height),e.getContext("2d")?.drawImage(a,0,0,t.width,t.height),a.close(),k.current={width:t.width,height:t.height},K(!0),$(t.title??""),X(t.agentActive)}catch{}finally{o.ack(t.seq)}},[]);i.useEffect(()=>{if(!p)return;let t=null;const e=new pe(n,{onViewer:o=>{t&&L(n,t),t=o,re(n,o)},onFrame:o=>{E(o)},onControl:A,onConnection:U,onClipboard:(o,a)=>{ne(a)}});return l.current=e,e.start(),()=>{t&&L(n,t),e.dispose(),l.current===e&&(l.current=null),m.current!==null&&cancelAnimationFrame(m.current),m.current=null,y.current=[],k.current=null,K(!1)}},[p,E,n,A]),i.useEffect(()=>{const t=w.current;if(!t||!p)return;let e=null;const o=new ResizeObserver(a=>{const g=a[0];if(!g)return;const{width:v,height:Z}=g.contentRect;e&&clearTimeout(e),e=setTimeout(()=>{e=null;const B=window.devicePixelRatio||1,z=Math.round(v*B),O=Math.round(Z*B);z>0&&O>0&&l.current?.resize(z,O)},me)});return o.observe(t),()=>{o.disconnect(),e&&clearTimeout(e)}},[p]);const x=i.useCallback(t=>{y.current.push(t),m.current===null&&(m.current=requestAnimationFrame(()=>{m.current=null;const e=y.current;y.current=[],l.current?.sendInput(e),C.current&&(C.current=!1,T.current+=1,l.current?.requestClipboard(`copy-${T.current}`))}))},[]),D=i.useCallback(t=>{const e=b.current,o=k.current;if(!e||!o)return null;const a=e.getBoundingClientRect();if(a.width===0||a.height===0)return null;const g=(t.clientX-a.left)/a.width*o.width,v=(t.clientY-a.top)/a.height*o.height;return{x:Math.round(g),y:Math.round(v)}},[]),P=t=>e=>{if(!f||t==="move"&&e.buttons===0&&!(R.current.controller==="user"&&R.current.mine))return;const o=D(e);o&&(t==="down"?(w.current?.focus(),e.currentTarget.setPointerCapture(e.pointerId)):t==="up"&&e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId),e.preventDefault(),x({type:"pointer",action:t,x:o.x,y:o.y,button:t==="move"?-1:e.button,buttons:e.buttons,modifiers:F(e)}))},G=t=>{if(!f)return;const e=D(t);e&&(t.preventDefault(),x({type:"wheel",x:e.x,y:e.y,deltaX:t.deltaX,deltaY:t.deltaY,modifiers:F(t)}))},N=t=>e=>{f&&(ge(e)||(e.preventDefault(),e.stopPropagation(),t==="down"&&fe(e)&&(C.current=!0),x({type:"key",action:t,key:e.key,code:e.code,modifiers:F(e)})))},Y=t=>{if(!f)return;const e=t.clipboardData.getData("text/plain");t.preventDefault(),e&&x({type:"text",text:e})},H=()=>{l.current?.release()};if(!c)return null;if(!p)return u.jsx("div",{className:"flex h-full items-center justify-center px-6 text-sm text-muted-foreground",children:r("contextPanel.surface.unavailable")});const J=d.status==="connecting"?"contextPanel.surface.status.connecting":d.status==="reconnecting"?"contextPanel.surface.status.reconnecting":d.status==="ended"?`contextPanel.surface.ended.${d.reason}`:h.controller==="user"?h.mine?"contextPanel.surface.status.youControl":"contextPanel.surface.status.otherControls":h.controller==="agent"||V?"contextPanel.surface.status.agentWorking":j?"contextPanel.surface.status.readyFocused":"contextPanel.surface.status.ready";return u.jsxs("div",{className:"flex h-full flex-col bg-[var(--surface-background)]",children:[u.jsxs("div",{className:"flex h-8 shrink-0 items-center gap-2 border-b border-border px-3",children:[u.jsx("span",{className:"typography-meta min-w-0 flex-1 truncate text-foreground",title:I||c.name,children:I||c.name}),u.jsx("span",{className:S("typography-meta shrink-0 truncate",h.controller==="user"&&h.mine?"text-foreground":"text-muted-foreground"),"aria-live":"polite",children:r(J)}),h.controller==="user"&&h.mine?u.jsx(q,{size:"xs",variant:"outline",onClick:H,children:r("contextPanel.surface.handBack")}):null,d.status==="ended"?u.jsx(q,{size:"xs",variant:"outline",onClick:()=>l.current?.retry(),children:r("contextPanel.surface.retry")}):null]}),u.jsxs("div",{ref:w,tabIndex:0,role:"application","aria-label":r("contextPanel.surface.canvasAria",{name:c.name}),"data-terminal-owner":`surface:${n}`,className:S("relative flex min-h-0 flex-1 items-center justify-center overflow-hidden outline-none",j?"ring-1 ring-inset ring-[var(--interactive-selection-border)]":""),onFocus:()=>M(!0),onBlur:()=>M(!1),onKeyDown:N("down"),onKeyUp:N("up"),onPaste:Y,children:[u.jsx("canvas",{ref:b,className:S("max-h-full max-w-full",f?"block":"hidden",h.controller==="user"&&!h.mine?"cursor-not-allowed":"cursor-default"),onPointerDown:P("down"),onPointerMove:P("move"),onPointerUp:P("up"),onWheel:G,onContextMenu:t=>t.preventDefault()}),!f||d.status!=="open"?u.jsx("div",{className:"absolute inset-0 flex items-center justify-center px-6 text-center text-sm text-muted-foreground",children:r(d.status==="ended"?`contextPanel.surface.ended.${d.reason}`:d.status==="reconnecting"?"contextPanel.surface.status.reconnecting":"contextPanel.surface.status.connecting")}):null]})]})};export{Wt as GuestSurfacePane};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as r,j as s,f as nt}from"./vendor-react-BUCujlKS.js";import{u as x,fD as _,a as jt}from"./index-vQ1Pg1cr.js";import{f as It,N as wt,be as he,dk as Nt,cT as St,t as j,m6 as Pt,I as d,B as ge,o as Ze,cE as $e,an as Qe,cZ as kt,c_ as Lt,c$ as Ct,d0 as Rt,d1 as At,d3 as Xe,h as O,a8 as Ft,aY as Et,aU as Tt,aW as Mt,aX as Kt,aT as Dt}from"./useAppFontEffects-DCqCVGlT.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-client-DHzhmLwV.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.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-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.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-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-Bniqp7p5.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-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";const Je="[&_img]:max-w-full [&_img]:h-auto",at="flex h-8 min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 typography-ui-label font-semibold text-foreground outline-none hover:bg-interactive-hover focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",Fe="flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-foreground outline-none hover:bg-interactive-hover focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",_t=520,et=t=>t.name?.trim()||t.urlKey?.trim()||t.id,Ot={0:"contextPanel.linear.priority.none",1:"contextPanel.linear.priority.urgent",2:"contextPanel.linear.priority.high",3:"contextPanel.linear.priority.medium",4:"contextPanel.linear.priority.low"},zt={triage:0,backlog:1,unstarted:2,started:3,completed:4,canceled:5},tt=t=>t==="triage"||t==="backlog"||t==="unstarted"||t==="started"||t==="completed"||t==="canceled"?zt[t]:99,Ut=(t,n)=>{const o=tt(t.type)-tt(n.type);return o!==0?o:t.position!==n.position?t.position-n.position:t.name.localeCompare(n.name)},Wt=t=>t!==0&&t!==1&&t!==2&&t!==3&&t!==4?null:Ot[t],ye=[{value:"all",labelKey:"contextPanel.linear.filter.status.all"},{value:"backlog",labelKey:"contextPanel.linear.filter.status.backlog"},{value:"todo",labelKey:"contextPanel.linear.filter.status.todo"},{value:"started",labelKey:"contextPanel.linear.filter.status.started"},{value:"inReview",labelKey:"contextPanel.linear.filter.status.inReview"},{value:"completed",labelKey:"contextPanel.linear.filter.status.completed"},{value:"canceled",labelKey:"contextPanel.linear.filter.status.canceled"},{value:"duplicate",labelKey:"contextPanel.linear.filter.status.duplicate"}],Vt=t=>ye.some(n=>n.value===t),be=[{value:"all",labelKey:"contextPanel.linear.filter.priority.all"},{value:"urgent",labelKey:"contextPanel.linear.priority.urgent"},{value:"high",labelKey:"contextPanel.linear.priority.high"},{value:"medium",labelKey:"contextPanel.linear.priority.medium"},{value:"low",labelKey:"contextPanel.linear.priority.low"},{value:"none",labelKey:"contextPanel.linear.priority.none"}],Gt=t=>be.some(n=>n.value===t),Ht=t=>t?{color:t,backgroundColor:`color-mix(in srgb, ${t} 18%, transparent)`}:{backgroundColor:"color-mix(in srgb, var(--surface-muted-foreground) 12%, transparent)"},Bt=t=>{const n=nt.c(4),{labels:o}=t;if(o.length===0)return null;let u;n[0]!==o?(u=o.map(Xt),n[0]=o,n[1]=u):u=n[1];let b;return n[2]!==u?(b=s.jsx("div",{className:"flex min-w-0 flex-wrap items-center gap-1",children:u}),n[2]=u,n[3]=b):b=n[3],b},le=t=>{const n=nt.c(31),{icon:o,label:u,ariaLabel:b,value:V,items:G,disabled:I,compact:h,active:P,onValueChange:m}=t,[k,H]=r.useState(!1),B=I?!1:k;let M;n[0]!==I?(M=z=>{I||H(z)},n[0]=I,n[1]=M):M=n[1];const Z=P===!0,L=h?Fe:at,$=h?u:void 0,Q=P?"text-primary":"text-muted-foreground";let C;n[2]!==Q?(C=O("size-3.5 shrink-0",Q),n[2]=Q,n[3]=C):C=n[3];let R;n[4]!==o||n[5]!==C?(R=s.jsx(d,{name:o,className:C}),n[4]=o,n[5]=C,n[6]=R):R=n[6];let g;n[7]!==h||n[8]!==u?(g=h?null:s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"min-w-0 truncate",children:u}),s.jsx(d,{name:"arrow-down-s",className:"size-4 shrink-0 opacity-60"})]}),n[7]=h,n[8]=u,n[9]=g):g=n[9];let A;n[10]!==b||n[11]!==I||n[12]!==Z||n[13]!==L||n[14]!==$||n[15]!==R||n[16]!==g?(A=s.jsx(Tt,{asChild:!0,children:s.jsxs("button",{type:"button",disabled:I,"aria-pressed":Z,className:L,"aria-label":b,title:$,children:[R,g]})}),n[10]=b,n[11]=I,n[12]=Z,n[13]=L,n[14]=$,n[15]=R,n[16]=g,n[17]=A):A=n[17];let w;n[18]!==m?(w=z=>{m(z),H(!1)},n[18]=m,n[19]=w):w=n[19];let F;n[20]!==G?(F=G.map(Jt),n[20]=G,n[21]=F):F=n[21];let N;n[22]!==w||n[23]!==F||n[24]!==V?(N=s.jsx(Mt,{align:"start",className:"min-w-40",children:s.jsx(Kt,{value:V,onValueChange:w,children:F})}),n[22]=w,n[23]=F,n[24]=V,n[25]=N):N=n[25];let v;return n[26]!==B||n[27]!==A||n[28]!==N||n[29]!==M?(v=s.jsxs(Dt,{open:B,onOpenChange:M,children:[A,N]}),n[26]=B,n[27]=A,n[28]=N,n[29]=M,n[30]=v):v=n[30],v},qt=t=>{const n=t.trim();if(!n)return null;const o=n.match(/linear\.app\/(?:[^/]+\/)?issue\/([A-Za-z][A-Za-z0-9]*-\d+)/i);return o?o[1].toUpperCase():/^[A-Za-z][A-Za-z0-9]*-\d+$/.test(n)?n.toUpperCase():null},Yt=t=>({id:t.id,identifier:t.identifier,title:t.title,url:t.url,state:t.state,assignee:t.assignee,team:t.team,priority:t.priority,labels:t.labels}),st=(t,n)=>{const o=Yt(n);return t.map(u=>u.id===n.id?o:u)},Zt=6e4,$t=20,T=new Map,Qt=(t,n)=>{for(T.delete(t),T.set(t,{...n,readAt:Date.now()});T.size>$t;)T.delete(T.keys().next().value??"")},kn=()=>{const{t}=It(),{linear:n}=wt(),o=he(e=>e.status),u=he(e=>e.hasChecked),b=he(e=>e.refreshStatus),V=he(e=>e.setStatus),G=x(e=>e.setSettingsDialogOpen),I=x(e=>e.setSettingsPage),h=x(e=>e.linearIssueListStatus),P=x(e=>e.linearIssueListAssignee),m=x(e=>e.linearIssueListTeamId),k=x(e=>e.linearIssueListPriority),H=x(e=>e.linearIssueFocus),B=x(e=>e.timeFormatPreference),M=x(e=>e.setLinearIssueListStatus),Z=x(e=>e.setLinearIssueListAssignee),L=x(e=>e.setLinearIssueListTeamId),$=x(e=>e.setLinearIssueListPriority),Q=x(e=>e.resetLinearIssueListFilters),C=x(e=>e.setLinearIssueFocus),R=x(e=>e.applyLinearIssueListFiltersForRuntime);r.useEffect(()=>{R()},[R]);const[g,A]=r.useState(""),[w,F]=r.useState(!1),[N,v]=r.useState([]),[z,X]=r.useState(null),[ve,J]=r.useState(!1),[U,K]=r.useState(!0),[ie,Ee]=r.useState(!1),[ee,Te]=r.useState(!1),[Me,te]=r.useState(null),[se,D]=r.useState(null),[i,ne]=r.useState(null),[W,oe]=r.useState([]),[rt,Ke]=r.useState(!1),[q,De]=r.useState(!1),[ce,_e]=r.useState(!1),[ue,je]=r.useState(!1),[Y,de]=r.useState([]),[me,Oe]=r.useState(!1),S=r.useRef(0),Ie=r.useRef(null),ze=r.useRef(null),[Ue,lt]=r.useState(0),pe=r.useMemo(()=>qt(g),[g]),we=Nt(g,350),it=r.useCallback(e=>{if(!e)return"";const a=Date.parse(e);return Number.isFinite(a)?St(a,B,{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}):""},[B]),ot=r.useCallback(()=>{I("integrations"),G(!0)},[G,I]),ae=r.useMemo(()=>({query:we.trim()||void 0,status:h,assignee:P,teamId:m===_?void 0:m,priority:k==="all"?void 0:k}),[we,P,k,h,m]),fe=o?.workspaces??[],E=fe.find(e=>e.current)?.id||o?.organization?.id||"",We=r.useCallback(async()=>{if(u&&o?.connected===!1){K(!1),v([]),J(!1),X(null),te(null);return}if(!n?.issuesList){K(!0),te(t("session.linearIssuePicker.error.runtimeUnavailable"));return}const e=JSON.stringify([jt(),E,ae]),a=T.get(e);if(a&&(K(!0),v(a.issues),X(a.cursor),J(a.hasMore),te(null),Date.now()-a.readAt<Zt))return;const l=S.current+1;S.current=l,a||Ee(!0),te(null);try{const c=await n.issuesList(ae);if(l!==S.current)return;if(K(c.connected!==!1),c.connected===!1){T.delete(e),v([]),J(!1),X(null);return}Qt(e,{issues:c.issues??[],cursor:c.cursor??null,hasMore:!!c.hasMore}),v(c.issues??[]),X(c.cursor??null),J(!!c.hasMore)}catch(c){if(l!==S.current)return;te(c instanceof Error?c.message:String(c))}finally{l===S.current&&Ee(!1)}},[E,n,u,o,ae,t]);r.useEffect(()=>{n&&!u&&b(n)},[n,u,b]),r.useEffect(()=>{We()},[We]),r.useEffect(()=>{if(!n?.mappingGet||!U){de([]);return}let e=!1;return n.mappingGet().then(a=>{if(!e){if(a.connected===!1){de([]);return}de(a.teams??[])}}).catch(()=>{e||de([])}),()=>{e=!0}},[U,E,n]),r.useEffect(()=>{m===_||Y.length===0||Y.some(e=>e.id===m)||L(_)},[m,L,Y]);const ct=r.useCallback(async()=>{if(!n?.issuesList||ee||ie||!ve||!z)return;const e=S.current+1;S.current=e,Te(!0);try{const a=await n.issuesList({...ae,cursor:z});if(e!==S.current||(K(a.connected!==!1),a.connected===!1))return;v(l=>[...l,...a.issues??[]]),X(a.cursor??null),J(!!a.hasMore)}catch(a){if(e!==S.current)return;const l=a instanceof Error?a.message:String(a);j.error(t("session.linearIssuePicker.toast.loadMoreFailed"),{description:l})}finally{e===S.current&&Te(!1)}},[z,ve,ie,ee,n,ae,t]);r.useEffect(()=>{if(!se||!n?.issueGet)return;let e=!1;return Ke(!0),ne(null),oe([]),(async()=>{try{const a=await n.issueGet(se);if(e)return;if(a.connected===!1){K(!1),D(null);return}const l=a.issue;if(!l){j.error(t("session.linearIssuePicker.error.issueNotFound")),D(null);return}ne(l);const c=l.team?.id;if(!c||!n.issueStates)return;try{const y=await n.issueStates(c);if(e)return;if(y.connected===!1){K(!1);return}oe(y.states??[])}catch(y){if(e)return;const xe=y instanceof Error?y.message:String(y);j.error(t("session.linearIssuePicker.toast.loadIssueDetailsFailed"),{description:xe})}}catch(a){if(e)return;const l=a instanceof Error?a.message:String(a);j.error(t("session.linearIssuePicker.toast.loadIssueDetailsFailed"),{description:l}),D(null)}finally{e||Ke(!1)}})(),()=>{e=!0}},[n,se,t]),r.useEffect(()=>{H&&(D(H),C(null))},[H,C]);const Ve=r.useCallback(e=>{ne(e),v(a=>st(a,e));for(const[a,l]of T)T.set(a,{...l,issues:st(l.issues,e)})},[]),Ne=r.useCallback(async(e,a)=>{if(!(!n?.issueUpdate||!i||q)&&i.state?.id!==e){De(!0);try{const l=await n.issueUpdate({id:i.id,stateId:e});if(l.connected===!1){K(!1),j.error(t(a));return}if(!l.issue){j.error(t(a));return}Ve(l.issue),j.success(t("contextPanel.linear.toast.statusUpdated"))}catch(l){const c=l instanceof Error?l.message:String(l);j.error(t(a),{description:c})}finally{De(!1)}}},[Ve,q,n,i,t]),ut=r.useCallback(()=>{const e=W.find(a=>a.type==="completed");if(!e){j.error(t("contextPanel.linear.error.noCompletedState"));return}Ne(e.id,"contextPanel.linear.toast.closeFailed")},[t,Ne,W]),dt=r.useCallback(async()=>{if(!(!i||ce)){_e(!0);try{await Pt({linear:n,issueKey:i.id,createInWorktree:ue,t})}finally{_e(!1)}}},[ue,ce,n,i,t]),mt=r.useCallback(async e=>{if(!(!n?.authActivate||!e||e===E||me)){Oe(!0);try{const a=await n.authActivate(e);V(a),D(null),ne(null),oe([]),L(_),j.success(t("contextPanel.linear.toast.workspaceSwitched"))}catch(a){const l=a instanceof Error?a.message:String(a);j.error(t("contextPanel.linear.toast.workspaceSwitchFailed"),{description:l})}finally{Oe(!1)}}},[E,me,n,V,L,t]),Se=r.useMemo(()=>{const e=new Map(W.map(y=>[y.id,y])),a=i?.state?.id,l=i?.state?.name;return[...a&&l&&!e.has(a)?[{id:a,name:l,type:i.state?.type??null,position:0},...W]:W].sort(Ut)},[i,W]),pt=W.find(e=>e.type==="completed"),ft=i?.state?.type==="completed",Ge=u&&U===!1,xt=!n,He=!!se,Be=h==="all"&&P==="any"&&m===_&&k==="all",Pe=!!n&&U&&!Ge,re=!Pe||me,p=Ue>0&&Ue<_t,ke=g.trim().length>0,ht=!Be||ke,Le=!p||w||ke,Ce=r.useCallback(()=>{A(""),F(!1)},[]);r.useEffect(()=>{const e=Ie.current;if(!e||!globalThis.ResizeObserver)return;const a=new ResizeObserver(l=>{lt(l[0]?.contentRect.width??0)});return a.observe(e),()=>a.disconnect()},[He]),r.useEffect(()=>{p&&w&&ze.current?.focus()},[p,w]);const gt=s.jsxs("div",{className:"flex items-center gap-2 cursor-pointer",role:"button",tabIndex:0,"aria-pressed":ue,onClick:()=>je(e=>!e),onKeyDown:e=>{(e.key===" "||e.key==="Enter")&&(e.preventDefault(),je(a=>!a))},children:[s.jsx("button",{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),je(a=>!a)},"aria-label":t("session.linearIssuePicker.actions.toggleWorktreeAria"),className:"flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:ue?s.jsx(d,{name:"checkbox",className:"h-4 w-4 text-primary"}):s.jsx(d,{name:"checkbox-blank",className:"h-4 w-4"})}),s.jsx("span",{className:"typography-meta text-muted-foreground",children:t("session.linearIssuePicker.actions.createInWorktree")})]}),yt=e=>s.jsxs("div",{className:O("group flex items-center gap-2 py-1.5 px-1 rounded cursor-pointer hover:bg-interactive-hover/30 transition-colors",se===e.id&&"bg-interactive-selection/30"),onClick:()=>D(e.id),children:[s.jsx("span",{className:"typography-meta text-muted-foreground w-16 text-right flex-shrink-0",children:e.identifier}),s.jsx("p",{className:"flex-1 min-w-0 typography-small text-foreground truncate ml-0.5",children:e.title}),s.jsx("div",{className:"flex-shrink-0 h-5 flex items-center mr-1",children:s.jsx("button",{type:"button",className:"hidden group-hover:flex h-5 w-5 items-center justify-center text-muted-foreground hover:text-foreground transition-colors",onClick:a=>{a.stopPropagation(),Ze(e.url)},"aria-label":t("session.linearIssuePicker.actions.openInLinearAria"),children:s.jsx(d,{name:"external-link",className:"h-4 w-4"})})})]},e.id);if(He){const e=i?.assignee?.displayName||i?.assignee?.name,a=i?.comments??[],l=i?.description?.trim()||"",c=i?.state?.id||"",y=Wt(i?.priority),xe=i?.labels??[];return s.jsxs("div",{ref:Ie,className:"flex h-full min-h-0 flex-col",children:[s.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[s.jsxs(ge,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2",onClick:()=>{D(null),ne(null),oe([])},"aria-label":t("contextPanel.linear.actions.backToList"),children:[s.jsx(d,{name:"arrow-left-s",className:"h-4 w-4"}),t("contextPanel.linear.actions.backToList")]}),i?s.jsx("button",{type:"button",className:"ml-auto flex h-7 w-7 items-center justify-center text-muted-foreground hover:text-foreground",onClick:()=>{Ze(i.url)},"aria-label":t("session.linearIssuePicker.actions.openInLinearAria"),children:s.jsx(d,{name:"external-link",className:"h-4 w-4"})}):null]}),s.jsxs($e,{as:Qe,outerClassName:"h-full min-h-0 flex-1",className:"px-4 py-3",disableHorizontal:!0,preventOverscroll:!0,children:[rt&&!i?s.jsxs("div",{className:"flex items-center justify-center gap-2 py-8 text-muted-foreground",children:[s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}),t("contextPanel.linear.loading.issue")]}):null,i?s.jsx(r.Suspense,{fallback:s.jsxs("div",{className:"flex items-center justify-center gap-2 py-8 text-muted-foreground",children:[s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}),t("contextPanel.linear.loading.issue")]}),children:s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("div",{className:"typography-meta text-muted-foreground",children:i.identifier}),s.jsx("h2",{className:"typography-ui-header text-foreground mt-0.5",children:i.title})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[Se.length>0&&c?s.jsxs(kt,{value:c,onValueChange:f=>{Ne(f,"contextPanel.linear.toast.statusUpdateFailed")},disabled:q,children:[s.jsx(Lt,{size:"sm",className:"h-7 w-auto min-w-0","aria-label":t("contextPanel.linear.label.statusAria"),children:s.jsx(Ct,{placeholder:t("contextPanel.linear.label.status"),children:f=>Se.find(Re=>Re.id===f)?.name??f})}),s.jsx(Rt,{children:Se.map(f=>s.jsx(At,{value:f.id,children:f.name},f.id))})]}):i.state?.name?s.jsx("span",{className:"typography-meta text-muted-foreground",children:i.state.name}):null,pt&&!ft?s.jsxs(ge,{type:"button",variant:"outline",size:"sm",className:"h-7",onClick:ut,disabled:q,children:[q?s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}):null,t("contextPanel.linear.actions.closeIssue")]}):null]}),s.jsxs("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 typography-meta",children:[i.team?.name?s.jsxs(s.Fragment,{children:[s.jsx("dt",{className:"text-muted-foreground",children:t("contextPanel.linear.label.team")}),s.jsx("dd",{className:"text-foreground min-w-0 truncate",children:i.team.name})]}):null,s.jsx("dt",{className:"text-muted-foreground",children:t("contextPanel.linear.label.assignee")}),s.jsx("dd",{className:"text-foreground min-w-0 truncate",children:e||t("contextPanel.linear.label.unassigned")}),y?s.jsxs(s.Fragment,{children:[s.jsx("dt",{className:"text-muted-foreground",children:t("contextPanel.linear.label.priority")}),s.jsx("dd",{className:"text-foreground min-w-0 truncate",children:t(y)})]}):null,xe.length>0?s.jsxs(s.Fragment,{children:[s.jsx("dt",{className:"text-muted-foreground",children:t("contextPanel.linear.label.labels")}),s.jsx("dd",{className:"min-w-0",children:s.jsx(Bt,{labels:xe})})]}):null]}),s.jsx("div",{children:l?s.jsx(Xe,{content:l,className:Je,enableFileReferences:!1,allowRawHtml:!0}):s.jsx("p",{className:"typography-meta text-muted-foreground",children:t("contextPanel.linear.empty.noDescription")})}),s.jsxs("div",{children:[s.jsx("h3",{className:"typography-ui-label text-foreground mb-2",children:t("contextPanel.linear.label.comments")}),a.length===0?s.jsx("p",{className:"typography-meta text-muted-foreground",children:t("contextPanel.linear.empty.noComments")}):s.jsx("div",{className:"relative pl-3",children:a.map((f,Re)=>{const Ae=f.user?.displayName||f.user?.name||t("contextPanel.linear.label.unassigned"),qe=f.user?.avatarUrl||null,bt=Ae.charAt(0).toUpperCase(),vt=Re===a.length-1,Ye=it(f.createdAt);return s.jsxs("div",{className:"relative pl-10 pb-5 last:pb-0",children:[vt?null:s.jsx("div",{className:"absolute left-4 top-[2.375rem] bottom-[0.375rem] w-px bg-border/60"}),s.jsx("div",{className:"absolute left-0 top-0 z-10 flex size-8 items-center justify-center overflow-hidden rounded-full border border-border/60 bg-surface-elevated text-xs text-muted-foreground",children:qe?s.jsx("img",{src:qe,alt:Ae,className:"h-full w-full object-cover",loading:"lazy",referrerPolicy:"no-referrer"}):s.jsx("span",{children:bt})}),s.jsxs("div",{className:"rounded-lg bg-surface-elevated px-3 pt-0 pb-3 space-y-2",children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 typography-micro text-muted-foreground",children:[s.jsx("span",{className:"text-foreground whitespace-nowrap",children:Ae}),Ye?s.jsx("span",{className:"whitespace-nowrap",children:Ye}):null]}),f.body.trim()?s.jsx(Xe,{content:f.body,className:O("typography-markdown-body text-foreground break-words",Je),enableFileReferences:!1,allowRawHtml:!0}):null]})]},f.id)})})]})]})}):null]}),i?s.jsxs("div",{className:"shrink-0 border-t border-border px-4 py-3 flex flex-col gap-3",children:[gt,s.jsxs(ge,{type:"button",onClick:()=>{dt()},disabled:ce||q,className:"w-full",children:[ce?s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}):null,t("contextPanel.linear.actions.startSession")]})]}):null]})}return s.jsxs("div",{ref:Ie,className:"flex h-full min-h-0 flex-col",children:[s.jsxs("div",{className:"px-3 pt-3 space-y-2",children:[Le?s.jsxs("div",{className:"relative",children:[s.jsx(d,{name:"search",className:O("absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4",ke?"text-primary":"text-muted-foreground")}),s.jsx(Ft,{ref:ze,placeholder:t("session.linearIssuePicker.searchPlaceholder"),value:g,onChange:e=>A(e.target.value),onKeyDown:e=>{e.key==="Escape"&&p&&(e.preventDefault(),Ce())},className:O("pl-9 w-full",p&&"pr-9")}),p?s.jsx("button",{type:"button",className:"absolute right-1.5 top-1/2 flex h-7 w-7 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-interactive-hover hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring","aria-label":t("contextPanel.linear.actions.closeSearch"),title:t("contextPanel.linear.actions.closeSearch"),onClick:Ce,children:s.jsx(d,{name:"close",className:"size-3.5"})}):null]}):null,Pe||p&&!Le?s.jsxs("div",{className:O("flex min-w-0 items-center",p&&"gap-0.5"),children:[Pe?s.jsxs(s.Fragment,{children:[s.jsx(le,{icon:"task",label:t((ye.find(e=>e.value===h)??ye[0]).labelKey),ariaLabel:t("contextPanel.linear.filter.statusAria"),value:h,active:h!=="all",disabled:re,items:ye.map(e=>({value:e.value,label:t(e.labelKey)})),onValueChange:e=>{Vt(e)&&M(e)}}),s.jsx(le,{icon:"error-warning",compact:p,label:t((be.find(e=>e.value===k)??be[0]).labelKey),ariaLabel:t("contextPanel.linear.filter.priorityAria"),value:k,active:k!=="all",disabled:re,items:be.map(e=>({value:e.value,label:t(e.labelKey)})),onValueChange:e=>{Gt(e)&&$(e)}}),s.jsx(le,{icon:"user-3",compact:p,label:t(P==="me"?"contextPanel.linear.filter.assignee.me":"contextPanel.linear.filter.assignee.any"),ariaLabel:t("contextPanel.linear.filter.assigneeAria"),value:P,active:P!=="any",disabled:re,items:[{value:"any",label:t("contextPanel.linear.filter.assignee.any")},{value:"me",label:t("contextPanel.linear.filter.assignee.me")}],onValueChange:e=>{(e==="any"||e==="me")&&Z(e)}}),Y.length>0?s.jsx(le,{icon:"team",compact:p,label:m===_?t("contextPanel.linear.filter.team.all"):Y.find(e=>e.id===m)?.name??m,ariaLabel:t("contextPanel.linear.filter.teamAria"),value:m,active:m!==_,disabled:re,items:[{value:_,label:t("contextPanel.linear.filter.team.all")},...Y.map(e=>({value:e.id,label:e.name}))],onValueChange:L}):null,fe.length>1&&E?s.jsx(le,{icon:"briefcase",compact:p,label:et(fe.find(e=>e.id===E)??{id:E,name:null,urlKey:null}),ariaLabel:t("contextPanel.linear.label.workspaceAria"),value:E,disabled:me,items:fe.map(e=>({value:e.id,label:et(e)})),onValueChange:e=>{mt(e)}}):null,ht?s.jsxs("button",{type:"button",className:O(p?Fe:at,!p&&"flex-none"),"aria-label":t("contextPanel.linear.filter.clearAria"),title:t("contextPanel.linear.filter.clearAria"),disabled:re,onClick:()=>{Q(),Ce()},children:[s.jsx(d,{name:"close",className:"size-3.5 shrink-0 text-muted-foreground"}),p?null:s.jsx("span",{className:"min-w-0 truncate",children:t("contextPanel.linear.filter.clear")})]}):null]}):null,p&&!Le?s.jsx("button",{type:"button",className:Fe,"aria-label":t("contextPanel.linear.filter.searchAria"),title:t("contextPanel.linear.filter.searchAria"),onClick:()=>F(!0),children:s.jsx(d,{name:"search",className:"size-3.5 shrink-0 text-muted-foreground"})}):null]}):null]}),s.jsxs($e,{as:Qe,outerClassName:"h-full min-h-0 flex-1",className:"px-3 py-2",disableHorizontal:!0,preventOverscroll:!0,children:[xt?s.jsx("div",{className:"text-center text-muted-foreground py-8",children:t("session.linearIssuePicker.empty.runtimeUnavailable")}):null,ie&&N.length===0?s.jsxs("div",{className:"text-center text-muted-foreground py-8 flex items-center justify-center gap-2",children:[s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}),t("session.linearIssuePicker.loading.issues")]}):null,Ge?s.jsxs("div",{className:"text-center text-muted-foreground py-8 space-y-3",children:[s.jsx("div",{children:t("session.linearIssuePicker.empty.notConnected")}),s.jsx("div",{className:"flex justify-center",children:s.jsx(ge,{variant:"outline",size:"sm",onClick:ot,children:t("session.linearIssuePicker.actions.openSettings")})})]}):null,Me?s.jsx("div",{className:"text-center text-muted-foreground py-8 break-words",children:Me}):null,pe&&n&&U?s.jsxs("div",{className:"group flex items-center gap-2 py-1.5 px-1 hover:bg-interactive-hover/30 rounded transition-colors cursor-pointer",onClick:()=>D(pe),children:[s.jsx("span",{className:"typography-meta text-muted-foreground w-16 text-right flex-shrink-0",children:pe}),s.jsx("p",{className:"flex-1 min-w-0 typography-small text-foreground truncate ml-0.5",children:t("session.linearIssuePicker.actions.useIssue",{identifier:pe})})]}):null,N.length===0&&!ie&&U&&n?s.jsx("div",{className:"text-center text-muted-foreground py-8",children:we.trim()?t("session.linearIssuePicker.empty.noIssuesFound"):t(Be?"session.linearIssuePicker.empty.noOpenIssuesFound":"contextPanel.linear.empty.noMatchingIssues")}):null,N.map(yt),ve&&U&&n?s.jsx("div",{className:"py-2 flex justify-center",children:s.jsx("button",{type:"button",onClick:()=>{ct()},disabled:ee,className:O("typography-meta text-muted-foreground hover:text-foreground transition-colors underline underline-offset-4",ee&&"opacity-50 cursor-not-allowed hover:text-muted-foreground"),children:ee?s.jsxs("span",{className:"inline-flex items-center gap-2",children:[s.jsx(d,{name:"loader-4",className:"h-4 w-4 animate-spin"}),t("session.linearIssuePicker.loading.more")]}):t("session.linearIssuePicker.actions.loadMore")})}):null]})]})};function Xt(t){return s.jsx("span",{className:"inline-flex h-5 max-w-[8rem] items-center truncate rounded-md px-1.5 typography-meta text-muted-foreground",style:Ht(t.color),children:t.name},t.id)}function Jt(t){return s.jsx(Et,{value:t.value,children:t.label},t.value)}export{kn as LinearIssuesView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as B,R as h,j as P}from"./vendor-react-BUCujlKS.js";import{toast as H}from"./vendor-sonner-DFyL3AvE.js";import{iv as K,dd as J,aA as Z,f as Q,I as W}from"./useAppFontEffects-DCqCVGlT.js";import{h as G,ap as Y,fy as ee,T as te,e as re,fz as oe,fA as ae,bc as se}from"./index-vQ1Pg1cr.js";import{extractMarkdownImageCandidates as ne,isRemoteMarkdownImageSource as ie,MAX_MARKDOWN_IMAGE_COUNT as le}from"./markdownCore-BPEZRQfP.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.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-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.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-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-Bniqp7p5.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-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-opencode-client-DHzhmLwV.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-DcBOpbSu.js";import"./vendor-katex-CHD9BdDO.js";import"./vendor-dompurify-r8glNMJW.js";const L=10*1024*1024,ce=1024,me=3e4,ue=new Set(["image/png","image/jpeg","image/gif","image/webp"]),z=new WeakMap,$=r=>{if(r.aborted)throw new DOMException("Image load aborted","AbortError")},pe=r=>{let e=r;if(/^file:\/\//i.test(e))try{const o=new URL(e);if(o.protocol!=="file:")return"";e=o.host&&o.host!=="localhost"?`//${o.host}${o.pathname}`:o.pathname,/^\/[A-Za-z]:\//.test(e)&&(e=e.slice(1))}catch{return""}const t=e.split(/[?#]/,1)[0]??"";try{return decodeURIComponent(t)}catch{return t}},fe=r=>new Promise((e,t)=>{const o=new FileReader;o.onload=()=>{typeof o.result=="string"?e(o.result):t(new Error("Unable to encode image"))},o.onerror=()=>t(o.error??new Error("Unable to encode image")),o.readAsDataURL(r)}),de=async(r,e)=>{const t=new Uint8Array(await r.slice(0,12).arrayBuffer()),o=(n,u)=>String.fromCharCode(...t.slice(n,u));switch(e){case"image/png":return t[0]===137&&o(1,4)==="PNG"&&t[4]===13&&t[5]===10&&t[6]===26&&t[7]===10;case"image/jpeg":return t[0]===255&&t[1]===216&&t[2]===255;case"image/gif":{const n=o(0,6);return n==="GIF87a"||n==="GIF89a"}case"image/webp":return o(0,4)==="RIFF"&&o(8,12)==="WEBP";default:return!1}},V=async(r,e)=>{if(!ue.has(e))throw new Error("Unsupported image type");if(r.size>L)throw new Error("Image is too large");if(!await de(r,e))throw new Error("Unsupported image data")},ge=async r=>{const e=/^data:(image\/(?:png|jpeg|gif|webp));base64,([\s\S]*)$/i.exec(r);if(!e?.[1]||e[2]===void 0)throw new Error("Invalid image data URL");if(e[2].length>Math.ceil(L*4/3)+4)throw new Error("Image is too large");let t;try{t=atob(e[2])}catch{throw new Error("Invalid image data URL")}const o=Uint8Array.from(t,n=>n.charCodeAt(0));await V(new Blob([o]),e[1].toLowerCase())},q=r=>!/^(?:https?:)?\/\//i.test(r)&&!/^data:image\/(?:png|jpeg|gif|webp);base64,/i.test(r),he=async({sources:r,directory:e,sessionId:t,messageId:o,signal:n})=>{const u=Y();let s=z.get(u);s||(s=new Map,z.set(u,s));const c=`${t}\0${o}\0${e}\0${r.join("\0")}`,i=s.get(c);if(i&&i.expiresAt>Date.now())return s.delete(c),s.set(c,i),i.result;i&&s.delete(c);const p=await G(`/api/openchamber/sessions/${encodeURIComponent(t)}/markdown-image-grants`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({directory:e,messageId:o,sources:r}),directory:e,signal:n});if(!p.ok)throw new Error(`Unable to prepare images (${p.status})`);const m=await p.json(),l=new Map;for(const a of m.results??[])a.source&&(a.status==="ready"&&a.path?l.set(a.source,{status:"ready",path:a.path,outsideFileGrant:a.outsideFileGrant,expiresAt:a.expiresAt}):a.status==="missing"?l.set(a.source,{status:"missing"}):l.set(a.source,{status:"error"}));for(const a of r)l.has(a)||l.set(a,{status:"error"});for(;s.size>=ce;)s.delete(s.keys().next().value);const w=[...l.values()].every(a=>a.status==="ready"),y=Math.min(...[...l.values()].filter(a=>a.status==="ready").map(a=>a.expiresAt??Number.POSITIVE_INFINITY));return s.set(c,{result:l,expiresAt:w?y:Date.now()+me}),l},we=async(r,e)=>{if($(e),/^(?:https?:)?\/\//i.test(r))return r;if(/^data:image\/(?:png|jpeg|gif|webp);base64,/i.test(r))return await ge(r),$(e),r;throw new Error("Local image has not been prepared")},be=async(r,e,t)=>{$(t);const o=pe(r),n=K(e,o);if(!e||!o||!J(n,e))throw new Error("Image path is outside the active workspace");const u=await G("/api/fs/stat",{query:{path:n,directory:e,optional:"true"},signal:t});if(!u.ok)throw new Error(`Unable to inspect image (${u.status})`);const s=await u.json();if(!s.isFile)throw new Error("Image path is not a file");if(typeof s.size=="number"&&s.size>L)throw new Error("Image is too large");const c=await G("/api/fs/raw",{query:{path:n,directory:e},signal:t});if(!c.ok)throw new Error(`Unable to load image (${c.status})`);const i=(c.headers.get("content-type")??"").split(";",1)[0]?.toLowerCase()??"",p=Number(c.headers.get("content-length"));if(Number.isFinite(p)&&p>L)throw new Error("Image is too large");const m=await c.blob();return await V(m,i),$(t),fe(m)},ye=(r,e)=>Y().authenticatedAsset(ee("/api/fs/raw",e),{path:r.path,directory:e,allowOutsideWorkspace:r.outsideFileGrant?"true":void 0,outsideFileGrant:r.outsideFileGrant}),Ie=r=>{const e=B.c(7),[t,o]=h.useState(!1),[n,u]=h.useState(0);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=re(),e[0]=s):s=e[0];const c=s;let i,p;e[1]!==r?(i=()=>{if(!r){o(!1);return}let w=!1,y;const a=oe(c),g=ae(()=>{w||u(Ae)}),I=()=>{se(c).then(()=>{w||o(!0)}).catch(()=>{w||(y=setTimeout(I,1e3))})};return I(),()=>{w=!0,y&&clearTimeout(y),a(),g()}},p=[c,r],e[1]=r,e[2]=i,e[3]=p):(i=e[2],p=e[3]),h.useEffect(i,p);const m=!r||t;let l;return e[4]!==n||e[5]!==m?(l={ready:m,nonce:n},e[4]=n,e[5]=m,e[6]=l):l=e[6],l},Ee=r=>{const e=B.c(46),{candidate:t,preparation:o,directory:n,assetAuthReady:u,assetAuthNonce:s,useWorkspaceFsBridge:c,onShowPopup:i}=r,{t:p}=Q(),m=h.useRef(null),[l,w]=h.useState(!1);let y;e[0]===Symbol.for("react.memo_cache_sentinel")?(y={url:"",status:"loading"},e[0]=y):y=e[0];const[a,g]=h.useState(y);let I;e[1]!==t.source?(I=q(t.source),e[1]=t.source,e[2]=I):I=e[2];const b=I;let v,f;e[3]!==l?(v=()=>{const N=m.current;if(!N||l)return;if(typeof IntersectionObserver>"u"){w(!0);return}const E=new IntersectionObserver(C=>{C.some(ve)&&(w(!0),E.disconnect())},{rootMargin:"200px"});return E.observe(N),()=>E.disconnect()},f=[l],e[3]=l,e[4]=v,e[5]=f):(v=e[4],f=e[5]),h.useEffect(v,f);let x;e[6]!==u||e[7]!==t.source||e[8]!==n||e[9]!==b||e[10]!==o||e[11]!==l||e[12]!==c?(x=()=>{if(!l||b&&!c&&!o)return;if(b&&c){const E=new AbortController;return g({url:"",status:"loading"}),be(t.source,n,E.signal).then(C=>{E.signal.aborted||g({url:C,status:"loading"})}).catch(()=>{E.signal.aborted||g({url:"",status:"error"})}),()=>E.abort()}if(b){if(o?.status!=="ready"){g({url:"",status:"error"});return}if(!u)return;g({url:ye(o,n),status:"loading"});return}const N=new AbortController;return g({url:"",status:"loading"}),we(t.source,N.signal).then(E=>{N.signal.aborted||g({url:E,status:"loading"})}).catch(()=>{N.signal.aborted||g({url:"",status:"error"})}),()=>N.abort()},e[6]=u,e[7]=t.source,e[8]=n,e[9]=b,e[10]=o,e[11]=l,e[12]=c,e[13]=x):x=e[13];let k;e[14]!==s||e[15]!==u||e[16]!==t.source||e[17]!==n||e[18]!==b||e[19]!==o||e[20]!==l||e[21]!==c?(k=[s,u,t.source,n,b,o,l,c],e[14]=s,e[15]=u,e[16]=t.source,e[17]=n,e[18]=b,e[19]=o,e[20]=l,e[21]=c,e[22]=k):k=e[22],h.useEffect(x,k);let R;e[23]!==t.filename||e[24]!==a.status||e[25]!==a.url||e[26]!==i||e[27]!==p?(R=()=>{if(a.status==="error"){H.error(p("filesView.error.previewUnavailable"));return}a.status!=="ready"||!i||i({open:!0,title:t.filename,content:"",metadata:{tool:"markdown-image-preview",filename:t.filename},image:{url:a.url,filename:t.filename}})},e[23]=t.filename,e[24]=a.status,e[25]=a.url,e[26]=i,e[27]=p,e[28]=R):R=e[28];const U=R,j=a.status==="loading";let A;e[29]!==t.filename||e[30]!==a.status||e[31]!==a.url?(A=P.jsx("span",{className:"flex h-[72px] w-[100px] items-center justify-center overflow-hidden rounded-lg border border-border/40 bg-muted/10",children:a.url&&a.status!=="error"?P.jsx("img",{src:a.url,alt:t.filename,className:"h-full w-full object-contain",loading:"lazy",decoding:"async",referrerPolicy:"no-referrer",onLoad:()=>g(xe),onError:()=>g({url:"",status:"error"}),"data-openchamber-markdown-image":"true","data-openchamber-markdown-image-thumbnail":"true","data-openchamber-markdown-image-state":a.status}):P.jsx(W,{name:"file-image",className:"h-5 w-5 text-muted-foreground"})}),e[29]=t.filename,e[30]=a.status,e[31]=a.url,e[32]=A):A=e[32];let _;e[33]===Symbol.for("react.memo_cache_sentinel")?(_=P.jsx(W,{name:"file-image",className:"h-3 w-3 shrink-0"}),e[33]=_):_=e[33];let S;e[34]!==t.filename?(S=P.jsx("span",{className:"min-w-0 truncate typography-meta",children:t.filename}),e[34]=t.filename,e[35]=S):S=e[35];let T;e[36]!==t.filename||e[37]!==S?(T=P.jsxs("span",{className:"mt-1 flex w-[100px] items-center justify-center gap-1 text-muted-foreground",title:t.filename,"data-openchamber-markdown-image-caption":"true",children:[_,S]}),e[36]=t.filename,e[37]=S,e[38]=T):T=e[38];let M;return e[39]!==t.filename||e[40]!==t.source||e[41]!==U||e[42]!==T||e[43]!==j||e[44]!==A?(M=P.jsxs("button",{ref:m,type:"button",className:"w-[100px] shrink-0 text-left outline-none focus-visible:ring-2 focus-visible:ring-[var(--interactive-focus-ring)]","aria-label":t.filename,disabled:j,onClick:U,"data-openchamber-markdown-image-action":"true","data-openchamber-markdown-image-source":t.source,"data-openchamber-markdown-image-filename":t.filename,children:[A,T]}),e[39]=t.filename,e[40]=t.source,e[41]=U,e[42]=T,e[43]=j,e[44]=A,e[45]=M):M=e[45],M},dr=r=>{const e=B.c(34),{sessionId:t,messageId:o,contents:n,onShowPopup:u}=r,s=Z()??"",c=h.useRef(null),[i,p]=h.useState(!1),[m,l]=h.useState(null),[w,y]=h.useState(0);let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=te(),e[0]=a):a=e[0];const g=a;let I;e[1]!==n?(I=ne(n,le).filter(ke),e[1]=n,e[2]=I):I=e[2];const b=I;let v;e[3]!==b?(v=g?[]:b.filter(Re).map(_e),e[3]=b,e[4]=v):v=e[4];const f=v;let x,k;e[5]!==f.length||e[6]!==i?(x=()=>{if(f.length===0||i)return;const d=c.current;if(!d||typeof IntersectionObserver>"u"){p(!0);return}const F=new IntersectionObserver(X=>{X.some(Se)&&(p(!0),F.disconnect())},{rootMargin:"200px"});return F.observe(d),()=>F.disconnect()},k=[f.length,i],e[5]=f.length,e[6]=i,e[7]=x,e[8]=k):(x=e[7],k=e[8]),h.useEffect(x,k);let R;e[9]!==s||e[10]!==o||e[11]!==f||e[12]!==t||e[13]!==i?(R=()=>{if(!i||!t||f.length===0)return;const d=new AbortController;return he({sources:f,directory:s,sessionId:t,messageId:o,signal:d.signal}).then(F=>{d.signal.aborted||l(F)}).catch(()=>{d.signal.aborted||l(new Map(f.map(Me)))}),()=>d.abort()},e[9]=s,e[10]=o,e[11]=f,e[12]=t,e[13]=i,e[14]=R):R=e[14];let U;e[15]!==s||e[16]!==o||e[17]!==w||e[18]!==f||e[19]!==t||e[20]!==i?(U=[s,o,w,f,t,i],e[15]=s,e[16]=o,e[17]=w,e[18]=f,e[19]=t,e[20]=i,e[21]=U):U=e[21],h.useEffect(R,U);let j,A;e[22]!==m?(j=()=>{const d=Math.min(...[...m?.values()??[]].filter(Ne).map(Pe));if(!Number.isFinite(d))return;const F=setTimeout(()=>y(Ue),Math.max(0,d-Date.now()));return()=>clearTimeout(F)},A=[m],e[22]=m,e[23]=j,e[24]=A):(j=e[23],A=e[24]),h.useEffect(j,A);let _;e[25]!==m?(_=d=>m?.get(d.source)?.status!=="missing",e[25]=m,e[26]=_):_=e[26];const S=b.filter(_),T=[...m?.values()??[]].some(je),M=Ie(T);if(S.length===0)return null;const N="mt-3 flex max-w-full gap-2 overflow-x-auto pb-1",E="true";let C;e[27]!==M||e[28]!==s||e[29]!==u||e[30]!==m?(C=d=>P.jsx(Ee,{candidate:d,preparation:m?.get(d.source),directory:s,assetAuthReady:M.ready,assetAuthNonce:M.nonce,useWorkspaceFsBridge:g,onShowPopup:u},d.source),e[27]=M,e[28]=s,e[29]=u,e[30]=m,e[31]=C):C=e[31];const D=S.map(C);let O;return e[32]!==D?(O=P.jsx("div",{ref:c,className:N,"data-openchamber-markdown-image-gallery":E,children:D}),e[32]=D,e[33]=O):O=e[33],O};function Ae(r){return r+1}function ve(r){return r.isIntersecting}function xe(r){return{...r,status:"ready"}}function ke(r){return!ie(r.source)}function Re(r){return q(r.source)}function _e(r){return r.source}function Se(r){return r.isIntersecting}function Me(r){return[r,{status:"error"}]}function Ne(r){return r.status==="ready"}function Pe(r){return r.expiresAt??Number.POSITIVE_INFINITY}function Ue(r){return r+1}function je(r){return r.status==="ready"}export{dr as MarkdownImageGallery};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{R as E,f as de,j as se}from"./vendor-react-BUCujlKS.js";import{m as Qt}from"./vendor-morphdom-B7dS_VPB.js";import{r as en,a as tn}from"./vendor-beautiful-mermaid-DztCUpLZ.js";import{ii as Oe,ij as nn,ik as rn,il as on,im as gt,io as sn,ip as an,g as Ae,bV as ln,bY as cn,iq as dn,ir as un,N as bt,aA as wt,is as yt,f as At,h as kt,fz as mn,fA as Ue,it as pn,dd as fn,iu as hn,iv as gn,iw as bn,ix as wn,o as yn,bb as An}from"./useAppFontEffects-DCqCVGlT.js";import{h as kn,T as qe,U as ae,e9 as Cn,u as V,a as vn,c1 as En,N as Sn,P as Ln,e as Mn}from"./index-vQ1Pg1cr.js";import{getCachedMarkdownBlocks as je,renderMarkdownSync as Tn,renderMarkdownBlocks as Nn}from"./markdownCore-BPEZRQfP.js";import{b as Rn,r as _n}from"./textMateThemeFromAppTheme-CDlKffWz.js";import{g as Ct,a as xn}from"./selectionMarkdown-TkYk5h9l.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-elkjs-BRwcR927.js";import"./vendor-entities-C3BA0AJP.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.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-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.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-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-Bniqp7p5.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-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-opencode-client-DHzhmLwV.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-DcBOpbSu.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 Be=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=Be(t)?.getAttribute("href")??"";return rn(r)?(t.preventDefault(),t.stopPropagation(),e?.(r),!0):!1},vt=t=>t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.altKey&&!t.shiftKey,Pn=(t,e)=>{const n=e.openSessionLink;if(!n||t.defaultPrevented)return!1;const r=Be(t)?.getAttribute("href")??"",o=nn(r,e.ownOrigins??[]);return!o||Oe(r)&&!vt(t)?!1:(t.preventDefault(),t.stopPropagation(),n(o),!0)},In=(t,e)=>{const n=a=>{if(Pn(a,e)||Ne(a,e.openAppLink)||!e.allowExternalHttp||a.defaultPrevented||!vt(a))return;const i=Be(a)?.getAttribute("href")??"";Oe(i)&&(a.preventDefault(),a.stopPropagation(),e.openExternalHttp(i))},r=a=>{a.button===1&&Ne(a,e.openAppLink)},o=a=>{Ne(a)};return t.addEventListener("click",n),t.addEventListener("auxclick",r),t.addEventListener("dragstart",o),()=>{t.removeEventListener("click",n),t.removeEventListener("auxclick",r),t.removeEventListener("dragstart",o)}},Et='[data-openchamber-file-link="true"]',Fn=t=>{if(!(t instanceof Element))return null;const e=t.closest(Et);return e instanceof HTMLElement?e:null},Dn=(t,e)=>{if(!(t instanceof Element))return null;const n=t.closest("a[href]");if(!(n instanceof HTMLAnchorElement))return null;const r=e.hrefCandidate(n);return!r||!e.isResolvable(r)?null:n},Wn=(t,e)=>{const n=r=>{const o=Fn(r.target)??Dn(r.target,e);if(!o)return;r.preventDefault(),r.stopPropagation();const a=typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.platform);e.openFileReference(o,{external:a?r.metaKey:r.ctrlKey})};return t.addEventListener("click",n),()=>t.removeEventListener("click",n)},St="openchamber-md",ke={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)"},On=Object.fromEntries(Object.keys(on({base:ke})).map(t=>[t,`var(--md-token-${t})`])),qn={name:St,colors:{"editor.background":"transparent","editor.foreground":ke.foreground},tokenColors:[...Rn({base:ke,tokens:On}),{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:ke.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 Xe=!1;const Bn=()=>{Xe||(Xe=!0,_n(St,()=>Promise.resolve(qn)))},_=t=>Number.isFinite(t)&&t>0,Ze=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 _(n)?n:null},Re=(t,e,n)=>Math.min(n,Math.max(e,t)),$n=6,Ge=1.25,zn=1.0015,Hn=.5,Vn=12,Ye=3,Kn=400,le='[data-markdown="mermaid-block"]',W=t=>t.querySelector(le)!==null,Un=t=>[t.x,t.y,t.width,t.height].map(e=>{const n=Number(e.toFixed($n));return Object.is(n,-0)?"0":String(n)}).join(" "),jn=t=>{const e=t.viewBox?.trim().split(/[\s,]+/).map(o=>Number.parseFloat(o));if(e?.length===4){const[o,a,i,s]=e;if(Number.isFinite(o)&&Number.isFinite(a)&&_(i)&&_(s))return{x:o,y:a,width:i,height:s}}const n=Ze(t.width),r=Ze(t.height);return n===null||r===null?null:{x:0,y:0,width:n,height:r}},Xn=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)},Zn=t=>{const e=t.renderMode||"unknown",n=t.svgMarkup??"";if(!n){const r=[t.viewBox??"",t.width??"",t.height??""];return r.some(o=>o!=="")?`${e}:bounds:${r.join(":")}`:`${e}:no-svg`}return[e,Xn(n)].join(":")},Lt=(t,e)=>{if(!_(e.width)||!_(e.height))return t;const n=t.width/t.height,r=e.width/e.height;if(n>r){const a=t.width/r;return{x:t.x,y:t.y-(a-t.height)/2,width:t.width,height:a}}const o=t.height*r;return{x:t.x-(o-t.width)/2,y:t.y,width:o,height:t.height}},Gn=({currentBox:t,viewport:e,delta:n})=>!_(e.width)||!_(e.height)||!_(t.width)||!_(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},Yn=(t,e)=>{const n=e.x-t.x,r=e.y-t.y;return n*n+r*r>Ye*Ye},_e=t=>{const[e,n]=t;return!e||!n?null:{distance:Math.hypot(n.x-e.x,n.y-e.y),center:{x:(e.x+n.x)/2,y:(e.y+n.y)/2}}},Jn=({currentBox:t,contentBox:e,viewport:n,pointer:r,zoomFactor:o,minScale:a,maxScale:i})=>{if(!_(n.width)||!_(n.height)||!_(o)||!_(t.width)||!_(t.height)||!_(e.width)||!_(e.height)||!_(a)||!_(i))return t;const s=Math.min(a,i),c=Math.max(a,i),l=Lt(e,n),u=l.width/t.width,g=Re(u*o,s,c),f=l.width/g,m=f/(t.width/t.height),p=Re(r.x/n.width,0,1),k=Re(r.y/n.height,0,1),C=t.x+p*t.width,S=t.y+k*t.height;return{x:C-p*f,y:S-k*m,width:f,height:m}},Ce=new WeakMap,$e=new WeakMap,Z=new Set,ce=new Set;let X=null,oe=null,te=null;const Qn=t=>t.querySelector('[data-markdown="mermaid-viewport"]')??t.querySelector('[data-markdown="mermaid"]'),Mt=t=>{const e=t.querySelector('[data-markdown="mermaid"] svg'),n=t.querySelector('[data-markdown="mermaid"]');return Zn({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")})},Q=t=>{const e=t.getBoundingClientRect();return{width:e.width,height:e.height}},Je=(t,e)=>{const n=e.getBoundingClientRect();return{x:t.clientX-n.left,y:t.clientY-n.top}},er=t=>t instanceof Element&&!!t.closest('button, a, [role="button"]'),Tt=t=>{const e=t.map(n=>Q(n.viewport));t.forEach((n,r)=>{const o=e[r];o&&n.fitToViewport(o)})},Nt=()=>{te!==null||Z.size===0||(te=window.requestAnimationFrame(()=>{te=null,Tt(Array.from(Z))}))},tr=()=>{if(X)return X;const t=globalThis.ResizeObserver;return t?(X=new t(e=>{for(const n of e)n.target instanceof HTMLElement&&$e.get(n.target)?.fitToViewport({width:n.contentRect.width,height:n.contentRect.height})}),X):null},nr=t=>{if(Z.has(t))return;const e=Z.size===0;Z.add(t),$e.set(t.viewport,t),tr()?.observe(t.viewport),e&&window.addEventListener("resize",Nt)},rr=t=>{Z.delete(t)&&(X?.unobserve(t.viewport),$e.delete(t.viewport),!(Z.size>0)&&(X?.disconnect(),X=null,window.removeEventListener("resize",Nt),te!==null&&(window.cancelAnimationFrame(te),te=null)))},or=t=>{const e=Qn(t),n=t.querySelector('[data-markdown="mermaid"] svg');if(!e||!n)return null;const r=jn({viewBox:n.getAttribute("viewBox"),width:n.getAttribute("width"),height:n.getAttribute("height")});if(!r)return null;let o=r,a=null,i=null,s=null,c=null;const l=new Map;let u=null;const g=d=>{o=d,n.setAttribute("viewBox",Un(d)),n.removeAttribute("width"),n.removeAttribute("height")},f=d=>{g(Lt(r,d))},m=()=>{f(Q(e))},p=(d,h)=>{g(Jn({currentBox:o,contentBox:r,viewport:Q(e),pointer:d,zoomFactor:h,minScale:Hn,maxScale:Vn}))},k=()=>{const d=Q(e);p({x:d.width/2,y:d.height/2},Ge)},C=()=>{const d=Q(e);p({x:d.width/2,y:d.height/2},1/Ge)},S=d=>{!d.ctrlKey&&!d.metaKey||(d.preventDefault(),d.stopPropagation(),p(Je(d,e),Math.pow(zn,-d.deltaY)))},N=d=>{if(!(d.button!==0||er(d.target))){if(d.isPrimary&&(l.clear(),u=null),l.set(d.pointerId,{x:d.clientX,y:d.clientY}),l.size>1){a=null,u=_e(Array.from(l.values()))?.distance??null,e.setPointerCapture?.(d.pointerId),t.setAttribute("data-mermaid-suppress-click","true"),d.preventDefault();return}a=d.pointerId,i={x:d.clientX,y:d.clientY},s=i,c!==null&&(window.clearTimeout(c),c=null),t.removeAttribute("data-mermaid-suppress-click"),e.setPointerCapture?.(d.pointerId),t.setAttribute("data-mermaid-panning","true"),d.preventDefault()}},y=d=>{const h={x:d.clientX,y:d.clientY};if(u!==null&&l.has(d.pointerId)){l.set(d.pointerId,h);const A=_e(Array.from(l.values()));if(A){const v=Je({clientX:A.center.x,clientY:A.center.y},e);p(v,A.distance/u),u=A.distance}d.preventDefault();return}a!==d.pointerId||!s||(g(Gn({currentBox:o,viewport:Q(e),delta:{x:h.x-s.x,y:h.y-s.y}})),s=h,i&&Yn(i,h)&&t.setAttribute("data-mermaid-suppress-click","true"),d.preventDefault())},b=d=>{if(l.delete(d.pointerId)){if(e.releasePointerCapture?.(d.pointerId),l.size>0){a=null,u=l.size>1?_e(Array.from(l.values()))?.distance??null:null;return}u=null,a=null,i=null,s=null,t.removeAttribute("data-mermaid-panning"),t.hasAttribute("data-mermaid-suppress-click")&&(c=window.setTimeout(()=>{t.removeAttribute("data-mermaid-suppress-click"),c=null},Kn))}};e.addEventListener("wheel",S,{passive:!1}),e.addEventListener("pointerdown",N),e.addEventListener("pointermove",y),e.addEventListener("pointerup",b),e.addEventListener("pointercancel",b);const w={viewport:e,zoomIn:k,zoomOut:C,fit:m,fitToViewport:f,cleanup:()=>{rr(w),e.removeEventListener("wheel",S),e.removeEventListener("pointerdown",N),e.removeEventListener("pointermove",y),e.removeEventListener("pointerup",b),e.removeEventListener("pointercancel",b),c!==null&&window.clearTimeout(c),l.clear(),t.removeAttribute("data-mermaid-panning"),t.removeAttribute("data-mermaid-suppress-click"),Ce.delete(t)}};return w},Rt=t=>{for(const[e,n]of t.controllers){const r=Mt(e);(!t.container.contains(e)||r!==t.signatures.get(e))&&(n.cleanup(),t.controllers.delete(e),t.signatures.delete(e))}},ir=t=>{if(t.disposed)return[];const e=[];for(const n of Array.from(t.container.querySelectorAll(le))){if(t.controllers.has(n)||n.querySelector('[data-markdown="mermaid"] svg')===null)continue;const r=or(n);r&&(t.controllers.set(n,r),t.signatures.set(n,Mt(n)),Ce.set(n,r),e.push(r))}return e},_t=()=>{const t=Array.from(ce);ce.clear();const e=[];for(const n of t)n.disposed||(Rt(n),e.push(...ir(n)));Tt(e);for(const n of e)nr(n)},sr=()=>{oe===null&&(oe=window.requestAnimationFrame(()=>{oe=null,oe=window.requestAnimationFrame(()=>{oe=null,_t()})}))},ar=t=>{t.disposed||(Rt(t),ce.add(t),sr())},lr=t=>{if(!(t instanceof HTMLElement))return null;const e=Ce.get(t);if(e)return e;for(const n of ce)if(n.container.contains(t))return _t(),Ce.get(t)??null;return null},cr=t=>{const e={container:t,controllers:new Map,signatures:new Map,disposed:!1},n=()=>ar(e),r=()=>{e.disposed=!0,ce.delete(e);for(const o of e.controllers.values())o.cleanup();e.controllers.clear(),e.signatures.clear()};return n(),{refresh:n,cleanup:r}},dr={copy:"file-copy",check:"check",download:"download",zoomIn:"add",zoomOut:"subtract",fit:"refresh",textWrap:"text-wrap",image:"file-image",disclosure:"arrow-right-s"},xt="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)]",ne=(t,e)=>{const n=dr[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 o=t.ownerDocument.createElementNS("http://www.w3.org/2000/svg","use");o.setAttribute("href",`#oc-${n}`),r.appendChild(o),t.replaceChildren(r)},ur=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"),ne(n,"image"),e.prepend(n)}},mr=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"),ne(r,"disclosure"),e.append(r,n)}},$=(t,e,n)=>{const r=document.createElement("button");return r.type="button",r.className=xt,r.setAttribute("data-md-action",n),r.setAttribute("title",e),r.setAttribute("aria-label",e),ne(r,t),r},Pt=(t,e,n,r)=>{const o=e?r:n;t.setAttribute("title",o),t.setAttribute("aria-label",o),t.classList.toggle("text-foreground",e),t.classList.toggle("opacity-100",e),t.classList.toggle("text-muted-foreground",!e),t.classList.toggle("opacity-65",!e),t.setAttribute("aria-pressed",e?"true":"false")},It=(t,e,n)=>{const r=t.querySelector("[data-md-code-body]"),o=t.querySelector("pre"),a=t.querySelector("pre code"),i=t.querySelectorAll("[data-md-code-line-content]"),s=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),o?.classList.toggle("whitespace-pre-wrap",e),o?.classList.toggle("break-words",e),a?.classList.toggle("whitespace-pre-wrap",e),a?.classList.toggle("break-words",e),o&&(o.style.whiteSpace=e?"pre-wrap":"pre",o.style.overflowWrap=e?"anywhere":"normal"),a&&(a.style.whiteSpace=e?"pre-wrap":"pre",a.style.overflowWrap=e?"anywhere":"normal");for(const c of Array.from(i))c.style.whiteSpace=e?"pre-wrap":"pre",c.style.overflowWrap=e?"anywhere":"normal";s&&Pt(s,e,n.enableCodeWrap,n.disableCodeWrap)},Ft=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
|
-
`),o=r?n.slice(0,-1).split(`
|
|
3
|
-
`):n.split(`
|
|
4
|
-
`),a=o.length>0?o:[""],i=Array.from(e.children).filter(l=>l.classList.contains("line"));r&&i.length===a.length+1&&i.at(-1)?.textContent===""&&i.pop();const s=i.length===a.length,c=document.createDocumentFragment();a.forEach((l,u)=>{const g=document.createElement("span");g.setAttribute("data-md-code-line","");const f=document.createElement("span");f.setAttribute("data-md-code-line-number",String(u+1)),f.setAttribute("aria-hidden","true");const m=document.createElement("span");if(m.setAttribute("data-md-code-line-content",""),s){const p=i[u];p&&m.append(...Array.from(p.childNodes))}else m.textContent=l;if(g.append(f,m),c.appendChild(g),u<a.length-1||r){const p=document.createElement("span");p.setAttribute("data-md-code-line-break",""),p.textContent=`
|
|
5
|
-
`,c.appendChild(p)}}),e.replaceChildren(c),e.setAttribute("data-md-code-lines",""),e.toggleAttribute("data-md-code-trailing-newline",r)},Qe=(t,e,n)=>{const r=t.querySelectorAll('[data-component="markdown-code"]');for(const o of Array.from(r)){const a=o.querySelector("pre");a&&Ft(a),It(o,e,n)}},et=(t,e,n,r)=>{ne(t,"check"),t.setAttribute("title",e),t.setAttribute("aria-label",e),window.setTimeout(()=>{ne(t,n),t.setAttribute("title",r),t.setAttribute("aria-label",r)},2e3)},pr=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"),n.getAttribute("dir")!=="ltr"&&n.setAttribute("dir","ltr"),n.closest("table")&&n.classList.add("whitespace-nowrap")},fr=(t,e)=>{const n=t.querySelectorAll("pre");for(const r of Array.from(n)){if(r.querySelector("code.language-mermaid"))continue;const o=r.parentElement;if(!o||o.closest('[data-component="markdown-code"]'))continue;const a=r.querySelector("code")?.className.match(/language-([\w+#.-]+)/)?.[1],i=r.getAttribute("data-md-lang")??a??"text",s=document.createElement("div");s.setAttribute("data-component","markdown-code"),s.setAttribute("dir","ltr"),s.className="my-4 group overflow-hidden rounded-2xl border border-border/80 bg-[var(--surface-elevated)]";const c=document.createElement("div");c.className="flex items-center justify-between border-b border-border/70 px-3 py-1.5";const l=document.createElement("span");l.className="font-mono text-[13px] text-muted-foreground",l.textContent=i;const u=$("copy",e.labels.copy,"copy-code"),g=$("textWrap",e.codeBlockLineWrap?e.labels.disableCodeWrap:e.labels.enableCodeWrap,"toggle-code-wrap");c.appendChild(l);const f=document.createElement("div");f.className="flex items-center gap-1",f.setAttribute("data-md-code-actions",""),f.appendChild(g),f.appendChild(u),c.appendChild(f);const m=document.createElement("div");m.setAttribute("data-md-code-body",""),m.className="px-3 py-2.5 overflow-x-auto",o.replaceChild(s,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",""):Ft(r),m.appendChild(r),s.appendChild(c),s.appendChild(m),It(s,e.codeBlockLineWrap,e.labels)}},tt=t=>t.replace(/\\/g,"\\\\").replace(/\|/g,"\\|"),hr=(t,e)=>{const n=r=>{if(!(r instanceof Element)){const o=r.textContent??"";return e?tt(o):o}if(r.tagName==="A"){const o=r.getAttribute("href");if(o){const a=o.replace(/ /g,"%20");if(!e)return a;const i=tt(r.textContent??"").replace(/\[/g,"\\[").replace(/\]/g,"\\]"),s=a.replace(/\|/g,"%7C"),c=/[()]/.test(s)?`<${s.replace(/</g,"%3C").replace(/>/g,"%3E")}>`:s;return`[${i}](${c})`}}return Array.from(r.childNodes).map(n).join("")};return Array.from(t.childNodes).map(n).join("")},nt=(t,e)=>{const n=e==="markdown",r=c=>hr(c,n).trim(),o=[],a=[],i=t.querySelectorAll("thead th");for(const c of Array.from(i))o.push(r(c));const s=t.querySelectorAll("tbody tr");for(const c of Array.from(s)){const l=Array.from(c.querySelectorAll("td")).map(r);l.length>0&&a.push(l)}return{headers:o,rows:a}},gr=t=>/[",\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t,rt=({headers:t,rows:e})=>[t,...e].map(n=>n.map(gr).join(",")).join(`
|
|
6
|
-
`),br=({headers:t,rows:e})=>[t,...e].map(n=>n.join(" ")).join(`
|
|
7
|
-
`),ot=({headers:t,rows:e})=>{const n=`| ${t.join(" | ")} |`,r=`| ${t.map(()=>"---").join(" | ")} |`,o=e.map(a=>`| ${a.join(" | ")} |`).join(`
|
|
8
|
-
`);return`${n}
|
|
9
|
-
${r}
|
|
10
|
-
${o}`},it=(t,e)=>{const n=document.createElement("div");n.className=`absolute top-full right-0 mt-1 hidden ${ln}`,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 o=document.createElement("button");o.type="button",o.className=`w-full text-left ${cn}`,o.setAttribute("data-md-action",`${t}-${r.key}`),o.textContent=r.label,n.appendChild(o)}return n},De=120,wr=320,We="data-md-table-layout",st="data-md-table-wrap",Dt=(t,e,n)=>{const r=t.querySelector('[data-md-action="toggle-table-wrap"]');r&&Pt(r,e,n.enableTableWrap,n.disableTableWrap),t.querySelector("table")?.classList.toggle("w-max",!e)},yr=(t,e,n)=>{for(const r of Array.from(t.querySelectorAll('[data-markdown="table-wrapper"]')))Dt(r,e,n)},Ar=(t,e)=>{const{labels:n}=e,r=t.querySelectorAll("table");for(const o of Array.from(r)){if(o.closest('[data-markdown="table-wrapper"]'))continue;const i=document.createElement("div");i.className="group my-4 flex w-fit max-w-full flex-col space-y-2",i.setAttribute("data-markdown","table-wrapper");const s=document.createElement("div");s.className="flex items-center justify-end gap-1",s.appendChild($("textWrap",n.enableTableWrap,"toggle-table-wrap"));const c=document.createElement("div");c.className="relative",c.appendChild($("copy",n.copyTable,"table-copy-toggle")),c.appendChild(it("table-copy",[{key:"csv",label:"CSV"},{key:"tsv",label:"TSV"},{key:"markdown",label:"Markdown"}]));const l=document.createElement("div");l.className="relative",l.appendChild($("download",n.downloadTable,"table-download-toggle")),l.appendChild(it("table-download",[{key:"csv",label:"CSV"},{key:"markdown",label:"Markdown"}])),s.appendChild(c),s.appendChild(l);const u=document.createElement("div");u.className="overflow-x-auto rounded-lg border border-border/80 bg-[var(--surface-elevated)]";const g=o.parentElement;if(!g)continue;g.replaceChild(i,o),o.setAttribute("data-markdown","table"),o.setAttribute(We,"pending"),o.classList.add("border-collapse","text-sm");for(const m of Array.from(o.querySelectorAll("tr")))m.classList.add("border-b","border-border/60");const f=o.querySelector("tbody tr:last-child");f?.classList.remove("border-b"),f?.classList.add("border-0");for(const m of Array.from(o.querySelectorAll("th")))m.classList.add("min-w-[120px]","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(o.querySelectorAll("td")))m.classList.add("min-w-[120px]","whitespace-normal","[overflow-wrap:anywhere]","border-r","border-border/60","px-4","py-2.5","align-middle","text-foreground/90","last:border-r-0");u.appendChild(o),i.appendChild(s),i.appendChild(u),Dt(i,e.tableCellWrap,n)}},kr=(t,e)=>{const n=[...t];let r=t.map((a,i)=>i),o=e;for(;r.length>0;){const a=o/r.length,i=r.filter(s=>t[s]<=a);if(i.length===0){for(const s of r)n[s]=Math.max(De,Math.floor(a));break}for(const s of i)o-=t[s];r=r.filter(s=>t[s]>a)}return n},Cr=(t,e)=>{const n=String(e),r=Array.from(t.querySelectorAll(`table[data-markdown="table"]:not([${We}="fixed"][${st}="${n}"])`));if(r.length===0||!t.isConnected)return;const o=t.ownerDocument.createElement("div");o.setAttribute("aria-hidden","true"),o.setAttribute("data-md-table-measure",""),o.style.position="fixed",o.style.left="-100000px",o.style.top="0",o.style.visibility="hidden",o.style.pointerEvents="none",o.style.width="max-content";const a=r.map(s=>{const c=m=>Array.from(m.children).filter(p=>p.tagName==="TH"||p.tagName==="TD"),l=Array.from(s.querySelectorAll("tbody tr")),u=l.some(m=>c(m).length>0)?l:Array.from(s.querySelectorAll("thead tr")),g=Math.max(0,...Array.from(s.querySelectorAll("tr")).map(m=>c(m).length)),f=[];for(let m=0;m<g;m+=1){const p=t.ownerDocument.createElement("table");p.className=s.className,p.style.tableLayout="auto",p.style.width="max-content";const k=t.ownerDocument.createElement("tbody");for(const C of u){const S=c(C)[m];if(!S)continue;const N=t.ownerDocument.createElement("tr"),y=S.cloneNode(!0);y instanceof HTMLElement&&(y.style.width="auto",y.style.minWidth="0",y.style.maxWidth="none",y.style.whiteSpace="nowrap",y.style.overflowWrap="normal",N.appendChild(y),k.appendChild(N))}p.appendChild(k),o.appendChild(p),f.push(p)}return{table:s,columnProbes:f}});t.appendChild(o);const i=a.map(({table:s,columnProbes:c})=>{const l=s.parentElement?.clientWidth??0,u=Math.max(De,l||wr),g=c.map(p=>Math.ceil(p.getBoundingClientRect().width)),f=g.map(p=>Math.min(u,Math.max(De,p))),m=e&&l>0?kr(f,l):f;return{table:s,widths:m,cappedColumns:g.map((p,k)=>p>(m[k]??0))}});o.remove();for(const{table:s,widths:c,cappedColumns:l}of i){for(const m of Array.from(s.querySelectorAll("tr")))Array.from(m.children).filter(k=>k.tagName==="TH"||k.tagName==="TD").forEach((k,C)=>{const S=!l[C];for(const N of Array.from(k.querySelectorAll('code[data-markdown="inline-code"]')))N.classList.toggle("whitespace-nowrap",S)});Array.from(s.children).find(m=>m.matches("colgroup[data-md-table-columns]"))?.remove();const g=t.ownerDocument.createElement("colgroup");g.setAttribute("data-md-table-columns","");for(const m of c){const p=t.ownerDocument.createElement("col");p.style.width=`${m}px`,g.appendChild(p)}const f=Array.from(s.children).find(m=>m.tagName==="THEAD"||m.tagName==="TBODY"||m.tagName==="TFOOT")??null;s.insertBefore(g,f),s.style.tableLayout="fixed",s.style.width=`${c.reduce((m,p)=>m+p,0)}px`,s.setAttribute(We,"fixed"),s.setAttribute(st,n)}},vr=(t,e)=>{const n=t.querySelectorAll("pre > code.language-mermaid");for(const r of Array.from(n)){const o=r.parentElement;if(!o)continue;const a=(r.textContent??"").replace(/\s+$/,""),i=e.renderMermaid(a),s=document.createElement("div");s.setAttribute("data-markdown","mermaid-block"),s.setAttribute("data-md-source",a),s.className="relative";const c=document.createElement("div");c.setAttribute("data-markdown","mermaid-scroll");const l=document.createElement("div");if(l.setAttribute("data-markdown","mermaid-toolbar"),l.setAttribute(gt,"true"),l.className="absolute top-1 right-2 flex items-center gap-1",i.svg){s.setAttribute("data-mermaid-render","svg");const g=document.createElement("div");g.setAttribute("data-markdown","mermaid-viewport");const f=document.createElement("div");if(f.setAttribute("data-markdown","mermaid"),f.setAttribute("data-md-original-svg",i.svg),f.innerHTML=i.svg,g.appendChild(f),c.appendChild(g),e.mermaidControls.showPanZoomControls&&(l.appendChild($("zoomIn",e.labels.zoomInDiagram,"mermaid-zoom-in")),l.appendChild($("zoomOut",e.labels.zoomOutDiagram,"mermaid-zoom-out")),l.appendChild($("fit",e.labels.resetDiagramView,"mermaid-fit"))),e.mermaidControls.copy){const m=$("copy",e.labels.copyDiagram,"mermaid-copy");m.setAttribute("data-md-source",a),l.appendChild(m)}if(e.mermaidControls.download){const m=$("download",e.labels.downloadDiagram,"mermaid-download");m.setAttribute("data-md-svg","1"),l.appendChild(m)}}else{s.setAttribute("data-mermaid-render","ascii");const g=document.createElement("pre");if(g.setAttribute("data-markdown","mermaid-ascii"),g.textContent=i.ascii||a,c.appendChild(g),e.mermaidControls.copy){const f=$("copy",e.labels.copyDiagram,"mermaid-copy");f.setAttribute("data-md-source",i.ascii||a),l.appendChild(f)}}s.appendChild(c),s.appendChild(l);const u=o.parentElement;u&&u.replaceChild(s,o)}},Er=(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 o=r.getAttribute("href")??"";if(!Oe(o))continue;r.setAttribute("data-md-link-decorated","true"),r.textContent===o&&r.setAttribute("dir","ltr");const a=sn(o);if(a){const i=document.createElement("span");i.setAttribute(gt,"true"),i.className="mr-1 inline-flex size-[18px] items-center justify-center rounded border border-[var(--border)] bg-[var(--interactive-hover)] align-middle";const s=document.createElement("img");s.src=a,s.alt="",s.setAttribute("aria-hidden","true"),s.loading="lazy",s.decoding="async",s.className="size-3.5 rounded-sm",s.addEventListener("error",()=>i.remove(),{once:!0}),i.appendChild(s),r.parentNode?.insertBefore(i,r)}if(e.onPreviewLoopback&&an(o)){const i=document.createElement("button");i.type="button",i.className=`ml-1 align-middle ${xt}`,i.setAttribute("data-md-action","preview-loopback"),i.setAttribute("data-md-url",o),i.setAttribute("title",e.labels.previewTitle),i.setAttribute("aria-label",e.labels.previewLabel),ne(i,"download"),r.parentNode?.insertBefore(i,r.nextSibling)}}},he=(t,e)=>{for(const n of t.querySelectorAll("li, blockquote"))n.getAttribute("dir")!=="auto"&&n.setAttribute("dir","auto");mr(t),ur(t),pr(t),vr(t,e),fr(t,e),Ar(t,e),Er(t,e)},at=(t,e,n)=>{const r=new Blob([e],{type:n}),o=URL.createObjectURL(r),a=document.createElement("a");a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(o)},ie=t=>{for(const e of Array.from(t.querySelectorAll("[data-md-menu]")))e.classList.add("hidden")},lt=t=>(t.nodeType===1?t:t.parentElement)?.closest("pre code[data-md-code-lines]")??null,Sr=t=>{const e=lt(t.startContainer);return!e||e!==lt(t.endContainer)?null:t.toString()},ge=new WeakMap,Lr=(t,e)=>{let n=ge.get(t);if(!n){const r=()=>{const i=t.getSelection();if(!i||i.rangeCount!==1||i.isCollapsed)return null;const s=i.getRangeAt(0),c=Sr(s);if(c!==null)return{text:c,html:null};const l=xn(s,n?.getCopyFormat?.()??"markdown");if(l===null)return null;const u=t.createElement("div");return u.appendChild(s.cloneContents()),{text:l,html:u.innerHTML}},o=i=>{if(!i.clipboardData)return;const s=r();s!==null&&(i.preventDefault(),i.stopPropagation(),i.clipboardData.setData("text/plain",s.text),s.html&&i.clipboardData.setData("text/html",s.html))},a=i=>{const s=r();s!==null&&(i.preventDefault(),Ae(s.text))};n={registrations:0,handler:o,menuHandler:a},ge.set(t,n),t.addEventListener("copy",o,!0),t.defaultView?.addEventListener("openchamber:copy",a)}return n.registrations+=1,e&&(n.getCopyFormat=e),()=>{const r=ge.get(t);r&&(r.registrations-=1,!(r.registrations>0)&&(t.removeEventListener("copy",r.handler,!0),t.defaultView?.removeEventListener("openchamber:copy",r.menuHandler),ge.delete(t)))}},Mr=(t,e)=>{const n=Lr(t.ownerDocument,e.getCopyFormat),r=o=>{const a=o.target;if(!(a instanceof Element))return;const i=a.closest("[data-md-action]");if(!i){ie(t);return}const s=i.getAttribute("data-md-action")??"";if(s==="copy-code"){const c=i.closest('[data-component="markdown-code"]')?.querySelector("code"),l=c?Ct(c):"";l&&(i.setAttribute("data-md-copy-pending",""),Ae(l).then(()=>et(i,e.labels.copied,"copy",e.labels.copy)).finally(()=>i.removeAttribute("data-md-copy-pending")));return}if(s==="toggle-code-wrap"){o.preventDefault(),e.onToggleCodeBlockLineWrap?.();return}if(s==="toggle-table-wrap"){o.preventDefault(),ie(t),e.onToggleTableCellWrap?.();return}if(s==="table-copy-toggle"||s==="table-download-toggle"){o.preventDefault();const c=i.parentElement?.querySelector("[data-md-menu]")??null,l=c?.classList.contains("hidden")??!1;ie(t),c&&l&&c.classList.remove("hidden");return}if(s.startsWith("table-copy-")){const c=s.replace("table-copy-",""),l=i.closest('[data-markdown="table-wrapper"]')?.querySelector("table");if(l instanceof HTMLTableElement){const u=nt(l,c),g=c==="csv"?rt(u):c==="tsv"?br(u):ot(u);Ae(g)}ie(t);return}if(s.startsWith("table-download-")){const c=s.replace("table-download-",""),l=i.closest('[data-markdown="table-wrapper"]')?.querySelector("table");if(l instanceof HTMLTableElement){const u=nt(l,c),g=c==="csv"?rt(u):ot(u);at(c==="csv"?"table.csv":"table.md",g,c==="csv"?"text/csv":"text/markdown")}ie(t);return}if(s==="mermaid-copy"){const c=i.getAttribute("data-md-source")??"";c&&Ae(c).then(()=>et(i,e.labels.copied,"copy",e.labels.copyDiagram));return}if(s==="mermaid-zoom-in"||s==="mermaid-zoom-out"||s==="mermaid-fit"){o.preventDefault();const c=i.closest('[data-markdown="mermaid-block"]'),l=lr(c);s==="mermaid-zoom-in"?l?.zoomIn():s==="mermaid-zoom-out"?l?.zoomOut():l?.fit();return}if(s==="mermaid-download"){const c=i.closest('[data-markdown="mermaid-block"]')?.querySelector('[data-markdown="mermaid"]'),l=c?.getAttribute("data-md-original-svg")??c?.innerHTML??"";l&&at("diagram.svg",l,"image/svg+xml;charset=utf-8");return}if(s==="preview-loopback"){o.preventDefault();const c=i.getAttribute("data-md-url")??"";c&&e.onPreviewLoopback?.(c);return}};return t.addEventListener("click",r),()=>{n(),t.removeEventListener("click",r)}},ct=(t,e,n)=>{let r=0;for(const a of t){const i=r+a.data.length;if(e<i||e===i&&n==="left")return{node:a,offset:Math.max(0,e-r)};r=i}const o=t.at(-1);return o?{node:o,offset:o.data.length}:null},Tr=new Set(["dockerfile","makefile","readme","license",".env",".gitignore",".npmrc"]),dt=Array.from(Tr).map(t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),Wt=t=>dn(t),Nr=t=>un(t),Ot=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):""},be=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 o=dt.length>0?e.match(new RegExp(`^(.*(?:/|^)(${dt})):.*$`,"i")):null;return o&&(e=o[1]??e),ve(e)},qt=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 o=r.match(/^(.*?):(\d+)-(\d+)$/);if(o){const c=be(o[1]??""),l=Number.parseInt(o[2]??"",10),u=Number.parseInt(o[3]??"",10);return!c||!Number.isFinite(l)||!Number.isFinite(u)||u<l?null:{path:c,line:l,endLine:u}}const a=r.match(/^(.*)#L(\d+)(?:C(\d+))?$/i);if(a){const c=be(a[1]??""),l=Number.parseInt(a[2]??"",10),u=a[3]?Number.parseInt(a[3],10):void 0;return!c||!Number.isFinite(l)?null:{path:c,line:l,column:Number.isFinite(u??Number.NaN)?u:void 0}}const i=r.match(/^(.*?):(\d+)(?::(\d+))?$/);if(i){const c=be(i[1]??""),l=Number.parseInt(i[2]??"",10),u=i[3]?Number.parseInt(i[3],10):void 0;return!c||!Number.isFinite(l)?null:{path:c,line:l,column:Number.isFinite(u??Number.NaN)?u:void 0}}const s=be(r);return s?{path:s}:null},xe=/(?:[A-Za-z]:[\\/])?[\w.\-/@+]*[\w\-/@+]\.[A-Za-z0-9]{1,8}(?::\d+(?:-\d+)?(?::\d+)?)?/g,Rr=4,_r=1e3,xr=200,K=new Map;let we=0;const ut=[],Pr=()=>qe()?xr:_r,Ir=(t,e)=>`${t}\0${e}`,Fr=(t,e)=>{const n=Wt(t);if(!n)return Promise.resolve(!1);const r=Ir(e,n),o=K.get(r);if(o)return K.delete(r),K.set(r,o),o;const a=new Promise(s=>{const c=()=>{we+=1,kn(`/api/fs/stat?path=${encodeURIComponent(n)}&optional=true`,{method:"GET",cache:"no-store",headers:e?{"x-opencode-directory":e}:void 0}).then(async l=>{if(!l.ok){s(!1);return}const u=await l.json().catch(()=>null);s(u?.exists!==!1)}).catch(()=>s(!1)).finally(()=>{we=Math.max(0,we-1),ut.shift()?.()})};if(we<Rr){c();return}ut.push(c)}),i=Pr();for(;K.size>=i;){const s=K.keys().next().value;if(typeof s!="string")break;K.delete(s)}return K.set(r,a),a},Dr={maxSessions:8,maxEntriesPerSession:4};class Wr{maxSessions;maxEntriesPerSession;sessions=new Map;constructor(e=Dr){this.maxSessions=Math.max(1,e.maxSessions),this.maxEntriesPerSession=Math.max(1,e.maxEntriesPerSession)}store(e){const n=e.scope,r=e.id;let o=this.sessions.get(n);for(o===void 0?(o=new Map,this.sessions.set(n,o)):this.refreshSession(n,o),o.delete(r),o.set(r,e);o.size>this.maxEntriesPerSession;)this.removeOldestEntry(o);for(;this.sessions.size>this.maxSessions;)this.removeOldestSession()}take(e){const n=e.scope,r=this.sessions.get(n);if(!r)return null;const o=e.id;this.refreshSession(n,r);const a=r.get(o);return a===void 0||a.locale!==e.locale||a.directory!==e.directory?null:(r.delete(o),r.size===0&&this.sessions.delete(n),a.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 mt=new Wr,Bt=()=>{const t=de.c(4),e=mn();let n;t[0]===Symbol.for("react.memo_cache_sentinel")?(n=Ue(!1),t[0]=n):n=t[0];const r=n;let o;t[1]===Symbol.for("react.memo_cache_sentinel")?(o=Ue(!0),t[1]=o):o=t[1];const a=o;let i;return t[2]!==e?.currentTheme?(i=e?.currentTheme??(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches?a:r),t[2]=e?.currentTheme,t[3]=i):i=t[3],i},Or=()=>{if(typeof window>"u")return[];const t=[window.location.origin];try{const e=new URL(Mn()||window.location.href,window.location.href).origin;t.includes(e)||t.push(e)}catch{}return t},$t=t=>{const e=de.c(4),{containerRef:n,enabled:r}=t;let o,a;e[0]!==n||e[1]!==r?(o=()=>{const i=n.current;if(!i)return;const s=!qe();return In(i,{allowExternalHttp:r!==!1,openAppLink:so,openExternalHttp:ao,openSessionLink:s?lo:void 0,ownOrigins:Or()})},a=[n,r],e[0]=n,e[1]=r,e[2]=o,e[3]=a):(o=e[2],a=e[3]),E.useEffect(o,a)},re={download:!0,copy:!0,showPanZoomControls:!0},zt=!0,qr=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},Ht="data-openchamber-block-path-token",Vt=`[${Ht}]`,ee="data-openchamber-block-paths-scanned",Br=2e5,$r=80,zr=40,pt=160,Hr=()=>qe()?zr:$r,Vr=new Set(["dockerfile","makefile","readme","license",".env",".gitignore",".npmrc"]),Kt=t=>Wt(t),Kr=t=>Nr(t),Ur=(t,e)=>gn(t,e),jr=t=>{const e=t.split("/").filter(Boolean).pop()??"";return!e||e.endsWith(".")?!1:/\.[A-Za-z0-9_-]{1,16}$/.test(e)},Ut=t=>{if(!t||t.startsWith("--")||t.includes("://")||/[<>]/.test(t)||/\s{2,}/.test(t))return!1;const e=Kt(t),n=e.split("/").filter(Boolean).pop()??e;if(!n||n==="."||n==="..")return!1;const r=n.toLowerCase();return Vr.has(r)||r.startsWith(".")&&r.length>1?!0:jr(e)},ze=t=>{const e=qt(t);return e?Ut(e.path):!1},Xr=t=>{const e=t.querySelectorAll(Vt);for(const r of Array.from(e))r.replaceWith(t.ownerDocument.createTextNode(r.textContent??""));const n=t.querySelectorAll(`code[${ee}]`);for(const r of Array.from(n))r.removeAttribute(ee),r.normalize()},Pe=t=>{if(t.tagName.toLowerCase()==="a"){const e=t.getAttribute("href")?.trim(),n=e?Ot(e):null;if(n)return n;if(e&&ze(e))return e}return(t.textContent||"").trim()},Zr=t=>{const e=t.getAttribute("href")?.trim();if(!e)return null;const n=Ot(e);return n||(ze(e)?e:null)},Gr=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(ee)==="true")continue;if((r.textContent??"").length>Br){r.setAttribute(ee,"true");continue}const o=n.createTreeWalker(r,NodeFilter.SHOW_TEXT),a=[];let i=o.nextNode();for(;i;){const u=i;u.parentElement?.closest("[data-md-code-line-number]")||a.push(u),i=o.nextNode()}const s=Ct(r);if(!s.includes(".")){r.setAttribute(ee,"true");continue}xe.lastIndex=0;const c=[];let l=xe.exec(s);for(;l;){const u=l[0];u&&ze(u)&&c.push({start:l.index,end:l.index+u.length,raw:u}),l=xe.exec(s)}for(const{start:u,end:g,raw:f}of c.reverse()){const m=ct(a,u,"right"),p=ct(a,g,"left");if(!m||!p)continue;const k=n.createRange();k.setStart(m.node,m.offset),k.setEnd(p.node,p.offset);const C=n.createElement("span");C.setAttribute(Ht,"true"),C.textContent=f,k.deleteContents(),k.insertNode(C)}r.setAttribute(ee,"true")}},ye=(t,e)=>{const n=qt(t);if(!n||!Ut(n.path))return null;const r=Kr(n.path)?Kt(n.path):Ur(e,n.path);return r?{...n,resolvedPath:r}:null},Yr=(t,e)=>t||hn(t,e),jt=({containerRef:t,effectiveDirectory:e,editor:n,preferRuntimeEditor:r,enabled:o})=>{const a=E.useRef(null);E.useEffect(()=>{const i=t.current;if(!i||o&&!e)return;let s=!1;const c=Hr(),l=o&&!En(),u=w=>{w.removeAttribute("data-openchamber-file-link"),w.removeAttribute("data-openchamber-file-ref"),w.removeAttribute("data-openchamber-file-path"),w.getAttribute("title")==="Open file"&&w.removeAttribute("title"),w.tagName.toLowerCase()!=="a"&&(w.removeAttribute("role"),w.removeAttribute("tabindex"))},g=()=>{const w=i.querySelectorAll(Et);for(const d of Array.from(w))u(d);Xr(i)},f=async(w,d)=>{const h=w.getAttribute("data-openchamber-file-ref")||Pe(w),A=ye(h,e);if(!A||d?.external&&Sn()&&await Ln(A.resolvedPath))return;const v=Yr(e,A.resolvedPath);if(r&&n){n.openFile(A.resolvedPath,Number.isFinite(A.line??Number.NaN)?Math.max(1,Math.trunc(A.line)):void 0,Number.isFinite(A.column??Number.NaN)?Math.max(1,Math.trunc(A.column)):void 0);return}const x=V.getState();Number.isFinite(A.line??Number.NaN)?x.openContextFileAtLine(v,A.resolvedPath,Math.max(1,Math.trunc(A.line)),Number.isFinite(A.column??Number.NaN)?Math.max(1,Math.trunc(A.column)):1):x.openContextFile(v,A.resolvedPath)},m=()=>Wn(i,{hrefCandidate:Zr,isResolvable:w=>ye(w,e)!==null,openFileReference:f});if(!l)return g(),o?m():void 0;const p=(w=0)=>{if(a.current!==null&&typeof window<"u"&&window.clearTimeout(a.current),typeof window>"u"){k();return}a.current=window.setTimeout(()=>{a.current=null,window.requestAnimationFrame(()=>{s||k()})},w)},k=()=>{N+=1;try{C()}finally{queueMicrotask(()=>{N-=1})}},C=()=>{l&&Gr(i);const w=i.querySelectorAll(`[data-markdown="inline-code"], a, ${Vt}`);let d=0;for(const h of Array.from(w)){const A=Pe(h),v=ye(A,e);if(u(h),!v||d>=c)continue;d+=1,(!fn(v.resolvedPath,e)?Promise.resolve(!0):Fr(v.resolvedPath,e)).then(D=>{if(s||!D||!i.contains(h))return;const F=Pe(h),L=ye(F,e);!L||L.resolvedPath!==v.resolvedPath||(h.setAttribute("data-openchamber-file-link","true"),h.setAttribute("data-openchamber-file-ref",F),h.setAttribute("data-openchamber-file-path",L.resolvedPath),h.setAttribute("title","Open file"),h.tagName.toLowerCase()!=="a"&&(h.setAttribute("role","button"),h.setAttribute("tabindex","0")))})}},S=w=>{if(w.key!=="Enter"&&w.key!==" ")return;const d=w.target;!(d instanceof HTMLElement)||d.getAttribute("data-openchamber-file-link")!=="true"||(w.preventDefault(),w.stopPropagation(),f(d))};p(pt);let N=0;const y=new MutationObserver(()=>{N>0||p(pt)});y.observe(i,{childList:!0,subtree:!0}),i.addEventListener("keydown",S);const b=m();return()=>{s=!0,a.current!==null&&typeof window<"u"&&window.clearTimeout(a.current),a.current=null,y.disconnect(),b(),i.removeEventListener("keydown",S)}},[t,n,e,r,o])},Xt=t=>{const e=de.c(7),{containerRef:n,onShowPopup:r,enableFullscreen:o,enablePanZoom:a,allowMermaidWheelEvents:i}=t;let s,c;e[0]!==i||e[1]!==n||e[2]!==o||e[3]!==a||e[4]!==r?(s=()=>{const l=n.current;if(!l)return;const u=f=>{if(!o||!r)return;const m=f.target;if(!(m instanceof Element)||m.closest('button, a, [role="button"]'))return;const p=m.closest(le);if(!p)return;if(p instanceof HTMLElement&&p.hasAttribute("data-mermaid-suppress-click")){p.removeAttribute("data-mermaid-suppress-click");return}const C=Array.from(l.querySelectorAll(le)).indexOf(p);if(C<0)return;const S=p instanceof HTMLElement?p.getAttribute("data-md-source"):null;if(!S||S.trim().length===0)return;const N=`Diagram ${C+1}`;r({open:!0,title:N,content:"",metadata:{tool:"mermaid-preview",filename:N},mermaid:{url:`data:text/plain;charset=utf-8,${encodeURIComponent(S)}`,source:S,filename:N}})},g=f=>{if(i||(f.ctrlKey||f.metaKey)&&a)return;const m=f.target;!(m instanceof Element)||!m.closest(le)||f.stopPropagation()};return l.addEventListener("click",u),l.addEventListener("wheel",g,{capture:!0,passive:!0}),()=>{l.removeEventListener("click",u),l.removeEventListener("wheel",g,!0)}},c=[i,n,o,a,r],e[0]=i,e[1]=n,e[2]=o,e[3]=a,e[4]=r,e[5]=s,e[6]=c):(s=e[5],c=e[6]),E.useEffect(s,c)},U=new Map,Jr=100,j="data-md-decoration-id",Ie=t=>{const e=t.lastElementChild;for(const n of Array.from(t.children))n!==e&&n.hasAttribute("data-md-last")&&n.removeAttribute("data-md-last");e?.hasAttribute("data-md-block")&&!e.hasAttribute("data-md-last")&&e.setAttribute("data-md-last","")},Qr=(t,e,n)=>{const r=t.children;if(r.length!==e.length)return!1;for(let o=0;o<e.length;o+=1){const a=r[o];if(!a||a.getAttribute("data-md-id")!==e[o]?.id||a.getAttribute(j)!==n)return!1}return!0},ft=new WeakMap;let ht=0;const eo=2e5,Fe=t=>{const e=ft.get(t);if(e)return e;const n=`decoration-${ht}`;return ht+=1,ft.set(t,n),n},to=(t,e)=>{const n=U.get(t);if(n)return U.delete(t),U.set(t,n),n;const r=e();if(U.set(t,r),U.size>Jr){const o=U.keys().next().value;o&&U.delete(o)}return r},no=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"}),ro=()=>V.getState().copyMessagesAsPlainText?"plain":"markdown",Zt=(t,e,n,r=re)=>{const{t:o}=At(),a=E.useMemo(()=>({copy:o("markdownRenderer.code.actions.copyTitle"),copied:o("markdownRenderer.code.actions.copiedTitle"),enableCodeWrap:o("markdownRenderer.code.actions.enableWrapTitle"),disableCodeWrap:o("markdownRenderer.code.actions.disableWrapTitle"),enableTableWrap:o("markdownRenderer.table.actions.enableWrapTitle"),disableTableWrap:o("markdownRenderer.table.actions.disableWrapTitle"),copyTable:o("markdownRenderer.table.actions.copyTitle"),downloadTable:o("markdownRenderer.table.actions.downloadTitle"),copyDiagram:o("markdownRenderer.mermaid.actions.copySourceTitle"),downloadDiagram:o("markdownRenderer.mermaid.actions.downloadSvgTitle"),zoomInDiagram:o("markdownRenderer.mermaid.actions.zoomInTitle"),zoomOutDiagram:o("markdownRenderer.mermaid.actions.zoomOutTitle"),resetDiagramView:o("markdownRenderer.mermaid.actions.resetViewTitle"),previewLabel:o("terminalView.preview.open"),previewTitle:o("terminalView.preview.openTitle")}),[o]),i=V(f=>f.codeBlockLineWrap),s=V(f=>f.setCodeBlockLineWrap),c=E.useCallback(()=>{s(!V.getState().codeBlockLineWrap)},[s]),l=V(f=>f.tableCellWrap),u=V(f=>f.setTableCellWrap),g=E.useCallback(()=>{u(!V.getState().tableCellWrap)},[u]);return E.useMemo(()=>{const f=no(t),m=V.getState().mermaidRenderingMode,p=t.metadata?.id??"theme";return{labels:a,mermaidControls:r,codeBlockLineWrap:i,deferCodeLineNumberSync:e,onToggleCodeBlockLineWrap:c,tableCellWrap:l,onToggleTableCellWrap:g,renderMermaid:C=>to(`${p}:${m}:${C}`,()=>{try{return m==="ascii"?{ascii:en(C)}:{svg:tn(C,f)}}catch{return{}}}),onPreviewLoopback:n,getCopyFormat:ro}},[t,a,r,i,e,c,l,g,n])},Gt=({containerRef:t,text:e,streaming:n,imageMode:r="inline",rawHtml:o="escape",syntaxVars:a,ctx:i,domCacheKey:s,tableLayoutSettled:c})=>{E.useEffect(()=>{Bn()},[]);const l=E.useRef(null),u=E.useRef(0),g=E.useRef(null),f=E.useContext(pn),m=E.useRef(null),p=E.useCallback(()=>{m.current?.(),m.current=null},[]);E.useEffect(()=>p,[p]);const k=E.useRef(null),C=E.useCallback(()=>{const y=t.current;if(y){if(!l.current){if(!W(y))return;l.current=cr(y);return}l.current.refresh()}},[t]),{tableCellWrap:S}=i,N=E.useCallback(()=>{if(!c)return;const y=g.current;y!==null&&window.cancelAnimationFrame(y);const b=u.current,w=window.requestAnimationFrame(()=>{if(g.current!==w||(g.current=null,u.current!==b))return;const d=t.current,h=d?.querySelector("[data-markdown-content]")??d;h&&Cr(h,S)});g.current=w},[t,S,c]);E.useEffect(()=>()=>{const y=g.current;y!==null&&(window.cancelAnimationFrame(y),g.current=null)},[]),E.useLayoutEffect(()=>{u.current+=1,k.current=null},[i,r,o,n,e]),E.useLayoutEffect(()=>{if(!s)return;const y=t.current,b=y?.querySelector("[data-markdown-content]")??y;if(!b||b.childNodes.length>0)return;const w=mt.take(s);if(w){b.appendChild(w),Ie(b);const d=Fe(i);for(const h of Array.from(b.children))h.setAttribute(j,d);for(const[h,A]of Object.entries(a))b.style.setProperty(h,A);Qe(b,i.codeBlockLineWrap,i.labels),yr(b,i.tableCellWrap,i.labels),k.current={key:s,copiedLabel:i.labels.copied},ae("ui.markdown_renderer.dom_cache.hit")}},[t,i,s,a,e.length]),E.useLayoutEffect(()=>{const y=t.current,b=y?.querySelector("[data-markdown-content]")??y;if(b)return()=>{const w=k.current;if(!w||b.childNodes.length===0||W(b)||Array.from(b.children).some(x=>!x.hasAttribute("data-md-id"))||b.querySelector("[data-md-copy-pending]"))return;const d=window.getSelection();if(d?.rangeCount&&!d.isCollapsed&&d.getRangeAt(0).intersectsNode(b))return;const h=b.querySelector("[data-md-menu]:not(.hidden)"),A=Array.from(b.querySelectorAll("[data-md-action]")).some(x=>x.getAttribute("title")===w.copiedLabel);if(h||A)return;const v=document.createDocumentFragment();v.append(...Array.from(b.childNodes)),mt.store({...w.key,fragment:v}),ae("ui.markdown_renderer.dom_cache.capture")}},[t]),E.useLayoutEffect(()=>{const y=t.current,b=y?.querySelector("[data-markdown-content]")??y;if(!b)return;const w=Fe(i);if(e&&b.childNodes.length===0){const d=n?null:je(e,r,o);if(d){let h=!1;for(const A of d){const v=document.createElement("div");v.setAttribute("data-md-block",""),v.style.display="contents",v.innerHTML=A.html,he(v,i),v.setAttribute("data-md-id",A.id),v.setAttribute(j,w),h||=W(v),b.appendChild(v)}h&&C()}else{!n&&!m.current&&(m.current=f?.hold()??null);const h=document.createElement("div");h.setAttribute("data-md-block",""),h.style.display="contents",h.innerHTML=Tn(e,r,o),he(h,i),h.setAttribute(j,w),b.appendChild(h),W(h)&&C()}Ie(b)}else!l.current&&W(b)&&C()},[t,e,n,r,o,i,C,f]),E.useEffect(()=>()=>{l.current?.cleanup(),l.current=null},[]),E.useEffect(()=>{const y=t.current;if(!y)return;const b=y.querySelector("[data-markdown-content]")??y;let w=!0;const d=u.current,h=Fe(i);if(!n){const A=je(e,r,o);if(A&&Qr(b,A,h)){k.current=s?{key:s,copiedLabel:i.labels.copied}:null,ae("ui.markdown_renderer.settled_paint.reused"),N(),p();return}}return Nn(e,n,r,o).then(A=>{if(!w||u.current!==d)return;const v=Array.from(b.children),x=Array.from(b.querySelectorAll("details[data-md-details]")).map(L=>({summary:L.querySelector("summary")?.textContent,open:L.open}));let O=0;A.forEach((L,P)=>{let M=v[P],B=!1;if(M||(M=document.createElement("div"),M.setAttribute("data-md-block",""),M.style.display="contents",b.appendChild(M),B=!0),M.getAttribute("data-md-id")===L.id){if(M.getAttribute(j)!==h){const R=W(M);R&&(l.current?.cleanup(),l.current=null);const T=document.createElement("div");T.setAttribute("data-md-block",""),T.style.display="contents",T.innerHTML=L.html,he(T,i),T.setAttribute("data-md-id",L.id),T.setAttribute(j,h),M.replaceWith(T),(R||W(T))&&C()}!l.current&&W(M)&&C();return}const I=document.createElement("div");if(I.innerHTML=L.html,he(I,i),B&&n&&P>0){const R=Math.min(O,4)*55;O+=1;for(const T of Array.from(I.children))T.classList.add("oc-md-block-enter"),R>0&&T instanceof HTMLElement&&T.style.setProperty("--oc-md-enter-delay",`${R}ms`)}const q=W(M),z=W(I);Qt(M,I,{childrenOnly:!0,onBeforeElUpdated:(R,T)=>(R.matches("details[data-md-details]")&&T.matches("details[data-md-details]")&&R.querySelector("summary")?.textContent===T.querySelector("summary")?.textContent&&T.toggleAttribute("open",R.hasAttribute("open")),!R.isEqualNode(T))}),M.setAttribute("data-md-id",L.id),M.setAttribute(j,h),(q||z||W(M))&&C()});const D=W(b);let F=!1;for(let L=v.length-1;L>=A.length;L-=1){const P=v[L];P&&W(P)&&(F=!0),P?.remove()}Ie(b),(F||v.length>A.length&&D)&&C(),x.length>0&&b.querySelectorAll("details[data-md-details]").forEach((L,P)=>{const M=x[P];M&&M.summary===L.querySelector("summary")?.textContent&&(L.open=M.open)}),k.current=s?{key:s,copiedLabel:i.labels.copied}:null,N(),p()}),()=>{w=!1}},[t,i,s,r,o,C,p,N,n,e]),E.useEffect(()=>{const y=t.current;if(y)return Mr(y,i)},[t,i]),E.useEffect(()=>{const y=t.current,b=y?.querySelector("[data-markdown-content]")??y;if(b)for(const[w,d]of Object.entries(a))b.style.setProperty(w,d)},[t,a]),E.useEffect(()=>{const y=t.current,b=y?.querySelector("[data-markdown-content]")??y;b&&(i.deferCodeLineNumberSync||Qe(b,i.codeBlockLineWrap,i.labels))},[t,i.codeBlockLineWrap,i.deferCodeLineNumberSync,i.labels])},Yt=t=>t==="tool"?"markdown-content markdown-tool":t==="reasoning"?"markdown-content markdown-reasoning":"markdown-content leading-relaxed",oo=t=>{const e=de.c(40),{content:n,part:r,messageId:o,isAnimated:a,skipFadeIn:i,className:s,isStreaming:c,disableStreamAnimation:l,variant:u,onShowPopup:g,enableFileReferences:f}=t,m=a===void 0?!0:a,p=i===void 0?!1:i,k=c===void 0?!1:c,C=l===void 0?!1:l,S=u===void 0?"assistant":u,N=f===void 0?!0:f;ae("ui.markdown_renderer.render"),k&&ae("ui.markdown_renderer.render.streaming"),Cn("ui.markdown_renderer.content_len",n.length);const y=Bt(),{editor:b,runtime:w}=bt(),d=E.useRef(null),h=wt()??"",A=V(co);let v;e[0]!==h||e[1]!==A?(v=H=>{h&&A(h,H)},e[0]=h,e[1]=A,e[2]=v):v=e[2];const x=v,O=k&&!C;let D;e[3]!==g?(D={containerRef:d,onShowPopup:g,enableFullscreen:zt,enablePanZoom:re.showPanZoomControls},e[3]=g,e[4]=D):D=e[4],Xt(D);const F=N&&!k;let L;e[5]!==b||e[6]!==h||e[7]!==w.isVSCode||e[8]!==F?(L={containerRef:d,effectiveDirectory:h,editor:b,preferRuntimeEditor:w.isVSCode,enabled:F},e[5]=b,e[6]=h,e[7]=w.isVSCode,e[8]=F,e[9]=L):L=e[9],jt(L);let P;e[10]===Symbol.for("react.memo_cache_sentinel")?(P={containerRef:d},e[10]=P):P=e[10],$t(P);let M;e[11]!==y?(M=yt(y),e[11]=y,e[12]=M):M=e[12];const B=M,I=Zt(y,O,h?x:void 0,re),{locale:q}=At(),z=S==="assistant"?"label":"local",R=r&&(r.type==="text"||r.type==="reasoning")&&r.time?.end!==void 0?r:null;let T;e[13]===Symbol.for("react.memo_cache_sentinel")?(T=vn(),e[13]=T):T=e[13];const Jt=T,He=R?.sessionID,Ve=R?.messageID,Ke=R?.id;let Ee;e:{if(k||!He||!Ve||!Ke||n.length===0||n.length>eo){Ee=null;break e}const H=`${Jt}\0${He}`,Te=`${Ve}\0${Ke}\0${z}\0${n.length}`;let fe;e[14]!==h||e[15]!==q||e[16]!==H||e[17]!==Te?(fe={scope:H,id:Te,locale:q,directory:h},e[14]=h,e[15]=q,e[16]=H,e[17]=Te,e[18]=fe):fe=e[18],Ee=fe}const Se=Ee,Le=`markdown-${r?.id?`part-${r.id}`:`message-${o}`}`,Me=!k;let ue;e[19]!==n||e[20]!==I||e[21]!==Se||e[22]!==z||e[23]!==O||e[24]!==B||e[25]!==Me?(ue={containerRef:d,text:n,streaming:O,imageMode:z,syntaxVars:B,ctx:I,domCacheKey:Se,tableLayoutSettled:Me},e[19]=n,e[20]=I,e[21]=Se,e[22]=z,e[23]=O,e[24]=B,e[25]=Me,e[26]=ue):ue=e[26],Gt(ue);let G;e[27]!==s?(G=kt("break-words w-full min-w-0",s),e[27]=s,e[28]=G):G=e[28];let Y;e[29]!==S?(Y=Yt(S),e[29]=S,e[30]=Y):Y=e[30];let J;e[31]!==Y?(J=se.jsx("div",{className:Y,"data-markdown-content":!0}),e[31]=Y,e[32]=J):J=e[32];let me;e[33]!==G||e[34]!==J?(me=se.jsx("div",{className:G,ref:d,children:J}),e[33]=G,e[34]=J,e[35]=me):me=e[35];const pe=me;if(m){let H;return e[36]!==Le||e[37]!==pe||e[38]!==p?(H=se.jsx(bn,{skipAnimation:p,children:pe},Le),e[36]=Le,e[37]=pe,e[38]=p,e[39]=H):H=e[39],H}return pe},ps=E.memo(oo,(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),io=t=>{const e=de.c(31),{content:n,className:r,variant:o,disableLinkSafety:a,stripFrontmatter:i,onShowPopup:s,mermaidControls:c,allowMermaidWheelEvents:l,enableFileReferences:u,allowRawHtml:g}=t,f=o===void 0?"assistant":o,m=i===void 0?!1:i,p=c===void 0?re:c,k=l===void 0?!1:l,C=u===void 0?!0:u,S=g===void 0?!1:g,{editor:N,runtime:y}=bt(),b=Bt(),w=E.useRef(null),d=wt()??"";let h;e[0]!==n||e[1]!==m?(h=m?qr(n):n,e[0]=n,e[1]=m,e[2]=h):h=e[2];const A=h;let v;e[3]!==k||e[4]!==p.showPanZoomControls||e[5]!==s?(v={containerRef:w,onShowPopup:s,enableFullscreen:zt,enablePanZoom:p.showPanZoomControls,allowMermaidWheelEvents:k},e[3]=k,e[4]=p.showPanZoomControls,e[5]=s,e[6]=v):v=e[6],Xt(v);let x;e[7]!==N||e[8]!==d||e[9]!==C||e[10]!==y.isVSCode?(x={containerRef:w,effectiveDirectory:d,editor:N,preferRuntimeEditor:y.isVSCode,enabled:C},e[7]=N,e[8]=d,e[9]=C,e[10]=y.isVSCode,e[11]=x):x=e[11],jt(x);const O=!a;let D;e[12]!==O?(D={containerRef:w,enabled:O},e[12]=O,e[13]=D):D=e[13],$t(D);let F;e[14]!==b?(F=yt(b),e[14]=b,e[15]=F):F=e[15];const L=F,P=Zt(b,!1,void 0,p),M=S?"sanitize":"escape";let B;e[16]!==P||e[17]!==A||e[18]!==L||e[19]!==M?(B={containerRef:w,text:A,streaming:!1,imageMode:"local",rawHtml:M,syntaxVars:L,ctx:P,tableLayoutSettled:!0},e[16]=P,e[17]=A,e[18]=L,e[19]=M,e[20]=B):B=e[20],Gt(B);let I;e[21]!==r?(I=kt("break-words w-full min-w-0",r),e[21]=r,e[22]=I):I=e[22];let q;e[23]!==f?(q=Yt(f),e[23]=f,e[24]=q):q=e[24];const z=S?"":void 0;let R;e[25]!==q||e[26]!==z?(R=se.jsx("div",{className:q,"data-markdown-content":!0,"data-markdown-html":z}),e[25]=q,e[26]=z,e[27]=R):R=e[27];let T;return e[28]!==I||e[29]!==R?(T=se.jsx("div",{className:I,ref:w,children:R}),e[28]=I,e[29]=R,e[30]=T):T=e[30],T},fs=E.memo(io,(t,e)=>{const n=t.mermaidControls??re,r=e.mermaidControls??re;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&&t.allowRawHtml===e.allowRawHtml});function so(t){wn(t)}function ao(t){yn(t)}function lo(t){An(t.sessionId,t.messageId)}function co(t){return t.openContextPreview}export{ps as MarkdownRenderer,fs as SimpleMarkdownRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as D,j as e,R as d,f as J}from"./vendor-react-BUCujlKS.js";import{f as Q,B as R,a8 as Y,g$ as me,g as ue,O as Ne,h as ne,I as _}from"./useAppFontEffects-DCqCVGlT.js";import{W as V,dR as Se,dO as le,dK as q,L as $,aL as H,fC as Re,aT as pe,a2 as he,h as X,ba as xe,z as fe,$ as re}from"./index-vQ1Pg1cr.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-CxRSdNoV.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-base-ui-DX96QhTP.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-use-sync-external-store-D6wYuSt-.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-tanstack-react-virtual-H_JmXOFV.js";import"./vendor-tanstack-virtual-core-Dxc8hSTB.js";import"./vendor-framer-motion-Bq3iTZ6r.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.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-ByBn5zIW.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-G3UuR-be.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-Bniqp7p5.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-CpGYXGuo.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DW1FQz9_.js";import"./vendor-codemirror-lang-json-58T70Hqs.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B07blnnZ.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-DaH9adfE.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BLKnlLP4.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-q2bKO1EM.js";import"./vendor-codemirror-lang-python-B7ClrMIT.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-DpmhalwN.js";import"./vendor-legendapp-list-DViGR95I.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-opencode-client-DHzhmLwV.js";function Le(i){switch(i){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(i){return i==="wrong-service"||i==="unreachable"||i==="incompatible"}function ge({onBack:i,showBackButton:t=!0,initialUrl:s="",initialLabel:l="",isRecoveryMode:n=!1,onConnect:c,onSwitchToLocal:u,showInstancePicker:r=!1}){const{t:o}=Q(),[j,N]=D.useState(s),[C,U]=D.useState(l),[K,x]=D.useState("idle"),[p,g]=D.useState(null),[y,w]=D.useState(""),[T,L]=D.useState([]),[f,k]=D.useState(()=>r?"instances":"add"),[b,S]=D.useState("");D.useEffect(()=>{r&&V().then(h=>L(h.hosts)).catch(h=>{w(h instanceof Error?h.message:String(h))})},[r]);const v=Se(j),A=v?.persistedUrl??null,O=D.useCallback(h=>{N(h.target.value),x("idle"),g(null),w("")},[]),M=D.useCallback(h=>{U(h.target.value)},[]),E=D.useCallback(async()=>{if(A){x("testing"),g(null),w("");try{const h=await le(A);g(h),x(h.status==="ok"||h.status==="update-recommended"?"success":"error")}catch(h){w(h instanceof Error?h.message:o("onboarding.remoteConnection.errors.connectionTestFailed")),x("error")}}},[A,o]),m=D.useCallback(async()=>{if(!v)return;const h=v.persistedUrl;x("testing"),g(null),w("");try{const F=await le(h);if(g(F),oe(F.status)){x("error");return}const Z=await V(),Ce=C.trim()||h,ee=Z.hosts.find(G=>G.url===h),te=ee?ee.id:`host-${Date.now().toString(16)}`,ie={id:te,label:Ce,url:h,apiUrl:h},ke=ee?Z.hosts.map(G=>G.id===te?ie:G):[...Z.hosts,ie];if(await q({hosts:ke,defaultHostId:te,initialHostChoiceCompleted:!0}),c?.(),v.redeemUrl){window.location.assign(v.redeemUrl);return}$()&&await H()}catch(F){w(F instanceof Error?F.message:o("onboarding.remoteConnection.errors.failedToSaveConnection")),x("error")}},[v,C,c,o]),B=D.useCallback(async h=>{const F=await V();await q({hosts:F.hosts,defaultHostId:h,initialHostChoiceCompleted:!0}),await H()},[]),W=D.useCallback(async()=>{x("testing"),w("");try{const h=await V(),F=await Re(b,h.hosts);await q({hosts:F.hosts,defaultHostId:F.hostId,initialHostChoiceCompleted:!0}),await H()}catch(h){w(h instanceof Error&&h.message==="invalid-connect-link"?o("settings.remoteInstances.direct.error.invalidConnectLink"):o("onboarding.remoteConnection.errors.failedToSaveConnection")),x("error")}},[b,o]),a=K==="testing",I=A!==null&&!a,P=A!==null&&!a&&!oe(p?.status??null),z=Le(p?.status??null),ve=p?.status==="ok",we=p?.status==="update-recommended",je=p?.status==="auth",ae=oe(p?.status??null);return r&&f==="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")})]}),y?e.jsx("div",{className:"text-sm text-[var(--status-error)]",children:y}):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(h=>e.jsx(R,{variant:"outline",className:"w-full justify-start",onClick:()=>{B(h.id)},children:e.jsx("span",{className:"min-w-0 truncate",children:h.label})},h.id))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(R,{variant:"outline",className:"flex-1",onClick:()=>k("import"),children:o("settings.remoteInstances.direct.import.action")}),e.jsx(R,{className:"flex-1",onClick:()=>k("add"),children:o("settings.remoteInstances.direct.actions.add")})]})]})}):r&&f==="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(R,{variant:"ghost",onClick:()=>k("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(Y,{value:b,onChange:h=>S(h.target.value),placeholder:o("settings.remoteInstances.direct.import.placeholder"),disabled:a,autoFocus:!0}),y?e.jsx("div",{className:"text-sm text-[var(--status-error)]",children:y}):null,e.jsx(R,{onClick:()=>{W()},disabled:a||!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||r)&&e.jsx("div",{className:"flex items-center",children:e.jsx(R,{variant:"ghost",onClick:r?()=>k("instances"):i,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(Y,{id:"remote-url",type:"url",value:j,onChange:O,placeholder:o("onboarding.remoteConnection.field.serverAddressPlaceholder"),disabled:a})]}),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(Y,{id:"remote-label",type:"text",value:C,onChange:M,placeholder:o("onboarding.remoteConnection.field.namePlaceholder"),disabled:a})]})]}),p&&ve&&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:p.latencyMs})}),p&&je&&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")}),p&&we&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-warning)",color:"var(--status-warning)"},children:z?o(z):null}),p&&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:z?o(z):null})]}),e.jsx("div",{className:"text-xs opacity-80",children:p.status==="unreachable"?o("onboarding.remoteConnection.status.suggestionsUnreachable"):o("onboarding.remoteConnection.status.suggestionsWrongService")})]}),y&&e.jsx("div",{className:"rounded-lg border p-3 text-sm",style:{borderColor:"var(--status-error)",color:"var(--status-error)"},children:y}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(R,{variant:"outline",onClick:E,disabled:!I,children:o(a?"onboarding.remoteConnection.actions.testing":"onboarding.remoteConnection.actions.testConnection")}),e.jsx(R,{onClick:m,disabled:!P,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(R,{variant:"outline",size:"sm",onClick:i,className:"flex-1",children:o("onboarding.remoteConnection.actions.chooseDifferentServer")}),!n&&u&&e.jsx(R,{variant:"outline",size:"sm",onClick:u,className:"flex-1",children:o("onboarding.remoteConnection.actions.useLocalInstead")})]})]})]})})}const Ue="curl -fsSL https://opencode.ai/v2/install | bash",be="npm install -g @opencode/cli",Te="https://opencode.ai/download",ce=2500;function Ie(i){const t=J.c(9),{windows:s,onCopy:l,copyTitle:n}=i;let c;t[0]!==s?(c=e.jsx("code",{className:"flex-1 min-w-0 text-left overflow-x-auto whitespace-nowrap",children:s?e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:be}):e.jsxs(e.Fragment,{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/v2/install"}),e.jsx("span",{className:"text-muted-foreground",children:" | "}),e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"bash"})]})}),t[0]=s,t[1]=c):c=t[1];let u;t[2]===Symbol.for("react.memo_cache_sentinel")?(u=e.jsx(_,{name:"file-copy",className:"h-4 w-4"}),t[2]=u):u=t[2];let r;t[3]!==n||t[4]!==l?(r=e.jsx("button",{onClick:l,className:"inline-flex items-center text-muted-foreground hover:text-foreground transition-colors shrink-0",title:n,"aria-label":n,children:u}),t[3]=n,t[4]=l,t[5]=r):r=t[5];let o;return t[6]!==c||t[7]!==r?(o=e.jsxs("div",{className:"flex items-center justify-between gap-3 w-full",children:[c,r]}),t[6]=c,t[7]=r,t[8]=o):o=t[8],o}function Ke({onCliAvailable:i,localAvailable:t=!0}){const{t:s}=Q(),[l,n]=d.useState(!1),[c,u]=d.useState(!1),[r,o]=d.useState(!1),[j,N]=d.useState(!1),[C,U]=d.useState(""),K=me(a=>a.opencodeBinary),[x,p]=d.useState("unknown"),[g,y]=d.useState(()=>t?"local":"remote"),[w,T]=d.useState(!1),[L,f]=d.useState(!1);d.useEffect(()=>{u($())},[]),d.useEffect(()=>{if(typeof navigator>"u"){p("unknown");return}const a=navigator.userAgent||"";/Windows/i.test(a)?p("windows"):/Macintosh|Mac OS X/i.test(a)?p("macos"):/Linux/i.test(a)?p("linux"):p("unknown")},[]),d.useEffect(()=>{let a=!1;return(async()=>{try{const I=await pe();if(!I||a)return;const P=I.opencodeBinary??"";P&&U(P)}catch{}})(),()=>{a=!0}},[]);const k=d.useCallback(async a=>{const I=a.target;I.closest(".app-region-no-drag")||I.closest("button, a, input, select, textarea, code, summary, details")||a.button===0&&c&&await he()},[c]),b=d.useCallback(async()=>{try{const a=await X("/health");if(!a.ok)return!1;const I=await a.json();return I.openCodeRunning===!0||I.isOpenCodeReady===!0}catch{return!1}},[]),S=d.useCallback(async a=>{if(!c)return;const I=await V();await q({...I,...a==="local"?{defaultHostId:"local"}:{},initialHostChoiceCompleted:!0})},[c]),v=d.useCallback(async()=>{c&&await S("local"),i?.()},[c,i,S]);d.useEffect(()=>{if(!t||g!=="local")return;let a=!1,I=null;const P=async()=>{if(!a){try{const z=await b();if(a)return;if(z){await v();return}}catch{}a||(I=setTimeout(P,ce))}};return I=setTimeout(P,ce),()=>{a=!0,I&&clearTimeout(I)}},[g,b,v,t]);const A=d.useCallback(async()=>{N(!0);try{await b()&&await v()}finally{N(!1)}},[b,v]),O=d.useCallback(async()=>{if(!(typeof window>"u")&&c)try{const a=await xe();a.success&&a.path&&a.path.trim().length>0&&U(a.path.trim())}catch{}},[c]),M=d.useCallback(async()=>{o(!0);try{if(await fe({opencodeBinary:C.trim()}),c){await S("local"),await H();return}await X("/api/config/reload",{method:"POST"})}finally{setTimeout(()=>o(!1),1e3)}},[c,C,S]),E=d.useCallback(async()=>{const a=await ue(x==="windows"?be:Ue);a.ok?(n(!0),setTimeout(()=>n(!1),2e3)):console.error("Failed to copy:",a.error)},[x]),m=Te,B=x==="windows"?"C:\\Users\\you\\AppData\\Roaming\\npm\\opencode.cmd":x==="linux"?"/home/you/.opencode/bin/opencode":"/Users/you/.opencode/bin/opencode",W=t&&(!c||g==="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:k,children:e.jsxs("div",{className:"w-full max-w-md",children:[e.jsxs("header",{className:"flex flex-col items-center text-center",children:[e.jsx(Ne,{width:48,height:48}),e.jsx("h1",{className:"mt-6 text-xl font-semibold tracking-tight text-foreground",children:s("onboarding.chooser.title")}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:s("onboarding.chooser.description")})]}),c&&t&&e.jsxs("div",{role:"tablist",className:"app-region-no-drag mt-7 flex gap-1 rounded-lg border border-border p-1",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":g==="local",className:ne("flex-1 rounded-md px-3 py-1.5 text-sm transition-colors",g==="local"?"bg-[var(--interactive-selection)] text-[var(--interactive-selection-foreground)]":"text-muted-foreground hover:text-foreground"),onClick:()=>y("local"),children:s("onboarding.chooser.tabs.localInstall")}),e.jsx("button",{type:"button",role:"tab","aria-selected":g==="remote",className:ne("flex-1 rounded-md px-3 py-1.5 text-sm transition-colors",g==="remote"?"bg-[var(--interactive-selection)] text-[var(--interactive-selection-foreground)]":"text-muted-foreground hover:text-foreground"),onClick:()=>y("remote"),children:s("onboarding.chooser.tabs.connectRemote")})]}),c&&g==="remote"?e.jsx("div",{className:"app-region-no-drag mt-6",children:e.jsx(ge,{onBack:()=>t&&y("local"),showBackButton:!1,showInstancePicker:!t,onSwitchToLocal:t?()=>y("local"):void 0})}):null,W&&e.jsxs("div",{className:"mt-6",children:[x==="windows"&&e.jsxs("div",{className:"mb-4 rounded-lg border border-border 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-center text-sm leading-relaxed text-muted-foreground text-balance",children:s("onboarding.localSetup.intro")}),e.jsx("div",{className:"app-region-no-drag mt-3 rounded-lg border border-border bg-background/60 px-4 py-3 font-mono text-sm",children:l?e.jsxs("div",{className:"flex items-center gap-2",style:{color:"var(--status-success)"},children:[e.jsx(_,{name:"check",className:"h-4 w-4"}),s("onboarding.common.status.copiedToClipboard")]}):e.jsx(Ie,{windows:x==="windows",onCopy:E,copyTitle:s("onboarding.common.copyToClipboard")})}),e.jsxs("div",{className:"app-region-no-drag mt-3 flex items-center gap-2.5 px-1",role:"status","aria-live":"polite",children:[e.jsx("span",{className:"relative inline-flex h-2 w-2 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.jsxs("span",{className:"min-w-0 flex-1 text-xs text-muted-foreground",children:[e.jsx("span",{className:"text-foreground",children:s("onboarding.localSetup.status.watching")})," · ",s("onboarding.localSetup.status.autoContinue")]}),e.jsx("button",{type:"button",onClick:A,disabled:j,className:"shrink-0 text-xs text-muted-foreground transition-colors hover:text-foreground disabled:opacity-50",children:s(j?"onboarding.localSetup.actions.checking":"onboarding.localSetup.actions.checkNow")})]}),e.jsxs("div",{className:"mt-6 divide-y divide-border/60 border-y border-border/60",children:[e.jsxs("details",{className:"app-region-no-drag group",open:w,onToggle:a=>T(a.currentTarget.open),children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center justify-between py-3 text-sm text-muted-foreground transition-colors hover:text-foreground [&::-webkit-details-marker]:hidden",children:[e.jsx("span",{children:s("onboarding.localSetup.advanced.title")}),e.jsx(_,{name:"arrow-down-s",className:"h-4 w-4 transition-transform group-open:rotate-180"})]}),e.jsxs("div",{className:"space-y-2 pb-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(Y,{value:K??C,onChange:a=>U(a.target.value),placeholder:B,disabled:r||K!==null,className:"flex-1 font-mono text-xs"}),K===null&&e.jsxs(e.Fragment,{children:[e.jsx(R,{type:"button",variant:"secondary",size:"sm",onClick:O,disabled:r||!c,children:s("onboarding.localSetup.actions.browse")}),e.jsx(R,{type:"button",size:"sm",onClick:M,disabled:r||!C.trim(),children:s("onboarding.localSetup.actions.apply")})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground/70",children:s(K===null?"onboarding.localSetup.helper.saveAndReload":"onboarding.localSetup.helper.pinnedByAdministrator")})]})]}),e.jsxs("details",{className:"app-region-no-drag group",open:L,onToggle:a=>f(a.currentTarget.open),children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center justify-between py-3 text-sm text-muted-foreground transition-colors hover:text-foreground [&::-webkit-details-marker]:hidden",children:[e.jsx("span",{children:s("onboarding.localSetup.troubleshoot.title")}),e.jsx(_,{name:"arrow-down-s",className:"h-4 w-4 transition-transform group-open:rotate-180"})]}),e.jsx("ul",{className:"list-disc space-y-1.5 pb-4 pl-4 text-xs text-muted-foreground",children:x==="windows"?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")})]})})]})]}),e.jsx("div",{className:"app-region-no-drag mt-5 text-center",children:e.jsxs("a",{href:m,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground",children:[s(x==="windows"?"onboarding.localSetup.docs.windows":"onboarding.localSetup.docs.default"),e.jsx(_,{name:"external-link",className:"h-3 w-3"})]})})]})]})})}const De="curl -fsSL https://opencode.ai/v2/install | bash",ye="npm install -g @opencode/cli",Ae="https://opencode.ai/download";function _e(i){const t=J.c(9),{windows:s,onCopy:l,copyTitle:n}=i;let c;t[0]!==s?(c=e.jsx("code",{className:"flex-1 min-w-0 text-left overflow-x-auto whitespace-nowrap",children:s?e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:ye}):e.jsxs(e.Fragment,{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/v2/install"}),e.jsx("span",{className:"text-muted-foreground",children:" | "}),e.jsx("span",{style:{color:"var(--syntax-keyword)"},children:"bash"})]})}),t[0]=s,t[1]=c):c=t[1];let u;t[2]===Symbol.for("react.memo_cache_sentinel")?(u=e.jsx(_,{name:"file-copy",className:"h-4 w-4"}),t[2]=u):u=t[2];let r;t[3]!==n||t[4]!==l?(r=e.jsx("button",{onClick:l,className:"inline-flex items-center text-muted-foreground hover:text-foreground transition-colors",title:n,"aria-label":n,children:u}),t[3]=n,t[4]=l,t[5]=r):r=t[5];let o;return t[6]!==c||t[7]!==r?(o=e.jsxs("div",{className:"flex items-center justify-center gap-3",children:[c,r]}),t[6]=c,t[7]=r,t[8]=o):o=t[8],o}const Oe=3e4;function Ee({onBack:i,onCliAvailable:t,isFromRecovery:s=!1,onSwitchToRemote:l}){const{t:n}=Q(),[c,u]=d.useState(!1),[r,o]=d.useState(!1),[j,N]=d.useState(!1),[C,U]=d.useState(!1),[K,x]=d.useState(!1),[p,g]=d.useState(null),[y,w]=d.useState(""),T=me(m=>m.opencodeBinary),[L,f]=d.useState("unknown");d.useEffect(()=>{const m=setTimeout(()=>o(!0),Oe);return()=>clearTimeout(m)},[]),d.useEffect(()=>{N($())},[]),d.useEffect(()=>{if(typeof navigator>"u"){f("unknown");return}const m=navigator.userAgent||"";if(/Windows/i.test(m)){f("windows");return}if(/Macintosh|Mac OS X/i.test(m)){f("macos");return}if(/Linux/i.test(m)){f("linux");return}f("unknown")},[]),d.useEffect(()=>{let m=!1;return(async()=>{try{const B=await pe();if(!B||m)return;const W=B.opencodeBinary??"";W&&w(W)}catch{}})(),()=>{m=!0}},[]);const k=d.useCallback(async m=>{m.target.closest("button, a, input, select, textarea, code")||m.button===0&&j&&await he()},[j]),b=d.useCallback(async()=>{try{const m=await X("/health");if(!m.ok)return!1;const B=await m.json();return B.openCodeRunning===!0||B.isOpenCodeReady===!0}catch{return!1}},[]),S=d.useCallback(async()=>{if(!(typeof window>"u")&&j)try{const m=await xe();m.success&&m.path&&m.path.trim().length>0&&w(m.path.trim())}catch{}},[j]),v=d.useCallback(async()=>{U(!0);try{if(await fe({opencodeBinary:y.trim()}),j){await H();return}await X("/api/config/reload",{method:"POST"})}finally{setTimeout(()=>U(!1),1e3)}},[j,y]),A=d.useCallback(async()=>{const m=await ue(L==="windows"?ye:De);m.ok?(u(!0),setTimeout(()=>u(!1),2e3)):console.error("Failed to copy:",m.error)},[L]),O=d.useCallback(async()=>{x(!0),g(null);try{await b()?t?.():g(n("onboarding.localSetup.errors.cliNotReady"))}catch(m){g(m instanceof Error?m.message:n("onboarding.localSetup.errors.detectionFailed"))}finally{x(!1)}},[b,t,n]),M=Ae,E=L==="windows"?"C:\\Users\\you\\AppData\\Roaming\\npm\\opencode.cmd":L==="linux"?"/home/you/.opencode/bin/opencode":"/Users/you/.opencode/bin/opencode";return e.jsxs("div",{className:"h-full flex items-center justify-center bg-transparent p-8 relative cursor-default select-none",onMouseDown:k,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(R,{variant:"ghost",onClick:i,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")})]}),L==="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:c?e.jsxs("div",{className:"flex items-center justify-center gap-2",style:{color:"var(--status-success)"},children:[e.jsx(_,{name:"check",className:"h-4 w-4"}),n("onboarding.common.status.copiedToClipboard")]}):e.jsx(_e,{windows:L==="windows",onCopy:A,copyTitle:n("onboarding.common.copyToClipboard")})})}),e.jsxs("a",{href:M,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(L==="windows"?"onboarding.localSetup.docs.windows":"onboarding.localSetup.docs.default"),e.jsx(_,{name:"external-link",className:"h-3 w-3"})]}),p&&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:p}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(R,{type:"button",onClick:O,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(Y,{value:T??y,onChange:m=>w(m.target.value),placeholder:E,disabled:C||T!==null,className:"flex-1 font-mono text-xs"}),T===null&&e.jsxs(e.Fragment,{children:[e.jsx(R,{type:"button",variant:"secondary",onClick:S,disabled:C||!j,children:n("onboarding.localSetup.actions.browse")}),e.jsx(R,{type:"button",onClick:v,disabled:C,children:n("onboarding.localSetup.actions.apply")})]})]}),e.jsx("div",{className:"text-xs text-muted-foreground/70",children:n(T===null?"onboarding.localSetup.helper.saveAndReload":"onboarding.localSetup.helper.pinnedByAdministrator")})]})}),s&&l&&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(R,{variant:"link",onClick:l,children:n("onboarding.localSetup.actions.connectRemoteServer")})]})]}),r&&e.jsx("div",{className:"absolute bottom-8 left-0 right-0 text-center space-y-1",children:L==="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(i,t){if(i?.trim())return re(i.trim());if(t)return re(t)}function Fe(i,t,s){switch(i){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 l=se(t,s);return{title:"Remote Server Unreachable",description:`Could not connect to "${l||"the remote server"}". Check your network connection and verify the server address.`,titleKey:"onboarding.desktopRecovery.remoteUnreachable.title",descriptionKey:"onboarding.desktopRecovery.remoteUnreachable.description",descriptionParams:l?{host:l}: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 l=se(t,s);return{title:"Incompatible Server",description:`The server at "${l||"unknown"}" is not running OpenChamber. Verify the address points to an OpenChamber server.`,titleKey:"onboarding.desktopRecovery.incompatibleServer.title",descriptionKey:"onboarding.desktopRecovery.incompatibleServer.description",descriptionParams:l?{host:l}: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 l=se(t,s);return{title:"Server Update Required",description:`The OpenChamber server at "${l||"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:l?{host:l}: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 l=i;throw new Error(`Unknown recovery variant: ${l}`)}}}function Me(i){switch(i){case"local":return e.jsx(_,{name:"macbook",className:"h-8 w-8"});case"remote":return e.jsx(_,{name:"server",className:"h-8 w-8"})}}function Be({variant:i,hostLabel:t,hostUrl:s,onRetry:l,onUseLocal:n,onUseRemote:c,isRetrying:u=!1}){const{t:r}=Q(),o=Fe(i,t,s),j=o.retryLabelKey??"onboarding.desktopRecovery.actions.retryConnection",N=d.useMemo(()=>{if(o.descriptionParams?.host)return o.descriptionParams;if(i==="remote-unreachable")return{host:r("onboarding.desktopRecovery.placeholders.remoteServer")};if(i==="remote-wrong-service"||i==="remote-incompatible")return{host:r("onboarding.desktopRecovery.placeholders.unknownServer")}},[o.descriptionParams,r,i]);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:Me(o.iconKey)})}),e.jsx("h1",{className:"typography-ui-header text-xl font-semibold text-foreground",children:r(o.titleKey)}),e.jsx("p",{className:"text-muted-foreground text-sm max-w-sm",children:r(o.descriptionKey,N)})]}),s&&(i==="remote-unreachable"||i==="remote-wrong-service"||i==="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:r("onboarding.remoteConnection.field.serverAddress")}),e.jsx("div",{className:"font-mono text-sm text-foreground truncate",children:re(s)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[o.showRetry&&l&&e.jsxs(R,{onClick:l,disabled:u,className:"w-full",children:[e.jsx(_,{name:"refresh",className:ne("h-4 w-4",u&&"animate-spin")}),r(u?"onboarding.desktopRecovery.actions.retrying":j)]}),e.jsxs("div",{className:"flex gap-2",children:[o.showUseLocal&&n&&e.jsxs(R,{variant:"outline",onClick:n,disabled:u,className:"flex-1",children:[e.jsx(_,{name:"macbook",className:"h-4 w-4"}),r(o.useLocalLabelKey)]}),o.showUseRemote&&c&&e.jsxs(R,{variant:"outline",onClick:c,disabled:u,className:"flex-1",children:[e.jsx(_,{name:"server",className:"h-4 w-4"}),r(o.useRemoteLabelKey)]})]})]})]})})}function de(i,t){if(t==="use-remote")return{kind:"remote-form"};switch(i){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=i;throw new Error(`Unhandled RecoveryVariant: ${s}`)}}}function He(i){const t=J.c(29),{variant:s,hostUrl:l,hostLabel:n,onRetry:c,onChooseRemote:u,showRemoteForm:r,onCloseRemoteForm:o,onSwitchToLocalFromRemote:j,onEnterLocalSetup:N,isRetrying:C,localAvailable:U}=i,K=r===void 0?!1:r,x=C===void 0?!1:C,p=U===void 0?!0:U,g=Pe;let y;t[0]!==c?(y=async()=>{if($()){await H();return}await X("/api/config/reload",{method:"POST"}),c?.()},t[0]=c,t[1]=y):y=t[1];const w=y;let T;t[2]!==N||t[3]!==s?(T=async()=>{if(de(s,"use-local").kind==="local-setup"){N?.();return}if(await g("local"),$()){await H();return}window.location.reload()},t[2]=N,t[3]=s,t[4]=T):T=t[4];const L=T;let f;t[5]!==u||t[6]!==s?(f=()=>{de(s,"use-remote").kind==="remote-form"&&u?.()},t[5]=u,t[6]=s,t[7]=f):f=t[7];const k=f;if(K){const v=s==="remote-wrong-service"?"":l||"",A=s==="remote-wrong-service"?"":n||"";let O;t[8]!==u||t[9]!==o?(O=o||(()=>u?.()),t[8]=u,t[9]=o,t[10]=O):O=t[10];const M=!p;let E;t[11]!==p||t[12]!==N||t[13]!==j?(E=p?j||(()=>{g("local").then(()=>{$()?H():N?.()})}):void 0,t[11]=p,t[12]=N,t[13]=j,t[14]=E):E=t[14];let m;return t[15]!==A||t[16]!==v||t[17]!==O||t[18]!==M||t[19]!==E?(m=e.jsx(ge,{onBack:O,initialUrl:v,initialLabel:A,isRecoveryMode:!0,showInstancePicker:M,onSwitchToLocal:E}),t[15]=A,t[16]=v,t[17]=O,t[18]=M,t[19]=E,t[20]=m):m=t[20],m}const b=p?L:void 0;let S;return t[21]!==w||t[22]!==k||t[23]!==n||t[24]!==l||t[25]!==x||t[26]!==b||t[27]!==s?(S=e.jsx(Be,{variant:s,hostLabel:n,hostUrl:l,onRetry:w,onUseLocal:b,onUseRemote:k,isRetrying:x}),t[21]=w,t[22]=k,t[23]=n,t[24]=l,t[25]=x,t[26]=b,t[27]=s,t[28]=S):S=t[28],S}async function Pe(i){if(!$())return;const t=await V();await q({...t,...i==="local"?{defaultHostId:"local"}:{},initialHostChoiceCompleted:!0})}function fo(i){const t=J.c(29),{onBack:s,onCliAvailable:l,mode:n,recoveryVariant:c,recoveryHostUrl:u,recoveryHostLabel:r,onEnterLocalSetup:o,localAvailable:j}=i,N=n===void 0?"first-launch":n,C=c===void 0?"missing-default-host":c,U=j===void 0?!0:j,[K,x]=d.useState(!1),[p,g]=d.useState(!1);let y;t[0]===Symbol.for("react.memo_cache_sentinel")?(y=()=>{g(!1),x(!1)},t[0]=y):y=t[0];let w;t[1]!==N||t[2]!==r||t[3]!==u||t[4]!==C?(w=[N,C,u,r],t[1]=N,t[2]=r,t[3]=u,t[4]=C,t[5]=w):w=t[5],d.useEffect(y,w);const T=p?"local-setup":N;if(T==="recovery"){let f;t[6]===Symbol.for("react.memo_cache_sentinel")?(f=()=>x(!0),t[6]=f):f=t[6];let k,b;t[7]===Symbol.for("react.memo_cache_sentinel")?(k=()=>x(!1),b=()=>{x(!1),g(!0)},t[7]=k,t[8]=b):(k=t[7],b=t[8]);let S;t[9]!==o?(S=()=>{g(!0),o?.()},t[9]=o,t[10]=S):S=t[10];let v;return t[11]!==U||t[12]!==r||t[13]!==u||t[14]!==C||t[15]!==K||t[16]!==S?(v=e.jsx(He,{variant:C,hostUrl:u,hostLabel:r,onChooseRemote:f,showRemoteForm:K,onCloseRemoteForm:k,onSwitchToLocalFromRemote:b,onEnterLocalSetup:S,localAvailable:U}),t[11]=U,t[12]=r,t[13]=u,t[14]=C,t[15]=K,t[16]=S,t[17]=v):v=t[17],v}if(T==="local-setup"){let f;t[18]!==s||t[19]!==p?(f=()=>{p?g(!1):s?.()},t[18]=s,t[19]=p,t[20]=f):f=t[20];let k;t[21]===Symbol.for("react.memo_cache_sentinel")?(k=()=>x(!0),t[21]=k):k=t[21];let b;return t[22]!==l||t[23]!==p||t[24]!==f?(b=e.jsx(Ee,{onBack:f,onCliAvailable:l,isFromRecovery:p,onSwitchToRemote:k}),t[22]=l,t[23]=p,t[24]=f,t[25]=b):b=t[25],b}let L;return t[26]!==U||t[27]!==l?(L=e.jsx(Ke,{onCliAvailable:l,localAvailable:U}),t[26]=U,t[27]=l,t[28]=L):L=t[28],L}export{fo as OnboardingScreen};
|