shadow-claw 1.59.6 → 1.59.7
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 +12 -4
- package/.well-known/mcp.json +12 -4
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DM4xsTry.js → chunk-3vNYrs_L.js} +1 -1
- package/dist/cli/{chunk-Ctg5L55n.js → chunk-66BvqAV0.js} +1 -1
- package/dist/cli/{chunk-Bq38OubR.js → chunk-B0qusANw.js} +1 -1
- package/dist/cli/{chunk-yiVdvGCJ.js → chunk-B3TrWbca.js} +7 -7
- package/dist/cli/{chunk-C8DBACtx.js → chunk-B88Z8T_9.js} +1 -1
- package/dist/cli/chunk-BCjL0JXf.js +1 -0
- package/dist/cli/chunk-BNcu1oiT.js +1 -0
- package/dist/cli/{chunk-gvNsvav0.js → chunk-C5ypckWC.js} +7 -7
- package/dist/cli/{chunk-Dw8GndPD.js → chunk-CAAeGOdy.js} +1 -1
- package/dist/cli/chunk-CFxww5Yz.js +1 -0
- package/dist/cli/chunk-CGIgtL6R.js +1 -0
- package/dist/cli/{chunk-DJqHK-qS.js → chunk-CQaCgswD.js} +7 -7
- package/dist/cli/chunk-CZdCRqNe.js +7 -0
- package/dist/cli/chunk-CafdvLx-.js +1 -0
- package/dist/cli/{chunk-Bc_weULz.js → chunk-CncW6_WL.js} +1 -1
- package/dist/cli/chunk-DDvuLVfW.js +1 -0
- package/dist/cli/{chunk-Cq_kQohv.js → chunk-DMs7kREC.js} +1 -1
- package/dist/cli/{chunk-CX2itile.js → chunk-D_te8ufL.js} +1 -1
- package/dist/cli/{chunk-3wTukVof.js → chunk-DhOU6GYX.js} +1 -1
- package/dist/cli/chunk-Dhap1VwA.js +1 -0
- package/dist/cli/chunk-DwvavohW.js +1 -0
- package/dist/cli/{chunk-DLde6nuO.js → chunk-SRBRVorc.js} +1 -1
- package/dist/cli/{chunk-D3y7h9Xe.js → chunk-SxK79JmB.js} +1 -1
- package/dist/cli/chunk-_a0CkUNS.js +139 -0
- package/dist/cli/{chunk-C9o6lXP3.js → chunk-hVf839t7.js} +1 -1
- package/dist/cli/chunk-iB8OoMmW.js +7 -0
- package/dist/cli/cli.js +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-DJdIjp2V.js → app-routes-BXiRvlNl.js} +7 -25
- package/dist/lib/{app-routes-DJdIjp2V.js.map → app-routes-BXiRvlNl.js.map} +1 -1
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js} +2 -2
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map} +1 -1
- package/dist/lib/{channel-Dlru5ofR.js → channel-mmdGzPkT.js} +3 -3
- package/dist/lib/{channel-Dlru5ofR.js.map → channel-mmdGzPkT.js.map} +1 -1
- package/dist/lib/{chat-template-BuuLY8l7.js → chat-template-DPEKGJhB.js} +2 -2
- package/dist/lib/{chat-template-BuuLY8l7.js.map → chat-template-DPEKGJhB.js.map} +1 -1
- package/dist/lib/{compact-context-BtR55YPU.js → compact-context-CY9BBlUQ.js} +19 -19
- package/dist/lib/{compact-context-BtR55YPU.js.map → compact-context-CY9BBlUQ.js.map} +1 -1
- package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/index.js +27 -27
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-provider-model-picker.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-DxNI3TlW.js → config-BrHR97zt.js} +2 -2
- package/dist/lib/{config-DxNI3TlW.js.map → config-BrHR97zt.js.map} +1 -1
- package/dist/lib/{configure-peer-js-ChDhOZU4.js → configure-peer-js-ccNvax2N.js} +3 -3
- package/dist/lib/{configure-peer-js-ChDhOZU4.js.map → configure-peer-js-ccNvax2N.js.map} +1 -1
- package/dist/lib/{connections-DC4NZkJE.js → connections-C1FWsBsE.js} +2 -2
- package/dist/lib/{connections-DC4NZkJE.js.map → connections-C1FWsBsE.js.map} +1 -1
- package/dist/lib/{credentials-5vpz0XPk.js → credentials-CZbngHXW.js} +2 -2
- package/dist/lib/{credentials-5vpz0XPk.js.map → credentials-CZbngHXW.js.map} +1 -1
- package/dist/lib/{discover-skills-CD0sKvAI.js → discover-skills-OwlQ2sXA.js} +13 -13
- package/dist/lib/{discover-skills-CD0sKvAI.js.map → discover-skills-OwlQ2sXA.js.map} +1 -1
- package/dist/lib/{download-group-file-Dk3qaxhJ.js → download-group-file-D0wgg10Q.js} +2 -2
- package/dist/lib/{download-group-file-Dk3qaxhJ.js.map → download-group-file-D0wgg10Q.js.map} +1 -1
- package/dist/lib/{file-viewer-B4pRW-_G.js → file-viewer-DOfvX6yy.js} +5 -5
- package/dist/lib/{file-viewer-B4pRW-_G.js.map → file-viewer-DOfvX6yy.js.map} +1 -1
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js → get-or-create-subscriber-id-wyzaML7Z.js} +2 -2
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js.map → get-or-create-subscriber-id-wyzaML7Z.js.map} +1 -1
- package/dist/lib/{git-B3Q1euc5.js → git-D2J_j9X9.js} +5 -5
- package/dist/lib/{git-B3Q1euc5.js.map → git-D2J_j9X9.js.map} +1 -1
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js → iframe-bridge-scripts-Dx825LLG.js} +2 -2
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js.map → iframe-bridge-scripts-Dx825LLG.js.map} +1 -1
- package/dist/lib/index.js +28 -28
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js → init-chat-split-resize-Cc0bd2z9.js} +2 -2
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js.map → init-chat-split-resize-Cc0bd2z9.js.map} +1 -1
- package/dist/lib/{init-control-plane-C1FRRmjC.js → init-control-plane-B7blDVIE.js} +15 -15
- package/dist/lib/{init-control-plane-C1FRRmjC.js.map → init-control-plane-B7blDVIE.js.map} +1 -1
- package/dist/lib/{invoke-agent-CzN7sVh-.js → invoke-agent-SxvudiDT.js} +11 -11
- package/dist/lib/{invoke-agent-CzN7sVh-.js.map → invoke-agent-SxvudiDT.js.map} +1 -1
- package/dist/lib/{markdown-mbNo7cV3.js → markdown--6vTAPEH.js} +2 -2
- package/dist/lib/{markdown-mbNo7cV3.js.map → markdown--6vTAPEH.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js → mcp-reconnect-BeqQvNWO.js} +3 -3
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js.map → mcp-reconnect-BeqQvNWO.js.map} +1 -1
- package/dist/lib/{model-ranking-DGNSWYwN.js → model-ranking-BhsJV7vb.js} +2 -2
- package/dist/lib/{model-ranking-DGNSWYwN.js.map → model-ranking-BhsJV7vb.js.map} +1 -1
- package/dist/lib/{move-group-entry-NMTJ59M9.js → move-group-entry-DDpjxa10.js} +5 -5
- package/dist/lib/{move-group-entry-NMTJ59M9.js.map → move-group-entry-DDpjxa10.js.map} +1 -1
- package/dist/lib/{orchestrator-B8FV1V7x.js → orchestrator-C7fkh7T7.js} +24 -24
- package/dist/lib/{orchestrator-B8FV1V7x.js.map → orchestrator-C7fkh7T7.js.map} +1 -1
- package/dist/lib/{orchestrator-i_QJ-o22.js → orchestrator-CCARkxQC.js} +11 -11
- package/dist/lib/orchestrator-CCARkxQC.js.map +1 -0
- package/dist/lib/{parse-path-DPCn-HwI.js → parse-path-BOHQP_IQ.js} +3 -3
- package/dist/lib/{parse-path-DPCn-HwI.js.map → parse-path-BOHQP_IQ.js.map} +1 -1
- package/dist/lib/{peerjs-z5zeioPV.js → peerjs-Bfw_FWLB.js} +8 -8
- package/dist/lib/{peerjs-z5zeioPV.js.map → peerjs-Bfw_FWLB.js.map} +1 -1
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js → process-peer-query-param-BxYiZNdf.js} +5 -5
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js.map → process-peer-query-param-BxYiZNdf.js.map} +1 -1
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js → process-pending-shared-payloads-DPIbwRb3.js} +4 -4
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js.map → process-pending-shared-payloads-DPIbwRb3.js.map} +1 -1
- package/dist/lib/{process-room-query-param-C3FFGGn6.js → process-room-query-param-B2_d50nE.js} +4 -4
- package/dist/lib/{process-room-query-param-C3FFGGn6.js.map → process-room-query-param-B2_d50nE.js.map} +1 -1
- package/dist/lib/{provider-DcQZypu5.js → provider-BC9KPI14.js} +3 -3
- package/dist/lib/{provider-DcQZypu5.js.map → provider-BC9KPI14.js.map} +1 -1
- package/dist/lib/{push-client-Cx5rMs6J.js → push-client-rrjTdc-U.js} +5 -5
- package/dist/lib/{push-client-Cx5rMs6J.js.map → push-client-rrjTdc-U.js.map} +1 -1
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js → read-group-file-bytes-UQIk1eJG.js} +2 -2
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js.map → read-group-file-bytes-UQIk1eJG.js.map} +1 -1
- package/dist/lib/{rooms-CwlkYLDU.js → rooms-bwGoYb1q.js} +2 -2
- package/dist/lib/{rooms-CwlkYLDU.js.map → rooms-bwGoYb1q.js.map} +1 -1
- package/dist/lib/{shadow-claw-DoQ7fgl5.js → shadow-claw-CypGVlVO.js} +17 -20
- package/dist/lib/shadow-claw-CypGVlVO.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js → shadow-claw-a2ui-lG0vQbW8.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js.map → shadow-claw-a2ui-lG0vQbW8.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js → shadow-claw-accounts-CkqyCxwp.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js.map → shadow-claw-accounts-CkqyCxwp.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js → shadow-claw-channel-config-DJpDovkF.js} +4 -4
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js.map → shadow-claw-channel-config-DJpDovkF.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js → shadow-claw-channels-DJLwRovH.js} +3 -3
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js.map → shadow-claw-channels-DJLwRovH.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js → shadow-claw-chat-B92cPaft.js} +15 -15
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js.map → shadow-claw-chat-B92cPaft.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js → shadow-claw-control-plane-fvn-qyHj.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js.map → shadow-claw-control-plane-fvn-qyHj.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js → shadow-claw-conversations-CsVyDOny.js} +7 -7
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js.map → shadow-claw-conversations-CsVyDOny.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js → shadow-claw-file-viewer-DFfyP7s5.js} +10 -10
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js.map → shadow-claw-file-viewer-DFfyP7s5.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DN7irmE1.js → shadow-claw-files-cT6HL7ye.js} +11 -11
- package/dist/lib/{shadow-claw-files-DN7irmE1.js.map → shadow-claw-files-cT6HL7ye.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-D-1oIh65.js → shadow-claw-git-Cv9mQgTx.js} +6 -6
- package/dist/lib/{shadow-claw-git-D-1oIh65.js.map → shadow-claw-git-Cv9mQgTx.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js → shadow-claw-integrations-RZZ-m-Id.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js.map → shadow-claw-integrations-RZZ-m-Id.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js → shadow-claw-llm-CKOYzPDp.js} +9 -9
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js.map → shadow-claw-llm-CKOYzPDp.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js → shadow-claw-mcp-remote-BKFROurv.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js.map → shadow-claw-mcp-remote-BKFROurv.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js → shadow-claw-networking-DYfiUQaH.js} +2 -2
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js.map → shadow-claw-networking-DYfiUQaH.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js → shadow-claw-notifications-JJlzriuX.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js.map → shadow-claw-notifications-JJlzriuX.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js → shadow-claw-page-header-C_Qr3xZM.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js.map → shadow-claw-page-header-C_Qr3xZM.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js → shadow-claw-pages-BCo3ihZI.js} +11 -11
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js.map → shadow-claw-pages-BCo3ihZI.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js → shadow-claw-peerjs-CFNjfrY5.js} +6 -6
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js.map → shadow-claw-peerjs-CFNjfrY5.js.map} +1 -1
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js → shadow-claw-provider-model-picker-B-Ct4yW-.js} +2 -2
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js.map → shadow-claw-provider-model-picker-B-Ct4yW-.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js → shadow-claw-settings-BMwne0bh.js} +7 -7
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js.map → shadow-claw-settings-BMwne0bh.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js → shadow-claw-storage-DUY8B9m-.js} +5 -5
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js.map → shadow-claw-storage-DUY8B9m-.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js → shadow-claw-task-server-yWeoA3eL.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js.map → shadow-claw-task-server-yWeoA3eL.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js → shadow-claw-tasks-Bg0uM15I.js} +9 -9
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js.map → shadow-claw-tasks-Bg0uM15I.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js → shadow-claw-terminal-fyJPppY_.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js.map → shadow-claw-terminal-fyJPppY_.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js → shadow-claw-tools-D0T8m3go.js} +7 -7
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js.map → shadow-claw-tools-D0T8m3go.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js → shadow-claw-webvm-CQvzJwKI.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js.map → shadow-claw-webvm-CQvzJwKI.js.map} +1 -1
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js → sync-web-mcp-registration-BFtG_4kx.js} +6 -6
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js.map → sync-web-mcp-registration-BFtG_4kx.js.map} +1 -1
- package/dist/lib/{system-prompt-DT_KeYaL.js → system-prompt-bhGRLoL2.js} +7 -7
- package/dist/lib/{system-prompt-DT_KeYaL.js.map → system-prompt-bhGRLoL2.js.map} +1 -1
- package/dist/lib/{tools-Beuyh8y1.js → tools-B8OJ4sMF.js} +4 -4
- package/dist/lib/{tools-Beuyh8y1.js.map → tools-B8OJ4sMF.js.map} +1 -1
- package/dist/lib/{transformers-DydnReu4.js → transformers-BMURofG6.js} +2 -2
- package/dist/lib/{transformers-DydnReu4.js.map → transformers-BMURofG6.js.map} +1 -1
- package/dist/lib/{trusted-types-CfwZl_rr.js → trusted-types-HwsGS5Nj.js} +19 -17
- package/dist/lib/{trusted-types-CfwZl_rr.js.map → trusted-types-HwsGS5Nj.js.map} +1 -1
- package/dist/lib/{upload-group-file-BbBzjTcN.js → upload-group-file-CJpoNjEb.js} +3 -3
- package/dist/lib/{upload-group-file-BbBzjTcN.js.map → upload-group-file-CJpoNjEb.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespaced-storage.js +1 -1
- package/dist/lib/utils/runtime-assets.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{webmcp-DCfAFiIO.js → webmcp-BoMTvgmX.js} +3 -3
- package/dist/lib/{webmcp-DCfAFiIO.js.map → webmcp-BoMTvgmX.js.map} +1 -1
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js → write-group-file-bytes-CNT7DqOZ.js} +3 -3
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js.map → write-group-file-bytes-CNT7DqOZ.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +12 -4
- package/dist/public/.well-known/mcp.json +12 -4
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/attachment-capabilities-AdwXt3--.js +1 -0
- package/dist/public/{channel-BylT3rJC.js → channel-Dk7wl-Av.js} +1 -1
- package/dist/public/{chat-template-DPHJy7tr.js → chat-template-BwAnTFKf.js} +1 -1
- package/dist/public/{compact-context-BINQh64w.js → compact-context-fOTqwKF6.js} +2 -2
- package/dist/public/config-C16fFWtP.js +1 -0
- package/dist/public/{configure-peer-js-DChhcOfe.js → configure-peer-js-BOV0tR6G.js} +1 -1
- package/dist/public/{connections-CHaw0VqP.js → connections-Dxwj8yK_.js} +1 -1
- package/dist/public/{create-model-cache-fetch-DQebkoPL.js → create-model-cache-fetch-DSAFjOwc.js} +1 -1
- package/dist/public/{credentials-CgVqS119.js → credentials-CJUQ5Ep2.js} +1 -1
- package/dist/public/{custom-element-security-kiDhPfb8.js → custom-element-security-B2daIE5r.js} +2 -2
- package/dist/public/{discover-skills-Cvmx5I9V.js → discover-skills-D1sNTy2r.js} +6 -6
- package/dist/public/docs/example/article/index.html +28 -29
- package/dist/public/docs/example/article.html +28 -29
- package/dist/public/docs/publishing/index.html +28 -29
- package/dist/public/docs/publishing.html +28 -29
- package/dist/public/docs/skill-creator/index.html +28 -29
- package/dist/public/docs/skill-creator.html +28 -29
- package/dist/public/{download-group-file-BapoRgfU.js → download-group-file-BkMH-JKi.js} +1 -1
- package/dist/public/{e2e-bridge-C0g8vZKr.js → e2e-bridge-Cz95DLlb.js} +1 -1
- package/dist/public/get-group-dir-D--BiEyk.js +1 -0
- package/dist/public/{get-or-create-subscriber-id-GvRZYXwA.js → get-or-create-subscriber-id-jVHnQfbr.js} +1 -1
- package/dist/public/{git-CaAAZfVd.js → git-BmMlwIMP.js} +2 -2
- package/dist/public/{iframe-bridge-scripts-BnqtKhE4.js → iframe-bridge-scripts-Cibg0m6A.js} +1 -1
- package/dist/public/index.html +28 -29
- package/dist/public/index.js +1 -1
- package/dist/public/{init-chat-split-resize-Btonoy8u.js → init-chat-split-resize-C8AqCCiK.js} +1 -1
- package/dist/public/init-control-plane-Cb31yLTY.js +1 -0
- package/dist/public/{invoke-agent-B3Osw6K7.js → invoke-agent-CN7mSV0Z.js} +1 -1
- package/dist/public/main/index.html +28 -29
- package/dist/public/main/memory/index.html +28 -29
- package/dist/public/main/memory.html +28 -29
- package/dist/public/main.html +28 -29
- package/dist/public/{markdown-CPbU4r1U.js → markdown-CDSb5Hrl.js} +1 -1
- package/dist/public/{mcp-reconnect-CzROVsXG.js → mcp-reconnect-iPZPihwX.js} +1 -1
- package/dist/public/{memory-storage-BkoMlxOr.js → memory-storage-2m7KZ-aP.js} +1 -1
- package/dist/public/{model-ranking-CK0iBo3Z.js → model-ranking-BgOSaNIy.js} +1 -1
- package/dist/public/{move-group-entry-CTxoq7lw.js → move-group-entry-CXneuNVa.js} +1 -1
- package/dist/public/orchestrator-DBO4NZqd.js +63 -0
- package/dist/public/{orchestrator-BrDjQbGf.js → orchestrator-Dyylc8IU.js} +2 -2
- package/dist/public/{peerjs-CgF4Iz5W.js → peerjs-l0jiBoh6.js} +1 -1
- package/dist/public/{process-peer-query-param-BL2k0Hu-.js → process-peer-query-param-s-aSP1Rq.js} +1 -1
- package/dist/public/{process-pending-shared-payloads-C1AgGvn8.js → process-pending-shared-payloads-BN3GigPT.js} +1 -1
- package/dist/public/{process-room-query-param-DM0QCq3_.js → process-room-query-param-B2Qe0F0M.js} +1 -1
- package/dist/public/provider-YPZmsuHR.js +1 -0
- package/dist/public/{push-client-DJEOz7bi.js → push-client-B2LC8Qp9.js} +1 -1
- package/dist/public/{rooms-C6LXIJl4.js → rooms-ChCEOvkw.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/shadow-claw-Br8mWDUx.js +1176 -0
- package/dist/public/{shadow-claw-accounts--4hd_oCz.js → shadow-claw-accounts-Dm6G7KMP.js} +1 -1
- package/dist/public/{shadow-claw-card-IbNlZAdK.js → shadow-claw-card-CggS8uSa.js} +1 -1
- package/dist/public/{shadow-claw-channels-Vq_pPGa2.js → shadow-claw-channels-088vhuWO.js} +1 -1
- package/dist/public/{shadow-claw-chat-D7_GS25e.js → shadow-claw-chat-BRwRlq-n.js} +3 -3
- package/dist/public/{shadow-claw-control-plane-WTMEV8_p.js → shadow-claw-control-plane-rhKACK85.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CLQgU1IT.js → shadow-claw-conversations-CF_yUfKl.js} +1 -1
- package/dist/public/{shadow-claw-empty-state-D4CrFGsN.js → shadow-claw-empty-state-CkpOSXCS.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-BhqiqLWQ.js → shadow-claw-file-viewer-DWCejuY3.js} +4 -4
- package/dist/public/{shadow-claw-files-senDiG9l.js → shadow-claw-files-L6_ioyzh.js} +2 -2
- package/dist/public/{shadow-claw-git-DOOCqY23.js → shadow-claw-git-DsdkwLqQ.js} +2 -2
- package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-CSbRTOm3.js} +1 -1
- package/dist/public/{shadow-claw-llm-actYICAk.js → shadow-claw-llm-BitaeAVc.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-gSbV5riy.js} +1 -1
- package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-Dn_y6Cl9.js} +1 -1
- package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-Cj4Lqx8U.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-DR4OZFt2.js} +1 -1
- package/dist/public/{shadow-claw-page-header-action-button-2DH5O1TD.js → shadow-claw-page-header-action-button-BnCV_2Kb.js} +1 -1
- package/dist/public/{shadow-claw-pages-3r5I-wI8.js → shadow-claw-pages-mpDOtNYj.js} +6 -6
- package/dist/public/{shadow-claw-pdf-viewer-BiCEwsoY.js → shadow-claw-pdf-viewer-DZ_84qJH.js} +1 -1
- package/dist/public/{shadow-claw-settings-DgB9RSZN.js → shadow-claw-settings-CfFTYTEy.js} +2 -2
- package/dist/public/{shadow-claw-storage-JB_43nd8.js → shadow-claw-storage-DLmiT4bG.js} +1 -1
- package/dist/public/{shadow-claw-task-server-oi5UIxdA.js → shadow-claw-task-server-BoMBCsiS.js} +1 -1
- package/dist/public/{shadow-claw-tasks-CnyiOt81.js → shadow-claw-tasks-ChEp1j7x.js} +3 -3
- package/dist/public/{shadow-claw-terminal-BC3RynHt.js → shadow-claw-terminal-BaoVbOda.js} +1 -1
- package/dist/public/{shadow-claw-toast-YjG--2Za.js → shadow-claw-toast-e8oz7z6Z.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bbwk4vlT.js → shadow-claw-tools-BYjUBiJz.js} +1 -1
- package/dist/public/{shadow-claw-webvm-HZqzl2H5.js → shadow-claw-webvm-xGb13TME.js} +1 -1
- package/dist/public/{sync-web-mcp-registration-BaH2nAP0.js → sync-web-mcp-registration-CQluj-Kz.js} +1 -1
- package/dist/public/{system-prompt-Dck3N8T0.js → system-prompt-CTJn0tK-.js} +1 -1
- package/dist/public/{tools-DHA1dK2I.js → tools-D-52Zmfc.js} +1 -1
- package/dist/public/{transformers-C-DuTM2K.js → transformers-CQ9ss9rD.js} +1 -1
- package/dist/public/{upload-group-file-Cejr3zo1.js → upload-group-file-A8kB7lvO.js} +1 -1
- package/dist/public/{webmcp-CMRtu57-.js → webmcp-DIUZjVF5.js} +1 -1
- package/dist/public/{write-group-file-CmJuVQNO.js → write-group-file-R67DjJ-q.js} +1 -1
- package/dist/public/{write-group-file-bytes-Cejr3zo1.js → write-group-file-bytes-A8kB7lvO.js} +1 -1
- package/dist/public/{zip-reader-CuQ13eLe.js → zip-reader-DN7FB-Q0.js} +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-BFziiMKt.js +0 -7
- package/dist/cli/chunk-BM3llsxb.js +0 -1
- package/dist/cli/chunk-Bj5qFsDi.js +0 -7
- package/dist/cli/chunk-Bj95zm-y.js +0 -1
- package/dist/cli/chunk-BpyP-esT.js +0 -1
- package/dist/cli/chunk-CX696s3_.js +0 -1
- package/dist/cli/chunk-DRxCrCAA.js +0 -139
- package/dist/cli/chunk-DjbCHa0h.js +0 -1
- package/dist/cli/chunk-DsQhAF31.js +0 -1
- package/dist/cli/chunk-VM-dECyG.js +0 -1
- package/dist/cli/chunk-heu2xRw1.js +0 -1
- package/dist/lib/orchestrator-i_QJ-o22.js.map +0 -1
- package/dist/lib/shadow-claw-DoQ7fgl5.js.map +0 -1
- package/dist/public/app-routes-V_-URXc5.js +0 -1
- package/dist/public/attachment-capabilities-B6ibLwQB.js +0 -1
- package/dist/public/config-C-YdSFZB.js +0 -1
- package/dist/public/get-group-dir-DL44kvqW.js +0 -1
- package/dist/public/init-control-plane-BoJijVtf.js +0 -1
- package/dist/public/orchestrator-CaUpEVkQ.js +0 -63
- package/dist/public/provider-DNIL4-Hw.js +0 -1
- package/dist/public/shadow-claw-DdgeYPg5.js +0 -1176
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { n as __exportAll } from "./rolldown-runtime-DwyhSnWe.js";
|
|
2
|
-
|
|
3
1
|
//#region src/storage/static-routing.ts
|
|
4
2
|
const DEFAULT_GROUP_ID = "br:main";
|
|
5
3
|
const STATIC_ROUTING_SCRIPT_ID = "shadow-claw-static-routing";
|
|
@@ -267,26 +265,6 @@ function resolveDefaultPinnedPageRef(value) {
|
|
|
267
265
|
|
|
268
266
|
//#endregion
|
|
269
267
|
//#region src/core/app-routes.ts
|
|
270
|
-
var app_routes_exports = /* @__PURE__ */ __exportAll({
|
|
271
|
-
PAGE_EXTENSIONS: () => PAGE_EXTENSIONS,
|
|
272
|
-
applyBasePath: () => applyBasePath,
|
|
273
|
-
buildRoutePath: () => buildRoutePath,
|
|
274
|
-
decodePathSegment: () => decodePathSegment,
|
|
275
|
-
getAppBasePath: () => getAppBasePath,
|
|
276
|
-
getDeploymentNamespace: () => getDeploymentNamespace,
|
|
277
|
-
getFileRouteDirPath: () => getFileRouteDirPath,
|
|
278
|
-
getWorkspaceRouteRequestPath: () => getWorkspaceRouteRequestPath,
|
|
279
|
-
isFeedRoute: () => isFeedRoute,
|
|
280
|
-
isNonPageFilePath: () => isNonPageFilePath,
|
|
281
|
-
isPossibleAppRoute: () => isPossibleAppRoute,
|
|
282
|
-
parseRouteFromUrl: () => parseRouteFromUrl,
|
|
283
|
-
parseRouteFromUrlAsync: () => parseRouteFromUrlAsync,
|
|
284
|
-
resetAppBasePathCache: () => resetAppBasePathCache,
|
|
285
|
-
resolveHrefAgainstRoute: () => resolveHrefAgainstRoute,
|
|
286
|
-
resolvePrettyPathToRoute: () => resolvePrettyPathToRoute,
|
|
287
|
-
resolvePrettyPathToRouteAsync: () => resolvePrettyPathToRouteAsync,
|
|
288
|
-
resolveRouteToPrettyPath: () => resolveRouteToPrettyPath
|
|
289
|
-
});
|
|
290
268
|
let cachedBasePath = null;
|
|
291
269
|
function encodePathSegment(value) {
|
|
292
270
|
if (value === "br:main") return "main";
|
|
@@ -482,7 +460,11 @@ function parseRouteFromUrl(url, fallbackGroupId) {
|
|
|
482
460
|
}
|
|
483
461
|
const parts = pathname.split("/").filter(Boolean).map((part) => decodePathSegment(part));
|
|
484
462
|
const anchor = url.hash ? url.hash.replace(/^#/, "") : void 0;
|
|
485
|
-
if (parts.length === 0) return
|
|
463
|
+
if (parts.length === 0 || parts.length === 1 && parts[0] === "index.html") return {
|
|
464
|
+
page: "pages",
|
|
465
|
+
groupId: normalizeRouteGroupId(fallbackGroupId),
|
|
466
|
+
anchor
|
|
467
|
+
};
|
|
486
468
|
const page = parts[0].toLowerCase();
|
|
487
469
|
if (page === "chat") return {
|
|
488
470
|
page: "chat",
|
|
@@ -626,5 +608,5 @@ function getWorkspaceRouteRequestPath(pathname) {
|
|
|
626
608
|
}
|
|
627
609
|
|
|
628
610
|
//#endregion
|
|
629
|
-
export {
|
|
630
|
-
//# sourceMappingURL=app-routes-
|
|
611
|
+
export { getDeploymentNamespace as a, isFeedRoute as c, parseRouteFromUrlAsync as d, resolveHrefAgainstRoute as f, resolveRouteToPrettyPathAsync as h, getAppBasePath as i, isPossibleAppRoute as l, resolveDefaultPinnedPageRef as m, buildRoutePath as n, getFileRouteDirPath as o, STATIC_ROUTING_SCRIPT_ID as p, decodePathSegment as r, getWorkspaceRouteRequestPath as s, applyBasePath as t, parseRouteFromUrl as u };
|
|
612
|
+
//# sourceMappingURL=app-routes-BXiRvlNl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-routes-DJdIjp2V.js","names":["trimSlashes"],"sources":["../../src/storage/static-routing.ts","../../src/core/app-routes.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\nimport {\n applyBasePath,\n isFeedRoute,\n type ShadowClawAppRoute,\n} from \"../core/app-routes.js\";\nimport type { SavedPageRef } from \"../db/types.js\";\n\nconst DEFAULT_GROUP_ID = \"br:main\";\n\nexport interface StaticRouteDefinition {\n prettyPath: string;\n title?: string;\n description?: string;\n}\n\nexport interface StaticRoutesManifest {\n routes: Record<string, StaticRouteDefinition>;\n subRoutes?: string[] | Record<string, string>;\n}\n\nexport const STATIC_ROUTING_SCRIPT_ID = \"shadow-claw-static-routing\";\nexport const STATIC_ROUTING_MANIFEST_PATH = \"static-routing.json\";\n\nlet cachedManifest: StaticRoutesManifest | null = null;\n\nexport function resolveStaticRoutingManifestUrl(): string {\n const targetPath = applyBasePath(`/${STATIC_ROUTING_MANIFEST_PATH}`);\n\n if (typeof window !== \"undefined\" && window.location?.origin) {\n try {\n return new URL(targetPath, window.location.origin).toString();\n } catch {\n return targetPath;\n }\n }\n\n return targetPath;\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizePrettyPathKey(path: string): string {\n let clean = trimSlashes(path);\n if (clean.endsWith(\"/index.html\")) {\n clean = clean.slice(0, -\"/index.html\".length);\n } else if (clean.endsWith(\"index.html\")) {\n clean = clean.slice(0, -\"index.html\".length);\n }\n return trimSlashes(clean);\n}\n\nexport function parseCanonicalRouteKey(\n canonicalKey: string,\n): ShadowClawAppRoute | null {\n const normalizedKey = trimSlashes(canonicalKey);\n const parts = normalizedKey.split(\"/\").filter(Boolean);\n\n if (parts.length === 0) {\n return null;\n }\n\n const first = parts[0].toLowerCase();\n if (first === \"pages\") {\n if (parts.length >= 3) {\n const rawGroup = parts[1];\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"pages\",\n groupId,\n path: filePath,\n };\n }\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n if (first === \"files\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"files\",\n groupId,\n path: filePath || undefined,\n };\n }\n\n if (first === \"chat\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"chat\",\n groupId,\n };\n }\n\n if (first === \"tasks\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"tasks\",\n groupId,\n };\n }\n\n // If format is \"posts/xyz.md\" or \"main/posts/xyz.md\"\n if (first === \"main\") {\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: normalizedKey,\n };\n}\n\nexport function getEmbeddedStaticRoutesManifest(): StaticRoutesManifest | null {\n if (typeof document !== \"undefined\") {\n const scriptEl = document.getElementById(STATIC_ROUTING_SCRIPT_ID);\n if (scriptEl && scriptEl.textContent) {\n try {\n const parsed = JSON.parse(scriptEl.textContent);\n if (parsed && typeof parsed === \"object\" && parsed.routes) {\n return parsed as StaticRoutesManifest;\n }\n } catch (err) {\n console.warn(\"Failed to parse embedded static routing manifest:\", err);\n }\n }\n }\n return null;\n}\n\nexport async function getStaticRoutingManifest(): Promise<StaticRoutesManifest> {\n if (cachedManifest) {\n return cachedManifest;\n }\n\n let baseManifest = getEmbeddedStaticRoutesManifest();\n const baseUrl = resolveStaticRoutingManifestUrl();\n\n if (!baseManifest) {\n if (typeof fetch === \"function\") {\n const candidates = [\n baseUrl,\n applyBasePath(\"/pages/routes.json\"),\n applyBasePath(\"/routes.json\"),\n applyBasePath(\"/pages/resources/routes.json\"),\n ];\n for (const candidateUrl of candidates) {\n try {\n const res = await fetch(candidateUrl);\n if (res.ok) {\n const parsed = await res.json();\n if (parsed && typeof parsed === \"object\" && parsed.routes) {\n baseManifest = parsed as StaticRoutesManifest;\n break;\n }\n }\n } catch {\n // Fetch unavailable or failed, try next candidate\n }\n }\n }\n }\n\n if (!baseManifest) {\n return { routes: {} };\n }\n\n if (!baseManifest.routes) {\n baseManifest.routes = {};\n }\n\n // Removed eager recursive fetch of subRoutes for CSR to support lazy loading\n // Subroutes will be fetched on demand via resolvePrettyPathToRouteAsync.\n\n cachedManifest = baseManifest;\n return cachedManifest;\n}\n\nexport function setStaticRoutesManifest(\n manifest: StaticRoutesManifest | null,\n): void {\n cachedManifest = manifest;\n}\n\nexport function clearStaticRoutesManifestCache(): void {\n cachedManifest = null;\n}\n\nexport function resolvePrettyPathToRoute(\n pathname: string,\n manifest?: StaticRoutesManifest | null,\n): ShadowClawAppRoute | null {\n if (isFeedRoute(pathname)) {\n return null;\n }\n\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (!routeDef || !routeDef.prettyPath) {\n continue;\n }\n\n const normalizedPretty = normalizePrettyPathKey(routeDef.prettyPath);\n if (normalizedPretty === normalizedPath) {\n return parseCanonicalRouteKey(canonicalKey);\n }\n }\n\n return null;\n}\n\nexport async function resolvePrettyPathToRouteAsync(\n pathname: string,\n): Promise<ShadowClawAppRoute | null> {\n if (isFeedRoute(pathname)) {\n return null;\n }\n\n const syncMatch = resolvePrettyPathToRoute(pathname);\n if (syncMatch) return syncMatch;\n\n const manifest = await getStaticRoutingManifest();\n if (!manifest || !manifest.subRoutes) return null;\n\n let currentManifest = manifest;\n let currentManifestUrl = resolveStaticRoutingManifestUrl();\n let maxDepth = 5;\n\n while (currentManifest && currentManifest.subRoutes && maxDepth > 0) {\n let matchedSubRouteUrl: string | null = null;\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n if (Array.isArray(currentManifest.subRoutes)) {\n for (const sub of currentManifest.subRoutes) {\n let subDir = sub.replace(/\\/routes\\.json$/, \"\");\n if (normalizedPath.startsWith(subDir)) {\n matchedSubRouteUrl = sub;\n break;\n }\n }\n } else if (typeof currentManifest.subRoutes === \"object\") {\n let longestMatch = \"\";\n for (const [prefix, sub] of Object.entries(currentManifest.subRoutes)) {\n const normPrefix = normalizePrettyPathKey(prefix);\n if (\n normalizedPath.startsWith(normPrefix) &&\n normPrefix.length > longestMatch.length\n ) {\n longestMatch = normPrefix;\n matchedSubRouteUrl = sub;\n }\n }\n }\n\n if (!matchedSubRouteUrl || typeof fetch !== \"function\") {\n break;\n }\n\n try {\n let subUrl = matchedSubRouteUrl;\n try {\n if (\n matchedSubRouteUrl.startsWith(\"http://\") ||\n matchedSubRouteUrl.startsWith(\"https://\")\n ) {\n subUrl = matchedSubRouteUrl;\n } else if (matchedSubRouteUrl.startsWith(\"/\")) {\n const withBase = applyBasePath(matchedSubRouteUrl);\n subUrl =\n typeof window !== \"undefined\" && window.location?.origin\n ? new URL(withBase, window.location.origin).toString()\n : withBase;\n } else {\n subUrl = new URL(matchedSubRouteUrl, currentManifestUrl).toString();\n }\n } catch {\n // Ignore\n }\n\n const res = await fetch(subUrl);\n if (!res.ok) break;\n\n const parsed = await res.json();\n if (!parsed || typeof parsed !== \"object\") break;\n\n if (parsed.routes) {\n Object.assign(manifest.routes, parsed.routes);\n }\n\n const found = resolvePrettyPathToRoute(pathname, manifest);\n if (found) return found;\n\n // Continue to next level if there are subRoutes\n currentManifest = parsed;\n currentManifestUrl = subUrl;\n maxDepth--;\n } catch (e) {\n console.warn(\"Failed to lazy load subRoute:\", matchedSubRouteUrl, e);\n break;\n }\n }\n\n return null;\n}\n\nexport function resolveRouteToPrettyPath(\n route: ShadowClawAppRoute,\n manifest?: StaticRoutesManifest | null,\n): string | null {\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const { page, groupId, path } = route;\n if (!page) {\n return null;\n }\n\n const normalizedGroupId =\n groupId === \"br:main\" || groupId === \"main\"\n ? \"main\"\n : groupId?.startsWith(\"br:\")\n ? `br-${groupId.slice(3)}`\n : groupId;\n\n const candidateKeys: string[] = [];\n if (page === \"pages\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId === \"main\") {\n candidateKeys.push(`/pages/main/${cleanPath}`);\n candidateKeys.push(`pages/main/${cleanPath}`);\n candidateKeys.push(`/pages/br:main/${cleanPath}`);\n candidateKeys.push(`/pages/br-main/${cleanPath}`);\n candidateKeys.push(`/main/${cleanPath}`);\n candidateKeys.push(`main/${cleanPath}`);\n candidateKeys.push(`/${cleanPath}`);\n candidateKeys.push(cleanPath);\n } else if (normalizedGroupId) {\n candidateKeys.push(`/pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/pages/${groupId}/${cleanPath}`);\n }\n } else if (page === \"pages\" && !path) {\n if (normalizedGroupId === \"main\" || !normalizedGroupId) {\n candidateKeys.push(\n \"/pages/main/index.html\",\n \"pages/main/index.html\",\n \"/pages/br:main/index.html\",\n \"/pages/br-main/index.html\",\n \"/main/index.html\",\n \"main/index.html\",\n \"/index.html\",\n \"index.html\",\n \"/pages/main\",\n \"pages/main\",\n \"/pages\",\n \"pages\",\n );\n } else if (normalizedGroupId) {\n candidateKeys.push(\n `/pages/${normalizedGroupId}/index.html`,\n `pages/${normalizedGroupId}/index.html`,\n `/pages/${groupId}/index.html`,\n );\n }\n } else if (page === \"files\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId) {\n candidateKeys.push(`/files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/files/${groupId}/${cleanPath}`);\n }\n }\n\n for (const candidate of candidateKeys) {\n const candidateNormalized = trimSlashes(candidate);\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (\n trimSlashes(canonicalKey) === candidateNormalized &&\n routeDef?.prettyPath\n ) {\n return routeDef.prettyPath;\n }\n }\n }\n\n if (page === \"pages\" && !path) {\n for (const routeDef of Object.values(routesManifest.routes)) {\n if (routeDef && routeDef.prettyPath === \"/\") {\n return \"/\";\n }\n }\n }\n\n return null;\n}\n\nexport async function resolveRouteToPrettyPathAsync(\n route: ShadowClawAppRoute,\n): Promise<string | null> {\n const syncMatch = resolveRouteToPrettyPath(route);\n if (syncMatch) return syncMatch;\n\n const manifest = await getStaticRoutingManifest();\n return resolveRouteToPrettyPath(route, manifest);\n}\n\nexport function resolveDefaultPinnedPageRef(\n value: string | SavedPageRef | null | undefined,\n): SavedPageRef | null {\n if (!value) return null;\n if (typeof value === \"object\") {\n if (\n typeof (value as any).path === \"string\" &&\n (value as any).path.trim().length > 0\n ) {\n return {\n groupId: (value as any).groupId || DEFAULT_GROUP_ID,\n path: (value as any).path.trim(),\n };\n }\n return null;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n try {\n const parsed = JSON.parse(trimmed);\n if (\n parsed &&\n typeof parsed.path === \"string\" &&\n parsed.path.trim().length > 0\n ) {\n return {\n groupId: parsed.groupId || DEFAULT_GROUP_ID,\n path: parsed.path.trim(),\n };\n }\n } catch {}\n\n const route = parseCanonicalRouteKey(trimmed);\n if (route && route.path) {\n return {\n groupId: route.groupId || DEFAULT_GROUP_ID,\n path: route.path,\n };\n }\n const clean = trimSlashes(trimmed);\n if (clean) {\n return {\n groupId: DEFAULT_GROUP_ID,\n path: clean,\n };\n }\n }\n return null;\n}\n","import {\n resolvePrettyPathToRoute,\n resolveRouteToPrettyPath,\n resolvePrettyPathToRouteAsync,\n resolveRouteToPrettyPathAsync,\n resolveDefaultPinnedPageRef,\n} from \"../storage/static-routing.js\";\n\nexport {\n resolvePrettyPathToRoute,\n resolveRouteToPrettyPath,\n resolvePrettyPathToRouteAsync,\n resolveRouteToPrettyPathAsync,\n resolveDefaultPinnedPageRef,\n};\n\nlet cachedBasePath: string | null = null;\n\nexport type ShadowClawPageRoute =\n \"chat\" | \"files\" | \"tasks\" | \"pages\" | \"settings\" | \"tools\" | \"channels\";\n\nexport interface ShadowClawAppRoute {\n page: ShadowClawPageRoute;\n groupId?: string;\n path?: string;\n anchor?: string;\n}\n\nfunction encodePathSegment(value: string): string {\n if (value === \"br:main\") {\n return \"main\";\n }\n if (value.startsWith(\"br:\")) {\n return `br-${value.slice(3)}`;\n }\n\n return encodeURIComponent(value);\n}\n\nexport function decodePathSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nconst VALID_PAGES = new Set([\n \"chat\",\n \"files\",\n \"tasks\",\n \"pages\",\n \"settings\",\n \"tools\",\n \"channels\",\n]);\n\nexport function resetAppBasePathCache(): void {\n cachedBasePath = null;\n}\n\nif (typeof globalThis !== \"undefined\") {\n (globalThis as any).__applyBasePathCacheReset = resetAppBasePathCache;\n}\n\nexport function getDeploymentNamespace(): string {\n const globalObj =\n typeof window !== \"undefined\"\n ? window\n : typeof self !== \"undefined\"\n ? self\n : globalThis;\n\n if (globalObj && (globalObj as any).__SHADOWCLAW_DEPLOY_ID__) {\n const customId = String((globalObj as any).__SHADOWCLAW_DEPLOY_ID__).trim();\n if (customId) {\n return customId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const proc = (globalThis as any).process;\n if (proc && proc.env && proc.env.SHADOWCLAW_DEPLOY_ID) {\n const envId = String(proc.env.SHADOWCLAW_DEPLOY_ID).trim();\n if (envId) {\n return envId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const basePath = getAppBasePath();\n if (!basePath || basePath === \"/\") {\n return \"\";\n }\n\n const clean = basePath.replace(/^\\/+|\\/+$/g, \"\");\n return clean.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n}\n\nexport function getAppBasePath(): string {\n if (cachedBasePath !== null) {\n return cachedBasePath;\n }\n\n // In Web Worker environment:\n const isWorker =\n typeof window === \"undefined\" ||\n (typeof (globalThis as any).WorkerGlobalScope !== \"undefined\" &&\n typeof self !== \"undefined\" &&\n self instanceof (globalThis as any).WorkerGlobalScope);\n\n if (isWorker && typeof self !== \"undefined\" && (self as any).location) {\n const workerPath = (self as any).location.pathname || \"/\";\n const parts = workerPath.split(\"/\").filter(Boolean);\n\n // In a Web Worker, the pathname is always the URL of a script file (e.g. /agent.worker.js or /shadow-claw/agent.worker.js).\n // If there is only 1 segment (e.g. [\"agent.worker.js\"]), the worker is hosted at the root domain.\n if (parts.length <= 1) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const first = parts[0].toLowerCase();\n const isRootFileOrDir =\n first === \"service-worker.js\" ||\n first === \"sw.js\" ||\n first === \"manifest.json\" ||\n first === \"sitemap.xml\" ||\n first === \"favicon.ico\" ||\n first === \"index.html\" ||\n first === \"service-worker\" ||\n first === \"assets\" ||\n first === \"dist\" ||\n first === \"public\";\n\n // If there are 2 segments and the first is an internal asset/service-worker folder (e.g. /service-worker/init.js),\n // it's hosted at the root domain.\n if (isRootFileOrDir && parts.length === 2) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n if (!isRootFileOrDir) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n }\n\n const loc =\n typeof window !== \"undefined\" && window.location\n ? window.location\n : typeof self !== \"undefined\" && self.location\n ? self.location\n : null;\n\n if (!loc) {\n return \"/\";\n }\n\n // 1. Check for explicit <base href=\"...\"> element in the DOM\n if (\n typeof document !== \"undefined\" &&\n typeof document.querySelector === \"function\"\n ) {\n const baseEl = document.querySelector(\"base[href]\");\n if (baseEl) {\n const href = baseEl.getAttribute(\"href\");\n if (href) {\n try {\n const baseUriPath = new URL(href, loc.origin).pathname;\n let base = baseUriPath;\n if (!base.endsWith(\"/\")) {\n base += \"/\";\n }\n cachedBasePath = base;\n\n return cachedBasePath;\n } catch {\n // ignore parsing error, fall through\n }\n }\n }\n }\n\n const pathname = loc.pathname || \"/\";\n if (pathname === \"/\") {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const parts = pathname.split(\"/\").filter(Boolean);\n const pageIndex = parts.findIndex((part) =>\n VALID_PAGES.has(part.toLowerCase()),\n );\n\n if (pageIndex >= 0) {\n if (pageIndex === 0) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n cachedBasePath = \"/\" + parts.slice(0, pageIndex).join(\"/\") + \"/\";\n\n return cachedBasePath;\n }\n\n // 2. Check if the current pathname is a known pretty route\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n // 3. Check for single-segment subpath deployments (e.g. /shadow-claw/ or /my-app/)\n if (parts.length === 1 && !pathname.includes(\".\")) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n\n // 4. Default to root base path for unhandled multi-segment paths\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n}\n\nexport function applyBasePath(path: string): string {\n const base = getAppBasePath();\n if (base === \"/\") {\n return path;\n }\n\n const [pathPart, ...rest] = path.split(/(?=[?#])/);\n\n // If the path already starts with the base, don't double-prefix.\n if (pathPart === base || pathPart.startsWith(base)) {\n return path;\n }\n\n const relative = pathPart.startsWith(\"/\") ? pathPart.slice(1) : pathPart;\n\n let combined = base + relative;\n combined = combined.replace(/\\/{2,}/g, \"/\");\n\n return combined + rest.join(\"\");\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeRouteGroupId(\n groupId: string | undefined,\n): string | undefined {\n if (!groupId) {\n return groupId;\n }\n\n if (groupId === \"main\") {\n return \"br:main\";\n }\n\n // Accept browser-safe \"br-...\" route IDs and normalize to canonical \"br:...\".\n if (groupId.startsWith(\"br-\")) {\n return `br:${groupId.slice(3)}`;\n }\n\n return groupId;\n}\n\nfunction sanitizeWorkspacePath(path: string | undefined): string | undefined {\n if (!path) {\n return undefined;\n }\n\n const normalized = trimSlashes(path.replace(/\\\\/g, \"/\"));\n if (!normalized) {\n return undefined;\n }\n\n const parts = normalized\n .split(\"/\")\n .filter(Boolean)\n .filter((part) => part !== \".\" && part !== \"..\");\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.join(\"/\");\n}\n\nexport function buildRoutePath(route: ShadowClawAppRoute): string {\n const anchor = route.anchor ? `#${route.anchor.replace(/^#/, \"\")}` : \"\";\n\n const prettyPath = resolveRouteToPrettyPath(route);\n if (prettyPath) {\n let clean = prettyPath;\n if (!clean.startsWith(\"/\")) {\n clean = `/${clean}`;\n }\n\n return `${clean}${anchor}`;\n }\n\n switch (route.page) {\n case \"chat\": {\n const path = route.groupId\n ? `/chat/${encodePathSegment(route.groupId)}/`\n : \"/chat\";\n\n return `${path}${anchor}`;\n }\n\n case \"tasks\": {\n const path = route.groupId\n ? `/tasks/${encodePathSegment(route.groupId)}/`\n : \"/tasks\";\n\n return `${path}${anchor}`;\n }\n\n case \"files\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!route.groupId) {\n return `/files${anchor}`;\n }\n\n if (!workspacePath) {\n return `/files/${encodePathSegment(route.groupId)}/${anchor}`;\n }\n\n return `/files/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n case \"pages\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!workspacePath) {\n return `/pages${anchor}`;\n }\n\n if (route.groupId) {\n return `/pages/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n return `/pages/${workspacePath}${anchor}`;\n }\n\n case \"tools\":\n return `/settings/tool-configuration${anchor}`;\n\n case \"channels\":\n return `/settings/channel-configuration${anchor}`;\n\n case \"settings\":\n default:\n return `/settings${anchor}`;\n }\n}\nexport const PAGE_EXTENSIONS = new Set([\n \"html\",\n \"htm\",\n \"xhtml\",\n \"md\",\n \"markdown\",\n]);\n\nexport function isNonPageFilePath(path: string | undefined): boolean {\n if (!path) {\n return false;\n }\n const clean = path.split(/[?#]/, 1)[0].replace(/\\\\/g, \"/\");\n const filename = clean.split(\"/\").pop() || \"\";\n const dotIndex = filename.lastIndexOf(\".\");\n if (dotIndex <= 0) {\n return false;\n }\n const ext = filename.slice(dotIndex + 1).toLowerCase();\n\n return !PAGE_EXTENSIONS.has(ext);\n}\n\nexport function isFeedRoute(pathname: string | undefined): boolean {\n if (!pathname) {\n return false;\n }\n\n const clean = pathname.replace(/^\\/+|\\/+$/g, \"\").toLowerCase();\n if (\n clean === \"feed\" ||\n clean.startsWith(\"feed/\") ||\n clean.endsWith(\"/feed\") ||\n clean.includes(\"/feed/\")\n ) {\n const filename = clean.split(\"/\").pop() || \"\";\n if (\n filename.includes(\".\") &&\n !filename.endsWith(\".xml\") &&\n !filename.endsWith(\".html\")\n ) {\n return false;\n }\n\n return true;\n }\n\n const filename = clean.split(\"/\").pop() || \"\";\n if (filename.endsWith(\".xml\")) {\n return true;\n }\n\n return false;\n}\n\nexport function parseRouteFromUrl(\n url: URL,\n fallbackGroupId?: string,\n): ShadowClawAppRoute | null {\n if (isFeedRoute(url.pathname)) {\n return null;\n }\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n const parts = pathname\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n if (parts.length === 0) {\n return null;\n }\n\n const page = parts[0].toLowerCase();\n\n if (page === \"chat\") {\n return {\n page: \"chat\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"tasks\") {\n return {\n page: \"tasks\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"files\") {\n const groupId = normalizeRouteGroupId(parts[1] || fallbackGroupId);\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n\n return {\n page: \"files\",\n groupId,\n path,\n anchor,\n };\n }\n\n if (page === \"pages\") {\n if (parts.includes(\"assets\")) {\n return null;\n }\n\n if (parts.length >= 3) {\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n if (isNonPageFilePath(path)) {\n return null;\n }\n\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(parts[1]),\n path,\n anchor,\n };\n }\n\n const path = sanitizeWorkspacePath(parts.slice(1).join(\"/\"));\n if (path && isNonPageFilePath(path)) {\n return null;\n }\n\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(fallbackGroupId),\n path,\n anchor,\n };\n }\n\n if (page === \"settings\") {\n const section = (parts[1] || \"\").toLowerCase();\n if (section === \"tool-configuration\") {\n return { page: \"tools\", anchor };\n }\n\n if (section === \"channel-configuration\") {\n return { page: \"channels\", anchor };\n }\n\n return { page: \"settings\", anchor };\n }\n\n if (page === \"tools\") {\n return { page: \"tools\", anchor };\n }\n\n if (page === \"channels\") {\n return { page: \"channels\", anchor };\n }\n\n return null;\n}\n\nexport function isPossibleAppRoute(pathname: string): boolean {\n if (isFeedRoute(pathname)) {\n return false;\n }\n\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n } else if (basePath !== \"/\" && !relativePath.startsWith(basePath)) {\n return false;\n }\n\n const parts = relativePath.split(\"/\").filter(Boolean);\n if (parts.length === 0) return true; // root\n\n const page = parts[0].toLowerCase();\n if (page === \"pages\") {\n if (parts.includes(\"assets\")) {\n return false;\n }\n const lastSegment = parts[parts.length - 1];\n if (isNonPageFilePath(lastSegment)) {\n return false;\n }\n\n return true;\n }\n\n if (VALID_PAGES.has(page)) return true;\n\n if (resolvePrettyPathToRoute(relativePath)) return true;\n\n return false;\n}\n\nexport async function parseRouteFromUrlAsync(\n url: URL,\n fallbackGroupId?: string,\n): Promise<ShadowClawAppRoute | null> {\n if (isFeedRoute(url.pathname)) {\n return null;\n }\n\n const syncRoute = parseRouteFromUrl(url, fallbackGroupId);\n if (syncRoute) return syncRoute;\n\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = await resolvePrettyPathToRouteAsync(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n return null;\n}\n\nexport function resolveHrefAgainstRoute(\n href: string,\n routePath: string,\n origin: string,\n): URL | null {\n const trimmed = href.trim();\n if (!trimmed || trimmed.startsWith(\"javascript:\")) {\n return null;\n }\n\n if (trimmed.startsWith(\"/\")) {\n try {\n const resolvedPath = applyBasePath(trimmed);\n\n return new URL(resolvedPath, origin);\n } catch {\n return null;\n }\n }\n\n const base = new URL(routePath, origin);\n try {\n return new URL(trimmed, base);\n } catch {\n return null;\n }\n}\n\nexport function getFileRouteDirPath(groupId: string, filePath: string): string {\n const normalized = sanitizeWorkspacePath(filePath);\n if (!normalized) {\n return buildRoutePath({ page: \"files\", groupId });\n }\n\n const parts = normalized.split(\"/\");\n parts.pop();\n const prefix = parts.length > 0 ? `${parts.join(\"/\")}/` : \"\";\n\n return `/files/${encodePathSegment(groupId)}/${prefix}`;\n}\n\nexport function getWorkspaceRouteRequestPath(\n pathname: string,\n): { groupId: string; path: string } | null {\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n }\n\n const parts = relativePath\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n\n if (parts.length < 3) {\n return null;\n }\n\n if (parts[0] !== \"files\") {\n return null;\n }\n\n const groupId = normalizeRouteGroupId(parts[1]) || parts[1];\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n if (!groupId || !path) {\n return null;\n }\n\n return { groupId, path };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-routes-BXiRvlNl.js","names":["trimSlashes"],"sources":["../../src/storage/static-routing.ts","../../src/core/app-routes.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\nimport {\n applyBasePath,\n isFeedRoute,\n type ShadowClawAppRoute,\n} from \"../core/app-routes.js\";\nimport type { SavedPageRef } from \"../db/types.js\";\n\nconst DEFAULT_GROUP_ID = \"br:main\";\n\nexport interface StaticRouteDefinition {\n prettyPath: string;\n title?: string;\n description?: string;\n}\n\nexport interface StaticRoutesManifest {\n routes: Record<string, StaticRouteDefinition>;\n subRoutes?: string[] | Record<string, string>;\n}\n\nexport const STATIC_ROUTING_SCRIPT_ID = \"shadow-claw-static-routing\";\nexport const STATIC_ROUTING_MANIFEST_PATH = \"static-routing.json\";\n\nlet cachedManifest: StaticRoutesManifest | null = null;\n\nexport function resolveStaticRoutingManifestUrl(): string {\n const targetPath = applyBasePath(`/${STATIC_ROUTING_MANIFEST_PATH}`);\n\n if (typeof window !== \"undefined\" && window.location?.origin) {\n try {\n return new URL(targetPath, window.location.origin).toString();\n } catch {\n return targetPath;\n }\n }\n\n return targetPath;\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizePrettyPathKey(path: string): string {\n let clean = trimSlashes(path);\n if (clean.endsWith(\"/index.html\")) {\n clean = clean.slice(0, -\"/index.html\".length);\n } else if (clean.endsWith(\"index.html\")) {\n clean = clean.slice(0, -\"index.html\".length);\n }\n return trimSlashes(clean);\n}\n\nexport function parseCanonicalRouteKey(\n canonicalKey: string,\n): ShadowClawAppRoute | null {\n const normalizedKey = trimSlashes(canonicalKey);\n const parts = normalizedKey.split(\"/\").filter(Boolean);\n\n if (parts.length === 0) {\n return null;\n }\n\n const first = parts[0].toLowerCase();\n if (first === \"pages\") {\n if (parts.length >= 3) {\n const rawGroup = parts[1];\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"pages\",\n groupId,\n path: filePath,\n };\n }\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n if (first === \"files\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"files\",\n groupId,\n path: filePath || undefined,\n };\n }\n\n if (first === \"chat\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"chat\",\n groupId,\n };\n }\n\n if (first === \"tasks\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"tasks\",\n groupId,\n };\n }\n\n // If format is \"posts/xyz.md\" or \"main/posts/xyz.md\"\n if (first === \"main\") {\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: normalizedKey,\n };\n}\n\nexport function getEmbeddedStaticRoutesManifest(): StaticRoutesManifest | null {\n if (typeof document !== \"undefined\") {\n const scriptEl = document.getElementById(STATIC_ROUTING_SCRIPT_ID);\n if (scriptEl && scriptEl.textContent) {\n try {\n const parsed = JSON.parse(scriptEl.textContent);\n if (parsed && typeof parsed === \"object\" && parsed.routes) {\n return parsed as StaticRoutesManifest;\n }\n } catch (err) {\n console.warn(\"Failed to parse embedded static routing manifest:\", err);\n }\n }\n }\n return null;\n}\n\nexport async function getStaticRoutingManifest(): Promise<StaticRoutesManifest> {\n if (cachedManifest) {\n return cachedManifest;\n }\n\n let baseManifest = getEmbeddedStaticRoutesManifest();\n const baseUrl = resolveStaticRoutingManifestUrl();\n\n if (!baseManifest) {\n if (typeof fetch === \"function\") {\n const candidates = [\n baseUrl,\n applyBasePath(\"/pages/routes.json\"),\n applyBasePath(\"/routes.json\"),\n applyBasePath(\"/pages/resources/routes.json\"),\n ];\n for (const candidateUrl of candidates) {\n try {\n const res = await fetch(candidateUrl);\n if (res.ok) {\n const parsed = await res.json();\n if (parsed && typeof parsed === \"object\" && parsed.routes) {\n baseManifest = parsed as StaticRoutesManifest;\n break;\n }\n }\n } catch {\n // Fetch unavailable or failed, try next candidate\n }\n }\n }\n }\n\n if (!baseManifest) {\n return { routes: {} };\n }\n\n if (!baseManifest.routes) {\n baseManifest.routes = {};\n }\n\n // Removed eager recursive fetch of subRoutes for CSR to support lazy loading\n // Subroutes will be fetched on demand via resolvePrettyPathToRouteAsync.\n\n cachedManifest = baseManifest;\n return cachedManifest;\n}\n\nexport function setStaticRoutesManifest(\n manifest: StaticRoutesManifest | null,\n): void {\n cachedManifest = manifest;\n}\n\nexport function clearStaticRoutesManifestCache(): void {\n cachedManifest = null;\n}\n\nexport function resolvePrettyPathToRoute(\n pathname: string,\n manifest?: StaticRoutesManifest | null,\n): ShadowClawAppRoute | null {\n if (isFeedRoute(pathname)) {\n return null;\n }\n\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (!routeDef || !routeDef.prettyPath) {\n continue;\n }\n\n const normalizedPretty = normalizePrettyPathKey(routeDef.prettyPath);\n if (normalizedPretty === normalizedPath) {\n return parseCanonicalRouteKey(canonicalKey);\n }\n }\n\n return null;\n}\n\nexport async function resolvePrettyPathToRouteAsync(\n pathname: string,\n): Promise<ShadowClawAppRoute | null> {\n if (isFeedRoute(pathname)) {\n return null;\n }\n\n const syncMatch = resolvePrettyPathToRoute(pathname);\n if (syncMatch) return syncMatch;\n\n const manifest = await getStaticRoutingManifest();\n if (!manifest || !manifest.subRoutes) return null;\n\n let currentManifest = manifest;\n let currentManifestUrl = resolveStaticRoutingManifestUrl();\n let maxDepth = 5;\n\n while (currentManifest && currentManifest.subRoutes && maxDepth > 0) {\n let matchedSubRouteUrl: string | null = null;\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n if (Array.isArray(currentManifest.subRoutes)) {\n for (const sub of currentManifest.subRoutes) {\n let subDir = sub.replace(/\\/routes\\.json$/, \"\");\n if (normalizedPath.startsWith(subDir)) {\n matchedSubRouteUrl = sub;\n break;\n }\n }\n } else if (typeof currentManifest.subRoutes === \"object\") {\n let longestMatch = \"\";\n for (const [prefix, sub] of Object.entries(currentManifest.subRoutes)) {\n const normPrefix = normalizePrettyPathKey(prefix);\n if (\n normalizedPath.startsWith(normPrefix) &&\n normPrefix.length > longestMatch.length\n ) {\n longestMatch = normPrefix;\n matchedSubRouteUrl = sub;\n }\n }\n }\n\n if (!matchedSubRouteUrl || typeof fetch !== \"function\") {\n break;\n }\n\n try {\n let subUrl = matchedSubRouteUrl;\n try {\n if (\n matchedSubRouteUrl.startsWith(\"http://\") ||\n matchedSubRouteUrl.startsWith(\"https://\")\n ) {\n subUrl = matchedSubRouteUrl;\n } else if (matchedSubRouteUrl.startsWith(\"/\")) {\n const withBase = applyBasePath(matchedSubRouteUrl);\n subUrl =\n typeof window !== \"undefined\" && window.location?.origin\n ? new URL(withBase, window.location.origin).toString()\n : withBase;\n } else {\n subUrl = new URL(matchedSubRouteUrl, currentManifestUrl).toString();\n }\n } catch {\n // Ignore\n }\n\n const res = await fetch(subUrl);\n if (!res.ok) break;\n\n const parsed = await res.json();\n if (!parsed || typeof parsed !== \"object\") break;\n\n if (parsed.routes) {\n Object.assign(manifest.routes, parsed.routes);\n }\n\n const found = resolvePrettyPathToRoute(pathname, manifest);\n if (found) return found;\n\n // Continue to next level if there are subRoutes\n currentManifest = parsed;\n currentManifestUrl = subUrl;\n maxDepth--;\n } catch (e) {\n console.warn(\"Failed to lazy load subRoute:\", matchedSubRouteUrl, e);\n break;\n }\n }\n\n return null;\n}\n\nexport function resolveRouteToPrettyPath(\n route: ShadowClawAppRoute,\n manifest?: StaticRoutesManifest | null,\n): string | null {\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const { page, groupId, path } = route;\n if (!page) {\n return null;\n }\n\n const normalizedGroupId =\n groupId === \"br:main\" || groupId === \"main\"\n ? \"main\"\n : groupId?.startsWith(\"br:\")\n ? `br-${groupId.slice(3)}`\n : groupId;\n\n const candidateKeys: string[] = [];\n if (page === \"pages\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId === \"main\") {\n candidateKeys.push(`/pages/main/${cleanPath}`);\n candidateKeys.push(`pages/main/${cleanPath}`);\n candidateKeys.push(`/pages/br:main/${cleanPath}`);\n candidateKeys.push(`/pages/br-main/${cleanPath}`);\n candidateKeys.push(`/main/${cleanPath}`);\n candidateKeys.push(`main/${cleanPath}`);\n candidateKeys.push(`/${cleanPath}`);\n candidateKeys.push(cleanPath);\n } else if (normalizedGroupId) {\n candidateKeys.push(`/pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/pages/${groupId}/${cleanPath}`);\n }\n } else if (page === \"pages\" && !path) {\n if (normalizedGroupId === \"main\" || !normalizedGroupId) {\n candidateKeys.push(\n \"/pages/main/index.html\",\n \"pages/main/index.html\",\n \"/pages/br:main/index.html\",\n \"/pages/br-main/index.html\",\n \"/main/index.html\",\n \"main/index.html\",\n \"/index.html\",\n \"index.html\",\n \"/pages/main\",\n \"pages/main\",\n \"/pages\",\n \"pages\",\n );\n } else if (normalizedGroupId) {\n candidateKeys.push(\n `/pages/${normalizedGroupId}/index.html`,\n `pages/${normalizedGroupId}/index.html`,\n `/pages/${groupId}/index.html`,\n );\n }\n } else if (page === \"files\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId) {\n candidateKeys.push(`/files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/files/${groupId}/${cleanPath}`);\n }\n }\n\n for (const candidate of candidateKeys) {\n const candidateNormalized = trimSlashes(candidate);\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (\n trimSlashes(canonicalKey) === candidateNormalized &&\n routeDef?.prettyPath\n ) {\n return routeDef.prettyPath;\n }\n }\n }\n\n if (page === \"pages\" && !path) {\n for (const routeDef of Object.values(routesManifest.routes)) {\n if (routeDef && routeDef.prettyPath === \"/\") {\n return \"/\";\n }\n }\n }\n\n return null;\n}\n\nexport async function resolveRouteToPrettyPathAsync(\n route: ShadowClawAppRoute,\n): Promise<string | null> {\n const syncMatch = resolveRouteToPrettyPath(route);\n if (syncMatch) return syncMatch;\n\n const manifest = await getStaticRoutingManifest();\n return resolveRouteToPrettyPath(route, manifest);\n}\n\nexport function resolveDefaultPinnedPageRef(\n value: string | SavedPageRef | null | undefined,\n): SavedPageRef | null {\n if (!value) return null;\n if (typeof value === \"object\") {\n if (\n typeof (value as any).path === \"string\" &&\n (value as any).path.trim().length > 0\n ) {\n return {\n groupId: (value as any).groupId || DEFAULT_GROUP_ID,\n path: (value as any).path.trim(),\n };\n }\n return null;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n try {\n const parsed = JSON.parse(trimmed);\n if (\n parsed &&\n typeof parsed.path === \"string\" &&\n parsed.path.trim().length > 0\n ) {\n return {\n groupId: parsed.groupId || DEFAULT_GROUP_ID,\n path: parsed.path.trim(),\n };\n }\n } catch {}\n\n const route = parseCanonicalRouteKey(trimmed);\n if (route && route.path) {\n return {\n groupId: route.groupId || DEFAULT_GROUP_ID,\n path: route.path,\n };\n }\n const clean = trimSlashes(trimmed);\n if (clean) {\n return {\n groupId: DEFAULT_GROUP_ID,\n path: clean,\n };\n }\n }\n return null;\n}\n","import {\n resolvePrettyPathToRoute,\n resolveRouteToPrettyPath,\n resolvePrettyPathToRouteAsync,\n resolveRouteToPrettyPathAsync,\n resolveDefaultPinnedPageRef,\n} from \"../storage/static-routing.js\";\n\nexport {\n resolvePrettyPathToRoute,\n resolveRouteToPrettyPath,\n resolvePrettyPathToRouteAsync,\n resolveRouteToPrettyPathAsync,\n resolveDefaultPinnedPageRef,\n};\n\nlet cachedBasePath: string | null = null;\n\nexport type ShadowClawPageRoute =\n \"chat\" | \"files\" | \"tasks\" | \"pages\" | \"settings\" | \"tools\" | \"channels\";\n\nexport interface ShadowClawAppRoute {\n page: ShadowClawPageRoute;\n groupId?: string;\n path?: string;\n anchor?: string;\n}\n\nfunction encodePathSegment(value: string): string {\n if (value === \"br:main\") {\n return \"main\";\n }\n if (value.startsWith(\"br:\")) {\n return `br-${value.slice(3)}`;\n }\n\n return encodeURIComponent(value);\n}\n\nexport function decodePathSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nconst VALID_PAGES = new Set([\n \"chat\",\n \"files\",\n \"tasks\",\n \"pages\",\n \"settings\",\n \"tools\",\n \"channels\",\n]);\n\nexport function resetAppBasePathCache(): void {\n cachedBasePath = null;\n}\n\nif (typeof globalThis !== \"undefined\") {\n (globalThis as any).__applyBasePathCacheReset = resetAppBasePathCache;\n}\n\nexport function getDeploymentNamespace(): string {\n const globalObj =\n typeof window !== \"undefined\"\n ? window\n : typeof self !== \"undefined\"\n ? self\n : globalThis;\n\n if (globalObj && (globalObj as any).__SHADOWCLAW_DEPLOY_ID__) {\n const customId = String((globalObj as any).__SHADOWCLAW_DEPLOY_ID__).trim();\n if (customId) {\n return customId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const proc = (globalThis as any).process;\n if (proc && proc.env && proc.env.SHADOWCLAW_DEPLOY_ID) {\n const envId = String(proc.env.SHADOWCLAW_DEPLOY_ID).trim();\n if (envId) {\n return envId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const basePath = getAppBasePath();\n if (!basePath || basePath === \"/\") {\n return \"\";\n }\n\n const clean = basePath.replace(/^\\/+|\\/+$/g, \"\");\n return clean.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n}\n\nexport function getAppBasePath(): string {\n if (cachedBasePath !== null) {\n return cachedBasePath;\n }\n\n // In Web Worker environment:\n const isWorker =\n typeof window === \"undefined\" ||\n (typeof (globalThis as any).WorkerGlobalScope !== \"undefined\" &&\n typeof self !== \"undefined\" &&\n self instanceof (globalThis as any).WorkerGlobalScope);\n\n if (isWorker && typeof self !== \"undefined\" && (self as any).location) {\n const workerPath = (self as any).location.pathname || \"/\";\n const parts = workerPath.split(\"/\").filter(Boolean);\n\n // In a Web Worker, the pathname is always the URL of a script file (e.g. /agent.worker.js or /shadow-claw/agent.worker.js).\n // If there is only 1 segment (e.g. [\"agent.worker.js\"]), the worker is hosted at the root domain.\n if (parts.length <= 1) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const first = parts[0].toLowerCase();\n const isRootFileOrDir =\n first === \"service-worker.js\" ||\n first === \"sw.js\" ||\n first === \"manifest.json\" ||\n first === \"sitemap.xml\" ||\n first === \"favicon.ico\" ||\n first === \"index.html\" ||\n first === \"service-worker\" ||\n first === \"assets\" ||\n first === \"dist\" ||\n first === \"public\";\n\n // If there are 2 segments and the first is an internal asset/service-worker folder (e.g. /service-worker/init.js),\n // it's hosted at the root domain.\n if (isRootFileOrDir && parts.length === 2) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n if (!isRootFileOrDir) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n }\n\n const loc =\n typeof window !== \"undefined\" && window.location\n ? window.location\n : typeof self !== \"undefined\" && self.location\n ? self.location\n : null;\n\n if (!loc) {\n return \"/\";\n }\n\n // 1. Check for explicit <base href=\"...\"> element in the DOM\n if (\n typeof document !== \"undefined\" &&\n typeof document.querySelector === \"function\"\n ) {\n const baseEl = document.querySelector(\"base[href]\");\n if (baseEl) {\n const href = baseEl.getAttribute(\"href\");\n if (href) {\n try {\n const baseUriPath = new URL(href, loc.origin).pathname;\n let base = baseUriPath;\n if (!base.endsWith(\"/\")) {\n base += \"/\";\n }\n cachedBasePath = base;\n\n return cachedBasePath;\n } catch {\n // ignore parsing error, fall through\n }\n }\n }\n }\n\n const pathname = loc.pathname || \"/\";\n if (pathname === \"/\") {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const parts = pathname.split(\"/\").filter(Boolean);\n const pageIndex = parts.findIndex((part) =>\n VALID_PAGES.has(part.toLowerCase()),\n );\n\n if (pageIndex >= 0) {\n if (pageIndex === 0) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n cachedBasePath = \"/\" + parts.slice(0, pageIndex).join(\"/\") + \"/\";\n\n return cachedBasePath;\n }\n\n // 2. Check if the current pathname is a known pretty route\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n // 3. Check for single-segment subpath deployments (e.g. /shadow-claw/ or /my-app/)\n if (parts.length === 1 && !pathname.includes(\".\")) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n\n // 4. Default to root base path for unhandled multi-segment paths\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n}\n\nexport function applyBasePath(path: string): string {\n const base = getAppBasePath();\n if (base === \"/\") {\n return path;\n }\n\n const [pathPart, ...rest] = path.split(/(?=[?#])/);\n\n // If the path already starts with the base, don't double-prefix.\n if (pathPart === base || pathPart.startsWith(base)) {\n return path;\n }\n\n const relative = pathPart.startsWith(\"/\") ? pathPart.slice(1) : pathPart;\n\n let combined = base + relative;\n combined = combined.replace(/\\/{2,}/g, \"/\");\n\n return combined + rest.join(\"\");\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeRouteGroupId(\n groupId: string | undefined,\n): string | undefined {\n if (!groupId) {\n return groupId;\n }\n\n if (groupId === \"main\") {\n return \"br:main\";\n }\n\n // Accept browser-safe \"br-...\" route IDs and normalize to canonical \"br:...\".\n if (groupId.startsWith(\"br-\")) {\n return `br:${groupId.slice(3)}`;\n }\n\n return groupId;\n}\n\nfunction sanitizeWorkspacePath(path: string | undefined): string | undefined {\n if (!path) {\n return undefined;\n }\n\n const normalized = trimSlashes(path.replace(/\\\\/g, \"/\"));\n if (!normalized) {\n return undefined;\n }\n\n const parts = normalized\n .split(\"/\")\n .filter(Boolean)\n .filter((part) => part !== \".\" && part !== \"..\");\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.join(\"/\");\n}\n\nexport function buildRoutePath(route: ShadowClawAppRoute): string {\n const anchor = route.anchor ? `#${route.anchor.replace(/^#/, \"\")}` : \"\";\n\n const prettyPath = resolveRouteToPrettyPath(route);\n if (prettyPath) {\n let clean = prettyPath;\n if (!clean.startsWith(\"/\")) {\n clean = `/${clean}`;\n }\n\n return `${clean}${anchor}`;\n }\n\n switch (route.page) {\n case \"chat\": {\n const path = route.groupId\n ? `/chat/${encodePathSegment(route.groupId)}/`\n : \"/chat\";\n\n return `${path}${anchor}`;\n }\n\n case \"tasks\": {\n const path = route.groupId\n ? `/tasks/${encodePathSegment(route.groupId)}/`\n : \"/tasks\";\n\n return `${path}${anchor}`;\n }\n\n case \"files\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!route.groupId) {\n return `/files${anchor}`;\n }\n\n if (!workspacePath) {\n return `/files/${encodePathSegment(route.groupId)}/${anchor}`;\n }\n\n return `/files/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n case \"pages\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!workspacePath) {\n return `/pages${anchor}`;\n }\n\n if (route.groupId) {\n return `/pages/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n return `/pages/${workspacePath}${anchor}`;\n }\n\n case \"tools\":\n return `/settings/tool-configuration${anchor}`;\n\n case \"channels\":\n return `/settings/channel-configuration${anchor}`;\n\n case \"settings\":\n default:\n return `/settings${anchor}`;\n }\n}\nexport const PAGE_EXTENSIONS = new Set([\n \"html\",\n \"htm\",\n \"xhtml\",\n \"md\",\n \"markdown\",\n]);\n\nexport function isNonPageFilePath(path: string | undefined): boolean {\n if (!path) {\n return false;\n }\n const clean = path.split(/[?#]/, 1)[0].replace(/\\\\/g, \"/\");\n const filename = clean.split(\"/\").pop() || \"\";\n const dotIndex = filename.lastIndexOf(\".\");\n if (dotIndex <= 0) {\n return false;\n }\n const ext = filename.slice(dotIndex + 1).toLowerCase();\n\n return !PAGE_EXTENSIONS.has(ext);\n}\n\nexport function isFeedRoute(pathname: string | undefined): boolean {\n if (!pathname) {\n return false;\n }\n\n const clean = pathname.replace(/^\\/+|\\/+$/g, \"\").toLowerCase();\n if (\n clean === \"feed\" ||\n clean.startsWith(\"feed/\") ||\n clean.endsWith(\"/feed\") ||\n clean.includes(\"/feed/\")\n ) {\n const filename = clean.split(\"/\").pop() || \"\";\n if (\n filename.includes(\".\") &&\n !filename.endsWith(\".xml\") &&\n !filename.endsWith(\".html\")\n ) {\n return false;\n }\n\n return true;\n }\n\n const filename = clean.split(\"/\").pop() || \"\";\n if (filename.endsWith(\".xml\")) {\n return true;\n }\n\n return false;\n}\n\nexport function parseRouteFromUrl(\n url: URL,\n fallbackGroupId?: string,\n): ShadowClawAppRoute | null {\n if (isFeedRoute(url.pathname)) {\n return null;\n }\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n const parts = pathname\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n if (parts.length === 0 || (parts.length === 1 && parts[0] === \"index.html\")) {\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(fallbackGroupId),\n anchor,\n };\n }\n\n const page = parts[0].toLowerCase();\n\n if (page === \"chat\") {\n return {\n page: \"chat\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"tasks\") {\n return {\n page: \"tasks\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"files\") {\n const groupId = normalizeRouteGroupId(parts[1] || fallbackGroupId);\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n\n return {\n page: \"files\",\n groupId,\n path,\n anchor,\n };\n }\n\n if (page === \"pages\") {\n if (parts.includes(\"assets\")) {\n return null;\n }\n\n if (parts.length >= 3) {\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n if (isNonPageFilePath(path)) {\n return null;\n }\n\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(parts[1]),\n path,\n anchor,\n };\n }\n\n const path = sanitizeWorkspacePath(parts.slice(1).join(\"/\"));\n if (path && isNonPageFilePath(path)) {\n return null;\n }\n\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(fallbackGroupId),\n path,\n anchor,\n };\n }\n\n if (page === \"settings\") {\n const section = (parts[1] || \"\").toLowerCase();\n if (section === \"tool-configuration\") {\n return { page: \"tools\", anchor };\n }\n\n if (section === \"channel-configuration\") {\n return { page: \"channels\", anchor };\n }\n\n return { page: \"settings\", anchor };\n }\n\n if (page === \"tools\") {\n return { page: \"tools\", anchor };\n }\n\n if (page === \"channels\") {\n return { page: \"channels\", anchor };\n }\n\n return null;\n}\n\nexport function isPossibleAppRoute(pathname: string): boolean {\n if (isFeedRoute(pathname)) {\n return false;\n }\n\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n } else if (basePath !== \"/\" && !relativePath.startsWith(basePath)) {\n return false;\n }\n\n const parts = relativePath.split(\"/\").filter(Boolean);\n if (parts.length === 0) return true; // root\n\n const page = parts[0].toLowerCase();\n if (page === \"pages\") {\n if (parts.includes(\"assets\")) {\n return false;\n }\n const lastSegment = parts[parts.length - 1];\n if (isNonPageFilePath(lastSegment)) {\n return false;\n }\n\n return true;\n }\n\n if (VALID_PAGES.has(page)) return true;\n\n if (resolvePrettyPathToRoute(relativePath)) return true;\n\n return false;\n}\n\nexport async function parseRouteFromUrlAsync(\n url: URL,\n fallbackGroupId?: string,\n): Promise<ShadowClawAppRoute | null> {\n if (isFeedRoute(url.pathname)) {\n return null;\n }\n\n const syncRoute = parseRouteFromUrl(url, fallbackGroupId);\n if (syncRoute) return syncRoute;\n\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = await resolvePrettyPathToRouteAsync(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n return null;\n}\n\nexport function resolveHrefAgainstRoute(\n href: string,\n routePath: string,\n origin: string,\n): URL | null {\n const trimmed = href.trim();\n if (!trimmed || trimmed.startsWith(\"javascript:\")) {\n return null;\n }\n\n if (trimmed.startsWith(\"/\")) {\n try {\n const resolvedPath = applyBasePath(trimmed);\n\n return new URL(resolvedPath, origin);\n } catch {\n return null;\n }\n }\n\n const base = new URL(routePath, origin);\n try {\n return new URL(trimmed, base);\n } catch {\n return null;\n }\n}\n\nexport function getFileRouteDirPath(groupId: string, filePath: string): string {\n const normalized = sanitizeWorkspacePath(filePath);\n if (!normalized) {\n return buildRoutePath({ page: \"files\", groupId });\n }\n\n const parts = normalized.split(\"/\");\n parts.pop();\n const prefix = parts.length > 0 ? `${parts.join(\"/\")}/` : \"\";\n\n return `/files/${encodePathSegment(groupId)}/${prefix}`;\n}\n\nexport function getWorkspaceRouteRequestPath(\n pathname: string,\n): { groupId: string; path: string } | null {\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n }\n\n const parts = relativePath\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n\n if (parts.length < 3) {\n return null;\n }\n\n if (parts[0] !== \"files\") {\n return null;\n }\n\n const groupId = normalizeRouteGroupId(parts[1]) || parts[1];\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n if (!groupId || !path) {\n return null;\n }\n\n return { groupId, path };\n}\n"],"mappings":"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"}
|
package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as modelRegistry } from "./config-
|
|
1
|
+
import { R as modelRegistry } from "./config-BrHR97zt.js";
|
|
2
2
|
import { getMimeType } from "./utils/mime.js";
|
|
3
3
|
|
|
4
4
|
//#region src/content/attachment-capabilities.ts
|
|
@@ -85,4 +85,4 @@ function formatModelAttachmentCapabilitySummary(modelId) {
|
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
87
87
|
export { getAttachmentCategory as n, getModelAttachmentCapabilities as r, formatModelAttachmentCapabilitySummary as t };
|
|
88
|
-
//# sourceMappingURL=attachment-capabilities-
|
|
88
|
+
//# sourceMappingURL=attachment-capabilities-BjkEPip8.js.map
|
package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-capabilities-
|
|
1
|
+
{"version":3,"file":"attachment-capabilities-BjkEPip8.js","names":[],"sources":["../../src/content/attachment-capabilities.ts"],"sourcesContent":["import { modelRegistry } from \"../subsystems/providers/model-registry.js\";\nimport { getMimeType } from \"../utils/mime.js\";\n\nexport type AttachmentCategory =\n \"text\" | \"image\" | \"audio\" | \"video\" | \"document\" | \"file\";\n\nexport interface ModelAttachmentCapabilities {\n images: boolean;\n audio: boolean;\n video: boolean;\n documents: boolean;\n routerByFeatures: boolean;\n source: \"metadata\" | \"heuristic\" | \"unknown\";\n}\n\nexport function getAttachmentCategory(\n mimeType = \"\",\n fileName = \"\",\n): AttachmentCategory {\n const resolvedMime =\n mimeType && mimeType !== \"application/octet-stream\"\n ? mimeType\n : getMimeType(fileName) || mimeType;\n const normalizedMime = resolvedMime.toLowerCase();\n const normalizedName = fileName.toLowerCase();\n\n if (\n normalizedMime.startsWith(\"text/\") ||\n normalizedMime.includes(\"json\") ||\n normalizedMime.includes(\"xml\") ||\n normalizedName.endsWith(\".md\") ||\n normalizedName.endsWith(\".txt\")\n ) {\n return \"text\";\n }\n\n if (normalizedMime.startsWith(\"image/\")) {\n return \"image\";\n }\n\n if (normalizedMime.startsWith(\"audio/\")) {\n return \"audio\";\n }\n\n if (normalizedMime.startsWith(\"video/\")) {\n return \"video\";\n }\n\n if (normalizedMime === \"application/pdf\" || normalizedName.endsWith(\".pdf\")) {\n return \"document\";\n }\n\n return \"file\";\n}\n\nexport function getModelAttachmentCapabilities(\n modelId: string,\n): ModelAttachmentCapabilities {\n const normalizedModelId = (modelId || \"\").toLowerCase();\n const modelInfo = modelRegistry.getModelInfo(normalizedModelId);\n\n if (modelInfo) {\n const images =\n modelInfo.supportsImageInput === true ||\n modelInfo.routesByRequestFeatures === true;\n const audio =\n modelInfo.supportsAudioInput === true ||\n modelInfo.routesByRequestFeatures === true;\n const video =\n modelInfo.supportsVideoInput === true ||\n modelInfo.routesByRequestFeatures === true;\n const documents =\n modelInfo.supportsDocumentInput === true ||\n modelInfo.routesByRequestFeatures === true;\n\n if (\n modelInfo.supportsImageInput !== undefined ||\n modelInfo.supportsAudioInput !== undefined ||\n modelInfo.supportsVideoInput !== undefined ||\n modelInfo.supportsDocumentInput !== undefined ||\n modelInfo.routesByRequestFeatures\n ) {\n return {\n images,\n audio,\n video,\n documents,\n routerByFeatures: !!modelInfo.routesByRequestFeatures,\n source: \"metadata\",\n };\n }\n }\n\n const isExplicitlyNonVision =\n normalizedModelId.includes(\"no-vision\") ||\n normalizedModelId.includes(\"non-vision\") ||\n normalizedModelId.includes(\"text-only\");\n\n const isRouter =\n normalizedModelId === \"openrouter/free\" ||\n normalizedModelId === \"openrouter/auto\";\n\n const multimodalPatterns = [\n \"gpt-4o\",\n \"gpt-4.1\",\n \"gpt-5\",\n \"gpt-6\",\n \"astra\",\n \"claude-3\",\n \"claude-4\",\n \"claude-5\",\n // Claude 4-family uses \"claude-<name>-<version>\" (e.g. claude-sonnet-4)\n \"claude-sonnet\",\n \"claude-haiku\",\n \"claude-opus\",\n \"claude-fable\",\n \"claude-mythos\",\n \"gemini\",\n \"omni\",\n \"llava\",\n \"qwen-vl\",\n \"-vl\",\n \"vision\",\n \"pixtral\",\n ];\n const heuristicMatch =\n !isExplicitlyNonVision &&\n multimodalPatterns.some((pattern) => normalizedModelId.includes(pattern));\n\n // Claude 3.5+, 3.7+, 4, and 5 families, Gemini, and frontier GPT models (GPT-4.1, GPT-5, GPT-6, Astra)\n // support PDFs/documents natively.\n const supportsDocuments =\n !isExplicitlyNonVision &&\n (normalizedModelId.includes(\"claude-3-5\") ||\n normalizedModelId.includes(\"claude-3.5\") ||\n normalizedModelId.includes(\"claude-3-7\") ||\n normalizedModelId.includes(\"claude-3.7\") ||\n normalizedModelId.includes(\"claude-4\") ||\n normalizedModelId.includes(\"claude-5\") ||\n normalizedModelId.includes(\"claude-fable\") ||\n normalizedModelId.includes(\"claude-mythos\") ||\n normalizedModelId.includes(\"gemini\") ||\n normalizedModelId.includes(\"gpt-4.1\") ||\n normalizedModelId.includes(\"gpt-5\") ||\n normalizedModelId.includes(\"gpt-6\") ||\n normalizedModelId.includes(\"astra\") ||\n /claude-(?:sonnet|haiku|opus|fable|mythos)-\\d/.test(normalizedModelId));\n\n if (heuristicMatch) {\n return {\n images: true,\n audio:\n normalizedModelId.includes(\"omni\") ||\n normalizedModelId.includes(\"audio\"),\n video:\n normalizedModelId.includes(\"omni\") ||\n normalizedModelId.includes(\"video\") ||\n normalizedModelId.includes(\"gemini\"),\n documents: supportsDocuments,\n routerByFeatures: isRouter,\n source: \"heuristic\",\n };\n }\n\n return {\n images: false,\n audio: false,\n video: false,\n documents: false,\n routerByFeatures: isRouter,\n source: \"unknown\",\n };\n}\n\nexport function formatModelAttachmentCapabilitySummary(\n modelId: string,\n): string {\n const capabilities = getModelAttachmentCapabilities(modelId);\n const parts = [\n capabilities.images ? \"images native\" : \"images fallback\",\n capabilities.audio ? \"audio native\" : \"audio fallback\",\n capabilities.video ? \"video native\" : \"video fallback\",\n capabilities.documents ? \"PDFs native\" : \"PDFs fallback\",\n ];\n\n if (capabilities.routerByFeatures) {\n parts.push(\"router can adapt by request features\");\n }\n\n return parts.join(\" · \");\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as getConfig } from "./get-config-BWhs5HFF.js";
|
|
2
|
-
import { o as DEFAULT_GROUP_ID, r as CONFIG_KEYS } from "./config-
|
|
2
|
+
import { o as DEFAULT_GROUP_ID, r as CONFIG_KEYS } from "./config-BrHR97zt.js";
|
|
3
3
|
import { t as setConfig } from "./set-config-CUadvYZ1.js";
|
|
4
|
-
import { t as orchestratorStore } from "./orchestrator-
|
|
4
|
+
import { t as orchestratorStore } from "./orchestrator-CCARkxQC.js";
|
|
5
5
|
import { normalizeStringList } from "./utils/normalize-string-list.js";
|
|
6
6
|
import { r as encryptValue } from "./crypto-Bikgpqfe.js";
|
|
7
7
|
|
|
@@ -138,4 +138,4 @@ async function configureTelegram(state, db, token, chatIds, useProxy = false, _s
|
|
|
138
138
|
|
|
139
139
|
//#endregion
|
|
140
140
|
export { getChannelEnabled as a, getPeerJsConfig as c, setChannelEnabled as d, submitMessage as f, configureTelegram as i, getTelegramConfig as l, clearPeerJsTypingState as n, getChannelTypeForGroup as o, configureIMessage as r, getIMessageConfig as s, applyAllChannelRunningStates as t, loadChannelEnabled as u };
|
|
141
|
-
//# sourceMappingURL=channel-
|
|
141
|
+
//# sourceMappingURL=channel-mmdGzPkT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-Dlru5ofR.js","names":["_defaultGetConfig","_defaultSetConfig"],"sources":["../../src/core/orchestrator/utils/operations/channel.ts"],"sourcesContent":["import { CONFIG_KEYS, DEFAULT_GROUP_ID } from \"../../../../config/config.js\";\nimport { getConfig as _defaultGetConfig } from \"../../../../db/get-config.js\";\nimport { setConfig as _defaultSetConfig } from \"../../../../db/set-config.js\";\nimport { encryptValue } from \"../../../../security/crypto.js\";\nimport { orchestratorStore } from \"../../../../stores/orchestrator.js\";\nimport { normalizeStringList } from \"../../../../utils/normalize-string-list.js\";\n\nimport type { MessageAttachment } from \"../../../../content/types.js\";\nimport type { ShadowClawDatabase } from \"../../../../db/db.js\";\n\nimport type {\n Channel,\n ChannelType,\n} from \"../../../../subsystems/channels/types.js\";\n\nimport type { A2UIAction } from \"../../../../ui/a2ui/types.js\";\nimport type { OrchestratorState } from \"../../orchestrator-state.js\";\n\ntype SetConfigFn = (\n db: ShadowClawDatabase,\n key: string,\n value: string,\n) => Promise<void>;\n\ntype GetConfigFn = (\n db: ShadowClawDatabase,\n key: string,\n) => Promise<string | undefined>;\n\n// ── Pure channel lookups ────────────────────────────────────────────────────\n\nexport function getChannelTypeForGroup(\n state: {\n channelRegistry?: {\n getChannelType: (groupId: string) => ChannelType | null | undefined;\n };\n },\n groupId: string,\n): ChannelType {\n return state.channelRegistry?.getChannelType(groupId) ?? \"browser\";\n}\n\nexport function getChannelByType(\n state: Pick<\n OrchestratorState,\n \"browserChat\" | \"telegram\" | \"imessage\" | \"peerjs\"\n >,\n channelType: ChannelType,\n): Channel | null {\n switch (channelType) {\n case \"browser\":\n return state.browserChat;\n case \"telegram\":\n return state.telegram;\n case \"imessage\":\n return state.imessage;\n case \"peerjs\":\n return state.peerjs;\n default:\n return null;\n }\n}\n\nexport function getChannelEnabled(\n state: Pick<OrchestratorState, \"channelEnabledByType\">,\n channelType: ChannelType,\n): boolean {\n if (channelType === \"browser\") {\n return true;\n }\n\n return state.channelEnabledByType[channelType] !== false;\n}\n\nexport function getPeerJsConfig(state: {\n channelEnabledByType: Record<ChannelType, boolean>;\n peerjsMyAlias: string;\n peerjsMyPeerId: string;\n peerjsPeerAliases: Record<string, string>;\n peerjsServerHost: string;\n peerjsServerPath: string;\n peerjsServerPort: number;\n peerjsServerSecure: boolean;\n peerjsTrustedPeerIds: string[];\n}): {\n enabled: boolean;\n myAlias: string;\n myPeerId: string;\n peerAliases: Record<string, string>;\n serverHost: string;\n serverPath: string;\n serverPort: number;\n serverSecure: boolean;\n trustedPeerIds: string[];\n} {\n return {\n enabled: getChannelEnabled(state, \"peerjs\"),\n myAlias: state.peerjsMyAlias,\n myPeerId: state.peerjsMyPeerId,\n peerAliases: { ...state.peerjsPeerAliases },\n serverHost: state.peerjsServerHost,\n serverPath: state.peerjsServerPath,\n serverPort: state.peerjsServerPort,\n serverSecure: state.peerjsServerSecure,\n trustedPeerIds: [...state.peerjsTrustedPeerIds],\n };\n}\n\nexport function getTelegramConfig(state: {\n telegramBotToken: string;\n telegramChatIds: string[];\n channelEnabledByType: Record<ChannelType, boolean>;\n telegramUseProxy: boolean;\n}): {\n botToken: string;\n chatIds: string[];\n enabled: boolean;\n useProxy: boolean;\n} {\n return {\n botToken: state.telegramBotToken,\n chatIds: [...state.telegramChatIds],\n enabled: getChannelEnabled(state, \"telegram\"),\n useProxy: state.telegramUseProxy,\n };\n}\n\nexport function getIMessageConfig(state: {\n imessageApiKey: string;\n imessageChatIds: string[];\n channelEnabledByType: Record<ChannelType, boolean>;\n imessageServerUrl: string;\n}): {\n apiKey: string;\n chatIds: string[];\n enabled: boolean;\n serverUrl: string;\n} {\n return {\n apiKey: state.imessageApiKey,\n chatIds: [...state.imessageChatIds],\n enabled: getChannelEnabled(state, \"imessage\"),\n serverUrl: state.imessageServerUrl,\n };\n}\n\nexport function getChannelEnabledConfigKey(channelType: ChannelType): string {\n return `${CONFIG_KEYS.CHANNEL_ENABLED_PREFIX}${channelType}`;\n}\n\nexport function shouldRunChannel(\n state: Pick<\n OrchestratorState,\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n channelType: ChannelType,\n): boolean {\n if (channelType === \"browser\") {\n return true;\n }\n\n if (!getChannelEnabled(state, channelType)) {\n return false;\n }\n\n switch (channelType) {\n case \"telegram\":\n return state.telegramBotToken.length > 0;\n case \"imessage\":\n return state.imessageServerUrl.length > 0;\n case \"peerjs\":\n return state.peerjsMyPeerId.length > 0;\n default:\n return true;\n }\n}\n\nexport function applyChannelRunningState(\n state: Pick<\n OrchestratorState,\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n channelType: ChannelType,\n force: boolean = false,\n): void {\n const channel = getChannelByType(state, channelType);\n if (!channel) {\n return;\n }\n\n if (shouldRunChannel(state, channelType)) {\n if (!channel.running) {\n channel.start();\n } else if (typeof (channel as any).ensureConnected === \"function\") {\n (channel as any).ensureConnected(force);\n }\n\n return;\n }\n\n channel.stop();\n}\n\nexport function applyAllChannelRunningStates(\n state: Pick<\n OrchestratorState,\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n force: boolean = false,\n): void {\n applyChannelRunningState(state, \"browser\", force);\n applyChannelRunningState(state, \"telegram\", force);\n applyChannelRunningState(state, \"imessage\", force);\n applyChannelRunningState(state, \"peerjs\", force);\n}\n\nexport function clearPeerJsTypingState(groupId: string): void {\n orchestratorStore.setRemoteAgentTyping(groupId, false);\n}\n\n// ── Async channel operations ────────────────────────────────────────────────\n\nexport async function loadChannelEnabled(\n channelType: ChannelType,\n db: ShadowClawDatabase,\n _getConfig: GetConfigFn = _defaultGetConfig,\n): Promise<boolean> {\n const stored = await _getConfig(db, getChannelEnabledConfigKey(channelType));\n\n if (!stored) {\n return false;\n }\n\n return stored !== \"false\";\n}\n\nexport async function setChannelEnabled(\n state: Pick<\n OrchestratorState,\n | \"channelEnabledByType\"\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n db: ShadowClawDatabase,\n channelType: ChannelType,\n enabled: boolean,\n _setConfig: SetConfigFn = _defaultSetConfig,\n): Promise<void> {\n if (channelType === \"browser\") {\n return;\n }\n\n const normalizedEnabled = !!enabled;\n state.channelEnabledByType[channelType] = normalizedEnabled;\n\n await _setConfig(\n db,\n getChannelEnabledConfigKey(channelType),\n normalizedEnabled ? \"true\" : \"false\",\n );\n\n applyChannelRunningState(state, channelType);\n}\n\nexport function submitMessage(\n state: {\n browserChat: {\n submit: (\n text: string,\n groupId?: string,\n attachments?: MessageAttachment[],\n a2uiAction?: A2UIAction,\n ) => void;\n };\n },\n text: string,\n groupId = DEFAULT_GROUP_ID,\n attachments: MessageAttachment[] = [],\n a2uiAction?: A2UIAction,\n): void {\n state.browserChat.submit(text, groupId, attachments, a2uiAction);\n}\n\nexport async function saveSecretConfig(\n db: ShadowClawDatabase,\n key: string,\n value: string,\n _setConfig: SetConfigFn = _defaultSetConfig,\n): Promise<void> {\n if (!value) {\n await _setConfig(db, key, \"\");\n\n return;\n }\n\n const encrypted = await encryptValue(value);\n if (!encrypted) {\n throw new Error(`Failed to encrypt secret config for ${key}`);\n }\n\n await _setConfig(db, key, encrypted);\n}\n\nexport async function configureIMessage(\n state: OrchestratorState,\n db: ShadowClawDatabase,\n serverUrl: string,\n apiKey: string,\n chatIds: string[],\n _setConfig: SetConfigFn = _defaultSetConfig,\n _saveSecretConfig: typeof saveSecretConfig = saveSecretConfig,\n): Promise<void> {\n const normalizedServerUrl = serverUrl.trim().replace(/\\/+$/, \"\");\n const normalizedApiKey = apiKey.trim();\n const normalizedChatIds = normalizeStringList(chatIds);\n\n state.imessageServerUrl = normalizedServerUrl;\n state.imessageApiKey = normalizedApiKey;\n state.imessageChatIds = normalizedChatIds;\n\n await _setConfig(db, CONFIG_KEYS.IMESSAGE_SERVER_URL, normalizedServerUrl);\n await _saveSecretConfig(db, CONFIG_KEYS.IMESSAGE_API_KEY, normalizedApiKey);\n\n await _setConfig(\n db,\n CONFIG_KEYS.IMESSAGE_CHAT_IDS,\n JSON.stringify(normalizedChatIds),\n );\n\n state.imessage.stop();\n state.imessage.configure(\n normalizedServerUrl,\n normalizedApiKey,\n normalizedChatIds,\n );\n\n if (normalizedServerUrl && getChannelEnabled(state, \"imessage\")) {\n state.imessage.start();\n }\n}\n\nexport async function configureTelegram(\n state: OrchestratorState,\n db: ShadowClawDatabase,\n token: string,\n chatIds: string[],\n useProxy = false,\n _setConfig: SetConfigFn = _defaultSetConfig,\n _saveSecretConfig: typeof saveSecretConfig = saveSecretConfig,\n): Promise<void> {\n const normalizedToken = token.trim();\n const normalizedChatIds = normalizeStringList(chatIds);\n const normalizedUseProxy = !!useProxy;\n\n state.telegramBotToken = normalizedToken;\n state.telegramChatIds = normalizedChatIds;\n state.telegramUseProxy = normalizedUseProxy;\n\n await _saveSecretConfig(db, CONFIG_KEYS.TELEGRAM_BOT_TOKEN, normalizedToken);\n\n await _setConfig(\n db,\n CONFIG_KEYS.TELEGRAM_CHAT_IDS,\n JSON.stringify(normalizedChatIds),\n );\n\n await _setConfig(\n db,\n CONFIG_KEYS.TELEGRAM_USE_PROXY,\n normalizedUseProxy ? \"true\" : \"false\",\n );\n\n state.telegram.stop();\n state.telegram.configure(\n normalizedToken,\n normalizedChatIds,\n normalizedUseProxy,\n );\n\n if (normalizedToken && getChannelEnabled(state, \"telegram\")) {\n state.telegram.start();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel-mmdGzPkT.js","names":["_defaultGetConfig","_defaultSetConfig"],"sources":["../../src/core/orchestrator/utils/operations/channel.ts"],"sourcesContent":["import { CONFIG_KEYS, DEFAULT_GROUP_ID } from \"../../../../config/config.js\";\nimport { getConfig as _defaultGetConfig } from \"../../../../db/get-config.js\";\nimport { setConfig as _defaultSetConfig } from \"../../../../db/set-config.js\";\nimport { encryptValue } from \"../../../../security/crypto.js\";\nimport { orchestratorStore } from \"../../../../stores/orchestrator.js\";\nimport { normalizeStringList } from \"../../../../utils/normalize-string-list.js\";\n\nimport type { MessageAttachment } from \"../../../../content/types.js\";\nimport type { ShadowClawDatabase } from \"../../../../db/db.js\";\n\nimport type {\n Channel,\n ChannelType,\n} from \"../../../../subsystems/channels/types.js\";\n\nimport type { A2UIAction } from \"../../../../ui/a2ui/types.js\";\nimport type { OrchestratorState } from \"../../orchestrator-state.js\";\n\ntype SetConfigFn = (\n db: ShadowClawDatabase,\n key: string,\n value: string,\n) => Promise<void>;\n\ntype GetConfigFn = (\n db: ShadowClawDatabase,\n key: string,\n) => Promise<string | undefined>;\n\n// ── Pure channel lookups ────────────────────────────────────────────────────\n\nexport function getChannelTypeForGroup(\n state: {\n channelRegistry?: {\n getChannelType: (groupId: string) => ChannelType | null | undefined;\n };\n },\n groupId: string,\n): ChannelType {\n return state.channelRegistry?.getChannelType(groupId) ?? \"browser\";\n}\n\nexport function getChannelByType(\n state: Pick<\n OrchestratorState,\n \"browserChat\" | \"telegram\" | \"imessage\" | \"peerjs\"\n >,\n channelType: ChannelType,\n): Channel | null {\n switch (channelType) {\n case \"browser\":\n return state.browserChat;\n case \"telegram\":\n return state.telegram;\n case \"imessage\":\n return state.imessage;\n case \"peerjs\":\n return state.peerjs;\n default:\n return null;\n }\n}\n\nexport function getChannelEnabled(\n state: Pick<OrchestratorState, \"channelEnabledByType\">,\n channelType: ChannelType,\n): boolean {\n if (channelType === \"browser\") {\n return true;\n }\n\n return state.channelEnabledByType[channelType] !== false;\n}\n\nexport function getPeerJsConfig(state: {\n channelEnabledByType: Record<ChannelType, boolean>;\n peerjsMyAlias: string;\n peerjsMyPeerId: string;\n peerjsPeerAliases: Record<string, string>;\n peerjsServerHost: string;\n peerjsServerPath: string;\n peerjsServerPort: number;\n peerjsServerSecure: boolean;\n peerjsTrustedPeerIds: string[];\n}): {\n enabled: boolean;\n myAlias: string;\n myPeerId: string;\n peerAliases: Record<string, string>;\n serverHost: string;\n serverPath: string;\n serverPort: number;\n serverSecure: boolean;\n trustedPeerIds: string[];\n} {\n return {\n enabled: getChannelEnabled(state, \"peerjs\"),\n myAlias: state.peerjsMyAlias,\n myPeerId: state.peerjsMyPeerId,\n peerAliases: { ...state.peerjsPeerAliases },\n serverHost: state.peerjsServerHost,\n serverPath: state.peerjsServerPath,\n serverPort: state.peerjsServerPort,\n serverSecure: state.peerjsServerSecure,\n trustedPeerIds: [...state.peerjsTrustedPeerIds],\n };\n}\n\nexport function getTelegramConfig(state: {\n telegramBotToken: string;\n telegramChatIds: string[];\n channelEnabledByType: Record<ChannelType, boolean>;\n telegramUseProxy: boolean;\n}): {\n botToken: string;\n chatIds: string[];\n enabled: boolean;\n useProxy: boolean;\n} {\n return {\n botToken: state.telegramBotToken,\n chatIds: [...state.telegramChatIds],\n enabled: getChannelEnabled(state, \"telegram\"),\n useProxy: state.telegramUseProxy,\n };\n}\n\nexport function getIMessageConfig(state: {\n imessageApiKey: string;\n imessageChatIds: string[];\n channelEnabledByType: Record<ChannelType, boolean>;\n imessageServerUrl: string;\n}): {\n apiKey: string;\n chatIds: string[];\n enabled: boolean;\n serverUrl: string;\n} {\n return {\n apiKey: state.imessageApiKey,\n chatIds: [...state.imessageChatIds],\n enabled: getChannelEnabled(state, \"imessage\"),\n serverUrl: state.imessageServerUrl,\n };\n}\n\nexport function getChannelEnabledConfigKey(channelType: ChannelType): string {\n return `${CONFIG_KEYS.CHANNEL_ENABLED_PREFIX}${channelType}`;\n}\n\nexport function shouldRunChannel(\n state: Pick<\n OrchestratorState,\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n channelType: ChannelType,\n): boolean {\n if (channelType === \"browser\") {\n return true;\n }\n\n if (!getChannelEnabled(state, channelType)) {\n return false;\n }\n\n switch (channelType) {\n case \"telegram\":\n return state.telegramBotToken.length > 0;\n case \"imessage\":\n return state.imessageServerUrl.length > 0;\n case \"peerjs\":\n return state.peerjsMyPeerId.length > 0;\n default:\n return true;\n }\n}\n\nexport function applyChannelRunningState(\n state: Pick<\n OrchestratorState,\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n channelType: ChannelType,\n force: boolean = false,\n): void {\n const channel = getChannelByType(state, channelType);\n if (!channel) {\n return;\n }\n\n if (shouldRunChannel(state, channelType)) {\n if (!channel.running) {\n channel.start();\n } else if (typeof (channel as any).ensureConnected === \"function\") {\n (channel as any).ensureConnected(force);\n }\n\n return;\n }\n\n channel.stop();\n}\n\nexport function applyAllChannelRunningStates(\n state: Pick<\n OrchestratorState,\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"channelEnabledByType\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n force: boolean = false,\n): void {\n applyChannelRunningState(state, \"browser\", force);\n applyChannelRunningState(state, \"telegram\", force);\n applyChannelRunningState(state, \"imessage\", force);\n applyChannelRunningState(state, \"peerjs\", force);\n}\n\nexport function clearPeerJsTypingState(groupId: string): void {\n orchestratorStore.setRemoteAgentTyping(groupId, false);\n}\n\n// ── Async channel operations ────────────────────────────────────────────────\n\nexport async function loadChannelEnabled(\n channelType: ChannelType,\n db: ShadowClawDatabase,\n _getConfig: GetConfigFn = _defaultGetConfig,\n): Promise<boolean> {\n const stored = await _getConfig(db, getChannelEnabledConfigKey(channelType));\n\n if (!stored) {\n return false;\n }\n\n return stored !== \"false\";\n}\n\nexport async function setChannelEnabled(\n state: Pick<\n OrchestratorState,\n | \"channelEnabledByType\"\n | \"browserChat\"\n | \"telegram\"\n | \"imessage\"\n | \"peerjs\"\n | \"telegramBotToken\"\n | \"imessageServerUrl\"\n | \"peerjsMyPeerId\"\n >,\n db: ShadowClawDatabase,\n channelType: ChannelType,\n enabled: boolean,\n _setConfig: SetConfigFn = _defaultSetConfig,\n): Promise<void> {\n if (channelType === \"browser\") {\n return;\n }\n\n const normalizedEnabled = !!enabled;\n state.channelEnabledByType[channelType] = normalizedEnabled;\n\n await _setConfig(\n db,\n getChannelEnabledConfigKey(channelType),\n normalizedEnabled ? \"true\" : \"false\",\n );\n\n applyChannelRunningState(state, channelType);\n}\n\nexport function submitMessage(\n state: {\n browserChat: {\n submit: (\n text: string,\n groupId?: string,\n attachments?: MessageAttachment[],\n a2uiAction?: A2UIAction,\n ) => void;\n };\n },\n text: string,\n groupId = DEFAULT_GROUP_ID,\n attachments: MessageAttachment[] = [],\n a2uiAction?: A2UIAction,\n): void {\n state.browserChat.submit(text, groupId, attachments, a2uiAction);\n}\n\nexport async function saveSecretConfig(\n db: ShadowClawDatabase,\n key: string,\n value: string,\n _setConfig: SetConfigFn = _defaultSetConfig,\n): Promise<void> {\n if (!value) {\n await _setConfig(db, key, \"\");\n\n return;\n }\n\n const encrypted = await encryptValue(value);\n if (!encrypted) {\n throw new Error(`Failed to encrypt secret config for ${key}`);\n }\n\n await _setConfig(db, key, encrypted);\n}\n\nexport async function configureIMessage(\n state: OrchestratorState,\n db: ShadowClawDatabase,\n serverUrl: string,\n apiKey: string,\n chatIds: string[],\n _setConfig: SetConfigFn = _defaultSetConfig,\n _saveSecretConfig: typeof saveSecretConfig = saveSecretConfig,\n): Promise<void> {\n const normalizedServerUrl = serverUrl.trim().replace(/\\/+$/, \"\");\n const normalizedApiKey = apiKey.trim();\n const normalizedChatIds = normalizeStringList(chatIds);\n\n state.imessageServerUrl = normalizedServerUrl;\n state.imessageApiKey = normalizedApiKey;\n state.imessageChatIds = normalizedChatIds;\n\n await _setConfig(db, CONFIG_KEYS.IMESSAGE_SERVER_URL, normalizedServerUrl);\n await _saveSecretConfig(db, CONFIG_KEYS.IMESSAGE_API_KEY, normalizedApiKey);\n\n await _setConfig(\n db,\n CONFIG_KEYS.IMESSAGE_CHAT_IDS,\n JSON.stringify(normalizedChatIds),\n );\n\n state.imessage.stop();\n state.imessage.configure(\n normalizedServerUrl,\n normalizedApiKey,\n normalizedChatIds,\n );\n\n if (normalizedServerUrl && getChannelEnabled(state, \"imessage\")) {\n state.imessage.start();\n }\n}\n\nexport async function configureTelegram(\n state: OrchestratorState,\n db: ShadowClawDatabase,\n token: string,\n chatIds: string[],\n useProxy = false,\n _setConfig: SetConfigFn = _defaultSetConfig,\n _saveSecretConfig: typeof saveSecretConfig = saveSecretConfig,\n): Promise<void> {\n const normalizedToken = token.trim();\n const normalizedChatIds = normalizeStringList(chatIds);\n const normalizedUseProxy = !!useProxy;\n\n state.telegramBotToken = normalizedToken;\n state.telegramChatIds = normalizedChatIds;\n state.telegramUseProxy = normalizedUseProxy;\n\n await _saveSecretConfig(db, CONFIG_KEYS.TELEGRAM_BOT_TOKEN, normalizedToken);\n\n await _setConfig(\n db,\n CONFIG_KEYS.TELEGRAM_CHAT_IDS,\n JSON.stringify(normalizedChatIds),\n );\n\n await _setConfig(\n db,\n CONFIG_KEYS.TELEGRAM_USE_PROXY,\n normalizedUseProxy ? \"true\" : \"false\",\n );\n\n state.telegram.stop();\n state.telegram.configure(\n normalizedToken,\n normalizedChatIds,\n normalizedUseProxy,\n );\n\n if (normalizedToken && getChannelEnabled(state, \"telegram\")) {\n state.telegram.start();\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as modelRegistry } from "./config-
|
|
1
|
+
import { R as modelRegistry } from "./config-BrHR97zt.js";
|
|
2
2
|
import { n as createModelCacheFetch } from "./create-model-cache-fetch-D7Pm4xNT.js";
|
|
3
3
|
|
|
4
4
|
//#region node_modules/@huggingface/jinja/dist/index.js
|
|
@@ -723,4 +723,4 @@ function normalizeMessagesForChatTemplate(rawMessages, systemPrompt) {
|
|
|
723
723
|
|
|
724
724
|
//#endregion
|
|
725
725
|
export { normalizeMessagesForChatTemplate as n, fetchTokenizerConfig as t };
|
|
726
|
-
//# sourceMappingURL=chat-template-
|
|
726
|
+
//# sourceMappingURL=chat-template-DPEKGJhB.js.map
|