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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./chunk-4-QO2z6r.js";import{i,n as a,r as o,t as s}from"./chunk-DnR17T-6.js";import{t as c}from"./chunk-BChOKoxf.js";import{c as l,f as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as ee,t as v,u as te}from"./chunk-CeGycQxn.js";import{o as y,r as b}from"./chunk-BcxWvEHa.js";import{t as x}from"./chunk-Dl4zTOqg.js";import{t as S}from"./chunk-DjKQO7aV.js";import{n as C,t as w}from"./chunk-IVWoxOkm.js";import{c as T,l as E,s as D,u as O}from"./chunk-D0Xq-Muz.js";import{i as k,r as A,t as j}from"./chunk-CMEzBK2J.js";import{t as ne}from"./chunk-BhCmCUGL.js";function M(e){if(!e)return``;let t=e.match(/^\r?\n([ \t]+)/);if(t){let n=t[1],r=RegExp(`^[ \\t]{1,${n.length}}`,`gm`);return e.replace(/^\r?\n/,``).replace(r,``).replace(/\r?\n[ \t]*$/,`
|
|
2
|
+
`)}if(/^(?:\r?\n)+[ \t]*---/.test(e))return e.replace(/^(?:\r?\n)+/,``);if(/^[ \t]+---/.test(e)){let t=e.match(/^[ \t]+/);if(t){let n=t[0],r=RegExp(`^[ \\t]{1,${n.length}}`,`gm`);return e.replace(r,``)}}return e}let N=/* @__PURE__ */ new Map;function re(e){if(typeof document>`u`)return null;let t=`shadow-claw-site-config`;if(e){let n=e.getAttribute(`config`)?.trim();n&&(t=n.replace(/^#/,``))}let n=document.getElementById(t);if(!n?.textContent)return N.delete(t),null;let r=N.get(t);if(r&&r.rawText===n.textContent)return r.config;try{let e=JSON.parse(n.textContent);if(!e||typeof e!=`object`)return N.delete(t),null;let r={...e};return N.set(t,{rawText:n.textContent,config:r}),r}catch(e){return console.warn(`[ShadowClaw] Failed to parse site configuration from #${t}:`,e),null}}function ie(e,t,n){let r=null,i,a;return typeof e==`string`?(i=e,a=t):(r=e,i=t,a=n??50),r&&S(r)?Promise.resolve().then(()=>(r.db.prepare(`SELECT * FROM messages WHERE groupId = ? ORDER BY timestamp DESC LIMIT ?`).all(i,a)??[]).reverse().map(ae)):new Promise(async(e,t)=>{try{let n=r??await x();if(!n)return t(/* @__PURE__ */ Error(`failed to get transaction, cannot get recent messages.`));let o=n.transaction(`messages`,`readonly`);if(!o)return t(/* @__PURE__ */ Error(`failed to get transaction`));let s=o.objectStore(`messages`).index(`by-group-time`),c=IDBKeyRange.bound([i,0],[i,1/0]),l=s.openCursor(c,`prev`),u=[];l.onsuccess=()=>{let t=l.result;t&&u.length<a?(u.push(t.value),t.continue()):e(u.reverse())},l.onerror=()=>t(l.error)}catch(e){t(e)}})}function ae(e){return{...e,isFromMe:!!e.isFromMe,isTrigger:!!e.isTrigger,attachments:e.attachments?JSON.parse(e.attachments):void 0,a2uiAction:e.a2uiAction?JSON.parse(e.a2uiAction):void 0,a2uiEnvelopes:e.a2uiEnvelopes?JSON.parse(e.a2uiEnvelopes):void 0}}const oe=`group_metadata`;async function P(e){let t=await w(e,oe);if(!t)return[];try{return JSON.parse(t)}catch{return[]}}async function F(e,t){await O(e,oe,JSON.stringify(t))}async function se(e,t,n=`br:`,r){let i=await P(e),a={groupId:`${n}${r??c()}`,name:t,createdAt:Date.now()};return i.push(a),await F(e,i),a}async function ce(e,t,n){let r=await P(e),i=r.find(e=>e.groupId===t);i&&(i.name=n),await F(e,r)}async function le(e,t,n){let r=await P(e),i=r.find(e=>e.groupId===t);i&&(n&&n.length>0?i.toolTags=n:delete i.toolTags),await F(e,r)}async function ue(e,t){await F(e,(await P(e)).filter(e=>e.groupId!==t))}async function I(e){let t=await P(e);if(t.length===0){let t={groupId:y,name:`Main`,createdAt:0};return await F(e,[t]),[t]}return t}async function de(e,t){let n=await P(e),r=new Map(n.map(e=>[e.groupId,e])),i=[];for(let e of t){let t=r.get(e);t&&(i.push(t),r.delete(e))}for(let e of n)r.has(e.groupId)&&i.push(e);await F(e,i)}async function fe(e,t){let n=await P(e),r=n.find(e=>e.groupId===t);if(!r)return null;let i=t.indexOf(`:`),a={groupId:`${i>=0?t.slice(0,i+1):`br:`}${c()}`,name:`${r.name} (copy)`,createdAt:Date.now(),pinnedMaxTokens:r.pinnedMaxTokens,providerRuntimeOverrides:r.providerRuntimeOverrides?JSON.parse(JSON.stringify(r.providerRuntimeOverrides)):void 0,subagentModelSelectionMode:r.subagentModelSelectionMode,subagentMaxTokens:r.subagentMaxTokens,subagentPinnedProvider:r.subagentPinnedProvider,subagentPinnedModel:r.subagentPinnedModel,subagentFastProvider:r.subagentFastProvider,subagentFastModel:r.subagentFastModel,subagentSmartProvider:r.subagentSmartProvider,subagentSmartModel:r.subagentSmartModel,subagentPowerfulProvider:r.subagentPowerfulProvider,subagentPowerfulModel:r.subagentPowerfulModel,toolTags:r.toolTags?[...r.toolTags]:void 0};return n.push(a),await F(e,n),a}async function pe(e,t,n,r,i){let a=await P(e),o=a.find(e=>e.groupId===t);o&&(n?o.pinnedProvider=n:delete o.pinnedProvider,r?o.pinnedModel=r:delete o.pinnedModel,typeof i==`number`&&Number.isFinite(i)&&i>0?o.pinnedMaxTokens=Math.floor(i):delete o.pinnedMaxTokens),await F(e,a)}async function me(e,t,n,r,i,a){let o=await P(e),s=o.find(e=>e.groupId===t);s&&(s.subagentModelSelectionMode=n,n===`manual`?(r?s.subagentPinnedProvider=r:delete s.subagentPinnedProvider,i?s.subagentPinnedModel=i:delete s.subagentPinnedModel):(delete s.subagentPinnedProvider,delete s.subagentPinnedModel),typeof a==`number`&&Number.isFinite(a)&&a>0?s.subagentMaxTokens=Math.floor(a):delete s.subagentMaxTokens),await F(e,o)}async function he(e,t,n){let r=await P(e),i=r.find(e=>e.groupId===t);i&&(n&&Object.keys(n).length>0?i.providerRuntimeOverrides=JSON.parse(JSON.stringify(n)):delete i.providerRuntimeOverrides),await F(e,r)}function ge(e,t,n,r){let i=t*2**e,a=Math.min(i,n),o=a*r*Math.random();return Math.max(0,a-o)}function _e(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(n,e);if(t){let e=()=>{clearTimeout(i),r(t.reason??new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,e,{once:!0});let a=n;n=(n=>{t.removeEventListener(`abort`,e),a(n)})}})}async function L(){let e=typeof globalThis<`u`?globalThis:void 0;e?.scheduler&&typeof e.scheduler.yield==`function`?await e.scheduler.yield():await new Promise(e=>setTimeout(e,0))}function ve(e,t=y){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-sync`})}function ye(e,t=y){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-flush`})}function be(e){`serviceWorker`in navigator&&navigator.serviceWorker?.controller&&navigator.serviceWorker.controller.postMessage({type:`set-proxy-config`,payload:{useProxy:e.useProxy,proxyUrl:e.proxyUrl}})}async function xe(e,t,n,r=O){e.gitProxyUrl=n||`/git-proxy`,await r(t,b.GIT_PROXY_URL,e.gitProxyUrl)}async function Se(e,t,n,r=O){e.proxyUrl=n||`/proxy`,await r(t,b.PROXY_URL,e.proxyUrl),be(e)}async function Ce(e,t,n,r=O){e.useProxy=!!n,await r(t,b.USE_PROXY,e.useProxy?`true`:`false`),be(e)}async function we(e,t,n,r=O){e.vmBashFullInternetAccess=!!n,await r(t,b.VM_BASH_FULL_INTERNET_ACCESS,e.vmBashFullInternetAccess?`true`:`false`)}function Te(e,t,n){if(e&&S(e)){let r=e.db,i=r.prepare(`SELECT * FROM messages WHERE groupId = ?`).all(t),a=r.prepare(`INSERT INTO messages
|
|
3
|
+
(id, groupId, timestamp, content, sender, channel, isFromMe, isTrigger, attachments, a2uiAction, a2uiEnvelopes, freshContext, subagent)
|
|
4
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);for(let e of i)a.run(c(),n,e.timestamp,e.content,e.sender,e.channel??`chat`,e.isFromMe,e.isTrigger,e.attachments,e.a2uiAction,e.a2uiEnvelopes,e.freshContext,e.subagent);return Promise.resolve(i.length)}return new Promise((r,i)=>{let a=e?.transaction(`messages`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone messages.`);let o=a.objectStore(`messages`),s=o.index(`by-group`).openCursor(t),l=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:c(),groupId:n};o.put(t),l++,e.continue()}else r(l)},s.onerror=()=>i(s.error)})}function Ee(e,t,n){if(e&&S(e)){let r=e.db,i=r.prepare(`SELECT * FROM tasks WHERE groupId = ?`).all(t),a=r.prepare(`INSERT INTO tasks
|
|
5
|
+
(id, groupId, enabled, schedule, prompt, tools, lastRun, createdAt, type, freshContext, subagent, name, task_order, pushNotifications)
|
|
6
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);for(let e of i)a.run(c(),n,+!!e.enabled,e.schedule??null,e.prompt??``,e.tools??null,e.lastRun??null,e.createdAt,e.type??null,e.freshContext?1:null,e.subagent?1:null,e.name??null,e.task_order??null,e.pushNotifications?1:null);return Promise.resolve(i.length)}return new Promise((r,i)=>{let a=e?.transaction(`tasks`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone tasks.`);let o=a.objectStore(`tasks`),s=o.index(`by-group`).openCursor(t),l=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:c(),groupId:n};o.put(t),l++,e.continue()}else r(l)},s.onerror=()=>i(s.error)})}function De(e,t){return C(e,`messages`,`readwrite`,e=>e.delete(t)).then(()=>void 0)}function R(e,t){return t?C(e,`tasks`,`readwrite`,e=>e.delete(t)).then(()=>void 0):Promise.reject(/* @__PURE__ */ Error(`Task ID is required for deletion.`))}function Oe(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`sub-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}async function ke(e){if(!e)return Oe();let t=await w(e,b.SUBSCRIBER_ID);if(typeof t==`string`&&t.trim().length>0)return t;let n=Oe();return await O(e,b.SUBSCRIBER_ID,n),n}function z(e,t){return C(e,`messages`,`readwrite`,e=>e.put(t)).then(()=>void 0)}function B(e,t){let n={...t,enabled:+!!t.enabled};return C(e,`tasks`,`readwrite`,e=>e.put(n)).then(()=>void 0)}function Ae(e,t,n){let r=null,i,a;return typeof e==`string`?(i=e,a=t):(r=e,i=t,a=n),r&&S(r)?Promise.resolve().then(()=>{r.db.prepare(`UPDATE tasks SET lastRun = ? WHERE id = ?`).run(a,i)}):new Promise(async(e,t)=>{try{let n=r??await x();if(!n)return t(/* @__PURE__ */ Error(`failed to get transaction, cannot update task last run.`));let o=n.transaction(`tasks`,`readwrite`);if(!o)return t(/* @__PURE__ */ Error(`failed to get transaction`));let s=o.objectStore(`tasks`),c=s.get(i);c.onsuccess=()=>{let n=c.result;if(!n){e();return}n.lastRun=a;let r=s.put(n);r.onsuccess=()=>e(),r.onerror=()=>t(r.error)},c.onerror=()=>t(c.error)}catch(e){t(e)}})}async function je(e,t,n){let r=(await A(e)).filter(e=>e.groupId===t),i=new Map(r.map(e=>[e.id,e])),a=[],o=0;for(let t of n){let n=i.get(t);n&&(n.order=o++,await B(e,n),a.push(n),i.delete(t))}let s=Array.from(i.values()).sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r});for(let t of s)t.order=o++,await B(e,t),a.push(t);return a}async function Me(e,t,n,r){let i=await f(e,t),a=await f(e,n),o=r.replace(/\\/g,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean),s=i,c=a;for(let e of o)s=await s.getDirectoryHandle(e),c=await c.getDirectoryHandle(e,{create:!0});let l=n.replace(/:/g,`-`),u=[te(),`groups`,l,...o];try{await Ne(e,n,s,c,u)}catch(e){throw o.length>0&&await a.removeEntry(o[0],{recursive:!0}).catch(()=>void 0),e}}async function Ne(e,t,n,r,i){for await(let[a,o]of n.entries()){if(o.kind===`directory`){await Ne(e,t,o,await r.getDirectoryHandle(a,{create:!0}),[...i,a]);continue}let n=await o.getFile(),s=await r.getFileHandle(a,{create:!0});try{await v(s,n)}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await u(e)).type===`opfs`))throw t;await m([...i,a],n)}}}function Pe(){let e=s(`/static-main/index.html`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}async function Fe(e){let t=await w(e,b.MAIN_GROUP_INDEX_SUPPRESSED);return t===!0||t===`true`}async function Ie(e,t){await O(e,b.MAIN_GROUP_INDEX_SUPPRESSED,t)}async function Le(t,n=y,r){try{if(await T(t,n,`index.html`)){if(n===`br:main`)try{let i=await E(t,n,`index.html`);typeof i==`string`&&(i.includes(`<shadow-claw`)||i.includes(`data-shadow-claw-dsd`))&&await D(t,n,`index.html`,r??e)}catch{}return!0}if(n===`br:main`&&await Fe(t))return!1;let i=r;if(i===void 0&&typeof fetch==`function`)try{let e=await fetch(Pe());if(e.ok){let t=await e.text();!t.includes(`<shadow-claw`)&&!t.includes(`data-shadow-claw-dsd`)&&(i=t)}}catch{}return i??=e,await D(t,n,`index.html`,i),!0}catch(e){return console.warn(`Failed to ensure main workspace Memory:`,e),!1}}const V=`MEMORY.md`;function Re(){let e=s(`/static-main/MEMORY.md`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}async function H(e){let t=await w(e,b.MAIN_GROUP_README_SUPPRESSED);return t===!0||t===`true`}async function U(e,t){await O(e,b.MAIN_GROUP_README_SUPPRESSED,t)}async function W(e,t=y,r){try{if(await T(e,t,`MEMORY.md`)){if(t===`br:main`)try{let i=await E(e,t,V);typeof i==`string`&&(i.includes(`<shadow-claw`)||i.includes(`data-shadow-claw-dsd`))&&await D(e,t,V,r??n)}catch{}return!0}if(t===`br:main`&&await H(e))return!1;let i=r;if(i===void 0&&typeof fetch==`function`)try{let e=await fetch(Re());if(e.ok){let t=await e.text();!t.includes(`<shadow-claw`)&&!t.includes(`data-shadow-claw-dsd`)&&(i=t)}}catch{}return i??=n,await D(e,t,V,i),!0}catch(e){return console.warn(`Failed to ensure main workspace Memory:`,e),!1}}async function G(e,t,n=`.`){for(let r=0;r<2;r++)try{let r=await f(e,t);if(n&&n!==`.`){let e=n.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);for(let t of e){let e=await r.getDirectoryHandle(t);if(typeof r.isSameEntry==`function`&&await r.isSameEntry(e))throw Error(`Directory navigation stuck at "${r.name}" for segment "${t}" — the stored directory handle may be stale.`);r=e}}let i=[];for await(let[e,t]of r.entries())i.push(t.kind===`directory`?`${e}/`:e);return i.sort()}catch(e){if(r===0&&p(e)){g();continue}throw e}return[]}function ze(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`&&typeof e.requestPermission==`function`}async function Be(e){let t=await w(e,b.STORAGE_HANDLE);return!ze(t)||await t.requestPermission({mode:`readwrite`})===`granted`}function Ve(e){let t=o();return t?`shadowclaw:${t}:${e}`:e}function He(e){if(typeof localStorage>`u`)return null;let t=Ve(e);try{let n=localStorage.getItem(t);if(n!==null)return n;if(t===e)return null;let r=localStorage.getItem(e);if(r!==null)return localStorage.setItem(t,r),r}catch(e){console.warn(`Unable to read from localStorage:`,e)}return null}function K(e,t){if(typeof localStorage>`u`)return;let n=Ve(e);try{localStorage.setItem(n,t)}catch(e){console.warn(`Unable to write to localStorage:`,e)}}async function Ue(e,t){let n=await f(e,t);for await(let[e]of n.entries())await n.removeEntry(e,{recursive:!0})}async function q(e,t,n){let r=await f(e,t),{dirs:i,filename:a}=l(n.replace(/\/$/,``)),o=r;for(let e of i)o=await o.getDirectoryHandle(e);await o.removeEntry(a,{recursive:!0})}function J(e,t){return`${e}:${t}`}async function We(e){let t=await w(e,b.SUPPRESSED_PAGES_LIST);if(!t||typeof t!=`string`)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return e}catch{}return[]}async function Ge(e,t,n){let r=await We(e),i=J(t,n);return r.some(e=>J(e.groupId,e.path)===i)}async function Ke(e,t,n){let r=await We(e),i=J(t,n);if(!r.some(e=>J(e.groupId,e.path)===i)){let i=[...r,{groupId:t,path:n}];await O(e,b.SUPPRESSED_PAGES_LIST,JSON.stringify(i))}}async function qe(e,t,n){let r=await We(e),i=J(t,n),a=r.filter(e=>J(e.groupId,e.path)!==i);a.length!==r.length&&await O(e,b.SUPPRESSED_PAGES_LIST,JSON.stringify(a))}function Je(e=y){return e===`br:main`?b.STATIC_MAIN_SITE_SEEDED:`${b.STATIC_MAIN_SITE_SEEDED}:${e}`}async function Ye(e,t=y){let n=Je(t),r=await w(e,n);return r===!0||r===`true`}async function Xe(e,t=y,n=!0){let r=Je(t);await O(e,r,n)}function Ze(){let e=s(`/static-main-manifest.json`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}function Qe(e){let t=e.replace(/^\/+/,``),n=`static-main`;if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let t=JSON.parse(e.textContent);typeof t?.pages?.baseUrl==`string`&&(n=t.pages.baseUrl.replace(/^\/+/,``).replace(/\/+$/,``))}}catch{}let r=s(n?`/${n}/${t}`:`/${t}`);if(typeof window<`u`&&window.location?.origin)try{return new URL(r,window.location.origin).toString()}catch{return r}return r}async function $e(){if(typeof fetch!=`function`)return null;try{let e=Ze(),t=await fetch(e);if(t.ok){if((t.headers?.get?.(`content-type`)||``).includes(`text/html`))return null;let e=await t.json();if(e&&Array.isArray(e.pages))return e}}catch{}return null}async function et(e){if(typeof fetch!=`function`)return null;try{let t=Qe(e),n=await fetch(t);if(n.ok){let t=n.headers?.get?.(`content-type`)||``;if((e.endsWith(`.md`)||e.endsWith(`.markdown`)||e.endsWith(`.json`))&&t.includes(`text/html`))return null;let r=await n.text();return r.includes(`<shadow-claw`)||r.includes(`data-shadow-claw-dsd`)?null:r}}catch{}return null}function tt(e){if(typeof document>`u`)return null;let t=t=>{if(!t||!(t instanceof HTMLElement))return!1;if(!e)return!0;let n=t.getAttribute(`data-initial-path`)?.trim();return!n||n===e},n=document.querySelector(e?`[data-pages-rendered][data-initial-path="${e}"]`:`[data-pages-rendered]`);if(t(n))return n;let r=document.querySelector(`shadow-claw`)?.shadowRoot,i=(r?.querySelector(`shadow-claw-pages`)?.shadowRoot)?.querySelector(e?`[data-pages-rendered][data-initial-path="${e}"]`:`[data-pages-rendered]`)||r?.querySelector(e?`[data-pages-rendered][data-initial-path="${e}"]`:`[data-pages-rendered]`);if(t(i))return i;let a=document.querySelectorAll(`template`);for(let n of Array.from(a)){let r=n.content?.querySelector(e?`[data-pages-rendered][data-initial-path="${e}"]`:`[data-pages-rendered]`);if(t(r))return r;let i=n.content?.querySelectorAll(`template`);if(i)for(let n of Array.from(i)){let r=n.content?.querySelector(e?`[data-pages-rendered][data-initial-path="${e}"]`:`[data-pages-rendered]`);if(t(r))return r}}return null}function Y(e=`index.html`){let t=tt(e);if(!t)return null;let n=t.getAttribute(`data-initial-path`)?.trim();if(n&&n!==e)return null;let r=t.querySelector(`[data-markdown-frontmatter]`),i=null;if(r){let e=r.getAttribute(`data-frontmatter`);if(e)try{i=JSON.parse(e)}catch{}}let a=t.cloneNode(!0),o=a.querySelector(`[data-markdown-frontmatter]`);o&&o.remove();let s=a.innerHTML.trim();if(!s&&!i)return null;if(i&&Object.keys(i).length>0){let e=[`---`];for(let[t,n]of Object.entries(i))typeof n==`string`?e.push(`${t}: ${JSON.stringify(n)}`):typeof n==`number`||typeof n==`boolean`?e.push(`${t}: ${n}`):e.push(`${t}: ${JSON.stringify(n)}`);return e.push(`---`,``),`${e.join(`
|
|
7
|
+
`)}\n${s}`}return s}async function nt(t={}){let r=()=>{let t=null;if(typeof document<`u`){let r=document.getElementById(`shadow-claw-static-manifest`);if(r&&r.textContent)try{let e=JSON.parse(r.textContent);e&&Array.isArray(e.pages)&&(t={...e,pages:[...e.pages]})}catch(e){console.warn(`Failed to parse embedded static main manifest:`,e)}let i=document.querySelectorAll(`script[type="text/markdown"][data-shadow-claw-page]`);if(i.length>0){t||={pages:[]};for(let r of Array.from(i)){let i=r.getAttribute(`data-shadow-claw-page`)?.trim();if(i){let a=r.textContent||``;a=M(a),!a.trim()&&/^memory\.(md|markdown)$/iu.test(i)&&(a=n),!a.trim()&&(i===`index.html`||/^index\.(html?|xhtml)$/iu.test(i))&&(a=Y(i)??e);let o=t.pages.findIndex(e=>e.displayPath===i);o>=0?t.pages[o].content=a:t.pages.push({displayPath:i,content:a})}}}let a=document.getElementById(`shadow-claw-site-config`);if(a?.textContent)try{let r=JSON.parse(a.textContent);if(Array.isArray(r?.pages?.files)){t||={pages:[]};for(let i of r.pages.files)if(typeof i==`string`&&i.trim()){let r=i.trim(),a=``;/^memory\.(md|markdown)$/iu.test(r)?a=n:(r===`index.html`||/^index\.(html?|xhtml)$/iu.test(r))&&(a=Y(r)??e),t.pages.some(e=>e.displayPath===r)||t.pages.push({displayPath:r,content:a})}}}catch{}let o=tt();if(o){t||={pages:[]};let r=o.getAttribute(`data-initial-path`)?.trim()||`index.html`;if(!t.pages.some(e=>e.displayPath===r)){let n=Y(r)??e;t.pages.push({displayPath:r,content:n})}t.pages.some(e=>/^memory\.(md|markdown)$/iu.test(e.displayPath))||t.pages.push({displayPath:`MEMORY.md`,content:n})}}return t};if(t.preferEmbedded!==!1){let e=r();if(e&&e.pages.length>0)return e}if(t.fetchFallback!==!1){let e=await $e();if(e&&e.pages.length>0)return e}if(t.preferEmbedded===!1){let e=r();if(e&&e.pages.length>0)return e}return{pages:[{displayPath:`index.html`,content:e},{displayPath:`MEMORY.md`,content:n}]}}async function rt(e,t,n=[]){for(let[r,i]of Object.entries(t))if(r===`purgePreRenderedStaticPages`&&i===!0){if(n.length>0){let t=n[0],r=n.slice(1).join(`/`);try{r?await q(e,t,r):await Ue(e,t)}catch(e){console.warn(`Failed to purge pre-rendered static pages for ${t}/${r}:`,e)}}}else typeof i==`object`&&i&&await rt(e,i,[...n,r])}function it(){if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let t=JSON.parse(e.textContent);if(t?.pages?.sortOrder===`desc`)return`desc`;if(t?.pages?.sortOrder===`asc`)return`asc`}}catch{}return`desc`}function at(){if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let t=JSON.parse(e.textContent)?.pages?.defaultPinnedPage;if(typeof t==`string`&&t.trim().length>0)return t.trim()}}catch{}return null}function ot(){if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let n=JSON.parse(e.textContent);return{allowList:t(n?.pages?.allowList??n?.pages?.allowlist??n?.allowList??n?.allowlist??[]),denyList:t(n?.pages?.denyList??n?.pages?.denylist??n?.denyList??n?.denylist??[])}}}catch{}return{allowList:[],denyList:[]}}function st(e,t){let n=t??it();return[...e].sort((e,t)=>{let r=e.path,i=t.path,a=r.split(`/`).pop()||``,o=i.split(`/`).pop()||``,s=/^index\.(html?|xhtml)$/iu.test(a),c=/^index\.(html?|xhtml)$/iu.test(o);if(s&&!c)return-1;if(!s&&c)return 1;let l=/^memory\.(md|markdown)$/iu.test(a),u=/^memory\.(md|markdown)$/iu.test(o);return l&&!u?1:!l&&u?-1:n===`asc`?r.localeCompare(i,void 0,{numeric:!0,sensitivity:`base`}):i.localeCompare(r,void 0,{numeric:!0,sensitivity:`base`})})}async function X(e,t,n=`sc:purge-id`,r=`static_main_site_purge_id`){let i=t??`__legacy_purge_pages__`;try{if(He(n)===i)return!0}catch{}try{if(await w(e,r)===i){try{K(n,i)}catch{}return!0}await O(e,r,i);try{K(n,i)}catch{}}catch{try{K(n,i)}catch{}}return!1}async function ct(t,i=y,a=[],o={}){await Le(t,i);let s=await nt(o),c=!1;s.preRenderedStaticPages&&(await X(t,s.purgeId)||(c=!0,await rt(t,s.preRenderedStaticPages)));let l=!1;if(i===`br:main`&&s.skillsPurgeId!==void 0&&!await X(t,s.skillsPurgeId,`sc:skills-purge-id`,`static_main_skills_purge_id`)){l=!0;try{await q(t,i,`.agents/skills/main`)}catch(e){if(!(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`))throw e}try{await q(t,i,`.agents/tools/main`)}catch(e){if(!(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`))throw e}}for(let e of s.pages)if(e.content?.includes(`slug: "shadow-claw--purge-pages"`)){!c&&!await X(t,s.purgeId)&&(c=!0,await Ue(t,i));break}let u=i===`br:main`&&await H(t),d=new Set(s.pages.map(e=>J(i,e.displayPath))),f=c?a.filter(e=>e.groupId!==i||d.has(J(e.groupId,e.path))):[...a],{allowList:p,denyList:m}=ot(),h=0;for(let a of s.pages)if(h++,h%5==0&&await new Promise(e=>setTimeout(e,0)),!a.content?.includes(`slug: "shadow-claw--purge-pages"`)&&r(a.displayPath,{allowList:p,denyList:m,groupId:i})){if(/^memory\.(md|markdown)$/iu.test(a.displayPath)){if(u)continue;let e=typeof a.content==`string`&&a.content.trim().length>0&&a.content!==n?a.content:void 0;if(e===void 0?await W(t,i):await W(t,i,e)){let e=J(i,a.displayPath);f.some(t=>J(t.groupId,t.path)===e)||f.push({groupId:i,path:a.displayPath})}}else if(!await Ge(t,i,a.displayPath))try{if(!await T(t,i,a.displayPath)){let n=a.content;(typeof n!=`string`||!n.trim())&&(n=a.displayPath===`index.html`?Y(`index.html`)??e:await et(a.displayPath)??``),await D(t,i,a.displayPath,n)}let n=J(i,a.displayPath);f.some(e=>J(e.groupId,e.path)===n)||f.push({groupId:i,path:a.displayPath})}catch(e){console.warn(`Failed to seed static page file ${a.displayPath}:`,e)}}if(i===`br:main`){for(let e of s.skills||[]){let n=`.agents/skills/main/${e.displayPath}`;try{await T(t,i,n)||await D(t,i,n,e.content)}catch(e){console.warn(`Failed to seed skill file ${n}:`,e)}}for(let e of s.tools||[]){let n=`.agents/tools/main/${e.displayPath}`;try{(l||!await T(t,i,n))&&await D(t,i,n,e.content)}catch(e){console.warn(`Failed to seed tool file ${n}:`,e)}}}let g=typeof document<`u`&&(document.getElementById(`shadow-claw-static-manifest`)!==null||document.querySelector(`script[type="text/markdown"][data-shadow-claw-page]`)!==null||tt()!==null);o.preferEmbedded!==!1&&g||await Xe(t,i,!0);let _=f.filter(e=>r(e.path,{allowList:p,denyList:m,groupId:e.groupId}));return Object.defineProperty(_,"didPurge",{value:c,enumerable:!1,writable:!0,configurable:!0}),Object.defineProperty(_,"didPurgeSkills",{value:l,enumerable:!1,writable:!0,configurable:!0}),st(_)}var lt=class{_events;_handlers=[];_runs=/* @__PURE__ */ new Map;constructor(e){this._events=e}start(){this._listen(`streaming-start`,this._onStreamingStart),this._listen(`streaming-chunk`,this._onStreamingChunk),this._listen(`streaming-end`,this._onStreamingEnd),this._listen(`streaming-done`,this._onStreamingDone),this._listen(`streaming-error`,this._onStreamingError),this._listen(`tool-activity`,this._onToolActivity)}stop(){for(let{event:e,handler:t}of this._handlers)this._events.off(e,t);this._handlers=[],this._runs.clear()}_emit(e,t){window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{groupId:e,event:t}}))}_listen(e,t){this._events.on(e,t),this._handlers.push({event:e,handler:t})}_onStreamingChunk=({groupId:e,text:t})=>{let n=this._runs.get(e);n&&n.messageId&&this._emit(e,{type:`TEXT_MESSAGE_CONTENT`,messageId:n.messageId,delta:t,timestamp:Date.now()})};_onStreamingDone=({groupId:e})=>{let t=this._runs.get(e);t&&(t.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_FINISHED`,threadId:t.threadId,runId:t.runId,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingEnd=({groupId:e})=>{let t=this._runs.get(e);t&&t.messageId&&(this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),t.messageId=null)};_onStreamingError=({groupId:e,error:t})=>{let n=this._runs.get(e);n&&(n.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:n.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_ERROR`,message:t||`Unknown streaming error`,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingStart=({groupId:e})=>{let t=c(),n=e,r=c();this._runs.set(e,{runId:t,threadId:n,messageId:r,activeToolCallIds:/* @__PURE__ */ new Set}),this._emit(e,{type:`RUN_STARTED`,threadId:n,runId:t,timestamp:Date.now()}),this._emit(e,{type:`TEXT_MESSAGE_START`,messageId:r,role:`assistant`,timestamp:Date.now()})};_onToolActivity=({groupId:e,tool:t,status:n})=>{let r=this._runs.get(e);if(r){if(n===`running`){let n=c();r.activeToolCallIds.add(n),this._emit(e,{type:`TOOL_CALL_START`,toolCallId:n,toolCallName:t,timestamp:Date.now()}),r._lastToolCallId=n}else if(n===`done`||n===`error`){let t=r._lastToolCallId;t&&(r.activeToolCallIds.delete(t),this._emit(e,{type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()}))}}}};const ut=new class{#e=new k.State(0);#t=/* @__PURE__ */ new Map;#n=new k.State([]);clear(){this.#t.forEach((e,t)=>this.clearTimer(t)),this.#t.clear(),this.#n.set([])}clearTimer(e){let t=this.#t.get(e);t?.timeoutId&&clearTimeout(t.timeoutId),this.#t.delete(e)}dismiss(e){this.clearTimer(e),this.#n.set(this.#n.get().filter(t=>t.id!==e))}pause(e){let t=this.#t.get(e);t&&t.timeoutId&&(clearTimeout(t.timeoutId),t.timeoutId=void 0,t.remaining=Math.max(0,t.remaining-(Date.now()-t.startedAt)),this.#t.set(e,t))}resolveAction(e){if(e&&typeof e.label==`string`&&typeof e.onClick==`function`)return e}resolveDuration(e){return typeof e!=`number`||Number.isNaN(e)||e<0?4e3:e}resolveType(e){return e&&[`success`,`warning`,`error`,`info`].includes(e)?e:`info`}resume(e){let t=this.#t.get(e);!t||t.timeoutId||t.remaining<=0||this.scheduleDismiss(e,t.remaining)}scheduleDismiss(e,t){this.clearTimer(e);let n=globalThis.setTimeout(()=>{this.dismiss(e)},t);this.#t.set(e,{timeoutId:n,remaining:t,startedAt:Date.now()})}show(e,t={}){let n=this.#e.get()+1;this.#e.set(n);let r={id:n,message:e,type:this.resolveType(t.type),duration:this.resolveDuration(t.duration),action:this.resolveAction(t.action),createdAt:Date.now()},i=[...this.#n.get(),r];if(i.length>5){let e=i[0];this.clearTimer(e.id),this.#n.set(i.slice(1))}else this.#n.set(i);return r.duration>0&&this.scheduleDismiss(r.id,r.duration),r.id}get toasts(){return this.#n.get()}async runAction(e){let t=this.#n.get().find(t=>t.id===e);t?.action&&await t.action.onClick()}};function dt(e,t={}){return ut.show(e,t)}function ft(e,t=4e3){return ut.show(e,{type:`success`,duration:t})}function Z(e,t=5e3){return ut.show(e,{type:`error`,duration:t})}function pt(e,t){if(!e||typeof e!=`object`)return e;let n=JSON.parse(JSON.stringify(e));for(let e of t)mt(n,e);return n}function mt(e,t){let{op:n,path:r,value:i}=t;if(!r||!r.startsWith(`/`))return;let a=r.split(`/`).slice(1).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),o=a.pop();if(o===void 0)return;let s=e;for(let e of a){if(typeof s!=`object`||!s)return;s=s[e]}typeof s==`object`&&s&&(Array.isArray(s)?ht(s,o,n,i):gt(s,o,n,i))}function ht(e,t,n,r){if(n===`add`){if(t===`-`)e.push(r);else{let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<=e.length&&e.splice(n,0,r)}}else if(n===`replace`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&(e[n]=r)}else if(n===`remove`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&e.splice(n,1)}}function gt(e,t,n,r){n===`add`||n===`replace`?e[t]=r:n===`remove`&&delete e[t]}function _t(e){if(e==null)return null;let t=String(e).trim().toLowerCase();return[`1`,`true`,`yes`,`on`].includes(t)?!0:![`0`,`false`,`no`,`off`].includes(t)&&null}function vt(e,t=!1){if(e==null)return t;if(typeof e==`boolean`)return e;if(typeof e==`number`)return e===1;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`1`}return!1}function yt(e){if(!e)return[];try{let n=JSON.parse(e);if(Array.isArray(n))return t(n.map(e=>String(e)))}catch{}return t(e.split(`,`))}function bt(e){if(e){if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:void 0}catch{return}}}function xt(e){if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`1`}return typeof e==`number`&&e===1}function St(e){return!!e}async function Q(e,t,n,r){if(!St(r))return!0;if(!e.schedule)return await $(e.id,t,n,r)!==`failed`;try{let r=t.replace(/\/$/,``);return(await fetch(`${r}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e,subscriberId:n})})).ok}catch{return!1}}async function $(e,t,n,r){if(!St(r))return`missing`;try{let r=t.replace(/\/$/,``),i=`subscriberId=${encodeURIComponent(n)}`,a=await fetch(`${r}/tasks/${encodeURIComponent(e)}?${i}`,{method:`DELETE`});return a.ok?`deleted`:a.status===404||a.status===405?`missing`:`failed`}catch{return`failed`}}async function Ct(e,t,n,r){if(!St(r))return null;try{let r=t.replace(/\/$/,``),i=await fetch(`${r}/tasks?groupId=${encodeURIComponent(e)}&subscriberId=${encodeURIComponent(n)}`,{method:`GET`});if(!i.ok||typeof i.json!=`function`)return null;let a=await i.json();return Array.isArray(a)?a.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.schedule==`string`&&typeof e.prompt==`string`).map(t=>({id:t.id,groupId:t.group_id||t.groupId||e,schedule:t.schedule,type:t.type,prompt:t.prompt,tools:bt(t.tools),channel:typeof t.channel==`string`?t.channel:void 0,enabled:t.enabled===!0||t.enabled===1,lastRun:typeof t.lastRun==`number`?t.lastRun:typeof t.last_run==`number`?t.last_run:null,createdAt:typeof t.createdAt==`number`?t.createdAt:typeof t.created_at==`number`?t.created_at:Date.now(),name:typeof t.name==`string`?t.name:void 0,order:typeof t.order==`number`?t.order:typeof t.task_order==`number`?t.task_order:void 0})):null}catch{return null}}function wt(e,t){let n=(e?.inputTokens??0)+(t.inputTokens??0),r=(e?.outputTokens??0)+(t.outputTokens??0),i=(e?.cacheReadTokens??0)+(t.cacheReadTokens??0),a=(e?.cacheCreationTokens??0)+(t.cacheCreationTokens??0);return{groupId:t.groupId||e?.groupId||``,inputTokens:n,outputTokens:r,cacheReadTokens:i,cacheCreationTokens:a,totalTokens:n+r+i+a,contextLimit:t.contextLimit||e?.contextLimit||0}}var Tt=class e{static DEFAULT_PAGE_PATH=`MEMORY.md`;orchestrator;_activeGroupId;_activePage;_activePinnedPage;_defaultPinnedPage;_activityLog;_activityLogSessionStartedAtByGroup;_aguiAdapter;_aguiEvent;_contextUsage;_currentPath;_db;_error;_files;_gitProxyUrl;_groups;_hadPersistedActivePage;_initResolve;_isTyping;_lastOrchestratorDisplayState=`idle`;_messages;_modelDownloadProgress;_onlineReplayHandler;_pages;_pagesAllowList;_pagesDenyList;_peerStateByGroup;_proxyUrl;_ready;_remoteAgentStatusByGroup;_remoteAgentTypingByGroup;_replayingTaskSyncOutbox;_subscriberId;_sidebarDefaultPage;_state;_storageStatus;_streamingText;_tasks;_taskSyncOutbox;_tokenUsage;_tokenUsageAccumulator=null;_toolActivity;_unreadGroupIds;_useProxy;_vmBashFullInternetAccess;_whenInitialized;_whenReady;_readyResolve;constructor(){this._messages=new k.State([]),this._isTyping=new k.State(!1),this._storageStatus=new k.State(null),this._toolActivity=new k.State(null),this._modelDownloadProgress=new k.State(null),this._activityLog=new k.State([]),this._state=new k.State(`idle`),this._tokenUsage=new k.State(null),this._error=new k.State(null),this._activeGroupId=new k.State(y),this._ready=new k.State(!1),this._tasks=new k.State([]),this._files=new k.State([]),this._currentPath=new k.State(`.`),this._groups=new k.State([]),this._unreadGroupIds=new k.State(/* @__PURE__ */ new Set),this._streamingText=new k.State(null),this._aguiEvent=new k.State(null),this._contextUsage=new k.State(null),this._useProxy=new k.State(!1),this._proxyUrl=new k.State(`/proxy`),this._gitProxyUrl=new k.State(`/git-proxy`),this._vmBashFullInternetAccess=new k.State(!1),this._activePage=new k.State(`pages`);let e=re()?.sidebar?.defaultPage,t=e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:`chat`;this._sidebarDefaultPage=new k.State(t),this._pages=new k.State([]),this._pagesAllowList=new k.State([]),this._pagesDenyList=new k.State([]),this._activePinnedPage=new k.State(null),this._defaultPinnedPage=new k.State(null),this._remoteAgentStatusByGroup=new k.State(/* @__PURE__ */ new Map),this._remoteAgentTypingByGroup=new k.State(/* @__PURE__ */ new Map),this._peerStateByGroup=new k.State(/* @__PURE__ */ new Map),this._hadPersistedActivePage=!1,this._initResolve=null,this._whenInitialized=new Promise(e=>{this._initResolve=e}),this._readyResolve=null,this._whenReady=new Promise(e=>{this._readyResolve=e}),this.orchestrator=null,this._db=null,this._activityLogSessionStartedAtByGroup=/* @__PURE__ */ new Map,this._taskSyncOutbox=[],this._replayingTaskSyncOutbox=!1,this._subscriberId=null,this._onlineReplayHandler=null,this._aguiAdapter=null}get activeGroupId(){return this._activeGroupId.get()}get activePage(){return this._activePage.get()}get activePinnedPage(){return this._activePinnedPage.get()}get defaultPinnedPage(){return this._defaultPinnedPage.get()}get pagesAllowList(){return this._pagesAllowList.get()}get pagesDenyList(){return this._pagesDenyList.get()}isPageAllowed(e,t){return r(e,{allowList:this._pagesAllowList.get(),denyList:this._pagesDenyList.get(),groupId:t??this._activeGroupId.get()})}get effectiveDefaultPage(){let e=this._defaultPinnedPage.get();return e&&this.isPageAllowed(e.path,e.groupId)?e:this._pages.get()[0]||null}get activityLog(){return this._activityLog.get()}get taskServerEnabled(){return this.orchestrator?.taskServerEnabled??!1}get aguiEvent(){return this._aguiEvent.get()}clearError(){this._error.set(null),this._state.get()===`error`&&this._state.set(`idle`)}get contextUsage(){return this._contextUsage.get()}get tokenUsageAccumulator(){return this._tokenUsageAccumulator}get currentPath(){return this._currentPath.get()}get error(){return this._error.get()}get files(){return this._files.get()}getPeerState(e){return this._peerStateByGroup.get().get(e)||null}getRemoteAgentStatus(e){return this._remoteAgentStatusByGroup.get().get(e)||`idle`}getState(){return{messages:this.messages,isTyping:this.isTyping,toolActivity:this.toolActivity,activityLog:this.activityLog,state:this.state,tokenUsage:this.tokenUsage,modelDownloadProgress:this.modelDownloadProgress,error:this.error,activeGroupId:this.activeGroupId,pages:this.pages,ready:this.ready,files:this.files,currentPath:this.currentPath,streamingText:this.streamingText,contextUsage:this.contextUsage}}getTasksForBackup(){return this._tasks.get()}get gitProxyUrl(){return this._gitProxyUrl.get()}get groups(){return this._groups.get()}get hadPersistedActivePage(){return this._hadPersistedActivePage}isRemoteAgentTyping(e){return this._remoteAgentTypingByGroup.get().get(e)||!1}get isTyping(){return this._isTyping.get()}get messages(){return this._messages.get()}get modelDownloadProgress(){return this._modelDownloadProgress.get()}get pages(){return this._pages.get()}get proxyUrl(){return this._proxyUrl.get()}get ready(){return this._ready.get()}sendMessage(e,t=[],n){n===void 0?this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t):this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t,n)}async sendFileToPeer(e,t=this._activeGroupId.get(),n){let r=t.startsWith(`peer:`),i=t.startsWith(`room:`);if(!r&&!i){let e=`Can only send files to peers in a peer or room conversation.`;throw Z(e,4500),Error(e)}let a=this.orchestrator?.router;if(!a){let e=`Network router is not initialized.`;throw Z(e,4500),Error(e)}let o=n?.fileName||e.split(`/`).pop()||e,s=n?.mimeType||`application/octet-stream`,l=n?.size||0;a.setTyping(t,!0);try{let n={path:e,fileName:o,mimeType:s,size:l};if(await a.send(t,``,[n]),this._db){let e={id:c(),groupId:t,sender:`You`,content:``,timestamp:Date.now(),channel:i?`room`:`peerjs`,attachments:[n],isFromMe:!1,isTrigger:!1};await z(this._db,e),this.orchestrator?.events.emit(`message`,e)}ft(`Sent ${o} to ${i?`room peers`:`peer`}`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);throw console.error(`sendFileToPeer error:`,e),Z(`Failed to send file: ${t}`,6e3),e}finally{a.setTyping(t,!1)}}setActiveGroup(e,t,n=this._activePage.get()===`chat`){if(this._activeGroupId.set(t),this._messages.set([]),this._activityLog.set([]),this._error.set(null),this._isTyping.set(!1),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._currentPath.set(`.`),n){let e=new Set(this._unreadGroupIds.get());e.delete(t)&&this._unreadGroupIds.set(e)}this.loadHistory(),this.loadTasks(e),this.loadFiles(e)}setReady(e=!0){this._ready.set(e),e&&this._readyResolve&&this._readyResolve()}setRemoteAgentStatus(e,t){let n=this._remoteAgentStatusByGroup.get(),r=new Map(n);r.set(e,t),this._remoteAgentStatusByGroup.set(r)}setRemoteAgentTyping(e,t){let n=this._remoteAgentTypingByGroup.get(),r=new Map(n);t?r.set(e,!0):r.delete(e),this._remoteAgentTypingByGroup.set(r)}get sidebarDefaultPage(){return this._sidebarDefaultPage.get()}get state(){return this._state.get()}stopCurrentRequest(){this.orchestrator?.stopCurrentRequest?.(this._activeGroupId.get())}get storageStatus(){return this._storageStatus.get()}get streamingText(){return this._streamingText.get()}syncHostWorkspaceToVM(){ve(this.orchestrator,this._activeGroupId.get())}syncVMWorkspaceToHost(){ye(this.orchestrator,this._activeGroupId.get())}get tasks(){return this._tasks.get()}get tokenUsage(){return this._tokenUsage.get()}get toolActivity(){return this._toolActivity.get()}get unreadGroupIds(){return this._unreadGroupIds.get()}get useProxy(){return this._useProxy.get()}get vmBashFullInternetAccess(){return this._vmBashFullInternetAccess.get()}get whenInitialized(){return this._whenInitialized}async resetSiteConfigSeed(e){await O(e,b.SITE_CONFIG_SEEDED,!1)}get whenReady(){return this._whenReady}async addPage(e,t,n=this._activeGroupId.get()){let r=n===`br:main`?this.normalizePagePath(t):t.trim();if(!r||!this.isPageAllowed(r,n))return;let i=this._pages.get();i.some(e=>e.path===r&&e.groupId===n)||(this.setPages([...i,{groupId:n,path:r}]),await qe(e,n,r),n===`br:main`&&r===`MEMORY.md`&&await U(e,!1),await this.persistPages(e))}async clearAllTasks(e){let t=await A(e),n=this._activeGroupId.get(),r=t.filter(e=>e.groupId===n),i=await this.getSubscriberId(e);for(let t of r)await $(t.id,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)===`failed`?(console.warn(`Failed to delete task "${t.id}" from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t.id,queuedAt:Date.now()})):await R(e,t.id);await this.loadTasks(e)}async cloneConversation(e,t){let n=await fe(e,t);if(!n)return null;await Te(e,t,n.groupId),await Ee(e,t,n.groupId);try{let r=await E(e,t,`MEMORY.md`);r&&await D(e,n.groupId,`MEMORY.md`,r)}catch{}try{await Me(e,t,n.groupId,`attachments`)}catch{}return this.setActiveGroup(e,n.groupId),await this.loadGroups(e),n}async compactContext(e){if(!this.orchestrator)return;let{compactContext:t}=await import(`./chunk-B0qusANw.js`);return t(this.orchestrator,e,this._activeGroupId.get())}async createConversation(e,t){let n=await se(e,t);return this.setActiveGroup(e,n.groupId),await this.loadGroups(e),n}async deleteConversation(e,t){if(!(this._groups.get().length<=1)&&(await ue(e,t),await ne(e,t),await this.loadGroups(e),this._activeGroupId.get()===t)){let t=this._groups.get()[0]?.groupId||`br:main`;this.setActiveGroup(e,t)}}async deleteMessage(e,t){await De(e,t),await this.loadHistory(),this.orchestrator?.refreshContextUsage&&await this.orchestrator.refreshContextUsage(e,this._activeGroupId.get())}async deleteTask(e,t){let n=await this.getSubscriberId(e);if(await $(t,this.getTaskServerBaseUrl(),n,this.orchestrator?.taskServerEnabled??!1)===`failed`)throw console.warn(`Failed to delete task from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t,queuedAt:Date.now()}),Error(`Failed to delete scheduled task on server; task kept locally.`);await R(e,t),await this.loadTasks(e)}async ensurePeerConversation(e,t){let n=`peer:${t}`,r=await I(e);if(!r.find(e=>e.groupId===n)){let i=[...r],a=``;if(this.orchestrator?.peerjsPeerAliases){for(let[e,n]of Object.entries(this.orchestrator.peerjsPeerAliases))if(n===t){a=e;break}}i.push({groupId:n,name:`Peer: ${a||t.substring(0,8)}`,createdAt:Date.now()}),await F(e,i),await this.loadGroups(e)}return n}async grantStorageAccess(e){try{await Be(e),await this.loadFiles(e)}catch(e){console.error(`Failed to grant storage access:`,e)}}async init(e,t){this._db=e,this.orchestrator=t,this._taskSyncOutbox=this.parseTaskSyncOutbox(await w(e,b.TASK_SYNC_OUTBOX)),await this.replayTaskSyncOutbox(e),typeof window<`u`&&!this._onlineReplayHandler&&(this._onlineReplayHandler=()=>{this._db&&this.replayTaskSyncOutbox(this._db)},window.addEventListener(`online`,this._onlineReplayHandler)),t.events.on(`a2ui-surface`,async({groupId:t,envelope:n})=>{t&&this.ensureGroupExists(e,t);let r=this._messages.get(),i=r.findIndex(e=>e.a2uiEnvelopes?.some(e=>e.surfaceId===n.surfaceId));if(i!==-1){let t=r[i],a=[...t.a2uiEnvelopes||[],n],o={...t,a2uiEnvelopes:a},s=[...r];s[i]=o,this._messages.set(s),await z(e,o)}else{let i=!t.startsWith(`peer:`),a={id:c(),groupId:t,sender:i?`agent`:t.replace(/^peer:/,``),content:``,timestamp:Date.now(),channel:t.startsWith(`peer:`)?`peerjs`:`browser`,isFromMe:i,isTrigger:!1,a2uiEnvelopes:[n]};t===this._activeGroupId.get()&&this._messages.set([...r,a]),await z(e,a)}}),t.events.on(`message`,t=>{if(t.groupId&&this.ensureGroupExists(e,t.groupId,t.timestamp),t.groupId&&t.groupId!==this._activeGroupId.get()){let e=new Set(this._unreadGroupIds.get());e.add(t.groupId),this._unreadGroupIds.set(e)}else t.isFromMe&&this._streamingText.get()!==null&&this._streamingText.set(null),this._messages.set([...this._messages.get(),t])}),t.events.on(`typing`,({groupId:e,typing:t})=>{e&&e!==this._activeGroupId.get()||this._isTyping.set(t)}),t.events.on(`tool-activity`,({groupId:e,tool:t,status:n})=>{e&&e!==this._activeGroupId.get()||this._toolActivity.set(n===`running`?{tool:t,status:n}:null)}),t.events.on(`model-download-progress`,e=>{this._modelDownloadProgress.set(e.status===`done`?null:e)}),t.events.on(`thinking-log`,e=>{e.groupId&&e.groupId!==this._activeGroupId.get()||(e.level===`info`&&e.label===`Starting`?this._activityLog.set([e]):this._activityLog.set([...this._activityLog.get(),e]),this.forwardActivityLogEntryToServer(e))}),t.events.on(`state-change`,e=>{let t=typeof e==`string`?e:e.state,n=typeof e==`string`?void 0:e.groupId;if(n&&n!==this._activeGroupId.get())return;let r=this._lastOrchestratorDisplayState;this._lastOrchestratorDisplayState=t,this._state.set(t),t===`idle`&&(this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null)),t===`thinking`&&r!==`thinking`&&r!==`responding`&&(this._tokenUsageAccumulator=null)}),t.events.on(`error`,({error:e})=>{console.error(`[Orchestrator Error Event]`,e),this._error.set(e),this._state.set(`error`)}),t.events.on(`session-reset`,()=>{this._messages.set([]),this._activityLog.set([]),this._tokenUsageAccumulator=null,this._tokenUsage.set(null),this._contextUsage.set(null),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._isTyping.set(!1),this._state.set(`idle`)}),t.events.on(`context-compacted`,e=>{e?.groupId&&e.groupId!==this._activeGroupId.get()||(this._tokenUsage.set(null),this.loadHistory())}),t.events.on(`token-usage`,e=>{if(!e||e.groupId&&e.groupId!==this._activeGroupId.get())return;let t=wt(this._tokenUsageAccumulator,e);this._tokenUsageAccumulator=t,this._tokenUsage.set(t),this.orchestrator?.refreshContextUsage&&this._db&&this.orchestrator.refreshContextUsage(this._db,this._activeGroupId.get())}),t.events.on(`context-usage`,e=>{this._contextUsage.set(e)}),t.events.on(`ready`,()=>{this._ready.set(!0)}),t.events.on(`task-change`,()=>{this.loadTasks(e)}),t.events.on(`file-change`,()=>{this.loadFiles(e)}),t.events.on(`streaming-start`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(``)}),t.events.on(`streaming-chunk`,({groupId:e,text:t})=>{if(e!==this._activeGroupId.get())return;let n=this._streamingText.get();this._streamingText.set((n||``)+t)}),t.events.on(`streaming-end`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(null)}),t.events.on(`streaming-done`,({groupId:e})=>{this._activeGroupId.get()}),t.events.on(`streaming-error`,({groupId:e})=>{this._activeGroupId.get()}),this._aguiAdapter=new lt(t.events),this._aguiAdapter.start(),typeof window<`u`&&window.addEventListener(`shadow-claw-agui-event`,(e=>{e.detail.groupId===this._activeGroupId.get()&&this._aguiEvent.set(e.detail);let t=e.detail.event;if(t){if(t.type===`STATE_SNAPSHOT`){let n=new Map(this._peerStateByGroup.get());n.set(e.detail.groupId,t.snapshot||{}),this._peerStateByGroup.set(n)}else if(t.type===`STATE_DELTA`){let n=new Map(this._peerStateByGroup.get()),r=pt(n.get(e.detail.groupId)||{},t.delta||[]);n.set(e.detail.groupId,r),this._peerStateByGroup.set(n)}}})),await d(e),ee(),h(),await L();let n=await w(e,b.PAGES_ALLOW_LIST),r=await w(e,b.PAGES_DENY_LIST);n&&this._pagesAllowList.set(yt(String(n))),r&&this._pagesDenyList.set(yt(String(r))),await L();let o=typeof document<`u`&&document.getElementById(`shadow-claw-static-routing`)!==null,s=await w(e,b.PAGES_LIST),l=s==null?[]:this.parsePagesList(s),u=await ct(e,y,l);u.length>0?(this.setPages(u),await this.persistPages(e)):await this.ensureDefaultPage(e),await L(),await this.applySiteConfigDefaults(e),await L(),await this.loadGroups(e);let f=await w(e,b.LAST_ACTIVE_GROUP);f&&f!==this._activeGroupId.get()&&this._activeGroupId.set(f),await L();let p=await w(e,b.LAST_ACTIVE_PAGE);p&&(this._activePage.set(p),this._hadPersistedActivePage=!0);let m=await w(e,b.SIDEBAR_DEFAULT_PAGE);this._sidebarDefaultPage.set(this.normalizeSidebarDefaultPage(m));let g=at(),_=null;if(g&&(_=i(g)),!_){let t=await w(e,b.DEFAULT_PINNED_PAGE);t&&(_=i(t))}_&&this.isPageAllowed(_.path,_.groupId)&&this._defaultPinnedPage.set(_),await L();let v=typeof window<`u`&&window.history?window.history.state:null,te=!!(v?.inFeedScroll||v?.scrollSpy||v?.suppressRouter)||typeof window<`u`&&window.location&&(()=>{let e=window.location.pathname||`/`,t=a();t!==`/`&&e.startsWith(t)&&(e=`/`+e.slice(t.length));let n=e.split(`/`).filter(Boolean);return n.length===0||n.length===1&&n[0]===`index.html`})(),x=!1;if(te&&_&&this.isPageAllowed(_.path,_.groupId)&&(this._activePinnedPage.set(_),x=!0),!x){let t=await w(e,b.LAST_SELECTED_PINNED_PAGE);if(t)try{let e=JSON.parse(t);e&&typeof e.path==`string`&&typeof e.groupId==`string`&&this.isPageAllowed(e.path,e.groupId)&&(this._activePinnedPage.set(e),x=!0)}catch{}}!x&&te&&this.effectiveDefaultPage&&this.isPageAllowed(this.effectiveDefaultPage.path,this.effectiveDefaultPage.groupId)&&(this._activePinnedPage.set(this.effectiveDefaultPage),x=!0),this.orchestrator&&(this._useProxy.set(this.orchestrator.useProxy),this._proxyUrl.set(this.orchestrator.proxyUrl),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess));let[S,C,T]=await Promise.all([w(e,b.SIDEBAR_CHAT_HIDDEN),w(e,b.SIDEBAR_TASKS_HIDDEN),w(e,b.SIDEBAR_FILES_HIDDEN)]),E=re(),D=E?.sidebar?.chatHidden,O=E?.sidebar?.tasksHidden,k=E?.sidebar?.filesHidden,A=S==null?!!D:vt(S),j=C==null?!!O:vt(C),ne=T==null?!!k:vt(T),M=()=>{let t=[];(!A||this.activePage===`chat`)&&t.push(this.loadHistory()),(!j||this.activePage===`tasks`)&&t.push(this.loadTasks(e)),(!ne||this.activePage===`files`)&&t.push(this.loadFiles(e)),Promise.all(t).catch(e=>{console.warn(`Secondary background store loads failed:`,e)})};if(o)typeof window.requestIdleCallback==`function`?window.requestIdleCallback(M,{timeout:2e3}):setTimeout(M,100);else{let t=[];(!A||this.activePage===`chat`)&&t.push(this.loadHistory()),(!j||this.activePage===`tasks`)&&t.push(this.loadTasks(e)),(!ne||this.activePage===`files`)&&t.push(this.loadFiles(e)),await Promise.all(t)}await L(),this._initResolve?.(),this.scheduleBackgroundStaticMainSiteSeeding(e)}async loadFiles(e){let t=this._activeGroupId.get(),n=this._currentPath.get();try{this._storageStatus.set(await u(e));let r=await G(e,t,n);this._files.set(r)}catch(e){console.error(`Failed to load files in store:`,e)}}async loadGroups(e){let t=await I(e);this._groups.set(t)}async loadHistory(){let e=this._activeGroupId.get(),t=await ie(e,200);this._activeGroupId.get()===e&&this._messages.set(t)}async loadTasks(e){let t=this._activeGroupId.get(),n=await A(e),r=n.filter(e=>e.groupId===t);r.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(r);let i=await this.getSubscriberId(e),a=await Ct(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1);if(!a)return;let o=new Set(n.map(e=>e.id)),s=a.filter(e=>!o.has(e.id));if(s.length===0)return;for(let t of s)await B(e,t);let c=[...r,...s];c.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(c)}async navigateBackFolder(e){let t=this._currentPath.get();if(t===`.`)return;let n=t.split(`/`).filter(Boolean);n.pop();let r=n.length===0?`.`:n.join(`/`);await this.setCurrentPath(e,r)}async navigateIntoFolder(e,t){let n=this._currentPath.get(),r=n===`.`?t.replace(/\/$/,``):`${n}/${t.replace(/\/$/,``)}`;try{await this.setCurrentPath(e,r)}catch(t){console.error(`Failed to navigate into folder in store:`,t),Z(`Folder not found: ${r}`,4500),await this.loadFiles(e)}}async newSession(e){await this.orchestrator?.newSession?.(e,this._activeGroupId.get()),await this.loadHistory()}async removePage(t,n,r=this._activeGroupId.get()){let i=this.normalizePagePath(n);if(!i)return;let a=this._pages.get();if(!a.some(e=>e.path===i&&e.groupId===r))return;let o=a.filter(e=>e.path!==i||e.groupId!==r);await Ke(t,r,i);let s=r===`br:main`&&i===`MEMORY.md`;s&&await U(t,!0);let c=s||await H(t);if(o.length===0&&!c){if(await W(t,`br:main`))o.push({groupId:y,path:e.DEFAULT_PAGE_PATH});else return}this.setPages(o);let l=this._defaultPinnedPage.get();l&&l.path===i&&l.groupId===r&&await this.setDefaultPinnedPage(t,null),await this.persistPages(t)}async removeAllPages(e){let t=[...this._pages.get()];for(let n of t)await Ke(e,n.groupId,n.path),n.groupId===`br:main`&&n.path===`MEMORY.md`&&await U(e,!0);this.setPages([]),await this.setDefaultPinnedPage(e,null),await this.setActivePinnedPage(e,null),await this.persistPages(e)}async renameConversation(e,t,n){await ce(e,t,n),await this.loadGroups(e)}async reorderConversations(e,t){await de(e,t),await this.loadGroups(e)}async reorderTasks(e,t,n){let r=await je(e,t,n);await this.loadTasks(e);let i=await this.getSubscriberId(e);for(let t of r)await Q(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync reordered task "${t.id}" to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}async replayTaskSyncOutbox(e){if(!(this._replayingTaskSyncOutbox||this._taskSyncOutbox.length===0)){this._replayingTaskSyncOutbox=!0;try{let t=await this.getSubscriberId(e),n=[];for(let e of this._taskSyncOutbox){let r=this.getTaskServerBaseUrl();(e.type===`upsert`?await Q(e.task,r,t,this.orchestrator?.taskServerEnabled??!1):await $(e.id,r,t,this.orchestrator?.taskServerEnabled??!1))||n.push(e)}this._taskSyncOutbox=this.compactTaskSyncOutbox(n),await this.persistTaskSyncOutbox(e)}finally{this._replayingTaskSyncOutbox=!1}}}async resetToRootFolder(e){await this.setCurrentPath(e,`.`)}async restartCurrentRequest(){return this.orchestrator?.restartCurrentRequest?this.orchestrator.restartCurrentRequest(this._activeGroupId.get()):!1}async restoreTasksFromBackup(e,t){await this.clearAllTasks(e);let n=this._activeGroupId.get();for(let r of t){let t={...r,groupId:n,id:crypto.randomUUID?crypto.randomUUID():`task-${Date.now()}-${Math.random()}`};await this.upsertTask(e,t,{reloadTasks:!1})}await this.loadTasks(e)}async runTask(e,t=!1){let n=this._db;if(t&&n&&(await Ae(e.id,Date.now()),await this.loadTasks(n)),e.type===`tools`&&Array.isArray(e.tools)&&e.tools.length>0){if(this.orchestrator?.agentWorker){let n=e.subagent?`subagent:${c()}`:e.groupId;this.orchestrator.agentWorker.postMessage({type:`execute-task-tools`,payload:{groupId:n,tools:e.tools,isManual:t}})}else console.error(`Agent worker not available to execute tool task.`)}else{if(!e.groupId){console.error(`Task ${e.id} has no groupId - refusing to execute in active conversation to prevent context pollution.`);return}this.orchestrator?.browserChat?.submit(e.prompt,e.groupId,[],void 0,e.freshContext,e.subagent)}}async setActivePage(e,t){this._activePage.set(t),await O(e,b.LAST_ACTIVE_PAGE,t);let n=this.resolveSidebarDefaultPageForActivePage(t);n!==this._sidebarDefaultPage.get()&&(this._sidebarDefaultPage.set(n),await O(e,b.SIDEBAR_DEFAULT_PAGE,n))}async setActivePinnedPage(e,t){t&&!this.isPageAllowed(t.path,t.groupId)&&(t=this.effectiveDefaultPage),this._activePinnedPage.set(t),t?await O(e,b.LAST_SELECTED_PINNED_PAGE,JSON.stringify(t)):await O(e,b.LAST_SELECTED_PINNED_PAGE,null)}async setDefaultPinnedPage(e,t){if(t&&!this.isPageAllowed(t.path,t.groupId))return;let n=this._defaultPinnedPage.get(),r=n&&t&&n.path===t.path&&n.groupId===t.groupId?null:t;this._defaultPinnedPage.set(r),r?await O(e,b.DEFAULT_PINNED_PAGE,JSON.stringify(r)):await O(e,b.DEFAULT_PINNED_PAGE,null)}async reorderPages(e,t){this.setPages(t),await this.persistPages(e)}async setCurrentPath(e,t){let n=t.replace(/^\/+|\/+$/g,``)||`.`,r=this._activeGroupId.get();this._storageStatus.set(await u(e));let i=await G(e,r,n);this._currentPath.set(n),this._files.set(i)}async setGitProxyUrl(e,t){this.orchestrator&&(await xe(this.orchestrator,e,t),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl))}async setProxyUrl(e,t){this.orchestrator&&(await Se(this.orchestrator,e,t),this._proxyUrl.set(this.orchestrator.proxyUrl))}async setUseProxy(e,t){this.orchestrator&&(await Ce(this.orchestrator,e,t),this._useProxy.set(this.orchestrator.useProxy))}async setVMBashFullInternetAccess(e,t){this.orchestrator&&(await we(this.orchestrator,e,t),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess))}async switchConversation(e,t,n){this.setActiveGroup(e,t,n??this._activePage.get()===`chat`),await O(e,b.LAST_ACTIVE_GROUP,t)}async toggleTask(e,t,n){let r={...t,enabled:n};await B(e,r),await this.loadTasks(e),await Q(r,this.getTaskServerBaseUrl(),await this.getSubscriberId(e),this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to update task on server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:r.id,task:r,queuedAt:Date.now()}))}async updateConversationPinnedProvider(e,t,n,r,i){await pe(e,t,n,r,i),await this.loadGroups(e)}async updateConversationProviderRuntimeOverrides(e,t,n){await he(e,t,n),await this.loadGroups(e)}async updateConversationSubagentSettings(e,t,n,r,i,a){await me(e,t,n,r,i,a),await this.loadGroups(e)}async updateConversationToolTags(e,t,n){await le(e,t,n),await this.loadGroups(e)}async upsertTask(e,t,n){let r=n?.reloadTasks!==!1;await B(e,t),r&&await this.loadTasks(e);let i=await this.getSubscriberId(e);await Q(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync task to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}compactTaskSyncOutbox(e){let t=/* @__PURE__ */ new Map;return e.forEach((e,n)=>{t.set(e.id,n)}),e.filter((e,n)=>t.get(e.id)===n)}deriveGroupName(e){return e.startsWith(`tg:`)?`Telegram ${e.slice(3)}`:e.startsWith(`im:`)?`iMessage ${e.slice(3)}`:e.startsWith(`br:`)?e===`br:main`?`Main`:`Browser Conversation`:`Conversation`}getActivityLogSessionStartedAt(e){let t=this._activityLogSessionStartedAtByGroup.get(e);if(t)return t;let n=(/* @__PURE__ */ new Date()).toISOString();return this._activityLogSessionStartedAtByGroup.set(e,n),n}getTaskServerBaseUrl(){return this.orchestrator?.taskServerUrl??`/schedule`}async getSubscriberId(e){if(this._subscriberId)return this._subscriberId;let t=await ke(e);return this._subscriberId=t,t}normalizePagePath(t){let n=t.trim().replace(/^\/+/,``).replace(/\/+/g,`/`);return n===`main/memory.md`?e.DEFAULT_PAGE_PATH:n}normalizeSidebarDefaultPage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:`chat`}parsePagesList(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>{if(typeof e==`string`)return{groupId:y,path:this.normalizePagePath(e)};if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.path!=`string`)return null;let n=typeof t.groupId==`string`&&t.groupId.trim().length>0?t.groupId:y,r=n===`br:main`?this.normalizePagePath(t.path):t.path.trim();return r?{groupId:n,path:r}:null}).filter(e=>!!e).filter((e,t,n)=>{let r=`${e.groupId}\u0000${e.path}`;return t===n.findIndex(e=>`${e.groupId}\u0000${e.path}`===r)}):[]}catch{return[]}}parseTaskSyncOutbox(e){if(!e)return[];try{let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(e=>!!e&&typeof e==`object`).filter(e=>e.type===`upsert`||e.type===`delete`).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({...e,queuedAt:typeof e.queuedAt==`number`?e.queuedAt:Date.now()}));return this.compactTaskSyncOutbox(n)}catch{return[]}}resolveSidebarDefaultPageForActivePage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:this._sidebarDefaultPage.get()}setPages(e){let t=e.filter(e=>this.isPageAllowed(e.path,e.groupId)),n=t.filter(e=>e.path.toLowerCase()===`memory.md`),r=t.filter(e=>e.path.toLowerCase()!==`memory.md`);this._pages.set([...r,...n])}async ensureDefaultPage(t){if(await H(t))return;let n=await W(t,y);await Le(t,y),!(!n||this._pages.get().length>0)&&(this.setPages([{groupId:y,path:e.DEFAULT_PAGE_PATH}]),await this.persistPages(t))}async ensureGroupExists(e,t,n){let r=this._groups.get();if(r.some(e=>e.groupId===t))return;let i=[...r,{groupId:t,name:this.deriveGroupName(t),createdAt:n||Date.now()}];this._groups.set(i);try{await F(e,i)}catch(e){console.error(`Failed to persist new conversation metadata:`,e)}}async forwardActivityLogEntryToServer(e){if(!this._db||!xt(await w(this._db,b.ACTIVITY_LOG_DISK_LOGGING_ENABLED)))return;let t=typeof e.groupId==`string`&&e.groupId?e.groupId:this._activeGroupId.get();if(!t)return;let n=typeof e.message==`string`?e.message.trim():``;if(!n)return;e.level===`info`&&e.label===`Starting`&&this._activityLogSessionStartedAtByGroup.set(t,(/* @__PURE__ */ new Date()).toISOString());let r=this.getActivityLogSessionStartedAt(t);try{await fetch(`/activity-log`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({groupId:t,level:e.level,label:e.label,message:n,timestamp:(/* @__PURE__ */ new Date()).toISOString(),sessionStartedAt:r})})}catch(e){console.warn(`Failed to persist activity log entry to server:`,e)}}scheduleBackgroundStaticMainSiteSeeding(e){if(typeof window>`u`)return;let t=async()=>{try{if(await Ye(e,`br:main`))return;let t=await w(e,b.PAGES_LIST),n=t==null?[]:this.parsePagesList(t),r=await ct(e,y,n,{preferEmbedded:!1});r&&r.length>0&&(this.setPages(r),await this.persistPages(e))}catch(e){console.warn(`Background static main site seeding failed:`,e)}};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(()=>void t(),{timeout:3e3}):setTimeout(()=>void t(),100)}async persistPages(e){await O(e,b.PAGES_LIST,JSON.stringify(this._pages.get()))}async persistTaskSyncOutbox(e){await O(e,b.TASK_SYNC_OUTBOX,JSON.stringify(this._taskSyncOutbox))}async queueTaskSyncOutboxOperation(e,t){this._taskSyncOutbox=this.compactTaskSyncOutbox([...this._taskSyncOutbox,t]),await this.persistTaskSyncOutbox(e)}async applySiteConfigDefaults(e){if(typeof document<`u`)try{let n=re();if(!n||typeof n!=`object`)return;_(n),ee(),h();let r=n.customElements;if((await I(e)).find(e=>e.groupId===`br:main`)?.toolTags&&await le(e,y,void 0),(n.settings?.internetAccess??n.settings?.vm_bash_full_internet_access??n.settings?.fullInternetAccess??n.internetAccess)===!0&&await w(e,b.VM_BASH_FULL_INTERNET_ACCESS)!==`true`&&(await O(e,b.VM_BASH_FULL_INTERNET_ACCESS,`true`),this.orchestrator&&(this.orchestrator.vmBashFullInternetAccess=!0),this._vmBashFullInternetAccess.set(!0)),n.pages&&typeof n.pages==`object`){let{defaultPinnedPage:t}=n.pages;if(t&&typeof t==`string`){let n=i(t);n&&this.isPageAllowed(n.path,n.groupId)&&(this._defaultPinnedPage.set(n),await O(e,b.DEFAULT_PINNED_PAGE,JSON.stringify(n)))}}let a=n.allowedCustomElements||(typeof r==`object`&&!Array.isArray(r)?r.allowedElements:void 0);a!==void 0&&(await w(e,b.ALLOWED_CUSTOM_ELEMENTS)??await O(e,b.ALLOWED_CUSTOM_ELEMENTS,JSON.stringify(a)));let o=n.allowedCustomElementDomains||(typeof r==`object`&&!Array.isArray(r)?r.allowedDomains:void 0);if(o!==void 0&&(await w(e,b.ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS)??await O(e,b.ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS,JSON.stringify(o))),n.sidebar&&typeof n.sidebar==`object`){let{pagesHidden:t,chatHidden:r,tasksHidden:i,filesHidden:a,defaultPage:o}=n.sidebar;if(t!==void 0&&(await w(e,b.SIDEBAR_PAGES_HIDDEN)??await O(e,b.SIDEBAR_PAGES_HIDDEN,String(!!t))),r!==void 0&&(await w(e,b.SIDEBAR_CHAT_HIDDEN)??await O(e,b.SIDEBAR_CHAT_HIDDEN,String(!!r))),i!==void 0&&(await w(e,b.SIDEBAR_TASKS_HIDDEN)??await O(e,b.SIDEBAR_TASKS_HIDDEN,String(!!i))),a!==void 0&&(await w(e,b.SIDEBAR_FILES_HIDDEN)??await O(e,b.SIDEBAR_FILES_HIDDEN,String(!!a))),o&&typeof o==`string`){let t=this.normalizeSidebarDefaultPage(o);this._sidebarDefaultPage.set(t),await w(e,b.SIDEBAR_DEFAULT_PAGE)||await O(e,b.SIDEBAR_DEFAULT_PAGE,o)}}if(n.settings&&typeof n.settings==`object`){let{assistantName:t,defaultProvider:r,provider:i,defaultModel:a,model:o}=n.settings;t&&typeof t==`string`&&(await w(e,b.ASSISTANT_NAME)||await O(e,b.ASSISTANT_NAME,t));let s=r??i;if(typeof s==`string`&&s.trim().length>0&&!await w(e,b.PROVIDER)){let t=s.trim();await O(e,b.PROVIDER,t),this.orchestrator&&(this.orchestrator.provider=t)}let c=a??o;if(typeof c==`string`&&c.trim().length>0&&!await w(e,b.MODEL)){let t=c.trim();await O(e,b.MODEL,t),this.orchestrator&&(this.orchestrator.model=t)}let l=n.settings.internetAccess??n.settings.vm_bash_full_internet_access??n.settings.fullInternetAccess??n.internetAccess;typeof l==`boolean`&&(await w(e,b.VM_BASH_FULL_INTERNET_ACCESS)??(await O(e,b.VM_BASH_FULL_INTERNET_ACCESS,String(l)),this.orchestrator&&(this.orchestrator.vmBashFullInternetAccess=l),this._vmBashFullInternetAccess.set(l)))}let s=(n.settings&&typeof n.settings==`object`?n.settings.defaultToolsProfile:void 0)??n.defaultToolsProfile;if(typeof s==`string`&&s.trim().length>0&&!await w(e,b.ACTIVE_TOOL_PROFILE)){let t=s.trim();if(t.toLowerCase()===`none`)await j.deactivateProfile(e);else{let n=j.profiles.find(e=>e.id.toLowerCase()===t.toLowerCase()||e.name.toLowerCase()===t.toLowerCase());n?await j.activateProfile(e,n.id):console.warn(`Default tools profile "${t}" specified in site-config was not found.`)}}if(n.pages&&typeof n.pages==`object`){let{defaultPinnedPage:t}=n.pages;t&&typeof t==`string`&&(await w(e,b.DEFAULT_PINNED_PAGE)||await O(e,b.DEFAULT_PINNED_PAGE,t))}let c=n.pages?.allowList??n.pages?.allowlist??n.allowList??n.allowlist,l=n.pages?.denyList??n.pages?.denylist??n.denyList??n.denylist;if(Array.isArray(c)&&await w(e,b.PAGES_ALLOW_LIST)==null){let n=t(c.map(String));this._pagesAllowList.set(n),await O(e,b.PAGES_ALLOW_LIST,JSON.stringify(n))}if(Array.isArray(l)&&await w(e,b.PAGES_DENY_LIST)==null){let n=t(l.map(String));this._pagesDenyList.set(n),await O(e,b.PAGES_DENY_LIST,JSON.stringify(n))}await O(e,b.SITE_CONFIG_SEEDED,`true`);let u=this._pages.get(),d=u.filter(e=>this.isPageAllowed(e.path,e.groupId));d.length!==u.length&&(this.setPages(d),await this.persistPages(e));let f=this._activePinnedPage.get();f&&!this.isPageAllowed(f.path,f.groupId)&&await this.setActivePinnedPage(e,this.effectiveDefaultPage);let p=this._defaultPinnedPage.get();if(p&&!this.isPageAllowed(p.path,p.groupId)&&await this.setDefaultPinnedPage(e,null),Array.isArray(n.enabledTools)){let t=n.enabledTools.filter(e=>typeof e==`string`&&e.trim().length>0);await j.setAllEnabled(e,t),await j.setAllDeclarativeEnabled(e,t)}await O(e,b.SITE_CONFIG_SEEDED,`true`)}catch(e){console.warn(`Failed to apply site-config defaults:`,e)}}};const Et=new Tt;export{I as _,dt as a,G as c,B as d,z as f,_e as g,ge as h,_t as i,U as l,R as m,wt as n,Ke as o,ke as p,Et as r,q as s,Tt as t,Ie as u,ie as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-CQaCgswD.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-
|
|
1
|
+
import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-SxK79JmB.js`)},o}catch{try{return o={...await import(`./chunk-SxK79JmB.js`)},o}catch(e){if(t(s))return o={...await import(r(s).href)},o;throw e}}}export{s as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-B3TrWbca.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e,a as t,d as n,f as r,m as i,p as a,r as o,v as s}from"./chunk-
|
|
1
|
+
import{_ as e,a as t,d as n,f as r,m as i,p as a,r as o,v as s}from"./chunk-iB8OoMmW.js";import{t as c}from"./chunk-BChOKoxf.js";import{b as l,m as u,o as d,r as f}from"./chunk-DZyBXNgc.js";import{t as p}from"./chunk-Dl4zTOqg.js";import{t as m}from"./chunk-IVWoxOkm.js";import{t as h}from"./chunk-vVEl6p-f.js";import{t as g}from"./chunk-Ds5-K-9o.js";import{E as _,G as v,K as y,L as b,M as x,N as S,U as C,W as w,X as T,Z as E,i as D,n as O,t as k,x as A}from"./chunk-DhOU6GYX.js";import{l as ee,u as j}from"./chunk-CsZlU6GT.js";import{r as M,t as N}from"./chunk-ByA6Dh5i.js";function P(e,t,n){let r=(t||``).toLowerCase();return r?n&&(r.includes(`api key not configured`)||r.includes(`go to settings to add your api key`)||r.includes(`missing api key`)||r.includes(`no api key`))?`api-key-missing`:n&&(r.includes(`invalid api key`)||r.includes(`incorrect api key`)||r.includes(`authentication failed`)||r.includes(`401`)||r.includes(`403`)||r.includes(`unauthorized`)||r.includes(`forbidden`))?`api-key-invalid`:r.includes(`429`)||r.includes(`rate limit`)||r.includes(`too many requests`)?`rate-limited`:r.includes(`failed to fetch`)||r.includes(`networkerror`)||r.includes(`network error`)||r.includes(`econnrefused`)||r.includes(`connection refused`)||r.includes(`enotfound`)||r.includes(`timed out`)||r.includes(`timeout`)||r.includes(`503`)||r.includes(`502`)?`provider-unreachable`:null:null}async function F(e,t){let n=await s(e,t),r=await p();return await Promise.all(n.map(async t=>{if(t.isFromMe)return{role:`assistant`,content:t.content};let n=`${t.sender}: ${t.content}`,i=t.attachments||[];if(i.length===0)return{role:`user`,content:n};let a=await g(i,async t=>!r||!t.path?null:h(r,e,t.path));return a.length===0?{role:`user`,content:n}:{role:`user`,content:[{type:`text`,text:n},...a]}}))}function I(e){return[e,``,`## COMPACTION TASK`,``,`The conversation context is getting large. Produce a concise summary of the conversation so far.`,`Include key facts, decisions, user preferences, and any important context.`,`The summary will replace the full conversation history to stay within token limits.`,`Be thorough but concise — aim for the essential information only.`].join(`
|
|
2
2
|
`)}function L(){try{return}catch(e){console.warn(`Audio chime failed:`,e)}}function R(e,t){return e.channelRegistry?.getChannelType(t)??`browser`}async function z(e,t,n,i){let a=R(e,n),o={channel:a,content:i,groupId:n,id:c(),isFromMe:!0,isTrigger:!1,sender:e.assistantName,timestamp:Date.now()};if(await r(t,o),a!==`browser`)try{await e.router?.send(n,i)}catch(t){let r=t instanceof Error?t:Error(String(t));console.error(`Failed to deliver intermediate channel response:`,r),e.events.emit(`error`,{groupId:n,error:`Failed to deliver response to ${a}: ${r.message}`})}e.events.emit(`message`,o)}async function B(e,t,n,i){let a={channel:R(e,n),content:i,groupId:n,id:c(),isFromMe:!0,isTrigger:!1,sender:e.assistantName,timestamp:Date.now()};await r(t,a);let o=null;try{await e.router?.send(n,i)}catch(e){o=e instanceof Error?e:Error(String(e)),console.error(`Failed to deliver channel response:`,o)}e.pendingScheduledTasks.has(n)&&(e.pendingScheduledTasks.delete(n),L()),e.events.emit(`message`,a),e.events.emit(`typing`,{groupId:n,typing:!1}),e.setState(`idle`,n),e.router?.setTyping(n,!1),n.startsWith(`peer:`)&&!o&&e.peerjs.completeActiveTask(n)&&e.peerCompletedContexts.add(n),o&&e.events.emit(`error`,{groupId:n,error:`Failed to deliver response to ${R(e,n)}: ${o.message}`})}function V(e){let t=e.toLowerCase();return t.includes(`assets/cache/llamafile`)||t.includes(`missing or invalid 'model' parameter for cli mode`)||t.includes(`failed to list llamafile binaries`)}function H(e){let t=e.toLowerCase();return t.includes(`transformers.js runtime is not installed`)||t.includes(`transformers.js runtime is unavailable`)||t.includes(`no supported transformers.js model loader`)||t.includes(`cannot find package`)&&t.includes(`@huggingface/transformers`)}function U(e,t,n,r){return{accessTokenExpiresAt:e.expiresIn?Date.now()+e.expiresIn*1e3:t.accessTokenExpiresAt,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0,oauthRefreshFailureCount:0,refreshToken:r,scopes:e.scope?e.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):t.scopes,token:n,tokenType:e.tokenType||t.tokenType}}async function W(e,t,n,r,i,a,o){if(!t.refreshToken)return{success:!1,error:`No refresh token available.`};let s=await v(t.refreshToken);if(!s)return{success:!1,error:`Failed to decrypt refresh token.`};let c=t.oauthClientSecret?await v(t.oauthClientSecret):void 0;try{let l=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:t.oauthClientId,clientSecret:c||void 0,providerId:t.oauthProviderId,refreshToken:s,scope:t.scopes,tokenUrl:t.oauthCustomTokenUrl}),headers:{"content-type":`application/json`},method:`POST`});if(!l.ok)return{success:!1,error:`Token refresh request failed.`};let u=await l.json();if(!u.accessToken)return{success:!1,error:`No access token in refresh response.`};let d=await y(u.accessToken);if(!d)return{success:!1,error:`Failed to encrypt access token.`};let p=t.refreshToken;if(u.refreshToken){let e=await y(u.refreshToken);e&&(p=e)}let m=U({accessToken:u.accessToken,expiresIn:u.expiresIn,refreshToken:u.refreshToken,scope:u.scope,tokenType:u.tokenType},t,d,p);if(n===`service`&&a.accountId){let t=r.findIndex(e=>e.id===a.accountId);t!==-1&&(Object.assign(r[t],m),await j(e,f.SERVICE_ACCOUNTS,r))}else if(n===`git`&&a.gitAccountId){let t=i.findIndex(e=>e.id===a.gitAccountId);t!==-1&&(Object.assign(i[t],m),await j(e,f.GIT_ACCOUNTS,i))}return C(o),{success:!0}}catch(e){return{success:!1,error:`Silent refresh failed: ${e instanceof Error?e.message:String(e)}`}}}async function G(e,t,n={}){let r=await w(e,t);if(!r?.credentialRef)return{success:!1,error:`Connection not found.`};let i=r.credentialRef;if(i.authType!==`oauth`)return{success:!1,error:`This connection does not use OAuth authentication.`};let a=await m(e,f.SERVICE_ACCOUNTS),o=Array.isArray(a)?a:[],s=await m(e,f.GIT_ACCOUNTS),c=Array.isArray(s)?s:[],l,d=null;if(i.accountId?(l=o.find(e=>e.id===i.accountId),d=`service`):i.gitAccountId&&(l=c.find(e=>e.id===i.gitAccountId),d=`git`),!l||!d)return{error:`Linked account not found. Edit the connection to re-configure authentication.`,success:!1};let p=l.oauthClientId,h=l.oauthProviderId;if(!h||!p)return{error:`Account is missing OAuth provider or client ID. Edit the account in Settings → Accounts to fix.`,success:!1};if(l.refreshToken){let n=await W(e,l,d,o,c,i,t);if(n.success)return n}if(n.silentOnly)return{error:`Silent token refresh failed. Use Settings → Remote MCP → Reconnect OAuth for full re-authorization.`,success:!1};let g=l.oauthClientSecret?await v(l.oauthClientSecret):void 0,_=l.scopes,b=u[h],x=h===`custom_mcp`,S=x&&l.oauthCustomRedirectUri?l.oauthCustomRedirectUri:b?.redirectUri?b.redirectUri:`${globalThis.location?.origin||``}/oauth/callback`;try{let n=await fetch(`/oauth/authorize`,{body:JSON.stringify({providerId:h,clientId:p,clientSecret:g||void 0,redirectUri:S,scope:_,...x&&l.oauthCustomAuthorizeUrl?{authorizeUrl:l.oauthCustomAuthorizeUrl}:{},...x&&l.oauthCustomTokenUrl?{tokenUrl:l.oauthCustomTokenUrl}:{},...x&&typeof l.oauthCustomUsePkce==`boolean`?{usePkce:l.oauthCustomUsePkce}:{}}),headers:{"content-type":`application/json`},method:`POST`}),r=await n.json();if(!n.ok||!r.state||!r.authorizeUrl)throw Error(r.error||`OAuth authorize failed`);let a=window.open(r.authorizeUrl,`shadowclaw-oauth`,`popup=yes,width=540,height=720`);if(!a||a.closed||a.closed===void 0)throw Error(`OAuth popup was blocked by the browser. Please enable popups for this site and try again.`);let s=r.state,u=`pending`;for(let e=0;e<60;e++){let e=await fetch(`/oauth/session/${encodeURIComponent(s)}`),t=await e.json();if(!e.ok)throw Error(t.error||`OAuth session not found`);if(u=t.status||`pending`,u===`authorized`)break;if(u===`error`)throw Error(t.error||`OAuth authorization failed`);await new Promise(e=>setTimeout(e,1e3))}if(u!==`authorized`)throw Error(`OAuth authorization timed out`);let m=await fetch(`/oauth/token`,{body:JSON.stringify({state:s}),headers:{"content-type":`application/json`},method:`POST`}),v=await m.json();if(!m.ok||!v.accessToken)throw Error(v.error||`OAuth token exchange failed`);let b=await y(v.accessToken);if(!b)throw Error(`Failed to encrypt access token`);let w=l.refreshToken;if(v.refreshToken){let e=await y(v.refreshToken);e&&(w=e)}let T=U({accessToken:v.accessToken,expiresIn:v.expiresIn,refreshToken:v.refreshToken,scope:v.scope,tokenType:v.tokenType},l,b,w);if(d===`service`&&i.accountId){let t=o.findIndex(e=>e.id===i.accountId);t!==-1&&(Object.assign(o[t],T),await j(e,f.SERVICE_ACCOUNTS,o))}else if(d===`git`&&i.gitAccountId){let t=c.findIndex(e=>e.id===i.gitAccountId);t!==-1&&(Object.assign(c[t],T),await j(e,f.GIT_ACCOUNTS,c))}return C(t),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}async function K(e){let t=await p(),n=await m(t,f.PUSH_PROXY_URL);if(!n&&typeof localStorage<`u`)try{n=localStorage.getItem(f.PUSH_PROXY_URL)||void 0}catch{}if(!n)return e;let r=e.startsWith(`/`)?e:`/${e}`;return`${n.endsWith(`/`)?n.slice(0,-1):n}${r}`}async function q(e){return await e.getApiKey()||``}function J(e,t,n=``,r){if(t===`llamafile`){let t=r?.llamafile,i={"x-llamafile-mode":t?.mode===`server`||t?.mode===`cli`?t.mode:e.llamafileMode,"x-llamafile-host":t?.host||e.llamafileHost,"x-llamafile-port":String(t?.port||e.llamafilePort),"x-llamafile-offline":t?.offline??e.llamafileOffline?`true`:`false`};return n&&(i[`x-shadowclaw-request-id`]=n),i}if(t===`bedrock_proxy`){let t=r?.bedrock_proxy,n={};return(t?.region||e.bedrockRegionFallback)&&(n[`x-bedrock-region`]=t?.region||e.bedrockRegionFallback),(t?.profile||e.bedrockProfileFallback)&&(n[`x-bedrock-profile`]=t?.profile||e.bedrockProfileFallback),n[`x-bedrock-auth-mode`]=t?.authMode||e.bedrockAuthMode,n}return{}}function Y(e,t){let n=e.transformersProgressPollers.get(t);typeof n==`number`&&(clearInterval(n),e.transformersProgressPollers.delete(t))}function te(e,t){let n=e.roomManager.createRoom(t);return e.events.emit(`rooms-changed`,e.roomManager.list()),n}function ne(e,t,n){return e.roomManager.invite(t,n)}function re(e,t){e.roomManager.leaveRoom(t),e.events.emit(`rooms-changed`,e.roomManager.list())}function X(e,t={}){let n={...t};try{let t=typeof location<`u`?location.origin:`http://127.0.0.1:8888`,r=new URL(e,t).hostname.toLowerCase();r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`?n.targetAddressSpace=`loopback`:(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r)||!r.includes(`.`)||r.endsWith(`.local`)||r.endsWith(`.lan`)||r.endsWith(`.home`)||r.endsWith(`.internal`))&&(n.targetAddressSpace=`private`)}catch{}return n}async function Z(e,t,n){if(!e.taskServerEnabled)return!0;if(!t.schedule)return Q(e,t.id,n);try{let r=`${e.taskServerUrl.replace(/\/$/,``)}/tasks`,i=await fetch(r,X(r,{body:JSON.stringify({...t,pushNotifications:!!t.pushNotifications,...n?{subscriberId:n}:{}}),headers:{"Content-Type":`application/json`},method:`POST`}));return i.ok?!0:(console.error(`Server rejected task sync:`,i.status),!1)}catch(e){return console.error(`Failed to sync task to server:`,e),!1}finally{ie(e)}}async function Q(e,t,n){if(!e.taskServerEnabled)return!0;try{let r=e.taskServerUrl.replace(/\/$/,``),i=n?`?subscriberId=${encodeURIComponent(n)}`:``,a=`${r}/tasks/${encodeURIComponent(t)}${i}`,o=await fetch(a,X(a,{method:`DELETE`}));return o.ok?!0:(console.error(`Server rejected task deletion:`,o.status),!1)}catch(e){return console.error(`Failed to delete task from server:`,e),!1}}async function ie(e){if(!e.pushSubscriptionWarned&&typeof navigator<`u`&&navigator.serviceWorker)try{await(await navigator.serviceWorker.ready).pushManager.getSubscription()||(e.pushSubscriptionWarned=!0,t(`Push notifications are not enabled. Scheduled tasks will only run while the app is open. Enable push in Settings for background execution.`,{type:`warning`}))}catch{}}const $=/* @__PURE__ */ new Map;$.set(`response`,async(e,t,n)=>{let{groupId:r,text:i}=n;Y(e,r),e.clearProviderRequest(r),e.inFlightTriggerByGroup.delete(r),e.inFlightEffectiveProviderByGroup.delete(r),await B(e,t,r,i)}),$.set(`streaming-start`,(e,t,n)=>{let{groupId:r}=n;e.setState(`responding`,r),e.events.emit(`streaming-start`,{groupId:r})}),$.set(`streaming-chunk`,(e,t,n)=>{let{groupId:r,text:i}=n;e.events.emit(`streaming-chunk`,{groupId:r,text:i})}),$.set(`intermediate-response`,async(e,t,n)=>{let{groupId:r,text:i}=n;await z(e,t,r,i)}),$.set(`streaming-end`,(e,t,n)=>{let{groupId:r}=n;e.events.emit(`streaming-end`,{groupId:r}),e.setState(`thinking`,r)}),$.set(`streaming-done`,(e,t,n)=>{let{groupId:r}=n;e.events.emit(`streaming-done`,{groupId:r})}),$.set(`streaming-error`,(e,t,n)=>{let{groupId:r,error:i}=n;e.events.emit(`streaming-error`,{groupId:r,error:i})}),$.set(`run-task`,(e,t,n)=>{let{task:r}=n;o.runTask(r,!0)}),$.set(`task-created`,async(e,r,i)=>{let{task:o}=i;if(o.groupId&&e.schedulerTriggeredGroups.has(o.groupId))t(`⚠️ Task creation blocked — scheduled tasks cannot create new tasks (recursion prevention).`,{type:`warning`,duration:8e3});else try{if(!await Z(e,o,await a(r))){t(`Failed to sync task to server — task was not saved.`,{type:`error`});return}await n(r,o),e.events.emit(`task-change`,{type:`created`,task:o})}catch(e){console.error(`Failed to save task from agent:`,e),t(`Failed to save task.`,{type:`error`})}}),$.set(`task-list-request`,async(e,t,n)=>{let{groupId:r}=n,i=(await M(t)).filter(e=>e.groupId===r);e.agentWorker?.postMessage({type:`task-list-response`,payload:{groupId:r,tasks:i}})}),$.set(`update-task`,async(e,r,i)=>{let{task:o}=i;if(o.groupId&&e.schedulerTriggeredGroups.has(o.groupId))t(`⚠️ Task update blocked — scheduled tasks cannot modify tasks (recursion prevention).`,{type:`warning`,duration:8e3});else try{if(!await Z(e,o,await a(r))){t(`Failed to sync task update to server — task was not updated.`,{type:`error`});return}await n(r,o),e.events.emit(`task-change`,{type:`updated`,task:o})}catch(e){console.error(`Failed to update task from agent:`,e),t(`Failed to update task.`,{type:`error`})}}),$.set(`delete-task`,async(e,n,r)=>{let{id:o,groupId:s}=r;if(s&&e.schedulerTriggeredGroups.has(s))t(`⚠️ Task deletion blocked — scheduled tasks cannot delete tasks (recursion prevention).`,{type:`warning`,duration:8e3});else try{if(!await Q(e,o,await a(n))){t(`Failed to delete task from server — task kept in view.`,{type:`error`});return}await i(n,o),e.events.emit(`task-change`,{type:`deleted`,id:o})}catch(e){console.error(`Failed to delete task from agent:`,e)}}),$.set(`room-action`,(e,t,n)=>{let r=n?.action;try{r===`create`?te(e,String(n.name||``).trim()):r===`invite`?ne(e,String(n.roomId),String(n.peerId)):r===`leave`&&re(e,String(n.roomId))}catch(e){console.error(`Failed to handle room action from agent:`,e)}}),$.set(`error`,async(e,t,n)=>{let{groupId:r,error:i}=n;Y(e,r),e.clearProviderRequest(r),e.inFlightTriggerByGroup.delete(r);let a=i,o=!1,s=e.inFlightEffectiveProviderByGroup.get(r);e.inFlightEffectiveProviderByGroup.delete(r);let c=s?.providerId??e.provider,l=s?.providerConfig??e.providerConfig;if((i.includes(`413`)||i.includes(`tokens_limit_reached`)||i.includes(`context_length_exceeded`)||i.includes(`too many tokens`))&&(a+=`
|
|
3
3
|
|
|
4
4
|
⚠️ This model has a small context window. Try clicking **'Compact'** in the header to summarize the conversation and reduce token usage.`),c===`llamafile`&&V(i)&&(o=!0,e.events.emit(`provider-help`,{providerId:`llamafile`,reason:i})),c===`transformers_js_local`&&H(i)&&(o=!0,e.events.emit(`provider-help`,{providerId:`transformers_js_local`,reason:i})),!o){let t=P(c,i,l?.requiresApiKey!==!1);t&&e.events.emit(`provider-help`,{providerId:c,reason:i,helpType:t})}await B(e,t,r,`⚠️ Error: ${a}`)}),$.set(`typing`,(e,t,n)=>{let{groupId:r}=n;e.router?.setTyping(r,!0),e.events.emit(`typing`,{groupId:r,typing:!0})}),$.set(`tool-activity`,(e,t,n)=>{e.events.emit(`tool-activity`,n),(n.tool===`write_file`&&n.status===`done`||n.tool===`bash`&&n.status===`done`)&&e.events.emit(`file-change`,{groupId:n.groupId})}),$.set(`model-download-progress`,(e,t,n)=>{e.events.emit(`model-download-progress`,n)}),$.set(`thinking-log`,(e,t,n)=>{e.events.emit(`thinking-log`,n)}),$.set(`compact-done`,async(e,t,n)=>{e.clearProviderRequest(n.groupId),await e.handleCompactDone(t,n.groupId,n.summary)}),$.set(`token-usage`,(e,t,n)=>{e.events.emit(`token-usage`,n)}),$.set(`clear-chat`,async(e,t,n)=>{let{groupId:r}=n;try{await e.newSession(t,r)}catch(e){console.error(`Failed to clear chat from agent:`,e)}}),$.set(`show-toast`,(e,n,r)=>{let{message:i,type:a,duration:o}=r;t(i,{type:a||`info`,duration:o})}),$.set(`mcp-reauth-required`,async(e,n,r)=>{let{connectionId:i}=r,a=await w(n,i),o=a?.label||i;if(a?.autoReconnectOAuth){t(`🔑 MCP connection "${o}" returned 401 — auto-reconnecting OAuth…`,{type:`info`,duration:5e3});let r=await G(n,i,{silentOnly:!0});r.success?t(`🔑 OAuth reconnected for "${o}"`,{type:`success`,duration:5e3}):t(`🔑 OAuth auto-reconnect failed for "${o}": ${r.error}`,{action:{label:`Reconnect Now`,onClick:async()=>{let e=await G(n,i);e.success?t(`🔑 OAuth reconnected for "${o}"`,{type:`success`,duration:5e3}):t(`🔑 OAuth reconnect failed for "${o}": ${e.error}`,{type:`error`,duration:1e4})}},duration:15e3,type:`error`}),e.agentWorker?.postMessage({payload:{connectionId:i,success:r.success},type:`mcp-reauth-result`})}else t(`🔑 MCP connection "${o}" returned 401 — OAuth re-authentication required. Go to Settings → Remote MCP to reconnect.`,{type:`warning`,duration:1e4}),e.agentWorker?.postMessage({payload:{connectionId:i,success:!1},type:`mcp-reauth-result`});e.events.emit(`mcp-reauth-required`,{connectionId:i,label:o})}),$.set(`manage-tools`,async(e,t,n)=>{let{action:r,toolNames:i,profileId:a}=n;if(r===`activate_profile`&&a)await N.activateProfile(t,a);else if((r===`enable`||r===`disable`)&&i){let e=r===`enable`;for(let n of i)await N.setToolEnabled(t,n,e)}let o=n.groupId||`br:main`;e.agentWorker?.postMessage({type:`update-tools`,payload:{enabledTools:N.enabledTools,groupId:o,systemPromptOverride:N.systemPromptOverride}})}),$.set(`send-notification`,(e,n,r)=>{let{title:i,body:a,groupId:o}=r;o&&e.schedulerTriggeredGroups.has(o)?t(`⚠️ Notification blocked — scheduled tasks triggered via push cannot send push notifications (recursion prevention).`,{type:`warning`,duration:8e3}):K(`/push/broadcast`).then(e=>{fetch(e,{body:JSON.stringify({title:i,body:a}),headers:{"Content-Type":`application/json`},method:`POST`}).catch(e=>console.error(`Failed to broadcast push notification:`,e))})}),$.set(`vm-status`,(e,t,n)=>{e.vmStatus={...n},e.events.emit(`vm-status`,e.vmStatus)}),$.set(`vm-terminal-opened`,(e,t,n)=>{e.events.emit(`vm-terminal-opened`,n)}),$.set(`vm-terminal-output`,(e,t,n)=>{e.events.emit(`vm-terminal-output`,n)}),$.set(`vm-terminal-closed`,(e,t,n)=>{e.events.emit(`vm-terminal-closed`,n)}),$.set(`vm-workspace-synced`,(e,t,n)=>{e.events.emit(`file-change`,{groupId:n?.groupId})}),$.set(`vm-terminal-error`,(e,t,n)=>{e.events.emit(`vm-terminal-error`,n)}),$.set(`open-file`,(e,t,n)=>{e.events.emit(`open-file`,n)}),$.set(`send-file`,(e,n,r)=>{let{groupId:i,path:a}=r;(async()=>{e.router?.setTyping(i,!0);try{await e.router?.send(i,``,[{path:a,fileName:a.split(`/`).pop()||a,mimeType:`application/octet-stream`,size:0}])}catch(e){let n=e instanceof Error?e.message:String(e);console.error(`send-file: delivery failed:`,e),t(`Failed to send file to peer: ${n}`,{type:`error`,duration:6e3})}finally{e.router?.setTyping(i,!1)}})()}),$.set(`render-component`,(e,t,n)=>{let{groupId:r,envelope:i}=n;if(e.events.emit(`a2ui-surface`,{groupId:r,envelope:i}),r.startsWith(`peer:`)){let t=e.router?.findChannel(r);t&&`sendA2UI`in t&&t.sendA2UI(r,i).catch(e=>console.error(`render-component: peer delivery failed:`,e))}r.startsWith(`room:`)&&e.roomManager.broadcastA2UI(b(r),i)}),$.set(`request-native-ai-task`,(e,t,n)=>{let{id:r,groupId:i,taskType:a,input:o}=n;(async()=>{try{let n=t=>{e.events.emit(`model-download-progress`,{groupId:i,status:t.status,progress:t.progress,message:t.message})},s=i?e.inFlightEffectiveProviderByGroup?.get(i):void 0,c=s?.providerId||e.provider,l=s?.model||s?.providerConfig?.defaultModel||e.model,u=await q(e)||``,d=J(e,c,``),f=await A({taskType:a,input:o,groupId:i,db:t,providerId:c,model:l,apiKey:u,headers:d,maxTokens:e.maxTokens,onProgress:n});i&&e.events.emit(`model-download-progress`,{groupId:i,status:`done`,progress:1});let p=globalThis.pendingNativeAiResolvers;p&&p[r]&&(p[r].resolve(f),delete p[r]),e.agentWorker?.postMessage({type:`native-ai-task-response`,payload:{id:r,response:f}})}catch(t){i&&e.events.emit(`model-download-progress`,{groupId:i,status:`error`,progress:null,message:t?.message||String(t)});let n=globalThis.pendingNativeAiResolvers;n&&n[r]&&(n[r].reject(t instanceof Error?t:Error(String(t))),delete n[r]),e.agentWorker?.postMessage({type:`native-ai-task-response`,payload:{id:r,error:t?.message||String(t)}})}})()}),$.set(`ask-user`,(e,t,n)=>{e.events.emit(`ask-user`,n)});async function ae(e,t,n){let r=$.get(n?.type);r&&await r(e,t,n?.payload,n)}async function oe(t,n,r=d){let i=(await e(n)).find(e=>e.groupId===r),a=i?.pinnedProvider??t.provider,s=i?.pinnedModel??(i?.pinnedProvider?l(i.pinnedProvider)?.defaultModel??t.model:t.model),c=(l(a)??t.providerConfig)?.requiresApiKey!==!1,u=a===t.provider?await q(t):await t.getApiKeyForSpecificProvider(n,a);if(c&&!u){let e=`API key not configured. Cannot compact context.`;t.events.emit(`provider-help`,{providerId:a,reason:e,helpType:P(a,e,c)}),t.events.emit(`error`,{groupId:r,error:e});return}if(t.state!==`idle`){t.events.emit(`error`,{groupId:r,error:`Cannot compact while processing. Wait for the current response to finish.`});return}t.setState(`thinking`,r),t.events.emit(`typing`,{groupId:r,typing:!0});let p=``;try{p=await ee(n,r,`MEMORY.md`)}catch{}let h=N.enabledTools,g=o.getPeerState(r)||void 0,v=k(t.assistantName,p,h,N.systemPromptOverride,g,void 0,{groupId:r}),y=s;a===`prompt_api`&&(s===`browser-built-in`||!s)&&!D()&&(y=await m(n,f.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let b=_(y),C=E(v),w=await F(r,200),A=T(w,{contextLimit:b,systemPromptTokens:C,maxOutputTokens:4096,skimTop:t.contextCompressionEnabled}).messages;if(await m(n,f.COMPACTION_ENGINE_PREFERENCE)===`builtin_task_api`)try{let e=A.map(e=>`${e.role.toUpperCase()}: ${typeof e.content==`string`?e.content:JSON.stringify(e.content)}`).join(`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as e,n as t,o as n,r}from"./chunk-YrgA1KKk.js";import{n as i}from"./chunk-BJhHc8Uw.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-
|
|
1
|
+
import{a as e,n as t,o as n,r}from"./chunk-YrgA1KKk.js";import{n as i}from"./chunk-BJhHc8Uw.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-DDvuLVfW.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>s[`send-message`](e,t),"send-file":async(n,s)=>{let{fileName:l,data:u,prompt:d,groupId:f}=n||{};if(!l||typeof l!=`string`||!u)throw Error(`Missing fileName or data in send-file args`);let p=i(l);await a.promises.mkdir(r,{recursive:!0});let m=o.join(r,p),h=c.isBuffer(u)?u:c.from(u,`base64`);await a.promises.writeFile(m,h);let g=s?.remotePeerId||`remote`,_=f||`peer:${g}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${p}" (${h.length} bytes) to ${m}`);let v;if(d&&typeof d==`string`&&d.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-DDvuLVfW.js`);return n(e,t)}))(`[Attached file: ${p} (${h.length} bytes) saved at ${m}]\n\n${d.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:_,quiet:!e.verbose,stream:!1});t?.success&&(v=t.response)}return{success:!0,fileName:p,path:m,size:h.length,reply:v,text:v}},"transfer-file":async(e,t)=>s[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-bKcol4wy.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return s}function f(t,n){return new Promise((r,i)=>{let s=e(n);try{a.unlinkSync(s)}catch{}try{a.mkdirSync(o.dirname(s),{recursive:!0})}catch{}let c=l.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`)n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));else if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}))}else if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(/* @__PURE__ */ Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}})}else n.writeHead(404),n.end()});c.listen(s,()=>{console.log(`[webrtc-listen] IPC socket: ${s}`),r(c)}),c.on(`error`,i)})}async function p(e={}){let i=e.host||s.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(s.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,c=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((s.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),l=!!(e.insecure===!1||[`0`,`false`,`no`].includes((s.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),u=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],p=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${p}`),console.log(`Signaling server : ${c?`wss`:`ws`}://${i}:${a}${o}`),c&&!l&&console.log(`TLS verification : disabled (self-signed cert allowed)`),u.length>0?console.log(`Trusted peers : ${u.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${p}"`),console.log(``);let m={...d({...e,peerId:p}),...e.handlers||{}},h=new t({host:i,port:a,path:o,secure:c,rejectUnauthorized:l,trustedPeerIds:u,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:m}),g=/* @__PURE__ */ new Map;h._pendingIpc=g;let _=h._setupConnection.bind(h);h._setupConnection=function(e,t){_(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(t&&typeof t==`object`&&t.type===`command:result`){let e=t.payload||{},n=g.get(e.commandId);n&&(g.delete(e.commandId),n(e))}})};let v=t=>{if(console.log(`
|
|
2
2
|
[webrtc-listen] Shutting down…`),r(e.cacheDir),t)try{t.close()}catch{}h.close(),s.exit(0)};try{await h.start();let t=await f(h,e.cacheDir);s.on(`SIGINT`,()=>v(t)),s.on(`SIGTERM`,()=>v(t)),console.log(`[webrtc-listen] Ready. Run commands with:
|
|
3
3
|
node bin/cli.mjs send --transport webrtc --client <browser-peer-id> "message"`),await new Promise(()=>{})}catch(t){r(e.cacheDir),console.error(`Error starting WebRTC listener: ${t.message}`),s.exitCode=1}}export{p as n,f as r,d as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e,g as t,h as n,i as r,l as i,o as a,r as o,s,u as c}from"./chunk-
|
|
1
|
+
import{c as e,g as t,h as n,i as r,l as i,o as a,r as o,s,u as c}from"./chunk-iB8OoMmW.js";import{n as l,s as u,t as d}from"./chunk-B409KI5N.js";import{t as f}from"./chunk-BChOKoxf.js";import{n as p,r as m,t as h}from"./chunk-Cpdoq2Nw.js";import{c as g,f as _,l as v,m as y,n as ee,p as te,t as ne,u as re}from"./chunk-DKAtC-O0.js";import{C as ie,S as ae,b as oe,c as se,f as ce,n as le,o as ue,p as de,r as b,u as fe,v as pe,x,y as me}from"./chunk-DZyBXNgc.js";import{t as he}from"./chunk-Dl4zTOqg.js";import{t as S}from"./chunk-IVWoxOkm.js";import{a as ge,c as _e,n as ve,o as ye,r as be,s as xe,t as Se}from"./chunk-BVLsV89M.js";import{t as Ce}from"./chunk-Byi0_1tu.js";import{a as we,i as Te,r as Ee,t as De}from"./chunk-vVEl6p-f.js";import{a as Oe,c as ke,l as Ae,s as C,u as je}from"./chunk-CsZlU6GT.js";import{n as Me,r as Ne,t as Pe}from"./chunk-ByA6Dh5i.js";import{a as Fe,i as Ie,t as Le}from"./chunk-CuwzD5GU.js";import{Bash as Re,InMemoryFs as ze}from"just-bash";function Be(e){if(typeof e.size==`number`&&e.size>0)return e.size;if(typeof e.data==`string`&&e.data.length>0){let t=e.data.endsWith(`==`)?2:+!!e.data.endsWith(`=`);return Math.max(0,Math.floor(e.data.length*3/4)-t)}return 0}function Ve(e){return e?e.startsWith(`text/`)||e===`json`||e===`xml`||e===`javascript`||e===`csv`||e===`markdown`:!1}function He(e){let t=Be(e);if(t===0)return 0;switch(e.mediaType){case`image`:return 1500;case`audio`:return 1500;case`video`:return 2500;default:return Ve(e.mimeType)?Math.ceil(t/4):Math.ceil(t/16)}}function w(e){return e?Math.ceil(e.length/4):0}function Ue(e){let t=0;if(typeof e.content==`string`)t=w(e.content);else if(Array.isArray(e.content))for(let n of e.content)if(n.type===`text`&&n.text)t+=w(n.text);else if(n.type===`tool_use`)t+=w(n.name),t+=w(JSON.stringify(n.input));else if(n.type===`tool_result`){let e=n.content;t+=w(typeof e==`string`?e:JSON.stringify(e))}else n.type===`attachment`&&(t+=w(n.fileName),t+=w(n.mimeType),t+=w(n.path),t+=He(n));return t+4}function We(e,t){if(!e)return``;if(e.length<=t)return e;let n=e.slice(0,t).lastIndexOf(`
|
|
2
2
|
`),r=n>t*.5?n:t;return`${e.slice(0,r)}\n[...truncated ${e.length-r} chars]`}function Ge(e,t){let{contextLimit:n,systemPromptTokens:r,maxOutputTokens:i,skimTop:a=!1}=t;if(e.length===0)return{messages:[],estimatedTokens:0,truncatedCount:0,contextLimit:n,usagePercent:0};let o=Math.max(0,n-r-i),s=Math.min(25e3,Math.max(1e3,Math.floor(o*.6*4))),c=e.map(e=>Ke(e,s)),l=0,u=c.length,d=null,f=0;if(a&&c.length>0){let e=c[0];(e.role===`user`||e.role===`system`)&&(f=Ue(e),f<=o&&(d=e))}let p=o-f;for(let e=c.length-1;e>=+!!d;e--){let t=Ue(c[e]),n=c[e],r=!1;if(n.role===`user`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_result`)){let n=c[e-1];n&&n.role===`assistant`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_use`)&&(r=!0,t+=Ue(n))}if(l+t>p&&e<c.length-1)break;l+=t,r?(u=e-1,e--):u=e}let m=c.slice(u),h=u;d&&u>0&&(m=[d,...m],h=Math.max(0,u-1));let g=l+f,_=g+r,v=n>0?Math.round(_/n*100*10)/10:0;return{messages:m,estimatedTokens:g,truncatedCount:h,contextLimit:n,usagePercent:v}}function Ke(e,t){if(!Array.isArray(e.content))return e;let n=e.content.map(e=>e.type===`tool_result`&&typeof e.content==`string`?{...e,content:We(e.content,t)}:e);return{...e,content:n}}const qe=[/<\|start_header_id\|>\s*(?:system|user|assistant|tool)\s*<\|end_header_id\|>/gi,/<\|(?:begin_of_text|end_of_text|eot_id|im_start|im_end|end_of_message)\|>/gi,/<\|(?:startofturn|endofturn|start_of_turn|end_of_turn)\|>/gi,/<\|(?:image|audio|video|tool_call|tool_response|tool_result|function_call)\|>|<\|\/function_call\|>/gi,/<|(?:system|user|assistant|im_start|im_end)|>/g,/\[\s*INST\s*\]|\[\s*\/INST\s*\]|<<\s*SYS\s*>>|<<\s*\/SYS\s*>>/gi,/<\/?s>|<\/?bos>|<\/?eos>|<\|(?:bos|eos|pad|unk)\|>/gi,/<\|(?:START_OF_TURN_TOKEN|END_OF_TURN_TOKEN|CHATBOT_TOKEN|USER_TOKEN|SYSTEM_TOKEN)\|>/gi,/<\|(?:system|user|assistant|end|endoftext|placeholder\d*)\|>/gi,/<|(?:begin▁of▁sentence|end▁of▁sentence)|>/g,/<\|start\|>\s*(?:system|user|assistant|tool)\s*<\|message\|>/gi];function Je(e){for(let t of qe)if(t.test(e))return!0;return!1}function Ye(e){let t=String(e||``),n=t;for(let e of qe)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`)),t}function T(e,t){let n=Ye(e);return n!==e&&Je(e)&&console.info(`[ShadowClaw] Chat-template control token(s) detected and stripped from "${t}" output. The provider or model may not be applying its chat template correctly. Original length: ${e.length}, cleaned length: ${n.length}.`),n}function E(e,t,n,r){return{type:`thinking-log`,payload:{groupId:e,level:t,timestamp:Date.now(),label:n,message:r||``}}}function Xe(e,t,n){return{type:`tool-activity`,payload:{groupId:e,tool:t,status:n}}}const Ze=`keys`,Qe=`api-key-encryption`;function $e(){return new Promise((e,t)=>{let n=indexedDB.open(`shadowclaw-keystore`,1);n.onupgradeneeded=()=>{n.result.createObjectStore(Ze)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function et(){let e=await $e();if(!e)return null;let t=await new Promise((t,n)=>{let r=e.transaction(Ze,`readonly`).objectStore(Ze).get(Qe);r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)});if(t)return e.close(),t;let n=await crypto.subtle.generateKey({name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`]);try{await new Promise((t,r)=>{let i=e.transaction(Ze,`readwrite`);i.objectStore(Ze).put(n,Qe),i.oncomplete=()=>t(),i.onerror=()=>r(i.error)})}finally{e.close()}return n}async function tt(e){let t=await et();if(!t)return null;let n=crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(12)),r=await crypto.subtle.encrypt({name:`AES-GCM`,iv:n},t,new TextEncoder().encode(e)),i=new Uint8Array(n.length+new Uint8Array(r).length);return i.set(n),i.set(new Uint8Array(r),n.length),btoa(String.fromCharCode(...i))}async function D(e){let t=await et();if(!t)return null;let n=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),r=n.slice(0,12),i=n.slice(12),a=await crypto.subtle.decrypt({name:`AES-GCM`,iv:r},t,i);return new TextDecoder().decode(a)}function nt(e){return!e||e.authMode===`token`||e.authMode===`pat`?`token`:e.authMode===`basic`?`basic`:e.authMode===`oauth`||e.oauthProviderId||e.oauthClientId||e.oauthClientSecret||e.refreshToken||e.accessTokenExpiresAt||e.tokenType||e.oauthReauthRequired?`oauth`:`token`}function rt(e){return nt(e)}function it(e,t){return rt(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function at(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await D(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await D(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await je(e,b.SERVICE_ACCOUNTS,t))},o=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await a(r),r};try{let e=await fetch(`/oauth/refresh`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:n.oauthProviderId,clientId:n.oauthClientId,clientSecret:i,refreshToken:r,scope:n.scopes,tokenUrl:n.oauthCustomTokenUrl})});if(!e.ok)return o();let t=await e.json();if(!t.accessToken)return o();let s=await tt(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await tt(t.refreshToken);e&&(c=e)}let l={...n,token:s,refreshToken:c,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await a(l),l}catch{return o()}}function ot(e,t){if(e.oauthProviderId){let t=pe(e.oauthProviderId);if(t)return t}let n=[e.service,e.hostPattern,t].filter(e=>!!e).map(e=>e.toLowerCase());for(let e of Object.values(de))if([e.providerId,...e.aliases||[]].map(e=>e.toLowerCase()).some(e=>n.some(t=>t.includes(e))))return e;return null}function st(e,t){let n=rt(e),r=ot(e,t);if(r){let e;return e=n===`oauth`?r.tokenAuth.oauth:n===`basic`&&r.tokenAuth.basic?r.tokenAuth.basic:r.tokenAuth.token,{headerName:e.headerName,headerPrefix:e.headerPrefix||``}}return{headerName:`Authorization`,headerPrefix:n===`basic`?`Basic `:`Bearer `}}function ct(e,t){let n=[],r=-1,i=t.toLowerCase();for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();i.includes(e)&&(e.length>r?(r=e.length,n.length=0,n.push(t)):e.length===r&&n.push(t))}return n}function lt(e,t){return e.length?t&&e.find(e=>rt(e)===t)||e[0]:void 0}async function ut(e,t,n={}){let r=await S(e,b.SERVICE_ACCOUNTS),i=Array.isArray(r)?r:[];if(i.length===0)return;let a;if(n.accountId&&(a=i.find(e=>e.id===n.accountId)),!a&&t){let e=ct(i,t);a=n.authMode?lt(e,n.authMode):lt(e,e[0]?ot(e[0],t)?.defaultMode:void 0)}if(!a){let t=await S(e,b.SERVICE_DEFAULT_ACCOUNT);t&&(a=i.find(e=>e.id===t))}if(!a&&n.authMode&&(a=lt(i,n.authMode)),a||=i[0],!a)return;if(it(a,n)&&(a=await at(e,i,a)),rt(a)===`oauth`&&a.oauthReauthRequired)return{token:``,service:a.service,hostPattern:a.hostPattern,headerName:`Authorization`,headerValue:``,accountId:a.id,authMode:`oauth`,reauthRequired:!0};let o=``;a.token&&(o=await D(a.token)??``);let{headerName:s,headerPrefix:c}=st(a,t),l=o;rt(a)===`basic`&&a.basicUsername&&(l=btoa(`${a.basicUsername}:${o}`));let u=c?`${c}${l}`:l;return{token:o,service:a.service,hostPattern:a.hostPattern,headerName:s,headerValue:u,accountId:a.id,authMode:rt(a)}}function dt(e){return nt(e)}function ft(e){switch(e){case`azure-devops`:return`azure_devops`;default:return e}}function pt(e){if(!e)return`generic`;let t=e.toLowerCase();return t.includes(`github`)?`github`:t.includes(`dev.azure.com`)||t.includes(`visualstudio.com`)?`azure-devops`:t.includes(`gitlab`)?`gitlab`:`generic`}function mt(e){if(e.reauthRequired)return{};let t=e.provider||pt(e.hostPattern||``),n=ft(t),r=e.authMode||`token`;if(e.token&&n===`azure_devops`&&ae(n,r,`git_remote`)?.headerPrefix===`Basic `)return{Authorization:`Basic ${btoa(`:`+e.token)}`};if(t===`azure-devops`&&e.username&&e.password)return{Authorization:`Basic ${btoa(e.username+`:`+e.password)}`};if(e.token){let t=ae(n,r,`git_remote`);return t?.headerName?{[t.headerName]:`${t.headerPrefix||``}${e.token}`}:{Authorization:`Bearer ${e.token}`}}return{}}function ht(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return n?t.hostname+n:t.hostname}catch{return}}function gt(e,t){let n=t.toLowerCase(),r=[],i=-1;for(let t of e){if(!t.hostPattern)continue;let e=t.hostPattern.toLowerCase();n.includes(e)&&(e.length>i?(i=e.length,r.length=0,r.push(t)):e.length===i&&r.push(t))}return r}function _t(e,t){if(!e.length)return;if(!t)return e[0];let n=e.find(e=>dt(e)===t);if(n)return n;if(t===`token`){let t=e.find(e=>dt(e)===`token`&&!e.authMode);if(t)return t}return e[0]}async function vt(e){if(e)return await D(e)??void 0}function yt(e,t){return dt(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function bt(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await vt(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await vt(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await je(e,b.GIT_ACCOUNTS,t))},o=async()=>{let e=(n.oauthRefreshFailureCount||0)+1,t=e>=3,r={...n,oauthRefreshFailureCount:e,oauthReauthRequired:t,oauthReauthRequiredAt:t?n.oauthReauthRequiredAt||Date.now():void 0};return await a(r),r};try{let e=await fetch(`/oauth/refresh`,{body:JSON.stringify({clientId:n.oauthClientId,clientSecret:i,providerId:n.oauthProviderId,refreshToken:r,scope:n.scopes}),headers:{"content-type":`application/json`},method:`POST`});if(!e.ok)return o();let t=await e.json();if(!t.accessToken)return o();let s=await tt(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await tt(t.refreshToken);e&&(c=e)}let l={...n,token:s,refreshToken:c,accessTokenExpiresAt:t.expiresIn?Date.now()+t.expiresIn*1e3:n.accessTokenExpiresAt,tokenType:t.tokenType||n.tokenType,scopes:t.scope?t.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):n.scopes,oauthRefreshFailureCount:0,oauthReauthRequired:!1,oauthReauthRequiredAt:void 0};return await a(l),l}catch{return o()}}async function xt(e,t,n={}){let r=await S(e,b.GIT_ACCOUNTS);return Array.isArray(r)&&r.length>0?St(e,r,t,n):Ct(e)}async function St(e,t,n,r={}){let i;if(r.accountId&&(i=t.find(e=>e.id===r.accountId)),!i&&n){let e=ht(n);e&&(i=_t(gt(t,e),r.authMode))}if(!i){let r=await S(e,b.GIT_DEFAULT_ACCOUNT);if(r){let e=t.find(e=>e.id===r);if(e){if(!n)i=e;else{let t=ht(n);if(t&&e.hostPattern){let n=t?.toLowerCase(),r=e.hostPattern.toLowerCase();n?.includes(r)&&(i=e)}}}}}if(!i&&!n&&r.authMode&&(i=_t(t,r.authMode)),!i&&!n&&(i=t[0]),!i)return{authMode:`token`,authorEmail:void 0,authorName:void 0,password:void 0,provider:`generic`,token:void 0,username:void 0};yt(i,r)&&(i=await bt(e,t,i));let a=i.provider||pt(i.hostPattern||``);return dt(i)===`oauth`&&i.oauthReauthRequired?{accountId:i.id,authMode:`oauth`,authorEmail:i.authorEmail||void 0,authorName:i.authorName||void 0,hostPattern:i.hostPattern||void 0,password:void 0,provider:a,reauthRequired:!0,token:void 0,username:i.username||void 0}:{accountId:i.id,authMode:dt(i),authorEmail:i.authorEmail||void 0,authorName:i.authorName||void 0,hostPattern:i.hostPattern||void 0,password:await vt(i.password),provider:a,token:await vt(i.token),username:i.username||void 0}}async function Ct(e){let t=await S(e,b.GIT_TOKEN),n=await S(e,b.GIT_PASSWORD);return{authMode:`token`,authorEmail:await S(e,b.GIT_AUTHOR_EMAIL)||void 0,authorName:await S(e,b.GIT_AUTHOR_NAME)||void 0,password:n?await vt(n):void 0,provider:`generic`,token:t?await vt(t):void 0,username:await S(e,b.GIT_USERNAME)||void 0}}function wt(e){if(typeof e!=`string`||!e.trim())return!1;try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`}catch{return!1}}function Tt(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(!n.serviceType||!n.authType)return null;if(n.serviceType!==t)throw Error(`Credential ref serviceType must match connection serviceType`);return{serviceType:n.serviceType,authType:n.authType,providerId:n.providerId||void 0,accountId:n.accountId||void 0,gitAccountId:n.gitAccountId||void 0,headerName:n.headerName||void 0,encryptedValue:n.encryptedValue||void 0}}function Et(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.serviceType||!t.transport||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!wt(t.serverUrl)||t.serviceType!==`mcp_remote`&&t.serviceType!==`webmcp_local`||t.transport!==`streamable_http`&&t.transport!==`sse`&&t.transport!==`websocket`?null:{id:t.id,label:t.label,serviceType:t.serviceType,serverUrl:t.serverUrl,transport:t.transport,enabled:t.enabled,autoReconnectOAuth:t.autoReconnectOAuth===!0,createdAt:t.createdAt,updatedAt:t.updatedAt,credentialRef:Tt(t.credentialRef,t.serviceType)}}async function Dt(e){let t=await S(e,b.REMOTE_MCP_CONNECTIONS);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=Et(e);t&&n.push(t)}return n}async function Ot(e){return Dt(e)}async function kt(e,t){if(!t)return null;let n=await Dt(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}function At(e){return e===`oauth`?`oauth`:`token`}async function jt(e,t,n={}){let r=await kt(e,t);if(!r)return null;let i=r.credentialRef;if(!i||i.authType===`none`)return{connection:r,authType:`none`,headers:{}};if(i.authType===`custom_header`){if(!i.headerName||!i.encryptedValue)return{connection:r,authType:`custom_header`,headers:{}};let e=await D(i.encryptedValue);return{connection:r,authType:`custom_header`,headers:e?{[i.headerName]:e}:{}}}let a=At(i.authType);if(i.accountId){let t=await ut(e,r.serverUrl,{accountId:i.accountId,authMode:a,forceRefresh:n.forceRefresh});return t?t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:t.headerValue?{[t.headerName]:t.headerValue}:{}}:{connection:r,authType:i.authType,headers:{}}}if(i.gitAccountId){let t=await xt(e,r.serverUrl,{accountId:i.gitAccountId,authMode:a,forceRefresh:n.forceRefresh});return t.reauthRequired?{connection:r,authType:i.authType,headers:{},reauthRequired:!0}:{connection:r,authType:i.authType,headers:mt(t)}}return{connection:r,authType:i.authType,headers:{}}}const Mt=/* @__PURE__ */ new Map;function Nt(e){return typeof e==`object`&&!!e&&`method`in e&&`id`in e&&!(`result`in e)&&!(`error`in e)}function Pt(e){let t=(e.requestedSchema||{}).properties||{},n={};for(let[e,r]of Object.entries(t))`default`in r?n[e]=r.default:r.type===`boolean`&&(n[e]=!0);return n}var Ft=class extends Error{constructor(e){super(e),this.name=`InvalidRemoteMcpSessionError`}},It=class extends Error{status;constructor(e,t){super(t),this.name=`HttpRemoteMcpError`,this.status=e}},Lt=class extends Error{connectionId;constructor(e){super(`OAuth reconnect required for remote MCP connection`),this.name=`McpReauthRequiredError`,this.connectionId=e}};function Rt(e,t){return!e.headers||typeof e.headers.get!=`function`?null:e.headers.get(t)}function zt(e){return/no valid session id provided/i.test(e)}function Bt(e,t){let n=t&&`error`in t?t.error.message||`Remote MCP JSON-RPC error`:``;return zt(n)?new Ft(n):e.ok?Error(n||`Remote MCP JSON-RPC error`):new It(e.status,n?`Remote MCP HTTP error: ${e.status} (${n})`:`Remote MCP HTTP error: ${e.status}`)}function Vt(e){if(!e)return null;let t=null,n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(r&&r!==`[DONE]`)try{let e=JSON.parse(r);e&&typeof e==`object`&&`jsonrpc`in e&&(t=e)}catch{}}return t}function Ht(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Ut(e,t,n){let r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json, text/event-stream`,...t},body:JSON.stringify(n)}),i=(Rt(r,`content-type`)||``).toLowerCase(),a=null;if(typeof r.text==`function`){let e=await r.text();a=i.includes(`text/event-stream`)?Vt(e):Ht(e)}else try{a=await r.json()}catch{a=null}return{response:r,payload:a}}async function Wt(e,t,n){let{response:r,payload:i}=await Ut(e,{...t,"mcp-session-id":n},{jsonrpc:`2.0`,method:`notifications/initialized`,params:{}});if(!r.ok||i&&`error`in i)throw Bt(r,i)}async function Gt(e,t,n){let r=Mt.get(e);if(r?.sessionId)return r;let{response:i,payload:a}=await Ut(t,n,{jsonrpc:`2.0`,id:`initialize-${Date.now().toString(36)}`,method:`initialize`,params:{protocolVersion:`2025-03-26`,capabilities:{elicitation:{}},clientInfo:{name:`shadowclaw-remote-mcp-client`,version:`1.0.0`}}});if(!i.ok||a&&`error`in a)throw Bt(i,a);let o=Rt(i,`mcp-session-id`)||`local-${Date.now()}-${Math.random().toString(36).slice(2)}`,s={sessionId:o,protocolVersion:Rt(i,`mcp-protocol-version`)||a?.result?.protocolVersion,lastUsedAt:Date.now()};return await Wt(t,n,o),Mt.set(e,s),s}async function Kt(e,t,n,r,i){let a=await Gt(e,t,n),o=async e=>{let a={jsonrpc:`2.0`,id:Date.now().toString(),method:r,params:i||{}},o={...n,"mcp-session-id":e},{response:s,payload:c}=await Ut(t,o,a),l=0;for(;Nt(c)&&l<5&&(l++,c.method===`elicitation/create`);){let e=Pt(c.params||{});({response:s,payload:c}=await Ut(t,o,{jsonrpc:`2.0`,id:c.id,result:{action:`accept`,content:e}}))}if(Nt(c))throw Error(`Unsupported server request: ${c.method}`);if(!s.ok||!c||`error`in c)throw Bt(s,c);return c.result};try{let t=await o(a.sessionId);return a.lastUsedAt=Date.now(),Mt.set(e,a),t}catch(r){if(!(r instanceof Ft))throw r;Mt.delete(e),a=await Gt(e,t,n);let i=await o(a.sessionId);return a.lastUsedAt=Date.now(),Mt.set(e,a),i}}function qt(e){e&&Mt.delete(e)}async function Jt(e,t,n,r){let i=await jt(e,t);if(!i)throw Error(`Remote MCP connection not found`);if(i.reauthRequired)throw new Lt(t);let{connection:a,authType:o,headers:s}=i;if(a.transport!==`streamable_http`)throw Error(`Unsupported remote MCP transport`);try{return await Kt(t,a.serverUrl,s,n,r)}catch(i){if(!(i instanceof It)||i.status!==401||o!==`oauth`)throw i;qt(t);let a=await jt(e,t,{forceRefresh:!0});if(!a||a.reauthRequired)throw new Lt(t);try{return await Kt(t,a.connection.serverUrl,a.headers,n,r)}catch(e){throw e instanceof It&&e.status===401?new Lt(t):e}}}async function Yt(e,t){let n=await Jt(e,t,`tools/list`);return Array.isArray(n.tools)?n.tools:[]}async function Xt(e,t,n,r={}){return Jt(e,t,`tools/call`,{name:n,arguments:r})}let Zt=null;function Qt(e){Zt=e}const $t=/* @__PURE__ */ new Map;function en(e,t){$t.set(e,t)}function tn(e){$t.delete(e)}function O(e){let t=e?.payload?.groupId;t&&$t.has(t)?$t.get(t).push(e):Zt?Zt(e):typeof self<`u`&&typeof self.postMessage==`function`&&self.postMessage(e)}const nn=/* @__PURE__ */ new Set;async function rn(){ln()}async function an(e,t=900,n=null){{let e=sn();return`Error: WebVM is not available. The VM requires local assets served at /assets/ (alpine-fs.json, libv86.mjs, etc). Use the "javascript" tool for code execution, or the "fetch_url" tool for HTTP requests.`+(e.error?`\nReason: ${e.error}`:e.booting?`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{r as orchestratorStore}from"./chunk-iB8OoMmW.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{n as runWebRtcListenCommand}from"./chunk-D_te8ufL.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e from"node:fs";import t from"node:path";import n from"node:process";import{Buffer as r}from"buffer";import i from"node:readline/promises";import a from"node:tty";function o(e,t=1){if(!Number.isFinite(e)||e<=0)return`0 B`;let n=1024,r=t<0?0:t,i=[`B`,`KB`,`MB`,`GB`,`TB`],a=Math.floor(Math.log(e)/Math.log(n)),o=Math.min(a,i.length-1);return`${parseFloat((e/n**o).toFixed(r))} ${i[o]}`}function s(e={}){let{modelId:t=`model`,stream:r=n.stderr,barWidth:i=24,isTTY:a=!!(r&&typeof r==`object`&&r.isTTY),enabled:s=!0}=e;if(!s)return{update:()=>{},finish:()=>{},fail:e=>{r?.write&&r.write(`${e||`✖ Failed to download ${t}.`}\n`)}};let c=[],l=/* @__PURE__ */ new Map,u=!1;function d(e){let t=Math.round(Math.max(0,Math.min(1,e))*i),n=i-t;return`[`+`=`.repeat(t)+(t<i?`>`:``)+` `.repeat(Math.max(0,n-+(t<i)))+`]`}function f(e,t=0,n=0){let i=l.get(e);return i||(i={lineIndex:c.length,lastPct:-1,lastRenderedTime:0,loaded:t,total:n,isDone:!1},l.set(e,i),c.push(e),a&&c.length>1&&r?.write&&r.write(`
|
|
2
|
-
`)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],l=`onnx-community/gemma-4-E2B-it-ONNX`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function d(e){if(!e)return;let t=c.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=u.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function f(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function p(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function m(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function h(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=p(i);if(!e.existsSync(o))return!1;let s=u.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),l=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,l),f=t.join(o,`${l}.part`);try{if(e.existsSync(f))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function g(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function _(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function v(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[g(i),p(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function y(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function b(n,r){if(_(n))return v(n,r);if(m(n))return h(n,r);let i=f(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=y(t);if(!e&&n)return!0}}catch{}return!1}function x(e){return c.map(t=>({...t,cached:b(t.id,e)}))}function S(e){return u.map(t=>({...t,cached:h(t.fileName,e)}))}async function C(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:b(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function w(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:f,noProgress:m,quiet:h=!1,abortSignal:v}=a,y=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),b=_(i),x,S;y?(x=y.url,S=y.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(x=i,S=t.basename(new URL(i).pathname)):b?(S=t.basename(i).endsWith(`.agentfile`)?t.basename(i):`${t.basename(i)}.agentfile`,x=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${S}`):(S=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,x=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${S}`);let C=b?g(o):p(o);e.mkdirSync(C,{recursive:!0});let w=t.join(C,S),T=t.join(C,`${S}.part`);if(e.existsSync(w))try{if(e.statSync(w).size>0)return{success:!0,modelId:i,path:w}}catch{}let E=0;if(e.existsSync(T))try{let t=e.statSync(T);t.size>0&&(E=t.size)}catch{E=0}let D=s({modelId:S,stream:d,isTTY:l,enabled:!h&&f!==!1&&!m}),O;try{c&&d?.write&&d.write(`[Llamafile] Downloading ${x}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};E>0&&(t.Range=`bytes=${E}-`);let n=a.fetch||globalThis.fetch,o=await n(x,{headers:t,redirect:`follow`,signal:v});if(o.status===416&&E>0){try{e.existsSync(T)&&e.unlinkSync(T)}catch{}E=0,delete t.Range,o=await n(x,{headers:t,redirect:`follow`,signal:v})}if(!o.ok&&o.status!==206)throw Error(`Failed to download ${x}: HTTP ${o.status} ${o.statusText}`);let s=o.status===206,l=0,u=0;if(s){let t=(o.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(o.headers?.get?.(`content-length`)||`0`,10);l=t?parseInt(t[1],10):E+n,u=E,O=e.createWriteStream(T,{flags:`a`})}else E=0,l=parseInt(o.headers?.get?.(`content-length`)||`0`,10),u=0,O=e.createWriteStream(T,{flags:`w`});if(u>0&&D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0}),o.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof o.body.getReader==`function`)t=e.fromWeb(o.body);else if(typeof o.body[Symbol.asyncIterator]==`function`)t=o.body;else{let e=r.from(await o.arrayBuffer());O.write(e),u+=e.length}if(t)for await(let e of t){let t=r.isBuffer(e)?e:r.from(e);O.write(t),u+=t.length,D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0})}}if(O){let e=O;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(T,w);try{e.chmodSync(w,493)}catch{}return D.finish(),{success:!0,modelId:i,path:w}}catch(e){try{O?.end()}catch{}let t=e instanceof Error?e.message:String(e);return D.fail(`✖ Error downloading ${S}: ${t}`),{success:!1,modelId:i,error:t}}}async function T(e,t={}){if(m(e)||_(e))return w(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l,quiet:u=!1}=t,d=o;if(!d){let{getAgentCore:e}=await import(`./chunk-CX696s3_.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=s({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function E(r={}){let o=t.resolve(r.contentRoot||n.cwd()),s=t.resolve(r.workspaceDir||o),c=r.cacheDir,u=r.onExit||(e=>n.exit(e)),d=r.stdin||n.stdin,f=r.stdout||n.stderr,p=!1,g=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;g=e.openSync(t,`r`),d=new a.ReadStream(g),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{}}let y=i.createInterface({input:d,output:f}),x=!1,S=()=>{if(!x){x=!0,f.write(`
|
|
2
|
+
`)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],l=`onnx-community/gemma-4-E2B-it-ONNX`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function d(e){if(!e)return;let t=c.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=u.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function f(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function p(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function m(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function h(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=p(i);if(!e.existsSync(o))return!1;let s=u.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),l=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,l),f=t.join(o,`${l}.part`);try{if(e.existsSync(f))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function g(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function _(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function v(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[g(i),p(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function y(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function b(n,r){if(_(n))return v(n,r);if(m(n))return h(n,r);let i=f(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=y(t);if(!e&&n)return!0}}catch{}return!1}function x(e){return c.map(t=>({...t,cached:b(t.id,e)}))}function S(e){return u.map(t=>({...t,cached:h(t.fileName,e)}))}async function C(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:b(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function w(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:f,noProgress:m,quiet:h=!1,abortSignal:v}=a,y=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),b=_(i),x,S;y?(x=y.url,S=y.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(x=i,S=t.basename(new URL(i).pathname)):b?(S=t.basename(i).endsWith(`.agentfile`)?t.basename(i):`${t.basename(i)}.agentfile`,x=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${S}`):(S=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,x=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${S}`);let C=b?g(o):p(o);e.mkdirSync(C,{recursive:!0});let w=t.join(C,S),T=t.join(C,`${S}.part`);if(e.existsSync(w))try{if(e.statSync(w).size>0)return{success:!0,modelId:i,path:w}}catch{}let E=0;if(e.existsSync(T))try{let t=e.statSync(T);t.size>0&&(E=t.size)}catch{E=0}let D=s({modelId:S,stream:d,isTTY:l,enabled:!h&&f!==!1&&!m}),O;try{c&&d?.write&&d.write(`[Llamafile] Downloading ${x}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};E>0&&(t.Range=`bytes=${E}-`);let n=a.fetch||globalThis.fetch,o=await n(x,{headers:t,redirect:`follow`,signal:v});if(o.status===416&&E>0){try{e.existsSync(T)&&e.unlinkSync(T)}catch{}E=0,delete t.Range,o=await n(x,{headers:t,redirect:`follow`,signal:v})}if(!o.ok&&o.status!==206)throw Error(`Failed to download ${x}: HTTP ${o.status} ${o.statusText}`);let s=o.status===206,l=0,u=0;if(s){let t=(o.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(o.headers?.get?.(`content-length`)||`0`,10);l=t?parseInt(t[1],10):E+n,u=E,O=e.createWriteStream(T,{flags:`a`})}else E=0,l=parseInt(o.headers?.get?.(`content-length`)||`0`,10),u=0,O=e.createWriteStream(T,{flags:`w`});if(u>0&&D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0}),o.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof o.body.getReader==`function`)t=e.fromWeb(o.body);else if(typeof o.body[Symbol.asyncIterator]==`function`)t=o.body;else{let e=r.from(await o.arrayBuffer());O.write(e),u+=e.length}if(t)for await(let e of t){let t=r.isBuffer(e)?e:r.from(e);O.write(t),u+=t.length,D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0})}}if(O){let e=O;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(T,w);try{e.chmodSync(w,493)}catch{}return D.finish(),{success:!0,modelId:i,path:w}}catch(e){try{O?.end()}catch{}let t=e instanceof Error?e.message:String(e);return D.fail(`✖ Error downloading ${S}: ${t}`),{success:!1,modelId:i,error:t}}}async function T(e,t={}){if(m(e)||_(e))return w(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l,quiet:u=!1}=t,d=o;if(!d){let{getAgentCore:e}=await import(`./chunk-CFxww5Yz.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=s({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function E(r={}){let o=t.resolve(r.contentRoot||n.cwd()),s=t.resolve(r.workspaceDir||o),c=r.cacheDir,u=r.onExit||(e=>n.exit(e)),d=r.stdin||n.stdin,f=r.stdout||n.stderr,p=!1,g=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;g=e.openSync(t,`r`),d=new a.ReadStream(g),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{}}let y=i.createInterface({input:d,output:f}),x=!1,S=()=>{if(!x){x=!0,f.write(`
|
|
3
3
|
Operation cancelled.
|
|
4
4
|
`);try{y.close()}catch{}u(130)}};y.on(`SIGINT`,S),d&&typeof d.on==`function`&&d!==n.stdin&&d.on(`SIGINT`,S);let E=()=>S();n.on(`SIGINT`,E);let D=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&S()};d&&typeof d.on==`function`&&d.on(`data`,D);try{let i=`transformers_js_local`,a=l,u=/* @__PURE__ */ new Map;for(;!x;){f.write(`
|
|
5
5
|
ShadowClaw CLI Agent — Model Selection:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as e,v as t}from"./chunk-
|
|
1
|
+
import{f as e,v as t}from"./chunk-CZdCRqNe.js";import{t as n}from"./chunk-BChOKoxf.js";import{t as r}from"./chunk-sC-eQ-Nh.js";import{a as i,i as a,n as o,r as s,t as c}from"./chunk-Cpdoq2Nw.js";import{a as l,d as u,h as d,p as f}from"./chunk-CeGycQxn.js";import{_ as p,b as m,g as h,l as g,r as _,s as v,y}from"./chunk-BcxWvEHa.js";import{n as b,r as x,t as S}from"./chunk-Dl4zTOqg.js";import{n as C,t as w}from"./chunk-DjKQO7aV.js";import{t as T}from"./chunk-IVWoxOkm.js";import{A as E,B as D,C as O,D as k,E as A,F as j,H as M,I as N,J as ee,O as te,P as ne,R as re,S as P,T as ie,V as F,X as ae,Y as I,Z as oe,_ as se,a as ce,b as L,c as R,d as le,f as ue,g as de,h as fe,i as pe,j as me,k as he,l as ge,m as _e,o as ve,p as ye,q as z,r as be,s as xe,t as Se,u as Ce,v as we,w as Te,x as Ee,y as De,z as B}from"./chunk-3vNYrs_L.js";import{i as Oe,n as ke,o as Ae,r as je,t as Me,u as Ne}from"./chunk-D0Xq-Muz.js";import{n as Pe}from"./chunk-CMEzBK2J.js";import{t as Fe}from"./chunk-CuwzD5GU.js";import{r as Ie,t as Le}from"./chunk-C4pZzeqM.js";import{createRequire as Re}from"node:module";import ze,{constants as Be,existsSync as Ve}from"node:fs";import V from"node:path";import{fileURLToPath as He}from"node:url";import{env as Ue}from"node:process";import{exec as We,spawn as Ge}from"node:child_process";import{access as Ke,mkdir as qe,readFile as Je,readdir as Ye,rename as Xe,rm as Ze,rmdir as Qe,stat as H,unlink as $e,writeFile as U}from"node:fs/promises";import W from"process";import{Buffer as G}from"buffer";import{EventEmitter as et}from"node:events";import{isIP as tt}from"node:net";import{runInNewContext as nt}from"node:vm";import{DatabaseSync as rt}from"node:sqlite";var it=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=V.basename(e)}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async getFile(){let e=await Je(this._path);return{size:e.length,type:`application/octet-stream`,async text(){return e.toString(`utf8`)},async arrayBuffer(){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}}}async createWritable(){let e=[],t=this._path,n=async t=>{if(typeof t==`string`)e.push(G.from(t,`utf8`));else if(t instanceof Uint8Array)e.push(G.from(t));else if(t instanceof ArrayBuffer)e.push(G.from(t));else if(t instanceof Blob){if(typeof t.arrayBuffer==`function`){let n=await t.arrayBuffer();e.push(G.from(n))}else if(typeof t.bytes==`function`){let n=await t.bytes();e.push(G.from(n))}else if(typeof t.text==`function`){let n=await t.text();e.push(G.from(n,`utf8`))}else if(t._buffer)e.push(G.from(t._buffer));else if(typeof FileReader<`u`){let n=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=n,r.readAsArrayBuffer(t)});e.push(G.from(n))}}else t&&typeof t==`object`&&`data`in t?await n(t.data):e.push(G.from(new Uint8Array(t)))};return{write:n,async close(){let n=G.concat(e);await U(t,n)}}}},at=class e{kind=`directory`;name;_path;_rootPath;constructor(e,t){this._path=V.resolve(e),this._rootPath=t?V.resolve(t):this._path,this.name=V.basename(this._path)||this._path}_resolveChild(e){if(!e||e===`.`||e.includes(`\0`)){let t=/* @__PURE__ */ Error(`Invalid path name: "${e}"`);throw t.name=`TypeError`,t}let t=V.resolve(this._path,e),n=V.relative(this._path,t),r=V.relative(this._rootPath,t);if(n.startsWith(`..`)||V.isAbsolute(n)||r.startsWith(`..`)||V.isAbsolute(r)){let t=/* @__PURE__ */ Error(`SecurityError: Path traversal outside workspace root is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return t}async getDirectoryHandle(t,n){let r=this._resolveChild(t);if(n?.create)await qe(r,{recursive:!0});else if(!Ve(r)){let e=/* @__PURE__ */ Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}if(!(await H(r)).isDirectory()){let e=/* @__PURE__ */ Error(`TypeMismatchError: "${t}" is a file, not a directory`);throw e.name=`TypeMismatchError`,e}return new e(r,this._rootPath)}async getFileHandle(e,t){let n=this._resolveChild(e);if(t?.create)Ve(n)||await U(n,``);else if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){let t=/* @__PURE__ */ Error(`TypeMismatchError: "${e}" is a directory, not a file`);throw t.name=`TypeMismatchError`,t}return new it(n)}async*entries(){let t;try{t=await Ye(this._path)}catch{return}for(let n of t){let t=V.join(this._path,n);try{(await H(t)).isDirectory()?yield[n,new e(t,this._rootPath)]:yield[n,new it(t)]}catch{}}}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async removeEntry(e,t){let n=this._resolveChild(e);if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){if(t?.recursive)await Ze(n,{recursive:!0});else try{await Qe(n)}catch(t){if(t.code===`ENOTEMPTY`){let t=/* @__PURE__ */ Error(`InvalidModificationError: directory is not empty: "${e}"`);throw t.name=`InvalidModificationError`,t}throw t}}else await $e(n)}};let ot=null;function st(){return ot}function ct(e){ot=V.resolve(e),d(new at(e))}globalThis.__setStorageRootFromPath=ct,globalThis.__getStorageRootPath=st;const lt=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=st?.()??globalThis.__getStorageRootPath?.()??W.cwd(),a=We(e,{timeout:n*1e3,maxBuffer:10485760,cwd:i},(e,t,n)=>{let i=t||``;n&&(i+=(i?`
|
|
2
2
|
`:``)+n),e&&!i&&(i=e.message),r(i)});t&&a.stdin&&(a.stdin.write(t),a.stdin.end())});re(lt),globalThis.__headlessBashExecutor=lt;function ut(e,t,n){let r=t.input_tokens||0,i=t.output_tokens||0,a=t.cache_read_input_tokens||0,o=t.cache_creation_input_tokens||0;return{type:`token-usage`,payload:{groupId:e,inputTokens:r,outputTokens:i,cacheReadTokens:a,cacheCreationTokens:o,totalTokens:r+i+a+o,contextLimit:n}}}function K(e,t,n,r){B(ee(e,t,n,r))}async function*dt(e,t){let n=e.getReader(),r=new TextDecoder,i=``;try{for(;!t?.aborted;){let{done:e,value:t}=await n.read();if(e)break;i+=r.decode(t,{stream:!0});let a=i.split(`
|
|
3
3
|
|
|
4
4
|
`);i=a.pop()||``;for(let e of a){let t=e.split(`
|