shadow-claw 1.40.0 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +2 -2
- package/.well-known/mcp/servers.json +1 -1
- package/.well-known/mcp.json +2 -2
- package/README.md +1 -0
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-Bfz2NYgD.js → chunk-0IeC97mU.js} +7 -7
- package/dist/cli/chunk-3oLxlxPn.js +1 -0
- package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
- package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
- package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
- package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
- package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
- package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
- package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
- package/dist/cli/chunk-BjOeVLb42.js +1 -0
- package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
- package/dist/cli/chunk-BqWBd_jF2.js +1 -0
- package/dist/cli/{chunk-Bc9nRNyN.js → chunk-BvVUnHTq.js} +12 -9
- package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
- package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
- package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
- package/dist/cli/chunk-CCx8WOwz2.js +1 -0
- package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
- package/dist/cli/chunk-CUUERioR2.js +1 -0
- package/dist/cli/chunk-CXAobnJd.js +1 -0
- package/dist/cli/chunk-CY1X0pOF2.js +1 -0
- package/dist/cli/chunk-CZvvgLVv.js +1 -0
- package/dist/cli/chunk-CbcwbfJB.js +1 -0
- package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
- package/dist/cli/chunk-Cj9wl0qx.js +1 -0
- package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
- package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
- package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
- package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
- package/dist/cli/chunk-DR2XtWRo.js +1 -0
- package/dist/cli/{chunk-DID5VvOG.js → chunk-DTES-dE6.js} +3 -3
- package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
- package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
- package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
- package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
- package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
- package/dist/cli/chunk-UcNbHaRQ.js +1 -0
- package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
- package/dist/cli/chunk-bQQkVCw-.js +94 -0
- package/dist/cli/{chunk-CGiXWHTi2.js → chunk-gwpxl-0W2.js} +1 -1
- package/dist/cli/{chunk-NH8koEis2.js → chunk-nmDhxXH_2.js} +1 -1
- package/dist/cli/chunk-p0n_c-I2.js +1 -0
- package/dist/cli/{chunk-D7xP72La.js → chunk-q7r4FosZ.js} +1 -1
- package/dist/cli/cli.js +3 -3
- package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
- package/dist/electron/main.cjs +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-BAEMLu9g.js → app-routes-CKkiX12g.js} +7 -2
- package/dist/lib/app-routes-CKkiX12g.js.map +1 -0
- 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/utils/syncSlottedSidebarActiveLinks.d.ts +10 -0
- 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/shadow-claw-file-viewer.d.ts +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-CPHDmyTx.js → config-DZkF9LiO.js} +2 -2
- package/dist/lib/{config-CPHDmyTx.js.map → config-DZkF9LiO.js.map} +1 -1
- package/dist/lib/{configurePeerJs-BsJoycQd.js → configurePeerJs-B3IE9BY2.js} +3 -3
- package/dist/lib/{configurePeerJs-BsJoycQd.js.map → configurePeerJs-B3IE9BY2.js.map} +1 -1
- package/dist/lib/{connections-BdIru7bF.js → connections-CalJGWvZ.js} +2 -2
- package/dist/lib/{connections-BdIru7bF.js.map → connections-CalJGWvZ.js.map} +1 -1
- package/dist/lib/core/orchestrator/orchestrator-state.d.ts +2 -1
- package/dist/lib/core/orchestrator/orchestrator.d.ts +2 -1
- package/dist/lib/core/orchestrator/utils/operations/task.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js → downloadGroupFile-DDE1fIhJ.js} +2 -2
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js.map → downloadGroupFile-DDE1fIhJ.js.map} +1 -1
- package/dist/lib/{file-viewer-BYrXXu-X.js → file-viewer-Bll2EoGc.js} +5 -5
- package/dist/lib/{file-viewer-BYrXXu-X.js.map → file-viewer-Bll2EoGc.js.map} +1 -1
- package/dist/lib/{getGroupDir-DF-RZO8X.js → getGroupDir-MHv7Lvmp.js} +4 -4
- package/dist/lib/{getGroupDir-DF-RZO8X.js.map → getGroupDir-MHv7Lvmp.js.map} +1 -1
- package/dist/lib/{git-s_0cgKm1.js → git-Bv_M3dgw.js} +3 -3
- package/dist/lib/{git-s_0cgKm1.js.map → git-Bv_M3dgw.js.map} +1 -1
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js → iframe-sanitizer-C7ZGDjEI.js} +2 -2
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js.map → iframe-sanitizer-C7ZGDjEI.js.map} +1 -1
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js → iframe-storage-proxy-CR8ZYHPd.js} +2 -2
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js.map → iframe-storage-proxy-CR8ZYHPd.js.map} +1 -1
- package/dist/lib/index.js +27 -27
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js → initChatSplitResize-DiKTI-wk.js} +2 -2
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js.map → initChatSplitResize-DiKTI-wk.js.map} +1 -1
- package/dist/lib/{initControlPlane-D4UZ4EhV.js → initControlPlane-CzjtQ4aM.js} +15 -15
- package/dist/lib/{initControlPlane-D4UZ4EhV.js.map → initControlPlane-CzjtQ4aM.js.map} +1 -1
- package/dist/lib/{markdown-CRRwbN9h.js → markdown-k8wA9LKy.js} +4 -4
- package/dist/lib/{markdown-CRRwbN9h.js.map → markdown-k8wA9LKy.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-COdZ-cea.js → mcp-reconnect-CGIdfZnS.js} +2 -2
- package/dist/lib/{mcp-reconnect-COdZ-cea.js.map → mcp-reconnect-CGIdfZnS.js.map} +1 -1
- package/dist/lib/{memoryStorage-BsMe2FOQ.js → memoryStorage-DL-Bo3dh.js} +2 -2
- package/dist/lib/{memoryStorage-BsMe2FOQ.js.map → memoryStorage-DL-Bo3dh.js.map} +1 -1
- package/dist/lib/{orchestrator-D9f5fDCb.js → orchestrator-DKHCoikY.js} +11 -11
- package/dist/lib/{orchestrator-D9f5fDCb.js.map → orchestrator-DKHCoikY.js.map} +1 -1
- package/dist/lib/{orchestrator-Bq9ft3uG.js → orchestrator-Dn1ZOz9B.js} +20 -24
- package/dist/lib/orchestrator-Dn1ZOz9B.js.map +1 -0
- package/dist/lib/{peerjs-6u8KtenE.js → peerjs-BK41iBvP.js} +7 -7
- package/dist/lib/{peerjs-6u8KtenE.js.map → peerjs-BK41iBvP.js.map} +1 -1
- package/dist/lib/{push-client-DCnB2-OU.js → push-client-DKgVFD2Z.js} +3 -3
- package/dist/lib/{push-client-DCnB2-OU.js.map → push-client-DKgVFD2Z.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js → readGroupFileBytes-CgU_UfGv.js} +2 -2
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js.map → readGroupFileBytes-CgU_UfGv.js.map} +1 -1
- package/dist/lib/{shadow-claw-MumteAJy.js → shadow-claw-CtCj5Rn_.js} +121 -16
- package/dist/lib/shadow-claw-CtCj5Rn_.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js → shadow-claw-a2ui-CvK5w940.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js.map → shadow-claw-a2ui-CvK5w940.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js → shadow-claw-accounts-Br3XdHro.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js.map → shadow-claw-accounts-Br3XdHro.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js → shadow-claw-channel-config-Da2dN19M.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js.map → shadow-claw-channel-config-Da2dN19M.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-CaceK52s.js → shadow-claw-channels-BofYHgz8.js} +3 -3
- package/dist/lib/{shadow-claw-channels-CaceK52s.js.map → shadow-claw-channels-BofYHgz8.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js → shadow-claw-chat-Dw32DPV2.js} +12 -12
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js.map → shadow-claw-chat-Dw32DPV2.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js → shadow-claw-control-plane-CwFotFDh.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js.map → shadow-claw-control-plane-CwFotFDh.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js → shadow-claw-conversations-0UXge23k.js} +5 -5
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js.map → shadow-claw-conversations-0UXge23k.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js → shadow-claw-file-viewer-CAsn9NxH.js} +30 -30
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js.map → shadow-claw-file-viewer-CAsn9NxH.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js → shadow-claw-files-xGGhsHNH.js} +9 -9
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js.map → shadow-claw-files-xGGhsHNH.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-xRApLEMN.js → shadow-claw-git-B606hcMU.js} +6 -6
- package/dist/lib/{shadow-claw-git-xRApLEMN.js.map → shadow-claw-git-B606hcMU.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js → shadow-claw-integrations-Bwq5cba1.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js.map → shadow-claw-integrations-Bwq5cba1.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js → shadow-claw-llm-BgpcMBIy.js} +6 -6
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js.map → shadow-claw-llm-BgpcMBIy.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js → shadow-claw-mcp-remote-DvQCA-Bk.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js.map → shadow-claw-mcp-remote-DvQCA-Bk.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js → shadow-claw-networking-Cxvf9c7E.js} +2 -2
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js.map → shadow-claw-networking-Cxvf9c7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js → shadow-claw-notifications-CGVcFYBy.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js.map → shadow-claw-notifications-CGVcFYBy.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js → shadow-claw-page-header-DAYz3I_o.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js.map → shadow-claw-page-header-DAYz3I_o.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-Bo8_z2S-.js → shadow-claw-pages-BLeEZb9k.js} +24 -12
- package/dist/lib/shadow-claw-pages-BLeEZb9k.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js → shadow-claw-peerjs-BcFnbK74.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js.map → shadow-claw-peerjs-BcFnbK74.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js → shadow-claw-settings-B7o0Z4hu.js} +9 -9
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js.map → shadow-claw-settings-B7o0Z4hu.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js → shadow-claw-storage-afMVqB7E.js} +5 -5
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js.map → shadow-claw-storage-afMVqB7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js → shadow-claw-task-server-B9-MQjl6.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js.map → shadow-claw-task-server-B9-MQjl6.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js → shadow-claw-tasks-Dc4BC-t-.js} +8 -8
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js.map → shadow-claw-tasks-Dc4BC-t-.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js → shadow-claw-terminal-BINcTdsk.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js.map → shadow-claw-terminal-BINcTdsk.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js → shadow-claw-tools-BjFgXNLR.js} +7 -7
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js.map → shadow-claw-tools-BjFgXNLR.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js → shadow-claw-webvm-Xe3ByMDw.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js.map → shadow-claw-webvm-Xe3ByMDw.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +64 -0
- package/dist/lib/{syncWebMcpRegistration-Bbph0XZl.js → syncWebMcpRegistration-D7alChz0.js} +21 -6
- package/dist/lib/syncWebMcpRegistration-D7alChz0.js.map +1 -0
- package/dist/lib/{tools-D0OlSzMD.js → tools-Cmhpk3X8.js} +4 -4
- package/dist/lib/{tools-D0OlSzMD.js.map → tools-Cmhpk3X8.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/{utils-DYdrO2KI.js → utils-CzgKe_XZ.js} +4 -4
- package/dist/lib/{utils-DYdrO2KI.js.map → utils-CzgKe_XZ.js.map} +1 -1
- package/dist/lib/{webmcp-D2bocsgh.js → webmcp-oEP9YpR2.js} +119 -3
- package/dist/lib/{webmcp-D2bocsgh.js.map → webmcp-oEP9YpR2.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +2 -2
- package/dist/public/.well-known/mcp/servers.json +1 -1
- package/dist/public/.well-known/mcp.json +2 -2
- package/dist/public/AGENTS.md +2 -1
- package/dist/public/README.md +1 -0
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/app-routes-C6-H2zPH.js +1 -0
- package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
- package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
- package/dist/public/components/shadow-claw-pages/shadow-claw-pages.css +1 -1
- package/dist/public/{config-D4lVqMs8.js → config-Dewnqegf.js} +1 -1
- package/dist/public/{configurePeerJs-DDOAVSaH.js → configurePeerJs-CaPU2sN5.js} +1 -1
- package/dist/public/{connections-CiukjGiH.js → connections-CwE7jE9l.js} +1 -1
- package/dist/public/{custom-element-security-piU2U-Ec.js → custom-element-security-DLgHMf5R.js} +1 -1
- package/dist/public/docs/decisions/native-web-components-and-signals.md +1 -1
- package/dist/public/docs/example/article/index.html +5 -5
- package/dist/public/docs/guides/publishing-to-github-pages.md +49 -6
- package/dist/public/docs/publishing/index.html +5 -5
- package/dist/public/docs/skill-creator/index.html +5 -5
- package/dist/public/docs/subsystems/pages.md +10 -3
- package/dist/public/docs/subsystems/webmcp.md +89 -1
- package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
- package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
- package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
- package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
- package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
- package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
- package/dist/public/index.css +1 -1
- package/dist/public/index.html +5 -5
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
- package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +5 -5
- package/dist/public/main/memory/index.html +5 -5
- package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
- package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
- package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
- package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
- package/dist/public/{orchestrator-BLkS_jpm.js → orchestrator-CQcc7OFA.js} +2 -2
- package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
- package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
- package/dist/public/service-worker/fetch-proxy.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-DmrxnX3Q.js → shadow-claw-WwfOu-tu.js} +33 -3
- package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
- package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
- package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-a_uRA30F.js → shadow-claw-file-viewer-DYgZjZb9.js} +2 -2
- package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
- package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
- package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
- package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
- package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
- package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
- package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
- package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
- package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
- package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
- package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
- package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
- package/dist/public/theme-init.js +1 -1
- package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
- package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
- package/dist/server.js +189 -189
- package/package.json +1 -1
- package/src/cli/cli.ts +2 -2
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +7 -1
- package/src/cli/prerender/utils/insert-before-closing-head.test.ts +12 -0
- package/src/cli/prerender/utils/insert-before-closing-head.ts +4 -6
- package/src/cli/site-config/apply.test.ts +90 -0
- package/src/cli/site-config/apply.ts +181 -13
- package/src/components/shadow-claw/shadow-claw.css +26 -0
- package/src/components/shadow-claw/shadow-claw.html +4 -0
- package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
- package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
- package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
- package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
- package/src/components/shadow-claw/utils/getRoute.ts +18 -0
- package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
- package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
- package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +31 -31
- package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
- package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
- package/src/core/effect.test.ts +19 -0
- package/src/core/orchestrator/orchestrator-state.ts +2 -1
- package/src/core/orchestrator/orchestrator.test.ts +686 -5
- package/src/core/orchestrator/orchestrator.ts +3 -10
- package/src/core/orchestrator/utils/compactContext.test.ts +423 -121
- package/src/core/orchestrator/utils/configurePeerJs.test.ts +27 -0
- package/src/core/orchestrator/utils/deliverResponse.test.ts +127 -0
- package/src/core/orchestrator/utils/dispatchSubagentInvoke.test.ts +23 -0
- package/src/core/orchestrator/utils/enqueue.test.ts +520 -86
- package/src/core/orchestrator/utils/handleWorkerMessage.test.ts +664 -144
- package/src/core/orchestrator/utils/initTasks.node.test.ts +147 -0
- package/src/core/orchestrator/utils/initTasks.test.ts +926 -191
- package/src/core/orchestrator/utils/initTasks.ts +5 -4
- package/src/core/orchestrator/utils/invokeAgent.test.ts +563 -110
- package/src/core/orchestrator/utils/invokeAgent.ts +8 -10
- package/src/core/orchestrator/utils/loadChannelConfigurations.test.ts +50 -0
- package/src/core/orchestrator/utils/operations/channel.test.ts +377 -170
- package/src/core/orchestrator/utils/operations/provider.test.ts +663 -85
- package/src/core/orchestrator/utils/operations/room.test.ts +74 -11
- package/src/core/orchestrator/utils/operations/task.test.ts +452 -56
- package/src/core/orchestrator/utils/operations/task.ts +1 -1
- package/src/core/orchestrator/utils/operations/vm.test.ts +66 -7
- package/src/core/orchestrator/utils/parseDirectToolCommand.test.ts +6 -0
- package/src/core/orchestrator/utils/settings.test.ts +248 -81
- package/src/core/orchestrator/utils/setupPushTaskListener.test.ts +58 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +392 -64
- package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +32 -3
- package/src/server/middleware/static-files.test.ts +36 -0
- package/src/server/middleware/static-files.ts +14 -6
- package/src/server/routes/mcp.ts +2 -2
- package/src/storage/staticRouting.test.ts +36 -0
- package/src/storage/staticRouting.ts +31 -3
- package/src/stores/file-viewer.test.ts +11 -0
- package/src/stores/theme.test.ts +41 -2
- package/src/stores/toast.test.ts +25 -0
- package/src/subsystems/mcp/webmcp.test.ts +255 -0
- package/src/subsystems/mcp/webmcp.ts +253 -0
- package/src/worker/tools/bash/native-bash-executor.test.ts +31 -1
- package/src/worker/tools/git/utils/extractConflictPaths.test.ts +24 -0
- package/src/worker/tools/git/utils/parseConflictRegions.test.ts +46 -0
- package/src/worker/tools/git/utils/resolveCorsProxy.test.ts +26 -5
- package/src/worker/tools/git/utils/truncateSnippet.test.ts +16 -0
- package/src/worker/tools/node-transformers-executor.test.ts +105 -6
- package/src/worker/tools/remote-mcp/remote-mcp.test.ts +172 -47
- package/src/worker/tools/remote-mcp/utils/formatListToolsOutput.test.ts +19 -0
- package/src/worker/tools/remote-mcp/utils/isMcpReauthError.test.ts +45 -0
- package/src/worker/tools/remote-mcp/utils/resolveMcpReauth.test.ts +48 -0
- package/src/worker/tools/rooms/list-room-members.test.ts +24 -10
- package/src/worker/tools/tasks/list-tasks.test.ts +39 -8
- package/src/worker/tools/tasks/update-task.test.ts +78 -14
- package/src/worker/tools/ui/javascript.test.ts +70 -17
- package/src/worker/tools/ui/list-tool-profiles.test.ts +31 -9
- package/dist/cli/chunk-00GAzVPl2.js +0 -1
- package/dist/cli/chunk-2hnFoNNC.js +0 -1
- package/dist/cli/chunk-BKQL4nzF2.js +0 -1
- package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
- package/dist/cli/chunk-BVCGo6uf2.js +0 -1
- package/dist/cli/chunk-BcTH_-FL.js +0 -1
- package/dist/cli/chunk-BmD_sPRt.js +0 -1
- package/dist/cli/chunk-BsxNqqer.js +0 -1
- package/dist/cli/chunk-CCcF5T-c.js +0 -1
- package/dist/cli/chunk-CFhvwUeL.js +0 -91
- package/dist/cli/chunk-CwWtvULn.js +0 -1
- package/dist/cli/chunk-Drf-hXIR2.js +0 -1
- package/dist/cli/chunk-Dt5HNYVi.js +0 -1
- package/dist/cli/chunk-DwZQi9Ax.js +0 -1
- package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
- package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
- package/dist/lib/orchestrator-Bq9ft3uG.js.map +0 -1
- package/dist/lib/shadow-claw-MumteAJy.js.map +0 -1
- package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
- package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
- package/dist/public/app-routes-BMQ4HFaM.js +0 -1
- package/dist/public/syncWebMcpRegistration-4bT0YUyZ.js +0 -1
package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js → shadow-claw-control-plane-CwFotFDh.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { r as getDb } from "./txPromise-DdeRXi7G.js";
|
|
3
|
-
import { r as CONFIG_KEYS } from "./config-
|
|
3
|
+
import { r as CONFIG_KEYS } from "./config-DZkF9LiO.js";
|
|
4
4
|
import { t as getConfig } from "./getConfig-B7JdRqIY.js";
|
|
5
|
-
import { t as orchestratorStore } from "./orchestrator-
|
|
5
|
+
import { t as orchestratorStore } from "./orchestrator-DKHCoikY.js";
|
|
6
6
|
import { t as setConfig } from "./setConfig-CmvLryM3.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";
|
|
@@ -370,7 +370,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
370
370
|
if (!root) return;
|
|
371
371
|
const cpEnabledToggle = root.querySelector("[data-setting=\"control-plane-enabled-toggle\"]");
|
|
372
372
|
if (cpEnabledToggle && this.db) try {
|
|
373
|
-
const { isControlPlaneEnabled } = await import("./initControlPlane-
|
|
373
|
+
const { isControlPlaneEnabled } = await import("./initControlPlane-CzjtQ4aM.js");
|
|
374
374
|
cpEnabledToggle.checked = await isControlPlaneEnabled(this.db);
|
|
375
375
|
} catch (_) {
|
|
376
376
|
cpEnabledToggle.checked = false;
|
|
@@ -404,7 +404,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
404
404
|
if (typeof localStorage !== "undefined") try {
|
|
405
405
|
localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_ENABLED, enabled ? "true" : "false");
|
|
406
406
|
} catch (_) {}
|
|
407
|
-
const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
407
|
+
const { ensureControlPlaneConnected, stopControlPlaneClient, shouldConnectControlPlane } = await import("./initControlPlane-CzjtQ4aM.js");
|
|
408
408
|
if (enabled) {
|
|
409
409
|
if (shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
410
410
|
orchestrator: this.orchestrator || void 0,
|
|
@@ -432,7 +432,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
432
432
|
if (typeof localStorage !== "undefined") try {
|
|
433
433
|
localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_TRANSPORT, transport);
|
|
434
434
|
} catch (_) {}
|
|
435
|
-
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
435
|
+
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-CzjtQ4aM.js");
|
|
436
436
|
if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
437
437
|
orchestrator: this.orchestrator || void 0,
|
|
438
438
|
db: this.db,
|
|
@@ -458,7 +458,7 @@ var ShadowClawControlPlane = class extends ShadowClawElement {
|
|
|
458
458
|
if (url) localStorage.setItem(CONFIG_KEYS.CONTROL_PLANE_URL, url);
|
|
459
459
|
else localStorage.removeItem(CONFIG_KEYS.CONTROL_PLANE_URL);
|
|
460
460
|
} catch (_) {}
|
|
461
|
-
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-
|
|
461
|
+
const { isControlPlaneEnabled, ensureControlPlaneConnected, shouldConnectControlPlane } = await import("./initControlPlane-CzjtQ4aM.js");
|
|
462
462
|
if (await isControlPlaneEnabled(this.db) && shouldConnectControlPlane()) await ensureControlPlaneConnected({
|
|
463
463
|
orchestrator: this.orchestrator || void 0,
|
|
464
464
|
db: this.db,
|
|
@@ -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-CwFotFDh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-claw-control-plane-U6LsfRPm.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 /**\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 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 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 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 /**\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\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shadow-claw-control-plane-CwFotFDh.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 /**\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 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 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 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 /**\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\nif (!customElements.get(elementName)) {\n customElements.define(elementName, ShadowClawControlPlane);\n}\n"],"mappings":"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"}
|
package/dist/lib/{shadow-claw-conversations-CDsza_oB.js → shadow-claw-conversations-0UXge23k.js}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { r as getDb } from "./txPromise-DdeRXi7G.js";
|
|
3
|
-
import { r as CONFIG_KEYS } from "./config-
|
|
3
|
+
import { r as CONFIG_KEYS } from "./config-DZkF9LiO.js";
|
|
4
4
|
import { t as getConfig } from "./getConfig-B7JdRqIY.js";
|
|
5
|
-
import { t as toolsStore, u as loadDeclarativeTools } from "./tools-
|
|
6
|
-
import { G as getProviderRuntimeHeaders, H as getAvailableProviders, t as orchestratorStore } from "./orchestrator-
|
|
5
|
+
import { t as toolsStore, u as loadDeclarativeTools } from "./tools-Cmhpk3X8.js";
|
|
6
|
+
import { G as getProviderRuntimeHeaders, H as getAvailableProviders, t as orchestratorStore } from "./orchestrator-DKHCoikY.js";
|
|
7
7
|
import { t as setConfig } from "./setConfig-CmvLryM3.js";
|
|
8
8
|
import { t as TOOL_DEFINITIONS } from "./tools-BQpz4Hkp.js";
|
|
9
9
|
import "./tools-d8Wgmt5f.js";
|
|
10
|
-
import { y as setSanitizedHtml } from "./utils-
|
|
10
|
+
import { y as setSanitizedHtml } from "./utils-CzgKe_XZ.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-0UXge23k.js.map
|