shadow-claw 1.26.0 → 1.27.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/.agents/skills/main/skill-creator/SKILL.md +39 -0
- package/.agents/skills/main/skill-creator/references/declarative-pipelines.md +44 -0
- package/.agents/skills/main/skill-creator/references/declarative-tools.md +35 -0
- package/.agents/skills/main/skill-creator/references/frontmatter-spec.md +50 -0
- package/.well-known/agent-skills/index.json +14 -0
- package/README.md +5 -3
- package/bin/build/build.mjs +146 -15
- package/bin/build/build.test.mjs +57 -0
- package/bin/cli.mjs +26 -0
- package/bin/commands/mcp.mjs +277 -55
- package/bin/commands/mcp.test.mjs +275 -1
- package/bin/commands/skills-index.mjs +328 -0
- package/bin/commands/skills-index.test.mjs +161 -0
- package/bin/site-config/utils/custom-elements/get-approved-custom-element-scripts.test.mjs +2 -0
- package/bin/site-config/utils/custom-elements/sanitize-embedded-custom-element-scripts.test.mjs +10 -1
- 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-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-a2ui.js +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-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/{configurePeerJs-CrlGan0m.js → configurePeerJs-oODzltaC.js} +2 -2
- package/dist/lib/{configurePeerJs-CrlGan0m.js.map → configurePeerJs-oODzltaC.js.map} +1 -1
- package/dist/lib/core/control-plane-client.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-DboUjmp2.js → downloadGroupFile-DmcBQU1n.js} +2 -2
- package/dist/lib/{downloadGroupFile-DboUjmp2.js.map → downloadGroupFile-DmcBQU1n.js.map} +1 -1
- package/dist/lib/{file-viewer-BrK2Wxgh.js → file-viewer-C3YKnq_-.js} +4 -3
- package/dist/lib/{file-viewer-BrK2Wxgh.js.map → file-viewer-C3YKnq_-.js.map} +1 -1
- package/dist/lib/index.js +26 -26
- package/dist/lib/{initControlPlane-CsO4UR6_.js → initControlPlane-C2zURVIS.js} +86 -13
- package/dist/lib/initControlPlane-C2zURVIS.js.map +1 -0
- package/dist/lib/{markdown-eeSTFnMA.js → markdown-C6EHl9zs.js} +3 -3
- package/dist/lib/{markdown-eeSTFnMA.js.map → markdown-C6EHl9zs.js.map} +1 -1
- package/dist/lib/{orchestrator-CJvoC2Uu.js → orchestrator-CACLa_Ro.js} +7 -6
- package/dist/lib/{orchestrator-CJvoC2Uu.js.map → orchestrator-CACLa_Ro.js.map} +1 -1
- package/dist/lib/{orchestrator-DCfomsn9.js → orchestrator-KRjx0eba.js} +6 -534
- package/dist/lib/{orchestrator-DCfomsn9.js.map → orchestrator-KRjx0eba.js.map} +1 -1
- package/dist/lib/parsePath-DwC_YZjw.js +16 -0
- package/dist/lib/parsePath-DwC_YZjw.js.map +1 -0
- package/dist/lib/{peerjs-Dp02bXcG.js → peerjs-DFWOBcXf.js} +4 -4
- package/dist/lib/{peerjs-Dp02bXcG.js.map → peerjs-DFWOBcXf.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-Bve-e5e_.js → readGroupFileBytes-C8oOe8Iu.js} +3 -16
- package/dist/lib/readGroupFileBytes-C8oOe8Iu.js.map +1 -0
- package/dist/lib/security/custom-element-security.d.ts +8 -0
- package/dist/lib/server/control-plane-types.d.ts +1 -1
- package/dist/lib/{shadow-claw-D8xINM3c.js → shadow-claw-6UHdiy4a.js} +5 -5
- package/dist/lib/{shadow-claw-D8xINM3c.js.map → shadow-claw-6UHdiy4a.js.map} +1 -1
- package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js → shadow-claw-a2ui-CpZUTzlh.js} +5 -4
- package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js.map → shadow-claw-a2ui-CpZUTzlh.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-CdruwN8A.js → shadow-claw-accounts-03oJ__XC.js} +2 -2
- package/dist/lib/{shadow-claw-accounts-CdruwN8A.js.map → shadow-claw-accounts-03oJ__XC.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js → shadow-claw-channel-config-DmfwJc6G.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js.map → shadow-claw-channel-config-DmfwJc6G.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-C_jI4KhP.js → shadow-claw-channels-1N6Jl-By.js} +3 -3
- package/dist/lib/{shadow-claw-channels-C_jI4KhP.js.map → shadow-claw-channels-1N6Jl-By.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B16MspoP.js → shadow-claw-chat-BMoqQJRK.js} +10 -10
- package/dist/lib/{shadow-claw-chat-B16MspoP.js.map → shadow-claw-chat-BMoqQJRK.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js → shadow-claw-control-plane-UG0o7pCz.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js.map → shadow-claw-control-plane-UG0o7pCz.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js → shadow-claw-conversations-BwXep3iu.js} +4 -3
- package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js.map → shadow-claw-conversations-BwXep3iu.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-BfDHHgpA.js → shadow-claw-file-viewer-DUxzVxDT.js} +14 -10
- package/dist/lib/shadow-claw-file-viewer-DUxzVxDT.js.map +1 -0
- package/dist/lib/{shadow-claw-files-EYhOPYIH.js → shadow-claw-files-DIREEnT2.js} +7 -7
- package/dist/lib/{shadow-claw-files-EYhOPYIH.js.map → shadow-claw-files-DIREEnT2.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-tcSpT-P0.js → shadow-claw-git-Bg1SWgsF.js} +4 -4
- package/dist/lib/{shadow-claw-git-tcSpT-P0.js.map → shadow-claw-git-Bg1SWgsF.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js → shadow-claw-integrations-Ds-CLPhj.js} +2 -2
- package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js.map → shadow-claw-integrations-Ds-CLPhj.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-BazJdD5f.js → shadow-claw-llm-CazBrVpM.js} +3 -3
- package/dist/lib/{shadow-claw-llm-BazJdD5f.js.map → shadow-claw-llm-CazBrVpM.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js → shadow-claw-mcp-remote-CT5Q-54E.js} +2 -2
- package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js.map → shadow-claw-mcp-remote-CT5Q-54E.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-DImPxe0H.js → shadow-claw-networking-Df85tCbO.js} +2 -2
- package/dist/lib/{shadow-claw-networking-DImPxe0H.js.map → shadow-claw-networking-Df85tCbO.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js → shadow-claw-page-header-Cti2fzf-.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js.map → shadow-claw-page-header-Cti2fzf-.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-D54jF1Qq.js → shadow-claw-pages-BgPyIEZO.js} +15 -11
- package/dist/lib/shadow-claw-pages-BgPyIEZO.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js → shadow-claw-peerjs-xkBXILed.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js.map → shadow-claw-peerjs-xkBXILed.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js → shadow-claw-settings-CN89xRVU.js} +4 -4
- package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js.map → shadow-claw-settings-CN89xRVU.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-CFOjGf1d.js → shadow-claw-storage-VnhcObCe.js} +3 -3
- package/dist/lib/{shadow-claw-storage-CFOjGf1d.js.map → shadow-claw-storage-VnhcObCe.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js → shadow-claw-task-server-jgEC2hHB.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js.map → shadow-claw-task-server-jgEC2hHB.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js → shadow-claw-tasks-i_evIufy.js} +6 -6
- package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js.map → shadow-claw-tasks-i_evIufy.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js → shadow-claw-terminal-CwScROlu.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js.map → shadow-claw-terminal-CwScROlu.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-DxXIm0ku.js → shadow-claw-tools-DD3fyXP4.js} +5 -4
- package/dist/lib/{shadow-claw-tools-DxXIm0ku.js.map → shadow-claw-tools-DD3fyXP4.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js → shadow-claw-webvm-DbJq4I3-.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js.map → shadow-claw-webvm-DbJq4I3-.js.map} +1 -1
- package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js → syncWebMcpRegistration-DNLnQ-jz.js} +3 -2
- package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js.map → syncWebMcpRegistration-DNLnQ-jz.js.map} +1 -1
- package/dist/lib/tools-DwwB9RBa.js +546 -0
- package/dist/lib/tools-DwwB9RBa.js.map +1 -0
- package/dist/lib/{trusted-types-CkLDpLiZ.js → trusted-types-Dx0RZlrd.js} +19 -8
- package/dist/lib/trusted-types-Dx0RZlrd.js.map +1 -0
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/public/.well-known/agent-skills/index.json +14 -0
- package/dist/public/AGENTS.md +5 -3
- package/dist/public/README.md +5 -3
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/{configurePeerJs-COcwE0E7.js → configurePeerJs-BqgeBjP7.js} +1 -1
- package/dist/public/custom-element-security-FU04Cq05.js +1 -0
- package/dist/public/dist-B9m1QM9v.js +58 -0
- package/dist/public/docs/README.md +31 -31
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/docs/subsystems/a2ui.md +11 -1
- package/dist/public/docs/subsystems/cli.md +29 -0
- package/dist/public/docs/subsystems/control-plane.md +8 -2
- package/dist/public/docs/subsystems/custom-element-security.md +19 -9
- package/dist/public/docs/subsystems/mcp-server.md +39 -15
- package/dist/public/docs/subsystems/skills.md +30 -0
- package/dist/public/docs/subsystems/webmcp.md +9 -0
- package/dist/public/downloadGroupFile-D8KRJGGL.js +1 -0
- package/dist/public/e2e/README.md +7 -4
- package/dist/public/{e2e-bridge-CHARpbpW.js → e2e-bridge-Ceqr5kGc.js} +1 -1
- package/dist/public/effect-BJCrpFdp.js +1 -0
- package/dist/public/file-viewer-C-6Jc_tb.js +1 -0
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/initControlPlane-BN9cWyO0.js +1 -0
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{markdown-1I3O6Mmd.js → markdown-C3M4OW_A.js} +1 -1
- package/dist/public/{orchestrator-Cl95w2vb.js → orchestrator-CMbCTjBf.js} +7 -7
- package/dist/public/{orchestrator-D-xlXG92.js → orchestrator-DHjdLtqa.js} +663 -663
- package/dist/public/peerjs-DUCKH-m9.js +1 -0
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-CaoKmIIB.js → shadow-claw-EAt2ml5Y.js} +3 -3
- package/dist/public/{shadow-claw-accounts-CJvYC4li.js → shadow-claw-accounts-xUOLBsQZ.js} +1 -1
- package/dist/public/{shadow-claw-channels-3K62sU5f.js → shadow-claw-channels-XsfuWFF8.js} +4 -4
- package/dist/public/{shadow-claw-chat-Cu2keU2I.js → shadow-claw-chat-CbSaOZ4q.js} +7 -7
- package/dist/public/{shadow-claw-control-plane-D1OwlQI_.js → shadow-claw-control-plane-DHvN3Ukg.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DDtg3BEZ.js → shadow-claw-conversations-BWs5VVfs.js} +2 -2
- package/dist/public/{shadow-claw-file-viewer-BR__1z9S.js → shadow-claw-file-viewer-BWsoW5QS.js} +5 -4
- package/dist/public/{shadow-claw-files-BJSyZ-Bl.js → shadow-claw-files-CG7MqWiV.js} +8 -8
- package/dist/public/{shadow-claw-git-MAjhXRLc.js → shadow-claw-git-DBRPZNav.js} +6 -6
- package/dist/public/{shadow-claw-integrations-82UoFuDR.js → shadow-claw-integrations-BBVnO0Fc.js} +8 -8
- package/dist/public/{shadow-claw-llm-R8j0lwPP.js → shadow-claw-llm-DMvLgKXo.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BzZoz4LX.js → shadow-claw-mcp-remote-Bkx0gsmF.js} +2 -2
- package/dist/public/{shadow-claw-networking-DLEd9cNm.js → shadow-claw-networking-Dd8Rw31D.js} +2 -2
- package/dist/public/{shadow-claw-notifications-1vwR7TbT.js → shadow-claw-notifications-Dbevj-lq.js} +2 -2
- package/dist/public/{shadow-claw-page-header-DMKbkv3s.js → shadow-claw-page-header-BccSHItx.js} +1 -1
- package/dist/public/{shadow-claw-pages-CjyeIV__.js → shadow-claw-pages-3_lQAv0t.js} +4 -3
- package/dist/public/{shadow-claw-settings-BfbT4dBU.js → shadow-claw-settings-t8TIlgrM.js} +5 -5
- package/dist/public/{shadow-claw-storage-C-mWQQML.js → shadow-claw-storage-CfEXoSIE.js} +2 -2
- package/dist/public/{shadow-claw-task-server-D3lHp0Nc.js → shadow-claw-task-server-DxQSsgRZ.js} +2 -2
- package/dist/public/{shadow-claw-tasks-DVVWEm-c.js → shadow-claw-tasks-DNpicQwz.js} +14 -14
- package/dist/public/{shadow-claw-terminal-BwuTRp-O.js → shadow-claw-terminal-DpY6zU_r.js} +1 -1
- package/dist/public/{shadow-claw-toast-ClCwgzFG.js → shadow-claw-toast-BkrQIP-3.js} +1 -1
- package/dist/public/{shadow-claw-tools-zFLk2nbV.js → shadow-claw-tools-WSwWohnk.js} +2 -2
- package/dist/public/{shadow-claw-webvm-qR9X7fg7.js → shadow-claw-webvm-CP6oFjg5.js} +2 -2
- package/dist/public/syncWebMcpRegistration-DOn9gLnD.js +1 -0
- package/dist/public/toast-BXgUfbyh.js +1 -0
- package/dist/public/tools-DvckJZG2.js +1 -0
- package/dist/server.js +188 -188
- package/package.json +3 -1
- package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.stories.ts +1380 -93
- package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.ts +11 -6
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.test.ts +8 -1
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +13 -5
- package/src/components/shadow-claw-pages/utils/buildHtmlPageSrcdoc.ts +13 -5
- package/src/core/control-plane-client.ts +15 -0
- package/src/core/utils/initControlPlane.test.ts +187 -0
- package/src/core/utils/initControlPlane.ts +194 -20
- package/src/security/custom-element-security.test.ts +51 -0
- package/src/security/custom-element-security.ts +33 -15
- package/src/server/control-plane-types.ts +1 -0
- package/src/server/control-plane.test.ts +69 -0
- package/src/server/control-plane.ts +45 -3
- package/src/server/mcp/tools/built-in-tools.ts +80 -5
- package/src/server/mcp/tools/client-tool-relay.ts +183 -26
- package/src/server/mcp/tools/mcp-tools.test.ts +140 -0
- package/src/server/middleware/static-files.test.ts +142 -0
- package/src/server/middleware/static-files.ts +66 -8
- package/src/testing/jest-setup.ts +1 -0
- package/src/worker/utils/handleMessage.ts +4 -1
- package/dist/lib/initControlPlane-CsO4UR6_.js.map +0 -1
- package/dist/lib/readGroupFileBytes-Bve-e5e_.js.map +0 -1
- package/dist/lib/shadow-claw-file-viewer-BfDHHgpA.js.map +0 -1
- package/dist/lib/shadow-claw-pages-D54jF1Qq.js.map +0 -1
- package/dist/lib/trusted-types-CkLDpLiZ.js.map +0 -1
- package/dist/public/custom-element-security-NCqQ5lmC.js +0 -1
- package/dist/public/downloadGroupFile-G0BZQgQg.js +0 -1
- package/dist/public/effect-rHYr4nfu.js +0 -1
- package/dist/public/file-viewer-8PdCURDD.js +0 -1
- package/dist/public/initControlPlane-CcGXax0A.js +0 -1
- package/dist/public/peerjs-BZdxWQFv.js +0 -1
- package/dist/public/syncWebMcpRegistration-DD42YsYV.js +0 -1
- package/dist/public/toast-HAq8XWFj.js +0 -58
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./config-CrHchneq.js";import{n as e}from"./txPromise-EBECky1b.js";import{t}from"./dist-B9m1QM9v.js";import{Zt as n,cn as r,gn as i,nn as a}from"./orchestrator-DHjdLtqa.js";import{t as o}from"./ulid-BY7rQVLN.js";const s={apng:`image/apng`,avif:`image/avif`,bmp:`image/bmp`,css:`text/css`,gif:`image/gif`,htm:`text/html`,html:`text/html`,jpeg:`image/jpeg`,jpg:`image/jpeg`,js:`text/javascript`,json:`application/json`,markdown:`text/markdown`,md:`text/markdown`,mp3:`audio/mpeg`,mp4:`video/mp4`,oga:`audio/ogg`,ogg:`audio/ogg`,ogv:`video/ogg`,pdf:`application/pdf`,png:`image/png`,svg:`image/svg+xml`,txt:`text/plain`,wav:`audio/wav`,webm:`video/webm`,webp:`image/webp`};function c(e){return e.trim().replace(/[\u0000-\u001f\u007f]+/g,``).replace(/[\\/:*?"<>|]+/g,`-`).replace(/\s+/g,` `).replace(/^\.+/,``).trim()||`attachment`}function l(e,t=``){if(t)return t;let n=e.toLowerCase().split(`.`).pop()||``;return s[n]||`application/octet-stream`}function u(e){return e.previewDisposition===`inline`||l(e.fileName,e.mimeType||``)===`image/png`}function d(e,t=``,n=Date.now()){let r=c(e),i=t.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return`attachments/${n}-${i?`${i}-`:``}${r}`}async function f(e,t,n=[]){let i=[];for(let a of n){let n=c(a.fileName||``),o=a.path||d(n,a.id),s=a.source,u=l(n,a.mimeType||``),f=a.size;if(s){let i=await p(s);u=l(n,a.mimeType||i.type),f=typeof f==`number`?f:i.size,await r(e,t,o,i)}i.push(m({...a,fileName:n,mimeType:u,size:f,path:o,previewDisposition:a.previewDisposition||(u===`image/png`?`inline`:`file`)}))}return i}async function p(e){if(e.kind===`local-file`)return e.file;if(e.kind===`inline-text`)return new Blob([e.text],{type:e.mimeType||`text/plain`});let t=await fetch(e.url,{headers:e.headers});if(!t.ok)throw Error(`Attachment download failed: HTTP ${t.status} ${t.statusText}`);return await t.blob()}function m(e){let{source:t,...n}=e;return n}const h=new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_REJECTED`]),g=new Set([`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`]),_={SEND_MESSAGE:`SendMessage`,SEND_STREAMING_MESSAGE:`SendStreamingMessage`,GET_TASK:`GetTask`,CANCEL_TASK:`CancelTask`,GET_AGENT_CARD:`GetAgentCard`},v={EVENT:`agui/event`},y={STATUS_UPDATE:`tasks/statusUpdate`,ARTIFACT_UPDATE:`tasks/artifactUpdate`},b={JOIN:`room/join`,ROSTER:`room/roster`,LEAVE:`room/leave`,MESSAGE:`room/message`,INVITE:`room/invite`,RELAY:`room/relay`,A2UI:`room/a2ui`,A2UI_ACTION:`room/a2ui-action`},x={TASK_NOT_FOUND:-32001,TASK_NOT_CANCELABLE:-32002,PUSH_NOTIFICATION_NOT_SUPPORTED:-32003,UNSUPPORTED_OPERATION:-32004,CONTENT_TYPE_NOT_SUPPORTED:-32005,INVALID_AGENT_RESPONSE:-32006,PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603};function S(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&typeof e.method==`string`}function C(e){return typeof e==`object`&&!!e&&e.jsonrpc===`2.0`&&typeof e.id==`string`&&!(`method`in e)}function w(e){let t={url:`webrtc://${e.peerId}`,protocolBinding:`https://xt-ml.github.io/shadow-claw/bindings/webrtc-datachannel/v1`,protocolVersion:`1.0`},n={streaming:e.streaming??!0,pushNotifications:!1};return{name:e.name,description:e.description??`AI assistant agent (${e.name})`,version:e.version??`1.0.0`,supportedInterfaces:[t],capabilities:n,defaultInputModes:[`text/plain`,`application/json`],defaultOutputModes:[`text/plain`,`application/json`],skills:e.skills??[],iconUrl:e.iconUrl}}function T(){return{jsonrpc:`2.0`,id:o(),method:_.GET_AGENT_CARD}}function E(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function D(e){if(e.error)return console.warn(`GetAgentCard returned error:`,e.error),null;let t=e.result;return!t||typeof t!=`object`||typeof t.name!=`string`||typeof t.version!=`string`?null:t}var O=class{_cards=new Map;clear(){this._cards.clear()}delete(e){this._cards.delete(e)}entries(){return this._cards.entries()}get(e){return this._cards.get(e)}getDisplayName(e){return this._cards.get(e)?.name??e}has(e){return this._cards.has(e)}set(e,t){this._cards.set(e,t)}supportsStreaming(e){return this._cards.get(e)?.capabilities?.streaming??!1}};const k={maxTasks:100,maxHistoryPerTask:50},A=new Map([[`TASK_STATE_SUBMITTED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_REJECTED`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_WORKING`,new Set([`TASK_STATE_COMPLETED`,`TASK_STATE_FAILED`,`TASK_STATE_CANCELED`,`TASK_STATE_INPUT_REQUIRED`,`TASK_STATE_AUTH_REQUIRED`])],[`TASK_STATE_INPUT_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])],[`TASK_STATE_AUTH_REQUIRED`,new Set([`TASK_STATE_WORKING`,`TASK_STATE_CANCELED`,`TASK_STATE_FAILED`])]]);var j=class{_config;_contextActiveTask=new Map;_listeners=new Set;_taskOrder=[];_tasks=new Map;constructor(e){this._config={...k,...e}}addArtifact(e,t,n=!1){let r=this._tasks.get(e);if(!r)return;if(r.artifacts||=[],n){let e=r.artifacts.find(e=>e.artifactId===t.artifactId);e?e.parts.push(...t.parts):r.artifacts.push(t)}else r.artifacts.push(t);let i={taskId:r.id,contextId:r.contextId??``,artifact:t,append:n,lastChunk:!1};this._emit({type:`artifactUpdate`,taskId:r.id,contextId:r.contextId??``,payload:i})}cancelTask(e){let t=this._tasks.get(e);return!t||h.has(t.status.state)?!1:(this._transitionState(t,`TASK_STATE_CANCELED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:`Task canceled by peer request.`}]}),!0)}clear(){this._tasks.clear(),this._taskOrder=[],this._contextActiveTask.clear()}emitRunError(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`RUN_ERROR`,message:t,code:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitRunFinished(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_FINISHED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitRunStarted(e){let t=this._tasks.get(e);if(!t)return;let n={type:`RUN_STARTED`,threadId:t.contextId??t.id,runId:t.id,timestamp:Date.now()};this._emitAGUI(t,n)}emitStateSnapshot(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`STATE_SNAPSHOT`,snapshot:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageContent(e,t,n){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_CONTENT`,messageId:t,delta:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitTextMessageEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TEXT_MESSAGE_END`,messageId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitTextMessageStart(e,t,n=`assistant`){let r=this._tasks.get(e);if(!r)return;let i={type:`TEXT_MESSAGE_START`,messageId:t,role:n,timestamp:Date.now()};this._emitAGUI(r,i)}emitToolCallEnd(e,t){let n=this._tasks.get(e);if(!n)return;let r={type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()};this._emitAGUI(n,r)}emitToolCallStart(e,t,n,r){let i=this._tasks.get(e);if(!i)return;let a={type:`TOOL_CALL_START`,toolCallId:t,toolCallName:n,parentMessageId:r,timestamp:Date.now()};this._emitAGUI(i,a)}getActiveTaskForContext(e){let t=this._contextActiveTask.get(e);if(t)return this._tasks.get(t)}getActiveTasks(){return Array.from(this._tasks.values()).filter(e=>!h.has(e.status.state))}getAllTasks(){return Array.from(this._tasks.values())}getTask(e){return this._tasks.get(e)}handleSendMessage(e){let t=e.message,n=t.contextId??o(),r=t.taskId??this._contextActiveTask.get(n);return r&&this._tasks.has(r)?this._continueTask(r,t):this._createTask(n,t)}markCompleted(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_COMPLETED`,t)}markFailed(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_FAILED`,{messageId:o(),role:`ROLE_AGENT`,parts:[{text:t}]})}markInputRequired(e,t){let n=this._tasks.get(e);n&&this._transitionState(n,`TASK_STATE_INPUT_REQUIRED`,t)}markWorking(e){let t=this._tasks.get(e);t&&this._transitionState(t,`TASK_STATE_WORKING`)}off(e){this._listeners.delete(e)}on(e){this._listeners.add(e)}_addTask(e){for(this._tasks.set(e.id,e),this._taskOrder.push(e.id);this._taskOrder.length>this._config.maxTasks;){let e=this._taskOrder.shift(),t=this._tasks.get(e);if(t&&h.has(t.status.state))this._tasks.delete(e),t.contextId&&this._contextActiveTask.delete(t.contextId);else{this._taskOrder.unshift(e);break}}}_continueTask(e,t){let n=this._tasks.get(e);return g.has(n.status.state)&&this._transitionState(n,`TASK_STATE_WORKING`),n.history||=[],n.history.push(t),n.history.length>this._config.maxHistoryPerTask&&(n.history=n.history.slice(-this._config.maxHistoryPerTask)),this._touchTask(e),{task:n}}_createTask(e,t){let n=o(),r={id:n,contextId:e,status:{state:`TASK_STATE_SUBMITTED`,timestamp:new Date().toISOString()},history:[t]};return this._addTask(r),this._contextActiveTask.set(e,n),this._emitStatusUpdate(r),{task:r}}_emit(e){for(let t of this._listeners)try{t(e)}catch(e){console.error(`PeerTaskManager: listener error`,e)}}_emitAGUI(e,t){this._emit({type:`aguiEvent`,taskId:e.id,contextId:e.contextId??``,payload:t})}_emitStatusUpdate(e){let t={taskId:e.id,contextId:e.contextId??``,status:e.status};this._emit({type:`statusUpdate`,taskId:e.id,contextId:e.contextId??``,payload:t})}_touchTask(e){let t=this._taskOrder.indexOf(e);t!==-1&&(this._taskOrder.splice(t,1),this._taskOrder.push(e))}_transitionState(e,t,n){let r=e.status.state,i=A.get(r);if(i&&!i.has(t)){console.warn(`PeerTaskManager: invalid transition ${r} → ${t} for task ${e.id}`);return}if(h.has(r)){console.warn(`PeerTaskManager: task ${e.id} is in terminal state ${r}, cannot transition`);return}e.status={state:t,message:n,timestamp:new Date().toISOString()},h.has(t)&&e.contextId&&this._contextActiveTask.get(e.contextId)===e.id&&this._contextActiveTask.delete(e.contextId),this._emitStatusUpdate(e)}};const M=new t.State(null);var N=class r{static _RECONNECT_BASE_MS=1e3;static _RECONNECT_MAX_MS=6e4;connectedPeersSignal=new t.State([]);connections=new Map;messageCallback=null;myPeerId=``;peerCards=new O;running=!1;serverConfig={};transferProgressSignal=M;trustedPeerIds=new Set;type=`peerjs`;typingCallback=null;_inboundRemap=new Map;_localCard=null;_onTaskCompleteCallback=null;peer=null;_pendingInboundFile=null;_pendingRequests=new Map;_reconnectAttempts=0;_reconnectTimer=null;_roomNotificationHandler=null;_taskManagers=new Map;constructor(){typeof globalThis.addEventListener==`function`&&globalThis.addEventListener(`peerjs-dc-handle-chunk`,e=>{if(e?.detail?.chunkInfo){let{count:t,total:n}=e.detail.chunkInfo,r=t+1;M.set({count:r,total:n,direction:`receive`}),r>=n&&setTimeout(()=>M.set(null),1500)}})}completeActiveTask(e){let t=e.replace(/^peer:/,``),n=this._taskManagers.get(t);if(!n)return!1;let r=n.getActiveTasks();if(r.length===0)return!1;let i=r[r.length-1];return n.markWorking(i.id),n.markCompleted(i.id),!0}configure(e,t,n={}){this.myPeerId=e.trim(),this.trustedPeerIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.serverConfig=n}connectPeer(e){this._getOrOpenConnection(e)}getTaskManager(e){let t=this._taskManagers.get(e);return t||(t=new j,this._taskManagers.set(e,t),t.on(t=>{this._forwardTaskEvent(e,t)})),t}isConfigured(){return this.myPeerId.length>0}isPeerConnected(e){let t=this.connections.get(e);return!!t&&!!t.open}onMessage(e){this.messageCallback=e}onTaskComplete(e){this._onTaskCompleteCallback=e}onTyping(e){this.typingCallback=e}sendRoomNotification(e,t){let n=this._getOrOpenConnection(e);if(!n)return!1;if(n.open)try{return n.send(t),!0}catch(t){return console.error(`PeerJsChannel: failed to send room notification to ${e}:`,t),!1}return this._waitForOpen(n).then(()=>{try{n.send(t)}catch(t){console.error(`PeerJsChannel: failed to flush room notification to ${e}:`,t)}}).catch(()=>{}),!0}setRoomNotificationHandler(e){this._roomNotificationHandler=e}setTyping(e,t){let n=e.replace(/^peer:/,``),r=this.connections.get(n);if(r)try{r.send({type:`typing`,typing:t})}catch{}}start(){!this.isConfigured()||this.running||(this.running=!0,this._localCard=w({peerId:this.myPeerId,name:this.myPeerId,description:`ShadowClaw AI assistant`,streaming:!0}),this._initPeer())}stop(){if(this.running=!1,this._reconnectTimer!==null&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this.connections.forEach(e=>{try{e.close()}catch{}}),this.connections.clear(),this.peerCards.clear(),this._taskManagers.clear(),this._pendingRequests.forEach(({timer:e})=>clearTimeout(e)),this._pendingRequests.clear(),this._updateConnectedPeersSignal(),this.peer){try{this.peer.destroy()}catch{}this.peer=null}}async send(t,n,r){let a=t.replace(/^peer:/,``),s=this._getOrOpenConnection(a);if(!s){console.warn(`PeerJsChannel: no connection available for ${a}`);return}try{await this._waitForOpen(s);let{attachments:a}=P(n),c=[...(r||[]).filter(e=>!!e.path),...a.map(e=>({path:e.path,mimeType:`application/octet-stream`}))],l=new Map,u=[];try{let n=await e();for(let e of c)if(e.path)try{let r=await i(n,t,e.path),a=e.path;l.has(e.path)||l.set(e.path,a);let o=e.mimeType||`application/octet-stream`;s.send({type:`__file_header`,name:a,mimeType:o,size:r.length});let c=this._trackSendProgress(s,r.length);s.send(r.buffer),await c,u.push({kind:`file`,name:a,mimeType:o,size:r.length})}catch(t){console.warn(`PeerJsChannel: failed to process file ${e.path}:`,t)}}catch(e){console.error(`PeerJsChannel: failed to access DB`,e)}let d=n;for(let[e,t]of l){let n=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);d=d.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${t})`)}let f=[...u,{kind:`text`,text:d}],p=o(),m={jsonrpc:`2.0`,id:p,method:_.SEND_MESSAGE,params:{message:{messageId:o(),role:`ROLE_AGENT`,parts:f}}};s.send(m),this._registerPendingRequest(p,e=>{})}catch(e){console.error(`PeerJsChannel: send failed for ${a}:`,e),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:a,error:e instanceof Error?e.message:String(e)}}))}}async sendA2UI(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UI: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`agent`,parts:[{kind:`a2ui`,envelope:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UI: failed for ${n}:`,e)}}async sendA2UIAction(e,t){let n=e.replace(/^peer:/,``),r=this._getOrOpenConnection(n);if(!r){console.warn(`PeerJsChannel.sendA2UIAction: no connection available for ${n}`);return}try{await this._waitForOpen(r);let e={jsonrpc:`2.0`,method:`message/send`,id:o(),params:{message:{role:`user`,parts:[{kind:`a2ui-action`,action:t}]}}};r.send(e)}catch(e){console.error(`PeerJsChannel.sendA2UIAction: failed for ${n}:`,e)}}_exchangeAgentCards(e,t){if(!this._localCard)return;let n=T();t.send(n),this._registerPendingRequest(n.id,t=>{let n=D(t);n&&(this.peerCards.set(e,n),console.log(`PeerJsChannel: received AgentCard from ${e}: "${n.name}"`))})}_forwardTaskEvent(e,t){let n=this.connections.get(e);if(!n)return;let r;switch(t.type){case`statusUpdate`:r=y.STATUS_UPDATE;break;case`artifactUpdate`:r=y.ARTIFACT_UPDATE;break;case`aguiEvent`:r=v.EVENT;break;default:return}let i={jsonrpc:`2.0`,method:r,params:t.payload};try{n.send(i)}catch(n){console.error(`PeerJsChannel: failed to forward ${t.type} to ${e}:`,n)}}_getOrOpenConnection(e){let t=this.connections.get(e);if(t)return t;if(!this.peer)return null;try{let t=this.peer.connect(e,{reliable:!0,serialization:`binary`});return t?(this._handleIncomingConnection(t),t):null}catch(t){return console.error(`PeerJsChannel: failed to connect to ${e}:`,t),null}}_handleA2ACancelTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in CancelTask params`});return}let r=this._taskManagers.get(e);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}if(!r.cancelTask(n.taskId)){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_CANCELABLE,message:`Task not cancelable: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e=r.getTask(n.taskId),a={jsonrpc:`2.0`,id:t.id,result:{task:e}};i.send(a)}}_handleA2AGetTask(e,t){let n=t.params;if(!n?.taskId){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing taskId in GetTask params`});return}let r=this._taskManagers.get(e)?.getTask(n.taskId);if(!r){this._sendJsonRpcError(e,t.id,{code:x.TASK_NOT_FOUND,message:`Task not found: ${n.taskId}`});return}let i=this.connections.get(e);if(i){let e={jsonrpc:`2.0`,id:t.id,result:{task:r}};i.send(e)}}_handleA2AJsonRpc(e,t){if(C(t)){let e=this._pendingRequests.get(t.id);e&&(clearTimeout(e.timer),this._pendingRequests.delete(t.id),e.resolve(t));return}let n=t.method;if(n){if(n.startsWith(`room/`)){this._roomNotificationHandler?.(e,n,t.params);return}if(S(t)){switch(n){case _.GET_AGENT_CARD:this._handleGetAgentCard(e,t);break;case _.SEND_MESSAGE:this._handleA2ASendMessage(e,t);break;case _.CANCEL_TASK:this._handleA2ACancelTask(e,t);break;case _.GET_TASK:this._handleA2AGetTask(e,t);break;default:if(n===`message/send`){let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}else this._sendJsonRpcError(e,t.id,{code:x.METHOD_NOT_FOUND,message:`Method not found: ${n}`})}return}switch(n){case v.EVENT:this._handleAGUIEventNotification(e,t.params);break;case y.STATUS_UPDATE:this._handleTaskStatusNotification(e,t.params);break;case y.ARTIFACT_UPDATE:break;case`message/send`:{let n=t.params;n?.message?.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts).catch(e=>console.error(`PeerJsChannel: failed to process inbound A2A envelope`,e))}break}}}_handleA2ASendMessage(e,t){let n=t.params;if(!n?.message){this._sendJsonRpcError(e,t.id,{code:x.INVALID_PARAMS,message:`Missing message in SendMessage params`});return}let r=this._taskManagers.get(e);r||(r=new j,this._taskManagers.set(e,r),r.on(t=>{this._forwardTaskEvent(e,t)}));let i=r.handleSendMessage(n),a=this.connections.get(e);if(a){let e={jsonrpc:`2.0`,id:t.id,result:i};a.send(e)}n.message.parts&&Array.isArray(n.message.parts)&&this._processInboundA2AEnvelope(e,n.message.parts,i.task?.id,i.task?.contextId).catch(e=>console.error(`PeerJsChannel: failed to process A2A SendMessage`,e))}_handleAGUIEventNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{remotePeerId:e,event:n}}))}_handleGetAgentCard(e,t){if(!this._localCard){this._sendJsonRpcError(e,t.id,{code:x.INTERNAL_ERROR,message:`Agent card not available`});return}let n=E(t.id,this._localCard),r=this.connections.get(e);r&&r.send(n)}_handleInboundData(t,r){if(r instanceof ArrayBuffer||r instanceof Uint8Array){if(this._pendingInboundFile){let i=this._pendingInboundFile.name,o=`peer:${t}`,s=new Uint8Array(r);e().then(async e=>{let t=i,r=1;for(;await a(e,o,t);){let e=i.lastIndexOf(`.`);if(e>0&&e<i.length-1){let n=i.substring(0,e),a=i.substring(e);t=`${n} (${r})${a}`}else t=`${i} (${r})`;r++}t!==i&&this._inboundRemap.set(i,t),n(e,o,t,s).catch(e=>{console.error(`PeerJsChannel: failed to write inbound file bytes`,e)})}),this._pendingInboundFile=null}return}if(!r||typeof r!=`object`)return;let i=r;if(i.type===`__file_header`){this._pendingInboundFile={name:i.name,mimeType:i.mimeType,size:i.size};return}if(i.type===`typing`){this.typingCallback?.(`peer:${t}`,!!i.typing);return}if(i.type===`chat`){let e=typeof i.text==`string`?i.text.trim():``;e&&this.messageCallback?.({id:o(),groupId:`peer:${t}`,sender:t,content:e,timestamp:Date.now(),channel:`peerjs`});return}if(i.jsonrpc===`2.0`){this._handleA2AJsonRpc(t,i);return}if(i.type===`command:execute`){let e=i.payload||{},n=e.action||``,r=e.args||{},a=e.commandId||``;import(`./initControlPlane-BN9cWyO0.js`).then(({executeClientControlCommand:e})=>e(n,r)).then(e=>{let r=this.connections.get(t);if(r){let t=!!e?.error;r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!t,data:e,...t?{error:e.error}:{}}})}}).catch(e=>{let r=this.connections.get(t);r&&r.send({id:o(),type:`command:result`,payload:{commandId:a,action:n,success:!1,error:e?.message||String(e)}})});return}}_isTrustedPeer(e){if(this.trustedPeerIds.size===0||this.trustedPeerIds.has(e))return!0;for(let t of this.trustedPeerIds){let n=t.trim();if(n.endsWith(`*`)&&e.startsWith(n.slice(0,-1))||n===`cli`&&e.startsWith(`cli-`))return!0}return!1}_handleIncomingConnection(e){let t=e.peer;if(!this._isTrustedPeer(t)){console.warn(`PeerJsChannel: rejecting connection from untrusted peer: ${t}`);try{e.close()}catch{}return}this.connections.set(t,e),this._updateConnectedPeersSignal(),e.on(`open`,()=>{console.log(`PeerJsChannel: connection opened with ${t}`),this._exchangeAgentCards(t,e)}),e.on(`data`,e=>{this._handleInboundData(t,e)}),e.on(`close`,()=>{console.log(`PeerJsChannel: connection closed with ${t}`),this.connections.delete(t),this.peerCards.delete(t),this._taskManagers.delete(t),this._updateConnectedPeersSignal()}),e.on(`error`,e=>{console.error(`PeerJsChannel: connection error with ${t}:`,e),this.connections.delete(t),this._updateConnectedPeersSignal(),window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{remotePeerId:t,error:e.message}}))}),e.on(`iceStateChanged`,e=>{(e===`failed`||e===`disconnected`||e===`closed`)&&(console.warn(`PeerJsChannel: ICE state changed to ${e} for ${t}`),this.connections.delete(t),this._updateConnectedPeersSignal())})}_handleTaskStatusNotification(e,t){if(!t||typeof t!=`object`)return;let n=t;if(n.status?.state&&h.has(n.status.state)){let t=`peer:${e}`;this._onTaskCompleteCallback?.(t)}window.dispatchEvent(new CustomEvent(`shadow-claw-task-status`,{detail:{remotePeerId:e,...n}}))}async _initPeer(){let{Peer:e}=await import(`./bundler-Ca-Xwln8.js`),t={},n=this.serverConfig.host??`0.peerjs.com`,r=this.serverConfig.port??443,i=this.serverConfig.path??`/`,a=this.serverConfig.secure??!0;t.host=n,t.port=r,t.path=i,t.secure=a,t.debug=3,t.config={iceServers:this.serverConfig.iceServers??[{urls:`stun:stun.l.google.com:19302`},{urls:`stun:stun1.l.google.com:19302`}]},this.peer=new e(this.myPeerId,t),this.peer.on(`open`,e=>{console.log(`PeerJsChannel: connected to signaling server, peer ID: ${e}`),this._reconnectAttempts=0}),this.peer.on(`connection`,e=>{this._handleIncomingConnection(e)}),this.peer.on(`error`,e=>{console.error(`PeerJsChannel: peer error [${e.type}]:`,e.message),(e.type===`peer-unavailable`||e.type===`unavailable-id`)&&window.dispatchEvent(new CustomEvent(`shadow-claw-peer-error`,{detail:{error:e.message}})),!(e.type===`peer-unavailable`||e.type===`network`||e.type===`disconnected`)&&e.type===`unavailable-id`&&console.warn(`PeerJsChannel: peer ID is already in use. Stop the channel and reconfigure.`)}),this.peer.on(`disconnected`,()=>{this.running&&this._scheduleReconnect()}),this.peer.on(`close`,()=>{console.log(`PeerJsChannel: peer closed`)})}_registerPendingRequest(e,t){let n=setTimeout(()=>{this._pendingRequests.delete(e),console.warn(`PeerJsChannel: JSON-RPC request ${e} timed out (10s)`)},1e4);this._pendingRequests.set(e,{resolve:t,timer:n})}_scheduleReconnect(){if(this._reconnectTimer!==null)return;let e=Math.min(r._RECONNECT_BASE_MS*2**this._reconnectAttempts,r._RECONNECT_MAX_MS);this._reconnectAttempts++,console.log(`PeerJsChannel: disconnected from signaling server, reconnecting in ${(e/1e3).toFixed(1)}s (attempt ${this._reconnectAttempts})`),this._reconnectTimer=setTimeout(()=>{if(this._reconnectTimer=null,this.running)try{this.peer?.reconnect?.()}catch{this._scheduleReconnect()}},e)}_sendJsonRpcError(e,t,n){let r=this.connections.get(e);if(!r)return;let i={jsonrpc:`2.0`,id:t,error:n};try{r.send(i)}catch{}}_trackSendProgress(e,t){return new Promise(n=>{let r=e._dc;if(!r||t===0){this.transferProgressSignal.set(null),n();return}this.transferProgressSignal.set({count:0,total:t,direction:`send`});let i=setInterval(()=>{let e=r.bufferedAmount,a=Math.max(0,t-e);this.transferProgressSignal.set({count:a,total:t,direction:`send`}),e===0&&(clearInterval(i),this.transferProgressSignal.set({count:t,total:t,direction:`send`}),setTimeout(()=>this.transferProgressSignal.set(null),1500),n())},80)})}_updateConnectedPeersSignal(){this.connectedPeersSignal.set(Array.from(this.connections.keys()))}_waitForOpen(e){return e.open?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>{n(Error(`Connection open timeout (5s)`))},5e3);e.on(`open`,()=>{clearTimeout(r),t()}),e.on(`error`,e=>{clearTimeout(r),n(e)})})}async _processInboundA2AEnvelope(e,t,n,r){let i=`peer:${e}`,a=``,s=[],c=[],l;for(let e of t)if(e.kind===`text`&&typeof e.text==`string`)a+=e.text;else if(e.kind===`file`){let t=e.name||`attachment`;if(this._inboundRemap.has(t)){let e=this._inboundRemap.get(t),n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);a=a.replace(RegExp(`(!?\\[.*?\\])\\(${n}\\)`,`g`),`$1(${e})`),this._inboundRemap.delete(t),t=e}let n=t.split(`/`).pop()||`attachment`;s.push({fileName:n,mimeType:e.mimeType,path:t,size:e.size||0})}else e.kind===`a2ui`&&e.envelope?c.push(e.envelope):e.kind===`a2ui-action`&&e.action&&(l=e.action);a=a.trim(),!(!a&&s.length===0&&c.length===0&&!l)&&this.messageCallback?.({id:o(),groupId:i,sender:e,content:a,timestamp:Date.now(),channel:`peerjs`,attachments:s.length>0?s:void 0,a2uiEnvelopes:c.length>0?c:void 0,a2uiAction:l,taskId:n,contextId:r})}};function P(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=F((r[2]||``).trim());n&&t.push({alt:e,path:n})}return{remainingText:i,attachments:t}}function F(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}export{f as a,l as i,M as n,u as o,b as r,N as t};
|
|
@@ -36,4 +36,4 @@ const shadowClawImportScripts = (...urls) => {
|
|
|
36
36
|
|
|
37
37
|
shadowClawNativeImportScripts(...urls.map((url) => shadowClawServiceWorkerTrustedTypesPolicy.createScriptURL(url)));
|
|
38
38
|
};
|
|
39
|
-
if(!self.define){let e,a={};const s=(s,c)=>(s=new URL(s+".js",c).href,a[s]||new Promise(a=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=a,document.head.appendChild(e)}else e=s,shadowClawImportScripts(s),a()}).then(()=>{let e=a[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(c,o)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(a[i])return;let d={};const r=e=>s(e,i),n={module:{uri:i},exports:d,require:r};a[i]=Promise.all(c.map(e=>n[e]||r(e))).then(e=>(o(...e),d))}}define(["./workbox-92eae37e"],function(e){"use strict";shadowClawImportScripts("service-worker/fetch-proxy.js","service-worker/push-handler.js","service-worker/share-target.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.css",revision:"8fe91c336a711a475333ccc48e30cf35"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"538a702063eb88dadccbccf46c51da92"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"8ad238a0442ad57c12fe1c2094215cef"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"aa05ff06a2da5b565fc37b8abd25caf9"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"63f9489f50eeea4ddcfdfc2f8fab11d4"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"81482994292b2b187885d08316ef8a81"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"d2ced2be40c9003589770a31aab45be6"},{url:"404.html",revision:"465b683b06ff76a1a6d2d1b30658bfc9"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"0513706596ace59be0264ddd5a75f9df"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"d2ced2be40c9003589770a31aab45be6"},{url:"main/memory/index.html",revision:"5cc85326adc6e39dca0625f77c378403"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"8dd049c4a085a0e8107affb74cbfd495"},{url:"docs/publishing/index.html",revision:"b4c4268ff866404c23c7827887aa2230"},{url:"docs/example/article/index.html",revision:"0556051dbb7dc7c1f6e33912d91bab41"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"ded34716fde770c62d98fc55ea3a90a3"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"34ce16a00090f278b14be7a73e6915a2"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"f06a2944fa75b8325f8a226c5429cb9a"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"b20f7303c022e66c6e3345ab32cafb20"},{url:"manifest.json",revision:"37fbcc968787b25508d134f0e9a450ec"},{url:"writer-DxE1imv0.js",revision:"9060e6fd0f833d96fcdfdfead8a17a53"},{url:"writer-CD9oN2pq.js",revision:"7e3e5dbe762d5517a7bba9fb52f899e5"},{url:"webmcp-DAjmliCx.js",revision:"b06a8749a83176a7c241f2a63f60dc15"},{url:"webllm-CHN5H-Sy.js",revision:"66a060e91915d6e1a701d9e3d0724a87"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-EBECky1b.js",revision:"68ed6c191afed31ac1c998e0b8f2b508"},{url:"translator-DEQXb7ZL.js",revision:"4cad7698da803b6aea92decde28bb975"},{url:"translator-B-3qYqN5.js",revision:"5e61b3f704ed7e0f77a748b9bfec1bd5"},{url:"transformers-js.worker.js",revision:"91bfe6c1d35c6c130eef161b6778fd56"},{url:"transformers-D6p2onvB.js",revision:"aff41eecf51876bbd7f8dda3134de021"},{url:"transformers-BhQMWQG5.js",revision:"2fccf1f04a71682215867ed1900ab0d0"},{url:"tools-COduyYJ0.js",revision:"22f40c43eee6d53e014bea52a15fdbdd"},{url:"tools-C8x3nmo4.js",revision:"b809a169e2d8648e2ffc091c1e08be91"},{url:"toast-HAq8XWFj.js",revision:"69e5fb7ae2f631b75743b0b942012865"},{url:"theme-init.js",revision:"0940b3e69e4fa4de11c94907f3372daf"},{url:"syncWebMcpRegistration-DD42YsYV.js",revision:"cb58bc469142e848ec129bd86e11a94b"},{url:"summarizer-VJNr-7xG.js",revision:"a0147a995a2ff494830f8c5aa3757cb7"},{url:"summarizer-BV_Oq6Xe.js",revision:"92698a77c4846bf98e6a2488de9a4dc4"},{url:"shadow-claw-webvm-qR9X7fg7.js",revision:"d2971f1b7c20dc45ecc2b402ea6d5983"},{url:"shadow-claw-tools-zFLk2nbV.js",revision:"1115d6268f1583c482934570cfa2f010"},{url:"shadow-claw-toast-ClCwgzFG.js",revision:"2149b2e862080db050b2cfa6f776880b"},{url:"shadow-claw-terminal-BwuTRp-O.js",revision:"0cadedd77bf634daeac834209cc36651"},{url:"shadow-claw-tasks-DVVWEm-c.js",revision:"f6fd34345ef08fae97e721637c455b8a"},{url:"shadow-claw-task-server-D3lHp0Nc.js",revision:"ee94980820c3e817db5d87afa54fd275"},{url:"shadow-claw-storage-C-mWQQML.js",revision:"e00872094914d72aaa95f61a5d97b992"},{url:"shadow-claw-settings-BfbT4dBU.js",revision:"2e980cd2695ba071a5582f86101f863d"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-CjyeIV__.js",revision:"f628aa1844cb822c022a662fc2ceb7db"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-DMKbkv3s.js",revision:"157d0e0570f901d033aed031bb6d760d"},{url:"shadow-claw-notifications-1vwR7TbT.js",revision:"6da1302594e176dba7fc61ef2a9caa80"},{url:"shadow-claw-networking-DLEd9cNm.js",revision:"ae8ceb8e6e9a652197cd740b82512299"},{url:"shadow-claw-mcp-remote-BzZoz4LX.js",revision:"bac9252725b78843163aa61839036427"},{url:"shadow-claw-llm-R8j0lwPP.js",revision:"b29dc966aa64c53e0d8165847a8c8496"},{url:"shadow-claw-integrations-82UoFuDR.js",revision:"3fac72f22ea77f79779f263e37158dab"},{url:"shadow-claw-git-MAjhXRLc.js",revision:"ad6be1100c85d75e23f68c4a7890e26b"},{url:"shadow-claw-files-BJSyZ-Bl.js",revision:"a375824ea67f1442bfdd7fa61af1bcdb"},{url:"shadow-claw-file-viewer-BR__1z9S.js",revision:"8c29cdf628b0438671db8be8066680b2"},{url:"shadow-claw-empty-state-Bl52dGQ0.js",revision:"d66d49a9a4140672dc55092a15a1d09a"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-DDtg3BEZ.js",revision:"d043c2fcdc47994475c36fbf01da0f1e"},{url:"shadow-claw-control-plane-D1OwlQI_.js",revision:"3e076a3484ab83bd9a7018f28d4ef4e2"},{url:"shadow-claw-chat-Cu2keU2I.js",revision:"9d723369a9ddb58610ad9644b19a4ef5"},{url:"shadow-claw-channels-3K62sU5f.js",revision:"649de1a2aa2b8a08b22e62abcfd489c5"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-CJvYC4li.js",revision:"e4ccd896f14f6a10a94d9be8957bd04f"},{url:"shadow-claw-CaoKmIIB.js",revision:"71648e955b987ac26de6774224035205"},{url:"setConfig-DFMYnYLE.js",revision:"d56a0db494ca06686fbc49c0006b6627"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-j6D9LDER.js",revision:"2a6e7c883707dcfc9df9d522525267e8"},{url:"rewriter-DL7u2Z8W.js",revision:"a5fee6aa5d8dcac4451c455834e278bc"},{url:"push-client-D0lkwrK0.js",revision:"c518bb943270e966d939dc085a602156"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-Dl1kbJhR.js",revision:"842d74a9e41add1c72ac3ccebf435c0b"},{url:"prompt-api-polyfill-BBORqGSw.js",revision:"04f2a69a08477549196c9e6ad70efabe"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-BZdxWQFv.js",revision:"e68be7de71f16a95e92c2417b1510fb6"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-D-xlXG92.js",revision:"dcb7822cac4d5c69299f0b7f1aacca00"},{url:"orchestrator-Cl95w2vb.js",revision:"d00930d17e1e46d2d9ca27c463233de8"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-Bpd71Oja.js",revision:"61d214a51390cc136e218582bf6fc62a"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-C0KvLNUp.js",revision:"c4a372382d9fe9bd4fb43dc2f510ecf4"},{url:"mcp-reconnect-9emsqGRe.js",revision:"6f24866cb60c4796afbbbccaaba0195c"},{url:"markdown-1I3O6Mmd.js",revision:"1c63c125c525af034f7ed8097f80a098"},{url:"language-detector-IQm4FUqH.js",revision:"f62880138d8955b3699f8d051ff524fe"},{url:"language-detector-BRKrlra0.js",revision:"0c2ed270708b22bf374afe4e8697548d"},{url:"initControlPlane-CcGXax0A.js",revision:"05de156fda44e569f12d743d3654914d"},{url:"initChatSplitResize-CzV2E7Ul.js",revision:"d71f1f7a74c4b42b91afc88cabe008a3"},{url:"index.js",revision:"0fb7328826340d556388510189b9a639"},{url:"iframe-storage-proxy-B9Zt-vJ2.js",revision:"2c6289506d6c55854d14f4fa5a5ecddb"},{url:"iframe-sanitizer-y2Z1pPwY.js",revision:"c7c68ab0162c4bd3907602b25273dcd1"},{url:"git-CkhCJonj.js",revision:"fc1dfbe2ca654d4cc7feb7a949db656d"},{url:"git-7Vq_SJSp.js",revision:"efb8740c40346fc58b5f6dd5f543b13a"},{url:"getGroupDir-P1h9wl6S.js",revision:"a2c16cde82f4c9009795ad0a583d36da"},{url:"getConfig-D89uJgo5.js",revision:"8dee86ba2f1a33b29fa5240540c047ad"},{url:"getAllTasks-vpBlgGsc.js",revision:"08c22a4197deb6e39e6ec3fce337a5a4"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-OSDX3viP.js",revision:"b48e4e86381947b06c187bf821c5e42f"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-8PdCURDD.js",revision:"7a6e2a8bd8f217af2b60d9ae1cbbc48c"},{url:"effect-rHYr4nfu.js",revision:"94ddf2708b01e2d02c0eec6f7e4a0c75"},{url:"e2e-bridge-CHARpbpW.js",revision:"16c0c310773a14a5e7ad8656bf7d7c69"},{url:"downloadGroupFile-G0BZQgQg.js",revision:"2017a1ea7b4b9a319af37d064a3045bf"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-NCqQ5lmC.js",revision:"380a61d521e856e6ea1fb1a17fa5ddcc"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-7AKqaY3G.js",revision:"14a4da9d0dc8fb65f4cf9608e7782970"},{url:"connections-DvbgdkaB.js",revision:"7ec97858ab1c56048b4636279870db46"},{url:"configurePeerJs-COcwE0E7.js",revision:"a28a185b72eefcc09554cd9a02a09892"},{url:"config-value-oBfKgLT4.js",revision:"c93acb2ff0551e778e8dcd7d4fc79d1c"},{url:"config-CrHchneq.js",revision:"bec45eb2b69a56deb4cfb16e8b3f857e"},{url:"bundler-Ca-Xwln8.js",revision:"e5384a2db390254a5a4664ae2972163e"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DDfHUUIS.js",revision:"4fe8a137da9d73cb45ef71873c8c36b6"},{url:"base-task-model-CYkpwnvU-CLmOqgI_.js",revision:"c5cd6a3e5e1cf4770aa169b54f550fc3"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-Bs-riIvr.js",revision:"62ddbf31db8629c8325b7389646394a3"},{url:"agent.worker.js",revision:"7600a6c175fbbdc21f00953cc0927cf1"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
|
|
39
|
+
if(!self.define){let e,a={};const s=(s,c)=>(s=new URL(s+".js",c).href,a[s]||new Promise(a=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=a,document.head.appendChild(e)}else e=s,shadowClawImportScripts(s),a()}).then(()=>{let e=a[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e}));self.define=(c,o)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(a[i])return;let r={};const d=e=>s(e,i),n={module:{uri:i},exports:r,require:d};a[i]=Promise.all(c.map(e=>n[e]||d(e))).then(e=>(o(...e),r))}}define(["./workbox-92eae37e"],function(e){"use strict";shadowClawImportScripts("service-worker/fetch-proxy.js","service-worker/push-handler.js","service-worker/share-target.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.css",revision:"8fe91c336a711a475333ccc48e30cf35"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.css",revision:"84ea62c12532f5339a455f7da8e47048"},{url:"components/shadow-claw-tools/shadow-claw-tools.css",revision:"538a702063eb88dadccbccf46c51da92"},{url:"components/shadow-claw-toast/shadow-claw-toast.css",revision:"4ce2dcc1c81363147fa0a5e79474aed3"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.css",revision:"34974a6d9a97832231fd931006a071d1"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.css",revision:"520159be0d18dc3caad54e9e1dc1eb1b"},{url:"components/shadow-claw-settings/shadow-claw-settings.css",revision:"ad9bba0bb9beb555b3b43a90e590dfa1"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.css",revision:"4c02b802e45b7e2377ecd915909ddf1c"},{url:"components/shadow-claw-pages/shadow-claw-pages.css",revision:"8ad238a0442ad57c12fe1c2094215cef"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.css",revision:"5af6ca91ae275bdbb7f0f6bc470c83df"},{url:"components/shadow-claw-files/shadow-claw-files.css",revision:"aa05ff06a2da5b565fc37b8abd25caf9"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.css",revision:"63f9489f50eeea4ddcfdfc2f8fab11d4"},{url:"components/shadow-claw-file-viewer/highlightjs-atom-one-dark.min.css",revision:"70ec8740925f3c6615ec654090b9e2ce"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.css",revision:"a941256c23d142754ea3c7e9b416f784"},{url:"components/shadow-claw-chat/shadow-claw-chat.css",revision:"b6c9d27682fce5e686696943ae1bf9b8"},{url:"components/shadow-claw-channels/shadow-claw-channels.css",revision:"431a76502c7ba3f8c83bb572f0afd71f"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.css",revision:"d05fdf188a8295021735e601bcc5b743"},{url:"components/shadow-claw/shadow-claw.css",revision:"81482994292b2b187885d08316ef8a81"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.css",revision:"f8167aff26a24125d7b9b23aee8f728a"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.css",revision:"f6e534a6023b143270e772c7ee6119a0"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.css",revision:"dd8009443e450b709657368a19974f09"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.css",revision:"81e589816bc4fd4da2c7d688b3db5ba9"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.css",revision:"32804d3923655ae18f137db78bfaccfa"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.css",revision:"f186e80f555986dc26ab392cf7c29e92"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.css",revision:"c9be041c099a1d4733ed14a87ee37bfa"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.css",revision:"8703cbfc0af3167237d71d7e3f5da4f5"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.css",revision:"d7b9e45ff13eecf7c6571ed755dc8358"},{url:"components/settings/shadow-claw-git/shadow-claw-git.css",revision:"eab353bd20d322d0c87a7a53e639c2a6"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.css",revision:"2cc9185fc887fb10055d9edd405bd59c"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.css",revision:"c6da4c8aa3ad1b6359e6cb7af9d5f267"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.css",revision:"f9a43c87ce69b7be36ad18100311c14e"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.css",revision:"b6bbdcee11cf8fd83c411f6734e10da8"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.css",revision:"65f56fa4a760d0207440697739be250a"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.css",revision:"192878cb48a9bb8cf206cea1672ec390"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.css",revision:"001dbd8ee37eccb2b865795cb75b32e8"},{url:"components/common/shadow-claw-card/shadow-claw-card.css",revision:"ea9fb2a5ee318103b19fdf5df14dd2ea"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.css",revision:"330a4d63944580d4dc150d7c08379f26"},{url:"bindings/webrtc-datachannel/v1/index.css",revision:"8c0f3bcf62cbe9579d136150c5288ba8"},{url:"index.html",revision:"0a047bb64b9e5f51e2d6f59f0955494c"},{url:"404.html",revision:"465b683b06ff76a1a6d2d1b30658bfc9"},{url:"subsystems/channels/bindings/webrtc-datachannel/v1/index.html",revision:"d6e785383b73b911b8593265c36eaecd"},{url:"static-main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"static-main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"share/share-target.html",revision:"0513706596ace59be0264ddd5a75f9df"},{url:"pages/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"pages/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"main/index.html",revision:"0a047bb64b9e5f51e2d6f59f0955494c"},{url:"main/memory/index.html",revision:"7165c789b3a12aab99676193c9b169d5"},{url:"files/main/index.html",revision:"38e716481eecfdb88c3349562d815f10"},{url:"files/main/~/docs/example/article.html",revision:"cb73f16b2098cf2e77db992b6b286805"},{url:"docs/skill-creator/index.html",revision:"6fac87989faf13dbf54894b0ecc5c0f3"},{url:"docs/publishing/index.html",revision:"64910138f53d9eb594800e7e98dab195"},{url:"docs/example/article/index.html",revision:"61b864fdbeed41e5c0d8bfb1c9b8c72a"},{url:"components/shadow-claw-tools/shadow-claw-tools.html",revision:"ded34716fde770c62d98fc55ea3a90a3"},{url:"components/shadow-claw-toast/shadow-claw-toast.html",revision:"83ef4f69b85bc562f3e41d2038a75298"},{url:"components/shadow-claw-terminal/shadow-claw-terminal.html",revision:"d4a9d42553a49cccdabe858a1bcdfb6d"},{url:"components/shadow-claw-tasks/shadow-claw-tasks.html",revision:"6dde9f871430da8bb157d57f05876572"},{url:"components/shadow-claw-settings/shadow-claw-settings.html",revision:"dd5421c221ad0d1e11602b0466636eb0"},{url:"components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.html",revision:"8b1d69f282f194a98c9e9e7a2eb87009"},{url:"components/shadow-claw-pages/shadow-claw-pages.html",revision:"0f03cef912be6910360117da9b98f94a"},{url:"components/shadow-claw-page-header/shadow-claw-page-header.html",revision:"9dd0f64e1c4d31367923ae2e56662b5e"},{url:"components/shadow-claw-files/shadow-claw-files.html",revision:"7727f97dd065000b055d303d5d8a671a"},{url:"components/shadow-claw-file-viewer/shadow-claw-file-viewer.html",revision:"34ce16a00090f278b14be7a73e6915a2"},{url:"components/shadow-claw-conversations/shadow-claw-conversations.html",revision:"e1dda7d82b02568714a37db5905f8dfd"},{url:"components/shadow-claw-chat/shadow-claw-chat.html",revision:"83927b073730bce66081aa1d720351c7"},{url:"components/shadow-claw-channels/shadow-claw-channels.html",revision:"ee52d98315e62d80086d156608a94e05"},{url:"components/shadow-claw-a2ui/shadow-claw-a2ui.html",revision:"04363cb02303c1f31ad6951105e2b630"},{url:"components/shadow-claw/shadow-claw.html",revision:"f06a2944fa75b8325f8a226c5429cb9a"},{url:"components/settings/shadow-claw-webvm/shadow-claw-webvm.html",revision:"b41ff0201055fc03963a115cbeef4de6"},{url:"components/settings/shadow-claw-task-server/shadow-claw-task-server.html",revision:"9e715d1a569b1e589834ffa77a109a95"},{url:"components/settings/shadow-claw-storage/shadow-claw-storage.html",revision:"33501ece794e35a2948ea03df57d47cc"},{url:"components/settings/shadow-claw-peerjs/shadow-claw-peerjs.html",revision:"40d51a573cfef6fda61358fc25d806b3"},{url:"components/settings/shadow-claw-notifications/shadow-claw-notifications.html",revision:"74d4d4d3f2b368d971e74cf9e600d6bf"},{url:"components/settings/shadow-claw-networking/shadow-claw-networking.html",revision:"bca46b725edc47a4ed30cb5e2ed4d8be"},{url:"components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.html",revision:"595f5626bd4a024572393c39aefe6155"},{url:"components/settings/shadow-claw-llm/shadow-claw-llm.html",revision:"ba05b5e3536c9d4a8f400696aad239b7"},{url:"components/settings/shadow-claw-integrations/shadow-claw-integrations.html",revision:"12a847b968869c521b6d17285211cf8a"},{url:"components/settings/shadow-claw-git/shadow-claw-git.html",revision:"7f0d55e8f5c74b30f2ee02cab5af93e3"},{url:"components/settings/shadow-claw-control-plane/shadow-claw-control-plane.html",revision:"83a363c0cc27bec61f7fc3126990b3b8"},{url:"components/settings/shadow-claw-channel-config/shadow-claw-channel-config.html",revision:"38805e60640572b4ada99d11343a64dd"},{url:"components/settings/shadow-claw-accounts/shadow-claw-accounts.html",revision:"6537ff4c3ee01a3107e8b138425812b9"},{url:"components/common/shadow-claw-provider-module-settings/shadow-claw-provider-module-settings.html",revision:"4022e66f6cd3ac15723063c394e429c2"},{url:"components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.html",revision:"ce6d7fcbdaf710d498cdd650597d86c1"},{url:"components/common/shadow-claw-page-header-action-button/shadow-claw-page-header-action-button.html",revision:"89fa6723613dad5fcc9773685846a81f"},{url:"components/common/shadow-claw-empty-state/shadow-claw-empty-state.html",revision:"f1304d2789cf72435301709539f67a58"},{url:"components/common/shadow-claw-card/shadow-claw-card.html",revision:"332bf79a4dbd90356ea4982fc28f0312"},{url:"components/common/shadow-claw-actions/shadow-claw-actions.html",revision:"cbfba0838bc7cf14f38b80473e0d7cca"},{url:"bindings/webrtc-datachannel/v1/index.html",revision:"7f7ae8499f2c25e8e94409fa272f9f73"},{url:"favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"assets/icons/favicon.ico",revision:"58fff7908409f246a6228529f384802e"},{url:"static-routing.json",revision:"36f9e3515f28f864c4b329a9b3c7020a"},{url:"static-main-manifest.json",revision:"b20f7303c022e66c6e3345ab32cafb20"},{url:"manifest.json",revision:"37fbcc968787b25508d134f0e9a450ec"},{url:"writer-DxE1imv0.js",revision:"9060e6fd0f833d96fcdfdfead8a17a53"},{url:"writer-CD9oN2pq.js",revision:"7e3e5dbe762d5517a7bba9fb52f899e5"},{url:"webmcp-DAjmliCx.js",revision:"b06a8749a83176a7c241f2a63f60dc15"},{url:"webllm-CHN5H-Sy.js",revision:"66a060e91915d6e1a701d9e3d0724a87"},{url:"webllm-BDMz9yZR.js",revision:"86ffb13f1b7691d5d39b7a44210761ba"},{url:"ulid-BY7rQVLN.js",revision:"e1f3add55342551fd82b63ca9c9fa3ed"},{url:"txPromise-EBECky1b.js",revision:"68ed6c191afed31ac1c998e0b8f2b508"},{url:"translator-DEQXb7ZL.js",revision:"4cad7698da803b6aea92decde28bb975"},{url:"translator-B-3qYqN5.js",revision:"5e61b3f704ed7e0f77a748b9bfec1bd5"},{url:"transformers-js.worker.js",revision:"91bfe6c1d35c6c130eef161b6778fd56"},{url:"transformers-D6p2onvB.js",revision:"aff41eecf51876bbd7f8dda3134de021"},{url:"transformers-BhQMWQG5.js",revision:"2fccf1f04a71682215867ed1900ab0d0"},{url:"tools-DvckJZG2.js",revision:"850db58c8291b509117417cb8dd94ef3"},{url:"tools-COduyYJ0.js",revision:"22f40c43eee6d53e014bea52a15fdbdd"},{url:"tools-C8x3nmo4.js",revision:"b809a169e2d8648e2ffc091c1e08be91"},{url:"toast-BXgUfbyh.js",revision:"b7c62da49835547bd07f2010219562bd"},{url:"theme-init.js",revision:"0940b3e69e4fa4de11c94907f3372daf"},{url:"syncWebMcpRegistration-DOn9gLnD.js",revision:"8701c2423e6149de88be13f06cafdcd0"},{url:"summarizer-VJNr-7xG.js",revision:"a0147a995a2ff494830f8c5aa3757cb7"},{url:"summarizer-BV_Oq6Xe.js",revision:"92698a77c4846bf98e6a2488de9a4dc4"},{url:"shadow-claw-webvm-CP6oFjg5.js",revision:"83bc3bea5e0f635a4e26c88f30875ddf"},{url:"shadow-claw-tools-WSwWohnk.js",revision:"a8eb69dc06edd451cfa231855c965a83"},{url:"shadow-claw-toast-BkrQIP-3.js",revision:"36581e9c6968efcf3913fe00c31d698b"},{url:"shadow-claw-terminal-DpY6zU_r.js",revision:"ac50852102ca802f4ddcbba5e5522d03"},{url:"shadow-claw-tasks-DNpicQwz.js",revision:"67e5eeb872bc8075519d8ad1abdd8ca7"},{url:"shadow-claw-task-server-DxQSsgRZ.js",revision:"5c1f78d5c40575d7821c65663e31ab47"},{url:"shadow-claw-storage-CfEXoSIE.js",revision:"b86c68aa027ca69c8be8e9e1314a28f0"},{url:"shadow-claw-settings-t8TIlgrM.js",revision:"401461cf373618f02df4997276bc385b"},{url:"shadow-claw-pdf-viewer-gOiW-_Bh.js",revision:"e84932e68c4b1a60d8d72b37cfc1c920"},{url:"shadow-claw-pages-3_lQAv0t.js",revision:"ed0762e432a7bda181dbaa6b1c670c1a"},{url:"shadow-claw-page-header-action-button-Bmua3mAb.js",revision:"2e4b1fc665cfcf6a51510a08ba0a5da0"},{url:"shadow-claw-page-header-BccSHItx.js",revision:"2e219a9ce2ebb93323f423d69dae1090"},{url:"shadow-claw-notifications-Dbevj-lq.js",revision:"a37a74688226b2f5f6d145976fd48f54"},{url:"shadow-claw-networking-Dd8Rw31D.js",revision:"4bd9084bbbb89eccffb470a68858533d"},{url:"shadow-claw-mcp-remote-Bkx0gsmF.js",revision:"9945de70369c5c1549fde629fb9a1097"},{url:"shadow-claw-llm-DMvLgKXo.js",revision:"5e7650cadf1bc81f53d8083b9c5e372d"},{url:"shadow-claw-integrations-BBVnO0Fc.js",revision:"de3a1fa99ddcd8ecfe656a4dcb205bb7"},{url:"shadow-claw-git-DBRPZNav.js",revision:"8e65c8abf0354f070f42c229c6e34d7b"},{url:"shadow-claw-files-CG7MqWiV.js",revision:"2b2580c3a51687c95de17fc682f904cc"},{url:"shadow-claw-file-viewer-BWsoW5QS.js",revision:"09806f985c8976e8412361b228fccc94"},{url:"shadow-claw-empty-state-Bl52dGQ0.js",revision:"d66d49a9a4140672dc55092a15a1d09a"},{url:"shadow-claw-element-DIrv3P6A.js",revision:"740ad3d06fc485e6ab3d815d996036ee"},{url:"shadow-claw-dialog-BrOwAOdk.js",revision:"cef105280f387f95d4763386497c3de9"},{url:"shadow-claw-conversations-BWs5VVfs.js",revision:"6af2175a160be583756f78cf68af4d5b"},{url:"shadow-claw-control-plane-DHvN3Ukg.js",revision:"1bf6fd15fac37b3a9ca738177d1e8196"},{url:"shadow-claw-chat-CbSaOZ4q.js",revision:"8f0155908ddbdc56133ddc0d85bc8629"},{url:"shadow-claw-channels-XsfuWFF8.js",revision:"3650e35339b6c713dcfb29aa146a7f30"},{url:"shadow-claw-card-DCxWEHgX.js",revision:"16fb58ffeced559d6ae06ad22dc83449"},{url:"shadow-claw-accounts-xUOLBsQZ.js",revision:"91148cc7faf3704385c464b8cd4611fb"},{url:"shadow-claw-EAt2ml5Y.js",revision:"20592115a4312caaf5b0cbc1e98eb24d"},{url:"setConfig-DFMYnYLE.js",revision:"d56a0db494ca06686fbc49c0006b6627"},{url:"rolldown-runtime-aKtaBQYM.js",revision:"fe1c45aeeb5cda97a4081341cf8c64f0"},{url:"rewriter-j6D9LDER.js",revision:"2a6e7c883707dcfc9df9d522525267e8"},{url:"rewriter-DL7u2Z8W.js",revision:"a5fee6aa5d8dcac4451c455834e278bc"},{url:"push-client-D0lkwrK0.js",revision:"c518bb943270e966d939dc085a602156"},{url:"prompt-utils-DpfOVJQv-DorZAfZa.js",revision:"8d5a0482b00cf39c6d8ba0096bbce45e"},{url:"prompt-api-polyfill-Dl1kbJhR.js",revision:"842d74a9e41add1c72ac3ccebf435c0b"},{url:"prompt-api-polyfill-BBORqGSw.js",revision:"04f2a69a08477549196c9e6ad70efabe"},{url:"prompt-api-OUOP-B-R.js",revision:"668dec7b318ba116659a49a0648c8a28"},{url:"peerjs-DUCKH-m9.js",revision:"f15ed636bbde27068a5774bccb41e6e6"},{url:"pdf.worker.js",revision:"b169314e56c737213dba6418ab0b6512"},{url:"parseConfigBoolean-ByjZr9OM.js",revision:"3c1af0a9fb09aac85793c7e514ecd9c8"},{url:"orchestrator-DHjdLtqa.js",revision:"1524d30f846a7db6151556795b188284"},{url:"orchestrator-CMbCTjBf.js",revision:"6fe73fd33b8c16ead633486ab9bb5c31"},{url:"openai-DMG0vGCO.js",revision:"df9e8ac844b0d28349f23e0cfe7f5850"},{url:"openai-Bpd71Oja.js",revision:"61d214a51390cc136e218582bf6fc62a"},{url:"model-ranking-C60HgQ2c.js",revision:"1d4e60595bf418902c8845d595dea242"},{url:"memoryStorage-C0KvLNUp.js",revision:"c4a372382d9fe9bd4fb43dc2f510ecf4"},{url:"mcp-reconnect-9emsqGRe.js",revision:"6f24866cb60c4796afbbbccaaba0195c"},{url:"markdown-C3M4OW_A.js",revision:"dd960787ea231e722a20449efe409677"},{url:"language-detector-IQm4FUqH.js",revision:"f62880138d8955b3699f8d051ff524fe"},{url:"language-detector-BRKrlra0.js",revision:"0c2ed270708b22bf374afe4e8697548d"},{url:"initControlPlane-BN9cWyO0.js",revision:"c5732ccba119393a1fd95551c1714c10"},{url:"initChatSplitResize-CzV2E7Ul.js",revision:"d71f1f7a74c4b42b91afc88cabe008a3"},{url:"index.js",revision:"b50bbd15e04c9715539c6e515293cc19"},{url:"iframe-storage-proxy-B9Zt-vJ2.js",revision:"2c6289506d6c55854d14f4fa5a5ecddb"},{url:"iframe-sanitizer-y2Z1pPwY.js",revision:"c7c68ab0162c4bd3907602b25273dcd1"},{url:"git-CkhCJonj.js",revision:"fc1dfbe2ca654d4cc7feb7a949db656d"},{url:"git-7Vq_SJSp.js",revision:"efb8740c40346fc58b5f6dd5f543b13a"},{url:"getGroupDir-P1h9wl6S.js",revision:"a2c16cde82f4c9009795ad0a583d36da"},{url:"getConfig-D89uJgo5.js",revision:"8dee86ba2f1a33b29fa5240540c047ad"},{url:"getAllTasks-vpBlgGsc.js",revision:"08c22a4197deb6e39e6ec3fce337a5a4"},{url:"gemini-C4EOz8c4.js",revision:"92e9e18cb67f66af84aad790ccf35762"},{url:"firebase-OSDX3viP.js",revision:"b48e4e86381947b06c187bf821c5e42f"},{url:"firebase-BKi8D3q5.js",revision:"114f1f181b229e8b46a8be3c0abeb3a1"},{url:"file-viewer-C-6Jc_tb.js",revision:"7e95bb78383f5cc65400a7a9a5a129dd"},{url:"effect-BJCrpFdp.js",revision:"853102f8a6f55c95dfa3fc82f9e0e3fb"},{url:"e2e-bridge-Ceqr5kGc.js",revision:"13acbfeabf0cb19f8814685b99a822f8"},{url:"downloadGroupFile-D8KRJGGL.js",revision:"45bdd9177a2b264d2e9d6e663659a195"},{url:"dist-DUy1CvmT.js",revision:"8f723f5280a9a0153814b2010a389dea"},{url:"dist-B9m1QM9v.js",revision:"54b15459024339745e68780b3493fcd0"},{url:"defaults-DwNb0lWM-Drx4e34U.js",revision:"07f566607c044acac4fce8fb133d7837"},{url:"custom-element-security-FU04Cq05.js",revision:"0a233259731493b2876561aaaf517d63"},{url:"crypto-C8c5wMzN.js",revision:"2e4e24021e870c5fda72a84c0875677b"},{url:"constants-DiETpg52.js",revision:"c9f220286288beca5e353a2ac1b9d7a4"},{url:"constants-7AKqaY3G.js",revision:"14a4da9d0dc8fb65f4cf9608e7782970"},{url:"connections-DvbgdkaB.js",revision:"7ec97858ab1c56048b4636279870db46"},{url:"configurePeerJs-BqgeBjP7.js",revision:"fbcd6d9e5e1f52249b617b32ee50db7f"},{url:"config-value-oBfKgLT4.js",revision:"c93acb2ff0551e778e8dcd7d4fc79d1c"},{url:"config-CrHchneq.js",revision:"bec45eb2b69a56deb4cfb16e8b3f857e"},{url:"bundler-Ca-Xwln8.js",revision:"e5384a2db390254a5a4664ae2972163e"},{url:"buffer-9oRIc-5Z.js",revision:"5f8bcab43db1e23f92aae427e03fbb5a"},{url:"browser-nBz_r6l4.js",revision:"e7d5c0309995473bf0dd730d3575a102"},{url:"base-task-model-CYkpwnvU-DDfHUUIS.js",revision:"4fe8a137da9d73cb45ef71873c8c36b6"},{url:"base-task-model-CYkpwnvU-CLmOqgI_.js",revision:"c5cd6a3e5e1cf4770aa169b54f550fc3"},{url:"backup-controller-CvzDOq4T.js",revision:"bc3e84fcc8df8c5d18ed903487df3d83"},{url:"app-routes-Bs-riIvr.js",revision:"62ddbf31db8629c8325b7389646394a3"},{url:"agent.worker.js",revision:"a9ee2278f83dfc46e5236d7abbd2113e"},{url:"assets/iframe-storage-bridge.js",revision:"63df93333e520c84c9850ec0371894bd"},{url:"assets/file-viewer-preview-bridge.js",revision:"2c82c9cbe0d1a0554952c9b4f237b613"},{url:"assets/screenshots/shadow-claw-screenshot-731x1045.png",revision:"f3b9e801298660c14976d22f20a0c243"},{url:"assets/screenshots/shadow-claw-screenshot-1920x1052.png",revision:"16f391d0bbc913ec5aa239c8d577c7a4"},{url:"assets/icons/96.png",revision:"f91548690416c59ceb56cdb99809b955"},{url:"assets/icons/72.png",revision:"cba8470097972bdbc5d9a06fe67bfcf2"},{url:"assets/icons/512.png",revision:"ec2a8f28b812a0c2665a04cb3c535aab"},{url:"assets/icons/48.png",revision:"29eb2f38df4d5a6385399a04d7bdef00"},{url:"assets/icons/192.png",revision:"bf98264d7a62a47542e577245a292b77"},{url:"assets/icons/180.png",revision:"69128cf857af09292bb06fac0df9938b"},{url:"assets/icons/152.png",revision:"645ae818149dc508cc6146d620120db2"},{url:"assets/icons/128.png",revision:"84678d51d243c104d0c85a4e909fd0a6"},{url:"assets/icons/1024.png",revision:"ae17c81b3b93137df1702de6a9fcdab6"}],{}),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{allowlist:[/^\/$/,/^\/(chat|files|pages|tasks|settings)(?:\/.*)?$/]})),e.registerRoute(({url:e,sameOrigin:a})=>{if(e.pathname.startsWith("/assets/v86.9pfs/"))return!1;const s=e.hostname.toLowerCase();if("huggingface.co"===s||s.endsWith(".huggingface.co")||s.endsWith(".hf.co")||"hf.co"===s||"hf-mirror.com"===s||s.endsWith(".hf-mirror.com")||"cdnjs.cloudflare.com"===s||"esm.sh"===s||s.endsWith(".esm.sh")||"unpkg.com"===s||"cdn.jsdelivr.net"===s||s.endsWith(".jsdelivr.net")||"esm.run"===s||"openrouter.ai"===s||s.endsWith(".openrouter.ai")||"api.telegram.org"===s)return!1;if(e.pathname.startsWith("/api/control/"))return!1;const c=e.pathname.endsWith("/share/share-target.html"),o="/proxy"===e.pathname||e.pathname.startsWith("/git-proxy/")||c||e.pathname.startsWith("/push/")||e.pathname.startsWith("/schedule/")||e.pathname.startsWith("/telegram/");return(!("localhost"===s||"127.0.0.1"===s||"::1"===s||"[::1]"===s)||!o)&&("boolean"!=typeof a||a)},new e.NetworkFirst({cacheName:"shadow-claw-cache",plugins:[new e.ExpirationPlugin({maxAgeSeconds:31536e3})]}),"GET")});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{r as e}from"./config-CrHchneq.js";import{l as t,n,r,s as i}from"./app-routes-Bs-riIvr.js";import{r as a}from"./txPromise-EBECky1b.js";import{t as o}from"./getConfig-D89uJgo5.js";import{a as s,r as c,u as l}from"./toast-HAq8XWFj.js";import{En as u,R as d,Zt as f,a as p,c as m,lt as h,o as g,sn as ee,st as te,t as _,vt as v,w as ne,xt as y}from"./orchestrator-D-xlXG92.js";import{t as re}from"./setConfig-DFMYnYLE.js";import{t as b}from"./ulid-BY7rQVLN.js";import{n as ie,r as ae,t as oe}from"./constants-DiETpg52.js";import{t as se}from"./shadow-claw-element-DIrv3P6A.js";import{t as x}from"./effect-rHYr4nfu.js";import{t as ce}from"./prompt-api-OUOP-B-R.js";import{t as S}from"./configurePeerJs-COcwE0E7.js";import{t as C}from"./file-viewer-8PdCURDD.js";import{t as le}from"./parseConfigBoolean-ByjZr9OM.js";const w={Light:`light`,Dark:`dark`,System:`system`},T=`shadow-claw-theme`;function E(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function D(e){return e===`system`?E():e}function O(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const k=p(T)||`system`,A=D(k);O(A);const j=new class{_resolved;_theme;constructor(){this._theme=new l.State(k),this._resolved=new l.State(A)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=E();m(T,`system`),O(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=g(T);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=D(e);m(T,e),O(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};j.init();async function M(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function N(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function ue(e,t,n){return n&&t===`pages`?N(e):t}function de(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function fe(e,t,n,r){let i=n;if(!i)return;let a=de(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const pe={pages:()=>import(`./shadow-claw-pages-CjyeIV__.js`),chat:()=>import(`./shadow-claw-chat-Cu2keU2I.js`),tasks:()=>import(`./shadow-claw-tasks-DVVWEm-c.js`),files:()=>import(`./shadow-claw-files-BJSyZ-Bl.js`),settings:()=>import(`./shadow-claw-settings-BfbT4dBU.js`),tools:()=>import(`./shadow-claw-tools-zFLk2nbV.js`),channels:()=>import(`./shadow-claw-channels-3K62sU5f.js`),terminal:()=>import(`./shadow-claw-terminal-BwuTRp-O.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-BR__1z9S.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},P=new Map;async function F(e){let t=P.get(e);if(!t){let n=pe[e];n?(t=n().then(()=>void 0),P.set(e,t)):t=Promise.resolve()}await t}function I(e,t,n,r,i){r&&F(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,fe(e,t,n,r)})}function me(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function L(e,t){if(e)for(let n of me(e))n.setMainCollapsedOverride?.(t)}function R(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function z(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function B(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:z(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function V(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;if(i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),!a){i.classList.add(`webvm-toggle--error`);return}i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))}const H={chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function U(e,t){let n=H[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function W(e,t,n,r,i,a=!0){if(!e)return;let o=ue(r,i,t.pagesSidebarHidden),s=!!t.chatSplitViewEnabled&&o!==`chat`,c=e.querySelector(`.main-content`),l=e.querySelector(`.chat-split-resize-handle`);if(s){let t=H.chat;t&&customElements.get(t)?U(e,`chat`):F(`chat`).then(()=>{e&&U(e,`chat`)}).catch(console.error),c&&c.classList.add(`split-chat-active`),l&&l.removeAttribute(`hidden`)}else c&&c.classList.remove(`split-chat-active`),l&&l.setAttribute(`hidden`,`hidden`);let u=H[o];u&&customElements.get(u)?U(e,o):F(o).then(()=>{e&&U(e,o)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let d=e.querySelector(`[data-page-id="${o}"]`);d&&d.classList.add(`active`);let f=e.querySelector(`[data-page="${o}"]`);f&&f.classList.add(`active`),t.currentPage=o,a&&n&&r.setActivePage(n,o).catch(console.error),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),L(e,t.headerMainCollapsedOverride),B(e,t.headerMainCollapsedOverride),R(e,t.currentPage,r.activityLog.length),V(e,t.currentPage,t.terminalVisible,t.vmStatus);let p=e.querySelector(`.page.active`);if(p){let e=p;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}if(o===`chat`){let t=e.querySelector(`shadow-claw-chat`);t&&typeof t.checkPromptApiOnboarding==`function`&&t.checkPromptApiOnboarding()}if(o===`files`&&n&&r.loadFiles(n).catch(console.error),o===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}async function G(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&!(u===`files`&&c&&c===r.file.path&&(!s||s===i.activeGroupId))){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&W(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await M(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c)await i.setActivePinnedPage(n,{groupId:s||i.activeGroupId||`br:main`,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await M(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function K(e,n,r,i,a,o){let s=await t(o,a.activeGroupId);s&&await G(e,n,r,i,a,s)}function q(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function J(t,n){if(t)try{await re(t,e.SIDEBAR_WIDTH,n)}catch{}}function Y(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=q(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function he(t,n,r,i){if(!t)return;let a=t.querySelector(`.sidebar-resize-handle`);if(!(a instanceof HTMLElement))return;a.setAttribute(`tabindex`,`0`),a.setAttribute(`role`,`separator`),a.setAttribute(`aria-orientation`,`vertical`),a.setAttribute(`aria-label`,`Resize sidebar width`);let s=()=>{let e=t.querySelector(`.app-body`);if(!(e instanceof HTMLElement))return 250;let n=parseFloat(e.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(n)&&n>0?n:r.getBoundingClientRect().width||250},c=()=>{let e=Math.round(q(t,s())),n=Math.round(q(t,2**53-1));a.setAttribute(`aria-valuemin`,`200`),a.setAttribute(`aria-valuemax`,String(n)),a.setAttribute(`aria-valuenow`,String(e))};try{let n=i?await o(i,e.SIDEBAR_WIDTH):void 0;typeof n==`number`&&Number.isFinite(n)&&n>0?Y(t,n):Y(t,250)}catch{Y(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;Y(t,d+n),c()},p=()=>{if(l===null)return;l=null,a.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let e=t.querySelector(`.app-body`);if(e instanceof HTMLElement){let t=parseFloat(e.style.getPropertyValue(`--sidebar-width`));Number.isFinite(t)&&t>0&&i&&J(i,t)}},m=e=>{e.pointerId===l&&p()};a.addEventListener(`pointerdown`,e=>{e.pointerType===`mouse`&&e.button!==0&&e.button!==-1||window.innerWidth<896||(e.preventDefault(),l=e.pointerId,u=e.clientX,d=r.getBoundingClientRect().width,a.classList.add(`active`),a.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f))}),a.addEventListener(`pointerup`,m),a.addEventListener(`pointercancel`,p),a.addEventListener(`dblclick`,()=>{Y(t,250),i&&J(i,250),c()}),a.addEventListener(`keydown`,e=>{if(window.innerWidth<896)return;let n=e.shiftKey?32:12,r=s(),a=null;e.key===`ArrowRight`?a=r+n:e.key===`ArrowLeft`?a=r-n:e.key===`Home`?a=200:e.key===`End`&&(a=q(t,2**53-1)),a!==null&&(e.preventDefault(),Y(t,a),c(),i&&J(i,q(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function X(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const ge={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function Z(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n)))}function _e(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ve(e,t,n,r){for(let[n,i]of Object.entries(ge)){let a=n,s=!1;if(r)try{s=le(await o(r,i))}catch{s=!1}let c=_e(a);t[c]=s,Z(e,a,s)}}function Q(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a;break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a;break}Z(e,i,a),a&&t.currentPage===i&&W(e,t,r,n,N(n,t))}function ye(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function be(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Se(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function Ce(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),xe(e.shadowRoot,e.activityLogCollapsedOverride),Se(e.shadowRoot,e.activityLogCollapsedOverride)}function we(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:z(e.shadowRoot)?.isMainCollapsed?.()??!1),L(e.shadowRoot,e.headerMainCollapsedOverride),B(e.shadowRoot,e.headerMainCollapsedOverride)}function Te(e,t){t.terminalVisible=!t.terminalVisible,V(e,t.currentPage,t.terminalVisible,t.vmStatus),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ee(e,t){e===w.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function De(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===w.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function Oe(e,t,n,r,i,a,o,s,c){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||N(a);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let l=n.getElementById(`menu-button`),u=n.querySelector(`.sidebar`);if(l&&u){l.addEventListener(`click`,()=>{u.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&u.classList.remove(`open`)})}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&u.classList.contains(`open`)&&!n.includes(u)&&!n.includes(l)&&u.classList.remove(`open`)});let a=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&u.classList.remove(`open`)};o(a),a.addEventListener(`change`,o),he(n,r,u,i)}let d=n.querySelector(`[data-action="show-settings"]`);d&&d.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{we(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Ce(r)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{ye(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,W(n,r,i,a,r.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let f=n.querySelector(`.theme-mode-toggle`);f&&f.addEventListener(`click`,()=>{let{resolved:e}=s.getTheme(),t=e===w.Dark?w.Light:w.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Te(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{I(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),L(n,r.headerMainCollapsedOverride),B(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&B(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),be()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{K(n,r,i,o,a,new URL(e.location.href))},e.addEventListener(`popstate`,r.popstateListener),t.addEventListener(`click`,r.fallbackClickListener),r.fallbackClickListenerAttached=!0),e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;De(n,t),Ee(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;X(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let p=s.resolved;De(n,p),Ee(p,r.classList)}function ke(e){if(e===void 0)return;e.documentElement.classList.remove(ie,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(oe),t?.removeAttribute(ae)}function Ae(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let r=n?.destination?.url;if(typeof r!=`string`)return;let a=new URL(r);if(a.origin===window.location.origin&&i(a.pathname))return{parsedUrl:a,navigateEvent:n}}function je(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let a=r.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!i(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Me(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Ne(e,t,n,r){let i=await Me(e,t,r);ne(n.orchestrator,r.id,i)}async function Pe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(!(!i||!e))for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}c(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Fe(e,t,n){n?.providerId===`llamafile`?await X(e,t,h(n.reason)):n?.providerId===`transformers_js_local`?await X(e,t,te(n.reason)):n?.providerId===`prompt_api`?await X(e,t,ce(n.reason)):n?.providerId&&n.helpType&&await X(e,t,u(n.providerId,n.helpType,n.reason))}async function Ie(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await X(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{d(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),W(t,n,r,i,`chat`),s(`Joined room "${a.roomName}"`)}catch(e){c(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Le(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function Re(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(be()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Le(globalThis.history,l,{...c,useTrailingSlash:!1}),await G(e,t,i,a,o,s)}function ze(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function Be(e,t,n,r,i,a){let o=a.detail;o&&await Re(e,t,n,r,i,{page:ze(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function Ve(e,t,n,r){await ve(e,t,n,r)}async function He(e,t,n,r){if(!n)return;let i=new URL(window.location?.href||`http://localhost/`),a=i.searchParams.get(`peer`);if(!a)return;let o=a.trim();if(o)try{let a=v(r),c=a.myPeerId;c||=b().toLowerCase();let l=new Set(a.trustedPeerIds);l.add(o),await S(r,n,c,Array.from(l),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await y(r,n,`peerjs`,!0);let u=await _.ensurePeerConversation(n,o);await _.switchConversation(n,u),W(e,t,n,_,`chat`),i.searchParams.delete(`peer`);let d=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,d||`/`),s(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){c(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const Ue=`pendingShares`;function We(e){return{id:typeof e?.id==`string`?e.id:``,createdAt:typeof e?.createdAt==`number`?e.createdAt:0,title:typeof e?.title==`string`?e.title:``,text:typeof e?.text==`string`?e.text:``,url:typeof e?.url==`string`?e.url:``,fileName:typeof e?.fileName==`string`?e.fileName:``,fileType:typeof e?.fileType==`string`?e.fileType:``,fileBytes:e?.fileBytes instanceof ArrayBuffer?e.fileBytes:null}}async function Ge(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(Ue,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(Ue),a=i.getAll();a.onerror=()=>{n(a.error||Error(`Failed to read pending shares`))},a.onsuccess=()=>{let e=Array.isArray(a.result)?a.result.map(We).filter(e=>typeof e.id==`string`&&e.id.length>0).sort((e,t)=>e.createdAt-t.createdAt):[],r=i.clear();r.onerror=()=>{n(r.error||Error(`Failed to clear pending shares`))},r.onsuccess=()=>{t(e)}},r.onabort=()=>{n(r.error||Error(`Pending share transaction aborted`))}})}function Ke(e){let t=[`# Shared Content`,``];return e.title&&t.push(`Title: ${e.title}`),e.url&&t.push(`URL: ${e.url}`),e.text&&t.push(``,e.text),t.join(`
|
|
1
|
+
import{r as e}from"./config-CrHchneq.js";import{l as t,n,r,s as i}from"./app-routes-Bs-riIvr.js";import{r as a}from"./txPromise-EBECky1b.js";import{t as o}from"./getConfig-D89uJgo5.js";import{t as s}from"./dist-B9m1QM9v.js";import{R as c,Sn as l,Zt as u,a as d,c as f,lt as p,o as m,sn as h,st as g,t as _,vt as v,w as ee,xt as y}from"./orchestrator-DHjdLtqa.js";import{t as te}from"./setConfig-DFMYnYLE.js";import{t as ne}from"./ulid-BY7rQVLN.js";import{a as b,r as x}from"./toast-BXgUfbyh.js";import{n as re,r as ie,t as ae}from"./constants-DiETpg52.js";import{t as oe}from"./shadow-claw-element-DIrv3P6A.js";import{t as S}from"./effect-BJCrpFdp.js";import{t as se}from"./prompt-api-OUOP-B-R.js";import{t as C}from"./configurePeerJs-BqgeBjP7.js";import{t as w}from"./file-viewer-C-6Jc_tb.js";import{t as ce}from"./parseConfigBoolean-ByjZr9OM.js";const T={Light:`light`,Dark:`dark`,System:`system`},E=`shadow-claw-theme`;function le(){return typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function D(e){return e===`system`?le():e}function O(e){let t=document.documentElement;e===`dark`?(t.classList.add(`dark-mode`),t.classList.remove(`light-mode`)):(t.classList.add(`light-mode`),t.classList.remove(`dark-mode`));let n=document.querySelector(`shadow-claw`);n&&(e===`dark`?(n.classList.add(`dark-mode`),n.classList.remove(`light-mode`)):(n.classList.add(`light-mode`),n.classList.remove(`dark-mode`))),window.dispatchEvent(new CustomEvent(`shadow-claw-theme-change`,{detail:{theme:e}}))}const k=d(E)||`system`,A=D(k);O(A);const j=new class{_resolved;_theme;constructor(){this._theme=new s.State(k),this._resolved=new s.State(A)}getTheme(){return{theme:this.theme,resolved:this.resolved}}init(){typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{let e=le();f(E,`system`),O(e),this._theme.set(`system`),this._resolved.set(e)}),window.addEventListener(`storage`,e=>{let t=m(E);e.key===t&&e.newValue&&this.setTheme(e.newValue)})}get resolved(){return this._resolved.get()}setTheme(e){let t=D(e);f(E,e),O(t),this._theme.set(e),this._resolved.set(t)}get theme(){return this._theme.get()}};j.init();async function M(e,t=3){for(let n=0;n<t;n++){if(e())return;await new Promise(e=>{requestAnimationFrame(()=>e())})}}function N(e,t){let n=e.sidebarDefaultPage,r=[n,`pages`,`chat`,`tasks`,`files`];if(!t)return n===`pages`||n===`chat`||n===`tasks`||n===`files`?n:`chat`;for(let e of r){if(e===`pages`&&!t.pagesSidebarHidden)return`pages`;if(e===`chat`&&!t.chatSidebarHidden)return`chat`;if(e===`tasks`&&!t.tasksSidebarHidden)return`tasks`;if(e===`files`&&!t.filesSidebarHidden)return`files`}return`pages`}function ue(e,t,n){return n&&t===`pages`?N(e):t}function de(e,t){if(!e||![`chat`,`tasks`,`files`].includes(t))return null;let n=e.querySelector(`[data-page-id="${t}"]`);if(!(n instanceof HTMLElement))return null;let r=n.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files`),i=r instanceof HTMLElement?r.shadowRoot?.querySelector(`[data-terminal-slot]`):null;return i instanceof HTMLElement?i:null}function fe(e,t,n,r){let i=n;if(!i)return;let a=de(e,t);if(!a)return;i.parentElement!==a&&a.appendChild(i);let o=!r;i.hidden=o,o?(a.setAttribute(`hidden`,`hidden`),e?.querySelector(`shadow-claw-terminal`)?.setAttribute(`hidden`,`hidden`)):(a.removeAttribute(`hidden`),e?.querySelector(`shadow-claw-terminal`)?.removeAttribute(`hidden`))}const pe={pages:()=>import(`./shadow-claw-pages-3_lQAv0t.js`),chat:()=>import(`./shadow-claw-chat-CbSaOZ4q.js`),tasks:()=>import(`./shadow-claw-tasks-DNpicQwz.js`),files:()=>import(`./shadow-claw-files-CG7MqWiV.js`),settings:()=>import(`./shadow-claw-settings-t8TIlgrM.js`),tools:()=>import(`./shadow-claw-tools-WSwWohnk.js`),channels:()=>import(`./shadow-claw-channels-XsfuWFF8.js`),terminal:()=>import(`./shadow-claw-terminal-DpY6zU_r.js`),"file-viewer":()=>import(`./shadow-claw-file-viewer-BWsoW5QS.js`),"pdf-viewer":()=>import(`./shadow-claw-pdf-viewer-gOiW-_Bh.js`)},P=new Map;async function F(e){let t=P.get(e);if(!t){let n=pe[e];n?(t=n().then(()=>void 0),P.set(e,t)):t=Promise.resolve()}await t}function I(e,t,n,r,i){r&&F(`terminal`).catch(console.error),i!==null&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=null,fe(e,t,n,r)})}function me(e){if(!e)return[];let t=[`shadow-claw-chat`,`shadow-claw-tasks`,`shadow-claw-files`,`shadow-claw-pages`,`shadow-claw-settings`,`shadow-claw-tools`,`shadow-claw-channels`],n=[];for(let r of t){let t=e.querySelector(r);if(!(t instanceof HTMLElement))continue;let i=t.shadowRoot?.querySelector(`shadow-claw-page-header`);i instanceof HTMLElement&&n.push(i)}return n}function L(e,t){if(e)for(let n of me(e))n.setMainCollapsedOverride?.(t)}function R(e,t,n){if(!e)return;let r=e.querySelector(`.activity-log-toggle`);r instanceof HTMLButtonElement&&(r.hidden=t!==`chat`||n===0)}function z(e){if(!e)return null;let t=e.querySelector(`.page.active`);if(!(t instanceof HTMLElement))return null;let n=t.querySelector(`shadow-claw-chat, shadow-claw-tasks, shadow-claw-files, shadow-claw-pages, shadow-claw-settings, shadow-claw-tools, shadow-claw-channels`);if(!(n instanceof HTMLElement))return null;let r=n.shadowRoot?.querySelector(`shadow-claw-page-header`);return r instanceof HTMLElement?r:null}function B(e,t){if(!e)return;let n=e.querySelector(`.header-main-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof t==`boolean`?t:z(e)?.isMainCollapsed?.()??!1;n.setAttribute(`aria-label`,r?`Show action header`:`Hide action header`),n.setAttribute(`title`,r?`Show action header`:`Hide action header`),n.setAttribute(`aria-pressed`,String(r))}function V(e,t,n,r){if(!e)return;let i=e.querySelector(`.webvm-toggle`);if(!(i instanceof HTMLButtonElement))return;let a=t===`chat`||t===`files`;if(i.hidden=!a,i.classList.toggle(`hidden`,!a),i.classList.remove(`webvm-toggle--hidden`,`webvm-toggle--visible`,`webvm-toggle--booting`,`webvm-toggle--ready`,`webvm-toggle--error`),!a){i.classList.add(`webvm-toggle--error`);return}i.classList.add(n?`webvm-toggle--visible`:`webvm-toggle--hidden`),r.ready?i.classList.add(`webvm-toggle--ready`):(r.booting||r.bootAttempted)&&i.classList.add(`webvm-toggle--booting`),i.setAttribute(`aria-label`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`title`,n?`Hide WebVM terminal`:`Show WebVM terminal`),i.setAttribute(`aria-pressed`,String(n))}const H={chat:`shadow-claw-chat`,tasks:`shadow-claw-tasks`,files:`shadow-claw-files`,settings:`shadow-claw-settings`,tools:`shadow-claw-tools`,channels:`shadow-claw-channels`};function U(e,t){let n=H[t];if(!n)return;let r=e.querySelector(`[data-page-id="${t}"]`);!r||r.children.length>0||r.appendChild(document.createElement(n))}function W(e,t,n,r,i,a=!0){if(!e)return;let o=ue(r,i,t.pagesSidebarHidden),s=!!t.chatSplitViewEnabled&&o!==`chat`,c=e.querySelector(`.main-content`),l=e.querySelector(`.chat-split-resize-handle`);if(s){let t=H.chat;t&&customElements.get(t)?U(e,`chat`):F(`chat`).then(()=>{e&&U(e,`chat`)}).catch(console.error),c&&c.classList.add(`split-chat-active`),l&&l.removeAttribute(`hidden`)}else c&&c.classList.remove(`split-chat-active`),l&&l.setAttribute(`hidden`,`hidden`);let u=H[o];u&&customElements.get(u)?U(e,o):F(o).then(()=>{e&&U(e,o)}).catch(console.error),e.querySelectorAll(`.page`).forEach(e=>{e.classList.remove(`active`)}),e.querySelectorAll(`.nav-item`).forEach(e=>{e.classList.remove(`active`)});let d=e.querySelector(`[data-page-id="${o}"]`);d&&d.classList.add(`active`);let f=e.querySelector(`[data-page="${o}"]`);f&&f.classList.add(`active`),t.currentPage=o,a&&n&&r.setActivePage(n,o).catch(console.error),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame),L(e,t.headerMainCollapsedOverride),B(e,t.headerMainCollapsedOverride),R(e,t.currentPage,r.activityLog.length),V(e,t.currentPage,t.terminalVisible,t.vmStatus);let p=e.querySelector(`.page.active`);if(p){let e=p;typeof e.scrollTo==`function`&&e.scrollTo(0,0)}if(o===`chat`){let t=e.querySelector(`shadow-claw-chat`);t&&typeof t.checkPromptApiOnboarding==`function`&&t.checkPromptApiOnboarding()}if(o===`files`&&n&&r.loadFiles(n).catch(console.error),o===`pages`){let t=e.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer())}}async function G(e,t,n,r,i,a){let{page:o,groupId:s,path:c,anchor:l}=a;if(!n)return;let u=o?String(o).toLowerCase():``;if(u&&r.file&&!(u===`files`&&c&&c===r.file.path&&(!s||s===i.activeGroupId))){let t=e?.querySelector(`shadow-claw-file-viewer`);if(t&&typeof t.requestCloseViewer==`function`){if(!await t.requestCloseViewer())return}else r.closeFile()}if(s&&s!==i.activeGroupId?await i.switchConversation(n,s,u===`chat`):s&&(i.loadHistory(),(u===`tasks`||u===`files`)&&n&&i.loadFiles(n)),u&&W(e,t,n,i,u),u===`files`&&c)if(/\.[^./]+$/u.test(c))try{await r.openFile(n,c,s||i.activeGroupId),l&&await M(()=>{let t=e?.querySelector(`shadow-claw-file-viewer`);return t&&typeof t.handleAnchorNavigation==`function`?!!t.handleAnchorNavigation(l):!1})}catch(e){console.error(`Failed to open file via route navigation:`,c,e)}else try{await i.setCurrentPath(n,c),r.closeFile()}catch(e){console.error(`Failed to open folder via route navigation:`,c,e)}if(u===`pages`){if(typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-pages`),c)await i.setActivePinnedPage(n,{groupId:s||i.activeGroupId||`br:main`,path:c});else{let e=i.effectiveDefaultPage||i.pages&&i.pages[0]||null;e&&await i.setActivePinnedPage(n,e)}let t=e?.querySelector(`shadow-claw-pages`);t&&typeof t.renderSelectedPage==`function`&&(await t.renderSelectedPage(),typeof t.setupAutoRefreshTimer==`function`&&t.setupAutoRefreshTimer(),l&&await M(()=>typeof t.handleAnchorNavigation==`function`&&!!t.handleAnchorNavigation(l)))}}async function K(e,n,r,i,a,o){let s=await t(o,a.activeGroupId);s&&await G(e,n,r,i,a,s)}function q(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return Math.max(200,Math.min(560,t));let r=Math.max(200,n.getBoundingClientRect().width-260);return Math.max(200,Math.min(Math.min(560,r),t))}async function J(t,n){if(t)try{await te(t,e.SIDEBAR_WIDTH,n)}catch{}}function Y(e,t){let n=e?.querySelector(`.app-body`);if(!(n instanceof HTMLElement))return;let r=q(e,t);n.style.setProperty(`--sidebar-width`,`${r}px`)}async function he(t,n,r,i){if(!t)return;let a=t.querySelector(`.sidebar-resize-handle`);if(!(a instanceof HTMLElement))return;a.setAttribute(`tabindex`,`0`),a.setAttribute(`role`,`separator`),a.setAttribute(`aria-orientation`,`vertical`),a.setAttribute(`aria-label`,`Resize sidebar width`);let s=()=>{let e=t.querySelector(`.app-body`);if(!(e instanceof HTMLElement))return 250;let n=parseFloat(e.style.getPropertyValue(`--sidebar-width`));return Number.isFinite(n)&&n>0?n:r.getBoundingClientRect().width||250},c=()=>{let e=Math.round(q(t,s())),n=Math.round(q(t,2**53-1));a.setAttribute(`aria-valuemin`,`200`),a.setAttribute(`aria-valuemax`,String(n)),a.setAttribute(`aria-valuenow`,String(e))};try{let n=i?await o(i,e.SIDEBAR_WIDTH):void 0;typeof n==`number`&&Number.isFinite(n)&&n>0?Y(t,n):Y(t,250)}catch{Y(t,250)}let l=null,u=0,d=0,f=e=>{if(e.pointerId!==l)return;let n=e.clientX-u;Y(t,d+n),c()},p=()=>{if(l===null)return;l=null,a.classList.remove(`active`),document.removeEventListener(`pointermove`,f);let e=t.querySelector(`.app-body`);if(e instanceof HTMLElement){let t=parseFloat(e.style.getPropertyValue(`--sidebar-width`));Number.isFinite(t)&&t>0&&i&&J(i,t)}},m=e=>{e.pointerId===l&&p()};a.addEventListener(`pointerdown`,e=>{e.pointerType===`mouse`&&e.button!==0&&e.button!==-1||window.innerWidth<896||(e.preventDefault(),l=e.pointerId,u=e.clientX,d=r.getBoundingClientRect().width,a.classList.add(`active`),a.setPointerCapture(e.pointerId),document.addEventListener(`pointermove`,f))}),a.addEventListener(`pointerup`,m),a.addEventListener(`pointercancel`,p),a.addEventListener(`dblclick`,()=>{Y(t,250),i&&J(i,250),c()}),a.addEventListener(`keydown`,e=>{if(window.innerWidth<896)return;let n=e.shiftKey?32:12,r=s(),a=null;e.key===`ArrowRight`?a=r+n:e.key===`ArrowLeft`?a=r-n:e.key===`Home`?a=200:e.key===`End`&&(a=q(t,2**53-1)),a!==null&&(e.preventDefault(),Y(t,a),c(),i&&J(i,q(t,s())))}),c(),n.addCleanup(()=>{p(),a.removeEventListener(`pointerup`,m),a.removeEventListener(`pointercancel`,p)})}async function X(e,t,n){if(!t)return!1;let r=t.querySelector(`.app-dialog`),i=t.querySelector(`.app-dialog__title`),a=t.querySelector(`.app-dialog__message`),o=t.querySelector(`.app-dialog__details`),s=t.querySelector(`.app-dialog__links`),c=t.querySelector(`.app-dialog__btn--confirm`),l=t.querySelector(`.app-dialog__btn--cancel`),u=t.querySelector(`.app-dialog__countdown`);if(!r||!i||!a||!o||!s||!c||!l)return!1;r._autoCloseTimer&&=(clearInterval(r._autoCloseTimer),null),r.open&&r.close(),i.textContent=n.title,a.textContent=n.message,o.replaceChildren(),s.replaceChildren();let d=Array.isArray(n.details)?n.details:[];o.hidden=d.length===0;for(let t of d){let n=e.createElement(`li`);n.textContent=t,o.appendChild(n)}let f=Array.isArray(n.links)?n.links:[];s.hidden=f.length===0;for(let t of f){let n=e.createElement(`a`);n.className=`app-dialog__link`,n.href=t.href,n.rel=`noreferrer`,n.target=`_blank`,n.textContent=t.label,s.appendChild(n)}let p=n.mode||`confirm`,m=n.confirmLabel||(p===`info`?`OK`:`Confirm`);l.textContent=n.cancelLabel||`Cancel`,l.hidden=p===`info`;let h=null,g=()=>{h&&=(clearInterval(h),null),r._autoCloseTimer&&=null};if(typeof n.autoCloseSeconds==`number`&&n.autoCloseSeconds>0){let e=Math.max(1,Math.round(n.autoCloseSeconds));c.textContent=`${m} (${e}s)`,u&&(u.hidden=!1,u.textContent=`Auto-closing in ${e}s...`,u.setAttribute(`role`,`status`),u.setAttribute(`aria-live`,`polite`),u.setAttribute(`aria-atomic`,`true`)),h=setInterval(()=>{e--,e>0?(c.textContent=`${m} (${e}s)`,u&&(u.textContent=`Auto-closing in ${e}s...`)):(g(),r.returnValue=p===`info`?`confirm`:`cancel`,r.close(r.returnValue))},1e3),r._autoCloseTimer=h}else c.textContent=m,u&&(u.hidden=!0,u.textContent=``);return r.returnValue=``,await new Promise(e=>{let t=()=>{g(),r.removeEventListener(`close`,t),e(r.returnValue===`confirm`)};r.addEventListener(`close`,t),r.showModal()})}const ge={pages:e.SIDEBAR_PAGES_HIDDEN,chat:e.SIDEBAR_CHAT_HIDDEN,tasks:e.SIDEBAR_TASKS_HIDDEN,files:e.SIDEBAR_FILES_HIDDEN};function Z(e,t,n){if(!e)return;let r=e.querySelector(`.nav-item[data-page="${t}"]`);r&&(r.hidden=n,r.setAttribute(`aria-hidden`,String(n)))}function _e(e){switch(e){case`pages`:return`pagesSidebarHidden`;case`chat`:return`chatSidebarHidden`;case`tasks`:return`tasksSidebarHidden`;case`files`:return`filesSidebarHidden`}}async function ve(e,t,n,r){for(let[n,i]of Object.entries(ge)){let a=n,s=!1;if(r)try{s=ce(await o(r,i))}catch{s=!1}let c=_e(a);t[c]=s,Z(e,a,s)}}function Q(e,t,n,r,i,a){switch(i){case`pages`:t.pagesSidebarHidden=a;break;case`chat`:t.chatSidebarHidden=a;break;case`tasks`:t.tasksSidebarHidden=a;break;case`files`:t.filesSidebarHidden=a;break}Z(e,i,a),a&&t.currentPage===i&&W(e,t,r,n,N(n,t))}function ye(e,t,n,r,i){Q(e,t,n,r,`pages`,i)}function be(){let e=window.navigation;return!!(e&&typeof e.addEventListener==`function`&&typeof e.navigate==`function`)}function xe(e,t){if(!e)return;let n=e.querySelector(`shadow-claw-chat`);n&&typeof n.setActivityLogCollapsedOverride==`function`&&n.setActivityLogCollapsedOverride(t)}function Se(e,t){if(!e)return;let n=e.querySelector(`.activity-log-toggle`);if(!(n instanceof HTMLButtonElement))return;let r=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches,i=typeof t==`boolean`?t:r;n.setAttribute(`aria-label`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`title`,i?`Show activity log`:`Hide activity log`),n.setAttribute(`aria-pressed`,String(i))}function Ce(e){let t=typeof globalThis.matchMedia==`function`&&!globalThis.matchMedia(`(min-width: 56rem) and (min-height: 401px)`).matches;e.activityLogCollapsedOverride=!(typeof e.activityLogCollapsedOverride==`boolean`?e.activityLogCollapsedOverride:t),xe(e.shadowRoot,e.activityLogCollapsedOverride),Se(e.shadowRoot,e.activityLogCollapsedOverride)}function we(e){e.headerMainCollapsedOverride=!(typeof e.headerMainCollapsedOverride==`boolean`?e.headerMainCollapsedOverride:z(e.shadowRoot)?.isMainCollapsed?.()??!1),L(e.shadowRoot,e.headerMainCollapsedOverride),B(e.shadowRoot,e.headerMainCollapsedOverride)}function Te(e,t){t.terminalVisible=!t.terminalVisible,V(e,t.currentPage,t.terminalVisible,t.vmStatus),I(e,t.currentPage,t.terminalElement,t.terminalVisible,t.terminalPlacementFrame)}function Ee(e,t){e===T.Dark?(t.add(`dark-mode`),t.remove(`light-mode`)):(t.add(`light-mode`),t.remove(`dark-mode`))}function De(e,t){if(!e)return;let n=e.querySelector(`.sun-icon`),r=e.querySelector(`.moon-icon`);n&&r&&(t===T.Dark?(n.style.display=`block`,n.removeAttribute(`hidden`),n.classList.remove(`hidden`),r.style.display=`none`,r.setAttribute(`hidden`,`hidden`),r.classList.add(`hidden`)):(n.style.display=`none`,n.setAttribute(`hidden`,`hidden`),n.classList.add(`hidden`),r.style.display=`block`,r.removeAttribute(`hidden`),r.classList.remove(`hidden`)))}function Oe(e,t,n,r,i,a,o,s,c){if(!n||!e||!t)return;n.querySelectorAll(`.nav-item[data-page]`).forEach(e=>{let r=e;r.addEventListener(`click`,()=>{let e=r.dataset.page||N(a);n.querySelectorAll(`.nav-item`).forEach(e=>e.classList.remove(`active`)),r.classList.add(`active`),setTimeout(()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:e},bubbles:!0,composed:!0}))},0)})});let l=n.getElementById(`menu-button`),u=n.querySelector(`.sidebar`);if(l&&u){l.addEventListener(`click`,()=>{u.classList.toggle(`open`)}),n.querySelectorAll(`.nav-item, .settings-btn`).forEach(t=>{t.addEventListener(`click`,()=>{e.innerWidth<896&&u.classList.remove(`open`)})}),t.addEventListener(`click`,t=>{let n=t.composedPath();e.innerWidth<896&&u.classList.contains(`open`)&&!n.includes(u)&&!n.includes(l)&&u.classList.remove(`open`)});let a=e.matchMedia?e.matchMedia(`(min-width: 56rem)`):{matches:!1,addEventListener:()=>{},removeEventListener:()=>{}},o=e=>{e.matches&&u.classList.remove(`open`)};o(a),a.addEventListener(`change`,o),he(n,r,u,i)}let d=n.querySelector(`[data-action="show-settings"]`);d&&d.addEventListener(`click`,()=>{t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0}))}),n.querySelector(`.header-main-toggle`)?.addEventListener(`click`,()=>{we(r)}),n.querySelector(`.activity-log-toggle`)?.addEventListener(`click`,()=>{Ce(r)}),n.addEventListener(`navigate`,e=>{let n=e.detail?.page;n&&t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:n},bubbles:!0,composed:!0}))}),n.addEventListener(`sidebar-pages-visibility-change`,e=>{ye(n,r,a,i,!!e.detail?.hidden)}),n.addEventListener(`sidebar-chat-visibility-change`,e=>{Q(n,r,a,i,`chat`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-tasks-visibility-change`,e=>{Q(n,r,a,i,`tasks`,!!e.detail?.hidden)}),n.addEventListener(`sidebar-files-visibility-change`,e=>{Q(n,r,a,i,`files`,!!e.detail?.hidden)}),n.addEventListener(`chat-split-view-change`,e=>{r.chatSplitViewEnabled=!!e.detail?.enabled,W(n,r,i,a,r.currentPage,!1)}),n.addEventListener(`navigate-back`,()=>t.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`settings`},bubbles:!0,composed:!0})));let f=n.querySelector(`.theme-mode-toggle`);f&&f.addEventListener(`click`,()=>{let{resolved:e}=s.getTheme(),t=e===T.Dark?T.Light:T.Dark;s.setTheme(t)}),n.querySelector(`.webvm-toggle`)?.addEventListener(`click`,()=>Te(n,r)),n.addEventListener(`shadow-claw-terminal-slot-ready`,()=>{I(n,r.currentPage,r.terminalElement,r.terminalVisible,r.terminalPlacementFrame),L(n,r.headerMainCollapsedOverride),B(n,r.headerMainCollapsedOverride)}),e.addEventListener(`resize`,()=>{r.headerMainCollapsedOverride===null&&B(n,r.headerMainCollapsedOverride)}),t.addEventListener(`shadow-claw-navigate`,r.shadowClawNav),be()?(e.navigation.addEventListener(`navigate`,r.handleNavigationApiNavigate),r.navigationListenerAttached=!0):(r.popstateListener=()=>{K(n,r,i,o,a,new URL(e.location.href))},e.addEventListener(`popstate`,r.popstateListener),t.addEventListener(`click`,r.fallbackClickListener),r.fallbackClickListenerAttached=!0),e.addEventListener(`shadow-claw-theme-change`,e=>{let t=e.detail.theme;De(n,t),Ee(t,r.classList)}),e.addEventListener(`shadow-claw-peer-error`,e=>{let r=e.detail,i=r.remotePeerId,a=r.error;X(t,n,{mode:`info`,title:`Peer Connection Error`,message:i?`Failed to communicate with peer ${i}: ${a}`:`PeerJS error: ${a}`,confirmLabel:`Dismiss`,autoCloseSeconds:30})});let p=s.resolved;De(n,p),Ee(p,r.classList)}function ke(e){if(e===void 0)return;e.documentElement.classList.remove(re,`sc-prerender-override`);let t=e.querySelector(`shadow-claw`);t?.removeAttribute(ae),t?.removeAttribute(ie)}function Ae(e,t){if(!e)return;let n=t;if(n.navigationType===`reload`)return;let r=n?.destination?.url;if(typeof r!=`string`)return;let a=new URL(r);if(a.origin===window.location.origin&&i(a.pathname))return{parsedUrl:a,navigateEvent:n}}function je(e,t){if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return null;let n=t.composedPath(),r=null;for(let e of n)if(e instanceof HTMLAnchorElement){r=e;break}if(!r)return null;let a=r.getAttribute(`href`)||``;return!a||a.startsWith(`javascript:`)||a.startsWith(`mailto:`)||a.startsWith(`tel:`)||r.target&&r.target!==`_self`||r.origin!==e.origin||!i(r.pathname)||r.pathname===e.pathname&&r.search===e.search&&r.hash!==e.hash?null:(t.preventDefault(),`${r.pathname}${r.search}${r.hash}`)}async function Me(e,t,n){if(!t)return null;let r=t.querySelector(`.app-prompt-dialog`),i=t.querySelector(`.app-prompt-dialog__message`),a=t.querySelector(`.app-prompt-dialog__input-area`);if(!r||!i||!a)return null;if(r.open&&r.close(),i.textContent=n.question,a.replaceChildren(),Array.isArray(n.options)&&n.options.length>0){let t=e.createElement(`select`);t.className=`app-prompt-dialog__input`,t.name=`prompt-response`;for(let r of n.options){let n=e.createElement(`option`);n.value=r,n.textContent=r,t.appendChild(n)}a.appendChild(t)}else{let t=e.createElement(`input`);t.type=`text`,t.className=`app-prompt-dialog__input`,t.name=`prompt-response`,t.placeholder=`Enter your response...`,t.autocomplete=`off`,a.appendChild(t),setTimeout(()=>t.focus(),50)}return r.returnValue=``,await new Promise(e=>{let t=()=>{if(r.removeEventListener(`close`,t),r.returnValue===`submit`){let t=a.querySelector(`[name='prompt-response']`);e(t?t.value:null)}else e(null)};r.addEventListener(`close`,t),r.showModal()})}async function Ne(e,t,n,r){let i=await Me(e,t,r);ee(n.orchestrator,r.id,i)}async function Pe(e,t,n,r){let i=r.path,a=r.groupId||t.activeGroupId;if(!(!i||!e))for(let t=0;t<=3;t++)try{await n.openFile(e,i,a);return}catch(e){let n=e instanceof DOMException&&e.name===`NotFoundError`;if(t<3&&n){await new Promise(e=>setTimeout(e,150*(t+1)));continue}x(`Failed to open file from tool: ${e instanceof Error?e.message:String(e)}`,5e3);return}}async function Fe(e,t,n){n?.providerId===`llamafile`?await X(e,t,p(n.reason)):n?.providerId===`transformers_js_local`?await X(e,t,g(n.reason)):n?.providerId===`prompt_api`?await X(e,t,se(n.reason)):n?.providerId&&n.helpType&&await X(e,t,l(n.providerId,n.helpType,n.reason))}async function Ie(e,t,n,r,i,a){if(!(!r||!a?.roomId||!a?.hostPeerId)&&await X(e,t,{mode:`confirm`,title:`Room invitation`,message:`${a.fromAlias||a.fromPeerId} invited you to join "${a.roomName}".`,confirmLabel:`Join`,cancelLabel:`Decline`}))try{c(n.orchestrator,a.roomId,a.hostPeerId,a.roomName),await i.switchConversation(r,`room:${a.roomId}`),W(t,n,r,i,`chat`),b(`Joined room "${a.roomName}"`)}catch(e){x(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Le(e,t,n){let r=n.useTrailingSlash&&!t.includes(`#`)?t.endsWith(`/`)?t:t+`/`:t;n.replace?e.replaceState({},``,r):e.pushState({},``,r)}async function Re(e,t,i,a,o,s,c={replace:!1}){let l=n(r(s));if(be()){window.navigation.navigate(l,{history:c.replace?`replace`:`push`});return}l!==window.location.pathname&&Le(globalThis.history,l,{...c,useTrailingSlash:!1}),await G(e,t,i,a,o,s)}function ze(e){let t=String(e||`chat`).toLowerCase();return t===`chat`||t===`files`||t===`tasks`||t===`pages`||t===`settings`||t===`tools`||t===`channels`?t:`chat`}async function Be(e,t,n,r,i,a){let o=a.detail;o&&await Re(e,t,n,r,i,{page:ze(String(o.page||`chat`)),groupId:o.groupId,path:o.path,anchor:o.anchor})}async function Ve(e,t,n,r){await ve(e,t,n,r)}async function He(e,t,n,r){if(!n)return;let i=new URL(window.location?.href||`http://localhost/`),a=i.searchParams.get(`peer`);if(!a)return;let o=a.trim();if(o)try{let a=v(r),s=a.myPeerId;s||=ne().toLowerCase();let c=new Set(a.trustedPeerIds);c.add(o),await C(r,n,s,Array.from(c),a.serverHost,a.serverPort,a.serverPath,a.serverSecure),a.enabled||await y(r,n,`peerjs`,!0);let l=await _.ensurePeerConversation(n,o);await _.switchConversation(n,l),W(e,t,n,_,`chat`),i.searchParams.delete(`peer`);let u=`${i.pathname}${i.search}${i.hash}`;window.history.replaceState({},``,u||`/`),b(`Connected to Peer: ${o.substring(0,8)}`)}catch(e){x(`Failed to process peer parameter: ${e instanceof Error?e.message:String(e)}`,6e3)}}const Ue=`pendingShares`;function We(e){return{id:typeof e?.id==`string`?e.id:``,createdAt:typeof e?.createdAt==`number`?e.createdAt:0,title:typeof e?.title==`string`?e.title:``,text:typeof e?.text==`string`?e.text:``,url:typeof e?.url==`string`?e.url:``,fileName:typeof e?.fileName==`string`?e.fileName:``,fileType:typeof e?.fileType==`string`?e.fileType:``,fileBytes:e?.fileBytes instanceof ArrayBuffer?e.fileBytes:null}}async function Ge(e){return!e||typeof e.transaction!=`function`?[]:new Promise((t,n)=>{let r;try{r=e.transaction(Ue,`readwrite`)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`){t([]);return}n(e);return}let i=r.objectStore(Ue),a=i.getAll();a.onerror=()=>{n(a.error||Error(`Failed to read pending shares`))},a.onsuccess=()=>{let e=Array.isArray(a.result)?a.result.map(We).filter(e=>typeof e.id==`string`&&e.id.length>0).sort((e,t)=>e.createdAt-t.createdAt):[],r=i.clear();r.onerror=()=>{n(r.error||Error(`Failed to clear pending shares`))},r.onsuccess=()=>{t(e)}},r.onabort=()=>{n(r.error||Error(`Pending share transaction aborted`))}})}function Ke(e){let t=[`# Shared Content`,``];return e.title&&t.push(`Title: ${e.title}`),e.url&&t.push(`URL: ${e.url}`),e.text&&t.push(``,e.text),t.join(`
|
|
2
2
|
`).trim()+`
|
|
3
|
-
`}async function qe(e,t){let n=new Date,r=`Shared Files ${`${String(n.getFullYear())}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}`}`,i=t.groups.find(e=>e.name===r);return i?(await t.switchConversation(e,i.groupId),i.groupId):(await t.createConversation(e,r)).groupId}function Je(e,t){return(e.replace(/\\/g,`/`).split(`/`).filter(Boolean).pop()||``).replace(/\s+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``)||`${t}.txt`}async function Ye(e,t,n,r,i,a,o){if(!a)return;let
|
|
3
|
+
`}async function qe(e,t){let n=new Date,r=`Shared Files ${`${String(n.getFullYear())}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}`}`,i=t.groups.find(e=>e.name===r);return i?(await t.switchConversation(e,i.groupId),i.groupId):(await t.createConversation(e,r)).groupId}function Je(e,t){return(e.replace(/\\/g,`/`).split(`/`).filter(Boolean).pop()||``).replace(/\s+/g,`-`).replace(/[^A-Za-z0-9._-]/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``)||`${t}.txt`}async function Ye(e,t,n,r,i,a,o){if(!a)return;let s=await Ge(a);if(s.length!==0)try{let c=await qe(a,r),l=[];for(let e=0;e<s.length;e++){let t=s[e],n=`shared-${Date.now()}-${e+1}`;if(t.fileBytes instanceof ArrayBuffer){let e=Je(t.fileName||(t.fileType===`application/pdf`?`${n}.pdf`:`${n}.bin`),n);await u(a,c,e,new Uint8Array(t.fileBytes)),l.push(e);continue}let r=Je(t.fileName||`${n}.md`,n);await h(a,c,r,Ke(t)),l.push(r)}await r.loadFiles(a),W(t,n,a,r,`files`),l.length>0&&await i.openFile(a,l[0],c),b(`Imported ${l.length} shared item${l.length===1?``:`s`}.`);let d=o;if(d.searchParams.has(`share-target`)){d.searchParams.delete(`share-target`);let t=`${d.pathname}${d.search}${d.hash}`;e.history.replaceState({},``,t||`/`)}}catch(e){x(`Failed to import shared content: ${e instanceof Error?e.message:String(e)}`,6e3)}}async function Xe(e,t,n,r,i,a){if(!r)return;let o=new URL(window.location?.href||`http://localhost/`),s=(o.searchParams.get(`room`)||``).trim(),l=(o.searchParams.get(`host`)||``).trim(),u=(o.searchParams.get(`name`)||``).trim()||`Room`;if(!(!s||!l))try{let d=v(i),f=d.myPeerId;f||=ne().toLowerCase();let p=new Set(d.trustedPeerIds);p.add(l),await C(i,r,f,Array.from(p),d.serverHost,d.serverPort,d.serverPath,d.serverSecure),d.enabled||await y(i,r,`peerjs`,!0),c(i,s,l,u),await a.switchConversation(r,`room:${s}`),W(t,n,r,a,`chat`),o.searchParams.delete(`room`),o.searchParams.delete(`host`),o.searchParams.delete(`name`);let m=`${o.pathname}${o.search}${o.hash}`;e.history.replaceState({},``,m||`/`),b(`Joined room "${u}"`)}catch(e){x(`Failed to join room: ${e instanceof Error?e.message:String(e)}`,6e3)}}function Ze(e,t,n,r){e&&(S(()=>{let t=w.file;t&&(F(`file-viewer`).then(()=>{if(e&&!e.querySelector(`shadow-claw-file-viewer`)){let t=e.querySelector(`.main-content`);if(t){let e=document.createElement(`shadow-claw-file-viewer`);e.id=`file-viewer`,t.appendChild(e)}}}).catch(console.error),t.kind===`pdf`&&F(`pdf-viewer`).catch(console.error))}),S(()=>{let e=r.state;e===`idle`&&(t.previousOrchestratorState===`thinking`||t.previousOrchestratorState===`responding`)&&b(`Response complete`,2500),t.previousOrchestratorState=e}),S(()=>{let i=r.activePage;i!==t.currentPage&&W(e,t,n,r,i,!1)}),S(()=>{r.activityLog,R(e,t.currentPage,r.activityLog.length)}))}const Qe=new CSSStyleSheet;Qe.replaceSync(`*,
|
|
4
4
|
*::before,
|
|
5
5
|
*::after {
|
|
6
6
|
box-sizing: border-box;
|
|
@@ -1121,4 +1121,4 @@ shadow-claw-conversations {
|
|
|
1121
1121
|
</shadow-claw-dialog>
|
|
1122
1122
|
</div>
|
|
1123
1123
|
</template>
|
|
1124
|
-
`,`text/html`),$e=$.querySelector(`template`);let et=[];et=$e?Array.from($e.content.children):Array.from($.head.children).concat(Array.from($.body.children));var tt=et;const nt=`shadow-claw`;var rt=class extends
|
|
1124
|
+
`,`text/html`),$e=$.querySelector(`template`);let et=[];et=$e?Array.from($e.content.children):Array.from($.head.children).concat(Array.from($.body.children));var tt=et;const nt=`shadow-claw`;var rt=class extends oe{static styles=Qe;static template=tt;activityLogCollapsedOverride=null;chatSidebarHidden=!1;chatSplitViewEnabled=!1;currentPage=_.sidebarDefaultPage;db=null;fallbackClickListenerAttached=!1;filesSidebarHidden=!1;headerMainCollapsedOverride=null;navigationListenerAttached=!1;orchestrator;pagesSidebarHidden=!1;popstateListener=null;previousOrchestratorState=`idle`;tasksSidebarHidden=!1;terminalElement=null;terminalPlacementFrame=null;terminalVisible=!1;vmStatus={ready:!1,booting:!1,bootAttempted:!1,error:null};vmStatusCleanup=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);try{let{Orchestrator:e}=await import(`./orchestrator-CMbCTjBf.js`);Promise.all([import(`./shadow-claw-conversations-BWs5VVfs.js`),import(`./shadow-claw-dialog-BrOwAOdk.js`),import(`./shadow-claw-toast-BkrQIP-3.js`)]).catch(console.error),await new Promise(e=>{`requestIdleCallback`in window?window.requestIdleCallback(()=>e(null)):setTimeout(e,0)}),this.orchestrator||=new e,this.db=await this.orchestrator.init(),await _.init(this.db,this.orchestrator),a(this.db),await this.render();let t=_.activePage===`pages`&&this.pagesSidebarHidden||_.activePage===`chat`&&this.chatSidebarHidden||_.activePage===`tasks`&&this.tasksSidebarHidden||_.activePage===`files`&&this.filesSidebarHidden;_.hadPersistedActivePage&&!t?W(this.shadowRoot,this,this.db,_,_.activePage,!1):t?W(this.shadowRoot,this,this.db,_,N(_,this),!1):W(this.shadowRoot,this,this.db,_,_.activePage,!1),await K(this.shadowRoot,this,this.db,w,_,new URL(window.location.href)),await He(this.shadowRoot,this,this.db,this.orchestrator),await Xe(window,this.shadowRoot,this,this.db,this.orchestrator,_),await Ye(window,this.shadowRoot,this,_,w,this.db,new URL(window.location.href)),console.log(`ShadowClaw UI initialized`),typeof customElements<`u`&&await customElements.whenDefined(`shadow-claw-${this.currentPage}`);let{isMemoryStorageFallbackActive:n}=await import(`./memoryStorage-C0KvLNUp.js`).then(e=>e.n);if(n()){let{showWarning:e}=await import(`./toast-BXgUfbyh.js`).then(e=>e.c);e(`Private Browsing / Limited Storage: Operating in temporary in-memory mode. Files and changes will not persist across page reloads.`,7e3)}_.setReady()}finally{ke(document)}}disconnectedCallback(){if(super.disconnectedCallback(),this.vmStatusCleanup&&=(this.vmStatusCleanup(),null),this.terminalPlacementFrame!==null&&(cancelAnimationFrame(this.terminalPlacementFrame),this.terminalPlacementFrame=null),document.removeEventListener(`shadow-claw-navigate`,this.shadowClawNav),this.popstateListener&&=(window.removeEventListener(`popstate`,this.popstateListener),null),this.fallbackClickListenerAttached&&=(document.removeEventListener(`click`,this.fallbackClickListener),!1),this.navigationListenerAttached){let e=window.navigation;e&&typeof e.removeEventListener==`function`&&e.removeEventListener(`navigate`,this.handleNavigationApiNavigate),this.navigationListenerAttached=!1}}addCleanup(e){super.addCleanup(e)}fallbackClickListener=e=>{if(typeof window>`u`||!window.location)return;let t=je(window.location,e);t&&(Le(globalThis.history,t,{replace:!1,useTrailingSlash:!1}),K(this.shadowRoot,this,this.db,w,_,new URL(window.location.href)))};handleNavigationApiNavigate=e=>{let{parsedUrl:t,navigateEvent:n}=Ae(this.db,e)??{};!t||!n||typeof n.intercept==`function`&&n.intercept({handler:async()=>{let{parseRouteFromUrlAsync:e}=await import(`./app-routes-Bs-riIvr.js`).then(e=>e.t),n=await e(t,_.activeGroupId);n&&await G(this.shadowRoot,this,this.db,w,_,n)}})};shadowClawNav=e=>{!this.shadowRoot||!this.db||Be(this.shadowRoot,this,this.db,w,_,e)};async render(){if(Oe(window,document,this.shadowRoot,this,this.db,_,w,j,new URL(window.location.href)),await Ve(this.shadowRoot,this,_,this.db),this.db)try{let{getConfig:e}=await import(`./getConfig-D89uJgo5.js`).then(e=>e.n),{parseConfigBoolean:t}=await import(`./parseConfigBoolean-ByjZr9OM.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-CrHchneq.js`).then(e=>e.k),r=await e(this.db,n.CHAT_SPLIT_VIEW_ENABLED);this.chatSplitViewEnabled=t(r)}catch{this.chatSplitViewEnabled=!1}let e=this.shadowRoot?.querySelector(`.chat-split-resize-handle`);if(this.shadowRoot&&e instanceof HTMLElement){let{initChatSplitResize:t}=await import(`./initChatSplitResize-CzV2E7Ul.js`);await t(this.shadowRoot,this,e,this.db)}this.terminalElement=document.createElement(`shadow-claw-terminal`),this.terminalElement&&(this.terminalElement.orchestrator=this.orchestrator),V(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),I(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame),L(this.shadowRoot,this.headerMainCollapsedOverride),B(this.shadowRoot,this.headerMainCollapsedOverride),R(this.shadowRoot,this.currentPage,_.activityLog.length);let t=e=>{this.vmStatus=e,e.error&&this.terminalVisible&&(this.terminalVisible=!1,this.terminalElement&&(this.terminalElement.hidden=!0),I(this.shadowRoot,this.currentPage,this.terminalElement,this.terminalVisible,this.terminalPlacementFrame)),V(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus)};this.vmStatus=this.orchestrator.vmStatus||this.vmStatus,V(this.shadowRoot,this.currentPage,this.terminalVisible,this.vmStatus),this.orchestrator.events.on?.(`vm-status`,t),this.vmStatusCleanup=()=>{this.orchestrator.events.off?.(`vm-status`,t)},this.orchestrator.events.on(`open-file`,e=>Pe(this.db,_,w,e)),this.orchestrator.events.on(`provider-help`,e=>Fe(document,this.shadowRoot,e)),this.orchestrator.events.on(`room-invite`,e=>Ie(document,this.shadowRoot,this,this.db,_,e)),this.orchestrator.events.on(`ask-user`,e=>Ne(document,this.shadowRoot,this,e)),Ze(this.shadowRoot,this,this.db,_)}async requestDialog(e){return X(document,this.shadowRoot,e)}};customElements.get(nt)||customElements.define(nt,rt);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as e,r as t}from"./config-CrHchneq.js";import{n}from"./txPromise-EBECky1b.js";import{t as r}from"./getConfig-D89uJgo5.js";import{m as i,u as a}from"./custom-element-security-
|
|
1
|
+
import{b as e,r as t}from"./config-CrHchneq.js";import{n}from"./txPromise-EBECky1b.js";import{t as r}from"./getConfig-D89uJgo5.js";import{m as i,u as a}from"./custom-element-security-FU04Cq05.js";import{a as o,r as s}from"./toast-BXgUfbyh.js";import{t as c}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-card-DCxWEHgX.js";import"./shadow-claw-empty-state-Bl52dGQ0.js";function l(e){return!e||e.authMode===`token`||e.authMode===`token`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}const u=new CSSStyleSheet;u.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{n}from"./txPromise-EBECky1b.js";import{
|
|
1
|
+
import{i as e,t}from"./rolldown-runtime-aKtaBQYM.js";import{n}from"./txPromise-EBECky1b.js";import{B as r,F as i,Jt as a,L as o,_t as s,mt as c,nt as l,pt as u,rt as d,t as f,vt as p,xt as m,yt as h,z as g}from"./orchestrator-DHjdLtqa.js";import{t as _}from"./ulid-BY7rQVLN.js";import{a as v,r as y,s as b}from"./toast-BXgUfbyh.js";import{t as x}from"./shadow-claw-element-DIrv3P6A.js";import{t as S}from"./effect-BJCrpFdp.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import{t as C}from"./configurePeerJs-BqgeBjP7.js";import"./shadow-claw-page-header-BccSHItx.js";var w=t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),T=t((e=>{let t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),E=t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),D=t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),ee=t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),te=t((e=>{let t=T().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),ne=t((e=>{let t=T().getSymbolSize;e.getPositions=function(e){let n=t(e);return[[0,0],[n-7,0],[0,n-7]]}})),O=t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};let t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),k=t((e=>{let t=E(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),re=t((e=>{let t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),A=t((e=>{let t=re();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),ie=t(((e,t)=>{let n=A();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),j=t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),M=t((e=>{let t=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;t=t.replace(/u/g,`\\u`);let n=`(?:(?![A-Z0-9 $%*+\\-./:]|`+t+`)(?:.|[\r
|
|
2
2
|
]))+`;e.KANJI=new RegExp(t,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(n,`g`),e.NUMERIC=RegExp(`[0-9]+`,`g`),e.ALPHANUMERIC=RegExp(`[A-Z $%*+\\-./:]+`,`g`);let r=RegExp(`^`+t+`$`),i=RegExp(`^[0-9]+$`),a=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return r.test(e)},e.testNumeric=function(e){return i.test(e)},e.testAlphanumeric=function(e){return a.test(e)}})),N=t((e=>{let t=j(),n=M();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),ae=t((e=>{let t=T(),n=k(),r=E(),i=N(),a=j(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),oe=t((e=>{let t=T(),n=1335,r=t.getBCHDigit(n);e.getEncodedBits=function(e,i){let a=e.bit<<3|i,o=a<<10;for(;t.getBCHDigit(o)-r>=0;)o^=n<<t.getBCHDigit(o)-r;return(a<<10|o)^21522}})),se=t(((e,t)=>{let n=N();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),ce=t(((e,t)=>{let n=N(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),le=t(((e,t)=>{let n=N();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),ue=t(((e,t)=>{let n=N(),r=T();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
|
|
3
3
|
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),de=t(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),fe=t((e=>{let t=N(),n=se(),r=ce(),i=le(),a=ue(),o=M(),s=T(),c=de();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
|
|
4
4
|
Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),pe=t((e=>{let t=T(),n=E(),r=D(),i=ee(),a=te(),o=ne(),s=O(),c=k(),l=ie(),u=ae(),d=oe(),f=N(),p=fe();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
|
|
@@ -534,11 +534,11 @@ Minimum version required to store current data is: `+c+`.
|
|
|
534
534
|
</div>
|
|
535
535
|
</div>
|
|
536
536
|
</template>
|
|
537
|
-
`,`text/html`),z=R.querySelector(`template`);let B=[];B=z?Array.from(z.content.children):Array.from(R.head.children).concat(Array.from(R.body.children));var he=B;const V=`shadow-claw-peerjs`;var ge=class extends x{static styles=L;static template=he;db=null;orchestrator=null;_currentPeerUrl=``;_currentRoomUrl=``;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await n(),this.orchestrator=h.orchestrator,this.bindEventListeners(),this.setupEffects(),await this.render()}disconnectedCallback(){super.disconnectedCallback()}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-action="save-peerjs-config"]`)?.addEventListener(`click`,()=>this.savePeerJsConfig()),e.querySelector(`[data-action="generate-peer-id"]`)?.addEventListener(`click`,()=>this.generatePeerId()),e.querySelector(`[data-action="copy-peer-id"]`)?.addEventListener(`click`,()=>this.copyPeerId()),e.querySelector(`[data-action="copy-peer-url"]`)?.addEventListener(`click`,()=>this.copyPeerUrl()),e.querySelector(`[data-action="add-trusted-peer"]`)?.addEventListener(`click`,()=>{let t=e.querySelector(`[data-setting="peerjs-new-trusted-id-input"]`),n=e.querySelector(`[data-setting="peerjs-new-trusted-alias-input"]`),r=t?.value?.trim(),i=n?.value?.trim();r&&(this._appendTrustedPeerRow(r,i||``),t&&(t.value=``),n&&(n.value=``))}),e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.addEventListener(`input`,()=>this.updateQrCode()),e.querySelector(`[data-action="create-room"]`)?.addEventListener(`click`,()=>this.createRoom()),e.querySelector(`[data-action="copy-room-url"]`)?.addEventListener(`click`,()=>this.copyRoomUrl()))}createRoom(){let e=this.shadowRoot,t=this.getOrchestrator();if(!e||!t)return;let n=e.querySelector(`[data-setting="room-new-name-input"]`),a=(n?.value||``).trim();if(!a){i(`Enter a room name.`,3e3);return}try{let e=s(t,a);n&&(n.value=``),r(`Room "${e.name}" created.`,2500),this.showRoomQr(e)}catch(e){i(`Failed to create room: ${e instanceof Error?e.message:String(e)}`,5e3)}}generatePeerId(){let e=this.shadowRoot;if(!e)return;let t=b().toLowerCase(),n=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`);n&&(n.value=t),this.updateQrCode()}getOrchestrator(){let e=h.orchestrator;return e&&(this.orchestrator=e),this.orchestrator}invitePeerToRoom(e,t){let n=this.getOrchestrator();n&&(l(n,e.roomId,t)?r(`Invited ${t.substring(0,8)} to "${e.name}".`,2500):i(`Failed to invite peer (are you the host?).`,4e3))}renderRooms(){let e=this.shadowRoot;if(!e)return;let t=this.getOrchestrator(),n=e.querySelector(`[data-info="rooms-list"]`);if(!n)return;let a=o(t)??[],s=new Set(t?.peerjs?.connectedPeersSignal?.get()??[]),l=t?g(t).myPeerId:``;if(n.textContent=``,!a.length){let e=document.createElement(`div`);e.className=`form-status`,e.textContent=`No rooms yet.`,n.appendChild(e);return}let u=this._trustedPeerOptions();a.forEach(e=>{let a=e.hostPeerId===l,o=document.createElement(`div`);o.className=`peerjs-room-card`;let d=document.createElement(`div`);d.className=`peerjs-room-header`;let f=document.createElement(`strong`);if(f.textContent=e.name,d.appendChild(f),a){let e=document.createElement(`span`);e.className=`peerjs-room-badge`,e.textContent=`Host`,d.appendChild(e)}o.appendChild(d);let p=document.createElement(`div`);p.className=`peerjs-room-roster`,e.members.forEach(e=>{let t=document.createElement(`span`);t.className=`peerjs-room-member`;let n=e.peerId===l||s.has(e.peerId),r=e.kind===`agent`?`🤖`:`🧑`;t.textContent=`${n?`🟢`:`⚪️`} ${r} ${e.alias||e.peerId}`,t.title=e.peerId,p.appendChild(t)}),o.appendChild(p);let m=document.createElement(`div`);m.className=`peerjs-room-actions`;let h=document.createElement(`button`);if(h.type=`button`,h.className=`save-btn save-btn--secondary`,h.textContent=`Open`,h.addEventListener(`click`,()=>{document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`chat`,groupId:c(e.roomId)},bubbles:!0,composed:!0}))}),m.appendChild(h),a){let t=document.createElement(`select`);t.className=`form-input peerjs-room-invite-select`;let n=document.createElement(`option`);n.value=``,n.textContent=u.length?`Invite trusted peer…`:`No trusted peers`,t.appendChild(n),u.filter(t=>!e.members.some(e=>e.peerId===t.id)).forEach(e=>{let n=document.createElement(`option`);n.value=e.id,n.textContent=e.label,t.appendChild(n)}),m.appendChild(t);let r=document.createElement(`button`);r.type=`button`,r.className=`save-btn save-btn--secondary`,r.textContent=`Invite`,r.addEventListener(`click`,()=>{let n=t.value.trim();if(!n){i(`Select a trusted peer to invite.`,3e3);return}this.invitePeerToRoom(e,n),t.value=``}),m.appendChild(r);let a=document.createElement(`button`);a.type=`button`,a.className=`save-btn save-btn--secondary`,a.textContent=`🔗 Link / QR`,a.addEventListener(`click`,()=>{this.showRoomQr(e)}),m.appendChild(a)}let g=document.createElement(`button`);g.type=`button`,g.className=`save-btn save-btn--danger`,g.textContent=a?`Disband`:`Leave`,g.addEventListener(`click`,()=>{y(t,e.roomId),r(a?`Room disbanded.`:`Left room.`,2500)}),m.appendChild(g),o.appendChild(m),n.appendChild(o)})}setupEffects(){this.addCleanup(S(()=>{if(!h.ready)return;let e=this.getOrchestrator();e&&(e.peerjs?.connectedPeersSignal?.get(),e.roomManager?.roomsSignal?.get()),this.render()}))}async copyPeerId(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.value?.trim()||``;if(!t){i(`No Peer ID to copy.`,3e3);return}try{await navigator.clipboard.writeText(t),r(`Peer ID copied to clipboard`,2500)}catch{i(`Failed to copy Peer ID.`,3e3)}}async copyPeerUrl(){if(!this._currentPeerUrl){i(`No connection URL available. Enter a Peer ID first.`,3e3);return}try{await navigator.clipboard.writeText(this._currentPeerUrl),r(`Connection URL copied to clipboard`,2500)}catch{i(`Failed to copy connection URL.`,3e3)}}async copyRoomUrl(){if(!this._currentRoomUrl){i(`Create or select a room first.`,3e3);return}try{await navigator.clipboard.writeText(this._currentRoomUrl),r(`Room link copied to clipboard`,2500)}catch{i(`Failed to copy room link.`,3e3)}}async render(){let e=this.getOrchestrator(),t=this.shadowRoot;if(!t||!e)return;let n=g(e),r=t.querySelector(`[data-setting="peerjs-enabled-toggle"]`);r&&(r.checked=n.enabled);let i=t.querySelector(`[data-info="peerjs-channel-status"]`);i&&(i.textContent=n.enabled?`PeerJS channel is enabled.`:`PeerJS channel is disabled. Saved settings are retained.`);let a=t.querySelector(`[data-setting="peerjs-my-peer-id-input"]`);a&&(a.value=n.myPeerId);let o=t.querySelector(`[data-setting="peerjs-my-alias-input"]`);o&&(o.value=n.myAlias);let s=t.querySelector(`[data-info="peerjs-trusted-peers-list"]`);s&&s.children.length===0&&n.trustedPeerIds.length>0&&n.trustedPeerIds.forEach(e=>{let t=``;if(n.peerAliases){for(let[r,i]of Object.entries(n.peerAliases))if(i===e){t=r;break}}this._appendTrustedPeerRow(e,t)});let c=t.querySelector(`[data-info="peerjs-trusted-ids-status"]`);c&&(c.innerHTML=``,n.trustedPeerIds.length?(c.appendChild(document.createTextNode(`Connect to Trusted Peers: `)),n.trustedPeerIds.forEach(e=>{let t=e;if(n.peerAliases){for(let[r,i]of Object.entries(n.peerAliases))if(i===e){t=r;break}}let r=document.createElement(`button`);r.className=`save-btn save-btn--secondary`,r.style.padding=`0.25rem 0.5rem`,r.style.fontSize=`0.75rem`,r.style.margin=`0.25rem 0.25rem 0.25rem 0`,r.textContent=t,r.addEventListener(`click`,()=>{document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`chat`,groupId:`peer:${e}`},bubbles:!0,composed:!0}))}),c.appendChild(r)})):c.textContent=`Accepting connections from any peer.`);let l=t.querySelector(`[data-setting="peerjs-server-host-input"]`);l&&(l.value=n.serverHost);let u=t.querySelector(`[data-setting="peerjs-server-port-input"]`);u&&(u.value=n.serverPort?String(n.serverPort):``);let d=t.querySelector(`[data-setting="peerjs-server-path-input"]`);d&&(d.value=n.serverPath);let f=t.querySelector(`[data-setting="peerjs-server-secure-toggle"]`);f&&(f.checked=n.serverSecure),await this.updateConnectionStatus(),await this.updateQrCode(),this.renderRooms()}async savePeerJsConfig(){let e=this.getOrchestrator();if(!e||!this.db)return;let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="peerjs-my-peer-id-input"]`),a=t.querySelector(`[data-setting="peerjs-my-alias-input"]`),o=t.querySelector(`[data-setting="peerjs-server-host-input"]`),s=t.querySelector(`[data-setting="peerjs-server-port-input"]`),c=t.querySelector(`[data-setting="peerjs-server-path-input"]`),l=t.querySelector(`[data-setting="peerjs-server-secure-toggle"]`),u=t.querySelector(`[data-setting="peerjs-enabled-toggle"]`),d=(n?.value||``).trim();d||(d=b().toLowerCase(),n&&(n.value=d));let p=(a?.value||``).trim(),h=[],g={};t.querySelectorAll(`.peerjs-trusted-peer-row`).forEach(e=>{let t=e.querySelector(`input[data-id]`),n=e.querySelector(`.alias-input`);if(t&&t.value){let e=t.value.trim();h.push(e),n&&n.value.trim()&&(g[n.value.trim()]=e)}});let v=(o?.value||``).trim(),y=parseInt(s?.value||`0`,10)||0,x=(c?.value||``).trim(),S=!!l?.checked,w=!!u?.checked;try{await C(e,this.db,d,h,v,y,x,S),await f(e,this.db,p),await m(e,this.db,g),await _(e,this.db,`peerjs`,w),await this.render(),r(`PeerJS settings saved`,3e3)}catch(e){i(`Error saving PeerJS settings: ${e instanceof Error?e.message:String(e)}`,6e3)}}async showRoomQr(e){let t=this.shadowRoot;if(!t)return;let n=this._buildRoomUrl(e);this._currentRoomUrl=n;let r=t.querySelector(`[data-info="room-qr-group"]`),i=t.querySelector(`[data-info="room-qr-label"]`),a=t.querySelector(`[data-info="room-qr-url"]`),o=t.querySelector(`[data-info="room-qr-canvas"]`);if(r&&(r.hidden=!1),i&&(i.textContent=`QR Code — Share to Join "${e.name}"`),a&&(a.textContent=n),o)try{await I.toCanvas(o,n,{width:180,margin:1,color:{dark:`#000000`,light:`#ffffff`}})}catch(e){console.error(`Room QR code render error:`,e)}}async updateConnectionStatus(){let e=this.shadowRoot;if(!e)return;let t=this.getOrchestrator(),n=e.querySelector(`[data-info="peerjs-connection-status"]`);if(!n)return;if(!t){n.textContent=`Not connected.`;return}let r=t.peerjs?.connectedPeersSignal?.get()||[];r.length===0?n.textContent=`Not connected.`:n.textContent=`Connected to: ${r.join(`, `)}`}async updateQrCode(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.value?.trim()||``,n=e.querySelector(`[data-info="peerjs-qr-group"]`),r=e.querySelector(`[data-info="peerjs-qr-canvas"]`),i=e.querySelector(`[data-info="peerjs-qr-url"]`);if(!t){n&&(n.hidden=!0),this._currentPeerUrl=``;return}let a=`${window.location.origin}${window.location.pathname}?peer=${encodeURIComponent(t)}`;if(this._currentPeerUrl=a,n&&(n.hidden=!1),i&&(i.textContent=a),r)try{await I.toCanvas(r,a,{width:180,margin:1,color:{dark:`#000000`,light:`#ffffff`}})}catch(e){console.error(`PeerJS QR code render error:`,e)}}_appendTrustedPeerRow(e,t){let n=this.shadowRoot;if(!n)return;let r=n.querySelector(`[data-info="peerjs-trusted-peers-list"]`);if(!r||r.querySelector(`input[data-id="${e}"]`))return;let i=document.createElement(`div`);i.style.display=`flex`,i.style.gap=`0.5rem`,i.style.alignItems=`center`,i.className=`peerjs-trusted-peer-row`,i.innerHTML=`
|
|
537
|
+
`,`text/html`),z=R.querySelector(`template`);let B=[];B=z?Array.from(z.content.children):Array.from(R.head.children).concat(Array.from(R.body.children));var he=B;const V=`shadow-claw-peerjs`;var ge=class extends x{static styles=L;static template=he;db=null;orchestrator=null;_currentPeerUrl=``;_currentRoomUrl=``;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await n(),this.orchestrator=f.orchestrator,this.bindEventListeners(),this.setupEffects(),await this.render()}disconnectedCallback(){super.disconnectedCallback()}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-action="save-peerjs-config"]`)?.addEventListener(`click`,()=>this.savePeerJsConfig()),e.querySelector(`[data-action="generate-peer-id"]`)?.addEventListener(`click`,()=>this.generatePeerId()),e.querySelector(`[data-action="copy-peer-id"]`)?.addEventListener(`click`,()=>this.copyPeerId()),e.querySelector(`[data-action="copy-peer-url"]`)?.addEventListener(`click`,()=>this.copyPeerUrl()),e.querySelector(`[data-action="add-trusted-peer"]`)?.addEventListener(`click`,()=>{let t=e.querySelector(`[data-setting="peerjs-new-trusted-id-input"]`),n=e.querySelector(`[data-setting="peerjs-new-trusted-alias-input"]`),r=t?.value?.trim(),i=n?.value?.trim();r&&(this._appendTrustedPeerRow(r,i||``),t&&(t.value=``),n&&(n.value=``))}),e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.addEventListener(`input`,()=>this.updateQrCode()),e.querySelector(`[data-action="create-room"]`)?.addEventListener(`click`,()=>this.createRoom()),e.querySelector(`[data-action="copy-room-url"]`)?.addEventListener(`click`,()=>this.copyRoomUrl()))}createRoom(){let e=this.shadowRoot,t=this.getOrchestrator();if(!e||!t)return;let n=e.querySelector(`[data-setting="room-new-name-input"]`),r=(n?.value||``).trim();if(!r){y(`Enter a room name.`,3e3);return}try{let e=i(t,r);n&&(n.value=``),v(`Room "${e.name}" created.`,2500),this.showRoomQr(e)}catch(e){y(`Failed to create room: ${e instanceof Error?e.message:String(e)}`,5e3)}}generatePeerId(){let e=this.shadowRoot;if(!e)return;let t=_().toLowerCase(),n=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`);n&&(n.value=t),this.updateQrCode()}getOrchestrator(){let e=f.orchestrator;return e&&(this.orchestrator=e),this.orchestrator}invitePeerToRoom(e,t){let n=this.getOrchestrator();n&&(o(n,e.roomId,t)?v(`Invited ${t.substring(0,8)} to "${e.name}".`,2500):y(`Failed to invite peer (are you the host?).`,4e3))}renderRooms(){let e=this.shadowRoot;if(!e)return;let t=this.getOrchestrator(),n=e.querySelector(`[data-info="rooms-list"]`);if(!n)return;let i=r(t)??[],o=new Set(t?.peerjs?.connectedPeersSignal?.get()??[]),s=t?p(t).myPeerId:``;if(n.textContent=``,!i.length){let e=document.createElement(`div`);e.className=`form-status`,e.textContent=`No rooms yet.`,n.appendChild(e);return}let c=this._trustedPeerOptions();i.forEach(e=>{let r=e.hostPeerId===s,i=document.createElement(`div`);i.className=`peerjs-room-card`;let l=document.createElement(`div`);l.className=`peerjs-room-header`;let u=document.createElement(`strong`);if(u.textContent=e.name,l.appendChild(u),r){let e=document.createElement(`span`);e.className=`peerjs-room-badge`,e.textContent=`Host`,l.appendChild(e)}i.appendChild(l);let d=document.createElement(`div`);d.className=`peerjs-room-roster`,e.members.forEach(e=>{let t=document.createElement(`span`);t.className=`peerjs-room-member`;let n=e.peerId===s||o.has(e.peerId),r=e.kind===`agent`?`🤖`:`🧑`;t.textContent=`${n?`🟢`:`⚪️`} ${r} ${e.alias||e.peerId}`,t.title=e.peerId,d.appendChild(t)}),i.appendChild(d);let f=document.createElement(`div`);f.className=`peerjs-room-actions`;let p=document.createElement(`button`);if(p.type=`button`,p.className=`save-btn save-btn--secondary`,p.textContent=`Open`,p.addEventListener(`click`,()=>{document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`chat`,groupId:a(e.roomId)},bubbles:!0,composed:!0}))}),f.appendChild(p),r){let t=document.createElement(`select`);t.className=`form-input peerjs-room-invite-select`;let n=document.createElement(`option`);n.value=``,n.textContent=c.length?`Invite trusted peer…`:`No trusted peers`,t.appendChild(n),c.filter(t=>!e.members.some(e=>e.peerId===t.id)).forEach(e=>{let n=document.createElement(`option`);n.value=e.id,n.textContent=e.label,t.appendChild(n)}),f.appendChild(t);let r=document.createElement(`button`);r.type=`button`,r.className=`save-btn save-btn--secondary`,r.textContent=`Invite`,r.addEventListener(`click`,()=>{let n=t.value.trim();if(!n){y(`Select a trusted peer to invite.`,3e3);return}this.invitePeerToRoom(e,n),t.value=``}),f.appendChild(r);let i=document.createElement(`button`);i.type=`button`,i.className=`save-btn save-btn--secondary`,i.textContent=`🔗 Link / QR`,i.addEventListener(`click`,()=>{this.showRoomQr(e)}),f.appendChild(i)}let m=document.createElement(`button`);m.type=`button`,m.className=`save-btn save-btn--danger`,m.textContent=r?`Disband`:`Leave`,m.addEventListener(`click`,()=>{g(t,e.roomId),v(r?`Room disbanded.`:`Left room.`,2500)}),f.appendChild(m),i.appendChild(f),n.appendChild(i)})}setupEffects(){this.addCleanup(S(()=>{if(!f.ready)return;let e=this.getOrchestrator();e&&(e.peerjs?.connectedPeersSignal?.get(),e.roomManager?.roomsSignal?.get()),this.render()}))}async copyPeerId(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.value?.trim()||``;if(!t){y(`No Peer ID to copy.`,3e3);return}try{await navigator.clipboard.writeText(t),v(`Peer ID copied to clipboard`,2500)}catch{y(`Failed to copy Peer ID.`,3e3)}}async copyPeerUrl(){if(!this._currentPeerUrl){y(`No connection URL available. Enter a Peer ID first.`,3e3);return}try{await navigator.clipboard.writeText(this._currentPeerUrl),v(`Connection URL copied to clipboard`,2500)}catch{y(`Failed to copy connection URL.`,3e3)}}async copyRoomUrl(){if(!this._currentRoomUrl){y(`Create or select a room first.`,3e3);return}try{await navigator.clipboard.writeText(this._currentRoomUrl),v(`Room link copied to clipboard`,2500)}catch{y(`Failed to copy room link.`,3e3)}}async render(){let e=this.getOrchestrator(),t=this.shadowRoot;if(!t||!e)return;let n=p(e),r=t.querySelector(`[data-setting="peerjs-enabled-toggle"]`);r&&(r.checked=n.enabled);let i=t.querySelector(`[data-info="peerjs-channel-status"]`);i&&(i.textContent=n.enabled?`PeerJS channel is enabled.`:`PeerJS channel is disabled. Saved settings are retained.`);let a=t.querySelector(`[data-setting="peerjs-my-peer-id-input"]`);a&&(a.value=n.myPeerId);let o=t.querySelector(`[data-setting="peerjs-my-alias-input"]`);o&&(o.value=n.myAlias);let s=t.querySelector(`[data-info="peerjs-trusted-peers-list"]`);s&&s.children.length===0&&n.trustedPeerIds.length>0&&n.trustedPeerIds.forEach(e=>{let t=``;if(n.peerAliases){for(let[r,i]of Object.entries(n.peerAliases))if(i===e){t=r;break}}this._appendTrustedPeerRow(e,t)});let c=t.querySelector(`[data-info="peerjs-trusted-ids-status"]`);c&&(c.innerHTML=``,n.trustedPeerIds.length?(c.appendChild(document.createTextNode(`Connect to Trusted Peers: `)),n.trustedPeerIds.forEach(e=>{let t=e;if(n.peerAliases){for(let[r,i]of Object.entries(n.peerAliases))if(i===e){t=r;break}}let r=document.createElement(`button`);r.className=`save-btn save-btn--secondary`,r.style.padding=`0.25rem 0.5rem`,r.style.fontSize=`0.75rem`,r.style.margin=`0.25rem 0.25rem 0.25rem 0`,r.textContent=t,r.addEventListener(`click`,()=>{document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`chat`,groupId:`peer:${e}`},bubbles:!0,composed:!0}))}),c.appendChild(r)})):c.textContent=`Accepting connections from any peer.`);let l=t.querySelector(`[data-setting="peerjs-server-host-input"]`);l&&(l.value=n.serverHost);let u=t.querySelector(`[data-setting="peerjs-server-port-input"]`);u&&(u.value=n.serverPort?String(n.serverPort):``);let d=t.querySelector(`[data-setting="peerjs-server-path-input"]`);d&&(d.value=n.serverPath);let f=t.querySelector(`[data-setting="peerjs-server-secure-toggle"]`);f&&(f.checked=n.serverSecure),await this.updateConnectionStatus(),await this.updateQrCode(),this.renderRooms()}async savePeerJsConfig(){let e=this.getOrchestrator();if(!e||!this.db)return;let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="peerjs-my-peer-id-input"]`),r=t.querySelector(`[data-setting="peerjs-my-alias-input"]`),i=t.querySelector(`[data-setting="peerjs-server-host-input"]`),a=t.querySelector(`[data-setting="peerjs-server-port-input"]`),o=t.querySelector(`[data-setting="peerjs-server-path-input"]`),s=t.querySelector(`[data-setting="peerjs-server-secure-toggle"]`),c=t.querySelector(`[data-setting="peerjs-enabled-toggle"]`),u=(n?.value||``).trim();u||(u=_().toLowerCase(),n&&(n.value=u));let f=(r?.value||``).trim(),p=[],h={};t.querySelectorAll(`.peerjs-trusted-peer-row`).forEach(e=>{let t=e.querySelector(`input[data-id]`),n=e.querySelector(`.alias-input`);if(t&&t.value){let e=t.value.trim();p.push(e),n&&n.value.trim()&&(h[n.value.trim()]=e)}});let g=(i?.value||``).trim(),b=parseInt(a?.value||`0`,10)||0,x=(o?.value||``).trim(),S=!!s?.checked,w=!!c?.checked;try{await C(e,this.db,u,p,g,b,x,S),await l(e,this.db,f),await d(e,this.db,h),await m(e,this.db,`peerjs`,w),await this.render(),v(`PeerJS settings saved`,3e3)}catch(e){y(`Error saving PeerJS settings: ${e instanceof Error?e.message:String(e)}`,6e3)}}async showRoomQr(e){let t=this.shadowRoot;if(!t)return;let n=this._buildRoomUrl(e);this._currentRoomUrl=n;let r=t.querySelector(`[data-info="room-qr-group"]`),i=t.querySelector(`[data-info="room-qr-label"]`),a=t.querySelector(`[data-info="room-qr-url"]`),o=t.querySelector(`[data-info="room-qr-canvas"]`);if(r&&(r.hidden=!1),i&&(i.textContent=`QR Code — Share to Join "${e.name}"`),a&&(a.textContent=n),o)try{await I.toCanvas(o,n,{width:180,margin:1,color:{dark:`#000000`,light:`#ffffff`}})}catch(e){console.error(`Room QR code render error:`,e)}}async updateConnectionStatus(){let e=this.shadowRoot;if(!e)return;let t=this.getOrchestrator(),n=e.querySelector(`[data-info="peerjs-connection-status"]`);if(!n)return;if(!t){n.textContent=`Not connected.`;return}let r=t.peerjs?.connectedPeersSignal?.get()||[];r.length===0?n.textContent=`Not connected.`:n.textContent=`Connected to: ${r.join(`, `)}`}async updateQrCode(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="peerjs-my-peer-id-input"]`)?.value?.trim()||``,n=e.querySelector(`[data-info="peerjs-qr-group"]`),r=e.querySelector(`[data-info="peerjs-qr-canvas"]`),i=e.querySelector(`[data-info="peerjs-qr-url"]`);if(!t){n&&(n.hidden=!0),this._currentPeerUrl=``;return}let a=`${window.location.origin}${window.location.pathname}?peer=${encodeURIComponent(t)}`;if(this._currentPeerUrl=a,n&&(n.hidden=!1),i&&(i.textContent=a),r)try{await I.toCanvas(r,a,{width:180,margin:1,color:{dark:`#000000`,light:`#ffffff`}})}catch(e){console.error(`PeerJS QR code render error:`,e)}}_appendTrustedPeerRow(e,t){let n=this.shadowRoot;if(!n)return;let r=n.querySelector(`[data-info="peerjs-trusted-peers-list"]`);if(!r||r.querySelector(`input[data-id="${e}"]`))return;let i=document.createElement(`div`);i.style.display=`flex`,i.style.gap=`0.5rem`,i.style.alignItems=`center`,i.className=`peerjs-trusted-peer-row`,i.innerHTML=`
|
|
538
538
|
<input type="text" class="form-input" style="margin-bottom: 0" value="${e}" data-id="${e}" disabled />
|
|
539
539
|
<input type="text" class="form-input alias-input" style="margin-bottom: 0" value="${t}" placeholder="Alias (optional)" />
|
|
540
540
|
<button type="button" class="save-btn save-btn--danger" style="padding: 0.25rem 0.5rem; font-size: 0.75rem; white-space: nowrap; height: 38px;">Remove</button>
|
|
541
|
-
`,i.querySelector(`button`)?.addEventListener(`click`,()=>{i.remove()}),r.appendChild(i)}_buildRoomUrl(e){let t=new URLSearchParams({room:e.roomId,host:e.hostPeerId,name:e.name});return`${window.location.origin}${window.location.pathname}?${t.toString()}`}_trustedPeerOptions(){let e=this.getOrchestrator(),t=e?
|
|
541
|
+
`,i.querySelector(`button`)?.addEventListener(`click`,()=>{i.remove()}),r.appendChild(i)}_buildRoomUrl(e){let t=new URLSearchParams({room:e.roomId,host:e.hostPeerId,name:e.name});return`${window.location.origin}${window.location.pathname}?${t.toString()}`}_trustedPeerOptions(){let e=this.getOrchestrator(),t=e?p(e):null;return t?t.trustedPeerIds.map(e=>{let n=e;if(t.peerAliases){for(let[r,i]of Object.entries(t.peerAliases))if(i===e){n=`${r} (${e.substring(0,8)})`;break}}return{id:e,label:n}}):[]}};customElements.get(V)||customElements.define(V,ge);const H=new CSSStyleSheet;H.replaceSync(`*,
|
|
542
542
|
*::before,
|
|
543
543
|
*::after {
|
|
544
544
|
font-family: var(--shadow-claw-font-sans);
|
|
@@ -808,7 +808,7 @@ hr {
|
|
|
808
808
|
</div>
|
|
809
809
|
</div>
|
|
810
810
|
</template>
|
|
811
|
-
`,`text/html`),W=U.querySelector(`template`);let G=[];G=W?Array.from(W.content.children):Array.from(U.head.children).concat(Array.from(U.body.children));var _e=G;const K=`shadow-claw-channel-config`;var ve=class extends x{static styles=H;static template=_e;db=null;orchestrator=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await n(),this.orchestrator=
|
|
811
|
+
`,`text/html`),W=U.querySelector(`template`);let G=[];G=W?Array.from(W.content.children):Array.from(U.head.children).concat(Array.from(U.body.children));var _e=G;const K=`shadow-claw-channel-config`;var ve=class extends x{static styles=H;static template=_e;db=null;orchestrator=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await n(),this.orchestrator=f.orchestrator,this.bindEventListeners(),this.setupEffects(),await this.render()}disconnectedCallback(){super.disconnectedCallback()}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-action="save-telegram-config"]`)?.addEventListener(`click`,()=>this.saveTelegramConfig()),e.querySelector(`[data-action="save-imessage-config"]`)?.addEventListener(`click`,()=>this.saveIMessageConfig()),e.querySelector(`[data-action="verify-telegram-config"]`)?.addEventListener(`click`,()=>this.verifyTelegramConfig()))}getOrchestrator(){let e=f.orchestrator;return e&&(this.orchestrator=e),this.orchestrator}setLoadingState(e){let t=e.querySelector(`[data-info="telegram-token-status"]`);t&&(t.textContent=`Loading Telegram settings...`);let n=e.querySelector(`[data-info="telegram-chat-ids-status"]`);n&&(n.textContent=`Loading Telegram settings...`);let r=e.querySelector(`[data-info="imessage-chat-ids-status"]`);r&&(r.textContent=`Loading iMessage settings...`)}setupEffects(){this.addCleanup(S(()=>{f.ready&&this.render()}))}updateChannelFieldAvailability(e,t,n){let r=e.querySelector(`[data-setting="telegram-token-input"]`),i=e.querySelector(`[data-setting="telegram-chat-ids-input"]`),a=e.querySelector(`[data-setting="telegram-use-proxy-toggle"]`),o=e.querySelector(`[data-action="verify-telegram-config"]`);r&&(r.disabled=!t),i&&(i.disabled=!t),a&&(a.disabled=!t),o&&(o.disabled=!t);let s=e.querySelector(`[data-setting="imessage-server-url-input"]`),c=e.querySelector(`[data-setting="imessage-api-key-input"]`),l=e.querySelector(`[data-setting="imessage-chat-ids-input"]`);s&&(s.disabled=!n),c&&(c.disabled=!n),l&&(l.disabled=!n),e.querySelectorAll(`.form-group`).forEach(e=>e.classList.remove(`form-group--disabled`)),t||e.querySelector(`[data-setting="telegram-token-input"]`)?.closest(`.form-group`)?.classList.add(`form-group--disabled`),n||e.querySelector(`[data-setting="imessage-server-url-input"]`)?.closest(`.form-group`)?.classList.add(`form-group--disabled`)}async render(){let e=this.getOrchestrator(),t=this.shadowRoot;if(!t)return;if(!e){this.setLoadingState(t);return}let n=h(e),r=s(e),i=t.querySelector(`[data-setting="telegram-token-input"]`),a=t.querySelector(`[data-setting="telegram-chat-ids-input"]`),o=t.querySelector(`[data-setting="telegram-use-proxy-toggle"]`),c=t.querySelector(`[data-setting="telegram-enabled-toggle"]`),l=t.querySelector(`[data-setting="imessage-server-url-input"]`),u=t.querySelector(`[data-setting="imessage-api-key-input"]`),d=t.querySelector(`[data-setting="imessage-chat-ids-input"]`),f=t.querySelector(`[data-setting="imessage-enabled-toggle"]`);c&&(c.checked=n.enabled);let p=t.querySelector(`[data-info="telegram-channel-status"]`);p&&(p.textContent=n.enabled?`Telegram channel is enabled.`:`Telegram channel is disabled. Saved settings are retained.`),i&&(i.value=n.botToken);let m=t.querySelector(`[data-info="telegram-token-status"]`);m&&(m.textContent=n.botToken?`Telegram token saved.`:`No Telegram token saved.`),a&&(a.value=n.chatIds.join(`, `));let g=t.querySelector(`[data-info="telegram-chat-ids-status"]`);g&&(g.textContent=n.chatIds.length?`Allowed Telegram chat IDs saved: ${n.chatIds.join(`, `)}`:`No Telegram chat IDs saved.`),o&&(o.checked=!!n.useProxy);let _=t.querySelector(`[data-info="telegram-proxy-status"]`);_&&(_.textContent=n.useProxy?`Telegram API calls are proxied through this server.`:`Telegram API calls go directly to Telegram.`),l&&(l.value=r.serverUrl),u&&(u.value=r.apiKey),d&&(d.value=r.chatIds.join(`, `)),f&&(f.checked=r.enabled);let v=t.querySelector(`[data-info="imessage-channel-status"]`);v&&(v.textContent=r.enabled?`iMessage channel is enabled.`:`iMessage channel is disabled. Saved settings are retained.`);let y=t.querySelector(`[data-info="imessage-chat-ids-status"]`);y&&(y.textContent=r.chatIds.length?`Allowed iMessage chat IDs saved: ${r.chatIds.join(`, `)}`:`No iMessage chat IDs saved.`),this.updateChannelFieldAvailability(t,n.enabled,r.enabled)}async saveIMessageConfig(){let e=this.getOrchestrator();if(!e||!this.db)return;let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="imessage-server-url-input"]`),r=t.querySelector(`[data-setting="imessage-api-key-input"]`),i=t.querySelector(`[data-setting="imessage-chat-ids-input"]`),a=t.querySelector(`[data-setting="imessage-enabled-toggle"]`);try{await u(e,this.db,n?.value||``,r?.value||``,q(i?.value||``)),await m(e,this.db,`imessage`,!!a?.checked),await this.render(),v(`iMessage channel settings saved`,3e3)}catch(e){y(`Error saving iMessage settings: ${e instanceof Error?e.message:String(e)}`,6e3)}}async saveTelegramConfig(){let e=this.getOrchestrator();if(!e||!this.db)return;let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="telegram-token-input"]`),r=t.querySelector(`[data-setting="telegram-chat-ids-input"]`),i=t.querySelector(`[data-setting="telegram-use-proxy-toggle"]`),a=t.querySelector(`[data-setting="telegram-enabled-toggle"]`);try{await c(e,this.db,n?.value||``,q(r?.value||``),!!i?.checked),await m(e,this.db,`telegram`,!!a?.checked),await this.render(),v(`Telegram channel settings saved`,3e3)}catch(e){y(`Error saving Telegram settings: ${e instanceof Error?e.message:String(e)}`,6e3)}}async verifyTelegramConfig(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="telegram-token-input"]`)?.value?.trim()||``,n=e.querySelector(`[data-setting="telegram-use-proxy-toggle"]`)?.checked?`/telegram/bot`:`https://api.telegram.org/bot`;if(!t){y(`Telegram bot token is empty. Save the token first.`,5e3);return}try{let e=await fetch(`${n}${t}/getMe`),r=await e.json();if(!e.ok||!r.ok)throw Error(r.description||`HTTP ${e.status}`);let i=await fetch(`${n}${t}/getWebhookInfo`),a=await i.json();if(!i.ok||!a.ok)throw Error(a.description||`HTTP ${i.status}`);if(a.result?.url?.trim()){b(`Telegram bot is valid (${r.result?.username||`unknown`}), but a webhook is enabled. Clear it with deleteWebhook before relying on getUpdates polling.`,7e3);return}v(`Telegram setup looks good for @${r.result?.username||`unknown`}. Token works and no webhook is active.`,5e3)}catch(e){y(`Telegram verification failed: ${e instanceof Error?e.message:String(e)}`,7e3)}}};function q(e){return Array.from(new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean)))}customElements.get(K)||customElements.define(K,ve);const J=new CSSStyleSheet;J.replaceSync(`*,
|
|
812
812
|
*::before,
|
|
813
813
|
*::after {
|
|
814
814
|
font-family: var(--shadow-claw-font-sans);
|