shadow-claw 1.54.0 → 1.55.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/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/README.md +1 -1
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DO2t9bUI.js → chunk--IuVyWfT.js} +24 -23
- package/dist/cli/{chunk-2ZYd9gYC.js → chunk--JpdI-Ht.js} +1 -1
- package/dist/cli/{chunk-m4Ineemy.js → chunk-4O8yrQuN.js} +1 -1
- package/dist/cli/{chunk-BiH9IXnQ.js → chunk-7S9Ywlfy.js} +1 -1
- package/dist/cli/{chunk-BmMOdYvk.js → chunk-B0SqqDSK.js} +1 -1
- package/dist/cli/chunk-BNaWaEm-.js +1 -0
- package/dist/cli/chunk-BXCsxO9e.js +1 -0
- package/dist/cli/chunk-Bq37qDoZ.js +18 -0
- package/dist/cli/{chunk-C1htf-nO.js → chunk-BrEeCKIo.js} +2 -2
- package/dist/cli/{chunk-BI1SOTM1.js → chunk-Bu3ylrhT.js} +8 -8
- package/dist/cli/{chunk-3smiGQoQ.js → chunk-C1v_s0Kb.js} +1 -1
- package/dist/cli/{chunk-DGeysxz3.js → chunk-C44G533y.js} +1 -1
- package/dist/cli/{chunk-9KiBalKu.js → chunk-C7hJLmsL.js} +1 -1
- package/dist/cli/{chunk-BFv9XSNd.js → chunk-CAaQWd6t.js} +1 -1
- package/dist/cli/chunk-CIkgn5Fh.js +1 -0
- package/dist/cli/chunk-CWEIN2kc.js +1 -0
- package/dist/cli/{chunk-BDeDZ-0L.js → chunk-CYg1lO1a.js} +1 -1
- package/dist/cli/{chunk-DXLmEQ3i.js → chunk-Ce09lwXT.js} +1 -1
- package/dist/cli/{chunk-XsfHeN4m.js → chunk-CpdqRSO-.js} +1 -1
- package/dist/cli/chunk-DB4x5L-B.js +1 -0
- package/dist/cli/{chunk-DaNyMqrk.js → chunk-DBvObsBQ.js} +1 -1
- package/dist/cli/chunk-DGPpt7Ka.js +1 -0
- package/dist/cli/chunk-DGagHluH.js +1 -0
- package/dist/cli/chunk-DUIs23D9.js +1 -0
- package/dist/cli/{chunk-CyvfQV16.js → chunk-DaurYOqg.js} +1 -1
- package/dist/cli/{chunk-DSFrcSyA.js → chunk-DfwRL0Ue.js} +1 -1
- package/dist/cli/{chunk-M2tZrzY5.js → chunk-DudYQk0p.js} +1 -1
- package/dist/cli/chunk-DvKo50Tp.js +2 -0
- package/dist/cli/{chunk-H_Mw5ypp.js → chunk-Dvrqte5Q.js} +2 -2
- package/dist/cli/{chunk-BtNO-m9T.js → chunk-DzhSExU0.js} +1 -1
- package/dist/cli/{chunk-IOMO88kZ.js → chunk-ENKlt3i9.js} +1 -1
- package/dist/cli/{chunk-Bspgzwsm.js → chunk-FWRwAX75.js} +8 -8
- package/dist/cli/chunk-Lf-Z-h48.js +32 -0
- package/dist/cli/{chunk-BucXnZ4Z.js → chunk-VRfkSLrD.js} +1 -1
- package/dist/cli/chunk-uaTxD024.js +1 -0
- package/dist/cli/cli.js +1 -1
- package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
- package/dist/headless-agent.js +2 -2
- package/dist/lib/components/index.js +25 -25
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw/utils/get-route.d.ts +3 -0
- package/dist/lib/components/shadow-claw/utils/sync-slotted-sidebar-active-links.d.ts +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configure-peer-js-D5jDCtLx.js → configure-peer-js-C9554Slv.js} +2 -2
- package/dist/lib/{configure-peer-js-D5jDCtLx.js.map → configure-peer-js-C9554Slv.js.map} +1 -1
- package/dist/lib/{file-viewer-B4CL4e0i.js → file-viewer-DBc5dxNy.js} +2 -2
- package/dist/lib/{file-viewer-B4CL4e0i.js.map → file-viewer-DBc5dxNy.js.map} +1 -1
- package/dist/lib/index.js +28 -27
- package/dist/lib/{init-control-plane-l2uFnhGV.js → init-control-plane-D-41Fm5q.js} +12 -12
- package/dist/lib/{init-control-plane-l2uFnhGV.js.map → init-control-plane-D-41Fm5q.js.map} +1 -1
- package/dist/lib/{markdown-0_p_zfxL.js → markdown-KnDWzWJJ.js} +2 -2
- package/dist/lib/{markdown-0_p_zfxL.js.map → markdown-KnDWzWJJ.js.map} +1 -1
- package/dist/lib/{orchestrator-D6wm8Sec.js → orchestrator-BEZcqgR5.js} +9 -9
- package/dist/lib/{orchestrator-D6wm8Sec.js.map → orchestrator-BEZcqgR5.js.map} +1 -1
- package/dist/lib/{orchestrator-Dh-hnIpK.js → orchestrator-Cda13e5U.js} +4 -4
- package/dist/lib/{orchestrator-Dh-hnIpK.js.map → orchestrator-Cda13e5U.js.map} +1 -1
- package/dist/lib/{peerjs-BWZnsD0B.js → peerjs-DYkUTcee.js} +5 -5
- package/dist/lib/{peerjs-BWZnsD0B.js.map → peerjs-DYkUTcee.js.map} +1 -1
- package/dist/lib/{push-client-MybDfOdi.js → push-client-CQtCFDaD.js} +3 -3
- package/dist/lib/{push-client-MybDfOdi.js.map → push-client-CQtCFDaD.js.map} +1 -1
- package/dist/lib/security/custom-element-security.d.ts +8 -4
- package/dist/lib/{shadow-claw-PdOpgTxH.js → shadow-claw-DYe9u6Tp.js} +142 -33
- package/dist/lib/shadow-claw-DYe9u6Tp.js.map +1 -0
- package/dist/lib/{shadow-claw-accounts-3bR76EOb.js → shadow-claw-accounts-D2URoHys.js} +2 -2
- package/dist/lib/{shadow-claw-accounts-3bR76EOb.js.map → shadow-claw-accounts-D2URoHys.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js → shadow-claw-channel-config-buXoz2xv.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js.map → shadow-claw-channel-config-buXoz2xv.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-CK9sc7h_.js → shadow-claw-channels-5yVJ1gLk.js} +3 -3
- package/dist/lib/{shadow-claw-channels-CK9sc7h_.js.map → shadow-claw-channels-5yVJ1gLk.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js → shadow-claw-chat-CVc-7ycM.js} +7 -7
- package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js.map → shadow-claw-chat-CVc-7ycM.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-BpRcl312.js → shadow-claw-control-plane-B5vsF91B.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-BpRcl312.js.map → shadow-claw-control-plane-B5vsF91B.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js → shadow-claw-conversations-PGK5zqn3.js} +54 -12
- package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js.map → shadow-claw-conversations-PGK5zqn3.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js → shadow-claw-file-viewer-DSqn0hgx.js} +6 -6
- package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js.map → shadow-claw-file-viewer-DSqn0hgx.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DhnHbXKf.js → shadow-claw-files-vOa9ZWbr.js} +6 -6
- package/dist/lib/{shadow-claw-files-DhnHbXKf.js.map → shadow-claw-files-vOa9ZWbr.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-BeQ1ElUd.js → shadow-claw-git-D54Z85Bj.js} +4 -4
- package/dist/lib/{shadow-claw-git-BeQ1ElUd.js.map → shadow-claw-git-D54Z85Bj.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js → shadow-claw-integrations-BTubMH9d.js} +2 -2
- package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js.map → shadow-claw-integrations-BTubMH9d.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-DPda4L3C.js → shadow-claw-llm-8koGTNYs.js} +3 -3
- package/dist/lib/{shadow-claw-llm-DPda4L3C.js.map → shadow-claw-llm-8koGTNYs.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js → shadow-claw-mcp-remote-C2jwBsQt.js} +2 -2
- package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js.map → shadow-claw-mcp-remote-C2jwBsQt.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-zqNuyn3-.js → shadow-claw-networking-BV-rna16.js} +2 -2
- package/dist/lib/{shadow-claw-networking-zqNuyn3-.js.map → shadow-claw-networking-BV-rna16.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-DFgdo33v.js → shadow-claw-notifications-Dku7VBLk.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-DFgdo33v.js.map → shadow-claw-notifications-Dku7VBLk.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js → shadow-claw-page-header-VPjYWfsT.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js.map → shadow-claw-page-header-VPjYWfsT.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-DLspFqdK.js → shadow-claw-pages-DXrM6hgZ.js} +29 -19
- package/dist/lib/shadow-claw-pages-DXrM6hgZ.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js → shadow-claw-peerjs-D3xonez5.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js.map → shadow-claw-peerjs-D3xonez5.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-NbvzXASD.js → shadow-claw-settings-DMTx6OS9.js} +5 -5
- package/dist/lib/{shadow-claw-settings-NbvzXASD.js.map → shadow-claw-settings-DMTx6OS9.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-B_NAoZmd.js → shadow-claw-storage-BJLnukxa.js} +3 -3
- package/dist/lib/{shadow-claw-storage-B_NAoZmd.js.map → shadow-claw-storage-BJLnukxa.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js → shadow-claw-task-server-DcMj20hD.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js.map → shadow-claw-task-server-DcMj20hD.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-CAZua0-j.js → shadow-claw-tasks-BQBe4lVi.js} +7 -7
- package/dist/lib/{shadow-claw-tasks-CAZua0-j.js.map → shadow-claw-tasks-BQBe4lVi.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js → shadow-claw-terminal-DPEzTxXv.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js.map → shadow-claw-terminal-DPEzTxXv.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-CkZWxxTm.js → shadow-claw-tools-BCnU8FaK.js} +6 -6
- package/dist/lib/{shadow-claw-tools-CkZWxxTm.js.map → shadow-claw-tools-BCnU8FaK.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js → shadow-claw-webvm-CnW-hoJ8.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js.map → shadow-claw-webvm-CnW-hoJ8.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +15 -2
- package/dist/lib/{sync-web-mcp-registration-dW2MVCj4.js → sync-web-mcp-registration-DwpGjVdo.js} +10 -4
- package/dist/lib/sync-web-mcp-registration-DwpGjVdo.js.map +1 -0
- package/dist/lib/{tools-D7whby3H.js → tools-CP6G0HF7.js} +5 -6
- package/dist/lib/tools-CP6G0HF7.js.map +1 -0
- package/dist/lib/{trusted-types-d0cdkut_.js → trusted-types-0cu5Dm6M.js} +29 -4
- package/dist/lib/{trusted-types-d0cdkut_.js.map → trusted-types-0cu5Dm6M.js.map} +1 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +4 -2
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/resolve-page-script-dependencies.d.ts +19 -0
- package/dist/lib/utils/resolve-page-script-dependencies.js +98 -0
- package/dist/lib/utils/resolve-page-script-dependencies.js.map +1 -0
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/webmcp-Bf9rT7uu.js +2001 -0
- package/dist/lib/webmcp-Bf9rT7uu.js.map +1 -0
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/AGENTS.md +3 -3
- package/dist/public/README.md +1 -1
- package/dist/public/agent.worker.js +2 -2
- package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
- package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
- package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.css +1 -1
- package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.html +1 -1
- package/dist/public/{configure-peer-js-WLRM7Qa7.js → configure-peer-js-OYl3V8sW.js} +1 -1
- package/dist/public/{custom-element-security-Cl991z-x.js → custom-element-security-BR4V40j4.js} +1 -1
- package/dist/public/docs/example/article/index.html +3 -3
- package/dist/public/docs/example/article.html +3 -3
- package/dist/public/docs/publishing/index.html +3 -3
- package/dist/public/docs/publishing.html +3 -3
- package/dist/public/docs/skill-creator/index.html +3 -3
- package/dist/public/docs/skill-creator.html +3 -3
- package/dist/public/docs/subsystems/custom-element-security.md +19 -5
- package/dist/public/docs/subsystems/pages.md +10 -2
- package/dist/public/docs/subsystems/tools.md +1 -2
- package/dist/public/docs/subsystems/webmcp.md +41 -6
- package/dist/public/{download-group-file-fFjoIIp4.js → download-group-file-BNmK8wac.js} +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CiSfBRT4.js → e2e-bridge-4phD1JUQ.js} +1 -1
- package/dist/public/{file-viewer-DFC3kfeO.js → file-viewer-Dbh3K9nL.js} +1 -1
- package/dist/public/index.html +3 -3
- package/dist/public/index.js +1 -1
- package/dist/public/{init-control-plane-BEbcwmmv.js → init-control-plane-DGOY_RNS.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +3 -3
- package/dist/public/main/memory/index.html +3 -3
- package/dist/public/main/memory.html +3 -3
- package/dist/public/main.html +3 -3
- package/dist/public/{markdown-BeglYzw9.js → markdown-BPZYpfGm.js} +1 -1
- package/dist/public/{orchestrator-BlvEG3PO.js → orchestrator-OoUK7CF9.js} +1 -1
- package/dist/public/{orchestrator-DTNrntd4.js → orchestrator-a9047bGu.js} +1 -1
- package/dist/public/{peerjs-CnBdK94R.js → peerjs-Cbn310Tz.js} +1 -1
- package/dist/public/{push-client-DOHbdCyj.js → push-client-Dy4LGJy9.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/shadow-claw-B-HWC1uN.js +1180 -0
- package/dist/public/{shadow-claw-accounts-C6FXVw2K.js → shadow-claw-accounts-Di-anCZ1.js} +1 -1
- package/dist/public/{shadow-claw-channels-tr_r60Kq.js → shadow-claw-channels-RVwCE8pE.js} +1 -1
- package/dist/public/{shadow-claw-chat-BAAPhAOs.js → shadow-claw-chat-DI1q8UnX.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-C_5VIx8E.js → shadow-claw-control-plane-KXEdLOGl.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DGYZdDa3.js → shadow-claw-conversations-BCBGtS30.js} +40 -6
- package/dist/public/{shadow-claw-file-viewer-5j2-Z3fN.js → shadow-claw-file-viewer-CW3t6j-w.js} +1 -1
- package/dist/public/{shadow-claw-files-DKF4Yy0m.js → shadow-claw-files-JQ-o0ImX.js} +1 -1
- package/dist/public/{shadow-claw-git-CtUTJXKT.js → shadow-claw-git-D2M8VixW.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CuBy9D3z.js → shadow-claw-integrations-Cgw6v9_1.js} +1 -1
- package/dist/public/{shadow-claw-llm-BIfNNjGL.js → shadow-claw-llm-74ieXp7i.js} +1 -1
- package/dist/public/{shadow-claw-mcp-remote-C17FXvrb.js → shadow-claw-mcp-remote-BX0BkSmy.js} +1 -1
- package/dist/public/{shadow-claw-networking-CjxQ1CLI.js → shadow-claw-networking-DNX8vaIQ.js} +1 -1
- package/dist/public/{shadow-claw-notifications-Brn2O3Ps.js → shadow-claw-notifications-BLTaGAny.js} +1 -1
- package/dist/public/{shadow-claw-page-header-Bn1P7Cxb.js → shadow-claw-page-header-CjFOdo9v.js} +1 -1
- package/dist/public/shadow-claw-pages-DOQqMm0_.js +645 -0
- package/dist/public/{shadow-claw-settings-CfDm0hVA.js → shadow-claw-settings-DFtl0Fy8.js} +2 -2
- package/dist/public/{shadow-claw-storage-DOOesRzw.js → shadow-claw-storage-gQGExZRq.js} +1 -1
- package/dist/public/{shadow-claw-task-server-H36iDDp2.js → shadow-claw-task-server-Ca45uY7S.js} +1 -1
- package/dist/public/{shadow-claw-tasks-4JsjSGkN.js → shadow-claw-tasks-CCTaaSdi.js} +1 -1
- package/dist/public/{shadow-claw-terminal-CTRTcYz-.js → shadow-claw-terminal-BfgulLkl.js} +1 -1
- package/dist/public/{shadow-claw-tools-Dm1LxNf4.js → shadow-claw-tools-V8NA4n18.js} +1 -1
- package/dist/public/{shadow-claw-webvm-JzuPe9Nr.js → shadow-claw-webvm-CxxI2bnC.js} +1 -1
- package/dist/public/sync-web-mcp-registration-CkCA8UFm.js +1 -0
- package/dist/public/{tools-FiTtOlIt.js → tools-CwQq5tJH.js} +2 -2
- package/dist/public/webmcp-CmtWOAFm.js +6 -0
- package/dist/server.js +2 -2
- package/package.json +3 -3
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +16 -0
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +62 -1
- package/src/cli/prerender/pretty-paths/prerender-pretty-paths.test.ts +277 -0
- package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +28 -1
- package/src/cli/site-config/custom-elements/build-custom-element-script-tags.ts +13 -1
- package/src/components/shadow-claw/shadow-claw.css +12 -0
- package/src/components/shadow-claw/shadow-claw.html +12 -2
- package/src/components/shadow-claw/utils/bind-event-listeners.test.ts +18 -0
- package/src/components/shadow-claw/utils/bind-event-listeners.ts +14 -0
- package/src/components/shadow-claw/utils/get-route.test.ts +35 -0
- package/src/components/shadow-claw/utils/get-route.ts +18 -0
- package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.test.ts +152 -1
- package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.ts +139 -8
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.css +11 -0
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.html +27 -4
- package/src/components/shadow-claw-conversations/shadow-claw-conversations.ts +32 -4
- package/src/components/shadow-claw-pages/shadow-claw-pages-scripts.test.ts +266 -0
- package/src/components/shadow-claw-pages/shadow-claw-pages.ts +41 -17
- package/src/core/orchestrator/utils/sync-web-mcp-registration.test.ts +18 -1
- package/src/core/orchestrator/utils/sync-web-mcp-registration.ts +8 -0
- package/src/core/utils/init-control-plane.test.ts +9 -4
- package/src/security/custom-element-security.test.ts +65 -0
- package/src/security/custom-element-security.ts +67 -4
- package/src/stores/tools.test.ts +5 -3
- package/src/stores/tools.ts +5 -10
- package/src/subsystems/mcp/webmcp.test.ts +84 -13
- package/src/subsystems/mcp/webmcp.ts +73 -10
- package/src/utils/index.ts +1 -0
- package/src/utils/resolve-page-script-dependencies.test.ts +245 -0
- package/src/utils/resolve-page-script-dependencies.ts +198 -0
- package/dist/cli/chunk-B1hufJeO.js +0 -1
- package/dist/cli/chunk-BZpn8npn.js +0 -1
- package/dist/cli/chunk-Bw5aOTFr.js +0 -1
- package/dist/cli/chunk-C8nH01Gw.js +0 -32
- package/dist/cli/chunk-CK1ZoyoE.js +0 -17
- package/dist/cli/chunk-CVkhDr-7.js +0 -1
- package/dist/cli/chunk-Cum07Vlh.js +0 -1
- package/dist/cli/chunk-D3UhDDmV.js +0 -2
- package/dist/cli/chunk-D8GI6qj6.js +0 -1
- package/dist/cli/chunk-DEH-FvmP.js +0 -1
- package/dist/cli/chunk-DksvJ_kf.js +0 -1
- package/dist/cli/chunk-RGb9wM4R.js +0 -1
- package/dist/lib/shadow-claw-PdOpgTxH.js.map +0 -1
- package/dist/lib/shadow-claw-pages-DLspFqdK.js.map +0 -1
- package/dist/lib/sync-web-mcp-registration-dW2MVCj4.js.map +0 -1
- package/dist/lib/tools-D7whby3H.js.map +0 -1
- package/dist/lib/webmcp-CYTNZfkn.js +0 -1687
- package/dist/lib/webmcp-CYTNZfkn.js.map +0 -1
- package/dist/public/shadow-claw-CnNX-WCh.js +0 -1158
- package/dist/public/shadow-claw-pages-BwOOqRWW.js +0 -645
- package/dist/public/sync-web-mcp-registration-BnHVUjat.js +0 -1
- package/dist/public/webmcp-_TBqXlVW.js +0 -1
|
@@ -6,7 +6,7 @@ function Le(e,t){this.v=e,this.k=t}function Re(e,t){(t==null||t>e.length)&&(t=e.
|
|
|
6
6
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}
|
|
7
7
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
8
8
|
function He(e,t){return ze(e)||Be(e,t)||V(e,t)||Ve()}function V(e,t){if(e){if(typeof e==`string`)return Re(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Re(e,t):void 0}}function Ue(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof Le;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`&&o.k?t:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(!!a.done,n)},function(e){r(`throw`,e)})}catch(e){i(2,e)}}function i(e,i){e===2?t.reject(i):t.resolve({value:i,done:e}),(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}Ue.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},Ue.prototype.next=function(e){return this._invoke(`next`,e)},Ue.prototype.throw=function(e){return this._invoke(`throw`,e)},Ue.prototype.return=function(e){return this._invoke(`return`,e)};const We=Object.entries,H=Object.setPrototypeOf,Ge=Object.isFrozen,Ke=Object.getPrototypeOf,qe=Object.getOwnPropertyDescriptor;let Je=Object.freeze,Ye=Object.seal,Xe=Object.create,Ze=typeof Reflect<`u`&&Reflect,Qe=Ze.apply,$e=Ze.construct;Je||=function(e){return e},Ye||=function(e){return e},Qe||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},$e||=function(e){return new e(...[...arguments].slice(1))};const U=yt(Array.prototype.forEach);Array.prototype.indexOf;const et=yt(Array.prototype.lastIndexOf),tt=yt(Array.prototype.pop),nt=yt(Array.prototype.push);Array.prototype.slice;const rt=yt(Array.prototype.splice),it=Array.isArray,at=yt(String.prototype.toLowerCase),ot=yt(String.prototype.toString),st=yt(String.prototype.match),ct=yt(String.prototype.replace),lt=yt(String.prototype.indexOf),ut=yt(String.prototype.trim),dt=yt(Number.prototype.toString),ft=yt(Boolean.prototype.toString),pt=typeof BigInt>`u`?null:yt(BigInt.prototype.toString),mt=typeof Symbol>`u`?null:yt(Symbol.prototype.toString),ht=yt(Object.prototype.hasOwnProperty),gt=yt(Object.prototype.toString),_t=yt(RegExp.prototype.test),vt=bt(TypeError);function yt(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return Qe(e,t,n)}}function bt(e){return function(){return $e(e,[...arguments])}}function xt(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:at;if(H&&H(e,null),!it(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Ge(t)||(t[r]=e),i=e)}e[i]=!0}return e}function St(e){for(let t=0;t<e.length;t++)ht(e,t)||(e[t]=null);return e}function Ct(e){let t=Xe(null);for(let r of We(e)){var n=He(r,2);let i=n[0],a=n[1];ht(e,i)&&(t[i]=it(a)?St(a):a&&typeof a==`object`&&a.constructor===Object?Ct(a):a)}return t}function wt(e){switch(typeof e){case`string`:return e;case`number`:return dt(e);case`boolean`:return ft(e);case`bigint`:return pt?pt(e):`0`;case`symbol`:return mt?mt(e):`Symbol()`;case`undefined`:return gt(e);case`function`:case`object`:{if(e===null)return gt(e);let t=e,n=Tt(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:gt(e)}return gt(e)}default:return gt(e)}}function Tt(e,t){for(;e!==null;){let n=qe(e,t);if(n){if(n.get)return yt(n.get);if(typeof n.value==`function`)return yt(n.value)}e=Ke(e)}function n(){return null}return n}function Et(e){try{return _t(e,``),!0}catch{return!1}}const Dt=Je(/* @__PURE__ */ `a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),Ot=Je(/* @__PURE__ */ `svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),kt=Je([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),At=Je([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),jt=Je(/* @__PURE__ */ `math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),Mt=Je([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Nt=Je([`#text`]),Pt=Je(/* @__PURE__ */ `accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Ft=Je(/* @__PURE__ */ `accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.pointer-events.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.vector-effect.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),It=Je(/* @__PURE__ */ `accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Lt=Je([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Rt=Ye(/{{[\w\W]*|^[\w\W]*}}/g),zt=Ye(/<%[\w\W]*|^[\w\W]*%>/g),Bt=Ye(/\${[\w\W]*/g),Vt=Ye(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ht=Ye(/^aria-[\-\w]+$/),Ut=Ye(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Wt=Ye(/^(?:\w+script|data):/i),Gt=Ye(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Kt=Ye(/^html$/i),qt=Ye(/^[a-z][.\w]*(-[.\w]+)+$/i),Jt=Ye(/<[/\w!]/g),Yt=Ye(/<[/\w]/g),Xt=Ye(/<\/no(script|embed|frames)/i),Zt=Ye(/\/>/i),Qt={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},$t=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`],en=Je(xt({},$t)),tn=function(){let e={};return U($t,t=>{e[t]=Ye(RegExp(`</`+t+`(?=[\\t\\n\\f\\r />])`,`i`))}),Je(e)}(),nn=function(){return typeof window>`u`?null:window},rn=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},an=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},on=function(e,t,n,r){return ht(e,t)&&it(e[t])?xt(r.base?Ct(r.base):{},e[t],r.transform):n},sn=function(e,t,n){let r=ht(e,t)?e[t]:void 0;return r&&typeof r==`object`?Ct(r):n()};function cn(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:nn(),t=e=>cn(e);if(t.version=`3.4.16`,t.removed=[],!e||!e.document||e.document.nodeType!==Qt.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=Tt(d,`cloneNode`),p=Tt(d,`remove`),m=Tt(d,`removeAttributeNode`),h=Tt(d,`nextSibling`),g=Tt(d,`childNodes`),_=Tt(d,`parentNode`),v=Tt(d,`shadowRoot`),y=Tt(d,`attributes`),b=o&&o.prototype?Tt(o.prototype,`nodeType`):null,x=o&&o.prototype?Tt(o.prototype,`nodeName`):null,S=o&&o.prototype?Tt(o.prototype,`ownerDocument`):null,C=function(e){return b?b(e):e.nodeType},w=function(e){return x?x(e):e.nodeName};if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let T,E=``,D,O=!1,k=0,A=function(){if(k>0)throw vt(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},j=function(e){A(),k++;try{return T.createHTML(e)}finally{k--}},M=function(e){A(),k++;try{return T.createScriptURL(e)}finally{k--}},ee=function(){return O||=(D=rn(u,i),!0),D},te=n,ne=te.implementation,N=te.createNodeIterator,P=te.createDocumentFragment,re=te.getElementsByTagName,F=r.importNode,ie=an();t.isSupported=typeof We==`function`&&typeof _==`function`&&ne&&ne.createHTMLDocument!==void 0;let ae=Rt,oe=zt,se=Bt,ce=Vt,I=Ht,le=Wt,ue=Gt,de=qt,fe=Ut,pe=null,me=xt({},[...Dt,...Ot,...kt,...jt,...Nt]),he=null,L=xt({},[...Pt,...Ft,...It,...Lt]),ge=Object.seal(Xe(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),_e=null,ve=null,ye=Object.seal(Xe(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),be=!0,R=!0,xe=!1,z=!0,B=!1,Se=!0,Ce=!1,we=!1,Te=null,Ee=null,De=!1,Oe=!1,ke=!1,Ae=!1,je=!0,Me=!1,Ne=`user-content-`,Pe=!0,Fe=!1,Ie={},Le=null,Re=xt({},/* @__PURE__ */ `annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),ze=null,Be=xt({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Ve=null,He=xt({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),V=`http://www.w3.org/1998/Math/MathML`,Ue=`http://www.w3.org/2000/svg`,H=`http://www.w3.org/1999/xhtml`,Ge=H,Ke=!1,qe=null,Ze=xt({},[V,Ue,H],ot),Qe=Je([`mi`,`mo`,`mn`,`ms`,`mtext`]),$e=xt({},Qe),dt=Je([`annotation-xml`]),ft=xt({},dt),pt=xt({},[`title`,`style`,`font`,`a`,`script`]),mt=null,gt=[`application/xhtml+xml`,`text/html`],yt=null,bt=null,St=n.createElement(`form`),$t=function(e){return e instanceof RegExp||e instanceof Function},ln=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(bt&&bt===e)return;(!e||typeof e!=`object`)&&(e={}),e=Ct(e),mt=gt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,yt=mt===`application/xhtml+xml`?ot:at,pe=on(e,`ALLOWED_TAGS`,me,{transform:yt}),he=on(e,`ALLOWED_ATTR`,L,{transform:yt}),qe=on(e,`ALLOWED_NAMESPACES`,Ze,{transform:ot}),Ve=on(e,`ADD_URI_SAFE_ATTR`,He,{transform:yt,base:He}),ze=on(e,`ADD_DATA_URI_TAGS`,Be,{transform:yt,base:Be}),Le=on(e,`FORBID_CONTENTS`,Re,{transform:yt}),_e=on(e,`FORBID_TAGS`,Ct({}),{transform:yt}),ve=on(e,`FORBID_ATTR`,Ct({}),{transform:yt}),Ie=ht(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?Ct(e.USE_PROFILES):e.USE_PROFILES:!1,be=e.ALLOW_ARIA_ATTR!==!1,R=e.ALLOW_DATA_ATTR!==!1,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,z=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,B=e.SAFE_FOR_TEMPLATES||!1,Se=e.SAFE_FOR_XML!==!1,Ce=e.WHOLE_DOCUMENT||!1,Oe=e.RETURN_DOM||!1,ke=e.RETURN_DOM_FRAGMENT||!1,Ae=e.RETURN_TRUSTED_TYPE||!1,De=e.FORCE_BODY||!1,je=e.SANITIZE_DOM!==!1,Me=e.SANITIZE_NAMED_PROPS||!1,Pe=e.KEEP_CONTENT!==!1,Fe=e.IN_PLACE||!1,fe=Et(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Ut,Ge=typeof e.NAMESPACE==`string`?e.NAMESPACE:H,$e=sn(e,`MATHML_TEXT_INTEGRATION_POINTS`,()=>xt({},Qe)),ft=sn(e,`HTML_INTEGRATION_POINTS`,()=>xt({},dt));let t=sn(e,`CUSTOM_ELEMENT_HANDLING`,()=>Xe(null));if(ge=Xe(null),ht(t,`tagNameCheck`)&&$t(t.tagNameCheck)&&(ge.tagNameCheck=t.tagNameCheck),ht(t,`attributeNameCheck`)&&$t(t.attributeNameCheck)&&(ge.attributeNameCheck=t.attributeNameCheck),ht(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(ge.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),Ye(ge),B&&(R=!1),ke&&(Oe=!0),Ie&&(pe=xt({},Nt),he=Xe(null),Ie.html===!0&&(xt(pe,Dt),xt(he,Pt)),Ie.svg===!0&&(xt(pe,Ot),xt(he,Ft),xt(he,Lt)),Ie.svgFilters===!0&&(xt(pe,kt),xt(he,Ft),xt(he,Lt)),Ie.mathMl===!0&&(xt(pe,jt),xt(he,It),xt(he,Lt))),ye.tagCheck=null,ye.attributeCheck=null,ht(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?ye.tagCheck=e.ADD_TAGS:it(e.ADD_TAGS)&&(pe===me&&(pe=Ct(pe)),xt(pe,e.ADD_TAGS,yt))),ht(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?ye.attributeCheck=e.ADD_ATTR:it(e.ADD_ATTR)&&(he===L&&(he=Ct(he)),xt(he,e.ADD_ATTR,yt))),ht(e,`ADD_FORBID_CONTENTS`)&&it(e.ADD_FORBID_CONTENTS)&&(Le===Re&&(Le=Ct(Le)),xt(Le,e.ADD_FORBID_CONTENTS,yt)),Pe&&(pe[`#text`]=!0),Ce&&xt(pe,[`html`,`head`,`body`]),pe.table&&(xt(pe,[`tbody`]),delete _e.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw vt(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw vt(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=T;T=e.TRUSTED_TYPES_POLICY;try{E=j(``)}catch(e){throw T=t,e}}else e.TRUSTED_TYPES_POLICY===null?(T=void 0,E=``):(T===void 0&&(T=ee()),T&&typeof E==`string`&&(E=j(``)));Je&&Je(e),bt=e},un=xt({},[...Ot,...kt,...At]),dn=xt({},[...jt,...Mt]),fn=function(e,t,n){return t.namespaceURI===H?e===`svg`:t.namespaceURI===V?e===`svg`&&(n===`annotation-xml`||$e[n]):!!un[e]},pn=function(e,t,n){return t.namespaceURI===H?e===`math`:t.namespaceURI===Ue?e===`math`&&ft[n]:!!dn[e]},mn=function(e,t,n){return t.namespaceURI===Ue&&!ft[n]||t.namespaceURI===V&&!$e[n]?!1:!dn[e]&&(pt[e]||!un[e])},hn=function(e){let t=_(e);(!t||!t.tagName)&&(t={namespaceURI:Ge,tagName:`template`});let n=at(e.tagName),r=at(t.tagName);return qe[e.namespaceURI]?e.namespaceURI===Ue?fn(n,t,r):e.namespaceURI===V?pn(n,t,r):e.namespaceURI===H?mn(n,t,r):!!(mt===`application/xhtml+xml`&&qe[e.namespaceURI]):!1},gn=function(e){nt(t.removed,{element:e});try{_(e).removeChild(e)}catch{if(p(e),!_(e))throw vt(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},_n=function(e,t,n){try{m(e,t)}catch{try{e.removeAttribute(n)}catch{}}},vn=function(e){xn(e);let t=g(e);if(t){let e=[];U(t,t=>{nt(e,t)}),U(e,e=>{try{p(e)}catch{}})}let n=y(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;typeof i==`string`&&_n(e,r,i)}},yn=function(e,n,r){if(!r)try{r=n.getAttributeNode(e)}catch{r=null}nt(t.removed,{attribute:r||null,from:n});try{r?m(n,r):n.removeAttribute(e)}catch{try{n.removeAttribute(e)}catch{}}if(e===`is`){if(Oe||ke)try{gn(n)}catch{}else try{n.setAttribute(e,``)}catch{}}},bn=function(e){let t=y(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;typeof i!=`string`||he[yt(i)]||_n(e,r,i)}},xn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();C(e)===Qt.element&&bn(e);let n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Sn=function(e,t){return Se?e===`patchsrc`||e===`for`&&t!==`label`&&t!==`output`:!1},Cn=function(e){if(!Se)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=C(e);if(n===Qt.processingInstruction||n===Qt.comment&&_t(Yt,e.data)){try{p(e)}catch{}continue}if(n===Qt.element){let t=e,n=yt(w(e));try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&Sn(`for`,n)&&t.removeAttribute(`for`)}catch{}}let r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},wn=function(e){let t=null,r=null;if(De)e=`<remove></remove>`+e;else{let t=st(e,/^[\r\n\t ]+/);r=t&&t[0]}mt===`application/xhtml+xml`&&Ge===H&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=T?j(e):e;if(Ge===H)try{t=new l().parseFromString(i,mt)}catch{}if(!t||!t.documentElement){t=ne.createDocument(Ge,`template`,null);try{t.documentElement.innerHTML=Ke?E:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Ge===H?re.call(t,Ce?`html`:`body`)[0]:Ce?t.documentElement:a},Tn=function(e){let t=S?S(e):e.ownerDocument;return N.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},En=function(e){return e=ct(e,ae,` `),e=ct(e,oe,` `),e=ct(e,se,` `),e},Dn=function(e){e.normalize();let t=S?S(e):e.ownerDocument,n=N.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=En(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&U(i,e=>{kn(e.content)&&Dn(e.content)})},On=function(e){let t=x?x(e):null;return typeof t!=`string`||yt(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==y(e)||typeof e.removeAttribute!=`function`||typeof e.removeAttributeNode!=`function`||typeof e.getAttributeNode!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==b(e)||e.childNodes!==g(e)},kn=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return b(e)===Qt.documentFragment}catch{return!1}},An=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return typeof b(e)==`number`}catch{return!1}};function jn(e,n,r){e.length!==0&&U(e,e=>{e.call(t,n,r,bt)})}let Mn=function(e,t){return!!(Se&&e.hasChildNodes()&&!An(e.firstElementChild)&&_t(Jt,e.textContent)&&_t(Jt,e.innerHTML)||Se&&e.namespaceURI===H&&en[t]&&(An(e.firstElementChild)||typeof e.textContent==`string`&&_t(tn[t],e.textContent))||e.nodeType===Qt.processingInstruction||Se&&e.nodeType===Qt.comment&&_t(Yt,e.data))},Nn=function(e,t){return e instanceof RegExp?_t(e,t):e instanceof Function&&!!e(t,...[...arguments].slice(2))},Pn=function(e,t,n){if(!_e[t]&&Bn(t)&&Nn(ge.tagNameCheck,t))return!1;if(Pe&&!Le[t]){let t=_(e),r=g(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?f(r[a],!0):r[a];t.insertBefore(i,h(e))}}}return gn(e),!0},Fn=function(e,t,n,r){return e.length===0?t:t===n||t===r?Ct(t):t},In=function(e,t){return e===t||_(e)!==null?!1:(Fe&&xn(e),!0)},Ln=function(e,n){if(jn(ie.beforeSanitizeElements,e,null),In(e,n))return!0;if(On(e))return gn(e),!0;let r=yt(w(e));if(pe=Fn(ie.uponSanitizeElement,pe,me,Te),jn(ie.uponSanitizeElement,e,{tagName:r,allowedTags:pe}),In(e,n))return!0;if(Mn(e,r))return gn(e),!0;if(_e[r]||!(ye.tagCheck instanceof Function&&ye.tagCheck(r))&&!pe[r]){let t=Pn(e,r,n);return t===!1&&(jn(ie.afterSanitizeElements,e,null),In(e,n))?!0:t}if(C(e)===Qt.element&&!hn(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&_t(Xt,e.innerHTML))return gn(e),!0;if(B&&e.nodeType===Qt.text){let n=En(e.textContent);e.textContent!==n&&(nt(t.removed,{element:e.cloneNode()}),e.textContent=n)}return jn(ie.afterSanitizeElements,e,null),In(e,n)},Rn=function(e,t,r){if(ve[t]||Sn(t,e)||je&&(t===`id`||t===`name`)&&(r in n||r in St))return!1;let i=he[t]||ye.attributeCheck instanceof Function&&ye.attributeCheck(t,e);return R&&_t(ce,t)||be&&_t(I,t)?!0:i?Ve[t]||_t(fe,ct(r,ue,``))||(t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&<(r,`data:`)===0&&ze[e]||xe&&!_t(le,ct(r,ue,``))?!0:!r:Bn(e)&&Nn(ge.tagNameCheck,e)&&Nn(ge.attributeNameCheck,t,e)||t===`is`&&ge.allowCustomizedBuiltInElements&&Nn(ge.tagNameCheck,r)},zn=xt({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),Bn=function(e){return!zn[at(e)]&&_t(de,e)},Vn=function(e,t,n,r){if(T&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return j(r);case`TrustedScriptURL`:return M(r)}return r},Hn=function(e,t,n,r){try{return n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),!On(e)||(gn(e),!1)}catch{return yn(t,e),!1}},Un=function(e,n){if(jn(ie.beforeSanitizeAttributes,e,null),In(e,n))return;let r=e.attributes;if(!r||On(e))return;he=Fn(ie.uponSanitizeAttribute,he,L,Ee);let i={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:he,forceKeepAttr:void 0},a=r.length,o=yt(e.nodeName);for(;a--;){let n=r[a],s=n.name,c=n.namespaceURI,l=n.value,u=yt(s),d=l,f=s===`value`?d:ut(d),p=!1;i.attrName=u,i.attrValue=f,i.keepAttr=!0,i.forceKeepAttr=void 0,jn(ie.uponSanitizeAttribute,e,i),f=i.attrValue,Me&&(u===`id`||u===`name`)&<(f,Ne)!==0&&(yn(s,e,n),f=Ne+f,p=!0),Se&&_t(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)||u===`attributename`&&st(f,`href`)?yn(s,e,n):i.forceKeepAttr||(i.keepAttr?!z&&_t(Zt,f)?yn(s,e,n):(B&&(f=En(f)),Rn(o,u,f)?(f=Vn(o,u,c,f),f!==d&&Hn(e,s,c,f)&&p&&tt(t.removed)):yn(s,e,n)):yn(s,e,n))}jn(ie.afterSanitizeAttributes,e,null),In(e,n)},Wn=function(e){let t=null,n=Tn(e);for(jn(ie.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(jn(ie.uponSanitizeShadowNode,t,null),Ln(t,e),Un(t,e),kn(t.content)&&Wn(t.content),C(t)===Qt.element){let e=v(t);kn(e)&&(Gn(e),Wn(e))}jn(ie.afterSanitizeShadowDOM,e,null)},Gn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){Wn(e.shadow);continue}let n=e.node,r=C(n)===Qt.element,i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=x?x(n):null;if(typeof e==`string`&&yt(e)===`template`){let e=n.content;kn(e)&&t.push({node:e,shadow:null})}}if(r){let e=v(n);kn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Ke=!e,Ke&&(e=`<!-->`),typeof e!=`string`&&!An(e)&&(e=wt(e),typeof e!=`string`))throw vt(`dirty is not a string, aborting`);if(!t.isSupported)return e;we?(pe=Te,he=Ee):ln(n),(ie.uponSanitizeElement.length>0||ie.uponSanitizeAttribute.length>0)&&(pe=Ct(pe)),ie.uponSanitizeAttribute.length>0&&(he=Ct(he)),t.removed=[];let c=Fe&&typeof e!=`string`&&An(e);if(c){Cn(e);let t=w(e);if(typeof t==`string`){let n=yt(t);if(!pe[n]||_e[n])throw vn(e),vt(`root node is forbidden and cannot be sanitized in-place`)}if(On(e))throw vn(e),vt(`root node is clobbered and cannot be sanitized in-place`);try{Gn(e)}catch(t){throw vn(e),t}}else if(An(e))i=wn(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===Qt.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Gn(i);else{if(!Oe&&!B&&!Ce&&e.indexOf(`<`)===-1)return T&&Ae?j(e):e;if(i=wn(e),!i)return Oe?null:Ae?E:``}i&&De&&gn(i.firstChild);let l=c?e:i;try{let e=Tn(l);for(;o=e.nextNode();)Ln(o,l),Un(o,l),kn(o.content)&&Wn(o.content)}catch(n){throw c&&(vn(e),U(t.removed,e=>{e.element&&xn(e.element)})),n}if(c){let n=!1;if(U(t.removed,t=>{t.element&&(t.element===e&&(n=!0),xn(t.element))}),n)throw vt(`a node selected for removal could not be safely returned; refusing to sanitize in place`);return B&&Dn(e),e}if(Oe){if(B&&Dn(i),ke)for(s=P.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(he.shadowroot||he.shadowrootmode)&&(s=F.call(r,s,!0)),s}let u=Ce?i.outerHTML:i.innerHTML;return Ce&&pe[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&_t(Kt,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
9
|
-
`+u),B&&(u=En(u)),T&&Ae?j(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ln(e),we=!0,Te=pe,Ee=he},t.clearConfig=function(){bt=null,we=!1,Te=null,Ee=null,T=D,E=``},t.isValidAttribute=function(e,t,n){bt||ln({});let r=yt(e),i=yt(t);return Rn(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&ht(ie,e)&&nt(ie[e],t)},t.removeHook=function(e,t){if(ht(ie,e)){if(t!==void 0){let n=et(ie[e],t);return n===-1?void 0:rt(ie[e],n,1)[0]}return tt(ie[e])}},t.removeHooks=function(e){ht(ie,e)&&(ie[e]=[])},t.removeAllHooks=function(){ie=an()},t}cn();function ln(e){let t=e.trim();if(!t)return()=>!1;if(t.startsWith(`/`)&&(t.endsWith(`/`)||/\/[gimuy]*$/.test(t)))try{let e=t.lastIndexOf(`/`),n=t.slice(1,e),r=t.slice(e+1),i=new RegExp(n,r||`i`);return e=>i.test(e)}catch{}if(t.includes(`^`)||t.includes(`$`)||t.includes(`(`)&&t.includes(`)`))try{let e=new RegExp(t,`i`);return t=>e.test(t)}catch{}if(t.startsWith(`*.`)){let e=t.slice(2).toLowerCase();return t=>{let n=t.toLowerCase();return n===e||n.endsWith(`.`+e)}}let n=t.toLowerCase();return e=>{let t=e.toLowerCase();return t===n||t.endsWith(`.`+n)}}let un=[`youtube.com`,`youtube-nocookie.com`,`youtu.be`,`xt-ml.github.io`,`kherrick.github.io`];function dn(e){e.map(e=>ln(e)).filter(Boolean)}dn(un);const fn=[],pn=[];let mn=new Set(fn.map(e=>e.toLowerCase().trim())),hn=[...pn],gn=[];function _n(e){gn=e.map(e=>ln(e)).filter(Boolean)}_n(hn);function vn(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.toLowerCase().trim():``).filter(Boolean):typeof e==`string`?e.split(/[\n,]+/).map(e=>e.toLowerCase().trim()).filter(Boolean):[]}function yn(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):typeof e==`string`?e.split(/[\n,]+/).map(e=>e.trim()).filter(Boolean):[]}function bn(e){let t=vn(e);mn=new Set(t)}function xn(e){let t=yn(e);hn=t,_n(t)}function Sn(e){if(!e||typeof e!=`string`)return!1;let t=e.trim().toLowerCase();return!t.includes(`-`)||t===`shadow-claw`||t.startsWith(`shadow-claw-`)||t.startsWith(`sc-`)?!0:mn.has(t)}function Cn(e){if(!e||typeof e!=`string`)return!1;let t=e.trim();if(!t||/^(?:javascript|data|vbscript):/i.test(t))return!1;if(/^blob:/i.test(t)||t.startsWith(`/`)||t.startsWith(`./`)||t.startsWith(`../`))return!0;try{let e=typeof globalThis<`u`&&globalThis.location?.origin&&globalThis.location.origin!==`null`?globalThis.location.origin:`http://localhost`,n=new URL(t,e);if(n.protocol!==`http:`&&n.protocol!==`https:`)return!1;if(typeof globalThis<`u`&&globalThis.location?.origin&&globalThis.location.origin!==`null`&&n.origin===globalThis.location.origin)return!0;let r=n.hostname.toLowerCase();return gn.some(e=>e(r))}catch{return!1}}function wn(e){if(!e||typeof e!=`object`)return;let t=e.allowedCustomElements||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedElements:void 0);t!==void 0&&bn(t);let n=e.allowedCustomElementDomains||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedDomains:void 0);n!==void 0&&xn(n)}let Tn=null;function En(e){Tn=e}function Dn(){if(typeof document>`u`)return;let e=document.getElementById(`shadow-claw-site-config`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);wn(t),Tn?.(t)}catch{}}let On=null,kn=!1;function An(){Dn(),!(kn||typeof customElements>`u`||typeof customElements.define!=`function`)&&(On=customElements.define.bind(customElements),customElements.define=function(e,t,n){if(!Sn((e||``).toLowerCase().trim())){let t=`[Security] Registration blocked: <${e}> is not an approved custom element.`;throw console.error(t),Error(t)}return On(e,t,n)},kn=!0)}function jn(e=typeof document<`u`?document.documentElement:null){if(typeof MutationObserver>`u`||!e)return null;if(typeof e.querySelectorAll==`function`)try{e.querySelectorAll(`*`).forEach(e=>{let t=e.tagName?e.tagName.toLowerCase():``;t.includes(`-`)&&!Sn(t)&&(console.warn(`[Security] Removing existing unapproved custom element: <${t}>`),e.remove())})}catch{}let t=new MutationObserver(e=>{for(let t of e)t.addedNodes.forEach(e=>{if(e.nodeType===1){let t=e,n=t.tagName?t.tagName.toLowerCase():``;n.includes(`-`)&&!Sn(n)&&(console.warn(`[Security] Removing unapproved custom element: <${n}>`),t.remove())}})});return t.observe(e,{childList:!0,subtree:!0}),t}const Mn=`allow-modals allow-scripts allow-popups allow-popups-to-escape-sandbox`,Nn=[`'self'`,`blob:`,`data:`],Pn=[`'self'`,`blob:`,`data:`],Fn=[`'self'`,`'unsafe-inline'`,`https:`,`http:`],In=[`'self'`,`blob:`,`data:`,`https:`,`http:`];let Ln=Mn;[...Nn],[...Pn],[...Fn],[...In];function Rn(e){Ln=Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean).join(` `):typeof e==`string`&&e.trim()?e.trim():Mn}function zn(e){if(!e||typeof e!=`object`)return;let t=e.allowedCustomElements||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedElements:void 0);t!==void 0&&bn(t);let n=e.allowedCustomElementDomains||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedDomains:void 0);n!==void 0&&xn(n);let r=typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.scripts:void 0;r!==void 0&&Bn(r),e.security?.iframeSandbox===void 0?(e.security?.allowSameOrigin===!0||e.security?.allowIframeSameOrigin===!0)&&(Ln.includes(`allow-same-origin`)||(Ln=`${Ln} allow-same-origin`.trim())):Rn(e.security.iframeSandbox),e.security?.workerSrc!==void 0&&yn(e.security.workerSrc),e.security?.connectSrc!==void 0&&yn(e.security.connectSrc),e.security?.scriptSrc!==void 0&&yn(e.security.scriptSrc),e.security?.styleSrc!==void 0&&yn(e.security.styleSrc),e.security?.imgSrc!==void 0&&yn(e.security.imgSrc)}En(zn);function Bn(e){Array.isArray(e)&&e.map(e=>
|
|
9
|
+
`+u),B&&(u=En(u)),T&&Ae?j(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ln(e),we=!0,Te=pe,Ee=he},t.clearConfig=function(){bt=null,we=!1,Te=null,Ee=null,T=D,E=``},t.isValidAttribute=function(e,t,n){bt||ln({});let r=yt(e),i=yt(t);return Rn(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&ht(ie,e)&&nt(ie[e],t)},t.removeHook=function(e,t){if(ht(ie,e)){if(t!==void 0){let n=et(ie[e],t);return n===-1?void 0:rt(ie[e],n,1)[0]}return tt(ie[e])}},t.removeHooks=function(e){ht(ie,e)&&(ie[e]=[])},t.removeAllHooks=function(){ie=an()},t}cn();function ln(e){let t=e.trim();if(!t)return()=>!1;if(t.startsWith(`/`)&&(t.endsWith(`/`)||/\/[gimuy]*$/.test(t)))try{let e=t.lastIndexOf(`/`),n=t.slice(1,e),r=t.slice(e+1),i=new RegExp(n,r||`i`);return e=>i.test(e)}catch{}if(t.includes(`^`)||t.includes(`$`)||t.includes(`(`)&&t.includes(`)`))try{let e=new RegExp(t,`i`);return t=>e.test(t)}catch{}if(t.startsWith(`*.`)){let e=t.slice(2).toLowerCase();return t=>{let n=t.toLowerCase();return n===e||n.endsWith(`.`+e)}}let n=t.toLowerCase();return e=>{let t=e.toLowerCase();return t===n||t.endsWith(`.`+n)}}let un=[`youtube.com`,`youtube-nocookie.com`,`youtu.be`,`xt-ml.github.io`,`kherrick.github.io`];function dn(e){e.map(e=>ln(e)).filter(Boolean)}dn(un);const fn=[],pn=[];let mn=new Set(fn.map(e=>e.toLowerCase().trim())),hn=[...pn],gn=[];function _n(e){gn=e.map(e=>ln(e)).filter(Boolean)}_n(hn);function vn(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.toLowerCase().trim():``).filter(Boolean):typeof e==`string`?e.split(/[\n,]+/).map(e=>e.toLowerCase().trim()).filter(Boolean):[]}function yn(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):typeof e==`string`?e.split(/[\n,]+/).map(e=>e.trim()).filter(Boolean):[]}function bn(e){let t=vn(e);mn=new Set(t)}function xn(e){let t=yn(e);hn=t,_n(t)}function Sn(e){if(!e||typeof e!=`string`)return!1;let t=e.trim().toLowerCase();return!t.includes(`-`)||t===`shadow-claw`||t.startsWith(`shadow-claw-`)||t.startsWith(`sc-`)?!0:mn.has(t)}function Cn(e){if(!e||typeof e!=`string`)return!1;let t=e.trim();if(!t||/^(?:javascript|data|vbscript):/i.test(t))return!1;if(/^blob:/i.test(t)||t.startsWith(`/`)||t.startsWith(`./`)||t.startsWith(`../`))return!0;try{let e=typeof globalThis<`u`&&globalThis.location?.origin&&globalThis.location.origin!==`null`?globalThis.location.origin:`http://localhost`,n=new URL(t,e);if(n.protocol!==`http:`&&n.protocol!==`https:`)return!1;if(typeof globalThis<`u`&&globalThis.location?.origin&&globalThis.location.origin!==`null`&&n.origin===globalThis.location.origin)return!0;let r=n.hostname.toLowerCase();return gn.some(e=>e(r))}catch{return!1}}function wn(e){if(!e||typeof e!=`object`)return;let t=e.allowedCustomElements||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedElements:void 0);t!==void 0&&bn(t);let n=e.allowedCustomElementDomains||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedDomains:void 0);n!==void 0&&xn(n)}let Tn=null;function En(e){Tn=e}function Dn(){if(typeof document>`u`)return;let e=document.getElementById(`shadow-claw-site-config`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);wn(t),Tn?.(t)}catch{}}let On=null,kn=!1;function An(){Dn(),!(kn||typeof customElements>`u`||typeof customElements.define!=`function`)&&(On=customElements.define.bind(customElements),customElements.define=function(e,t,n){if(!Sn((e||``).toLowerCase().trim())){let t=`[Security] Registration blocked: <${e}> is not an approved custom element.`;throw console.error(t),Error(t)}return On(e,t,n)},kn=!0)}function jn(e=typeof document<`u`?document.documentElement:null){if(typeof MutationObserver>`u`||!e)return null;if(typeof e.querySelectorAll==`function`)try{e.querySelectorAll(`*`).forEach(e=>{let t=e.tagName?e.tagName.toLowerCase():``;t.includes(`-`)&&!Sn(t)&&(console.warn(`[Security] Removing existing unapproved custom element: <${t}>`),e.remove())})}catch{}let t=new MutationObserver(e=>{for(let t of e)t.addedNodes.forEach(e=>{if(e.nodeType===1){let t=e,n=t.tagName?t.tagName.toLowerCase():``;n.includes(`-`)&&!Sn(n)&&(console.warn(`[Security] Removing unapproved custom element: <${n}>`),t.remove())}})});return t.observe(e,{childList:!0,subtree:!0}),t}const Mn=`allow-modals allow-scripts allow-popups allow-popups-to-escape-sandbox`,Nn=[`'self'`,`blob:`,`data:`],Pn=[`'self'`,`blob:`,`data:`],Fn=[`'self'`,`'unsafe-inline'`,`https:`,`http:`],In=[`'self'`,`blob:`,`data:`,`https:`,`http:`];let Ln=Mn;[...Nn],[...Pn],[...Fn],[...In];function Rn(e){Ln=Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean).join(` `):typeof e==`string`&&e.trim()?e.trim():Mn}function zn(e){if(!e||typeof e!=`object`)return;let t=e.allowedCustomElements||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedElements:void 0);t!==void 0&&bn(t);let n=e.allowedCustomElementDomains||(typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.allowedDomains:void 0);n!==void 0&&xn(n);let r=typeof e.customElements==`object`&&!Array.isArray(e.customElements)?e.customElements?.scripts:void 0;r!==void 0&&Bn(r),e.security?.iframeSandbox===void 0?(e.security?.allowSameOrigin===!0||e.security?.allowIframeSameOrigin===!0)&&(Ln.includes(`allow-same-origin`)||(Ln=`${Ln} allow-same-origin`.trim())):Rn(e.security.iframeSandbox),e.security?.workerSrc!==void 0&&yn(e.security.workerSrc),e.security?.connectSrc!==void 0&&yn(e.security.connectSrc),e.security?.scriptSrc!==void 0&&yn(e.security.scriptSrc),e.security?.styleSrc!==void 0&&yn(e.security.styleSrc),e.security?.imgSrc!==void 0&&yn(e.security.imgSrc)}En(zn);function Bn(e){Array.isArray(e)&&e.map(e=>{let t=typeof e==`string`?e:e?.src,n=typeof e==`object`&&e&&typeof e.id==`string`?e.id.trim():void 0,r=typeof e==`object`&&e&&typeof e.name==`string`?e.name.trim():void 0,i=typeof e==`object`&&e?!!(e.global||e.autoload):!1,a=typeof e==`object`&&e&&typeof e.type==`string`?e.type:void 0,o=typeof e==`object`&&e&&typeof e.async==`boolean`?e.async:void 0,s=typeof e==`object`&&e&&typeof e.defer==`boolean`?e.defer:void 0,c=typeof e==`object`&&e?!!e.hasInit:!1;return{src:t,...n?{id:n}:{},...r?{name:r}:{},...i?{global:!0,autoload:!0}:{},...a?{type:a}:{},...o?{async:o}:{},...s?{defer:s}:{},hasInit:c}}).filter(e=>typeof e.src==`string`&&Cn(e.src))}async function Vn(e){try{let{getDb:t}=await import(`./db-BUuJo1Gf.js`).then(e=>e.t),{getConfig:n}=await import(`./get-config-Bkvl__ZS.js`).then(e=>e.n),r=e??await t();if(!r)return;let[i,a]=await Promise.all([n(r,`allowed_custom_elements`),n(r,`allowed_custom_element_host_patterns`)]);if(typeof i==`string`&&i.trim())try{bn(JSON.parse(i))}catch{bn(i)}if(typeof a==`string`&&a.trim())try{xn(JSON.parse(a))}catch{xn(a)}}catch(e){console.warn(`Failed to load custom element security from db:`,e)}}const Hn=`shadowclaw`;let Un;function Wn(){let e=globalThis.trustedTypes;return!e||typeof e.createPolicy!=`function`?null:e}function Gn(){if(Un!==void 0)return Un;let e=Wn();if(!e)return Un=null,Un;if(typeof e.getPolicy==`function`){let t=e.getPolicy(Hn);if(t)return Un=t,Un}try{Un=e.createPolicy(Hn,{createHTML:e=>e,createScriptURL:e=>e})}catch{Un=typeof e.getPolicy==`function`?e.getPolicy(Hn)??null:null}return Un}function Kn(e){let t=Gn();return!t||typeof t.createScriptURL!=`function`?e:t.createScriptURL(e)}async function qn(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(Yn(t)),await e.close()}else if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await Xn(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}}else throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function Jn(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await Xn(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
|
|
10
10
|
`);i=URL.createObjectURL(new Blob([e],{type:`text/javascript`})),a=new Worker(Kn(i))}catch{i&&URL.revokeObjectURL(i),r(/* @__PURE__ */ Error(`Writable file streams are not supported by this browser/storage backend.`));return}let o=()=>{a&&a.terminate(),URL.revokeObjectURL(i)};a.onmessage=e=>{o(),e.data?.error?r(Error(e.data.error)):t()},a.onerror=e=>{o(),r(Error(e.message||`Worker file write failed`))},a.postMessage({pathSegments:e,bytes:n},[n.buffer])})}function Yn(e){if(typeof e==`string`||e instanceof Blob)return e;if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),new Blob([t])}return new Blob([e])}async function Xn(e){return e instanceof Uint8Array?e:typeof e==`string`?new TextEncoder().encode(e):e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof ArrayBuffer?new Uint8Array(e):/* @__PURE__ */ new Uint8Array}async function Zn(e,t,n,r){let{dirs:i,filename:a}=je(n);for(let n=0;n<2;n++)try{let n=await Ae(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await qn(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await ke(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await Jn([Se(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&Oe(e)){De();continue}throw e}}async function Qn(e,t,n,r){let{dirs:i,filename:a}=je(n);for(let n=0;n<2;n++)try{let n=await Ae(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await qn(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await ke(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await Jn([Se(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&Oe(e)){De();continue}throw e}}function W(e,t,n){return c(e,`config`,`readwrite`,e=>e.put({key:t,value:n})).then(()=>void 0)}const $n=`keys`,er=`api-key-encryption`;function tr(){return new Promise((e,t)=>{let n=indexedDB.open(`shadowclaw-keystore`,1);n.onupgradeneeded=()=>{n.result.createObjectStore($n)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function nr(){let e=await tr();if(!e)return null;let t=await new Promise((t,n)=>{let r=e.transaction($n,`readonly`).objectStore($n).get(er);r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)});if(t)return e.close(),t;let n=await crypto.subtle.generateKey({name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`]);try{await new Promise((t,r)=>{let i=e.transaction($n,`readwrite`);i.objectStore($n).put(n,er),i.oncomplete=()=>t(),i.onerror=()=>r(i.error)})}finally{e.close()}return n}async function rr(e){let t=await nr();if(!t)return null;let n=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(12)),r=await crypto.subtle.encrypt({name:`AES-GCM`,iv:n},t,new TextEncoder().encode(e)),i=new Uint8Array(n.length+new Uint8Array(r).length);return i.set(n),i.set(new Uint8Array(r),n.length),btoa(String.fromCharCode(...i))}async function ir(e){let t=await nr();if(!t)return null;let n=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),r=n.slice(0,12),i=n.slice(12),a=await crypto.subtle.decrypt({name:`AES-GCM`,iv:r},t,i);return new TextDecoder().decode(a)}function ar(e){return!e||e.authMode===`token`||e.authMode===`pat`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}function or(e){return ar(e)}function sr(e,t){return or(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function cr(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await ir(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await ir(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await W(e,I.SERVICE_ACCOUNTS,t))},o=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await a(r),r};try{let e=await fetch(`/oauth/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:n.oauthProviderId,clientId:n.oauthClientId,clientSecret:i,refreshToken:r,scope:n.scopes,tokenUrl:n.oauthCustomTokenUrl})});if(!e.ok)return o();let t=await e.json();if(!t.accessToken)return o();let s=await rr(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await rr(t.refreshToken);e&&(c=e)}let l={...n,token:s,refreshToken:c,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await a(l),l}catch{return o()}}function lr(e,t){if(e.oauthProviderId){let t=se(e.oauthProviderId);if(t)return t}let n=[e.service,e.hostPattern,t].filter(e=>!!e).map(e=>e.toLowerCase());for(let e of Object.values(re))if([e.providerId,...e.aliases||[]].map(e=>e.toLowerCase()).some(e=>n.some(t=>t.includes(e))))return e;return null}function ur(e,t){let n=or(e),r=lr(e,t);if(r){let e;return e=n===`oauth`?r.tokenAuth.oauth:n===`basic`&&r.tokenAuth.basic?r.tokenAuth.basic:r.tokenAuth.token,{headerName:e.headerName,headerPrefix:e.headerPrefix||``}}return{headerName:`Authorization`,headerPrefix:n===`basic`?`Basic `:`Bearer `}}function dr(e,t){let n=[],r=-1,i=t.toLowerCase();for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();i.includes(e)&&(e.length>r?(r=e.length,n.length=0,n.push(t)):e.length===r&&n.push(t))}return n}function fr(e,t){return e.length?t&&e.find(e=>or(e)===t)||e[0]:void 0}async function pr(e,t,n={}){let r=await l(e,I.SERVICE_ACCOUNTS),i=Array.isArray(r)?r:[];if(i.length===0)return;let a;if(n.accountId&&(a=i.find(e=>e.id===n.accountId)),!a&&t){let e=dr(i,t);a=n.authMode?fr(e,n.authMode):fr(e,e[0]?lr(e[0],t)?.defaultMode:void 0)}if(!a){let t=await l(e,I.SERVICE_DEFAULT_ACCOUNT);t&&(a=i.find(e=>e.id===t))}if(!a&&n.authMode&&(a=fr(i,n.authMode)),a||=i[0],!a)return;if(sr(a,n)&&(a=await cr(e,i,a)),or(a)===`oauth`&&a.oauthReauthRequired)return{token:``,service:a.service,hostPattern:a.hostPattern,headerName:`Authorization`,headerValue:``,accountId:a.id,authMode:`oauth`,reauthRequired:!0};let o=``;a.token&&(o=await ir(a.token)??``);let{headerName:s,headerPrefix:c}=ur(a,t),u=o;or(a)===`basic`&&a.basicUsername&&(u=btoa(`${a.basicUsername}:${o}`));let d=c?`${c}${u}`:u;return{token:o,service:a.service,hostPattern:a.hostPattern,headerName:s,headerValue:d,accountId:a.id,authMode:or(a)}}function mr(e){return ar(e)}function hr(e){switch(e){case`azure-devops`:return`azure_devops`;default:return e}}function gr(e){if(!e)return`generic`;let t=e.toLowerCase();return t.includes(`github`)?`github`:t.includes(`dev.azure.com`)||t.includes(`visualstudio.com`)?`azure-devops`:t.includes(`gitlab`)?`gitlab`:`generic`}function _r(e){if(e.reauthRequired)return{};let t=e.provider||gr(e.hostPattern||``),n=hr(t),r=e.authMode||`token`;if(e.token&&n===`azure_devops`&&ce(n,r,`git_remote`)?.headerPrefix===`Basic `)return{Authorization:`Basic ${btoa(`:`+e.token)}`};if(t===`azure-devops`&&e.username&&e.password)return{Authorization:`Basic ${btoa(e.username+`:`+e.password)}`};if(e.token){let t=ce(n,r,`git_remote`);return t?.headerName?{[t.headerName]:`${t.headerPrefix||``}${e.token}`}:{Authorization:`Bearer ${e.token}`}}return{}}function vr(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return n?t.hostname+n:t.hostname}catch{return}}function yr(e,t){let n=t.toLowerCase(),r=[],i=-1;for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();n.includes(e)&&(e.length>i?(i=e.length,r.length=0,r.push(t)):e.length===i&&r.push(t))}return r}function br(e,t){if(!e.length)return;if(!t)return e[0];let n=e.find(e=>mr(e)===t);if(n)return n;if(t===`token`){let t=e.find(e=>mr(e)===`token`&&!e.authMode);if(t)return t}return e[0]}async function xr(e){if(e)return await ir(e)??void 0}function Sr(e,t){return mr(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function Cr(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await xr(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await xr(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await W(e,I.GIT_ACCOUNTS,t))},o=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await a(r),r};try{let e=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:n.oauthClientId,clientSecret:i,providerId:n.oauthProviderId,refreshToken:r,scope:n.scopes}),headers:{"content-type":`application/json`},method:`POST`});if(!e.ok)return o();let t=await e.json();if(!t.accessToken)return o();let s=await rr(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await rr(t.refreshToken);e&&(c=e)}let l={...n,token:s,refreshToken:c,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await a(l),l}catch{return o()}}async function wr(e,t,n={}){let r=await l(e,I.GIT_ACCOUNTS);return Array.isArray(r)&&r.length>0?Tr(e,r,t,n):Er(e)}async function Tr(e,t,n,r={}){let i;if(r.accountId&&(i=t.find(e=>e.id===r.accountId)),!i&&n){let e=vr(n);e&&(i=br(yr(t,e),r.authMode))}if(!i){let r=await l(e,I.GIT_DEFAULT_ACCOUNT);if(r){let e=t.find(e=>e.id===r);if(e){if(!n)i=e;else{let t=vr(n);if(t&&e.hostPattern){let n=t?.toLowerCase(),r=e.hostPattern.toLowerCase();n?.includes(r)&&(i=e)}}}}}if(!i&&!n&&r.authMode&&(i=br(t,r.authMode)),!i&&!n&&(i=t[0]),!i)return{authMode:`token`,authorEmail:void 0,authorName:void 0,password:void 0,provider:`generic`,token:void 0,username:void 0};Sr(i,r)&&(i=await Cr(e,t,i));let a=i.provider||gr(i.hostPattern||``);return mr(i)===`oauth`&&i.oauthReauthRequired?{accountId:i.id,authMode:`oauth`,authorEmail:i.authorEmail||void 0,authorName:i.authorName||void 0,hostPattern:i.hostPattern||void 0,password:void 0,provider:a,reauthRequired:!0,token:void 0,username:i.username||void 0}:{accountId:i.id,authMode:mr(i),authorEmail:i.authorEmail||void 0,authorName:i.authorName||void 0,hostPattern:i.hostPattern||void 0,password:await xr(i.password),provider:a,token:await xr(i.token),username:i.username||void 0}}async function Er(e){let t=await l(e,I.GIT_TOKEN),n=await l(e,I.GIT_PASSWORD);return{authMode:`token`,authorEmail:await l(e,I.GIT_AUTHOR_EMAIL)||void 0,authorName:await l(e,I.GIT_AUTHOR_NAME)||void 0,password:n?await xr(n):void 0,provider:`generic`,token:t?await xr(t):void 0,username:await l(e,I.GIT_USERNAME)||void 0}}const Dr=`0123456789ABCDEFGHJKMNPQRSTVWXYZ`;let Or=0,kr=[];function Ar(){let e=Date.now();if(e===Or)for(let e=kr.length-1;e>=0;e--){if(kr[e]<31){kr[e]++;break}kr[e]=0}else Or=e,kr=Array.from(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)),e=>e%32);let t=e,n=Array(10);for(let e=9;e>=0;e--)n[e]=Dr[t%32],t=Math.floor(t/32);let r=kr.map(e=>Dr[e]);return n.join(``)+r.join(``)}function jr(e){if(typeof e!=`string`||!e.trim())return!1;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`}catch{return!1}}function Mr(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(!n.serviceType||!n.authType)return null;if(n.serviceType!==t)throw Error(`Credential ref serviceType must match connection serviceType`);return{serviceType:n.serviceType,authType:n.authType,providerId:n.providerId||void 0,accountId:n.accountId||void 0,gitAccountId:n.gitAccountId||void 0,headerName:n.headerName||void 0,encryptedValue:n.encryptedValue||void 0}}function Nr(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.serviceType||!t.transport||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!jr(t.serverUrl)||t.serviceType!==`mcp_remote`&&t.serviceType!==`webmcp_local`||t.transport!==`streamable_http`&&t.transport!==`sse`&&t.transport!==`websocket`?null:{id:t.id,label:t.label,serviceType:t.serviceType,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled,autoReconnectOAuth:t.autoReconnectOAuth===!0,createdAt:t.createdAt,updatedAt:t.updatedAt,credentialRef:Mr(t.credentialRef,t.serviceType)}}async function Pr(e){let t=await l(e,I.REMOTE_MCP_CONNECTIONS);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=Nr(e);t&&n.push(t)}return n}async function Fr(e){return Pr(e)}async function Ir(e,t){if(!t)return null;let n=await Pr(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}function Lr(e){return e===`oauth`?`oauth`:`token`}async function Rr(e,t,n={}){let r=await Ir(e,t);if(!r)return null;let i=r.credentialRef;if(!i||i.authType===`none`)return{connection:r,authType:`none`,headers:{}};if(i.authType===`custom_header`){if(!i.headerName||!i.encryptedValue)return{connection:r,authType:`custom_header`,headers:{}};let e=await ir(i.encryptedValue);return{connection:r,authType:`custom_header`,headers:e?{[i.headerName]:e}:{}}}let a=Lr(i.authType);if(i.accountId){let t=await pr(e,r.serverUrl,{accountId:i.accountId,authMode:a,forceRefresh:n.forceRefresh});return t?t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:t.headerValue?{[t.headerName]:t.headerValue}:{}}:{connection:r,authType:i.authType,headers:{}}}if(i.gitAccountId){let t=await wr(e,r.serverUrl,{accountId:i.gitAccountId,authMode:a,forceRefresh:n.forceRefresh});return t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:_r(t)}}return{connection:r,authType:i.authType,headers:{}}}const zr=/* @__PURE__ */ new Map;function Br(e){return typeof e==`object`&&!!e&&`method`in e&&`id`in e&&!(`result`in e)&&!(`error`in e)}function Vr(e){let t=(e.requestedSchema||{}).properties||{},n={};for(let[e,r]of Object.entries(t))`default`in r?n[e]=r.default:r.type===`boolean`&&(n[e]=!0);return n}var Hr=class extends Error{constructor(e){super(e),this.name=`InvalidRemoteMcpSessionError`}},Ur=class extends Error{status;constructor(e,t){super(t),this.name=`HttpRemoteMcpError`,this.status=e}},Wr=class extends Error{connectionId;constructor(e){super(`OAuth reconnect required for remote MCP connection`),this.name=`McpReauthRequiredError`,this.connectionId=e}};function Gr(e,t){return!e.headers||typeof e.headers.get!=`function`?null:e.headers.get(t)}function Kr(e){return/no valid session id provided/i.test(e)}function qr(e,t){let n=t&&`error`in t?t.error.message||`Remote MCP JSON-RPC error`:``;return Kr(n)?new Hr(n):e.ok?Error(n||`Remote MCP JSON-RPC error`):new Ur(e.status,n?`Remote MCP HTTP error: ${e.status} (${n})`:`Remote MCP HTTP error: ${e.status}`)}function Jr(e){if(!e)return null;let t=null,n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(r&&r!==`[DONE]`)try{let e=JSON.parse(r);e&&typeof e==`object`&&`jsonrpc`in e&&(t=e)}catch{}}return t}function Yr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Xr(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,...t},body:JSON.stringify(n)}),i=(Gr(r,`content-type`)||``).toLowerCase(),a=null;if(typeof r.text==`function`){let e=await r.text();a=i.includes(`text/event-stream`)?Jr(e):Yr(e)}else try{a=await r.json()}catch{a=null}return{response:r,payload:a}}async function Zr(e,t,n){let{response:r,payload:i}=await Xr(e,{...t,"mcp-session-id":n},{jsonrpc:`2.0`,method:`notifications/initialized`,params:{}});if(!r.ok||i&&`error`in i)throw qr(r,i)}async function Qr(e,t,n){let r=zr.get(e);if(r?.sessionId)return r;let{response:i,payload:a}=await Xr(t,n,{jsonrpc:`2.0`,id:`initialize-${Date.now().toString(36)}`,method:`initialize`,params:{protocolVersion:`2025-03-26`,capabilities:{elicitation:{}},clientInfo:{name:`shadowclaw-remote-mcp-client`,version:`1.0.0`}}});if(!i.ok||a&&`error`in a)throw qr(i,a);let o=Gr(i,`mcp-session-id`)||`local-${Date.now()}-${Math.random().toString(36).slice(2)}`,s={sessionId:o,protocolVersion:Gr(i,`mcp-protocol-version`)||a?.result?.protocolVersion,lastUsedAt:Date.now()};return await Zr(t,n,o),zr.set(e,s),s}async function $r(e,t,n,r,i){let a=await Qr(e,t,n),o=async e=>{let a={jsonrpc:`2.0`,id:Date.now().toString(),method:r,params:i||{}},o={...n,"mcp-session-id":e},{response:s,payload:c}=await Xr(t,o,a),l=0;for(;Br(c)&&l<5&&(l++,c.method===`elicitation/create`);){let e=Vr(c.params||{});({response:s,payload:c}=await Xr(t,o,{jsonrpc:`2.0`,id:c.id,result:{action:`accept`,content:e}}))}if(Br(c))throw Error(`Unsupported server request: ${c.method}`);if(!s.ok||!c||`error`in c)throw qr(s,c);return c.result};try{let t=await o(a.sessionId);return a.lastUsedAt=Date.now(),zr.set(e,a),t}catch(r){if(!(r instanceof Hr))throw r;zr.delete(e),a=await Qr(e,t,n);let i=await o(a.sessionId);return a.lastUsedAt=Date.now(),zr.set(e,a),i}}function ei(e){e&&zr.delete(e)}async function ti(e,t,n,r){let i=await Rr(e,t);if(!i)throw Error(`Remote MCP connection not found`);if(i.reauthRequired)throw new Wr(t);let{connection:a,authType:o,headers:s}=i;if(a.transport!==`streamable_http`)throw Error(`Unsupported remote MCP transport`);try{return await $r(t,a.serverUrl,s,n,r)}catch(i){if(!(i instanceof Ur)||i.status!==401||o!==`oauth`)throw i;ei(t);let a=await Rr(e,t,{forceRefresh:!0});if(!a||a.reauthRequired)throw new Wr(t);try{return await $r(t,a.connection.serverUrl,a.headers,n,r)}catch(e){throw e instanceof Ur&&e.status===401?new Wr(t):e}}}async function ni(e,t){let n=await ti(e,t,`tools/list`);return Array.isArray(n.tools)?n.tools:[]}async function ri(e,t,n,r={}){return ti(e,t,`tools/call`,{name:n,arguments:r})}let ii=null;function ai(e){ii=e}const oi=/* @__PURE__ */ new Map;function si(e,t){oi.set(e,t)}function ci(e){oi.delete(e)}function li(e){let t=e?.payload?.groupId;t&&oi.has(t)?oi.get(t).push(e):ii?ii(e):typeof self<`u`&&typeof self.postMessage==`function`&&self.postMessage(e)}const ui=/* @__PURE__ */ new Set,di=/* @__PURE__ */ new Set,fi=`WebVM is disabled. Enable it in Settings to use WebVM.`,pi=6e4,mi=typeof document>`u`?`worker`:`ui`,hi=/* @__PURE__ */ new Map,gi=/* @__PURE__ */ new Map,_i=/* @__PURE__ */ new Map,vi=/* @__PURE__ */ new Map,yi=/* @__PURE__ */ new Map,bi=/* @__PURE__ */ new Set,xi=/* @__PURE__ */ new Map;let Si=null,Ci=null,wi=null,Ti=!1,Ei=0,Di=!1,Oi=null,ki=null,Ai=null,ji=``,Mi=``,Ni=null,Pi=`disabled`,Fi=`wss://relay.widgetry.org/`,Ii=!1,Li=null,Ri=!1,zi=null,Bi=!1;function Vi(e){return e===Ei}function Hi(){return`[WebVM:${mi}]`}async function Ui(e){if(e?.destroy)try{await Promise.resolve(e.destroy())}catch{}}async function Wi(){if(Pi===`disabled`){Ra();return}if(ki?.isReady())return;if(Oi)return Oi;if(Ti)return;let e=++Ei;return Ti=!0,Di=!0,Ra(),Oi=(async()=>{try{await ca(e)}finally{if(!Vi(e))return;Di=!1,Oi=null,Ra()}})(),Oi}async function Gi(e,t=900,n=null){if(!ki?.isReady()){let e=Ji();return`Error: WebVM is not available. The VM requires local assets served at /assets/ (alpine-fs.json, libv86.mjs, etc). Use the "javascript" tool for code execution, or the "fetch_url" tool for HTTP requests.`+(e.error?`\nReason: ${e.error}`:e.booting?`
|
|
11
11
|
Reason: VM is still booting in the background...`:``)}if(wi===`command`)return`Error: WebVM is currently busy running another command.`;let r=!1,i=ki.getEmulator();wi===`terminal`?(Bi=!0,Ba(i),wi=`command`,r=!0):wi=`command`;try{if(ki.getMode()===`9p`&&n&&n.groupId)try{await fa(i,n)}catch(e){console.warn(`[WebVM] Failed to seed host workspace into 9p VM:`,e)}let r=ki.getMode()===`9p`?`cd /home/user && ${e}`:e,a=await ki.execute(r,t);if(ki.getMode()===`9p`&&n&&n.groupId){await ki.execute(`sync`,10).catch(()=>{});try{await ma(i,n)}catch(e){console.warn(`[WebVM] Failed to sync 9p VM workspace back to host:`,e)}}let o=``;return a.stdout&&(o+=a.stdout),a.stderr&&(o+=(o?`
|
|
12
12
|
`:``)+a.stderr),a.timedOut&&(o+=`
|
|
@@ -2089,7 +2089,7 @@ t.exports=function(e){return typeof e==`string`&&e.charAt(0)===``?e.slice(1):
|
|
|
2089
2089
|
`}})),DY=/* @__PURE__ */ r(((e,t)=>{let n=wY();t.exports=function(e,t){let r=n(t);if(e.data??={},typeof r.excerpt==`function`)return r.excerpt(e,r);let i=e.data.excerpt_separator||r.excerpt_separator;if(i==null&&(r.excerpt===!1||r.excerpt==null))return e;let a=typeof r.excerpt==`string`?r.excerpt:i||r.delimiters[0],o=e.content.indexOf(a);return o!==-1&&(e.excerpt=e.content.slice(0,o)),e}})),OY=/* @__PURE__ */ r(((e,t)=>{let n=BJ(),r=EY(),i=CY();t.exports=function(e){return n(e)!==`object`&&(e={content:e}),n(e.data)!==`object`&&(e.data={}),e.contents&&e.content==null&&(e.content=e.contents),i.define(e,`orig`,i.toBuffer(e.content)),i.define(e,`language`,e.language||``),i.define(e,`matter`,e.matter||``),i.define(e,`stringify`,function(t,n){return n&&n.language&&(e.language=n.language),r(e,t,n)}),e.content=i.toString(e.content),e.isEmpty=!1,e.excerpt=``,e}})),kY=/* @__PURE__ */ r(((e,t)=>{let n=TY(),r=wY();t.exports=function(e,t,i){let a=r(i),o=n(e,a);if(typeof o.parse!=`function`)throw TypeError(`expected "`+e+`.parse" to be a function`);return o.parse(t,a)}})),AY=/* @__PURE__ */ e((/* @__PURE__ */ r(((e,t)=>{let n=zJ(),r=UJ(),i=wY(),a=EY(),o=DY(),s=xY(),c=OY(),l=kY(),u=CY();function d(e,t){if(e===``)return{data:{},content:e,excerpt:``,orig:e};let n=c(e),r=d.cache[n.content];if(!t){if(r)return n=Object.assign({},r),n.orig=r.orig,n;d.cache[n.content]=n}return f(n,t)}function f(e,t){let n=i(t),a=n.delimiters[0],s=`
|
|
2090
2090
|
`+n.delimiters[1],c=e.content;n.language&&(e.language=n.language);let f=a.length;if(!u.startsWith(c,a,f))return o(e,n),e;if(c.charAt(f)===a.slice(-1))return e;c=c.slice(f);let p=c.length,m=d.language(c,n);m.name&&(e.language=m.name,c=c.slice(m.raw.length));let h=c.indexOf(s);return h===-1&&(h=p),e.matter=c.slice(0,h),e.matter.replace(/^\s*#[^\n]+/gm,``).trim()===``?(e.isEmpty=!0,e.empty=e.content,e.data={}):e.data=l(e.language,e.matter,n),h===p?e.content=``:(e.content=c.slice(h+s.length),e.content[0]===`\r`&&(e.content=e.content.slice(1)),e.content[0]===`
|
|
2091
2091
|
`&&(e.content=e.content.slice(1))),o(e,n),(n.sections===!0||typeof n.section==`function`)&&r(e,n.section),e}d.engines=s,d.stringify=function(e,t,n){return typeof e==`string`&&(e=d(e,n)),a(e,t,n)},d.read=function(e,t){let r=d(n.readFileSync(e,`utf8`),t);return r.path=e,r},d.test=function(e,t){return u.startsWith(e,i(t).delimiters[0])},d.language=function(e,t){let n=i(t).delimiters[0];d.test(e)&&(e=e.slice(n.length));let r=e.slice(0,e.search(/\r?\n/));return{raw:r,name:r?r.trim():``}},d.cache={},d.clearCache=function(){d.cache={}},t.exports=d})))(),1);const jY=/^[a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]$|^[a-z0-9]$/;function MY(e){try{let t=(0,AY.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);if(t){let e=t[1],n=t[2]||``,r=e.split(/\r?\n/).map(e=>{let t=e.match(/^([a-zA-Z0-9_-]+):\s*(.+)$/);if(t){let[,e,n]=t,r=n.trim();if(r&&r!==`true`&&r!==`false`&&r!==`null`&&!r.startsWith(`"`)&&!r.startsWith(`'`)&&!r.startsWith(`[`)&&!r.startsWith(`{`)&&r!==`>`&&r!==`|`&&r!==`>-`&&r!==`|-`&&!/^-?\d+(?:\.\d+)?$/.test(r))return`${e}: ${JSON.stringify(r)}`}return e});try{let e=`---\n${r.join(`
|
|
2092
|
-
`)}\n---\n${n}`,t=(0,AY.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{}let i={},a=e.match(/^name:\s*["']?([^"'\r\n]+)["']?/m);a&&(i.name=a[1].trim());let o=e.match(/^description:\s*(.+)$/m);if(o){let e=o[1].trim();(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))&&(e=e.slice(1,-1)),i.description=e}let s=e.match(/^user-invocable:\s*(true|false)/im);s&&(i[`user-invocable`]=s[1].toLowerCase()===`true`);let c=e.match(/^disable-model-invocation:\s*(true|false)/im);c&&(i[`disable-model-invocation`]=c[1].toLowerCase()===`true`);let l=e.match(/^allowed-tools:\s*["']?([^"'\r\n]+)["']?/m);l&&(i[`allowed-tools`]=l[1].trim());let u=e.match(/allowed-tools:\s*\n((?:\s*-\s*[^\r\n]+\r?\n?)+)/m);if(u){let e=u[1].split(/\r?\n/).map(e=>e.replace(/^\s*-\s*/,``).trim()).filter(Boolean);e.length>0&&(i[`allowed-tools`]=e)}return{data:i,content:n}}return{data:{},content:e}}}function NY(e){if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t.join(` `):void 0}}function PY(e,t){let n=MY(t),r=n.data,i=typeof r.name==`string`?r.name.trim():``,a=typeof r.description==`string`?r.description.trim():``;if(!i)throw Error(`Skill at ${e} requires a name`);if(!a)throw Error(`Skill ${i} requires a description`);if(i.length>64||!jY.test(i))throw Error(`Skill name must be 1-64 lowercase characters and hyphens: ${i}`);if(a.length>1024)throw Error(`Skill ${i} description must be 1024 characters or fewer`);let o=e.replace(/\/SKILL\.md$/u,``),s=r.metadata&&typeof r.metadata==`object`?r.metadata:void 0,c=NY(s?.[`allowed-tools`])||NY(s?.allowedTools)||NY(r[`allowed-tools`])||NY(r.allowedTools),l=[];if(s){for(let[e,t]of Object.entries(s))if(e!==`execution`&&t!=null){if(e===`allowed-tools`||e===`allowedTools`)c&&l.push([e,c]);else if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)l.push([e,String(t)]);else if(Array.isArray(t)){let n=t.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean);n.length>0&&l.push([e,n.join(` `)])}}}let u=l.length>0?Object.fromEntries(l):void 0,d=s?.execution,f;if(d!==void 0){if(!d||typeof d!=`object`||d.type!==`tools`||!Array.isArray(d.tools))throw Error(`Skill ${i} has invalid tools execution`);let e=d,t=typeof e.suppressToast==`boolean`?e.suppressToast:void 0,n=typeof e.suppressOutput==`boolean`?e.suppressOutput:void 0,r=e.tools.map(e=>({...e,...t!==void 0&&e.suppressToast===void 0?{suppressToast:t}:{},...n!==void 0&&e.suppressOutput===void 0?{suppressOutput:n}:{}}));f={type:`tools`,...t===void 0?{}:{suppressToast:t},...n===void 0?{}:{suppressOutput:n},tools:r}}return{name:i,description:a,...typeof r.license==`string`?{license:r.license}:{},...typeof r.compatibility==`string`?{compatibility:r.compatibility}:{},...u?{metadata:u}:{},...typeof c==`string`?{allowedTools:c}:{},...typeof r[`user-invocable`]==`boolean`?{userInvocable:r[`user-invocable`]}:typeof r[`user-invocable`]==`string`&&(r[`user-invocable`].toLowerCase()===`true`||r[`user-invocable`].toLowerCase()===`false`)?{userInvocable:r[`user-invocable`].toLowerCase()===`true`}:{},...typeof r[`disable-model-invocation`]==`boolean`?{disableModelInvocation:r[`disable-model-invocation`]}:typeof r[`disable-model-invocation`]==`string`&&(r[`disable-model-invocation`].toLowerCase()===`true`||r[`disable-model-invocation`].toLowerCase()===`false`)?{disableModelInvocation:r[`disable-model-invocation`].toLowerCase()===`true`}:{},...f?{execution:f}:{},body:n.content.trim(),path:e,basePath:o}}const FY=new Set(wJ.map(e=>e.name)),IY=/^[a-z][a-z0-9_]{0,63}$/;function LY(e){return e?.targetSubdir?e.targetSubdir:e?.siteSlug?`imported/${e.siteSlug}`:`main`}async function RY(e,t=P,n,r){let i=(n.name||``).trim();if(FY.has(i))return{name:i,path:``,status:`failed`,error:`Cannot shadow built-in tool: ${i}`};if(!IY.test(i))return{name:i,path:``,status:`failed`,error:`Invalid tool name: ${i}`};let a=`.agents/tools/${LY(r)}/${i}.json`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();if(n.digest&&!await LJ(s,n.digest))return{name:i,path:a,status:`failed`,error:`Integrity verification failed for tool definition`};let c;try{c=JSON.parse(s)}catch{return{name:i,path:a,status:`failed`,error:`Downloaded tool definition is not valid JSON`}}if(DJ(a,c),await Qn(e,t,a,JSON.stringify(c,null,2)),r?.autoEnable){let t=await l(e,I.DECLARATIVE_TOOLS_ENABLED),n=new Set(Array.isArray(t)?t:[]);n.add(i),await W(e,I.DECLARATIVE_TOOLS_ENABLED,Array.from(n))}return{name:i,path:a,status:`imported`}}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function zY(e,t=P,n,r){let i=(n.name||``).trim(),a=`.agents/scripts/${LY(r)}/${i.endsWith(`.js`)||i.endsWith(`.mjs`)?i:`${i}.js`}`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();return n.digest&&!await LJ(s,n.digest)?{name:i,path:a,status:`failed`,error:`Integrity verification failed for script`}:(await Qn(e,t,a,s),{name:i,path:a,status:`imported`})}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function BY(e,t=P,n,r){let i=(n.name||``).trim(),a=`.agents/skills/${LY(r)}/${i}/SKILL.md`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();return n.digest&&!await LJ(s,n.digest)?{name:i,path:a,status:`failed`,error:`Integrity verification failed for skill`}:(PY(a,s),await Qn(e,t,a,s),{name:i,path:a,status:`imported`})}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function VY(e,t=P,n,r,i){let a={tools:[],skills:[],scripts:[],diagnostics:[]},o=new Set(r.toolNames||[]),s=new Set(r.skillNames||[]),c=new Set(r.scriptNames||[]),l=n.tools||[],u=n.skills||[],d=n.scripts||[];for(let e of u)if(s.has(e.name)){if(Array.isArray(e.tools))for(let t of e.tools)o.add(t.name);if(Array.isArray(e.scripts))for(let t of e.scripts)c.add(t.name)}for(let n of d)if(c.has(n.name)){let r=await zY(e,t,n,i);a.scripts.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Script ${n.name}: ${r.error}`)}for(let n of l)if(o.has(n.name)){let r=await RY(e,t,n,i);a.tools.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Tool ${n.name}: ${r.error}`)}for(let n of u)if(s.has(n.name)){let r=await BY(e,t,n,i);a.skills.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Skill ${n.name}: ${r.error}`)}return a}const HY=new class{_activeProfile;_activeProfileId;_allTools;_customTools;_declarativeTools;_declarativeToolNamesEnabled;_enabledDeclarativeTools;_enabledToolNames;_enabledTools;_profiles;_systemPromptOverride;_webSearchProxyUrl;_webSearchUrl;_webSearchUseProxy;_searchFilesMaxFileBytes;_searchFilesMaxFilesVisited;_searchFilesSkipDirs;constructor(){this._enabledToolNames=new vq.State(new Set(TJ.enabledToolNames)),this._customTools=new vq.State([]),this._declarativeTools=new vq.State([]),this._declarativeToolNamesEnabled=new vq.State(null),this._systemPromptOverride=new vq.State(``),this._profiles=new vq.State([]),this._activeProfileId=new vq.State(TJ.id),this._webSearchUseProxy=new vq.State(!1),this._webSearchProxyUrl=new vq.State(`/proxy`),this._webSearchUrl=new vq.State(`https://html.duckduckgo.com/html/?q={query}`),this._searchFilesMaxFileBytes=new vq.State(524288),this._searchFilesMaxFilesVisited=new vq.State(1e3),this._searchFilesSkipDirs=new vq.State(`.git,node_modules,dist,dist-electron,.cache,.nx,.turbo,__pycache__,.venv,venv`),this._allTools=new vq.Computed(()=>[...wJ,...this._customTools.get()]),this._enabledTools=new vq.Computed(()=>{let e=this._enabledToolNames.get();return this._allTools.get().filter(t=>e.has(t.name))}),this._enabledDeclarativeTools=new vq.Computed(()=>{let e=this._declarativeTools.get(),t=this._declarativeToolNamesEnabled.get();return t===null?e:e.filter(e=>t.has(e.name))}),this._activeProfile=new vq.Computed(()=>{let e=this._activeProfileId.get();return e?TJ.id===e?TJ:this._profiles.get().find(t=>t.id===e)||null:null})}get activeProfile(){return this._activeProfile.get()}get activeProfileId(){return this._activeProfileId.get()}get allTools(){return this._allTools.get()}get customTools(){return this._customTools.get()}get declarativeTools(){return this._declarativeTools.get()}get declarativeToolNamesEnabled(){return this._declarativeToolNamesEnabled.get()}get enabledDeclarativeTools(){return this._enabledDeclarativeTools.get()}get enabledToolNames(){return this._enabledToolNames.get()}get enabledTools(){return this._enabledTools.get()}isDeclarativeToolEnabled(e){let t=this._declarativeToolNamesEnabled.get();return t===null||t.has(e)}async refreshDeclarativeTools(e,t){try{let n=await OJ(e,t||`br:main`),r=this.allTools,i=(n?.tools||[]).filter(e=>!r.some(t=>t.name===e.name)),a=this._declarativeTools.get();return a.length===i.length&&a.every((e,t)=>e.name===i[t].name&&e.description===i[t].description&&JSON.stringify(e.execution)===JSON.stringify(i[t].execution))||this._declarativeTools.set(i),i}catch{return this._declarativeTools.get().length>0&&this._declarativeTools.set([]),[]}}async setDeclarativeToolEnabled(e,t,n){let r=this._declarativeToolNamesEnabled.get(),i=this._declarativeTools.get(),a=new Set(r===null?i.map(e=>e.name):r);n?a.add(t):a.delete(t),this._declarativeToolNamesEnabled.set(a),await W(e,I.DECLARATIVE_TOOLS_ENABLED,Array.from(a))}async setAllDeclarativeEnabled(e,t){let n=new Set(t);this._declarativeToolNamesEnabled.set(n),await W(e,I.DECLARATIVE_TOOLS_ENABLED,t)}async fetchRemoteDiscoveryManifest(e){return await RJ(e)}async importFromRemoteSite(e,t,n,r){let i=r?.groupId||`br:main`,a=await VY(e,i,t,n,r);return await this.refreshDeclarativeTools(e,i),a}exportBackup(){return JSON.stringify({enabledTools:[...this._enabledToolNames.get()],customTools:this._customTools.get(),declarativeToolsEnabled:this._declarativeToolNamesEnabled.get()?Array.from(this._declarativeToolNamesEnabled.get()):null,systemPromptOverride:this._systemPromptOverride.get(),profiles:this._profiles.get(),activeProfileId:this._activeProfileId.get(),webSearchUseProxy:this._webSearchUseProxy.get(),webSearchProxyUrl:this._webSearchProxyUrl.get(),webSearchUrl:this._webSearchUrl.get(),searchFilesMaxFileBytes:this._searchFilesMaxFileBytes.get(),searchFilesMaxFilesVisited:this._searchFilesMaxFilesVisited.get(),searchFilesSkipDirs:this._searchFilesSkipDirs.get()},null,2)}findProfilesForProvider(e,t){return this.profiles.filter(n=>!(n.providerId&&n.providerId!==e||n.model&&n.model!==t))}get profiles(){return[TJ,...this._profiles.get()]}get systemPromptOverride(){return this._systemPromptOverride.get()}get webSearchProxyUrl(){return this._webSearchProxyUrl.get()}get webSearchUrl(){return this._webSearchUrl.get()}get webSearchUseProxy(){return this._webSearchUseProxy.get()}get searchFilesMaxFileBytes(){return this._searchFilesMaxFileBytes.get()}get searchFilesMaxFilesVisited(){return this._searchFilesMaxFilesVisited.get()}get searchFilesSkipDirs(){return this._searchFilesSkipDirs.get()}get searchFilesSkipDirsSet(){return new Set(this._searchFilesSkipDirs.get().split(`,`).map(e=>e.trim()).filter(Boolean))}async activateProfile(e,t){let n=this.profiles.find(e=>e.id===t);n&&(this._activeProfileId.set(t),this._enabledToolNames.set(new Set(n.enabledToolNames)),this._customTools.set(n.customTools),this._systemPromptOverride.set(n.systemPromptOverride||``),await Promise.all([W(e,I.ACTIVE_TOOL_PROFILE,t),W(e,I.ENABLED_TOOLS,n.enabledToolNames),W(e,I.CUSTOM_TOOLS,n.customTools),W(e,I.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride||``)]))}async addCustomTool(e,t){let n=[...this._customTools.get(),t];this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.add(t.name),this._enabledToolNames.set(r),await Promise.all([W(e,I.CUSTOM_TOOLS,n),W(e,I.ENABLED_TOOLS,[...r])])}async addProfile(e,t){let n=[...this._profiles.get(),t];this._profiles.set(n),await W(e,I.TOOL_PROFILES,n)}async cloneTool(e,t,n,r){let i=this.allTools.find(e=>e.name===t);if(!i||this.allTools.some(e=>e.name===n))return!1;let a={name:n,description:r||i.description,input_schema:JSON.parse(JSON.stringify(i.input_schema))};return await this.addCustomTool(e,a),!0}async deactivateProfile(e){this._activeProfileId.set(null),await W(e,I.ACTIVE_TOOL_PROFILE,null)}async deleteProfile(e,t){if(t===TJ.id)return;let n=this._profiles.get().filter(e=>e.id!==t);this._profiles.set(n),this._activeProfileId.get()===t&&(this._activeProfileId.set(null),await W(e,I.ACTIVE_TOOL_PROFILE,null)),await W(e,I.TOOL_PROFILES,n)}async importBackup(e,t){let n=JSON.parse(t);Array.isArray(n.enabledTools)&&(this._enabledToolNames.set(new Set(n.enabledTools)),await W(e,I.ENABLED_TOOLS,n.enabledTools)),Array.isArray(n.customTools)&&(this._customTools.set(n.customTools),await W(e,I.CUSTOM_TOOLS,n.customTools)),typeof n.systemPromptOverride==`string`&&(this._systemPromptOverride.set(n.systemPromptOverride),await W(e,I.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride)),Array.isArray(n.profiles)&&(this._profiles.set(n.profiles),await W(e,I.TOOL_PROFILES,n.profiles)),(typeof n.activeProfileId==`string`||n.activeProfileId===null)&&(this._activeProfileId.set(n.activeProfileId),await W(e,I.ACTIVE_TOOL_PROFILE,n.activeProfileId)),typeof n.webSearchUseProxy==`boolean`&&(this._webSearchUseProxy.set(n.webSearchUseProxy),await W(e,I.WEB_SEARCH_USE_PROXY,n.webSearchUseProxy?`true`:`false`)),typeof n.webSearchProxyUrl==`string`&&(this._webSearchProxyUrl.set(n.webSearchProxyUrl),await W(e,I.WEB_SEARCH_PROXY_URL,n.webSearchProxyUrl)),typeof n.webSearchUrl==`string`&&(this._webSearchUrl.set(n.webSearchUrl),await W(e,I.WEB_SEARCH_URL,n.webSearchUrl)),typeof n.searchFilesMaxFileBytes==`number`&&n.searchFilesMaxFileBytes>0&&(this._searchFilesMaxFileBytes.set(n.searchFilesMaxFileBytes),await W(e,I.SEARCH_FILES_MAX_FILE_BYTES,String(n.searchFilesMaxFileBytes))),typeof n.searchFilesMaxFilesVisited==`number`&&n.searchFilesMaxFilesVisited>0&&(this._searchFilesMaxFilesVisited.set(n.searchFilesMaxFilesVisited),await W(e,I.SEARCH_FILES_MAX_FILES_VISITED,String(n.searchFilesMaxFilesVisited))),typeof n.searchFilesSkipDirs==`string`&&(this._searchFilesSkipDirs.set(n.searchFilesSkipDirs),await W(e,I.SEARCH_FILES_SKIP_DIRS,n.searchFilesSkipDirs)),Array.isArray(n.declarativeToolsEnabled)?(this._declarativeToolNamesEnabled.set(new Set(n.declarativeToolsEnabled)),await W(e,I.DECLARATIVE_TOOLS_ENABLED,n.declarativeToolsEnabled)):n.declarativeToolsEnabled===null&&(this._declarativeToolNamesEnabled.set(null),await W(e,I.DECLARATIVE_TOOLS_ENABLED,null))}async load(e){let[t,n,r,i,a,o,s,c,u,d,f,p]=await Promise.all([l(e,I.ENABLED_TOOLS),l(e,I.CUSTOM_TOOLS),l(e,I.SYSTEM_PROMPT_OVERRIDE),l(e,I.TOOL_PROFILES),l(e,I.ACTIVE_TOOL_PROFILE),l(e,I.WEB_SEARCH_USE_PROXY),l(e,I.WEB_SEARCH_PROXY_URL),l(e,I.WEB_SEARCH_URL),l(e,I.SEARCH_FILES_MAX_FILE_BYTES),l(e,I.SEARCH_FILES_MAX_FILES_VISITED),l(e,I.SEARCH_FILES_SKIP_DIRS),l(e,I.DECLARATIVE_TOOLS_ENABLED)]);if(Array.isArray(t)&&this._enabledToolNames.set(new Set(t)),Array.isArray(n)&&this._customTools.set(n),Array.isArray(p)&&this._declarativeToolNamesEnabled.set(new Set(p)),typeof r==`string`&&this._systemPromptOverride.set(r),Array.isArray(i)&&this._profiles.set(i),typeof a==`string`&&this._activeProfileId.set(a),o!=null){let e=String(o).toLowerCase();this._webSearchUseProxy.set(e===`true`||e===`1`)}if(typeof s==`string`&&s.trim().length>0&&this._webSearchProxyUrl.set(s.trim()),typeof c==`string`&&c.trim().length>0&&this._webSearchUrl.set(c.trim()),u!=null){let e=Number(u);Number.isFinite(e)&&e>0&&this._searchFilesMaxFileBytes.set(e)}if(d!=null){let e=Number(d);Number.isFinite(e)&&e>0&&this._searchFilesMaxFilesVisited.set(e)}typeof f==`string`&&f.trim().length>0&&this._searchFilesSkipDirs.set(f.trim())}async setWebSearchProxyUrl(e,t){let n=t.trim()||`/proxy`;this._webSearchProxyUrl.set(n),await W(e,I.WEB_SEARCH_PROXY_URL,n)}async setWebSearchUrl(e,t){let n=t.trim()||`https://html.duckduckgo.com/html/?q={query}`;this._webSearchUrl.set(n),await W(e,I.WEB_SEARCH_URL,n)}async setWebSearchUseProxy(e,t){let n=!!t;this._webSearchUseProxy.set(n),await W(e,I.WEB_SEARCH_USE_PROXY,n?`true`:`false`)}async setSearchFilesMaxFileBytes(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFileBytes.set(n),await W(e,I.SEARCH_FILES_MAX_FILE_BYTES,String(n))}async setSearchFilesMaxFilesVisited(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFilesVisited.set(n),await W(e,I.SEARCH_FILES_MAX_FILES_VISITED,String(n))}async setSearchFilesSkipDirs(e,t){let n=t.trim();this._searchFilesSkipDirs.set(n),await W(e,I.SEARCH_FILES_SKIP_DIRS,n)}async removeCustomTool(e,t){let n=this._customTools.get().filter(e=>e.name!==t);this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.delete(t),this._enabledToolNames.set(r),await Promise.all([W(e,I.CUSTOM_TOOLS,n),W(e,I.ENABLED_TOOLS,[...r])])}async saveToActiveProfile(e){let t=this._activeProfileId.get();if(!t)return;let n=this._profiles.get().find(e=>e.id===t);if(!n)return;let r={...n,enabledToolNames:[...this._enabledToolNames.get()],customTools:[...this._customTools.get()],systemPromptOverride:this._systemPromptOverride.get()};await this.updateProfile(e,r)}async setAllEnabled(e,t){this._enabledToolNames.set(new Set(t));let n=[W(e,I.ENABLED_TOOLS,t)];this._activeProfileId.get()&&(this._activeProfileId.set(null),n.push(W(e,I.ACTIVE_TOOL_PROFILE,null))),await Promise.all(n)}async setSystemPromptOverride(e,t){this._systemPromptOverride.set(t),await W(e,I.SYSTEM_PROMPT_OVERRIDE,t)}async setToolEnabled(e,t,n){let r=new Set(this._enabledToolNames.get());n?r.add(t):r.delete(t),this._enabledToolNames.set(r);let i=[W(e,I.ENABLED_TOOLS,[...r])];this._activeProfileId.get()&&(this._activeProfileId.set(null),i.push(W(e,I.ACTIVE_TOOL_PROFILE,null))),await Promise.all(i)}async updateProfile(e,t){let n=this._profiles.get().map(e=>e.id===t.id?t:e);this._profiles.set(n),await W(e,I.TOOL_PROFILES,n)}},UY=[/<\|start_header_id\|>\s*(?:system|user|assistant|tool)\s*<\|end_header_id\|>/gi,/<\|(?:begin_of_text|end_of_text|eot_id|im_start|im_end|end_of_message)\|>/gi,/<\|(?:startofturn|endofturn|start_of_turn|end_of_turn)\|>/gi,/<\|(?:image|audio|video|tool_call|tool_response|tool_result|function_call)\|>|<\|\/function_call\|>/gi,/<|(?:system|user|assistant|im_start|im_end)|>/g,/\[\s*INST\s*\]|\[\s*\/INST\s*\]|<<\s*SYS\s*>>|<<\s*\/SYS\s*>>/gi,/<\/?s>|<\/?bos>|<\/?eos>|<\|(?:bos|eos|pad|unk)\|>/gi,/<\|(?:START_OF_TURN_TOKEN|END_OF_TURN_TOKEN|CHATBOT_TOKEN|USER_TOKEN|SYSTEM_TOKEN)\|>/gi,/<\|(?:system|user|assistant|end|endoftext|placeholder\d*)\|>/gi,/<|(?:begin▁of▁sentence|end▁of▁sentence)|>/g,/<\|start\|>\s*(?:system|user|assistant|tool)\s*<\|message\|>/gi];function WY(e){for(let t of UY)if(t.test(e))return!0;return!1}function GY(e){let t=String(e||``),n=t;for(let e of UY)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
2092
|
+
`)}\n---\n${n}`,t=(0,AY.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{}let i={},a=e.match(/^name:\s*["']?([^"'\r\n]+)["']?/m);a&&(i.name=a[1].trim());let o=e.match(/^description:\s*(.+)$/m);if(o){let e=o[1].trim();(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))&&(e=e.slice(1,-1)),i.description=e}let s=e.match(/^user-invocable:\s*(true|false)/im);s&&(i[`user-invocable`]=s[1].toLowerCase()===`true`);let c=e.match(/^disable-model-invocation:\s*(true|false)/im);c&&(i[`disable-model-invocation`]=c[1].toLowerCase()===`true`);let l=e.match(/^allowed-tools:\s*["']?([^"'\r\n]+)["']?/m);l&&(i[`allowed-tools`]=l[1].trim());let u=e.match(/allowed-tools:\s*\n((?:\s*-\s*[^\r\n]+\r?\n?)+)/m);if(u){let e=u[1].split(/\r?\n/).map(e=>e.replace(/^\s*-\s*/,``).trim()).filter(Boolean);e.length>0&&(i[`allowed-tools`]=e)}return{data:i,content:n}}return{data:{},content:e}}}function NY(e){if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t.join(` `):void 0}}function PY(e,t){let n=MY(t),r=n.data,i=typeof r.name==`string`?r.name.trim():``,a=typeof r.description==`string`?r.description.trim():``;if(!i)throw Error(`Skill at ${e} requires a name`);if(!a)throw Error(`Skill ${i} requires a description`);if(i.length>64||!jY.test(i))throw Error(`Skill name must be 1-64 lowercase characters and hyphens: ${i}`);if(a.length>1024)throw Error(`Skill ${i} description must be 1024 characters or fewer`);let o=e.replace(/\/SKILL\.md$/u,``),s=r.metadata&&typeof r.metadata==`object`?r.metadata:void 0,c=NY(s?.[`allowed-tools`])||NY(s?.allowedTools)||NY(r[`allowed-tools`])||NY(r.allowedTools),l=[];if(s){for(let[e,t]of Object.entries(s))if(e!==`execution`&&t!=null){if(e===`allowed-tools`||e===`allowedTools`)c&&l.push([e,c]);else if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)l.push([e,String(t)]);else if(Array.isArray(t)){let n=t.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean);n.length>0&&l.push([e,n.join(` `)])}}}let u=l.length>0?Object.fromEntries(l):void 0,d=s?.execution,f;if(d!==void 0){if(!d||typeof d!=`object`||d.type!==`tools`||!Array.isArray(d.tools))throw Error(`Skill ${i} has invalid tools execution`);let e=d,t=typeof e.suppressToast==`boolean`?e.suppressToast:void 0,n=typeof e.suppressOutput==`boolean`?e.suppressOutput:void 0,r=e.tools.map(e=>({...e,...t!==void 0&&e.suppressToast===void 0?{suppressToast:t}:{},...n!==void 0&&e.suppressOutput===void 0?{suppressOutput:n}:{}}));f={type:`tools`,...t===void 0?{}:{suppressToast:t},...n===void 0?{}:{suppressOutput:n},tools:r}}return{name:i,description:a,...typeof r.license==`string`?{license:r.license}:{},...typeof r.compatibility==`string`?{compatibility:r.compatibility}:{},...u?{metadata:u}:{},...typeof c==`string`?{allowedTools:c}:{},...typeof r[`user-invocable`]==`boolean`?{userInvocable:r[`user-invocable`]}:typeof r[`user-invocable`]==`string`&&(r[`user-invocable`].toLowerCase()===`true`||r[`user-invocable`].toLowerCase()===`false`)?{userInvocable:r[`user-invocable`].toLowerCase()===`true`}:{},...typeof r[`disable-model-invocation`]==`boolean`?{disableModelInvocation:r[`disable-model-invocation`]}:typeof r[`disable-model-invocation`]==`string`&&(r[`disable-model-invocation`].toLowerCase()===`true`||r[`disable-model-invocation`].toLowerCase()===`false`)?{disableModelInvocation:r[`disable-model-invocation`].toLowerCase()===`true`}:{},...f?{execution:f}:{},body:n.content.trim(),path:e,basePath:o}}const FY=new Set(wJ.map(e=>e.name)),IY=/^[a-z][a-z0-9_]{0,63}$/;function LY(e){return e?.targetSubdir?e.targetSubdir:e?.siteSlug?`imported/${e.siteSlug}`:`main`}async function RY(e,t=P,n,r){let i=(n.name||``).trim();if(FY.has(i))return{name:i,path:``,status:`failed`,error:`Cannot shadow built-in tool: ${i}`};if(!IY.test(i))return{name:i,path:``,status:`failed`,error:`Invalid tool name: ${i}`};let a=`.agents/tools/${LY(r)}/${i}.json`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();if(n.digest&&!await LJ(s,n.digest))return{name:i,path:a,status:`failed`,error:`Integrity verification failed for tool definition`};let c;try{c=JSON.parse(s)}catch{return{name:i,path:a,status:`failed`,error:`Downloaded tool definition is not valid JSON`}}if(DJ(a,c),await Qn(e,t,a,JSON.stringify(c,null,2)),r?.autoEnable){let t=await l(e,I.DECLARATIVE_TOOLS_ENABLED),n=new Set(Array.isArray(t)?t:[]);n.add(i),await W(e,I.DECLARATIVE_TOOLS_ENABLED,Array.from(n))}return{name:i,path:a,status:`imported`}}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function zY(e,t=P,n,r){let i=(n.name||``).trim(),a=`.agents/scripts/${LY(r)}/${i.endsWith(`.js`)||i.endsWith(`.mjs`)?i:`${i}.js`}`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();return n.digest&&!await LJ(s,n.digest)?{name:i,path:a,status:`failed`,error:`Integrity verification failed for script`}:(await Qn(e,t,a,s),{name:i,path:a,status:`imported`})}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function BY(e,t=P,n,r){let i=(n.name||``).trim(),a=`.agents/skills/${LY(r)}/${i}/SKILL.md`;try{if(await _K(e,t,a)&&!r?.overwrite)return{name:i,path:a,status:`skipped`};let o=await(r?.fetchFn||globalThis.fetch)(n.url);if(!o.ok)return{name:i,path:a,status:`failed`,error:`HTTP ${o.status} ${o.statusText}`};let s=await o.text();return n.digest&&!await LJ(s,n.digest)?{name:i,path:a,status:`failed`,error:`Integrity verification failed for skill`}:(PY(a,s),await Qn(e,t,a,s),{name:i,path:a,status:`imported`})}catch(e){return{name:i,path:a,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function VY(e,t=P,n,r,i){let a={tools:[],skills:[],scripts:[],diagnostics:[]},o=new Set(r.toolNames||[]),s=new Set(r.skillNames||[]),c=new Set(r.scriptNames||[]),l=n.tools||[],u=n.skills||[],d=n.scripts||[];for(let e of u)if(s.has(e.name)){if(Array.isArray(e.tools))for(let t of e.tools)o.add(t.name);if(Array.isArray(e.scripts))for(let t of e.scripts)c.add(t.name)}for(let n of d)if(c.has(n.name)){let r=await zY(e,t,n,i);a.scripts.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Script ${n.name}: ${r.error}`)}for(let n of l)if(o.has(n.name)){let r=await RY(e,t,n,i);a.tools.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Tool ${n.name}: ${r.error}`)}for(let n of u)if(s.has(n.name)){let r=await BY(e,t,n,i);a.skills.push(r),r.status===`failed`&&r.error&&a.diagnostics.push(`Skill ${n.name}: ${r.error}`)}return a}const HY=new class{_activeProfile;_activeProfileId;_allTools;_customTools;_declarativeTools;_declarativeToolNamesEnabled;_enabledDeclarativeTools;_enabledToolNames;_enabledTools;_profiles;_systemPromptOverride;_webSearchProxyUrl;_webSearchUrl;_webSearchUseProxy;_searchFilesMaxFileBytes;_searchFilesMaxFilesVisited;_searchFilesSkipDirs;constructor(){this._enabledToolNames=new vq.State(new Set(TJ.enabledToolNames)),this._customTools=new vq.State([]),this._declarativeTools=new vq.State([]),this._declarativeToolNamesEnabled=new vq.State(null),this._systemPromptOverride=new vq.State(``),this._profiles=new vq.State([]),this._activeProfileId=new vq.State(TJ.id),this._webSearchUseProxy=new vq.State(!1),this._webSearchProxyUrl=new vq.State(`/proxy`),this._webSearchUrl=new vq.State(`https://html.duckduckgo.com/html/?q={query}`),this._searchFilesMaxFileBytes=new vq.State(524288),this._searchFilesMaxFilesVisited=new vq.State(1e3),this._searchFilesSkipDirs=new vq.State(`.git,node_modules,dist,dist-electron,.cache,.nx,.turbo,__pycache__,.venv,venv`),this._allTools=new vq.Computed(()=>[...wJ,...this._customTools.get()]),this._enabledTools=new vq.Computed(()=>{let e=this._enabledToolNames.get();return this._allTools.get().filter(t=>e.has(t.name))}),this._enabledDeclarativeTools=new vq.Computed(()=>{let e=this._declarativeTools.get(),t=this._declarativeToolNamesEnabled.get();return!t||t.size===0?[]:e.filter(e=>t.has(e.name))}),this._activeProfile=new vq.Computed(()=>{let e=this._activeProfileId.get();return e?TJ.id===e?TJ:this._profiles.get().find(t=>t.id===e)||null:null})}get activeProfile(){return this._activeProfile.get()}get activeProfileId(){return this._activeProfileId.get()}get allTools(){return this._allTools.get()}get customTools(){return this._customTools.get()}get declarativeTools(){return this._declarativeTools.get()}get declarativeToolNamesEnabled(){return this._declarativeToolNamesEnabled.get()}get enabledDeclarativeTools(){return this._enabledDeclarativeTools.get()}get enabledToolNames(){return this._enabledToolNames.get()}get enabledTools(){return this._enabledTools.get()}isDeclarativeToolEnabled(e){let t=this._declarativeToolNamesEnabled.get();return t?t.has(e):!1}async refreshDeclarativeTools(e,t){try{let n=await OJ(e,t||`br:main`),r=this.allTools,i=(n?.tools||[]).filter(e=>!r.some(t=>t.name===e.name)),a=this._declarativeTools.get();return a.length===i.length&&a.every((e,t)=>e.name===i[t].name&&e.description===i[t].description&&JSON.stringify(e.execution)===JSON.stringify(i[t].execution))||this._declarativeTools.set(i),i}catch{return this._declarativeTools.get().length>0&&this._declarativeTools.set([]),[]}}async setDeclarativeToolEnabled(e,t,n){let r=this._declarativeToolNamesEnabled.get(),i=new Set(r===null?[]:r);n?i.add(t):i.delete(t),this._declarativeToolNamesEnabled.set(i),await W(e,I.DECLARATIVE_TOOLS_ENABLED,Array.from(i))}async setAllDeclarativeEnabled(e,t){let n=new Set(t);this._declarativeToolNamesEnabled.set(n),await W(e,I.DECLARATIVE_TOOLS_ENABLED,t)}async fetchRemoteDiscoveryManifest(e){return await RJ(e)}async importFromRemoteSite(e,t,n,r){let i=r?.groupId||`br:main`,a=await VY(e,i,t,n,r);return await this.refreshDeclarativeTools(e,i),a}exportBackup(){return JSON.stringify({enabledTools:[...this._enabledToolNames.get()],customTools:this._customTools.get(),declarativeToolsEnabled:this._declarativeToolNamesEnabled.get()?Array.from(this._declarativeToolNamesEnabled.get()):null,systemPromptOverride:this._systemPromptOverride.get(),profiles:this._profiles.get(),activeProfileId:this._activeProfileId.get(),webSearchUseProxy:this._webSearchUseProxy.get(),webSearchProxyUrl:this._webSearchProxyUrl.get(),webSearchUrl:this._webSearchUrl.get(),searchFilesMaxFileBytes:this._searchFilesMaxFileBytes.get(),searchFilesMaxFilesVisited:this._searchFilesMaxFilesVisited.get(),searchFilesSkipDirs:this._searchFilesSkipDirs.get()},null,2)}findProfilesForProvider(e,t){return this.profiles.filter(n=>!(n.providerId&&n.providerId!==e||n.model&&n.model!==t))}get profiles(){return[TJ,...this._profiles.get()]}get systemPromptOverride(){return this._systemPromptOverride.get()}get webSearchProxyUrl(){return this._webSearchProxyUrl.get()}get webSearchUrl(){return this._webSearchUrl.get()}get webSearchUseProxy(){return this._webSearchUseProxy.get()}get searchFilesMaxFileBytes(){return this._searchFilesMaxFileBytes.get()}get searchFilesMaxFilesVisited(){return this._searchFilesMaxFilesVisited.get()}get searchFilesSkipDirs(){return this._searchFilesSkipDirs.get()}get searchFilesSkipDirsSet(){return new Set(this._searchFilesSkipDirs.get().split(`,`).map(e=>e.trim()).filter(Boolean))}async activateProfile(e,t){let n=this.profiles.find(e=>e.id===t);n&&(this._activeProfileId.set(t),this._enabledToolNames.set(new Set(n.enabledToolNames)),this._customTools.set(n.customTools),this._systemPromptOverride.set(n.systemPromptOverride||``),await Promise.all([W(e,I.ACTIVE_TOOL_PROFILE,t),W(e,I.ENABLED_TOOLS,n.enabledToolNames),W(e,I.CUSTOM_TOOLS,n.customTools),W(e,I.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride||``)]))}async addCustomTool(e,t){let n=[...this._customTools.get(),t];this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.add(t.name),this._enabledToolNames.set(r),await Promise.all([W(e,I.CUSTOM_TOOLS,n),W(e,I.ENABLED_TOOLS,[...r])])}async addProfile(e,t){let n=[...this._profiles.get(),t];this._profiles.set(n),await W(e,I.TOOL_PROFILES,n)}async cloneTool(e,t,n,r){let i=this.allTools.find(e=>e.name===t);if(!i||this.allTools.some(e=>e.name===n))return!1;let a={name:n,description:r||i.description,input_schema:JSON.parse(JSON.stringify(i.input_schema))};return await this.addCustomTool(e,a),!0}async deactivateProfile(e){this._activeProfileId.set(null),await W(e,I.ACTIVE_TOOL_PROFILE,null)}async deleteProfile(e,t){if(t===TJ.id)return;let n=this._profiles.get().filter(e=>e.id!==t);this._profiles.set(n),this._activeProfileId.get()===t&&(this._activeProfileId.set(null),await W(e,I.ACTIVE_TOOL_PROFILE,null)),await W(e,I.TOOL_PROFILES,n)}async importBackup(e,t){let n=JSON.parse(t);Array.isArray(n.enabledTools)&&(this._enabledToolNames.set(new Set(n.enabledTools)),await W(e,I.ENABLED_TOOLS,n.enabledTools)),Array.isArray(n.customTools)&&(this._customTools.set(n.customTools),await W(e,I.CUSTOM_TOOLS,n.customTools)),typeof n.systemPromptOverride==`string`&&(this._systemPromptOverride.set(n.systemPromptOverride),await W(e,I.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride)),Array.isArray(n.profiles)&&(this._profiles.set(n.profiles),await W(e,I.TOOL_PROFILES,n.profiles)),(typeof n.activeProfileId==`string`||n.activeProfileId===null)&&(this._activeProfileId.set(n.activeProfileId),await W(e,I.ACTIVE_TOOL_PROFILE,n.activeProfileId)),typeof n.webSearchUseProxy==`boolean`&&(this._webSearchUseProxy.set(n.webSearchUseProxy),await W(e,I.WEB_SEARCH_USE_PROXY,n.webSearchUseProxy?`true`:`false`)),typeof n.webSearchProxyUrl==`string`&&(this._webSearchProxyUrl.set(n.webSearchProxyUrl),await W(e,I.WEB_SEARCH_PROXY_URL,n.webSearchProxyUrl)),typeof n.webSearchUrl==`string`&&(this._webSearchUrl.set(n.webSearchUrl),await W(e,I.WEB_SEARCH_URL,n.webSearchUrl)),typeof n.searchFilesMaxFileBytes==`number`&&n.searchFilesMaxFileBytes>0&&(this._searchFilesMaxFileBytes.set(n.searchFilesMaxFileBytes),await W(e,I.SEARCH_FILES_MAX_FILE_BYTES,String(n.searchFilesMaxFileBytes))),typeof n.searchFilesMaxFilesVisited==`number`&&n.searchFilesMaxFilesVisited>0&&(this._searchFilesMaxFilesVisited.set(n.searchFilesMaxFilesVisited),await W(e,I.SEARCH_FILES_MAX_FILES_VISITED,String(n.searchFilesMaxFilesVisited))),typeof n.searchFilesSkipDirs==`string`&&(this._searchFilesSkipDirs.set(n.searchFilesSkipDirs),await W(e,I.SEARCH_FILES_SKIP_DIRS,n.searchFilesSkipDirs)),Array.isArray(n.declarativeToolsEnabled)?(this._declarativeToolNamesEnabled.set(new Set(n.declarativeToolsEnabled)),await W(e,I.DECLARATIVE_TOOLS_ENABLED,n.declarativeToolsEnabled)):n.declarativeToolsEnabled===null&&(this._declarativeToolNamesEnabled.set(null),await W(e,I.DECLARATIVE_TOOLS_ENABLED,null))}async load(e){let[t,n,r,i,a,o,s,c,u,d,f,p]=await Promise.all([l(e,I.ENABLED_TOOLS),l(e,I.CUSTOM_TOOLS),l(e,I.SYSTEM_PROMPT_OVERRIDE),l(e,I.TOOL_PROFILES),l(e,I.ACTIVE_TOOL_PROFILE),l(e,I.WEB_SEARCH_USE_PROXY),l(e,I.WEB_SEARCH_PROXY_URL),l(e,I.WEB_SEARCH_URL),l(e,I.SEARCH_FILES_MAX_FILE_BYTES),l(e,I.SEARCH_FILES_MAX_FILES_VISITED),l(e,I.SEARCH_FILES_SKIP_DIRS),l(e,I.DECLARATIVE_TOOLS_ENABLED)]);if(Array.isArray(t)&&this._enabledToolNames.set(new Set(t)),Array.isArray(n)&&this._customTools.set(n),Array.isArray(p)&&this._declarativeToolNamesEnabled.set(new Set(p)),typeof r==`string`&&this._systemPromptOverride.set(r),Array.isArray(i)&&this._profiles.set(i),typeof a==`string`&&this._activeProfileId.set(a),o!=null){let e=String(o).toLowerCase();this._webSearchUseProxy.set(e===`true`||e===`1`)}if(typeof s==`string`&&s.trim().length>0&&this._webSearchProxyUrl.set(s.trim()),typeof c==`string`&&c.trim().length>0&&this._webSearchUrl.set(c.trim()),u!=null){let e=Number(u);Number.isFinite(e)&&e>0&&this._searchFilesMaxFileBytes.set(e)}if(d!=null){let e=Number(d);Number.isFinite(e)&&e>0&&this._searchFilesMaxFilesVisited.set(e)}typeof f==`string`&&f.trim().length>0&&this._searchFilesSkipDirs.set(f.trim())}async setWebSearchProxyUrl(e,t){let n=t.trim()||`/proxy`;this._webSearchProxyUrl.set(n),await W(e,I.WEB_SEARCH_PROXY_URL,n)}async setWebSearchUrl(e,t){let n=t.trim()||`https://html.duckduckgo.com/html/?q={query}`;this._webSearchUrl.set(n),await W(e,I.WEB_SEARCH_URL,n)}async setWebSearchUseProxy(e,t){let n=!!t;this._webSearchUseProxy.set(n),await W(e,I.WEB_SEARCH_USE_PROXY,n?`true`:`false`)}async setSearchFilesMaxFileBytes(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFileBytes.set(n),await W(e,I.SEARCH_FILES_MAX_FILE_BYTES,String(n))}async setSearchFilesMaxFilesVisited(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFilesVisited.set(n),await W(e,I.SEARCH_FILES_MAX_FILES_VISITED,String(n))}async setSearchFilesSkipDirs(e,t){let n=t.trim();this._searchFilesSkipDirs.set(n),await W(e,I.SEARCH_FILES_SKIP_DIRS,n)}async removeCustomTool(e,t){let n=this._customTools.get().filter(e=>e.name!==t);this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.delete(t),this._enabledToolNames.set(r),await Promise.all([W(e,I.CUSTOM_TOOLS,n),W(e,I.ENABLED_TOOLS,[...r])])}async saveToActiveProfile(e){let t=this._activeProfileId.get();if(!t)return;let n=this._profiles.get().find(e=>e.id===t);if(!n)return;let r={...n,enabledToolNames:[...this._enabledToolNames.get()],customTools:[...this._customTools.get()],systemPromptOverride:this._systemPromptOverride.get()};await this.updateProfile(e,r)}async setAllEnabled(e,t){this._enabledToolNames.set(new Set(t));let n=[W(e,I.ENABLED_TOOLS,t)];this._activeProfileId.get()&&(this._activeProfileId.set(null),n.push(W(e,I.ACTIVE_TOOL_PROFILE,null))),await Promise.all(n)}async setSystemPromptOverride(e,t){this._systemPromptOverride.set(t),await W(e,I.SYSTEM_PROMPT_OVERRIDE,t)}async setToolEnabled(e,t,n){let r=new Set(this._enabledToolNames.get());n?r.add(t):r.delete(t),this._enabledToolNames.set(r);let i=[W(e,I.ENABLED_TOOLS,[...r])];this._activeProfileId.get()&&(this._activeProfileId.set(null),i.push(W(e,I.ACTIVE_TOOL_PROFILE,null))),await Promise.all(i)}async updateProfile(e,t){let n=this._profiles.get().map(e=>e.id===t.id?t:e);this._profiles.set(n),await W(e,I.TOOL_PROFILES,n)}},UY=[/<\|start_header_id\|>\s*(?:system|user|assistant|tool)\s*<\|end_header_id\|>/gi,/<\|(?:begin_of_text|end_of_text|eot_id|im_start|im_end|end_of_message)\|>/gi,/<\|(?:startofturn|endofturn|start_of_turn|end_of_turn)\|>/gi,/<\|(?:image|audio|video|tool_call|tool_response|tool_result|function_call)\|>|<\|\/function_call\|>/gi,/<|(?:system|user|assistant|im_start|im_end)|>/g,/\[\s*INST\s*\]|\[\s*\/INST\s*\]|<<\s*SYS\s*>>|<<\s*\/SYS\s*>>/gi,/<\/?s>|<\/?bos>|<\/?eos>|<\|(?:bos|eos|pad|unk)\|>/gi,/<\|(?:START_OF_TURN_TOKEN|END_OF_TURN_TOKEN|CHATBOT_TOKEN|USER_TOKEN|SYSTEM_TOKEN)\|>/gi,/<\|(?:system|user|assistant|end|endoftext|placeholder\d*)\|>/gi,/<|(?:begin▁of▁sentence|end▁of▁sentence)|>/g,/<\|start\|>\s*(?:system|user|assistant|tool)\s*<\|message\|>/gi];function WY(e){for(let t of UY)if(t.test(e))return!0;return!1}function GY(e){let t=String(e||``),n=t;for(let e of UY)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
2093
2093
|
|
|
2094
2094
|
`)),t}function KY(e,t){let n=GY(e);return n!==e&&WY(e)&&console.info(`[ShadowClaw] Chat-template control token(s) detected and stripped from "${t}" output. The provider or model may not be applying its chat template correctly. Original length: ${e.length}, cleaned length: ${n.length}.`),n}function qY(e,t,n,r){return{type:`thinking-log`,payload:{groupId:e,level:t,timestamp:Date.now(),label:n,message:r||``}}}function JY(e,t,n){return{type:`tool-activity`,payload:{groupId:e,tool:t,status:n}}}function YY(e,t){return`${e}?__sc_chunk=${t}`}const XY=`shadow-claw-browser-models`;function ZY(e,t,n=XY){let r=0,i=null;return new ReadableStream({async pull(a){for(;;){if(i){let{done:e,value:t}=await i.read();if(!e){a.enqueue(t);return}i=null,r++}if(r>=t.chunks){a.close();return}try{let t=await(await caches.open(n)).match(YY(e,r));if(!t?.body){a.error(/* @__PURE__ */ Error(`ModelCache: missing cache chunk ${r} for ${e}`));return}i=t.body.getReader();let{done:o,value:s}=await i.read();if(o)i=null,r++;else{a.enqueue(s);return}}catch(e){a.error(e);return}}},cancel(){i&&=(i.cancel(),null)}})}function QY(){return typeof caches<`u`&&typeof caches.open==`function`}async function $Y(e,t,n,r=XY){if(QY())try{await(await caches.open(r)).put(YY(e,t),new Response(new Blob([n]),{headers:{"Content-Type":`application/octet-stream`,"Content-Length":String(n.byteLength)}}))}catch(e){console.error(`flushChunkToCache error:`,e)}}function eX(e){return`${e}?__sc_meta=1`}async function tX(e,t=XY){if(!QY())return null;try{let n=await(await caches.open(t)).match(eX(e));if(!n?.body)return null;let r=await n.text();return JSON.parse(r)}catch{return null}}async function nX(e,t,n=XY){if(QY())try{await(await caches.open(n)).put(eX(e),new Response(JSON.stringify(t),{headers:{"Content-Type":`application/json`}}))}catch(e){console.error(`writePartialMeta error:`,e)}}async function rX(e,t,n,r,i=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch){let a=r?.cacheName??`shadow-claw-browser-models`,o=r?.chunkSize??16777216,s=r?.maxAttempts??6,c=r?.headers??{},l=QY(),u=0,d=0,f=null,p=!1,m=e;if(l){let t=await tX(e,a);t&&!t.complete&&(u=t.chunks,d=t.received,f=t.total,p=t.acceptsRanges,t.resolvedUrl&&(m=t.resolvedUrl))}let h=null,g=null;for(let e=1;e<=s;e++){if(n?.aborted)throw new DOMException(`Aborted`,`AbortError`);let t={...c};d>0&&p&&(t.Range=`bytes=${d}-`);try{g=await i(m,{signal:n,headers:t})}catch(t){if(n?.aborted||t?.name===`AbortError`)throw t;if(h=t,e<s){await bq(yq(e-1,1e3,15e3,0),n);continue}break}if(g.url&&(m=g.url),t.Range&&g.status===200&&(u=0,d=0),g.status!==200&&g.status!==206){if(h=/* @__PURE__ */ Error(`ModelCache: Failed to fetch model from '${m}': ${g.status} ${g.statusText}`),g.status>=500&&e<s){await bq(yq(e-1,1e3,15e3,0),n);continue}throw h}if(!g.body)throw Error(`ModelCache: Failed to fetch model from '${m}': No response body`);h=null;break}if(h||!g||!g.body)throw Error(`ModelCache: failed to download model from '${e}' after ${s} attempts: ${h?.message??String(h)}`);if(f==null){if(p=g.status===206||g.headers.get(`accept-ranges`)===`bytes`,g.status===206){let e=g.headers.get(`content-range`)?.match(/\/\s*(\d+)\s*$/);e&&(f=Number(e[1]))}else{let e=g.headers.get(`content-length`),t=e?Number(e):NaN;f=Number.isFinite(t)&&t>0?t:null}}l&&await nX(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!1,resolvedUrl:m},a);let _=g.body;return new ReadableStream({async start(r){try{if(l&&u>0){let i=await caches.open(a),o=0;for(let a=0;a<u;a++){if(n?.aborted)throw new DOMException(`Aborted`,`AbortError`);let s=await i.match(YY(e,a));if(s?.body){let e=s.body.getReader();for(;;){let{done:n,value:i}=await e.read();if(n)break;r.enqueue(i),o+=i.byteLength,t?.(o,f)}}else if(s&&typeof s.arrayBuffer==`function`){let e=await s.arrayBuffer(),n=new Uint8Array(e);r.enqueue(n),o+=n.byteLength,t?.(o,f)}}}let i=[],s=0,c=d;async function h(){if(s===0)return;let t=new Uint8Array(s),n=0;for(let e of i)t.set(e,n),n+=e.byteLength;i=[],s=0,l?(await $Y(e,u,t,a),u++,d+=t.byteLength,await nX(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!1,resolvedUrl:m},a)):(u++,d+=t.byteLength)}let g=_.getReader();try{for(;;){if(n?.aborted)throw await g.cancel(),new DOMException(`Aborted`,`AbortError`);let{done:e,value:a}=await g.read();if(e)break;r.enqueue(a),i.push(a),s+=a.byteLength,c+=a.byteLength,t?.(c,f),s>=o&&await h()}await h(),l&&await nX(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!0,resolvedUrl:m},a),t?.(c,f,!0),r.close()}catch(e){try{await g.cancel()}catch{}throw e}}catch(e){r.error(e)}}})}async function iX(e,t,n,r,i=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch){let a=r?.cacheName??`shadow-claw-browser-models`;try{let n=await tX(e,a);if(n?.complete)return t?.(n.received,n.received,!0),ZY(e,n,a)}catch(e){console.warn(`loadModelStream cache check failed, falling back to download:`,e)}return rX(e,t,n,r,i)}let aX=null;function oX(e){aX=e}function sX(){aX=null}function cX(e=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch,t,n){let r=t?.cacheName??`shadow-claw-browser-models`;return async function(i,a){let o=typeof i==`string`?i:i instanceof URL?i.toString():i.url,s=(a?.method||(typeof i==`object`&&`method`in i?i.method:`GET`)||`GET`).toUpperCase(),c=a?.headers||(typeof i==`object`&&`headers`in i?i.headers:void 0);if(c instanceof Headers?c.has(`Range`)||c.has(`range`):c&&typeof c==`object`&&(`Range`in c||`range`in c))return e(i,{...a||{},cache:`no-store`});if(s!==`GET`||!QY())return e(i,a);try{let i=await tX(o,r);if(i?.complete){n?.(o,i.received,i.received,!0),aX?.(o,i.received,i.received,!0);let e=ZY(o,i,r);return new Response(e,{status:200,statusText:`OK`,headers:{"Content-Type":`application/octet-stream`,...i.total!=null&&i.total>0?{"Content-Length":String(i.total)}:{}}})}let s=await iX(o,(e,t,r)=>{n?.(o,e,t,!!r),aX?.(o,e,t,!!r)},a?.signal??void 0,{cacheName:r,...t||{}},e),c=(await tX(o,r))?.total;return new Response(s,{status:200,statusText:`OK`,headers:{"Content-Type":`application/octet-stream`,...c!=null&&c>0?{"Content-Length":String(c)}:{}}})}catch(t){return console.warn(`[ModelCacheFetch] Cache stream failed for ${o}, falling back to native fetch:`,t),e(i,a)}}}function lX(e){if(!e)return`English`;try{return new Intl.DisplayNames([`en`],{type:`language`}).of(e)||`English`}catch{return`English`}}var uX=class{options;constructor(e={}){this.options={tone:e.tone||`neutral`,format:e.format||`plain-text`,length:e.length||`short`,outputLanguage:e.outputLanguage||`en`,sharedContext:e.sharedContext||``,context:e.context||``}}buildPrompt(e,t={}){let{tone:n,format:r,length:i,outputLanguage:a,sharedContext:o,context:s}={...this.options,...t},c=lX(a),l=``;switch(n){case`formal`:l=`**Tone:** Your writing tone MUST be **formal** (e.g., academic, professional, respectful).`;break;case`casual`:l=`**Tone:** Your writing tone MUST be **casual** (e.g., conversational, friendly, relaxed).`;break;default:l=`**Tone:** Your writing tone MUST be **neutral** (e.g., objective, balanced, matter-of-fact).`}let u=``;switch(i){case`medium`:u=`**Length:** Your response MUST be moderately detailed and between 100 and 300 words. This is a strict, non-negotiable range.`;break;case`long`:u=`**Length:** Your response MUST be in-depth, thorough, and at least 300 words. This is a strict, non-negotiable requirement.`;break;default:u=`**Length:** Your response MUST be concise and MUST NOT EXCEED 100 words. This is a strict, non-negotiable limit.`}let d=``;switch(r){case`markdown`:d=`**Format:** Your output MUST be formatted using standard Markdown syntax. Use appropriate headers ('#', '##'), bolding ('**text**'), lists ('-', '1.'), or other formatting to structure the response clearly.`;break;default:d=`**Format:** Your output MUST be in PLAIN TEXT. This means absolutely NO MARKDOWN formatting. Do NOT use headers ('#'), bolding ('**'), italics ('*'), lists ('-', '1.'), or any other formatting characters.`}let f=!!o||!!s,p=`You are a direct-instruction text generation AI. Your SOLE PURPOSE is to generate text that precisely fulfills the user's 'INSTRUCTIONS' and adheres to all specified parameters. Your task is to PERFORM the request to CREATE text, not to talk about it, summarize it, or repeat it. You must synthesize the information provided to create a new, original response.
|
|
2095
2095
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{box-sizing:border-box}.hidden,[hidden]{display:none!important}a{color:var(--shadow-claw-link);text-decoration:underline;text-underline-offset:.125rem}a:hover{color:var(--shadow-claw-link-hover)}.header{background-color:var(--shadow-claw-bg-secondary);border-bottom:.0625rem solid var(--shadow-claw-border-color);gap:.5rem;height:4rem;justify-content:start;max-height:4rem;padding:.5rem 1rem}.header,.header h1{align-items:center;display:flex;width:100%}.header h1{color:var(--shadow-claw-text-primary);flex-direction:row;margin:0}#menu-button{align-items:center;background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;justify-content:center;padding:.5rem}#menu-button:hover,.theme-toggle:hover{background-color:var(--shadow-claw-bg-tertiary);color:var(--shadow-claw-text-primary)}.header-actions{gap:.5rem;margin-left:auto}.header-actions,.theme-toggle{align-items:center;display:flex}.theme-toggle{background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;justify-content:center;padding:.5rem}.theme-mode-toggle .sun-icon{display:none}.theme-mode-toggle .moon-icon{display:block}.theme-toggle svg{transition:transform .2s ease}.header-main-toggle{display:var(--shadow-claw-header-main-toggle-display,block)}.activity-log-toggle[aria-pressed=true],.header-main-toggle[aria-pressed=true]{box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-warning-color,#d97706) 50%,transparent);color:var(--shadow-claw-warning-color,#d97706)}.activity-log-toggle[aria-pressed=true] svg,.header-main-toggle[aria-pressed=true] svg{transform:rotate(180deg)}.webvm-toggle--booting,.webvm-toggle--ready,.webvm-toggle--visible{color:var(--shadow-claw-success-color)}.webvm-toggle--error{color:var(--shadow-claw-error-color)}.app{background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;font-family:var(--shadow-claw-font-sans);visibility:visible;width:100%}.app-body{--sidebar-width:15.625rem;display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.sidebar{background-color:var(--shadow-claw-bg-secondary);border-right:.0625rem solid var(--shadow-claw-bg-tertiary);display:flex;flex:none;flex-direction:column;overflow-y:auto;position:relative;width:var(--sidebar-width)}.sidebar-resize-handle{background:transparent;cursor:col-resize;flex:none;outline:none;position:relative;touch-action:none;user-select:none;width:.75rem}.sidebar-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:4.25rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:.5625rem}.sidebar-resize-handle:after,.sidebar-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.sidebar-resize-handle:after{background:var(--shadow-claw-border-color);height:2.75rem;transition:background-color .15s;width:.1875rem}.sidebar-resize-handle.active:before,.sidebar-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle.active:after,.sidebar-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle:focus-visible:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}@media (max-width:55.9375rem){.sidebar{display:none}.sidebar.open{border-radius:0 var(--shadow-claw-radius-m) var(--shadow-claw-radius-m) 0;box-shadow:var(--shadow-claw-shadow-lg);display:flex;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);position:absolute;width:min(85vw,20rem);z-index:100}.sidebar-resize-handle{display:none}}@media (min-width:56rem){#menu-button{display:none}}.nav-menu{display:var(--shadow-claw-sidebar-nav-display,flex);flex:none;flex-direction:column;list-style:none;margin:0;padding:.5rem}.nav-menu:not(:has(.nav-item:not([hidden]))){display:none}slot[name=sidebar-content],slot[name=sidebar-footer],slot[name=sidebar-nav],slot[name=sidebar]{display:block}::slotted([slot=sidebar-content]),::slotted([slot=sidebar-footer]),::slotted([slot=sidebar-nav]),::slotted([slot=sidebar]){display:block}.sidebar-footer{display:var(--shadow-claw-sidebar-footer-display,block)}.sidebar-spacer{flex:1}shadow-claw-conversations{display:flex;flex:none;flex-direction:column;min-height:0;overflow:hidden}.nav-item{border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:var(--shadow-claw-font-size-sm);font-weight:500;margin-bottom:.5rem;padding:.625rem .75rem;transition:background-color .15s,color .15s}.nav-item:hover{background-color:var(--shadow-claw-text-secondary)}.nav-item.active,.nav-item:hover{color:var(--shadow-claw-on-primary)}.nav-item.active{background-color:var(--shadow-claw-accent-primary)}.sidebar-footer{border-top:.0625rem solid var(--shadow-claw-border-color);flex:none;margin-bottom:.5rem;padding:.75rem}.settings-btn{background-color:transparent;border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-pill);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:.8125rem;padding:.625rem .75rem;transition:all var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.settings-btn:hover{border-color:var(--shadow-claw-text-primary);box-shadow:var(--shadow-claw-shadow-md);color:var(--shadow-claw-text-primary)}.main-content{--chat-split-height:20rem;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);overflow:hidden;position:relative}.main-content,.page{display:flex;flex:1;flex-direction:column;min-height:0}.page{display:none;overflow:auto}.page.active{display:flex}.chat-split-resize-handle{background:transparent;cursor:row-resize;display:none;flex:none;height:.75rem;outline:none;position:relative;touch-action:none;user-select:none;width:100%}.main-content.split-chat-active .page.active{order:1}.main-content.split-chat-active .chat-split-resize-handle{display:flex;margin-bottom:-.375rem;margin-top:-.375rem;order:2;z-index:10}.chat-split-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:.5625rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:4.25rem}.chat-split-resize-handle:after,.chat-split-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.chat-split-resize-handle:after{background:var(--shadow-claw-border-color);height:.1875rem;transition:background-color .15s;width:2.75rem}.chat-split-resize-handle.active:before,.chat-split-resize-handle:focus-visible:before,.chat-split-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.chat-split-resize-handle.active:after,.chat-split-resize-handle:focus-visible:after,.chat-split-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.chat-split-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}.main-content.split-chat-active .chat-page:not(.active){border-top:.0625rem solid var(--shadow-claw-border-color);display:flex;flex:none;height:var(--chat-split-height);max-height:calc(100% - 6.25rem);min-height:9.375rem;order:3}@media (max-width:55.9375rem){.chat-split-resize-handle,.main-content.split-chat-active .chat-page:not(.active){display:none!important}}.app-dialog{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);max-width:min(90vw,28rem);padding:0}.app-dialog::backdrop{background:color-mix(in srgb,#000 50%,transparent)}.app-confirm-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-dialog__title{font-size:1rem;margin:0}.app-dialog__details,.app-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-dialog__details{display:flex;flex-direction:column;gap:.25rem;padding-left:1rem}.app-dialog__links{display:flex;flex-wrap:wrap;gap:.5rem}.app-dialog__link{color:var(--shadow-claw-accent-primary);font-size:.9375rem;text-decoration:none}.app-dialog__link:focus-visible,.app-dialog__link:hover{text-decoration:underline}.app-dialog__countdown{color:var(--shadow-claw-text-secondary);font-size:.875rem;margin:0}.app-confirm-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end}.app-dialog__btn{border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);cursor:pointer;font:inherit;padding:.5rem .75rem}.app-dialog__btn--cancel{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary)}.app-dialog__btn--confirm{background:var(--shadow-claw-accent-primary);border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-on-primary)}.app-prompt-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-prompt-dialog__title{font-size:1rem;margin:0}.app-prompt-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-prompt-dialog__input-area{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.app-prompt-dialog__input{background:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-s);color:var(--shadow-claw-text-primary);font:inherit;padding:.5rem;width:100%}.app-prompt-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.chat-page{flex-direction:column}:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{opacity:1;transform:translateY(0);transition:opacity var(--shadow-claw-duration-min) var(--shadow-claw-ease-out),transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-toast,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-toast{opacity:0;pointer-events:none;transform:translateY(.25rem)}@media (prefers-reduced-motion:reduce){:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{transform:none;transition:none}}.sidebar-boot-skeleton{background-color:var(--shadow-claw-bg-secondary);bottom:0;display:flex;flex-direction:column;left:0;opacity:0;padding:1rem .75rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-hydration-pending=true]) .sidebar-boot-skeleton,:host([data-js-boot-pending=true]) .sidebar-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.skeleton-nav-wrapper{display:none;flex-direction:column;gap:.5rem;margin-bottom:.5rem}:host([data-prerender-no-seed=true]) .skeleton-nav-wrapper{display:flex}.skeleton-divider{border-top:.0625rem solid var(--shadow-claw-border-color);display:none;margin:.75rem 0}:host([data-prerender-no-seed=true]) .skeleton-divider{display:block}.skeleton-convo-wrapper{display:flex;flex-direction:column;gap:.75rem;margin-top:.5rem}.skeleton-item{animation:skeleton-pulse 1.8s ease-in-out infinite;background:linear-gradient(90deg,var(--shadow-claw-bg-secondary) 25%,var(--shadow-claw-bg-tertiary) 50%,var(--shadow-claw-bg-secondary) 75%);background-size:200% 100%}.skeleton-nav{border-radius:var(--shadow-claw-radius-m);height:2.25rem;width:100%}.skeleton-nav:first-child{width:85%}.skeleton-nav:nth-child(2){width:90%}.skeleton-nav:nth-child(3){width:75%}.skeleton-nav:nth-child(4){width:80%}.skeleton-convo{border-radius:var(--shadow-claw-radius-m);height:3.5rem;width:100%}.main-content-boot-skeleton{align-items:center;background-color:var(--shadow-claw-bg-primary);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;opacity:0;padding:2rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .main-content-boot-skeleton,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .main-content-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.boot-loading-svg{height:4.5rem;opacity:.85;transition:color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:4.5rem}.boot-loading-svg,.boot-loading-text{color:var(--shadow-claw-text-secondary)}.boot-loading-text{font-size:var(--shadow-claw-font-size-sm);font-weight:600;letter-spacing:.075em;margin-top:1.25rem;text-transform:uppercase}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
1
|
+
*,:after,:before{box-sizing:border-box}.hidden,[hidden]{display:none!important}a{color:var(--shadow-claw-link);text-decoration:underline;text-underline-offset:.125rem}a:hover{color:var(--shadow-claw-link-hover)}.header{background-color:var(--shadow-claw-bg-secondary);border-bottom:.0625rem solid var(--shadow-claw-border-color);gap:.5rem;height:4rem;justify-content:start;max-height:4rem;padding:.5rem 1rem}.header,.header h1{align-items:center;display:flex;width:100%}.header h1{color:var(--shadow-claw-text-primary);flex-direction:row;margin:0}#menu-button{align-items:center;background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;justify-content:center;padding:.5rem}#menu-button:hover,.theme-toggle:hover{background-color:var(--shadow-claw-bg-tertiary);color:var(--shadow-claw-text-primary)}.header-actions{gap:.5rem;margin-left:auto}.header-actions,.theme-toggle{align-items:center;display:flex}.theme-toggle{background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;justify-content:center;padding:.5rem}.theme-mode-toggle .sun-icon{display:none}.theme-mode-toggle .moon-icon{display:block}.theme-toggle svg{transition:transform .2s ease}.header-main-toggle{display:var(--shadow-claw-header-main-toggle-display,block)}.activity-log-toggle[aria-pressed=true],.header-main-toggle[aria-pressed=true]{box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-warning-color,#d97706) 50%,transparent);color:var(--shadow-claw-warning-color,#d97706)}.activity-log-toggle[aria-pressed=true] svg,.header-main-toggle[aria-pressed=true] svg{transform:rotate(180deg)}.webvm-toggle--booting,.webvm-toggle--ready,.webvm-toggle--visible{color:var(--shadow-claw-success-color)}.webvm-toggle--error{color:var(--shadow-claw-error-color)}.app{background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;font-family:var(--shadow-claw-font-sans);visibility:visible;width:100%}.app-body{--sidebar-width:15.625rem;display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.sidebar{background-color:var(--shadow-claw-bg-secondary);border-right:.0625rem solid var(--shadow-claw-bg-tertiary);display:flex;flex:none;flex-direction:column;overflow-y:auto;position:relative;width:var(--sidebar-width)}.sidebar-resize-handle{background:transparent;cursor:col-resize;flex:none;outline:none;position:relative;touch-action:none;user-select:none;width:.75rem}.sidebar-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:4.25rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:.5625rem}.sidebar-resize-handle:after,.sidebar-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.sidebar-resize-handle:after{background:var(--shadow-claw-border-color);height:2.75rem;transition:background-color .15s;width:.1875rem}.sidebar-resize-handle.active:before,.sidebar-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle.active:after,.sidebar-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle:focus-visible:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}@media (max-width:55.9375rem){.sidebar{display:none}.sidebar.open{border-radius:0 var(--shadow-claw-radius-m) var(--shadow-claw-radius-m) 0;box-shadow:var(--shadow-claw-shadow-lg);display:flex;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);position:absolute;width:min(85vw,20rem);z-index:100}.sidebar-resize-handle{display:none}}@media (min-width:56rem){#menu-button{display:none}}.nav-menu{display:var(--shadow-claw-sidebar-nav-display,flex);flex:none;flex-direction:column;list-style:none;margin:0;padding:.5rem}.nav-menu:not(:has(.nav-item:not([hidden]))){display:none}slot[name=sidebar-content],slot[name=sidebar-footer],slot[name=sidebar-nav],slot[name=sidebar]{display:block}::slotted([slot=sidebar-content]),::slotted([slot=sidebar-footer]),::slotted([slot=sidebar-nav]),::slotted([slot=sidebar]){display:block}.sidebar-footer{display:var(--shadow-claw-sidebar-footer-display,block)}.sidebar-spacer{flex:1}shadow-claw-conversations{display:flex;flex:none;flex-direction:column;min-height:0;overflow:hidden}.nav-item{border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:var(--shadow-claw-font-size-sm);font-weight:500;margin-bottom:.5rem;padding:.625rem .75rem;transition:background-color .15s,color .15s}.nav-item:hover{background-color:var(--shadow-claw-text-secondary)}.nav-item.active,.nav-item:hover{color:var(--shadow-claw-on-primary)}.nav-item.active{background-color:var(--shadow-claw-accent-primary)}.sidebar-footer{border-top:.0625rem solid var(--shadow-claw-border-color);flex:none;margin-bottom:.5rem;padding:.75rem}.settings-btn{background-color:transparent;border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-pill);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:.8125rem;padding:.625rem .75rem;transition:all var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.settings-btn:hover{border-color:var(--shadow-claw-text-primary);box-shadow:var(--shadow-claw-shadow-md);color:var(--shadow-claw-text-primary)}.main-content{--chat-split-height:20rem;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);overflow:hidden;position:relative}.main-content,.page{display:flex;flex:1;flex-direction:column;min-height:0}.page{display:none;overflow:auto}.page.active{display:flex}.chat-split-resize-handle{background:transparent;cursor:row-resize;display:none;flex:none;height:.75rem;outline:none;position:relative;touch-action:none;user-select:none;width:100%}.main-content.split-chat-active .page.active{order:1}.main-content.split-chat-active .chat-split-resize-handle{display:flex;margin-bottom:-.375rem;margin-top:-.375rem;order:2;z-index:10}.chat-split-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:.5625rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:4.25rem}.chat-split-resize-handle:after,.chat-split-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.chat-split-resize-handle:after{background:var(--shadow-claw-border-color);height:.1875rem;transition:background-color .15s;width:2.75rem}.chat-split-resize-handle.active:before,.chat-split-resize-handle:focus-visible:before,.chat-split-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.chat-split-resize-handle.active:after,.chat-split-resize-handle:focus-visible:after,.chat-split-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.chat-split-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}.main-content.split-chat-active .chat-page:not(.active){border-top:.0625rem solid var(--shadow-claw-border-color);display:flex;flex:none;height:var(--chat-split-height);max-height:calc(100% - 6.25rem);min-height:9.375rem;order:3}@media (max-width:55.9375rem){.chat-split-resize-handle,.main-content.split-chat-active .chat-page:not(.active){display:none!important}}.app-dialog{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);max-width:min(90vw,28rem);padding:0}.app-dialog::backdrop{background:color-mix(in srgb,#000 50%,transparent)}.app-confirm-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-dialog__title{font-size:1rem;margin:0}.app-dialog__details,.app-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-dialog__details{display:flex;flex-direction:column;gap:.25rem;padding-left:1rem}.app-dialog__links{display:flex;flex-wrap:wrap;gap:.5rem}.app-dialog__link{color:var(--shadow-claw-accent-primary);font-size:.9375rem;text-decoration:none}.app-dialog__link:focus-visible,.app-dialog__link:hover{text-decoration:underline}.app-dialog__countdown{color:var(--shadow-claw-text-secondary);font-size:.875rem;margin:0}.app-confirm-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end}.app-dialog__btn{border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);cursor:pointer;font:inherit;padding:.5rem .75rem}.app-dialog__btn--cancel{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary)}.app-dialog__btn--confirm{background:var(--shadow-claw-accent-primary);border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-on-primary)}.app-prompt-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-prompt-dialog__title{font-size:1rem;margin:0}.app-prompt-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-prompt-dialog__input-area{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.app-prompt-dialog__input{background:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-s);color:var(--shadow-claw-text-primary);font:inherit;padding:.5rem;width:100%}.app-prompt-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.app-confirm-dialog__form:tool-form-active,.app-prompt-dialog__form:tool-form-active,form:tool-form-active{outline:2px dashed var(--shadow-claw-accent-primary,#3b82f6);outline-offset:4px}button:tool-submit-active{outline:2px dashed var(--shadow-claw-warning,#f59e0b);outline-offset:2px}.chat-page{flex-direction:column}:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{opacity:1;transform:translateY(0);transition:opacity var(--shadow-claw-duration-min) var(--shadow-claw-ease-out),transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-toast,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-toast{opacity:0;pointer-events:none;transform:translateY(.25rem)}@media (prefers-reduced-motion:reduce){:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{transform:none;transition:none}}.sidebar-boot-skeleton{background-color:var(--shadow-claw-bg-secondary);bottom:0;display:flex;flex-direction:column;left:0;opacity:0;padding:1rem .75rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-hydration-pending=true]) .sidebar-boot-skeleton,:host([data-js-boot-pending=true]) .sidebar-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.skeleton-nav-wrapper{display:none;flex-direction:column;gap:.5rem;margin-bottom:.5rem}:host([data-prerender-no-seed=true]) .skeleton-nav-wrapper{display:flex}.skeleton-divider{border-top:.0625rem solid var(--shadow-claw-border-color);display:none;margin:.75rem 0}:host([data-prerender-no-seed=true]) .skeleton-divider{display:block}.skeleton-convo-wrapper{display:flex;flex-direction:column;gap:.75rem;margin-top:.5rem}.skeleton-item{animation:skeleton-pulse 1.8s ease-in-out infinite;background:linear-gradient(90deg,var(--shadow-claw-bg-secondary) 25%,var(--shadow-claw-bg-tertiary) 50%,var(--shadow-claw-bg-secondary) 75%);background-size:200% 100%}.skeleton-nav{border-radius:var(--shadow-claw-radius-m);height:2.25rem;width:100%}.skeleton-nav:first-child{width:85%}.skeleton-nav:nth-child(2){width:90%}.skeleton-nav:nth-child(3){width:75%}.skeleton-nav:nth-child(4){width:80%}.skeleton-convo{border-radius:var(--shadow-claw-radius-m);height:3.5rem;width:100%}.main-content-boot-skeleton{align-items:center;background-color:var(--shadow-claw-bg-primary);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;opacity:0;padding:2rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .main-content-boot-skeleton,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .main-content-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.boot-loading-svg{height:4.5rem;opacity:.85;transition:color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:4.5rem}.boot-loading-svg,.boot-loading-text{color:var(--shadow-claw-text-secondary)}.boot-loading-text{font-size:var(--shadow-claw-font-size-sm);font-weight:600;letter-spacing:.075em;margin-top:1.25rem;text-transform:uppercase}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<template><div class="app"> <header class="header"> <button aria-label="Open menu" title="Open menu" id="menu-button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M120-680v-80h720v80zm0 480v-80h720v80zm0-240v-80h720v80z"/></svg> </button> <h1> <slot name="header-title-link"></slot> <div class="header-actions"> <button aria-label="Toggle theme" title="Toggle theme" class="theme-mode-toggle theme-toggle"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="sun-icon" viewBox="0 -960 960 960"><path d="M480-360q50 0 85-35t35-85-35-85-85-35-85 35-35 85 35 85 85 35m0 80q-83 0-141.5-58.5T280-480t58.5-141.5T480-680t141.5 58.5T680-480t-58.5 141.5T480-280M200-440H40v-80h160zm720 0H760v-80h160zM440-760v-160h80v160zm0 720v-160h80v160zM256-650l-101-97 57-59 96 100zm492 496-97-101 53-55 101 97zm-98-550 97-101 59 57-101 97zM158-190l97-101 55 53-101 97z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="moon-icon" viewBox="0 -960 960 960"><path d="M480-120q-150 0-255-105T120-480t105-255 255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q52 0 99-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120m0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-74 30-122.5 100T204-480q0 116 82 198t194 82m-12-274"/></svg> </button> <button aria-label="Hide action header" title="Hide action header" aria-pressed="false" class="header-main-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M280-200h400v-80H280zm200-200L280-600l56-56 104 104v-328h80v328l104-104 56 56z"/></svg> </button> <button aria-label="Hide activity log" title="Hide activity log" aria-pressed="false" class="activity-log-toggle theme-toggle" type="button" hidden> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 -960 960 960"><path d="M80-600v-160q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v160h-80v-160H160v160zm80 360q-33 0-56.5-23.5T80-320v-200h80v200h640v-200h80v200q0 33-23.5 56.5T800-240zM40-120v-80h880v80zm40-400v-80h240q11 0 21 6t15 16l47 93 123-215q5-9 14-14.5t20-5.5 21 5.5 15 16.5l49 98h235v80H620q-11 0-21-5.5T584-542l-26-53-123 215q-5 10-15 15t-21 5-20.5-6-14.5-16l-69-138z"/></svg> </button> <button aria-label="Hide WebVM terminal" title="Hide WebVM terminal" aria-pressed="true" class="theme-toggle webvm-toggle" type="button" hidden> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M320-280 120-480l200-200 56 56-104 104h568v80H272l104 104zm320 0-56-56 104-104H120v-80h568L584-624l56-56 200 200z"/></svg> </button> <slot name="header-actions-logo"></slot> </div> </h1> </header> <div class="app-body"> <aside class="sidebar"> <div class="sidebar-boot-skeleton" aria-hidden="true"> <div class="skeleton-nav-wrapper"> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> </div> <div class="skeleton-divider"></div> <div class="skeleton-convo-wrapper"> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> </div> </div> <nav> <ul class="nav-menu"> <li class="active nav-item" data-page="pages">📚 Pages</li> <li class="nav-item" data-page="chat">💬 Chat</li> <li class="nav-item" data-page="tasks"> ✓ Tasks</li> <li class="nav-item" data-page="files">📁 Files</li> </ul> </nav> <slot name="sidebar-nav"></slot> <slot name="sidebar"></slot> <slot name="sidebar-content"></slot> <div class="sidebar-spacer"></div> <shadow-claw-conversations></shadow-claw-conversations> <slot name="sidebar-footer"></slot> <div class="sidebar-footer"> <button class="settings-btn" data-action="show-settings"> ⚙️ Settings </button> </div> </aside> <div class="sidebar-resize-handle" title="Drag to resize sidebar"></div> <main class="main-content"> <div class="main-content-boot-skeleton" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" class="boot-loading-svg" viewBox="0 0 44 44"><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2"><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle></g></svg> <div class="boot-loading-text">Preparing workspace...</div> </div> <div class="chat-page page" data-page-id="chat"></div> <div class="page" data-page-id="tasks"></div> <div class="page" data-page-id="files"></div> <div class="active page" data-page-id="pages"> <shadow-claw-pages></shadow-claw-pages> </div> <div class="page" data-page-id="settings"></div> <div class="page" data-page-id="tools"></div> <div class="page" data-page-id="channels"></div> <div class="chat-split-resize-handle" title="Drag to resize chat panel" hidden></div> <shadow-claw-toast></shadow-claw-toast> </main> </div> <shadow-claw-dialog dialog-class="app-dialog" dialog-aria-labelledby="appDialogTitle"> <form method="dialog" class="app-confirm-dialog__form"> <h2 id="appDialogTitle" class="app-dialog__title">Confirm</h2> <p class="app-dialog__message"></p> <ul class="app-dialog__details" hidden></ul> <div class="app-dialog__links" hidden></div> <p class="app-dialog__countdown" hidden role="status" aria-live="polite" aria-atomic="true"></p> <div class="app-confirm-dialog__actions"> <button type="submit" value="cancel" class="app-dialog__btn app-dialog__btn--cancel"> Cancel </button> <button type="submit" value="confirm" class="app-dialog__btn app-dialog__btn--confirm"> Confirm </button> </div> </form> </shadow-claw-dialog> <shadow-claw-dialog dialog-class="app-dialog app-prompt-dialog" dialog-aria-labelledby="appPromptTitle"> <form method="dialog" class="app-prompt-dialog__form"> <h2 id="appPromptTitle" class="app-prompt-dialog__title"> Agent Question </h2> <p class="app-prompt-dialog__message"></p> <div class="app-prompt-dialog__input-area"> </div> <div class="app-prompt-dialog__actions"> <button type="submit" value="submit" class="app-dialog__btn app-dialog__btn--confirm app-prompt-dialog__submit"> Submit </button> </div> </form> </shadow-claw-dialog> </div></template>
|
|
1
|
+
<template><div class="app"> <header class="header"> <button aria-label="Open menu" title="Open menu" id="menu-button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M120-680v-80h720v80zm0 480v-80h720v80zm0-240v-80h720v80z"/></svg> </button> <h1> <slot name="header-title-link"></slot> <div class="header-actions"> <button aria-label="Toggle theme" title="Toggle theme" class="theme-mode-toggle theme-toggle"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="sun-icon" viewBox="0 -960 960 960"><path d="M480-360q50 0 85-35t35-85-35-85-85-35-85 35-35 85 35 85 85 35m0 80q-83 0-141.5-58.5T280-480t58.5-141.5T480-680t141.5 58.5T680-480t-58.5 141.5T480-280M200-440H40v-80h160zm720 0H760v-80h160zM440-760v-160h80v160zm0 720v-160h80v160zM256-650l-101-97 57-59 96 100zm492 496-97-101 53-55 101 97zm-98-550 97-101 59 57-101 97zM158-190l97-101 55 53-101 97z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="moon-icon" viewBox="0 -960 960 960"><path d="M480-120q-150 0-255-105T120-480t105-255 255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q52 0 99-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120m0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-74 30-122.5 100T204-480q0 116 82 198t194 82m-12-274"/></svg> </button> <button aria-label="Hide action header" title="Hide action header" aria-pressed="false" class="header-main-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M280-200h400v-80H280zm200-200L280-600l56-56 104 104v-328h80v328l104-104 56 56z"/></svg> </button> <button aria-label="Hide activity log" title="Hide activity log" aria-pressed="false" class="activity-log-toggle theme-toggle" type="button" hidden> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 -960 960 960"><path d="M80-600v-160q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v160h-80v-160H160v160zm80 360q-33 0-56.5-23.5T80-320v-200h80v200h640v-200h80v200q0 33-23.5 56.5T800-240zM40-120v-80h880v80zm40-400v-80h240q11 0 21 6t15 16l47 93 123-215q5-9 14-14.5t20-5.5 21 5.5 15 16.5l49 98h235v80H620q-11 0-21-5.5T584-542l-26-53-123 215q-5 10-15 15t-21 5-20.5-6-14.5-16l-69-138z"/></svg> </button> <button aria-label="Hide WebVM terminal" title="Hide WebVM terminal" aria-pressed="true" class="theme-toggle webvm-toggle" type="button" hidden> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M320-280 120-480l200-200 56 56-104 104h568v80H272l104 104zm320 0-56-56 104-104H120v-80h568L584-624l56-56 200 200z"/></svg> </button> <slot name="header-actions-logo"></slot> </div> </h1> </header> <div class="app-body"> <aside class="sidebar"> <div class="sidebar-boot-skeleton" aria-hidden="true"> <div class="skeleton-nav-wrapper"> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> </div> <div class="skeleton-divider"></div> <div class="skeleton-convo-wrapper"> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> </div> </div> <nav> <ul class="nav-menu"> <li class="active nav-item" data-page="pages">📚 Pages</li> <li class="nav-item" data-page="chat">💬 Chat</li> <li class="nav-item" data-page="tasks"> ✓ Tasks</li> <li class="nav-item" data-page="files">📁 Files</li> </ul> </nav> <slot name="sidebar-nav"></slot> <slot name="sidebar"></slot> <slot name="sidebar-content"></slot> <div class="sidebar-spacer"></div> <shadow-claw-conversations></shadow-claw-conversations> <slot name="sidebar-footer"></slot> <div class="sidebar-footer"> <button class="settings-btn" data-action="show-settings"> ⚙️ Settings </button> </div> </aside> <div class="sidebar-resize-handle" title="Drag to resize sidebar"></div> <main class="main-content"> <div class="main-content-boot-skeleton" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" class="boot-loading-svg" viewBox="0 0 44 44"><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2"><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle></g></svg> <div class="boot-loading-text">Preparing workspace...</div> </div> <div class="chat-page page" data-page-id="chat"></div> <div class="page" data-page-id="tasks"></div> <div class="page" data-page-id="files"></div> <div class="active page" data-page-id="pages"> <shadow-claw-pages></shadow-claw-pages> </div> <div class="page" data-page-id="settings"></div> <div class="page" data-page-id="tools"></div> <div class="page" data-page-id="channels"></div> <div class="chat-split-resize-handle" title="Drag to resize chat panel" hidden></div> <shadow-claw-toast></shadow-claw-toast> </main> </div> <shadow-claw-dialog dialog-class="app-dialog" dialog-aria-labelledby="appDialogTitle"> <form method="dialog" class="app-confirm-dialog__form" toolname="app_dialog_confirm" tooldescription="Confirm or cancel an application modal dialog prompt"> <h2 id="appDialogTitle" class="app-dialog__title">Confirm</h2> <p class="app-dialog__message"></p> <ul class="app-dialog__details" hidden></ul> <div class="app-dialog__links" hidden></div> <p class="app-dialog__countdown" hidden role="status" aria-live="polite" aria-atomic="true"></p> <div class="app-confirm-dialog__actions"> <button type="submit" value="cancel" class="app-dialog__btn app-dialog__btn--cancel"> Cancel </button> <button type="submit" value="confirm" class="app-dialog__btn app-dialog__btn--confirm"> Confirm </button> </div> </form> </shadow-claw-dialog> <shadow-claw-dialog dialog-class="app-dialog app-prompt-dialog" dialog-aria-labelledby="appPromptTitle"> <form method="dialog" class="app-prompt-dialog__form" toolname="app_dialog_prompt" tooldescription="Submit user response or selection to an interactive dialog prompt"> <h2 id="appPromptTitle" class="app-prompt-dialog__title"> Agent Question </h2> <p class="app-prompt-dialog__message"></p> <div class="app-prompt-dialog__input-area"> </div> <div class="app-prompt-dialog__actions"> <button type="submit" value="submit" class="app-dialog__btn app-dialog__btn--confirm app-prompt-dialog__submit"> Submit </button> </div> </form> </shadow-claw-dialog> </div></template>
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
--shadow-claw-important-color-hover,color-mix(in srgb,var(--shadow-claw-important-color) 82%,#000)
|
|
3
3
|
);border-color:var(
|
|
4
4
|
--shadow-claw-important-color-hover,color-mix(in srgb,var(--shadow-claw-important-color) 82%,#000)
|
|
5
|
-
);box-shadow:0 0 0 .125rem color-mix(in srgb,var(--shadow-claw-important-color) 24%,transparent);outline:none}.conversations__cancel:focus-visible,.conversations__cancel:hover{background-color:var(--shadow-claw-bg-tertiary);outline:none}.conversations__participants-container{display:none;margin-bottom:1rem}.conversations__participants-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.conversations__provider-select{margin-bottom:1rem}.conversations__model-container{display:none;margin:1rem 0}.conversations__model-row{align-items:center;display:flex;gap:.5rem}.conversations__model-select{flex:1;margin-bottom:0}
|
|
5
|
+
);box-shadow:0 0 0 .125rem color-mix(in srgb,var(--shadow-claw-important-color) 24%,transparent);outline:none}.conversations__cancel:focus-visible,.conversations__cancel:hover{background-color:var(--shadow-claw-bg-tertiary);outline:none}.conversations__participants-container{display:none;margin-bottom:1rem}.conversations__participants-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.conversations__provider-select{margin-bottom:1rem}.conversations__model-container{display:none;margin:1rem 0}.conversations__model-row{align-items:center;display:flex;gap:.5rem}.conversations__model-select{flex:1;margin-bottom:0}.conversations__form:tool-form-active,form:tool-form-active{outline:2px dashed var(--accent,#3b82f6);outline-offset:4px}button:tool-submit-active{outline:2px dashed var(--warning,#f59e0b);outline-offset:2px}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<template><div class="resize-handle" title="Drag to resize"></div><div class="conversations-header"> <span>Conversations</span> <button class="create-btn" data-action="create" title="New Conversation"> + </button> </div><span class="sr-only" id="reorder-instructions"> Press Enter or Space to select. Use Arrow Keys to move focus. Press M to grab for reordering. When grabbed, use Arrow Up and Down to move. Press Space or Enter to drop. Press Escape to cancel. </span><div aria-live="assertive" class="sr-only" id="live-region" role="status"></div><ul class="conversation-list" role="list"></ul><shadow-claw-dialog dialog-aria-label="Create new conversation" dialog-class="conversations__dialog conversations__create-dialog"> <form class="conversations__form" method="dialog"> <label class="conversations__label" for="conversations-create-name"> Conversation name </label> <input autocomplete="off" class="conversations__input" id="conversations-create-name" name="conversations-create-name" required type="text"> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">OK</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Conversation Details" dialog-class="conversations__dialog conversations__details-dialog"> <form class="conversations__form" method="dialog"> <label class="conversations__label" for="conversations-details-name"> Conversation name </label> <input autocomplete="off" class="conversations__input" id="conversations-details-name" name="conversations-details-name" required type="text"> <label class="conversations__label conversations__label--group-id" for="conversations-details-group-id"> Group ID </label> <div class="conversations__group-id-row"> <input class="conversations__group-id-input conversations__input" id="conversations-details-group-id" name="conversations-details-group-id" readonly type="text"> <button type="button" class="conversations__group-id-copy-btn" id="conversations-group-id-copy-btn" title="Copy Group ID" aria-label="Copy Group ID to clipboard"> <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="0 -960 960 960"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240zm0-80h360v-480H360zM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80zm160-240v-480z"/></svg> </button> </div> <div id="conversations-details-participants-container" class="conversations__participants-container"> <label class="conversations__label"> Connected Participants </label> <div id="conversations-details-participants-list" class="conversations__participants-list"></div> </div> <shadow-claw-provider-model-picker id="conversations-main-picker"> </shadow-claw-provider-model-picker> <label class="conversations__label" for="conversations-agent-max-tokens"> Agent Max Tokens (optional) </label> <input class="conversations__input" id="conversations-agent-max-tokens" min="1" name="conversations-agent-max-tokens" placeholder="Auto (model-aware)" step="1" type="number"> <shadow-claw-provider-module-settings id="conversations-main-provider-module-settings"> </shadow-claw-provider-module-settings> <label class="conversations__label conversations__label--tools"> Pinned Tools </label> <div class="conversations__tool-input-row"> <input type="text" list="conversations-available-tools" id="conversations-tool-input" name="conversations-tool-input" class="conversations__input conversations__tool-input" placeholder="Add a tool..." toolparamdescription="The name of the tool to pin to the conversation."> <datalist id="conversations-available-tools"></datalist> <button type="button" class="conversations__tool-add-btn" id="conversations-add-tool-btn"> Add </button> </div> <div class="conversations__tool-tags" id="conversations-details-tools"></div> <div id="conversations-subagent-settings-container"> <label class="conversations__label" for="conversations-subagent-mode"> Subagent Provider/Model Mode </label> <select class="conversations__input" id="conversations-subagent-mode" name="conversations-subagent-mode"> <option value="automatic">Automatic (parent decides)</option> <option value="manual">Manual (pin provider/model)</option> </select> <label class="conversations__label" for="conversations-subagent-max-tokens"> Subagent Max Tokens (optional) </label> <input class="conversations__input" id="conversations-subagent-max-tokens" min="1" name="conversations-subagent-max-tokens" placeholder="Auto (model-aware)" step="1" type="number"> <div id="conversations-subagent-manual-container"> <shadow-claw-provider-model-picker id="conversations-subagent-picker"> </shadow-claw-provider-model-picker> <shadow-claw-provider-module-settings id="conversations-subagent-provider-module-settings"> </shadow-claw-provider-module-settings> </div> </div> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">Save</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Delete conversation" dialog-class="conversations__dialog conversations__delete-dialog"> <form class="conversations__form" method="dialog"> <p class="conversations__delete-message"> Delete conversation "<span class="conversations__delete-name"></span>"? This cannot be undone. </p> <div class="conversations__actions"> <button autofocus class="conversations__cancel" type="button"> Cancel </button> <button class="conversations__delete-ok" type="submit">Delete</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Clone conversation" dialog-class="conversations__dialog conversations__clone-dialog"> <form class="conversations__form" method="dialog"> <p class="conversations__delete-message"> Clone conversation "<span class="conversations__clone-name"></span>"? </p> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">Clone</button> </div> </form> </shadow-claw-dialog></template>
|
|
1
|
+
<template><div class="resize-handle" title="Drag to resize"></div><div class="conversations-header"> <span>Conversations</span> <button class="create-btn" data-action="create" title="New Conversation"> + </button> </div><span class="sr-only" id="reorder-instructions"> Press Enter or Space to select. Use Arrow Keys to move focus. Press M to grab for reordering. When grabbed, use Arrow Up and Down to move. Press Space or Enter to drop. Press Escape to cancel. </span><div aria-live="assertive" class="sr-only" id="live-region" role="status"></div><ul class="conversation-list" role="list"></ul><shadow-claw-dialog dialog-aria-label="Create new conversation" dialog-class="conversations__dialog conversations__create-dialog"> <form class="conversations__form" method="dialog" toolname="conversations_create" tooldescription="Create a new conversation session"> <label class="conversations__label" for="conversations-create-name"> Conversation name </label> <input autocomplete="off" class="conversations__input" id="conversations-create-name" name="conversations-create-name" required type="text" toolparamdescription="Display name of the new conversation"> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">OK</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Conversation Details" dialog-class="conversations__dialog conversations__details-dialog"> <form class="conversations__form" method="dialog" toolname="conversations_edit_details" tooldescription="Edit conversation details, model configuration, and pinned tools"> <label class="conversations__label" for="conversations-details-name"> Conversation name </label> <input autocomplete="off" class="conversations__input" id="conversations-details-name" name="conversations-details-name" required type="text" toolparamdescription="Display name of the conversation"> <label class="conversations__label conversations__label--group-id" for="conversations-details-group-id"> Group ID </label> <div class="conversations__group-id-row"> <input class="conversations__group-id-input conversations__input" id="conversations-details-group-id" name="conversations-details-group-id" readonly type="text" toolparamdescription="Unique group identifier for the conversation"> <button type="button" class="conversations__group-id-copy-btn" id="conversations-group-id-copy-btn" title="Copy Group ID" aria-label="Copy Group ID to clipboard"> <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="0 -960 960 960"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240zm0-80h360v-480H360zM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80zm160-240v-480z"/></svg> </button> </div> <div id="conversations-details-participants-container" class="conversations__participants-container"> <label class="conversations__label"> Connected Participants </label> <div id="conversations-details-participants-list" class="conversations__participants-list"></div> </div> <shadow-claw-provider-model-picker id="conversations-main-picker"> </shadow-claw-provider-model-picker> <label class="conversations__label" for="conversations-agent-max-tokens"> Agent Max Tokens (optional) </label> <input class="conversations__input" id="conversations-agent-max-tokens" min="1" name="conversations-agent-max-tokens" placeholder="Auto (model-aware)" step="1" type="number"> <shadow-claw-provider-module-settings id="conversations-main-provider-module-settings"> </shadow-claw-provider-module-settings> <label class="conversations__label conversations__label--tools"> Pinned Tools </label> <div class="conversations__tool-input-row"> <input type="text" list="conversations-available-tools" id="conversations-tool-input" name="conversations-tool-input" class="conversations__input conversations__tool-input" placeholder="Add a tool..." toolparamdescription="The name of the tool to pin to the conversation."> <datalist id="conversations-available-tools"></datalist> <button type="button" class="conversations__tool-add-btn" id="conversations-add-tool-btn"> Add </button> </div> <div class="conversations__tool-tags" id="conversations-details-tools"></div> <div id="conversations-subagent-settings-container"> <label class="conversations__label" for="conversations-subagent-mode"> Subagent Provider/Model Mode </label> <select class="conversations__input" id="conversations-subagent-mode" name="conversations-subagent-mode"> <option value="automatic">Automatic (parent decides)</option> <option value="manual">Manual (pin provider/model)</option> </select> <label class="conversations__label" for="conversations-subagent-max-tokens"> Subagent Max Tokens (optional) </label> <input class="conversations__input" id="conversations-subagent-max-tokens" min="1" name="conversations-subagent-max-tokens" placeholder="Auto (model-aware)" step="1" type="number"> <div id="conversations-subagent-manual-container"> <shadow-claw-provider-model-picker id="conversations-subagent-picker"> </shadow-claw-provider-model-picker> <shadow-claw-provider-module-settings id="conversations-subagent-provider-module-settings"> </shadow-claw-provider-module-settings> </div> </div> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">Save</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Delete conversation" dialog-class="conversations__dialog conversations__delete-dialog"> <form class="conversations__form" method="dialog" toolname="conversations_delete" tooldescription="Confirm deletion of the selected conversation"> <p class="conversations__delete-message"> Delete conversation "<span class="conversations__delete-name"></span>"? This cannot be undone. </p> <div class="conversations__actions"> <button autofocus class="conversations__cancel" type="button"> Cancel </button> <button class="conversations__delete-ok" type="submit">Delete</button> </div> </form> </shadow-claw-dialog><shadow-claw-dialog dialog-aria-label="Clone conversation" dialog-class="conversations__dialog conversations__clone-dialog"> <form class="conversations__form" method="dialog" toolname="conversations_clone" tooldescription="Confirm cloning of the selected conversation into a new session"> <p class="conversations__delete-message"> Clone conversation "<span class="conversations__clone-name"></span>"? </p> <div class="conversations__actions"> <button class="conversations__cancel" type="button">Cancel</button> <button class="conversations__ok" type="submit">Clone</button> </div> </form> </shadow-claw-dialog></template>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./config-y_2Fg77m.js";import{Et as t,vt as n}from"./orchestrator-
|
|
1
|
+
import{r as e}from"./config-y_2Fg77m.js";import{Et as t,vt as n}from"./orchestrator-OoUK7CF9.js";import{t as r}from"./set-config-DSiuMe0k.js";async function i(i,a,o,s,c=``,l=0,u=``,d=!0){let f=o.trim(),p=t(s),m=c.trim(),h=Number.isFinite(l)?Math.max(0,Math.floor(l)):0,g=u.trim(),_=!!d;i.peerjsMyPeerId=f,i.peerjsTrustedPeerIds=p,i.peerjsServerHost=m,i.peerjsServerPort=h,i.peerjsServerPath=g,i.peerjsServerSecure=_,await r(a,e.PEERJS_MY_PEER_ID,f),await r(a,e.PEERJS_TRUSTED_PEER_IDS,JSON.stringify(p)),await r(a,e.PEERJS_SERVER_HOST,m),await r(a,e.PEERJS_SERVER_PORT,h?String(h):``),await r(a,e.PEERJS_SERVER_PATH,g),await r(a,e.PEERJS_SERVER_SECURE,_?`true`:`false`);let v=m?{host:m,path:g||void 0,port:h||void 0,secure:_}:{};i.peerjs.stop(),i.peerjs.configure(f,p,v),f&&n(i,`peerjs`)&&i.peerjs.start()}export{i as t};
|