shadow-claw 1.29.0 → 1.30.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 +3 -2
- package/.agents/skills/main/skill-creator/references/frontmatter-spec.md +5 -3
- package/.well-known/agent-skills/index.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/dist/lib/{app-routes-CqBOeA5q.js → app-routes-BAEMLu9g.js} +3 -2
- package/dist/lib/app-routes-BAEMLu9g.js.map +1 -0
- package/dist/lib/{bundler-8JNIKwOs.js → bundler-CsL7hHMq.js} +4 -9
- package/dist/lib/{bundler-8JNIKwOs.js.map → bundler-CsL7hHMq.js.map} +1 -1
- package/dist/lib/components/index.js +26 -26
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-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-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config--CFrw3J3.js → config-DjZ9QWc4.js} +2 -2
- package/dist/lib/{config--CFrw3J3.js.map → config-DjZ9QWc4.js.map} +1 -1
- package/dist/lib/{configurePeerJs-DG4hliKp.js → configurePeerJs-H0WaoT0w.js} +3 -3
- package/dist/lib/{configurePeerJs-DG4hliKp.js.map → configurePeerJs-H0WaoT0w.js.map} +1 -1
- package/dist/lib/{connections-DwjzwVz0.js → connections-BURqMIUv.js} +2 -2
- package/dist/lib/{connections-DwjzwVz0.js.map → connections-BURqMIUv.js.map} +1 -1
- package/dist/lib/content/markdown-links.d.ts +19 -0
- package/dist/lib/core/app-routes.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-DmcBQU1n.js → downloadGroupFile-B8J4up2a.js} +2 -2
- package/dist/lib/{downloadGroupFile-DmcBQU1n.js.map → downloadGroupFile-B8J4up2a.js.map} +1 -1
- package/dist/lib/{file-viewer-C3YKnq_-.js → file-viewer-CwvhxAAG.js} +5 -5
- package/dist/lib/{file-viewer-C3YKnq_-.js.map → file-viewer-CwvhxAAG.js.map} +1 -1
- package/dist/lib/{getGroupDir-m0f-ekgX.js → getGroupDir-QrN2aTo8.js} +4 -4
- package/dist/lib/{getGroupDir-m0f-ekgX.js.map → getGroupDir-QrN2aTo8.js.map} +1 -1
- package/dist/lib/{git-C-Q6-IVe.js → git-DhZoe1SE.js} +3 -3
- package/dist/lib/{git-C-Q6-IVe.js.map → git-DhZoe1SE.js.map} +1 -1
- package/dist/lib/{iframe-sanitizer-CUqHuWQ-.js → iframe-sanitizer-Bujgq14T.js} +2 -2
- package/dist/lib/{iframe-sanitizer-CUqHuWQ-.js.map → iframe-sanitizer-Bujgq14T.js.map} +1 -1
- package/dist/lib/index.js +27 -27
- package/dist/lib/{initChatSplitResize-yyBTU6h9.js → initChatSplitResize-BjiWoqC_.js} +2 -2
- package/dist/lib/{initChatSplitResize-yyBTU6h9.js.map → initChatSplitResize-BjiWoqC_.js.map} +1 -1
- package/dist/lib/{initControlPlane-DnpAzphg.js → initControlPlane-C9JxQCDh.js} +16 -16
- package/dist/lib/{initControlPlane-DnpAzphg.js.map → initControlPlane-C9JxQCDh.js.map} +1 -1
- package/dist/lib/{markdown-DgdSt2GD.js → markdown-DYHmNjC4.js} +126 -5
- package/dist/lib/markdown-DYHmNjC4.js.map +1 -0
- package/dist/lib/{mcp-reconnect-C86MR3z8.js → mcp-reconnect-BxJ77WSb.js} +2 -2
- package/dist/lib/{mcp-reconnect-C86MR3z8.js.map → mcp-reconnect-BxJ77WSb.js.map} +1 -1
- package/dist/lib/{memoryStorage-UR8E8K-H.js → memoryStorage-D3FBwO9T.js} +2 -2
- package/dist/lib/{memoryStorage-UR8E8K-H.js.map → memoryStorage-D3FBwO9T.js.map} +1 -1
- package/dist/lib/{orchestrator-ClXbJ4Mb.js → orchestrator-C6dc-2OQ.js} +130 -27
- package/dist/lib/{orchestrator-ClXbJ4Mb.js.map → orchestrator-C6dc-2OQ.js.map} +1 -1
- package/dist/lib/{orchestrator-CjEau_RG.js → orchestrator-DVkyd8K9.js} +27 -17
- package/dist/lib/orchestrator-DVkyd8K9.js.map +1 -0
- package/dist/lib/{peerjs-BdfpltIe.js → peerjs-BUS9O04I.js} +274 -60
- package/dist/lib/peerjs-BUS9O04I.js.map +1 -0
- package/dist/lib/{push-client-DjwKknNg.js → push-client-4JsQGmQa.js} +3 -3
- package/dist/lib/{push-client-DjwKknNg.js.map → push-client-4JsQGmQa.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-C8oOe8Iu.js → readGroupFileBytes-CSA7u-nJ.js} +2 -2
- package/dist/lib/{readGroupFileBytes-C8oOe8Iu.js.map → readGroupFileBytes-CSA7u-nJ.js.map} +1 -1
- package/dist/lib/{shadow-claw-DcPGKenn.js → shadow-claw-BMoF8Auf.js} +11 -11
- package/dist/lib/{shadow-claw-DcPGKenn.js.map → shadow-claw-BMoF8Auf.js.map} +1 -1
- package/dist/lib/{shadow-claw-a2ui-CpZUTzlh.js → shadow-claw-a2ui-2I5nffIn.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-CpZUTzlh.js.map → shadow-claw-a2ui-2I5nffIn.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-03oJ__XC.js → shadow-claw-accounts-BCjlgvzy.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-03oJ__XC.js.map → shadow-claw-accounts-BCjlgvzy.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-DEL-aZ7N.js → shadow-claw-channel-config-CxQAmlDE.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-DEL-aZ7N.js.map → shadow-claw-channel-config-CxQAmlDE.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-BgaJiPdE.js → shadow-claw-channels-CuYMUVAG.js} +3 -3
- package/dist/lib/{shadow-claw-channels-BgaJiPdE.js.map → shadow-claw-channels-CuYMUVAG.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-mXPQZbwT.js → shadow-claw-chat-RFtPmmyl.js} +13 -12
- package/dist/lib/shadow-claw-chat-RFtPmmyl.js.map +1 -0
- package/dist/lib/{shadow-claw-control-plane-DO6foOLV.js → shadow-claw-control-plane-siqmRzR1.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-DO6foOLV.js.map → shadow-claw-control-plane-siqmRzR1.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-BLwHTwdW.js → shadow-claw-conversations-DygK5y1e.js} +7 -7
- package/dist/lib/{shadow-claw-conversations-BLwHTwdW.js.map → shadow-claw-conversations-DygK5y1e.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-BSbZvSl-.js → shadow-claw-file-viewer-DGMA7d7H.js} +11 -11
- package/dist/lib/shadow-claw-file-viewer-DGMA7d7H.js.map +1 -0
- package/dist/lib/{shadow-claw-files-BLVr9Pua.js → shadow-claw-files-CgD1B9J7.js} +8 -8
- package/dist/lib/{shadow-claw-files-BLVr9Pua.js.map → shadow-claw-files-CgD1B9J7.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-CHC1H86J.js → shadow-claw-git-Bw1jGRrf.js} +6 -6
- package/dist/lib/{shadow-claw-git-CHC1H86J.js.map → shadow-claw-git-Bw1jGRrf.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-Ds-CLPhj.js → shadow-claw-integrations-ChaXtvsg.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-Ds-CLPhj.js.map → shadow-claw-integrations-ChaXtvsg.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-CKXfxd3D.js → shadow-claw-llm-CDM4Akjc.js} +6 -6
- package/dist/lib/{shadow-claw-llm-CKXfxd3D.js.map → shadow-claw-llm-CDM4Akjc.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-CT5Q-54E.js → shadow-claw-mcp-remote-BLxs_Z4I.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-CT5Q-54E.js.map → shadow-claw-mcp-remote-BLxs_Z4I.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-dpYvfchh.js → shadow-claw-networking-BYt-kMSI.js} +2 -2
- package/dist/lib/{shadow-claw-networking-dpYvfchh.js.map → shadow-claw-networking-BYt-kMSI.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-_YeAVPga.js → shadow-claw-notifications-Dpe4EtZI.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-_YeAVPga.js.map → shadow-claw-notifications-Dpe4EtZI.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-Cti2fzf-.js → shadow-claw-page-header-P4EvWyUr.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-Cti2fzf-.js.map → shadow-claw-page-header-P4EvWyUr.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-DVzZriZ7.js → shadow-claw-pages-DWd_c4d6.js} +10 -10
- package/dist/lib/{shadow-claw-pages-DVzZriZ7.js.map → shadow-claw-pages-DWd_c4d6.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-BvixjeBz.js → shadow-claw-peerjs-D928817m.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-BvixjeBz.js.map → shadow-claw-peerjs-D928817m.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-DV9-gD4Q.js → shadow-claw-settings-C8OPrSqs.js} +8 -8
- package/dist/lib/{shadow-claw-settings-DV9-gD4Q.js.map → shadow-claw-settings-C8OPrSqs.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-Bv__kXG6.js → shadow-claw-storage-CZ2uZJNw.js} +5 -5
- package/dist/lib/{shadow-claw-storage-Bv__kXG6.js.map → shadow-claw-storage-CZ2uZJNw.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-DNOe8PWK.js → shadow-claw-task-server-CLT018BX.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-DNOe8PWK.js.map → shadow-claw-task-server-CLT018BX.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-qmcDT4PU.js → shadow-claw-tasks-D5h-lGmq.js} +9 -8
- package/dist/lib/shadow-claw-tasks-D5h-lGmq.js.map +1 -0
- package/dist/lib/{shadow-claw-terminal-0QUWP8of.js → shadow-claw-terminal-Cy1O6KVM.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-0QUWP8of.js.map → shadow-claw-terminal-Cy1O6KVM.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-Bs_bmI6-.js → shadow-claw-tools-CVD06bCR.js} +9 -9
- package/dist/lib/{shadow-claw-tools-Bs_bmI6-.js.map → shadow-claw-tools-CVD06bCR.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-DYaoL7QY.js → shadow-claw-webvm-DoGl5ZSJ.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-DYaoL7QY.js.map → shadow-claw-webvm-DoGl5ZSJ.js.map} +1 -1
- package/dist/lib/subsystems/channels/peerjs.d.ts +37 -4
- package/dist/lib/subsystems/channels/room.d.ts +4 -0
- package/dist/lib/{syncWebMcpRegistration-BhbqI6R2.js → syncWebMcpRegistration-BeYkQEvj.js} +5 -5
- package/dist/lib/{syncWebMcpRegistration-BhbqI6R2.js.map → syncWebMcpRegistration-BeYkQEvj.js.map} +1 -1
- package/dist/lib/tools-C3Kft940.js +1 -0
- package/dist/lib/{tools-DBaMRiEu.js → tools-DKzPWc0q.js} +2 -2
- package/dist/lib/{tools-DBaMRiEu.js.map → tools-DKzPWc0q.js.map} +1 -1
- package/dist/lib/{tools-DwwB9RBa.js → tools-DqcJe8LS.js} +5 -5
- package/dist/lib/{tools-DwwB9RBa.js.map → tools-DqcJe8LS.js.map} +1 -1
- package/dist/lib/{trusted-types-Dx0RZlrd.js → trusted-types-Oz7xXJAY.js} +4 -4
- package/dist/lib/{trusted-types-Dx0RZlrd.js.map → trusted-types-Oz7xXJAY.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespacedStorage.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{webmcp-j_1_T3wf.js → webmcp-BC8_WafM.js} +4 -4
- package/dist/lib/{webmcp-j_1_T3wf.js.map → webmcp-BC8_WafM.js.map} +1 -1
- package/dist/lib/worker/utils/system-prompt.d.ts +4 -1
- package/dist/public/.agents/skills/main/skill-creator/SKILL.md +3 -2
- package/dist/public/.agents/skills/main/skill-creator/references/frontmatter-spec.md +5 -3
- package/dist/public/.well-known/agent-skills/index.json +1 -1
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/agent.worker.js +18 -17
- package/dist/public/app-routes-BMQ4HFaM.js +1 -0
- package/dist/public/{bundler-Ca-Xwln8.js → bundler-0if-QelV.js} +4 -4
- package/dist/public/{config-CrHchneq.js → config-Bnwx4EfS.js} +1 -1
- package/dist/public/{configurePeerJs-B470pdeU.js → configurePeerJs-DkyGvwk_.js} +1 -1
- package/dist/public/{connections-DvbgdkaB.js → connections-6575KDGE.js} +1 -1
- package/dist/public/{custom-element-security-FU04Cq05.js → custom-element-security-BQJQ_oKz.js} +1 -1
- package/dist/public/docs/example/article/index.html +2 -2
- package/dist/public/docs/publishing/index.html +2 -2
- package/dist/public/docs/skill-creator/index.html +2 -2
- package/dist/public/docs/subsystems/skills.md +3 -1
- package/dist/public/{downloadGroupFile-D8KRJGGL.js → downloadGroupFile-Wo1Sxdhr.js} +1 -1
- package/dist/public/{e2e-bridge-CSW0S5Yz.js → e2e-bridge-CvLCUU2O.js} +1 -1
- package/dist/public/{file-viewer-Cs-riNvy.js → file-viewer-CIjqAvNF.js} +1 -1
- package/dist/public/{getGroupDir-P1h9wl6S.js → getGroupDir-BwprrdrQ.js} +1 -1
- package/dist/public/{git-7Vq_SJSp.js → git-BSnY2D-A.js} +2 -2
- package/dist/public/{iframe-sanitizer-y2Z1pPwY.js → iframe-sanitizer-viROQkRn.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize-CzV2E7Ul.js → initChatSplitResize-BA18wLQQ.js} +1 -1
- package/dist/public/{initControlPlane-BqCY0NQy.js → initControlPlane-L96uJkRA.js} +1 -1
- package/dist/public/main/index.html +2 -2
- package/dist/public/main/memory/index.html +2 -2
- package/dist/public/{markdown-Cw7vCtTg.js → markdown-DGjZAm_w.js} +17 -14
- package/dist/public/{mcp-reconnect-9emsqGRe.js → mcp-reconnect-CBHuaYdF.js} +1 -1
- package/dist/public/{memoryStorage-C0KvLNUp.js → memoryStorage-C1llaYus.js} +1 -1
- package/dist/public/orchestrator-C0VOoTiK.js +15 -0
- package/dist/public/{orchestrator-DpkkeD6T.js → orchestrator-DMWi--Dc.js} +20 -19
- package/dist/public/peerjs-Bf6ZxfbA.js +1 -0
- package/dist/public/{push-client-CHjSbrWs.js → push-client-BD4YalBa.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-BBPV_9X8.js → shadow-claw-DRy-D4Qi.js} +2 -2
- package/dist/public/{shadow-claw-accounts-xUOLBsQZ.js → shadow-claw-accounts-DnfmA8cb.js} +1 -1
- package/dist/public/{shadow-claw-channels-BJvrKQjg.js → shadow-claw-channels-8UkycZAa.js} +1 -1
- package/dist/public/{shadow-claw-chat-BG2EaRaw.js → shadow-claw-chat-Cf5LUiul.js} +9 -9
- package/dist/public/{shadow-claw-control-plane-BBa7WbTg.js → shadow-claw-control-plane-UsBF-Nvd.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CFaWFmkm.js → shadow-claw-conversations-Aoe61Y21.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-Z-GIKaE9.js → shadow-claw-file-viewer-D28dSSEn.js} +6 -6
- package/dist/public/{shadow-claw-files-BBx4iMsk.js → shadow-claw-files-CaDUlPEU.js} +1 -1
- package/dist/public/{shadow-claw-git-vTOKatwd.js → shadow-claw-git-DYNcZMWA.js} +2 -2
- package/dist/public/{shadow-claw-integrations-BBVnO0Fc.js → shadow-claw-integrations-BJf_hQVv.js} +1 -1
- package/dist/public/{shadow-claw-llm-Ce1Ax6-x.js → shadow-claw-llm-BqK2SIRf.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-Bkx0gsmF.js → shadow-claw-mcp-remote-B_dDG990.js} +1 -1
- package/dist/public/{shadow-claw-networking-q4XIzdB5.js → shadow-claw-networking-D8LxOofv.js} +1 -1
- package/dist/public/{shadow-claw-notifications-D2cz0gmm.js → shadow-claw-notifications-DpVyiNG_.js} +1 -1
- package/dist/public/{shadow-claw-page-header-BccSHItx.js → shadow-claw-page-header-DdC7bJuW.js} +1 -1
- package/dist/public/{shadow-claw-pages-3335lmSC.js → shadow-claw-pages-CYMl4J-6.js} +3 -3
- package/dist/public/{shadow-claw-settings-4ptYuJwO.js → shadow-claw-settings-Da_8Oy3O.js} +3 -3
- package/dist/public/{shadow-claw-storage-bIrPKFhF.js → shadow-claw-storage-DXIm86_-.js} +1 -1
- package/dist/public/{shadow-claw-task-server-5yqVBxy1.js → shadow-claw-task-server-BCceBD0G.js} +1 -1
- package/dist/public/{shadow-claw-tasks-DcqYHPLZ.js → shadow-claw-tasks-BW1QZ5L3.js} +19 -19
- package/dist/public/{shadow-claw-terminal-fARaDONr.js → shadow-claw-terminal-vqfsxhcK.js} +1 -1
- package/dist/public/{shadow-claw-tools-paEAhcJr.js → shadow-claw-tools-l0Jsa7UJ.js} +1 -1
- package/dist/public/{shadow-claw-webvm-CbzH_vyX.js → shadow-claw-webvm-CDPOWZm7.js} +1 -1
- package/dist/public/skills/main/skill-creator/SKILL.md +3 -2
- package/dist/public/skills/main/skill-creator/references/frontmatter-spec.md +5 -3
- package/dist/public/static-main-manifest.json +2 -2
- package/dist/public/{syncWebMcpRegistration-CWSYaHex.js → syncWebMcpRegistration-5b5FkP9_.js} +1 -1
- package/dist/public/tools-B-PzsLc2.js +1 -0
- package/dist/public/{tools-C8x3nmo4.js → tools-CcgG5XuA.js} +1 -1
- package/dist/public/{tools-DvckJZG2.js → tools-VSOY66vs.js} +1 -1
- package/dist/public/{webmcp-DAjmliCx.js → webmcp-DBONjQWd.js} +1 -1
- package/dist/server.js +2 -2
- package/package.json +2 -2
- package/src/__mocks__/marked.cjs +14 -0
- package/src/components/shadow-claw-chat/shadow-claw-chat.test.ts +17 -0
- package/src/components/shadow-claw-chat/shadow-claw-chat.ts +5 -1
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.test.ts +78 -0
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +6 -2
- package/src/components/shadow-claw-pages/utils/resolveWorkspaceLinkPath.test.ts +56 -0
- package/src/components/shadow-claw-tasks/shadow-claw-tasks.test.ts +22 -0
- package/src/components/shadow-claw-tasks/shadow-claw-tasks.ts +5 -1
- package/src/content/markdown-links.test.ts +109 -0
- package/src/content/markdown-links.ts +187 -0
- package/src/content/markdown.test.ts +33 -0
- package/src/content/markdown.ts +6 -1
- package/src/core/app-routes.test.ts +65 -0
- package/src/core/app-routes.ts +1 -1
- package/src/core/orchestrator/orchestrator.ts +3 -0
- package/src/core/orchestrator/utils/compactContext.ts +2 -0
- package/src/core/orchestrator/utils/invokeAgent.ts +1 -0
- package/src/subsystems/accounts/service-accounts.test.ts +0 -1
- package/src/subsystems/channels/peerjs.test.ts +479 -1
- package/src/subsystems/channels/peerjs.ts +420 -75
- package/src/subsystems/channels/room.test.ts +35 -0
- package/src/subsystems/channels/room.ts +15 -0
- package/src/subsystems/skills/activateSkill.test.ts +38 -5
- package/src/subsystems/skills/activateSkill.ts +25 -3
- package/src/subsystems/skills/parseSkill.test.ts +71 -0
- package/src/subsystems/skills/parseSkill.ts +185 -25
- package/src/subsystems/tools/files.ts +4 -4
- package/src/worker/tools/spawn-subagent/spawn-subagent.test.ts +22 -23
- package/src/worker/tools/workspace/send-file.test.ts +24 -1
- package/src/worker/tools/workspace/send-file.ts +6 -3
- package/src/worker/utils/handleCompact.test.ts +3 -4
- package/src/worker/utils/handleInvoke.test.ts +13 -11
- package/src/worker/utils/handleInvoke.ts +3 -0
- package/src/worker/utils/handleMessage.test.ts +0 -1
- package/src/worker/utils/post.test.ts +3 -4
- package/src/worker/utils/sandboxedEval.test.ts +1 -2
- package/src/worker/utils/system-prompt.test.ts +59 -0
- package/src/worker/utils/system-prompt.ts +21 -1
- package/src/worker/utils/withRetry.test.ts +3 -16
- package/dist/lib/app-routes-CqBOeA5q.js.map +0 -1
- package/dist/lib/markdown-DgdSt2GD.js.map +0 -1
- package/dist/lib/orchestrator-CjEau_RG.js.map +0 -1
- package/dist/lib/peerjs-BdfpltIe.js.map +0 -1
- package/dist/lib/shadow-claw-chat-mXPQZbwT.js.map +0 -1
- package/dist/lib/shadow-claw-file-viewer-BSbZvSl-.js.map +0 -1
- package/dist/lib/shadow-claw-tasks-qmcDT4PU.js.map +0 -1
- package/dist/lib/tools-D4Pp-nUw.js +0 -1
- package/dist/public/app-routes-Bs-riIvr.js +0 -1
- package/dist/public/orchestrator-BWkHHO9Y.js +0 -15
- package/dist/public/peerjs-tf2EmWjB.js +0 -1
- package/dist/public/tools-COduyYJ0.js +0 -1
package/dist/lib/{shadow-claw-control-plane-DO6foOLV.js → shadow-claw-control-plane-siqmRzR1.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { n as getDb } from "./txPromise-CuGh-TGK.js";
|
|
3
|
-
import { r as CONFIG_KEYS } from "./config
|
|
3
|
+
import { r as CONFIG_KEYS } from "./config-DjZ9QWc4.js";
|
|
4
4
|
import { t as getConfig } from "./getConfig-BxxXMyuM.js";
|
|
5
|
-
import { t as orchestratorStore } from "./orchestrator-
|
|
5
|
+
import { t as orchestratorStore } from "./orchestrator-C6dc-2OQ.js";
|
|
6
6
|
import { t as setConfig } from "./setConfig-BFED5CXn.js";
|
|
7
7
|
import { a as showSuccess, r as showError } from "./toast-DZ6r7_YI.js";
|
|
8
8
|
import { t as effect } from "./effect-DL6j9HJp.js";
|
|
@@ -326,7 +326,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
326
326
|
if (!root) return;
|
|
327
327
|
const cpEnabledToggle = root.querySelector("[data-setting=\"control-plane-enabled-toggle\"]");
|
|
328
328
|
if (cpEnabledToggle && this.db) try {
|
|
329
|
-
const { isControlPlaneEnabled } = await import("./initControlPlane-
|
|
329
|
+
const { isControlPlaneEnabled } = await import("./initControlPlane-C9JxQCDh.js");
|
|
330
330
|
cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);
|
|
331
331
|
} catch (_) {
|
|
332
332
|
cpEnabledToggle.checked = false;
|
|
@@ -438,7 +438,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
438
438
|
if (typeof localStorage !== "undefined") try {
|
|
439
439
|
localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);
|
|
440
440
|
} catch (_) {}
|
|
441
|
-
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
441
|
+
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-C9JxQCDh.js");
|
|
442
442
|
if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
443
443
|
orchestrator: this.orchestrator || void 0,
|
|
444
444
|
db: this.db,
|
|
@@ -464,7 +464,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
464
464
|
if (url) localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);
|
|
465
465
|
else localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);
|
|
466
466
|
} catch (_) {}
|
|
467
|
-
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
467
|
+
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-C9JxQCDh.js");
|
|
468
468
|
if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
469
469
|
orchestrator: this.orchestrator || void 0,
|
|
470
470
|
db: this.db,
|
|
@@ -486,7 +486,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
486
486
|
if (typeof localStorage !== "undefined") try {
|
|
487
487
|
localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_ENABLED, enabled ? "true" : "false");
|
|
488
488
|
} catch (_) {}
|
|
489
|
-
const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
489
|
+
const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./initControlPlane-C9JxQCDh.js");
|
|
490
490
|
if (enabled) {
|
|
491
491
|
if (shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
492
492
|
orchestrator: this.orchestrator || void 0,
|
|
@@ -507,4 +507,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
507
507
|
|
|
508
508
|
//#endregion
|
|
509
509
|
export { getControlPlaneTargetAddressSpace as n, ShadowClawControlPlane as t };
|
|
510
|
-
//# sourceMappingURL=shadow-claw-control-plane-
|
|
510
|
+
//# sourceMappingURL=shadow-claw-control-plane-siqmRzR1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-claw-control-plane-DO6foOLV.js","names":["shadowClawControlPlaneStyles","shadowClawControlPlaneTemplate"],"sources":["../../src/components/settings/shadow-claw-control-plane/shadow-claw-control-plane.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\nimport { getDb } from \"../../../db/db.js\";\nimport { getConfig } from \"../../../db/getConfig.js\";\nimport { setConfig } from \"../../../db/setConfig.js\";\nimport {\n CONFIG_KEYS,\n DEFAULT_CONTROL_PLANE_ENABLED,\n DEFAULT_CONTROL_PLANE_TRANSPORT,\n} from \"../../../config/config.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\nimport type { AppDialogOptions } from \"../../../ui/types.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawControlPlaneStyles from \"./shadow-claw-control-plane.css\" with { type: \"css\" };\nimport shadowClawControlPlaneTemplate from \"./shadow-claw-control-plane.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-control-plane\";\n\n/**\n * Computes Chromium targetAddressSpace for Private Network Access (PNA).\n */\nexport function getControlPlaneTargetAddressSpace(\n urlStr: string,\n): \"loopback\" | \"private\" | undefined {\n try {\n const parsed = new URL(urlStr);\n const hostname = parsed.hostname.toLowerCase();\n const isLoopback =\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"[::1]\";\n if (isLoopback) {\n return \"loopback\";\n }\n const isPrivate =\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(hostname) ||\n !hostname.includes(\".\") ||\n hostname.endsWith(\".local\") ||\n hostname.endsWith(\".lan\") ||\n hostname.endsWith(\".home\") ||\n hostname.endsWith(\".internal\");\n if (isPrivate) {\n return \"private\";\n }\n } catch (_) {}\n return undefined;\n}\n\n/**\n * Settings sub-component for Control Plane Client URL, enabled toggle, and transport configuration.\n */\nexport class ShadowClawControlPlane extends ShadowClawElement {\n static styles = shadowClawControlPlaneStyles;\n static template = shadowClawControlPlaneTemplate;\n\n db: ShadowClawDatabase | null;\n orchestrator: Orchestrator | null;\n\n constructor() {\n super();\n\n this.db = null;\n this.orchestrator = null;\n }\n\n async connectedCallback() {\n const root = this.shadowRoot;\n if (!root) {\n throw new Error(\"shadowRoot not found\");\n }\n\n this.db = await getDb();\n this.orchestrator = orchestratorStore.orchestrator;\n\n this.bindEventListeners();\n this.setupEffects();\n await this.render();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-control-plane-transport\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneTransport();\n });\n\n root\n .querySelector('[data-action=\"save-control-plane-url\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneUrl();\n });\n\n root\n .querySelector('[data-action=\"test-control-plane-connection\"]')\n ?.addEventListener(\"click\", () => {\n void this.testControlPlaneConnection();\n });\n\n root\n .querySelector('[data-setting=\"control-plane-enabled-toggle\"]')\n ?.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLInputElement;\n void this.saveControlPlaneEnabled(target.checked);\n });\n }\n\n setupEffects() {\n effect(() => {\n if (orchestratorStore.ready) {\n this.orchestrator = orchestratorStore.orchestrator;\n this.render();\n }\n });\n }\n\n async render() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const cpEnabledToggle = root.querySelector(\n '[data-setting=\"control-plane-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n if (cpEnabledToggle && this.db) {\n try {\n const { isControlPlaneEnabled } =\n await import(\"../../../core/utils/initControlPlane.js\");\n cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);\n } catch (_) {\n cpEnabledToggle.checked = DEFAULT_CONTROL_PLANE_ENABLED;\n }\n }\n\n const cpUrlInput = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (cpUrlInput && this.db) {\n try {\n const stored = await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL);\n cpUrlInput.value = stored || \"\";\n } catch (_) {\n cpUrlInput.value = \"\";\n }\n }\n\n const transportSelect = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (transportSelect && this.db) {\n try {\n const stored = await getConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_TRANSPORT,\n );\n transportSelect.value = stored || DEFAULT_CONTROL_PLANE_TRANSPORT;\n } catch (_) {\n transportSelect.value = DEFAULT_CONTROL_PLANE_TRANSPORT;\n }\n }\n }\n\n async requestAppDialog(options: AppDialogOptions): Promise<boolean> {\n const el = document.querySelector(\"shadow-claw\") as any;\n if (el && typeof el.requestDialog === \"function\") {\n return await el.requestDialog(options);\n }\n\n return false;\n }\n\n /**\n * Performs a direct fetch probe to the Control Plane server.\n * Executed during user gestures (e.g. Test Connection / Save URL) to trigger\n * Chromium's Local Network Access (LNA) / Private Network Access (PNA) permission prompt if needed.\n */\n async probeControlPlane(\n urlStr: string,\n ): Promise<{ success: boolean; error?: string }> {\n let targetUrl: URL;\n try {\n targetUrl = new URL(urlStr);\n } catch {\n return { success: false, error: `Invalid URL format: \"${urlStr}\"` };\n }\n\n const targetAddressSpace = getControlPlaneTargetAddressSpace(urlStr);\n const fetchOptions: any = {\n method: \"GET\",\n cache: \"no-store\",\n mode: \"cors\",\n };\n if (targetAddressSpace) {\n fetchOptions.targetAddressSpace = targetAddressSpace;\n }\n\n try {\n const healthUrl = new URL(\"/api/control/health\", targetUrl).toString();\n let res = await fetch(healthUrl, fetchOptions);\n\n if (res.status === 404) {\n const fallbackUrl = new URL(\n \"/api/control/messages\",\n targetUrl,\n ).toString();\n res = await fetch(fallbackUrl, {\n ...fetchOptions,\n method: \"OPTIONS\",\n });\n }\n\n if (res.ok || res.status === 204 || res.status === 401) {\n return { success: true };\n }\n\n return {\n success: false,\n error: `Server responded with HTTP ${res.status} (${res.statusText || \"Error\"})`,\n };\n } catch (err: any) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n /**\n * Interactive handler to test connection and surface diagnostic modal if needed.\n */\n async testControlPlaneConnection(): Promise<boolean> {\n const root = this.shadowRoot;\n if (!root) {\n return false;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n const testBtn = root.querySelector(\n '[data-action=\"test-control-plane-connection\"]',\n ) as HTMLButtonElement | null;\n\n const rawUrl = input?.value.trim() || \"http://127.0.0.1:8888\";\n\n if (testBtn) {\n testBtn.disabled = true;\n testBtn.textContent = \"⏳ Testing...\";\n }\n\n try {\n const result = await this.probeControlPlane(rawUrl);\n\n if (result.success) {\n showSuccess(`Successfully reached Control Plane at ${rawUrl}`, 4000);\n return true;\n }\n\n const errorMsg = result.error || \"Unknown connection error\";\n showError(`Connection test failed: ${errorMsg}`, 6000);\n\n await this.requestAppDialog({\n title: \"Control Plane Connection Failed\",\n message: `Unable to connect to \"${rawUrl}\".\\n\\n• TLS / Certificate: If using HTTPS with a self-signed certificate, ensure the certificate is installed and trusted in Chrome (chrome://certificate-manager/localcerts/usercerts).\\n• Chrome Permissions: In Site Settings, ensure \"Local network access\" is allowed.\\n• Server Status: Verify the ShadowClaw dev server is running and listening on this host/port.`,\n confirmLabel: \"OK\",\n });\n\n return false;\n } finally {\n if (testBtn) {\n testBtn.disabled = false;\n testBtn.textContent = \"🔌 Test Connection\";\n }\n }\n }\n\n async saveControlPlaneTransport() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const select = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (!select) {\n return;\n }\n\n const transport = select.value === \"websocket\" ? \"websocket\" : \"sse\";\n\n try {\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n transport,\n });\n }\n\n showSuccess(\n `Control Plane transport saved: ${transport.toUpperCase()}`,\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane transport: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneUrl() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (!input) {\n return;\n }\n\n const url = input.value.trim();\n\n try {\n // Trigger probe within user gesture to elicit Chrome LNA prompt if needed\n if (url) {\n void this.probeControlPlane(url);\n }\n\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL, url);\n if (typeof localStorage !== \"undefined\") {\n try {\n if (url) {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);\n } else {\n localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);\n }\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n\n showSuccess(\n url\n ? `Control Plane URL saved: ${url}`\n : \"Control Plane URL reset to default\",\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane URL: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneEnabled(enabled: boolean) {\n if (!this.db) {\n return;\n }\n\n try {\n if (enabled) {\n const storedUrl =\n (await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL)) ||\n \"http://127.0.0.1:8888\";\n void this.probeControlPlane(storedUrl);\n }\n\n await setConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n } catch (_) {}\n }\n\n const {\n ensureControlPlaneConnected,\n stopControlPlaneClient,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (enabled) {\n if (shouldConnectControlPlane()) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n showSuccess(\"Control plane client enabled and connected\", 3000);\n } else {\n stopControlPlaneClient();\n showSuccess(\"Control plane client disabled\", 3000);\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane setting: \" + errorMsg, 6000);\n }\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadow-claw-control-plane-siqmRzR1.js","names":["shadowClawControlPlaneStyles","shadowClawControlPlaneTemplate"],"sources":["../../src/components/settings/shadow-claw-control-plane/shadow-claw-control-plane.ts"],"sourcesContent":["import { effect } from \"../../../core/effect.js\";\nimport { getDb } from \"../../../db/db.js\";\nimport { getConfig } from \"../../../db/getConfig.js\";\nimport { setConfig } from \"../../../db/setConfig.js\";\nimport {\n CONFIG_KEYS,\n DEFAULT_CONTROL_PLANE_ENABLED,\n DEFAULT_CONTROL_PLANE_TRANSPORT,\n} from \"../../../config/config.js\";\nimport { orchestratorStore } from \"../../../stores/orchestrator.js\";\nimport { showError, showSuccess } from \"../../../ui/toast.js\";\n\nimport type { Orchestrator } from \"../../../core/orchestrator/orchestrator.js\";\nimport type { ShadowClawDatabase } from \"../../../db/types.js\";\nimport type { AppDialogOptions } from \"../../../ui/types.js\";\n\nimport ShadowClawElement from \"../../shadow-claw-element.js\";\nimport shadowClawControlPlaneStyles from \"./shadow-claw-control-plane.css\" with { type: \"css\" };\nimport shadowClawControlPlaneTemplate from \"./shadow-claw-control-plane.html\" with { type: \"html\" };\n\nconst elementName = \"shadow-claw-control-plane\";\n\n/**\n * Computes Chromium targetAddressSpace for Private Network Access (PNA).\n */\nexport function getControlPlaneTargetAddressSpace(\n urlStr: string,\n): \"loopback\" | \"private\" | undefined {\n try {\n const parsed = new URL(urlStr);\n const hostname = parsed.hostname.toLowerCase();\n const isLoopback =\n hostname === \"localhost\" ||\n hostname === \"127.0.0.1\" ||\n hostname === \"::1\" ||\n hostname === \"[::1]\";\n if (isLoopback) {\n return \"loopback\";\n }\n const isPrivate =\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(hostname) ||\n !hostname.includes(\".\") ||\n hostname.endsWith(\".local\") ||\n hostname.endsWith(\".lan\") ||\n hostname.endsWith(\".home\") ||\n hostname.endsWith(\".internal\");\n if (isPrivate) {\n return \"private\";\n }\n } catch (_) {}\n return undefined;\n}\n\n/**\n * Settings sub-component for Control Plane Client URL, enabled toggle, and transport configuration.\n */\nexport class ShadowClawControlPlane extends ShadowClawElement {\n static styles = shadowClawControlPlaneStyles;\n static template = shadowClawControlPlaneTemplate;\n\n db: ShadowClawDatabase | null;\n orchestrator: Orchestrator | null;\n\n constructor() {\n super();\n\n this.db = null;\n this.orchestrator = null;\n }\n\n async connectedCallback() {\n const root = this.shadowRoot;\n if (!root) {\n throw new Error(\"shadowRoot not found\");\n }\n\n this.db = await getDb();\n this.orchestrator = orchestratorStore.orchestrator;\n\n this.bindEventListeners();\n this.setupEffects();\n await this.render();\n }\n\n bindEventListeners() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n root\n .querySelector('[data-action=\"save-control-plane-transport\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneTransport();\n });\n\n root\n .querySelector('[data-action=\"save-control-plane-url\"]')\n ?.addEventListener(\"click\", () => {\n void this.saveControlPlaneUrl();\n });\n\n root\n .querySelector('[data-action=\"test-control-plane-connection\"]')\n ?.addEventListener(\"click\", () => {\n void this.testControlPlaneConnection();\n });\n\n root\n .querySelector('[data-setting=\"control-plane-enabled-toggle\"]')\n ?.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLInputElement;\n void this.saveControlPlaneEnabled(target.checked);\n });\n }\n\n setupEffects() {\n effect(() => {\n if (orchestratorStore.ready) {\n this.orchestrator = orchestratorStore.orchestrator;\n this.render();\n }\n });\n }\n\n async render() {\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const cpEnabledToggle = root.querySelector(\n '[data-setting=\"control-plane-enabled-toggle\"]',\n ) as HTMLInputElement | null;\n if (cpEnabledToggle && this.db) {\n try {\n const { isControlPlaneEnabled } =\n await import(\"../../../core/utils/initControlPlane.js\");\n cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);\n } catch (_) {\n cpEnabledToggle.checked = DEFAULT_CONTROL_PLANE_ENABLED;\n }\n }\n\n const cpUrlInput = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (cpUrlInput && this.db) {\n try {\n const stored = await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL);\n cpUrlInput.value = stored || \"\";\n } catch (_) {\n cpUrlInput.value = \"\";\n }\n }\n\n const transportSelect = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (transportSelect && this.db) {\n try {\n const stored = await getConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_TRANSPORT,\n );\n transportSelect.value = stored || DEFAULT_CONTROL_PLANE_TRANSPORT;\n } catch (_) {\n transportSelect.value = DEFAULT_CONTROL_PLANE_TRANSPORT;\n }\n }\n }\n\n async requestAppDialog(options: AppDialogOptions): Promise<boolean> {\n const el = document.querySelector(\"shadow-claw\") as any;\n if (el && typeof el.requestDialog === \"function\") {\n return await el.requestDialog(options);\n }\n\n return false;\n }\n\n /**\n * Performs a direct fetch probe to the Control Plane server.\n * Executed during user gestures (e.g. Test Connection / Save URL) to trigger\n * Chromium's Local Network Access (LNA) / Private Network Access (PNA) permission prompt if needed.\n */\n async probeControlPlane(\n urlStr: string,\n ): Promise<{ success: boolean; error?: string }> {\n let targetUrl: URL;\n try {\n targetUrl = new URL(urlStr);\n } catch {\n return { success: false, error: `Invalid URL format: \"${urlStr}\"` };\n }\n\n const targetAddressSpace = getControlPlaneTargetAddressSpace(urlStr);\n const fetchOptions: any = {\n method: \"GET\",\n cache: \"no-store\",\n mode: \"cors\",\n };\n if (targetAddressSpace) {\n fetchOptions.targetAddressSpace = targetAddressSpace;\n }\n\n try {\n const healthUrl = new URL(\"/api/control/health\", targetUrl).toString();\n let res = await fetch(healthUrl, fetchOptions);\n\n if (res.status === 404) {\n const fallbackUrl = new URL(\n \"/api/control/messages\",\n targetUrl,\n ).toString();\n res = await fetch(fallbackUrl, {\n ...fetchOptions,\n method: \"OPTIONS\",\n });\n }\n\n if (res.ok || res.status === 204 || res.status === 401) {\n return { success: true };\n }\n\n return {\n success: false,\n error: `Server responded with HTTP ${res.status} (${res.statusText || \"Error\"})`,\n };\n } catch (err: any) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n /**\n * Interactive handler to test connection and surface diagnostic modal if needed.\n */\n async testControlPlaneConnection(): Promise<boolean> {\n const root = this.shadowRoot;\n if (!root) {\n return false;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n const testBtn = root.querySelector(\n '[data-action=\"test-control-plane-connection\"]',\n ) as HTMLButtonElement | null;\n\n const rawUrl = input?.value.trim() || \"http://127.0.0.1:8888\";\n\n if (testBtn) {\n testBtn.disabled = true;\n testBtn.textContent = \"⏳ Testing...\";\n }\n\n try {\n const result = await this.probeControlPlane(rawUrl);\n\n if (result.success) {\n showSuccess(`Successfully reached Control Plane at ${rawUrl}`, 4000);\n return true;\n }\n\n const errorMsg = result.error || \"Unknown connection error\";\n showError(`Connection test failed: ${errorMsg}`, 6000);\n\n await this.requestAppDialog({\n title: \"Control Plane Connection Failed\",\n message: `Unable to connect to \"${rawUrl}\".\\n\\n• TLS / Certificate: If using HTTPS with a self-signed certificate, ensure the certificate is installed and trusted in Chrome (chrome://certificate-manager/localcerts/usercerts).\\n• Chrome Permissions: In Site Settings, ensure \"Local network access\" is allowed.\\n• Server Status: Verify the ShadowClaw dev server is running and listening on this host/port.`,\n confirmLabel: \"OK\",\n });\n\n return false;\n } finally {\n if (testBtn) {\n testBtn.disabled = false;\n testBtn.textContent = \"🔌 Test Connection\";\n }\n }\n }\n\n async saveControlPlaneTransport() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const select = root.querySelector(\n '[data-setting=\"control-plane-transport-select\"]',\n ) as HTMLSelectElement | null;\n if (!select) {\n return;\n }\n\n const transport = select.value === \"websocket\" ? \"websocket\" : \"sse\";\n\n try {\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n transport,\n });\n }\n\n showSuccess(\n `Control Plane transport saved: ${transport.toUpperCase()}`,\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane transport: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneUrl() {\n if (!this.db) {\n return;\n }\n\n const root = this.shadowRoot;\n if (!root) {\n return;\n }\n\n const input = root.querySelector(\n '[data-setting=\"control-plane-url-input\"]',\n ) as HTMLInputElement | null;\n if (!input) {\n return;\n }\n\n const url = input.value.trim();\n\n try {\n // Trigger probe within user gesture to elicit Chrome LNA prompt if needed\n if (url) {\n void this.probeControlPlane(url);\n }\n\n await setConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL, url);\n if (typeof localStorage !== \"undefined\") {\n try {\n if (url) {\n localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);\n } else {\n localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);\n }\n } catch (_) {}\n }\n\n const {\n isControlPlaneEnabled,\n ensureControlPlaneConnected,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (\n (await isControlPlaneEnabled(this.db)) &&\n shouldConnectControlPlane()\n ) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n\n showSuccess(\n url\n ? `Control Plane URL saved: ${url}`\n : \"Control Plane URL reset to default\",\n 3000,\n );\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane URL: \" + errorMsg, 6000);\n }\n }\n\n async saveControlPlaneEnabled(enabled: boolean) {\n if (!this.db) {\n return;\n }\n\n try {\n if (enabled) {\n const storedUrl =\n (await getConfig(this.db, CONFIG_KEYS.CONTROL_PLANE_URL)) ||\n \"http://127.0.0.1:8888\";\n void this.probeControlPlane(storedUrl);\n }\n\n await setConfig(\n this.db,\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n if (typeof localStorage !== \"undefined\") {\n try {\n localStorage.setItem(\n CONFIG_KEYS.CONTROL_PLANE_ENABLED,\n enabled ? \"true\" : \"false\",\n );\n } catch (_) {}\n }\n\n const {\n ensureControlPlaneConnected,\n stopControlPlaneClient,\n shouldConnectControlPlane,\n } = await import(\"../../../core/utils/initControlPlane.js\");\n\n if (enabled) {\n if (shouldConnectControlPlane()) {\n await ensureControlPlaneConnected({\n orchestrator: this.orchestrator || undefined,\n db: this.db,\n force: true,\n });\n }\n showSuccess(\"Control plane client enabled and connected\", 3000);\n } else {\n stopControlPlaneClient();\n showSuccess(\"Control plane client disabled\", 3000);\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n showError(\"Error saving Control Plane setting: \" + errorMsg, 6000);\n }\n }\n}\n\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
|
package/dist/lib/{shadow-claw-conversations-BLwHTwdW.js → shadow-claw-conversations-DygK5y1e.js}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { n as getDb } from "./txPromise-CuGh-TGK.js";
|
|
3
|
-
import { r as CONFIG_KEYS } from "./config
|
|
3
|
+
import { r as CONFIG_KEYS } from "./config-DjZ9QWc4.js";
|
|
4
4
|
import { t as getConfig } from "./getConfig-BxxXMyuM.js";
|
|
5
|
-
import { i as loadDeclarativeTools, t as toolsStore } from "./tools-
|
|
6
|
-
import { G as getProviderRuntimeHeaders, H as getAvailableProviders, t as orchestratorStore } from "./orchestrator-
|
|
5
|
+
import { i as loadDeclarativeTools, t as toolsStore } from "./tools-DqcJe8LS.js";
|
|
6
|
+
import { G as getProviderRuntimeHeaders, H as getAvailableProviders, t as orchestratorStore } from "./orchestrator-C6dc-2OQ.js";
|
|
7
7
|
import { t as setConfig } from "./setConfig-BFED5CXn.js";
|
|
8
|
-
import { t as TOOL_DEFINITIONS } from "./tools-
|
|
9
|
-
import "./tools-
|
|
10
|
-
import { n as setSanitizedHtml } from "./trusted-types-
|
|
8
|
+
import { t as TOOL_DEFINITIONS } from "./tools-DKzPWc0q.js";
|
|
9
|
+
import "./tools-C3Kft940.js";
|
|
10
|
+
import { n as setSanitizedHtml } from "./trusted-types-Oz7xXJAY.js";
|
|
11
11
|
import { t as effect } from "./effect-DL6j9HJp.js";
|
|
12
12
|
import "./components/shadow-claw-dialog.js";
|
|
13
13
|
import "./shadow-claw-provider-model-picker-CsA-507a.js";
|
|
@@ -1863,4 +1863,4 @@ customElements.define("shadow-claw-conversations", ShadowClawConversations);
|
|
|
1863
1863
|
|
|
1864
1864
|
//#endregion
|
|
1865
1865
|
export { ShadowClawConversations as t };
|
|
1866
|
-
//# sourceMappingURL=shadow-claw-conversations-
|
|
1866
|
+
//# sourceMappingURL=shadow-claw-conversations-DygK5y1e.js.map
|