shadow-claw 1.40.1 → 1.41.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/README.md +2 -1
- 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-63s8NnIS.js +93 -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-BATVgkFY.js +17 -0
- 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-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-Cmdxoq9q.js +13 -0
- 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-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-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 +1 -1
- 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.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/{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-CMN43L0F.js → orchestrator-Dn1ZOz9B.js} +12 -12
- package/dist/lib/{orchestrator-CMN43L0F.js.map → orchestrator-Dn1ZOz9B.js.map} +1 -1
- 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-4x3LqlII.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-CuDhkVcL.js → shadow-claw-file-viewer-CAsn9NxH.js} +10 -10
- package/dist/lib/{shadow-claw-file-viewer-CuDhkVcL.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 +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/AGENTS.md +8 -2
- package/dist/public/README.md +2 -1
- 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/README.md +1 -0
- package/dist/public/docs/example/article/index.html +4 -4
- package/dist/public/docs/guides/publishing-to-github-pages.md +95 -6
- package/dist/public/docs/publishing/index.html +4 -4
- package/dist/public/docs/skill-creator/index.html +4 -4
- package/dist/public/docs/subsystems/pages.md +10 -3
- package/dist/public/docs/subsystems/theming.md +242 -0
- 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 +3 -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 +4 -4
- 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 +2 -2
- package/dist/public/main/index.html +4 -4
- package/dist/public/main/memory/index.html +4 -4
- 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-Dc_Q73La.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-Dabb2AEp.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-CDs1QGXk.js → shadow-claw-file-viewer-DYgZjZb9.js} +1 -1
- 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 +188 -188
- package/package.json +1 -1
- package/src/cli/build/build.ts +18 -11
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +13 -1
- package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +22 -0
- package/src/cli/prerender/utils/insert-before-closing-head.test.ts +34 -1
- package/src/cli/prerender/utils/insert-before-closing-head.ts +20 -6
- package/src/cli/site-config/apply.test.ts +90 -0
- package/src/cli/site-config/apply.ts +189 -22
- 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-pages/shadow-claw-pages.css +10 -1
- package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +52 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +28 -1
- package/src/server/middleware/static-files.test.ts +36 -0
- package/src/server/middleware/static-files.ts +14 -6
- package/src/storage/staticRouting.test.ts +36 -0
- package/src/storage/staticRouting.ts +31 -3
- package/src/subsystems/mcp/webmcp.test.ts +255 -0
- package/src/subsystems/mcp/webmcp.ts +253 -0
- 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-Bc9nRNyN.js +0 -11
- 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-DID5VvOG.js +0 -17
- 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/shadow-claw-4x3LqlII.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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as getDb } from "./txPromise-DdeRXi7G.js";
|
|
2
|
-
import { r as CONFIG_KEYS } from "./config-
|
|
2
|
+
import { r as CONFIG_KEYS } from "./config-DZkF9LiO.js";
|
|
3
3
|
import { t as getConfig } from "./getConfig-B7JdRqIY.js";
|
|
4
4
|
|
|
5
5
|
//#region src/subsystems/notifications/push-client.ts
|
|
@@ -59,7 +59,7 @@ async function subscribeToPush(clientId, deviceLabel) {
|
|
|
59
59
|
let resolvedClientId = clientId || (typeof localStorage !== "undefined" ? localStorage.getItem(CONFIG_KEYS.CONTROL_PLANE_CLIENT_ID) || void 0 : void 0);
|
|
60
60
|
let resolvedDeviceLabel = deviceLabel;
|
|
61
61
|
if (!resolvedClientId || !resolvedDeviceLabel) try {
|
|
62
|
-
const initCp = await import("./initControlPlane-
|
|
62
|
+
const initCp = await import("./initControlPlane-CzjtQ4aM.js");
|
|
63
63
|
if (!resolvedClientId && typeof initCp.getOrCreateControlPlaneClientId === "function") resolvedClientId = initCp.getOrCreateControlPlaneClientId();
|
|
64
64
|
if (!resolvedDeviceLabel && typeof initCp.detectDeviceLabel === "function") resolvedDeviceLabel = initCp.detectDeviceLabel();
|
|
65
65
|
} catch (_) {}
|
|
@@ -101,4 +101,4 @@ async function getCurrentSubscription() {
|
|
|
101
101
|
|
|
102
102
|
//#endregion
|
|
103
103
|
export { unsubscribeFromPush as a, subscribeToPush as i, getPushFetchOptions as n, getPushUrl as r, getCurrentSubscription as t };
|
|
104
|
-
//# sourceMappingURL=push-client-
|
|
104
|
+
//# sourceMappingURL=push-client-DKgVFD2Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-client-
|
|
1
|
+
{"version":3,"file":"push-client-DKgVFD2Z.js","names":[],"sources":["../../src/subsystems/notifications/push-client.ts"],"sourcesContent":["/**\n * Client-side Web Push subscription management.\n * Runs in the browser — communicates with the server's push routes.\n */\n\nimport { CONFIG_KEYS } from \"../../config/config.js\";\nimport { getDb } from \"../../db/db.js\";\nimport { getConfig } from \"../../db/getConfig.js\";\n\n/**\n * Resolve a push route URL, optionally using a configured proxy.\n */\nexport async function getPushUrl(path: string): Promise<string> {\n const db = await getDb();\n let proxyUrl = await getConfig(db, CONFIG_KEYS.PUSH_PROXY_URL);\n\n if (!proxyUrl && typeof localStorage !== \"undefined\") {\n try {\n proxyUrl = localStorage.getItem(CONFIG_KEYS.PUSH_PROXY_URL) || undefined;\n } catch (_) {}\n }\n\n if (!proxyUrl) {\n return path;\n }\n\n // Ensure path starts with /\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n // Ensure proxyUrl doesn't end with /\n const normalizedProxy = proxyUrl.endsWith(\"/\")\n ? proxyUrl.slice(0, -1)\n : proxyUrl;\n\n return `${normalizedProxy}${normalizedPath}`;\n}\n\nexport function getPushFetchOptions(\n url: string,\n baseOptions: RequestInit = {},\n): RequestInit {\n const opts: any = { ...baseOptions };\n try {\n const locOrigin =\n typeof location !== \"undefined\"\n ? location.origin\n : \"http://127.0.0.1:8888\";\n const u = new URL(url, locOrigin);\n const host = u.hostname.toLowerCase();\n if (\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"::1\" ||\n host === \"[::1]\"\n ) {\n opts.targetAddressSpace = \"loopback\";\n } else if (\n /^(10\\.|172\\.(1[6-9]|2\\d|3[01])\\.|192\\.168\\.)/.test(host) ||\n !host.includes(\".\") ||\n host.endsWith(\".local\") ||\n host.endsWith(\".lan\") ||\n host.endsWith(\".home\") ||\n host.endsWith(\".internal\")\n ) {\n opts.targetAddressSpace = \"private\";\n }\n } catch (_) {}\n return opts;\n}\n\n/**\n * Convert a URL-safe base64 string to a Uint8Array.\n * Required for PushManager.subscribe() applicationServerKey.\n */\nexport function urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = \"=\".repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n const rawData = atob(base64);\n\n return Uint8Array.from([...rawData].map((c) => c.charCodeAt(0)));\n}\n\n/**\n * Fetch the VAPID public key from the server.\n */\nexport async function getVapidPublicKey(): Promise<string> {\n const url = await getPushUrl(\"/push/vapid-public-key\");\n const res = await fetch(url, getPushFetchOptions(url));\n const data = await res.json();\n\n return data.publicKey;\n}\n\n/**\n * Subscribe to push notifications.\n * Requests permission, creates a push subscription, and sends it to the server.\n */\nexport async function subscribeToPush(\n clientId?: string,\n deviceLabel?: string,\n): Promise<PushSubscription> {\n const registration = await navigator.serviceWorker.ready;\n const publicKey = await getVapidPublicKey();\n\n const subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicKey) as any,\n });\n\n let resolvedClientId =\n clientId ||\n (typeof localStorage !== \"undefined\"\n ? localStorage.getItem(CONFIG_KEYS.CONTROL_PLANE_CLIENT_ID) || undefined\n : undefined);\n\n let resolvedDeviceLabel = deviceLabel;\n\n if (!resolvedClientId || !resolvedDeviceLabel) {\n try {\n const initCp = await import(\"../../core/utils/initControlPlane.js\");\n if (\n !resolvedClientId &&\n typeof initCp.getOrCreateControlPlaneClientId === \"function\"\n ) {\n resolvedClientId = initCp.getOrCreateControlPlaneClientId();\n }\n if (\n !resolvedDeviceLabel &&\n typeof initCp.detectDeviceLabel === \"function\"\n ) {\n resolvedDeviceLabel = initCp.detectDeviceLabel();\n }\n } catch (_) {}\n }\n\n const subJson =\n typeof subscription.toJSON === \"function\"\n ? subscription.toJSON()\n : JSON.parse(JSON.stringify(subscription));\n\n const url = await getPushUrl(\"/push/subscribe\");\n await fetch(\n url,\n getPushFetchOptions(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n ...subJson,\n ...(resolvedClientId ? { clientId: resolvedClientId } : {}),\n ...(resolvedDeviceLabel ? { deviceLabel: resolvedDeviceLabel } : {}),\n }),\n }),\n );\n\n return subscription;\n}\n\n/**\n * Unsubscribe from push notifications.\n * Removes the push subscription locally and notifies the server.\n */\nexport async function unsubscribeFromPush(): Promise<void> {\n const registration = await navigator.serviceWorker.ready;\n const subscription = await registration.pushManager.getSubscription();\n\n if (!subscription) {\n return;\n }\n\n const { endpoint } = subscription;\n await subscription.unsubscribe();\n\n const url = await getPushUrl(\"/push/subscribe\");\n await fetch(\n url,\n getPushFetchOptions(url, {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ endpoint }),\n }),\n );\n}\n\n/**\n * Get the current push subscription (or null if not subscribed).\n */\nexport async function getCurrentSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.ready;\n\n return registration.pushManager.getSubscription();\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as getGroupDir } from "./getGroupDir-
|
|
1
|
+
import { t as getGroupDir } from "./getGroupDir-MHv7Lvmp.js";
|
|
2
2
|
import { t as parsePath } from "./parsePath-rArsS7VY.js";
|
|
3
3
|
|
|
4
4
|
//#region src/storage/readGroupFileBytes.ts
|
|
@@ -26,4 +26,4 @@ async function readGroupFileBytes(db, groupId, filePath) {
|
|
|
26
26
|
|
|
27
27
|
//#endregion
|
|
28
28
|
export { readGroupFileBytes as t };
|
|
29
|
-
//# sourceMappingURL=readGroupFileBytes-
|
|
29
|
+
//# sourceMappingURL=readGroupFileBytes-CgU_UfGv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readGroupFileBytes-
|
|
1
|
+
{"version":3,"file":"readGroupFileBytes-CgU_UfGv.js","names":[],"sources":["../../src/storage/readGroupFileBytes.ts"],"sourcesContent":["import { getGroupDir } from \"./getGroupDir.js\";\nimport { parsePath } from \"./parsePath.js\";\nimport type { ShadowClawDatabase } from \"../db/types.js\";\n\n/**\n * Read raw bytes from a file in a group's workspace.\n */\nexport async function readGroupFileBytes(\n db: ShadowClawDatabase,\n groupId: string,\n filePath: string,\n): Promise<Uint8Array> {\n const groupDir = await getGroupDir(db, groupId);\n const { dirs, filename } = parsePath(filePath);\n\n let dir = groupDir;\n for (const seg of dirs) {\n dir = await dir.getDirectoryHandle(seg);\n }\n\n const fileHandle = await dir.getFileHandle(filename);\n\n try {\n const syncHandle = await (fileHandle as any).createSyncAccessHandle();\n const size = syncHandle.getSize();\n const buf = new Uint8Array(size);\n\n syncHandle.read(buf, { at: 0 });\n syncHandle.close();\n\n return buf;\n } catch {\n const file = await fileHandle.getFile();\n const arrayBuffer = await file.arrayBuffer();\n\n return new Uint8Array(arrayBuffer);\n }\n}\n"],"mappings":";;;;;;;AAOA,eAAsB,mBACpB,IACA,SACA,UACqB;CACrB,MAAM,WAAW,MAAM,YAAY,IAAI,OAAO;CAC9C,MAAM,EAAE,MAAM,aAAa,UAAU,QAAQ;CAE7C,IAAI,MAAM;CACV,KAAK,MAAM,OAAO,MAChB,MAAM,MAAM,IAAI,mBAAmB,GAAG;CAGxC,MAAM,aAAa,MAAM,IAAI,cAAc,QAAQ;CAEnD,IAAI;EACF,MAAM,aAAa,MAAO,WAAmB,uBAAuB;EACpE,MAAM,OAAO,WAAW,QAAQ;EAChC,MAAM,MAAM,IAAI,WAAW,IAAI;EAE/B,WAAW,KAAK,KAAK,EAAE,IAAI,EAAE,CAAC;EAC9B,WAAW,MAAM;EAEjB,OAAO;CACT,QAAQ;EAEN,MAAM,cAAc,OAAM,MADP,WAAW,QAAQ,EACR,CAAC,YAAY;EAE3C,OAAO,IAAI,WAAW,WAAW;CACnC;AACF"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import ShadowClawElement from "./components/shadow-claw-element.js";
|
|
2
2
|
import { i as setDB } from "./txPromise-DdeRXi7G.js";
|
|
3
3
|
import { t as Signal } from "./dist-Bxg3C_zy.js";
|
|
4
|
-
import { o as DEFAULT_GROUP_ID, r as CONFIG_KEYS } from "./config-
|
|
5
|
-
import { c as isPossibleAppRoute, n as applyBasePath, r as buildRoutePath, u as parseRouteFromUrlAsync } from "./app-routes-
|
|
4
|
+
import { o as DEFAULT_GROUP_ID, r as CONFIG_KEYS } from "./config-DZkF9LiO.js";
|
|
5
|
+
import { c as isPossibleAppRoute, n as applyBasePath, r as buildRoutePath, u as parseRouteFromUrlAsync } from "./app-routes-CKkiX12g.js";
|
|
6
6
|
import { t as getConfig } from "./getConfig-B7JdRqIY.js";
|
|
7
|
-
import { o as writeGroupFile } from "./tools-
|
|
8
|
-
import { t as fileViewerStore } from "./file-viewer-
|
|
9
|
-
import { P as joinRoomViaLink, Wt as writeGroupFileBytes, _t as setChannelEnabled, at as buildLlamafileHelpDialogOptions, b as answerUserPrompt, mt as getPeerJsConfig, rt as buildTransformersJsHelpDialogOptions, t as orchestratorStore, un as buildProviderHelpDialogOptions } from "./orchestrator-
|
|
7
|
+
import { o as writeGroupFile } from "./tools-Cmhpk3X8.js";
|
|
8
|
+
import { t as fileViewerStore } from "./file-viewer-Bll2EoGc.js";
|
|
9
|
+
import { P as joinRoomViaLink, Wt as writeGroupFileBytes, _t as setChannelEnabled, at as buildLlamafileHelpDialogOptions, b as answerUserPrompt, mt as getPeerJsConfig, rt as buildTransformersJsHelpDialogOptions, t as orchestratorStore, un as buildProviderHelpDialogOptions } from "./orchestrator-DKHCoikY.js";
|
|
10
10
|
import { t as setConfig } from "./setConfig-CmvLryM3.js";
|
|
11
11
|
import { ulid } from "./utils/ulid.js";
|
|
12
12
|
import { a as showSuccess, r as showError } from "./toast-DZ6r7_YI.js";
|
|
@@ -14,7 +14,7 @@ import { getNamespacedItem, getNamespacedStorageKey, setNamespacedItem } from ".
|
|
|
14
14
|
import { n as MAX_SIDEBAR_WIDTH_PX, r as MIN_SIDEBAR_WIDTH_PX, t as DEFAULT_SIDEBAR_WIDTH_PX } from "./constants-BxxDX8j_.js";
|
|
15
15
|
import { t as parseConfigBoolean } from "./parseConfigBoolean-BsMim4cd.js";
|
|
16
16
|
import { t as buildPromptApiHelpDialogOptions } from "./prompt-api-DJvb1BN7.js";
|
|
17
|
-
import { t as configurePeerJs } from "./configurePeerJs-
|
|
17
|
+
import { t as configurePeerJs } from "./configurePeerJs-B3IE9BY2.js";
|
|
18
18
|
import { t as effect } from "./effect-DL6j9HJp.js";
|
|
19
19
|
|
|
20
20
|
//#region src/stores/theme.ts
|
|
@@ -401,6 +401,54 @@ function showPage(shadow, shadowClaw, db, oStore, page, persist = true) {
|
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
+
//#endregion
|
|
405
|
+
//#region src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts
|
|
406
|
+
/**
|
|
407
|
+
* Sync active state on slotted sidebar navigation links.
|
|
408
|
+
*/
|
|
409
|
+
function syncSlottedSidebarActiveLinks(host, currentUrl) {
|
|
410
|
+
if (!host || typeof host.querySelectorAll !== "function") return;
|
|
411
|
+
const url = currentUrl || (typeof window !== "undefined" && window.location?.href ? new URL(window.location.href) : null);
|
|
412
|
+
if (!url) return;
|
|
413
|
+
const currentPath = url.pathname.replace(/\/+$/, "") || "/";
|
|
414
|
+
host.querySelectorAll("[slot=\"sidebar\"] a[href], [slot=\"sidebar-nav\"] a[href], [slot=\"sidebar-content\"] a[href], [slot=\"sidebar-footer\"] a[href], .sidebar-custom-sections a[href]").forEach((link) => {
|
|
415
|
+
try {
|
|
416
|
+
const href = link.getAttribute("href") || "";
|
|
417
|
+
if (!href || href.startsWith("#") || href.startsWith("javascript:") || href.startsWith("mailto:") || href.startsWith("tel:")) return;
|
|
418
|
+
const linkUrl = new URL(href, url.origin);
|
|
419
|
+
if (linkUrl.origin !== url.origin) {
|
|
420
|
+
link.classList.remove("active");
|
|
421
|
+
link.removeAttribute("aria-current");
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
if ((linkUrl.pathname.replace(/\/+$/, "") || "/") === currentPath && (linkUrl.hash ? linkUrl.hash === url.hash : !url.hash)) {
|
|
425
|
+
link.classList.add("active");
|
|
426
|
+
link.setAttribute("aria-current", "page");
|
|
427
|
+
} else {
|
|
428
|
+
link.classList.remove("active");
|
|
429
|
+
link.removeAttribute("aria-current");
|
|
430
|
+
}
|
|
431
|
+
} catch {}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Sets up listeners so slotted sidebar active links stay in sync whenever
|
|
436
|
+
* the URL changes (popstate, Navigation API navigate, or iframe replaceState).
|
|
437
|
+
* Returns a cleanup function to remove the listeners.
|
|
438
|
+
*/
|
|
439
|
+
function setupSlottedSidebarActiveLinks(host) {
|
|
440
|
+
if (!host || typeof window === "undefined") return () => {};
|
|
441
|
+
const sync = () => syncSlottedSidebarActiveLinks(host);
|
|
442
|
+
sync();
|
|
443
|
+
window.addEventListener("popstate", sync, { passive: true });
|
|
444
|
+
const nav = window.navigation;
|
|
445
|
+
if (nav && typeof nav.addEventListener === "function") nav.addEventListener("navigate", sync, { passive: true });
|
|
446
|
+
return () => {
|
|
447
|
+
window.removeEventListener("popstate", sync);
|
|
448
|
+
if (nav && typeof nav.removeEventListener === "function") nav.removeEventListener("navigate", sync);
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
|
|
404
452
|
//#endregion
|
|
405
453
|
//#region src/components/shadow-claw/utils/applyRoute.ts
|
|
406
454
|
async function applyRoute(shadow, shadowClaw, db, fStore, oStore, route) {
|
|
@@ -459,6 +507,7 @@ async function applyRoute(shadow, shadowClaw, db, fStore, oStore, route) {
|
|
|
459
507
|
});
|
|
460
508
|
}
|
|
461
509
|
}
|
|
510
|
+
syncSlottedSidebarActiveLinks(shadowClaw);
|
|
462
511
|
}
|
|
463
512
|
|
|
464
513
|
//#endregion
|
|
@@ -702,9 +751,17 @@ const SIDEBAR_VISIBILITY_MAP = {
|
|
|
702
751
|
function applySidebarNavVisibility(shadow, page, hidden) {
|
|
703
752
|
if (!shadow) return;
|
|
704
753
|
const navItem = shadow.querySelector(`.nav-item[data-page="${page}"]`);
|
|
705
|
-
if (
|
|
706
|
-
|
|
707
|
-
|
|
754
|
+
if (navItem) {
|
|
755
|
+
navItem.hidden = hidden;
|
|
756
|
+
navItem.setAttribute("aria-hidden", String(hidden));
|
|
757
|
+
}
|
|
758
|
+
if (page === "chat") {
|
|
759
|
+
const convoEl = shadow.querySelector("shadow-claw-conversations");
|
|
760
|
+
if (convoEl) {
|
|
761
|
+
convoEl.hidden = hidden;
|
|
762
|
+
convoEl.setAttribute("aria-hidden", String(hidden));
|
|
763
|
+
}
|
|
764
|
+
}
|
|
708
765
|
}
|
|
709
766
|
/**
|
|
710
767
|
* Get the property name on ShadowClaw for a nav item's hidden state.
|
|
@@ -942,6 +999,14 @@ function bindEventListeners(win, doc, shadow, shadowClaw, db, oStore, fStore, tS
|
|
|
942
999
|
if (win.innerWidth < 896) sidebar.classList.remove("open");
|
|
943
1000
|
});
|
|
944
1001
|
});
|
|
1002
|
+
sidebar.addEventListener("click", (e) => {
|
|
1003
|
+
const target = e.target;
|
|
1004
|
+
if (win.innerWidth < 896 && target?.closest("a, button, .nav-item, .sidebar-link, .sidebar-item")) sidebar.classList.remove("open");
|
|
1005
|
+
});
|
|
1006
|
+
if (typeof shadowClaw?.addEventListener === "function") shadowClaw.addEventListener("click", (e) => {
|
|
1007
|
+
const target = e.target;
|
|
1008
|
+
if (win.innerWidth < 896 && target?.closest("[slot^=\"sidebar\"] a, .sidebar-custom-sections a")) sidebar.classList.remove("open");
|
|
1009
|
+
});
|
|
945
1010
|
doc.addEventListener("click", (e) => {
|
|
946
1011
|
const path = e.composedPath();
|
|
947
1012
|
if (win.innerWidth < 896 && sidebar.classList.contains("open") && !path.includes(sidebar) && !path.includes(menuButton)) sidebar.classList.remove("open");
|
|
@@ -1021,7 +1086,9 @@ function bindEventListeners(win, doc, shadow, shadowClaw, db, oStore, fStore, tS
|
|
|
1021
1086
|
win.navigation.addEventListener("navigate", shadowClaw.handleNavigationApiNavigate);
|
|
1022
1087
|
shadowClaw.navigationListenerAttached = true;
|
|
1023
1088
|
} else {
|
|
1024
|
-
shadowClaw.popstateListener = () => {
|
|
1089
|
+
shadowClaw.popstateListener = (ev) => {
|
|
1090
|
+
const state = ev?.state || win.history?.state;
|
|
1091
|
+
if (state?.inFeedScroll || state?.scrollSpy || state?.suppressRouter) return;
|
|
1025
1092
|
applyRouteFromCurrentLocation(shadow, shadowClaw, db, fStore, oStore, new URL(win.location.href));
|
|
1026
1093
|
};
|
|
1027
1094
|
win.addEventListener("popstate", shadowClaw.popstateListener);
|
|
@@ -1053,6 +1120,7 @@ function bindEventListeners(win, doc, shadow, shadowClaw, db, oStore, fStore, tS
|
|
|
1053
1120
|
shadowClaw.appLifecycleCleanup = null;
|
|
1054
1121
|
}
|
|
1055
1122
|
if (shadowClaw.orchestrator) shadowClaw.appLifecycleCleanup = setupAppLifecycle(win, doc, shadowClaw.orchestrator);
|
|
1123
|
+
setupSlottedSidebarActiveLinks(shadowClaw);
|
|
1056
1124
|
}
|
|
1057
1125
|
|
|
1058
1126
|
//#endregion
|
|
@@ -1077,6 +1145,8 @@ function getRoute(db, ev) {
|
|
|
1077
1145
|
if (!db) return;
|
|
1078
1146
|
const navigateEvent = ev;
|
|
1079
1147
|
if (navigateEvent.navigationType === "reload") return;
|
|
1148
|
+
const navState = (typeof navigateEvent?.destination?.getState === "function" ? navigateEvent.destination.getState() : null) || (navigateEvent.navigationType === "replace" && typeof history !== "undefined" ? history.state : null);
|
|
1149
|
+
if (navState?.inFeedScroll || navState?.scrollSpy || navState?.suppressRouter) return;
|
|
1080
1150
|
const destinationUrl = navigateEvent?.destination?.url;
|
|
1081
1151
|
if (typeof destinationUrl !== "string") return;
|
|
1082
1152
|
const parsedUrl = new URL(destinationUrl);
|
|
@@ -1225,6 +1295,11 @@ function historyState(history, finalPath, options) {
|
|
|
1225
1295
|
//#region src/components/shadow-claw/utils/navigateToRoute.ts
|
|
1226
1296
|
async function navigateToRoute(shadow, shadowClaw, db, fStore, oStore, route, options = { replace: false }) {
|
|
1227
1297
|
const finalPath = applyBasePath(buildRoutePath(route));
|
|
1298
|
+
const currentPath = typeof window !== "undefined" && window.location ? `${window.location.pathname}${window.location.search}${window.location.hash}` : "";
|
|
1299
|
+
if (currentPath && finalPath === currentPath) {
|
|
1300
|
+
await applyRoute(shadow, shadowClaw, db, fStore, oStore, route);
|
|
1301
|
+
return;
|
|
1302
|
+
}
|
|
1228
1303
|
if (supportsNavigationApi()) {
|
|
1229
1304
|
window.navigation.navigate(finalPath, { history: options.replace ? "replace" : "push" });
|
|
1230
1305
|
return;
|
|
@@ -1574,6 +1649,10 @@ a:hover {
|
|
|
1574
1649
|
transition: transform 0.2s ease;
|
|
1575
1650
|
}
|
|
1576
1651
|
|
|
1652
|
+
.header-main-toggle {
|
|
1653
|
+
display: var(--shadow-claw-header-main-toggle-display, block);
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1577
1656
|
.header-main-toggle[aria-pressed="true"],
|
|
1578
1657
|
.activity-log-toggle[aria-pressed="true"] {
|
|
1579
1658
|
box-shadow: 0 0 0.5rem
|
|
@@ -1763,6 +1842,28 @@ a:hover {
|
|
|
1763
1842
|
padding: 0.5rem;
|
|
1764
1843
|
}
|
|
1765
1844
|
|
|
1845
|
+
.nav-menu:not(:has(.nav-item:not([hidden]))) {
|
|
1846
|
+
display: none;
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
slot[name="sidebar"],
|
|
1850
|
+
slot[name="sidebar-nav"],
|
|
1851
|
+
slot[name="sidebar-content"],
|
|
1852
|
+
slot[name="sidebar-footer"] {
|
|
1853
|
+
display: block;
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
::slotted([slot="sidebar"]),
|
|
1857
|
+
::slotted([slot="sidebar-nav"]),
|
|
1858
|
+
::slotted([slot="sidebar-content"]),
|
|
1859
|
+
::slotted([slot="sidebar-footer"]) {
|
|
1860
|
+
display: block;
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1863
|
+
.sidebar-footer {
|
|
1864
|
+
display: var(--shadow-claw-sidebar-footer-display, block);
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1766
1867
|
.sidebar-spacer {
|
|
1767
1868
|
flex: 1;
|
|
1768
1869
|
}
|
|
@@ -2437,8 +2538,12 @@ const doc = new DOMParser().parseFromString(`<template>
|
|
|
2437
2538
|
<li class="nav-item" data-page="files">📁 Files</li>
|
|
2438
2539
|
</ul>
|
|
2439
2540
|
</nav>
|
|
2541
|
+
<slot name="sidebar-nav"></slot>
|
|
2542
|
+
<slot name="sidebar"></slot>
|
|
2543
|
+
<slot name="sidebar-content"></slot>
|
|
2440
2544
|
<div class="sidebar-spacer"></div>
|
|
2441
2545
|
<shadow-claw-conversations></shadow-claw-conversations>
|
|
2546
|
+
<slot name="sidebar-footer"></slot>
|
|
2442
2547
|
<div class="sidebar-footer">
|
|
2443
2548
|
<button class="settings-btn" data-action="show-settings">
|
|
2444
2549
|
⚙️ Settings
|
|
@@ -2651,7 +2756,7 @@ var ShadowClaw = class extends ShadowClawElement {
|
|
|
2651
2756
|
async connectedCallback() {
|
|
2652
2757
|
if (!this.shadowRoot) throw new Error("shadowRoot not found");
|
|
2653
2758
|
try {
|
|
2654
|
-
const { Orchestrator } = await import("./orchestrator-
|
|
2759
|
+
const { Orchestrator } = await import("./orchestrator-Dn1ZOz9B.js");
|
|
2655
2760
|
Promise.all([
|
|
2656
2761
|
import("./components/shadow-claw-conversations.js"),
|
|
2657
2762
|
import("./components/shadow-claw-dialog.js"),
|
|
@@ -2676,7 +2781,7 @@ var ShadowClaw = class extends ShadowClawElement {
|
|
|
2676
2781
|
await processPendingSharedPayloads(window, this.shadowRoot, this, orchestratorStore, fileViewerStore, this.db, new URL(window.location.href));
|
|
2677
2782
|
console.log("ShadowClaw UI initialized");
|
|
2678
2783
|
if (typeof customElements !== "undefined") await customElements.whenDefined(`shadow-claw-${this.currentPage}`);
|
|
2679
|
-
const { isMemoryStorageFallbackActive } = await import("./memoryStorage-
|
|
2784
|
+
const { isMemoryStorageFallbackActive } = await import("./memoryStorage-DL-Bo3dh.js").then((n) => n.n);
|
|
2680
2785
|
if (isMemoryStorageFallbackActive()) {
|
|
2681
2786
|
const { showWarning } = await import("./toast-DZ6r7_YI.js").then((n) => n.c);
|
|
2682
2787
|
showWarning("Private Browsing / Limited Storage: Operating in temporary in-memory mode. Files and changes will not persist across page reloads.", 7e3);
|
|
@@ -2732,7 +2837,7 @@ var ShadowClaw = class extends ShadowClawElement {
|
|
|
2732
2837
|
const { parsedUrl, navigateEvent } = getRoute(this.db, event) ?? {};
|
|
2733
2838
|
if (!parsedUrl || !navigateEvent) return;
|
|
2734
2839
|
if (typeof navigateEvent.intercept === "function") navigateEvent.intercept({ handler: async () => {
|
|
2735
|
-
const { parseRouteFromUrlAsync } = await import("./app-routes-
|
|
2840
|
+
const { parseRouteFromUrlAsync } = await import("./app-routes-CKkiX12g.js").then((n) => n.t);
|
|
2736
2841
|
const asyncRoute = await parseRouteFromUrlAsync(parsedUrl, orchestratorStore.activeGroupId);
|
|
2737
2842
|
if (!asyncRoute) return;
|
|
2738
2843
|
await applyRoute(this.shadowRoot, this, this.db, fileViewerStore, orchestratorStore, asyncRoute);
|
|
@@ -2748,7 +2853,7 @@ var ShadowClaw = class extends ShadowClawElement {
|
|
|
2748
2853
|
if (this.db) try {
|
|
2749
2854
|
const { getConfig } = await import("./getConfig-B7JdRqIY.js").then((n) => n.n);
|
|
2750
2855
|
const { parseConfigBoolean } = await import("./parseConfigBoolean-BsMim4cd.js").then((n) => n.n);
|
|
2751
|
-
const { CONFIG_KEYS } = await import("./config-
|
|
2856
|
+
const { CONFIG_KEYS } = await import("./config-DZkF9LiO.js").then((n) => n.k);
|
|
2752
2857
|
const rawSplit = await getConfig(this.db, CONFIG_KEYS.CHAT_SPLIT_VIEW_ENABLED);
|
|
2753
2858
|
this.chatSplitViewEnabled = parseConfigBoolean(rawSplit);
|
|
2754
2859
|
} catch {
|
|
@@ -2756,7 +2861,7 @@ var ShadowClaw = class extends ShadowClawElement {
|
|
|
2756
2861
|
}
|
|
2757
2862
|
const chatSplitHandle = this.shadowRoot?.querySelector(".chat-split-resize-handle");
|
|
2758
2863
|
if (this.shadowRoot && chatSplitHandle instanceof HTMLElement) {
|
|
2759
|
-
const { initChatSplitResize } = await import("./initChatSplitResize-
|
|
2864
|
+
const { initChatSplitResize } = await import("./initChatSplitResize-DiKTI-wk.js");
|
|
2760
2865
|
await initChatSplitResize(this.shadowRoot, this, chatSplitHandle, this.db);
|
|
2761
2866
|
}
|
|
2762
2867
|
this.terminalElement = document.createElement("shadow-claw-terminal");
|
|
@@ -2795,4 +2900,4 @@ if (!customElements.get(elementName)) customElements.define(elementName, ShadowC
|
|
|
2795
2900
|
|
|
2796
2901
|
//#endregion
|
|
2797
2902
|
export { ShadowClaw as t };
|
|
2798
|
-
//# sourceMappingURL=shadow-claw-
|
|
2903
|
+
//# sourceMappingURL=shadow-claw-CtCj5Rn_.js.map
|