shadow-claw 1.59.6 → 1.59.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +12 -4
- package/.well-known/mcp.json +12 -4
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DM4xsTry.js → chunk-3vNYrs_L.js} +1 -1
- package/dist/cli/{chunk-Ctg5L55n.js → chunk-66BvqAV0.js} +1 -1
- package/dist/cli/{chunk-Bq38OubR.js → chunk-B0qusANw.js} +1 -1
- package/dist/cli/{chunk-yiVdvGCJ.js → chunk-B3TrWbca.js} +7 -7
- package/dist/cli/{chunk-C8DBACtx.js → chunk-B88Z8T_9.js} +1 -1
- package/dist/cli/chunk-BCjL0JXf.js +1 -0
- package/dist/cli/chunk-BNcu1oiT.js +1 -0
- package/dist/cli/{chunk-gvNsvav0.js → chunk-C5ypckWC.js} +7 -7
- package/dist/cli/{chunk-Dw8GndPD.js → chunk-CAAeGOdy.js} +1 -1
- package/dist/cli/chunk-CFxww5Yz.js +1 -0
- package/dist/cli/chunk-CGIgtL6R.js +1 -0
- package/dist/cli/{chunk-DJqHK-qS.js → chunk-CQaCgswD.js} +7 -7
- package/dist/cli/chunk-CZdCRqNe.js +7 -0
- package/dist/cli/chunk-CafdvLx-.js +1 -0
- package/dist/cli/{chunk-Bc_weULz.js → chunk-CncW6_WL.js} +1 -1
- package/dist/cli/chunk-DDvuLVfW.js +1 -0
- package/dist/cli/{chunk-Cq_kQohv.js → chunk-DMs7kREC.js} +1 -1
- package/dist/cli/{chunk-CX2itile.js → chunk-D_te8ufL.js} +1 -1
- package/dist/cli/{chunk-3wTukVof.js → chunk-DhOU6GYX.js} +1 -1
- package/dist/cli/chunk-Dhap1VwA.js +1 -0
- package/dist/cli/chunk-DwvavohW.js +1 -0
- package/dist/cli/{chunk-DLde6nuO.js → chunk-SRBRVorc.js} +1 -1
- package/dist/cli/{chunk-D3y7h9Xe.js → chunk-SxK79JmB.js} +1 -1
- package/dist/cli/chunk-_a0CkUNS.js +139 -0
- package/dist/cli/{chunk-C9o6lXP3.js → chunk-hVf839t7.js} +1 -1
- package/dist/cli/chunk-iB8OoMmW.js +7 -0
- package/dist/cli/cli.js +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-DJdIjp2V.js → app-routes-BXiRvlNl.js} +7 -25
- package/dist/lib/{app-routes-DJdIjp2V.js.map → app-routes-BXiRvlNl.js.map} +1 -1
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js} +2 -2
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map} +1 -1
- package/dist/lib/{channel-Dlru5ofR.js → channel-mmdGzPkT.js} +3 -3
- package/dist/lib/{channel-Dlru5ofR.js.map → channel-mmdGzPkT.js.map} +1 -1
- package/dist/lib/{chat-template-BuuLY8l7.js → chat-template-DPEKGJhB.js} +2 -2
- package/dist/lib/{chat-template-BuuLY8l7.js.map → chat-template-DPEKGJhB.js.map} +1 -1
- package/dist/lib/{compact-context-BtR55YPU.js → compact-context-CY9BBlUQ.js} +19 -19
- package/dist/lib/{compact-context-BtR55YPU.js.map → compact-context-CY9BBlUQ.js.map} +1 -1
- package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/index.js +27 -27
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config-DxNI3TlW.js → config-BrHR97zt.js} +2 -2
- package/dist/lib/{config-DxNI3TlW.js.map → config-BrHR97zt.js.map} +1 -1
- package/dist/lib/{configure-peer-js-ChDhOZU4.js → configure-peer-js-ccNvax2N.js} +3 -3
- package/dist/lib/{configure-peer-js-ChDhOZU4.js.map → configure-peer-js-ccNvax2N.js.map} +1 -1
- package/dist/lib/{connections-DC4NZkJE.js → connections-C1FWsBsE.js} +2 -2
- package/dist/lib/{connections-DC4NZkJE.js.map → connections-C1FWsBsE.js.map} +1 -1
- package/dist/lib/{credentials-5vpz0XPk.js → credentials-CZbngHXW.js} +2 -2
- package/dist/lib/{credentials-5vpz0XPk.js.map → credentials-CZbngHXW.js.map} +1 -1
- package/dist/lib/{discover-skills-CD0sKvAI.js → discover-skills-OwlQ2sXA.js} +13 -13
- package/dist/lib/{discover-skills-CD0sKvAI.js.map → discover-skills-OwlQ2sXA.js.map} +1 -1
- package/dist/lib/{download-group-file-Dk3qaxhJ.js → download-group-file-D0wgg10Q.js} +2 -2
- package/dist/lib/{download-group-file-Dk3qaxhJ.js.map → download-group-file-D0wgg10Q.js.map} +1 -1
- package/dist/lib/{file-viewer-B4pRW-_G.js → file-viewer-DOfvX6yy.js} +5 -5
- package/dist/lib/{file-viewer-B4pRW-_G.js.map → file-viewer-DOfvX6yy.js.map} +1 -1
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js → get-or-create-subscriber-id-wyzaML7Z.js} +2 -2
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js.map → get-or-create-subscriber-id-wyzaML7Z.js.map} +1 -1
- package/dist/lib/{git-B3Q1euc5.js → git-D2J_j9X9.js} +5 -5
- package/dist/lib/{git-B3Q1euc5.js.map → git-D2J_j9X9.js.map} +1 -1
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js → iframe-bridge-scripts-Dx825LLG.js} +2 -2
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js.map → iframe-bridge-scripts-Dx825LLG.js.map} +1 -1
- package/dist/lib/index.js +28 -28
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js → init-chat-split-resize-Cc0bd2z9.js} +2 -2
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js.map → init-chat-split-resize-Cc0bd2z9.js.map} +1 -1
- package/dist/lib/{init-control-plane-C1FRRmjC.js → init-control-plane-B7blDVIE.js} +15 -15
- package/dist/lib/{init-control-plane-C1FRRmjC.js.map → init-control-plane-B7blDVIE.js.map} +1 -1
- package/dist/lib/{invoke-agent-CzN7sVh-.js → invoke-agent-SxvudiDT.js} +11 -11
- package/dist/lib/{invoke-agent-CzN7sVh-.js.map → invoke-agent-SxvudiDT.js.map} +1 -1
- package/dist/lib/{markdown-mbNo7cV3.js → markdown--6vTAPEH.js} +2 -2
- package/dist/lib/{markdown-mbNo7cV3.js.map → markdown--6vTAPEH.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js → mcp-reconnect-BeqQvNWO.js} +3 -3
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js.map → mcp-reconnect-BeqQvNWO.js.map} +1 -1
- package/dist/lib/{model-ranking-DGNSWYwN.js → model-ranking-BhsJV7vb.js} +2 -2
- package/dist/lib/{model-ranking-DGNSWYwN.js.map → model-ranking-BhsJV7vb.js.map} +1 -1
- package/dist/lib/{move-group-entry-NMTJ59M9.js → move-group-entry-DDpjxa10.js} +5 -5
- package/dist/lib/{move-group-entry-NMTJ59M9.js.map → move-group-entry-DDpjxa10.js.map} +1 -1
- package/dist/lib/{orchestrator-B8FV1V7x.js → orchestrator-C7fkh7T7.js} +24 -24
- package/dist/lib/{orchestrator-B8FV1V7x.js.map → orchestrator-C7fkh7T7.js.map} +1 -1
- package/dist/lib/{orchestrator-i_QJ-o22.js → orchestrator-CCARkxQC.js} +11 -11
- package/dist/lib/orchestrator-CCARkxQC.js.map +1 -0
- package/dist/lib/{parse-path-DPCn-HwI.js → parse-path-BOHQP_IQ.js} +3 -3
- package/dist/lib/{parse-path-DPCn-HwI.js.map → parse-path-BOHQP_IQ.js.map} +1 -1
- package/dist/lib/{peerjs-z5zeioPV.js → peerjs-Bfw_FWLB.js} +8 -8
- package/dist/lib/{peerjs-z5zeioPV.js.map → peerjs-Bfw_FWLB.js.map} +1 -1
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js → process-peer-query-param-BxYiZNdf.js} +5 -5
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js.map → process-peer-query-param-BxYiZNdf.js.map} +1 -1
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js → process-pending-shared-payloads-DPIbwRb3.js} +4 -4
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js.map → process-pending-shared-payloads-DPIbwRb3.js.map} +1 -1
- package/dist/lib/{process-room-query-param-C3FFGGn6.js → process-room-query-param-B2_d50nE.js} +4 -4
- package/dist/lib/{process-room-query-param-C3FFGGn6.js.map → process-room-query-param-B2_d50nE.js.map} +1 -1
- package/dist/lib/{provider-DcQZypu5.js → provider-BC9KPI14.js} +3 -3
- package/dist/lib/{provider-DcQZypu5.js.map → provider-BC9KPI14.js.map} +1 -1
- package/dist/lib/{push-client-Cx5rMs6J.js → push-client-rrjTdc-U.js} +5 -5
- package/dist/lib/{push-client-Cx5rMs6J.js.map → push-client-rrjTdc-U.js.map} +1 -1
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js → read-group-file-bytes-UQIk1eJG.js} +2 -2
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js.map → read-group-file-bytes-UQIk1eJG.js.map} +1 -1
- package/dist/lib/{rooms-CwlkYLDU.js → rooms-bwGoYb1q.js} +2 -2
- package/dist/lib/{rooms-CwlkYLDU.js.map → rooms-bwGoYb1q.js.map} +1 -1
- package/dist/lib/{shadow-claw-DoQ7fgl5.js → shadow-claw-CypGVlVO.js} +17 -20
- package/dist/lib/shadow-claw-CypGVlVO.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js → shadow-claw-a2ui-lG0vQbW8.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js.map → shadow-claw-a2ui-lG0vQbW8.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js → shadow-claw-accounts-CkqyCxwp.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js.map → shadow-claw-accounts-CkqyCxwp.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js → shadow-claw-channel-config-DJpDovkF.js} +4 -4
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js.map → shadow-claw-channel-config-DJpDovkF.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js → shadow-claw-channels-DJLwRovH.js} +3 -3
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js.map → shadow-claw-channels-DJLwRovH.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js → shadow-claw-chat-B92cPaft.js} +15 -15
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js.map → shadow-claw-chat-B92cPaft.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js → shadow-claw-control-plane-fvn-qyHj.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js.map → shadow-claw-control-plane-fvn-qyHj.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js → shadow-claw-conversations-CsVyDOny.js} +7 -7
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js.map → shadow-claw-conversations-CsVyDOny.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js → shadow-claw-file-viewer-DFfyP7s5.js} +10 -10
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js.map → shadow-claw-file-viewer-DFfyP7s5.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DN7irmE1.js → shadow-claw-files-cT6HL7ye.js} +11 -11
- package/dist/lib/{shadow-claw-files-DN7irmE1.js.map → shadow-claw-files-cT6HL7ye.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-D-1oIh65.js → shadow-claw-git-Cv9mQgTx.js} +6 -6
- package/dist/lib/{shadow-claw-git-D-1oIh65.js.map → shadow-claw-git-Cv9mQgTx.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js → shadow-claw-integrations-RZZ-m-Id.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js.map → shadow-claw-integrations-RZZ-m-Id.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js → shadow-claw-llm-CKOYzPDp.js} +9 -9
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js.map → shadow-claw-llm-CKOYzPDp.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js → shadow-claw-mcp-remote-BKFROurv.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js.map → shadow-claw-mcp-remote-BKFROurv.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js → shadow-claw-networking-DYfiUQaH.js} +2 -2
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js.map → shadow-claw-networking-DYfiUQaH.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js → shadow-claw-notifications-JJlzriuX.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js.map → shadow-claw-notifications-JJlzriuX.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js → shadow-claw-page-header-C_Qr3xZM.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js.map → shadow-claw-page-header-C_Qr3xZM.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js → shadow-claw-pages-BCo3ihZI.js} +11 -11
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js.map → shadow-claw-pages-BCo3ihZI.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js → shadow-claw-peerjs-CFNjfrY5.js} +6 -6
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js.map → shadow-claw-peerjs-CFNjfrY5.js.map} +1 -1
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js → shadow-claw-provider-model-picker-B-Ct4yW-.js} +2 -2
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js.map → shadow-claw-provider-model-picker-B-Ct4yW-.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js → shadow-claw-settings-BMwne0bh.js} +7 -7
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js.map → shadow-claw-settings-BMwne0bh.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js → shadow-claw-storage-DUY8B9m-.js} +5 -5
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js.map → shadow-claw-storage-DUY8B9m-.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js → shadow-claw-task-server-yWeoA3eL.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js.map → shadow-claw-task-server-yWeoA3eL.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js → shadow-claw-tasks-Bg0uM15I.js} +9 -9
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js.map → shadow-claw-tasks-Bg0uM15I.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js → shadow-claw-terminal-fyJPppY_.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js.map → shadow-claw-terminal-fyJPppY_.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js → shadow-claw-tools-D0T8m3go.js} +7 -7
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js.map → shadow-claw-tools-D0T8m3go.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js → shadow-claw-webvm-CQvzJwKI.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js.map → shadow-claw-webvm-CQvzJwKI.js.map} +1 -1
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js → sync-web-mcp-registration-BFtG_4kx.js} +6 -6
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js.map → sync-web-mcp-registration-BFtG_4kx.js.map} +1 -1
- package/dist/lib/{system-prompt-DT_KeYaL.js → system-prompt-bhGRLoL2.js} +7 -7
- package/dist/lib/{system-prompt-DT_KeYaL.js.map → system-prompt-bhGRLoL2.js.map} +1 -1
- package/dist/lib/{tools-Beuyh8y1.js → tools-B8OJ4sMF.js} +4 -4
- package/dist/lib/{tools-Beuyh8y1.js.map → tools-B8OJ4sMF.js.map} +1 -1
- package/dist/lib/{transformers-DydnReu4.js → transformers-BMURofG6.js} +2 -2
- package/dist/lib/{transformers-DydnReu4.js.map → transformers-BMURofG6.js.map} +1 -1
- package/dist/lib/{trusted-types-CfwZl_rr.js → trusted-types-HwsGS5Nj.js} +19 -17
- package/dist/lib/{trusted-types-CfwZl_rr.js.map → trusted-types-HwsGS5Nj.js.map} +1 -1
- package/dist/lib/{upload-group-file-BbBzjTcN.js → upload-group-file-CJpoNjEb.js} +3 -3
- package/dist/lib/{upload-group-file-BbBzjTcN.js.map → upload-group-file-CJpoNjEb.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespaced-storage.js +1 -1
- package/dist/lib/utils/runtime-assets.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{webmcp-DCfAFiIO.js → webmcp-BoMTvgmX.js} +3 -3
- package/dist/lib/{webmcp-DCfAFiIO.js.map → webmcp-BoMTvgmX.js.map} +1 -1
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js → write-group-file-bytes-CNT7DqOZ.js} +3 -3
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js.map → write-group-file-bytes-CNT7DqOZ.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +12 -4
- package/dist/public/.well-known/mcp.json +12 -4
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/attachment-capabilities-AdwXt3--.js +1 -0
- package/dist/public/{channel-BylT3rJC.js → channel-Dk7wl-Av.js} +1 -1
- package/dist/public/{chat-template-DPHJy7tr.js → chat-template-BwAnTFKf.js} +1 -1
- package/dist/public/{compact-context-BINQh64w.js → compact-context-fOTqwKF6.js} +2 -2
- package/dist/public/config-C16fFWtP.js +1 -0
- package/dist/public/{configure-peer-js-DChhcOfe.js → configure-peer-js-BOV0tR6G.js} +1 -1
- package/dist/public/{connections-CHaw0VqP.js → connections-Dxwj8yK_.js} +1 -1
- package/dist/public/{create-model-cache-fetch-DQebkoPL.js → create-model-cache-fetch-DSAFjOwc.js} +1 -1
- package/dist/public/{credentials-CgVqS119.js → credentials-CJUQ5Ep2.js} +1 -1
- package/dist/public/{custom-element-security-kiDhPfb8.js → custom-element-security-B2daIE5r.js} +2 -2
- package/dist/public/{discover-skills-Cvmx5I9V.js → discover-skills-D1sNTy2r.js} +6 -6
- package/dist/public/docs/example/article/index.html +28 -29
- package/dist/public/docs/example/article.html +28 -29
- package/dist/public/docs/publishing/index.html +28 -29
- package/dist/public/docs/publishing.html +28 -29
- package/dist/public/docs/skill-creator/index.html +28 -29
- package/dist/public/docs/skill-creator.html +28 -29
- package/dist/public/{download-group-file-BapoRgfU.js → download-group-file-BkMH-JKi.js} +1 -1
- package/dist/public/{e2e-bridge-C0g8vZKr.js → e2e-bridge-Cz95DLlb.js} +1 -1
- package/dist/public/get-group-dir-D--BiEyk.js +1 -0
- package/dist/public/{get-or-create-subscriber-id-GvRZYXwA.js → get-or-create-subscriber-id-jVHnQfbr.js} +1 -1
- package/dist/public/{git-CaAAZfVd.js → git-BmMlwIMP.js} +2 -2
- package/dist/public/{iframe-bridge-scripts-BnqtKhE4.js → iframe-bridge-scripts-Cibg0m6A.js} +1 -1
- package/dist/public/index.html +28 -29
- package/dist/public/index.js +1 -1
- package/dist/public/{init-chat-split-resize-Btonoy8u.js → init-chat-split-resize-C8AqCCiK.js} +1 -1
- package/dist/public/init-control-plane-Cb31yLTY.js +1 -0
- package/dist/public/{invoke-agent-B3Osw6K7.js → invoke-agent-CN7mSV0Z.js} +1 -1
- package/dist/public/main/index.html +28 -29
- package/dist/public/main/memory/index.html +28 -29
- package/dist/public/main/memory.html +28 -29
- package/dist/public/main.html +28 -29
- package/dist/public/{markdown-CPbU4r1U.js → markdown-CDSb5Hrl.js} +1 -1
- package/dist/public/{mcp-reconnect-CzROVsXG.js → mcp-reconnect-iPZPihwX.js} +1 -1
- package/dist/public/{memory-storage-BkoMlxOr.js → memory-storage-2m7KZ-aP.js} +1 -1
- package/dist/public/{model-ranking-CK0iBo3Z.js → model-ranking-BgOSaNIy.js} +1 -1
- package/dist/public/{move-group-entry-CTxoq7lw.js → move-group-entry-CXneuNVa.js} +1 -1
- package/dist/public/orchestrator-DBO4NZqd.js +63 -0
- package/dist/public/{orchestrator-BrDjQbGf.js → orchestrator-Dyylc8IU.js} +2 -2
- package/dist/public/{peerjs-CgF4Iz5W.js → peerjs-l0jiBoh6.js} +1 -1
- package/dist/public/{process-peer-query-param-BL2k0Hu-.js → process-peer-query-param-s-aSP1Rq.js} +1 -1
- package/dist/public/{process-pending-shared-payloads-C1AgGvn8.js → process-pending-shared-payloads-BN3GigPT.js} +1 -1
- package/dist/public/{process-room-query-param-DM0QCq3_.js → process-room-query-param-B2Qe0F0M.js} +1 -1
- package/dist/public/provider-YPZmsuHR.js +1 -0
- package/dist/public/{push-client-DJEOz7bi.js → push-client-B2LC8Qp9.js} +1 -1
- package/dist/public/{rooms-C6LXIJl4.js → rooms-ChCEOvkw.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/shadow-claw-Br8mWDUx.js +1176 -0
- package/dist/public/{shadow-claw-accounts--4hd_oCz.js → shadow-claw-accounts-Dm6G7KMP.js} +1 -1
- package/dist/public/{shadow-claw-card-IbNlZAdK.js → shadow-claw-card-CggS8uSa.js} +1 -1
- package/dist/public/{shadow-claw-channels-Vq_pPGa2.js → shadow-claw-channels-088vhuWO.js} +1 -1
- package/dist/public/{shadow-claw-chat-D7_GS25e.js → shadow-claw-chat-BRwRlq-n.js} +3 -3
- package/dist/public/{shadow-claw-control-plane-WTMEV8_p.js → shadow-claw-control-plane-rhKACK85.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CLQgU1IT.js → shadow-claw-conversations-CF_yUfKl.js} +1 -1
- package/dist/public/{shadow-claw-empty-state-D4CrFGsN.js → shadow-claw-empty-state-CkpOSXCS.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-BhqiqLWQ.js → shadow-claw-file-viewer-DWCejuY3.js} +4 -4
- package/dist/public/{shadow-claw-files-senDiG9l.js → shadow-claw-files-L6_ioyzh.js} +2 -2
- package/dist/public/{shadow-claw-git-DOOCqY23.js → shadow-claw-git-DsdkwLqQ.js} +2 -2
- package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-CSbRTOm3.js} +1 -1
- package/dist/public/{shadow-claw-llm-actYICAk.js → shadow-claw-llm-BitaeAVc.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-gSbV5riy.js} +1 -1
- package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-Dn_y6Cl9.js} +1 -1
- package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-Cj4Lqx8U.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-DR4OZFt2.js} +1 -1
- package/dist/public/{shadow-claw-page-header-action-button-2DH5O1TD.js → shadow-claw-page-header-action-button-BnCV_2Kb.js} +1 -1
- package/dist/public/{shadow-claw-pages-3r5I-wI8.js → shadow-claw-pages-mpDOtNYj.js} +6 -6
- package/dist/public/{shadow-claw-pdf-viewer-BiCEwsoY.js → shadow-claw-pdf-viewer-DZ_84qJH.js} +1 -1
- package/dist/public/{shadow-claw-settings-DgB9RSZN.js → shadow-claw-settings-CfFTYTEy.js} +2 -2
- package/dist/public/{shadow-claw-storage-JB_43nd8.js → shadow-claw-storage-DLmiT4bG.js} +1 -1
- package/dist/public/{shadow-claw-task-server-oi5UIxdA.js → shadow-claw-task-server-BoMBCsiS.js} +1 -1
- package/dist/public/{shadow-claw-tasks-CnyiOt81.js → shadow-claw-tasks-ChEp1j7x.js} +3 -3
- package/dist/public/{shadow-claw-terminal-BC3RynHt.js → shadow-claw-terminal-BaoVbOda.js} +1 -1
- package/dist/public/{shadow-claw-toast-YjG--2Za.js → shadow-claw-toast-e8oz7z6Z.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bbwk4vlT.js → shadow-claw-tools-BYjUBiJz.js} +1 -1
- package/dist/public/{shadow-claw-webvm-HZqzl2H5.js → shadow-claw-webvm-xGb13TME.js} +1 -1
- package/dist/public/{sync-web-mcp-registration-BaH2nAP0.js → sync-web-mcp-registration-CQluj-Kz.js} +1 -1
- package/dist/public/{system-prompt-Dck3N8T0.js → system-prompt-CTJn0tK-.js} +1 -1
- package/dist/public/{tools-DHA1dK2I.js → tools-D-52Zmfc.js} +1 -1
- package/dist/public/{transformers-C-DuTM2K.js → transformers-CQ9ss9rD.js} +1 -1
- package/dist/public/{upload-group-file-Cejr3zo1.js → upload-group-file-A8kB7lvO.js} +1 -1
- package/dist/public/{webmcp-CMRtu57-.js → webmcp-DIUZjVF5.js} +1 -1
- package/dist/public/{write-group-file-CmJuVQNO.js → write-group-file-R67DjJ-q.js} +1 -1
- package/dist/public/{write-group-file-bytes-Cejr3zo1.js → write-group-file-bytes-A8kB7lvO.js} +1 -1
- package/dist/public/{zip-reader-CuQ13eLe.js → zip-reader-DN7FB-Q0.js} +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-BFziiMKt.js +0 -7
- package/dist/cli/chunk-BM3llsxb.js +0 -1
- package/dist/cli/chunk-Bj5qFsDi.js +0 -7
- package/dist/cli/chunk-Bj95zm-y.js +0 -1
- package/dist/cli/chunk-BpyP-esT.js +0 -1
- package/dist/cli/chunk-CX696s3_.js +0 -1
- package/dist/cli/chunk-DRxCrCAA.js +0 -139
- package/dist/cli/chunk-DjbCHa0h.js +0 -1
- package/dist/cli/chunk-DsQhAF31.js +0 -1
- package/dist/cli/chunk-VM-dECyG.js +0 -1
- package/dist/cli/chunk-heu2xRw1.js +0 -1
- package/dist/lib/orchestrator-i_QJ-o22.js.map +0 -1
- package/dist/lib/shadow-claw-DoQ7fgl5.js.map +0 -1
- package/dist/public/app-routes-V_-URXc5.js +0 -1
- package/dist/public/attachment-capabilities-B6ibLwQB.js +0 -1
- package/dist/public/config-C-YdSFZB.js +0 -1
- package/dist/public/get-group-dir-DL44kvqW.js +0 -1
- package/dist/public/init-control-plane-BoJijVtf.js +0 -1
- package/dist/public/orchestrator-CaUpEVkQ.js +0 -63
- package/dist/public/provider-DNIL4-Hw.js +0 -1
- package/dist/public/shadow-claw-DdgeYPg5.js +0 -1176
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
|
|
3
3
|
"name": "shadow-claw",
|
|
4
|
-
"version": "1.59.
|
|
4
|
+
"version": "1.59.7",
|
|
5
5
|
"description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
|
|
6
6
|
"title": "ShadowClaw MCP Server",
|
|
7
7
|
"websiteUrl": "https://xt-ml.github.io/shadow-claw/",
|
|
@@ -13,19 +13,27 @@
|
|
|
13
13
|
{
|
|
14
14
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/favicon.svg",
|
|
15
15
|
"mimeType": "image/svg+xml",
|
|
16
|
-
"sizes": [
|
|
16
|
+
"sizes": [
|
|
17
|
+
"any"
|
|
18
|
+
]
|
|
17
19
|
},
|
|
18
20
|
{
|
|
19
21
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/512.png",
|
|
20
22
|
"mimeType": "image/png",
|
|
21
|
-
"sizes": [
|
|
23
|
+
"sizes": [
|
|
24
|
+
"512x512"
|
|
25
|
+
]
|
|
22
26
|
}
|
|
23
27
|
],
|
|
24
28
|
"remotes": [
|
|
25
29
|
{
|
|
26
30
|
"type": "streamable-http",
|
|
27
31
|
"url": "http://localhost:8888/mcp",
|
|
28
|
-
"supportedProtocolVersions": [
|
|
32
|
+
"supportedProtocolVersions": [
|
|
33
|
+
"2026-07-28",
|
|
34
|
+
"2025-11-25",
|
|
35
|
+
"2024-11-05"
|
|
36
|
+
],
|
|
29
37
|
"headers": [
|
|
30
38
|
{
|
|
31
39
|
"name": "MCP-Protocol-Version",
|
package/.well-known/mcp.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
|
|
3
3
|
"name": "shadow-claw",
|
|
4
|
-
"version": "1.59.
|
|
4
|
+
"version": "1.59.7",
|
|
5
5
|
"description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
|
|
6
6
|
"title": "ShadowClaw MCP Server",
|
|
7
7
|
"websiteUrl": "https://xt-ml.github.io/shadow-claw/",
|
|
@@ -13,19 +13,27 @@
|
|
|
13
13
|
{
|
|
14
14
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/favicon.svg",
|
|
15
15
|
"mimeType": "image/svg+xml",
|
|
16
|
-
"sizes": [
|
|
16
|
+
"sizes": [
|
|
17
|
+
"any"
|
|
18
|
+
]
|
|
17
19
|
},
|
|
18
20
|
{
|
|
19
21
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/512.png",
|
|
20
22
|
"mimeType": "image/png",
|
|
21
|
-
"sizes": [
|
|
23
|
+
"sizes": [
|
|
24
|
+
"512x512"
|
|
25
|
+
]
|
|
22
26
|
}
|
|
23
27
|
],
|
|
24
28
|
"remotes": [
|
|
25
29
|
{
|
|
26
30
|
"type": "streamable-http",
|
|
27
31
|
"url": "http://localhost:8888/mcp",
|
|
28
|
-
"supportedProtocolVersions": [
|
|
32
|
+
"supportedProtocolVersions": [
|
|
33
|
+
"2026-07-28",
|
|
34
|
+
"2025-11-25",
|
|
35
|
+
"2024-11-05"
|
|
36
|
+
],
|
|
29
37
|
"headers": [
|
|
30
38
|
{
|
|
31
39
|
"name": "MCP-Protocol-Version",
|
package/dist/cli/build/build.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{t as runBuild}from"../chunk-
|
|
1
|
+
export{t as runBuild}from"../chunk-C5ypckWC.js";
|
|
@@ -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-CZdCRqNe.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 b,t as te,u as ne}from"./chunk-CeGycQxn.js";import{C as re,S as ie,b as ae,c as oe,f as se,n as ce,o as le,p as ue,r as x,u as de,v as fe,x as pe,y as me}from"./chunk-BcxWvEHa.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-COWjYQhe.js";import{t as Ce}from"./chunk-107J87Ou.js";import{a as we,i as Te,r as Ee,t as De}from"./chunk-BeREXUw8.js";import{t as Oe}from"./chunk-mjuZTMQB.js";import{n as ke,r as Ae,t as je}from"./chunk-JGMWNwO9.js";import{n as Me,t as Ne}from"./chunk-BU-vs0np.js";import{r as Pe,t as Fe}from"./chunk-DPoeMCv9.js";import{t as Ie}from"./chunk-CgadgaEw.js";import{a as Le,c as Re,d as ze,f as Be,h as Ve,i as He,l as Ue,m as We,n as Ge,o as C,p as Ke,r as qe,s as Je,t as Ye,u as Xe}from"./chunk-ZJVBMLyZ.js";import{t as Ze}from"./chunk-CeGMLWmo.js";import{n as Qe,r as $e,t as et}from"./chunk-CLS1vG53.js";import{r as tt}from"./chunk-BbpS-dVt.js";import{A as nt,B as rt,C as it,D as at,E as ot,F as st,H as ct,I as lt,L as ut,M as dt,N as ft,O as pt,P as mt,S as ht,T as gt,V as _t,_ as vt,a as yt,b as bt,c as xt,d as St,f as w,g as Ct,h as wt,i as Tt,j as Et,k as Dt,l as Ot,m as kt,n as At,o as jt,p as T,r as Mt,s as Nt,t as Pt,u as Ft,v as E,w as It,x as Lt,y as Rt,z as zt}from"./chunk-DEgE46ki.js";import{n as Bt}from"./chunk-DVKHLRUO.js";import{n as Vt,t as Ht}from"./chunk-1VdYkt-J.js";import{a as Ut,c as Wt,l as Gt,s as Kt,u as qt}from"./chunk-D0Xq-Muz.js";import{n as Jt,r as Yt,t as Xt}from"./chunk-CMEzBK2J.js";import{a as Zt,i as Qt,t as $t}from"./chunk-CuwzD5GU.js";import D from"process";import"buffer";import{lookup as en}from"node:dns";function O(e){if(!e||e===`/`)return`/`;let t=e.endsWith(`/`)&&e!==`/`?e.slice(0,-1):e;t.startsWith(`/`)||(t=`/${t}`);let n=t.split(`/`).filter(e=>e&&e!==`.`),r=[];for(let e of n)e===`..`?r.pop():r.push(e);return`/${r.join(`/`)}`||`/`}function tn(e,t){if(e.includes(`\0`))throw Error(`ENOENT: path contains null byte, ${t} '${e}'`)}function nn(e){let t=O(e);if(t===`/`)return`/`;let n=t.lastIndexOf(`/`);return n===0?`/`:t.slice(0,n)}function rn(e,t){return t.startsWith(`/`)?O(t):O(e===`/`?`/${t}`:`${e}/${t}`)}function an(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function on(e,t){return t.startsWith(`/`)?O(t):O(an(nn(e),t))}function sn(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 cn(e){return e?e.startsWith(`text/`)||e===`json`||e===`xml`||e===`javascript`||e===`csv`||e===`markdown`:!1}function ln(e){let t=sn(e);if(t===0)return 0;switch(e.mediaType){case`image`:return 1500;case`audio`:return 1500;case`video`:return 2500;default:return cn(e.mimeType)?Math.ceil(t/4):Math.ceil(t/16)}}function un(e){return e?Math.ceil(e.length/4):0}function dn(e){let t=0;if(typeof e.content==`string`)t=un(e.content);else if(Array.isArray(e.content))for(let n of e.content)if(n.type===`text`&&n.text)t+=un(n.text);else if(n.type===`tool_use`)t+=un(n.name),t+=un(JSON.stringify(n.input));else if(n.type===`tool_result`){let e=n.content;t+=un(typeof e==`string`?e:JSON.stringify(e))}else n.type===`attachment`&&(t+=un(n.fileName),t+=un(n.mimeType),t+=un(n.path),t+=ln(n));return t+4}function fn(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 pn(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=>mn(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=dn(e),f<=o&&(d=e))}let p=o-f;for(let e=c.length-1;e>=+!!d;e--){let t=dn(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+=dn(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 mn(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:fn(e.content,t)}:e);return{...e,content:n}}const hn=[/<\|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 gn(e){for(let t of hn)if(t.test(e))return!0;return!1}function _n(e){let t=String(e||``),n=t;for(let e of hn)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`)),t}function vn(e,t){let n=_n(e);return n!==e&&gn(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 yn(e,t,n,r){return{type:`thinking-log`,payload:{groupId:e,level:t,timestamp:Date.now(),label:n,message:r||``}}}function bn(e,t,n){return{type:`tool-activity`,payload:{groupId:e,tool:t,status:n}}}const xn=`keys`,Sn=`api-key-encryption`;function Cn(){return new Promise((e,t)=>{let n=indexedDB.open(`shadowclaw-keystore`,1);n.onupgradeneeded=()=>{n.result.createObjectStore(xn)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function wn(){let e=await Cn();if(!e)return null;let t=await new Promise((t,n)=>{let r=e.transaction(xn,`readonly`).objectStore(xn).get(Sn);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(xn,`readwrite`);i.objectStore(xn).put(n,Sn),i.oncomplete=()=>t(),i.onerror=()=>r(i.error)})}finally{e.close()}return n}async function Tn(e){let t=await wn();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 En(e){let t=await wn();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 Dn(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 On(e){return Dn(e)}function kn(e,t){return On(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function An(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await En(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await En(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await qt(e,x.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 Tn(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await Tn(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 jn(e,t){if(e.oauthProviderId){let t=fe(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(ue))if([e.providerId,...e.aliases||[]].map(e=>e.toLowerCase()).some(e=>n.some(t=>t.includes(e))))return e;return null}function Mn(e,t){let n=On(e),r=jn(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 Nn(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 Pn(e,t){return e.length?t&&e.find(e=>On(e)===t)||e[0]:void 0}async function Fn(e,t,n={}){let r=await S(e,x.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=Nn(i,t);a=n.authMode?Pn(e,n.authMode):Pn(e,e[0]?jn(e[0],t)?.defaultMode:void 0)}if(!a){let t=await S(e,x.SERVICE_DEFAULT_ACCOUNT);t&&(a=i.find(e=>e.id===t))}if(!a&&n.authMode&&(a=Pn(i,n.authMode)),a||=i[0],!a)return;if(kn(a,n)&&(a=await An(e,i,a)),On(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 En(a.token)??``);let{headerName:s,headerPrefix:c}=Mn(a,t),l=o;On(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:On(a)}}function In(e){return Dn(e)}function Ln(e){switch(e){case`azure-devops`:return`azure_devops`;default:return e}}function Rn(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 zn(e){if(e.reauthRequired)return{};let t=e.provider||Rn(e.hostPattern||``),n=Ln(t),r=e.authMode||`token`;if(e.token&&n===`azure_devops`&&ie(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=ie(n,r,`git_remote`);return t?.headerName?{[t.headerName]:`${t.headerPrefix||``}${e.token}`}:{Authorization:`Bearer ${e.token}`}}return{}}function Bn(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return n?t.hostname+n:t.hostname}catch{return}}function Vn(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 Hn(e,t){if(!e.length)return;if(!t)return e[0];let n=e.find(e=>In(e)===t);if(n)return n;if(t===`token`){let t=e.find(e=>In(e)===`token`&&!e.authMode);if(t)return t}return e[0]}async function Un(e){if(e)return await En(e)??void 0}function Wn(e,t){return In(e)!==`oauth`||e.oauthReauthRequired||!e.refreshToken||!e.oauthProviderId||!e.oauthClientId?!1:t.forceRefresh?!0:e.accessTokenExpiresAt?e.accessTokenExpiresAt<=Date.now()+6e4:!1}async function Gn(e,t,n){if(!n.refreshToken||!n.oauthProviderId||!n.oauthClientId)return n;let r=await Un(n.refreshToken);if(!r)return n;let i=n.oauthClientSecret?await Un(n.oauthClientSecret):void 0,a=async r=>{let i=t.findIndex(e=>e.id===n.id);i!==-1&&(t[i]=r,await qt(e,x.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 Tn(t.accessToken);if(!s)return o();let c=n.refreshToken;if(t.refreshToken){let e=await Tn(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 Kn(e,t,n={}){let r=await S(e,x.GIT_ACCOUNTS);return Array.isArray(r)&&r.length>0?qn(e,r,t,n):Jn(e)}async function qn(e,t,n,r={}){let i;if(r.accountId&&(i=t.find(e=>e.id===r.accountId)),!i&&n){let e=Bn(n);e&&(i=Hn(Vn(t,e),r.authMode))}if(!i){let r=await S(e,x.GIT_DEFAULT_ACCOUNT);if(r){let e=t.find(e=>e.id===r);if(e){if(!n)i=e;else{let t=Bn(n);if(t&&e.hostPattern){let n=t?.toLowerCase(),r=e.hostPattern.toLowerCase();n?.includes(r)&&(i=e)}}}}}if(!i&&!n&&r.authMode&&(i=Hn(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};Wn(i,r)&&(i=await Gn(e,t,i));let a=i.provider||Rn(i.hostPattern||``);return In(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:In(i),authorEmail:i.authorEmail||void 0,authorName:i.authorName||void 0,hostPattern:i.hostPattern||void 0,password:await Un(i.password),provider:a,token:await Un(i.token),username:i.username||void 0}}async function Jn(e){let t=await S(e,x.GIT_TOKEN),n=await S(e,x.GIT_PASSWORD);return{authMode:`token`,authorEmail:await S(e,x.GIT_AUTHOR_EMAIL)||void 0,authorName:await S(e,x.GIT_AUTHOR_NAME)||void 0,password:n?await Un(n):void 0,provider:`generic`,token:t?await Un(t):void 0,username:await S(e,x.GIT_USERNAME)||void 0}}function Yn(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 Xn(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 Zn(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`||!Yn(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:Xn(t.credentialRef,t.serviceType)}}async function Qn(e){let t=await S(e,x.REMOTE_MCP_CONNECTIONS);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=Zn(e);t&&n.push(t)}return n}async function $n(e){return Qn(e)}async function er(e,t){if(!t)return null;let n=await Qn(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}function tr(e){return e===`oauth`?`oauth`:`token`}async function nr(e,t,n={}){let r=await er(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 En(i.encryptedValue);return{connection:r,authType:`custom_header`,headers:e?{[i.headerName]:e}:{}}}let a=tr(i.authType);if(i.accountId){let t=await Fn(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 Kn(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:zn(t)}}return{connection:r,authType:i.authType,headers:{}}}const rr=/* @__PURE__ */ new Map;function ir(e){return typeof e==`object`&&!!e&&`method`in e&&`id`in e&&!(`result`in e)&&!(`error`in e)}function ar(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 or=class extends Error{constructor(e){super(e),this.name=`InvalidRemoteMcpSessionError`}},sr=class extends Error{status;constructor(e,t){super(t),this.name=`HttpRemoteMcpError`,this.status=e}},cr=class extends Error{connectionId;constructor(e){super(`OAuth reconnect required for remote MCP connection`),this.name=`McpReauthRequiredError`,this.connectionId=e}};function lr(e,t){return!e.headers||typeof e.headers.get!=`function`?null:e.headers.get(t)}function ur(e){return/no valid session id provided/i.test(e)}function dr(e,t){let n=t&&`error`in t?t.error.message||`Remote MCP JSON-RPC error`:``;return ur(n)?new or(n):e.ok?Error(n||`Remote MCP JSON-RPC error`):new sr(e.status,n?`Remote MCP HTTP error: ${e.status} (${n})`:`Remote MCP HTTP error: ${e.status}`)}function fr(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 pr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function mr(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=(lr(r,`content-type`)||``).toLowerCase(),a=null;if(typeof r.text==`function`){let e=await r.text();a=i.includes(`text/event-stream`)?fr(e):pr(e)}else try{a=await r.json()}catch{a=null}return{response:r,payload:a}}async function hr(e,t,n){let{response:r,payload:i}=await mr(e,{...t,"mcp-session-id":n},{jsonrpc:`2.0`,method:`notifications/initialized`,params:{}});if(!r.ok||i&&`error`in i)throw dr(r,i)}async function gr(e,t,n){let r=rr.get(e);if(r?.sessionId)return r;let{response:i,payload:a}=await mr(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 dr(i,a);let o=lr(i,`mcp-session-id`)||`local-${Date.now()}-${Math.random().toString(36).slice(2)}`,s={sessionId:o,protocolVersion:lr(i,`mcp-protocol-version`)||a?.result?.protocolVersion,lastUsedAt:Date.now()};return await hr(t,n,o),rr.set(e,s),s}async function _r(e,t,n,r,i){let a=await gr(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 mr(t,o,a),l=0;for(;ir(c)&&l<5&&(l++,c.method===`elicitation/create`);){let e=ar(c.params||{});({response:s,payload:c}=await mr(t,o,{jsonrpc:`2.0`,id:c.id,result:{action:`accept`,content:e}}))}if(ir(c))throw Error(`Unsupported server request: ${c.method}`);if(!s.ok||!c||`error`in c)throw dr(s,c);return c.result};try{let t=await o(a.sessionId);return a.lastUsedAt=Date.now(),rr.set(e,a),t}catch(r){if(!(r instanceof or))throw r;rr.delete(e),a=await gr(e,t,n);let i=await o(a.sessionId);return a.lastUsedAt=Date.now(),rr.set(e,a),i}}function vr(e){e&&rr.delete(e)}async function yr(e,t,n,r){let i=await nr(e,t);if(!i)throw Error(`Remote MCP connection not found`);if(i.reauthRequired)throw new cr(t);let{connection:a,authType:o,headers:s}=i;if(a.transport!==`streamable_http`)throw Error(`Unsupported remote MCP transport`);try{return await _r(t,a.serverUrl,s,n,r)}catch(i){if(!(i instanceof sr)||i.status!==401||o!==`oauth`)throw i;vr(t);let a=await nr(e,t,{forceRefresh:!0});if(!a||a.reauthRequired)throw new cr(t);try{return await _r(t,a.connection.serverUrl,a.headers,n,r)}catch(e){throw e instanceof sr&&e.status===401?new cr(t):e}}}async function br(e,t){let n=await yr(e,t,`tools/list`);return Array.isArray(n.tools)?n.tools:[]}async function xr(e,t,n,r={}){return yr(e,t,`tools/call`,{name:n,arguments:r})}let Sr=null;function Cr(e){Sr=e}const wr=/* @__PURE__ */ new Map;function Tr(e,t){wr.set(e,t)}function Er(e){wr.delete(e)}function k(e){let t=e?.payload?.groupId;t&&wr.has(t)?wr.get(t).push(e):Sr?Sr(e):typeof self<`u`&&typeof self.postMessage==`function`&&self.postMessage(e)}const Dr=/* @__PURE__ */ new Set;async function Or(){Nr()}async function kr(e,t=900,n=null){{let e=jr();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?`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as e,v as t}from"./chunk-
|
|
1
|
+
import{f as e,v as t}from"./chunk-iB8OoMmW.js";import{t as n}from"./chunk-BChOKoxf.js";import{t as r}from"./chunk-gAdqVxWq.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-DKAtC-O0.js";import{_ as p,b as m,g as h,l as g,r as _,s as v,y}from"./chunk-DZyBXNgc.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 P,O as ee,P as te,R as ne,S as F,T as re,V as I,X as ie,Y as L,Z as ae,_ as oe,a as se,b as R,c as z,d as ce,f as le,g as ue,h as de,i as fe,j as pe,k as me,l as he,m as ge,o as _e,p as ve,q as B,r as ye,s as be,t as xe,u as V,v as Se,w as Ce,x as we,y as Te,z as H}from"./chunk-DhOU6GYX.js";import{i as Ee,n as De,o as Oe,r as ke,t as Ae,u as je}from"./chunk-CsZlU6GT.js";import{n as Me}from"./chunk-ByA6Dh5i.js";import{t as Ne}from"./chunk-CuwzD5GU.js";import{r as Pe,t as Fe}from"./chunk-DvHhfE3l.js";import{createRequire as Ie}from"node:module";import Le,{constants as Re,existsSync as ze}from"node:fs";import U from"node:path";import{fileURLToPath as Be}from"node:url";import{env as Ve}from"node:process";import{exec as He,spawn as Ue}from"node:child_process";import{access as We,mkdir as Ge,readFile as Ke,readdir as qe,rename as Je,rm as Ye,rmdir as Xe,stat as W,unlink as G,writeFile as K}from"node:fs/promises";import{EventEmitter as Ze}from"node:events";import{isIP as Qe}from"node:net";import{runInNewContext as $e}from"node:vm";import{DatabaseSync as et}from"node:sqlite";var tt=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=U.basename(e)}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async getFile(){let e=await Ke(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(Buffer.from(t,`utf8`));else if(t instanceof Uint8Array)e.push(Buffer.from(t));else if(t instanceof ArrayBuffer)e.push(Buffer.from(t));else if(t instanceof Blob){if(typeof t.arrayBuffer==`function`){let n=await t.arrayBuffer();e.push(Buffer.from(n))}else if(typeof t.bytes==`function`){let n=await t.bytes();e.push(Buffer.from(n))}else if(typeof t.text==`function`){let n=await t.text();e.push(Buffer.from(n,`utf8`))}else if(t._buffer)e.push(Buffer.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(Buffer.from(n))}}else t&&typeof t==`object`&&`data`in t?await n(t.data):e.push(Buffer.from(new Uint8Array(t)))};return{write:n,async close(){let n=Buffer.concat(e);await K(t,n)}}}},nt=class e{kind=`directory`;name;_path;_rootPath;constructor(e,t){this._path=U.resolve(e),this._rootPath=t?U.resolve(t):this._path,this.name=U.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=U.resolve(this._path,e),n=U.relative(this._path,t),r=U.relative(this._rootPath,t);if(n.startsWith(`..`)||U.isAbsolute(n)||r.startsWith(`..`)||U.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 Ge(r,{recursive:!0});else if(!ze(r)){let e=/* @__PURE__ */ Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}if(!(await W(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)ze(n)||await K(n,``);else if(!ze(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await W(n)).isDirectory()){let t=/* @__PURE__ */ Error(`TypeMismatchError: "${e}" is a directory, not a file`);throw t.name=`TypeMismatchError`,t}return new tt(n)}async*entries(){let t;try{t=await qe(this._path)}catch{return}for(let n of t){let t=U.join(this._path,n);try{(await W(t)).isDirectory()?yield[n,new e(t,this._rootPath)]:yield[n,new tt(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(!ze(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await W(n)).isDirectory()){if(t?.recursive)await Ye(n,{recursive:!0});else try{await Xe(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 G(n)}};let rt=null;function it(){return rt}function at(e){rt=U.resolve(e),d(new nt(e))}globalThis.__setStorageRootFromPath=at,globalThis.__getStorageRootPath=it;const ot=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=it?.()??globalThis.__getStorageRootPath?.()??process.cwd(),a=He(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())});ne(ot),globalThis.__headlessBashExecutor=ot;function st(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 q(e,t,n,r){H(P(e,t,n,r))}async function*ct(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(`
|
|
@@ -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-CZdCRqNe.js";import{t as c}from"./chunk-BChOKoxf.js";import{b as l,m as u,o as d,r as f}from"./chunk-BcxWvEHa.js";import{t as p}from"./chunk-Dl4zTOqg.js";import{t as m}from"./chunk-IVWoxOkm.js";import{t as h}from"./chunk-BeREXUw8.js";import{t as g}from"./chunk-2gZFafgY.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-3vNYrs_L.js";import{l as ee,u as j}from"./chunk-D0Xq-Muz.js";import{r as M,t as N}from"./chunk-CMEzBK2J.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,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./chunk-COWjYQhe.js";import{t}from"./chunk-BJhHc8Uw.js";import{t as n}from"./chunk-
|
|
1
|
+
import{i as e}from"./chunk-COWjYQhe.js";import{t}from"./chunk-BJhHc8Uw.js";import{t as n}from"./chunk-CncW6_WL.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-107J87Ou.js";import{n as o,r as s,t as c}from"./chunk-BeREXUw8.js";import{t as l}from"./chunk-2gZFafgY.js";import u,{existsSync as d}from"node:fs";import f from"node:path";import p from"node:process";import{spawn as m}from"node:child_process";import{access as h,constants as g,cp as _,mkdir as v,mkdtemp as y,readFile as b,readdir as x,rm as S,stat as C,writeFile as w}from"node:fs/promises";import{tmpdir as T}from"node:os";import E from"node:readline/promises";import D from"node:tty";function O(){let e=p.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if((typeof t!=`string`||n[0]!==`ExperimentalWarning`&&!t.includes(`ExperimentalWarning`)&&!t.includes(`SQLite`))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(p,t,...n)};t.__suppressed=!0,p.emitWarning=t}O();const k=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function A(e){try{return await h(e,g.F_OK),!0}catch{return!1}}async function j(e,t){let n=[];if(e&&n.push(f.resolve(e)),t){let e=f.resolve(t);n.includes(e)||n.push(e)}if(e&&f.basename(f.resolve(e))===`.cache`){let t=f.dirname(f.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of k){let n=f.join(e,t);if(await A(n))try{let e=await b(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function M(){return f.join(T(),`shadow-claw`)}function N(e){let t=f.resolve(e||p.cwd()),n=[f.join(t,`shadow-claw-config.json`),f.join(t,`shadow-claw.config.json`),f.join(t,`shadowclaw.config.json`),f.join(t,`pages`,`shadow-claw-config.json`),f.join(t,`pages`,`shadow-claw.config.json`),f.join(t,`site-config.json`),f.join(t,`pages`,`site-config.json`)];for(let e of n)if(u.existsSync(e))try{let n=u.readFileSync(e,`utf8`),r=JSON.parse(n);if(r&&typeof r.cacheDir==`string`&&r.cacheDir.trim())return f.resolve(t,r.cacheDir.trim());if(r&&r.server&&typeof r.server.cacheDir==`string`&&r.server.cacheDir.trim())return f.resolve(t,r.server.cacheDir.trim())}catch{}return null}function P(e,t=`.cache`){let n=f.resolve(e||p.cwd()),r=f.join(n,t),i=f.join(r,`database`),a=[r,f.join(r,`control-token.json`),f.join(r,`cli-peer-id`),i,f.join(i,`clients.db`),f.join(i,`agent.db`),f.join(i,`scheduled-tasks.db`),f.join(i,`push-subscriptions.db`),f.join(n,`database`,`clients.db`),f.join(n,`database`,`agent.db`)];for(let e of a)if(u.existsSync(e))return!0;return!1}async function F({contentRoot:e,stdin:t=p.stdin,stdout:n=p.stdout,onExit:r=e=>p.exit(e)}={}){let i=f.resolve(e||p.cwd()),a=f.join(i,`.cache`),o=M(),s=t,c=n,l=!1,d=null;if(t===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;d=u.openSync(e,`r`),s=new D.ReadStream(d),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=u.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let m=E.createInterface({input:s,output:c}),h=!1,g=()=>{if(!h){h=!0,c.write(`
|
|
2
2
|
Operation cancelled.
|
|
3
3
|
`);try{m.close()}catch{}r(130)}};m.on(`SIGINT`,g),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,g);let _=()=>g();p.on(`SIGINT`,_);let v=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&g()};s&&typeof s.on==`function`&&s.on(`data`,v);try{c.write(`
|
|
4
4
|
ShadowClaw needs a directory to store cache and database files:
|
|
@@ -12,18 +12,18 @@ ShadowClaw needs a directory to store cache and database files:
|
|
|
12
12
|
|
|
13
13
|
`);let e=(await m.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return n.write(`Using current directory cache: ${a}\n\n`),a;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return n.write(`Using temporary directory: ${o}\n\n`),o;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await m.question(`Use temporary directory (${o}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(n.write(`Operation cancelled.
|
|
14
14
|
`),r(0),o):(n.write(`Using temporary directory: ${o}\n\n`),o)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await m.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${a}\n\n`),a;let t=f.resolve(i,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=f.resolve(i,e);return c.write(`Using directory: ${t}\n\n`),t}finally{p.removeListener(`SIGINT`,_),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,g),s.removeListener(`data`,v));try{m.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(d!=null)try{u.closeSync(d)}catch{}}}}async function I(e={}){let t=f.resolve(e.contentRoot||p.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_TMP||p.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=M();return{cacheDir:n,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(n,`database`)}}let n=(e.cacheDir||p.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=f.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(r,`database`)}}let r=(e.databaseDir||p.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=f.resolve(t,r);return{cacheDir:f.basename(e)===`database`?f.dirname(e):f.resolve(e,`..`),databaseDir:e}}let i=N(t);if(i)return{cacheDir:i,databaseDir:f.join(i,`database`)};let a=P(t),o=f.join(t,`.cache`),s=f.join(o,`database`);if(a||e.yes||e.y||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:o,databaseDir:s};let c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI;if(!u||d||e.quiet)return{cacheDir:o,databaseDir:s};let m=await F({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:f.join(m,`database`)}}function L(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function R(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,i;if(e.workspace)r=f.resolve(e.workspace),i=e.databaseDir?f.resolve(e.databaseDir):e.cacheDir?f.resolve(e.cacheDir,`database`):f.resolve(r,`database`);else{let t=await I({contentRoot:p.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=f.join(T(),`shadow-claw`);await v(n,{recursive:!0}),r=await y(f.join(n,`workspace-`)),i=t.databaseDir}await v(r,{recursive:!0}),await v(i,{recursive:!0});let a=f.join(i,`agent.db`),o=t.openSqliteDatabase(a);t.setDB(o),t.setStorageRootFromPath(r);let s=(await j(r))?.config||{},c=s.settings||{},l=e.internetAccess??e.allowInternet??c.internetAccess??c.vm_bash_full_internet_access??c.fullInternetAccess??s.internetAccess;if(l!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(o,e,l?`true`:`false`)}let u={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{L(t,o,e.payload)}};return t.setPostHandler(e=>{u[e.type]?.(e)}),{db:o,workspaceDir:r,dbPath:a,core:t}}function z(e={}){let{force:t=!1,stdin:n=p.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function B(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function V(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function ee(t){let n=[];for(let r of t){let t=f.resolve(r),i;try{i=await b(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let a=f.basename(t),o=e(a,``);n.push({fileName:a,mimeType:o,size:i.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(i)],{type:o})}})}return n}async function H(e){try{let t=f.join(f.resolve(e),`skills-lock.json`),n=await b(t,`utf8`);return JSON.parse(n)}catch{return null}}async function U(e,t){try{let n=f.join(f.resolve(e),`skills-lock.json`),r=await b(n,`utf8`),i=JSON.parse(r);if(i?.skills?.[t])return delete i.skills[t],await w(n,JSON.stringify(i,null,2)+`
|
|
15
|
-
`,`utf8`),!0}catch{}return!1}async function W(e,t,n={}){let r=t.trim().toLowerCase().replace(/[^a-z0-9-_]/g,`-`);if(!r)throw Error(`Skill name is required`);let i=n.flat===!1?f.join(`.agents`,`skills`,`main`,r):f.join(`.agents`,`skills`,r),a=f.join(f.resolve(e),i),o=f.join(a,`SKILL.md`);await v(a,{recursive:!0});let s=`---\nname: ${r}\ndescription: ${n.description||`Instructions and workflow for the ${r} skill.`}\n---\n\n# ${r}\n\nProvide step-by-step instructions for the agent when this skill is activated.\n`;return await w(o,s,`utf8`),{name:r,path:f.posix.join(...i.split(f.sep),`SKILL.md`)}}function G(){let e=p.platform===`win32`,t=e?`npx.cmd`:`npx`;try{let n=f.join(f.dirname(p.execPath),t);if(d(n))return{command:n,shell:e}}catch{}return{command:t,shell:e}}function K(e,t={}){let n=f.resolve(t.workspaceDir||p.cwd()),{command:r,shell:i}=G(),a=[`--yes`,`skills`,...e];return t.execFn?t.execFn(r,a,{cwd:n,env:p.env,timeoutMs:t.timeoutMs,shell:i}).then(e=>({success:e.exitCode===0,exitCode:e.exitCode??0,stdout:e.stdout||``,stderr:e.stderr||``})).catch(e=>({success:!1,exitCode:1,stdout:``,stderr:String(e),error:String(e)})):new Promise(t=>{let a=m(r,[`--yes`,`skills`,...e],{cwd:n,env:p.env,stdio:[`ignore`,`pipe`,`pipe`],shell:i}),o=``,s=``;a.stdout?.on(`data`,e=>o+=String(e)),a.stderr?.on(`data`,e=>s+=String(e)),a.on(`error`,e=>{t({success:!1,exitCode:1,stdout:o,stderr:s,error:e.message})}),a.on(`close`,e=>{t({success:e===0,exitCode:e??1,stdout:o,stderr:s,...e===0?{}:{error:s||`Process exited with code ${e}`}})})})}async function q(e,t=[]){try{let n=await x(e,{withFileTypes:!0});for(let r of n){if(r.name===`node_modules`||r.name===`.git`)continue;let n=f.join(e,r.name);r.isDirectory()?await q(n,t):r.name.toLowerCase()===`skill.md`&&t.push(n)}}catch{}return t}async function te(e,t,n={}){let r=f.resolve(e.replace(/^file:\/\//,``)),i=f.resolve(t),o=[],s=[],c=[],l=n.skillNames&&n.skillNames.length>0?new Set(n.skillNames):null,u=n.targetSubdir?f.join(i,`.agents`,`skills`,n.targetSubdir):f.join(i,`.agents`,`skills`);try{let e=await q(r);if(e.length===0){let t=f.join(r,`SKILL.md`);try{await C(t),e.push(t)}catch{}}for(let t of e.sort()){let e=f.dirname(t);try{let r=await b(t,`utf8`),i=a(t,r);if(l&&!l.has(i.name))continue;let c=f.join(u,i.name),d=f.join(c,`SKILL.md`),p=!1;try{await C(d),p=!0}catch{}if(p&&!n.overwrite){s.push(i.name);continue}await v(c,{recursive:!0}),await _(e,c,{recursive:!0,force:!0}),o.push(i.name)}catch(t){c.push({name:f.basename(e),error:t instanceof Error?t.message:String(t)})}}}catch(e){c.push({name:f.basename(r),error:e?.message||String(e)})}return{imported:o,skipped:s,failed:c}}async function J(e,t,n=[]){try{let r=await x(e,{withFileTypes:!0});for(let i of r){if(i.name===`node_modules`||i.name===`.git`)continue;let r=f.join(e,i.name);i.isDirectory()?await J(r,t,n):t.includes(f.extname(i.name).toLowerCase())&&n.push(r)}}catch{}return n}async function Y(e,t,n,r={}){let i=f.resolve(t.replace(/^file:\/\//,``)),a=[f.join(i,`.agents`,e),f.join(i,e)];f.basename(i)===e&&a.push(i);let o=e===`tools`?[`.json`]:[`.js`,`.mjs`],s=r.names&&r.names.length>0?new Set(r.names):null,c=r.targetSubdir?f.join(f.resolve(n),`.agents`,e,r.targetSubdir):f.join(f.resolve(n),`.agents`,e),l=[],u=[],d=[],p=/* @__PURE__ */ new Set;for(let t of a)for(let n of(await J(t,o)).sort()){let t=f.basename(n),i=t.replace(/\.[^.]+$/,``);if(!p.has(t)&&(p.add(t),!s||s.has(i)||s.has(t)))try{if(e===`tools`&&!/^[a-z][a-z0-9_]{0,63}$/.test(i))throw Error(`Invalid tool name: ${i}`);let a=f.join(c,t),o=!1;try{await C(a),o=!0}catch{}if(o&&!r.overwrite){u.push(i);continue}await v(c,{recursive:!0}),await _(n,a,{force:!0}),l.push(i)}catch(e){d.push({name:i,error:e?.message||String(e)})}}return{imported:l,skipped:u,failed:d}}function ne(e){let t=(e||``).trim();return!t||/^(?:\.\/|\.\.\/|\/|[a-zA-Z]:[\\/]|file:\/\/)/.test(t)?!1:t.startsWith(`http://`)||t.startsWith(`https://`)?/github\.com|gitlab\.com/i.test(t):/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+(?:@[a-zA-Z0-9_.-]+)?$/.test(t)}const X=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),Z=`server:main`;async function re(e={}){let t;if(e.workspace)t=f.resolve(e.workspace);else{let e=f.join(T(),`shadow-claw`);await v(e,{recursive:!0}),t=await y(f.join(e,`workspace-`))}let n=f.join(t,`.agents`,`skills`),i=f.join(t,`.agents`,`tools`),a=f.join(t,`database`);await v(t,{recursive:!0}),await v(n,{recursive:!0}),await v(i,{recursive:!0}),await v(a,{recursive:!0});let o=e.provider,s=e.model,c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI,m=u&&!d&&!e.quiet&&!e.yes&&!e.y;if(!o&&!s&&m){let{promptForAgentModel:n}=await import(`./chunk-
|
|
16
|
-
`,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-
|
|
15
|
+
`,`utf8`),!0}catch{}return!1}async function W(e,t,n={}){let r=t.trim().toLowerCase().replace(/[^a-z0-9-_]/g,`-`);if(!r)throw Error(`Skill name is required`);let i=n.flat===!1?f.join(`.agents`,`skills`,`main`,r):f.join(`.agents`,`skills`,r),a=f.join(f.resolve(e),i),o=f.join(a,`SKILL.md`);await v(a,{recursive:!0});let s=`---\nname: ${r}\ndescription: ${n.description||`Instructions and workflow for the ${r} skill.`}\n---\n\n# ${r}\n\nProvide step-by-step instructions for the agent when this skill is activated.\n`;return await w(o,s,`utf8`),{name:r,path:f.posix.join(...i.split(f.sep),`SKILL.md`)}}function G(){let e=p.platform===`win32`,t=e?`npx.cmd`:`npx`;try{let n=f.join(f.dirname(p.execPath),t);if(d(n))return{command:n,shell:e}}catch{}return{command:t,shell:e}}function K(e,t={}){let n=f.resolve(t.workspaceDir||p.cwd()),{command:r,shell:i}=G(),a=[`--yes`,`skills`,...e];return t.execFn?t.execFn(r,a,{cwd:n,env:p.env,timeoutMs:t.timeoutMs,shell:i}).then(e=>({success:e.exitCode===0,exitCode:e.exitCode??0,stdout:e.stdout||``,stderr:e.stderr||``})).catch(e=>({success:!1,exitCode:1,stdout:``,stderr:String(e),error:String(e)})):new Promise(t=>{let a=m(r,[`--yes`,`skills`,...e],{cwd:n,env:p.env,stdio:[`ignore`,`pipe`,`pipe`],shell:i}),o=``,s=``;a.stdout?.on(`data`,e=>o+=String(e)),a.stderr?.on(`data`,e=>s+=String(e)),a.on(`error`,e=>{t({success:!1,exitCode:1,stdout:o,stderr:s,error:e.message})}),a.on(`close`,e=>{t({success:e===0,exitCode:e??1,stdout:o,stderr:s,...e===0?{}:{error:s||`Process exited with code ${e}`}})})})}async function q(e,t=[]){try{let n=await x(e,{withFileTypes:!0});for(let r of n){if(r.name===`node_modules`||r.name===`.git`)continue;let n=f.join(e,r.name);r.isDirectory()?await q(n,t):r.name.toLowerCase()===`skill.md`&&t.push(n)}}catch{}return t}async function te(e,t,n={}){let r=f.resolve(e.replace(/^file:\/\//,``)),i=f.resolve(t),o=[],s=[],c=[],l=n.skillNames&&n.skillNames.length>0?new Set(n.skillNames):null,u=n.targetSubdir?f.join(i,`.agents`,`skills`,n.targetSubdir):f.join(i,`.agents`,`skills`);try{let e=await q(r);if(e.length===0){let t=f.join(r,`SKILL.md`);try{await C(t),e.push(t)}catch{}}for(let t of e.sort()){let e=f.dirname(t);try{let r=await b(t,`utf8`),i=a(t,r);if(l&&!l.has(i.name))continue;let c=f.join(u,i.name),d=f.join(c,`SKILL.md`),p=!1;try{await C(d),p=!0}catch{}if(p&&!n.overwrite){s.push(i.name);continue}await v(c,{recursive:!0}),await _(e,c,{recursive:!0,force:!0}),o.push(i.name)}catch(t){c.push({name:f.basename(e),error:t instanceof Error?t.message:String(t)})}}}catch(e){c.push({name:f.basename(r),error:e?.message||String(e)})}return{imported:o,skipped:s,failed:c}}async function J(e,t,n=[]){try{let r=await x(e,{withFileTypes:!0});for(let i of r){if(i.name===`node_modules`||i.name===`.git`)continue;let r=f.join(e,i.name);i.isDirectory()?await J(r,t,n):t.includes(f.extname(i.name).toLowerCase())&&n.push(r)}}catch{}return n}async function Y(e,t,n,r={}){let i=f.resolve(t.replace(/^file:\/\//,``)),a=[f.join(i,`.agents`,e),f.join(i,e)];f.basename(i)===e&&a.push(i);let o=e===`tools`?[`.json`]:[`.js`,`.mjs`],s=r.names&&r.names.length>0?new Set(r.names):null,c=r.targetSubdir?f.join(f.resolve(n),`.agents`,e,r.targetSubdir):f.join(f.resolve(n),`.agents`,e),l=[],u=[],d=[],p=/* @__PURE__ */ new Set;for(let t of a)for(let n of(await J(t,o)).sort()){let t=f.basename(n),i=t.replace(/\.[^.]+$/,``);if(!p.has(t)&&(p.add(t),!s||s.has(i)||s.has(t)))try{if(e===`tools`&&!/^[a-z][a-z0-9_]{0,63}$/.test(i))throw Error(`Invalid tool name: ${i}`);let a=f.join(c,t),o=!1;try{await C(a),o=!0}catch{}if(o&&!r.overwrite){u.push(i);continue}await v(c,{recursive:!0}),await _(n,a,{force:!0}),l.push(i)}catch(e){d.push({name:i,error:e?.message||String(e)})}}return{imported:l,skipped:u,failed:d}}function ne(e){let t=(e||``).trim();return!t||/^(?:\.\/|\.\.\/|\/|[a-zA-Z]:[\\/]|file:\/\/)/.test(t)?!1:t.startsWith(`http://`)||t.startsWith(`https://`)?/github\.com|gitlab\.com/i.test(t):/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+(?:@[a-zA-Z0-9_.-]+)?$/.test(t)}const X=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),Z=`server:main`;async function re(e={}){let t;if(e.workspace)t=f.resolve(e.workspace);else{let e=f.join(T(),`shadow-claw`);await v(e,{recursive:!0}),t=await y(f.join(e,`workspace-`))}let n=f.join(t,`.agents`,`skills`),i=f.join(t,`.agents`,`tools`),a=f.join(t,`database`);await v(t,{recursive:!0}),await v(n,{recursive:!0}),await v(i,{recursive:!0}),await v(a,{recursive:!0});let o=e.provider,s=e.model,c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI,m=u&&!d&&!e.quiet&&!e.yes&&!e.y;if(!o&&!s&&m){let{promptForAgentModel:n}=await import(`./chunk-SRBRVorc.js`),r=await n({workspaceDir:t,contentRoot:p.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:u});o=r.providerId,s=r.model}if(o||=`transformers_js_local`,!s){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-SRBRVorc.js`);s=o===`transformers_js_local`?e:`openrouter/free`}if(!await j(t)){let e=f.join(t,`shadow-claw.config.json`);await w(e,JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:o,defaultModel:s}},null,2)+`
|
|
16
|
+
`,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-SRBRVorc.js`);await t(s,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await R({workspace:t,quiet:!0}),await r(t),{success:!0,workspace:t}}async function Q(e={}){let t=e.workspace||p.cwd(),{db:n,workspaceDir:i,core:a}=await R({...e,workspace:t}),o=e.group||a.DEFAULT_SERVER_GROUP_ID||Z;await r(i);let s=await a.discoverSkills(n,o),c=await H(i);return{skills:s.skills.map(e=>{let t=c?.skills?.[e.name];return t?{...e,lockSource:t.source,lockSourceType:t.sourceType,lockHash:t.computedHash}:e}),diagnostics:s.diagnostics,...c?{lockfile:c}:{}}}async function ie(e=`list`,t=[],n={}){let r=n.workspace||p.cwd(),a=(e||`list`).trim().toLowerCase();if(a===`list`||a===`ls`){let e=await Q({...n,workspace:r});if(!n.quiet){if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills){let e=t.lockSource?` [source: ${t.lockSource}]`:``;console.log(` - ${t.name}${e}: ${t.description||`No description`}`)}}}return{success:!0,...e}}let{workspaceDir:o}=await R({...n,workspace:r,quiet:!0});if(a===`add`||a===`install`||a===`i`||a===`a`){let e=t[0];if(!e){let e=`Error: Package or skill source required. Usage: shadow-claw agent skills add <package-or-url>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.slice(1);if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)){let t=[`add`,e,`-a`,`universal`];if((n.yes!==!1||n.quiet||!p.stdin.isTTY)&&!r.includes(`-y`)&&!r.includes(`--yes`)&&t.push(`-y`),n.skills){let e=Array.isArray(n.skills)?n.skills:String(n.skills).split(`,`).map(e=>e.trim()).filter(Boolean);e.length>0&&t.push(`--skill`,...e)}t.push(...r);let i=await K(t,{workspaceDir:o,execFn:n.npxSkillsExecFn});if(i.success)return!n.quiet&&i.stdout.trim()&&console.log(i.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,skills:(await Q({...n,workspace:o,quiet:!0})).skills,stdout:i.stdout}}let i=await $(e,{...n,workspace:o,useNpxSkills:!1}),a=await Q({...n,workspace:o,quiet:!0});return{success:i.success,delegatedToNpxSkills:!1,fallbackUsed:!0,skills:a.skills,importResult:i,...i.error?{error:i.error}:{}}}if(a===`remove`||a===`rm`||a===`r`||a===`uninstall`){let e=t.filter(e=>!e.startsWith(`-`));if(e.length===0){let e=`Error: Skill name(s) required. Usage: shadow-claw agent skills remove <name...>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}n.useNpxSkills!==!1&&await K([`remove`,...e,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let r=[];for(let t of e){let e=[f.join(o,`.agents`,`skills`,t),f.join(o,`.agents`,`skills`,`main`,t)],n=!1;for(let t of e)try{(await C(t)).isDirectory()&&(await S(t,{recursive:!0,force:!0}),n=!0)}catch{}let i=await U(o,t);(n||i)&&r.push(t)}return n.quiet||(r.length>0?console.log(`Removed skill(s): ${r.join(`, `)}`):console.log(`No matching skills found to remove.`)),{success:!0,removed:r}}if(a===`init`){let e=t[0]||`my-skill`;if(n.useNpxSkills===!0&&n.npxSkillsExecFn&&(await K([`init`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn})).success)return{success:!0,name:e,delegatedToNpxSkills:!0};try{let t=await W(o,e,{description:n.description,flat:n.flat!==!1});return n.quiet||console.log(`Initialized skill "${t.name}" at ${t.path}`),{success:!0,...t}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error: ${t}`),p.exitCode=1,{success:!1,error:t}}}if(a===`sync`){n.useNpxSkills!==!1&&n.npxSkillsExecFn&&await K([`experimental_sync`,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let e=await i(o,{overwrite:!!n.overwrite});return n.quiet||console.log(`Synced skills (migrated: ${e.migratedSkills.length}).`),{success:!0,...e,syncedToFlat:e.migratedSkills,syncedToMain:[]}}if(a===`find`||a===`search`||a===`f`||a===`s`){let e=t.join(` `).trim()||n.query||``;if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)&&e){let t=await K([`find`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(t.success)return!n.quiet&&t.stdout.trim()&&console.log(t.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:t.stdout,results:[]}}let r=n.fetchFn||globalThis.fetch;try{let t=await r(`https://skills.sh/api/search?q=${encodeURIComponent(e)}&limit=10`);if(!t.ok)throw Error(`HTTP ${t.status}`);let i=((await t.json()).skills||[]).map(e=>({name:e.name,package:`${e.source||e.id}@${e.name}`,source:e.source||e.id,installs:e.installs||0}));if(!n.quiet){if(i.length===0)console.log(`No skills found for "${e}".`);else{console.log(`Found ${i.length} skill(s):\n`);for(let e of i)console.log(` - ${e.package} (${e.installs} installs)`)}}return{success:!0,delegatedToNpxSkills:!1,results:i}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error searching skills: ${t}`),{success:!1,error:t,results:[]}}}if(a===`update`||a===`up`||a===`check`||a===`restore`||a===`experimental_install`){let e=a===`restore`?`experimental_install`:a===`up`?`update`:a,r=await K([e,...t],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(r.success)return!n.quiet&&r.stdout.trim()&&console.log(r.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:r.stdout};if(a===`restore`||a===`experimental_install`){let e=await H(o);if(e&&Object.keys(e.skills).length>0){let t=0;for(let[r,i]of Object.entries(e.skills)){let e=i,a=e?.sourceType===`github`?`${e.source}@${r}`:e?.sourceUrl||e?.source;if(!a)continue;let s=await $(a,{...n,workspace:o,useNpxSkills:!1,quiet:!0});s.success&&(t+=s.importedCount||0)}return{success:!0,delegatedToNpxSkills:!1,fallbackUsed:!0,importedCount:t}}}return{success:!1,error:r.error||`Failed to run npx skills ${e}`}}let s=`Unknown skills subcommand "${e}". Available: list, add, remove, find, init, sync, update, check, restore`;return n.quiet||console.error(s),p.exitCode=1,{success:!1,error:s}}async function ae(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!X.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function oe(e,t,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),o=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,s=(a.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!s&&typeof a.loadDeclarativeTools==`function`)try{s=(await a.loadDeclarativeTools(r,o)).tools.find(t=>t.name===e)}catch{}if(!s){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let c=!X.has(s.name),l=t??n.input;if(l===`-`&&(l=void 0),l==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=B(e,s.input_schema)}l=t}if(l!=null){let t={};if(typeof l==`string`)try{t=JSON.parse(l)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}else typeof l==`object`&&(t=l);let u;try{let e=await le(r,a,i,{...n,interactive:!1});u={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let i=await a.executeTool(r,e,t,o,{invokeContext:u}),l=typeof i==`string`?i:JSON.stringify(i,null,2);return n.output?(await w(f.resolve(n.output),l,`utf8`),n.quiet||p.stderr.write(`Output written to ${n.output}\n`)):n.quiet||p.stdout.write(l+`
|
|
17
17
|
`),{success:!0,tool:s,headlessSafe:c,output:i}}catch(t){let r=t instanceof Error?t.message:String(t);return n.quiet||console.error(`Error executing tool "${e}": ${r}`),p.exitCode=1,{success:!1,error:r}}}if(!n.quiet){let e=c?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${s.name} ${e}\n`),console.log(`Description:\n ${s.description}\n`),s.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(s.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${s.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${s.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
|
|
18
|
-
`)}return{success:!0,tool:s,headlessSafe:c}}async function se(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,{clearGroupMessages:i}=await import(`./chunk-CAxYfMhR.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function ce(e,t={}){let{db:n,core:r}=await R(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||Z,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function le(e,t,n,r={}){let i=r.contentRoot??p.cwd(),a=await j(n,i),o=a?.config||{},s=o.settings||{},c=o.agent||s.agent||{},l=r.provider||p.env.SHADOW_CLAW_PROVIDER||p.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!l&&typeof t.getConfig==`function`&&(l=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!l&&r.model){let{isLlamafile:e,isAgentfile:t}=await import(`./chunk-
|
|
18
|
+
`)}return{success:!0,tool:s,headlessSafe:c}}async function se(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,{clearGroupMessages:i}=await import(`./chunk-CAxYfMhR.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function ce(e,t={}){let{db:n,core:r}=await R(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||Z,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function le(e,t,n,r={}){let i=r.contentRoot??p.cwd(),a=await j(n,i),o=a?.config||{},s=o.settings||{},c=o.agent||s.agent||{},l=r.provider||p.env.SHADOW_CLAW_PROVIDER||p.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!l&&typeof t.getConfig==`function`&&(l=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!l&&r.model){let{isLlamafile:e,isAgentfile:t}=await import(`./chunk-SRBRVorc.js`);t(r.model)?l=`agentfile`:e(r.model)?l=`llamafile`:/onnx/i.test(r.model)&&(l=`transformers_js_local`)}l||=c.defaultProvider||c.provider||s.defaultProvider||s.provider||o.defaultProvider;let u=r.stdin?!!r.stdin.isTTY:!!p.stdin.isTTY,d=!r.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),f=r.isTTY===void 0?u||d:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!r.isCI,h=f&&!m&&!r.quiet&&r.interactive!==!1;if(!l){if(h){let{promptForAgentModel:e}=await import(`./chunk-SRBRVorc.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:f,service:r._transformersService});l=t.providerId,r.model=t.model}else l=`openrouter`}let g=typeof t.getProvider==`function`?t.getProvider(l):null;if(!g){let e=`Error: Unknown provider "${l}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=p.env.SHADOW_CLAW_API_KEY,!_)switch(l){case`openrouter`:_=p.env.OPENROUTER_API_KEY;break;case`huggingface`:_=p.env.HUGGINGFACE_API_KEY||p.env.HF_TOKEN;break;case`gemini_proxy`:_=p.env.GEMINI_API_KEY}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${l}`)||await t.getConfig(e,`apiKey`))}let v=r.model||p.env.SHADOW_CLAW_MODEL||p.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||c.defaultModel||c.model||s.defaultModel||s.model||o.defaultModel||g?.defaultModel||(l===`transformers_js_local`?(await import(`./chunk-SRBRVorc.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-SRBRVorc.js`),i=r.cacheDir||c.cacheDir||o.cacheDir||s.cacheDir;if(!(e(v,i)||n&&e(v,n))){let e=r.stdout||p.stderr;if(r.download||r.yes||r.y)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),a=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||p.stdin,c=e,l=!1,u=null;if(s===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new a.ReadStream(u),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),m=!1,h=()=>{if(!m){m=!0,c.write(`
|
|
19
19
|
Operation cancelled.
|
|
20
20
|
`);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):p.exit(130)}};d.on(`SIGINT`,h),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,h);let g=()=>h();p.on(`SIGINT`,g);let _=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&h()};s&&typeof s.on==`function`&&s.on(`data`,_);let y=``;try{y=(await d.question(`\nModel "${v}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{p.removeListener(`SIGINT`,g),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,h),s.removeListener(`data`,_));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}if(y===``||y===`y`||y===`yes`)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else throw Error(`Model "${v}" is not downloaded. Download aborted.`)}else throw Error(`Model "${v}" is not downloaded. Run with --download or --yes to download model weights automatically.`)}}let y=r.baseUrl||r.providerBaseUrl||c?.baseUrl||s?.baseUrl||s?.providerBaseUrl;return y&&g&&(g={...g,baseUrl:y}),{providerId:l,providerConfig:g,apiKey:_||``,model:v,workspaceConfigData:a,workspaceConfig:o,workspaceSettings:s,workspaceAgent:c}}async function ue(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!X.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!X.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function de(e,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),u=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,d=n._stdinData??null;if(e===`-`?e=d||``:d&&(e=e?`${e}\n\n${d}`:d),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let m=[],h=/* @__PURE__ */ new Map;try{let e=await ee(V(n.file));for(let t of e)if(t.source?.kind===`local-file`){let e=await t.source.file.arrayBuffer();h.set(t.fileName,new Uint8Array(e))}m=await t(r,u,e);for(let e of m)e.path&&h.has(e.fileName)&&h.set(e.path,h.get(e.fileName))}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let g,_,v,y,x,S,C,T;try{let e=await le(r,a,i,n);g=e.providerId,_=e.providerConfig,v=e.apiKey,y=e.model,x=e.workspaceConfigData,S=e.workspaceConfig,C=e.workspaceSettings,T=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let E=n.internetAccess??n.allowInternet??C?.internetAccess??C?.vm_bash_full_internet_access??C?.fullInternetAccess??S?.internetAccess;if(E!==void 0&&typeof a.setConfig==`function`){let e=a.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await a.setConfig(r,e,E?`true`:`false`)}if(_.requiresApiKey!==!1&&!v){let e=g===`huggingface`?`HUGGINGFACE_API_KEY`:`${g.toUpperCase()}_API_KEY`,t=`Error: Provider "${g}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let D=[];if(n.history!==!1&&typeof a.getRecentMessages==`function`)try{let e=await a.getRecentMessages(r,u,50);D=await Promise.all(e.map(async e=>{if(e?.role===`user`&&Array.isArray(e?.attachments)&&e.attachments.length>0){let t=await l(e.attachments,async e=>{if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null});if(t.length>0){let n=typeof e.content==`string`?e.content:``;return{...e,content:n?[{type:`text`,text:n},...t]:t}}}return e}))}catch{}let O={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...m.length>0?{attachments:m}:{}};if(typeof a.saveMessage==`function`)try{await a.saveMessage(r,O)}catch{}let k=O;if(m.length>0){let t=await l(m,async e=>{if(e.path&&h.has(e.path))return h.get(e.path);if(h.has(e.fileName))return h.get(e.fileName);if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null});t.length>0&&(k={...O,content:e?[{type:`text`,text:e},...t]:t})}let A=_?.supportsStreaming===!0,j=n.stream!==!1&&n.streaming!==!1&&!n.noStream,M=A&&j,N=Number(n.maxTokens)||(typeof a.getModelMaxTokens==`function`?a.getModelMaxTokens(y):a.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=_?.name||g,t=M?`streaming`:`standard`;p.stderr.write(`[Agent] Connecting to ${e} (${y}) [${t}]...\n`),p.stderr.write(`[Agent] Workspace: ${i}\n[Agent] Group: ${u}\n[Agent] Max tokens: ${N}\n`)}let P,F,I=!1,z=``,B=[];a.setPostHandler(async e=>{({"streaming-start":()=>{I=!0},"streaming-chunk":e=>{e.payload?.text&&(I=!0,z+=e.payload.text,P=(P||``)+e.payload.text,!n.quiet&&!n.output&&p.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{I=!1,z=``},response:e=>{if(e.payload?.text){if(P=e.payload.text,n.output){let t=w(f.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});B.push(t)}else n.quiet||(I&&typeof z==`string`&&z.trim()===e.payload.text.trim()?e.payload.text.endsWith(`
|
|
21
21
|
`)||p.stdout.write(`
|
|
22
22
|
`):p.stdout.write(e.payload.text+`
|
|
23
|
-
`))}},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&p.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(F=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;p.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;p.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;p.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{L(a,r,e.payload)}})[e.type]?.(e)});let H;try{H=await ue(r,a,u,S,C,T,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let{enabledTools:U,profileSystemPromptOverride:W}=H;if(U.length>0&&!n.quiet){let{getCuratedModelToolSupport:e}=await import(`./chunk-
|
|
23
|
+
`))}},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&p.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(F=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;p.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;p.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;p.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{L(a,r,e.payload)}})[e.type]?.(e)});let H;try{H=await ue(r,a,u,S,C,T,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let{enabledTools:U,profileSystemPromptOverride:W}=H;if(U.length>0&&!n.quiet){let{getCuratedModelToolSupport:e}=await import(`./chunk-SRBRVorc.js`);e(y)===!1&&p.stderr.write(`[Agent] Warning: Model "${y}" does not support tool calling; tools will be ignored. Use --tools none or choose a tool-capable model (e.g. onnx-community/gemma-4-E2B-it-ONNX).\n`)}if(m.length>0&&!n.quiet){let e=s(y);for(let t of m){let n=o(t.mimeType,t.fileName);n===`image`&&!e.images&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept image input; "${t.fileName}" will be passed as a reference only.\n`):n===`audio`&&!e.audio&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept audio input; "${t.fileName}" will be passed as a reference only.\n`):n===`video`&&!e.video&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept video input; "${t.fileName}" will be passed as a reference only.\n`):n===`document`&&!e.documents&&!e.routerByFeatures&&p.stderr.write(`[Agent] Warning: Model "${y}" does not accept PDF/document input; "${t.fileName}" will be passed as a reference only.\n`)}}let G;if(n.systemPrompt===`none`||n.systemPrompt===``||n.systemPrompt===!1||n.noSystemPrompt===!0)G=``;else{if(G=n.systemPrompt,!G&&n.systemPromptFile)try{let e=f.resolve(n.systemPromptFile);G=await b(e,`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}if(G||=p.env.SHADOW_CLAW_SYSTEM_PROMPT||p.env.SHADOWCLAW_SYSTEM_PROMPT,!G&&W&&(G=W),!G&&T?.systemPromptFile)try{let e=x?.configPath?f.dirname(x.configPath):i,t=f.resolve(e,T.systemPromptFile);G=await b(t,`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(G||=T?.systemPrompt||C?.systemPrompt||C?.systemPromptOverride,!G&&typeof a.getConfig==`function`)try{let e=await a.getConfig(r,a.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(G=e)}catch{}G||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`}let K={apiKey:v||``,assistantName:`ShadowClaw`,enabledTools:U,groupId:u,maxTokens:N,messages:[...D,k],model:y,provider:g,..._?.baseUrl?{baseUrl:_.baseUrl}:{},streaming:M,verbose:!!n.verbose,systemPrompt:G},q=new AbortController;n.abortSignal&&(n.abortSignal.aborted?q.abort():n.abortSignal.addEventListener(`abort`,()=>q.abort(),{once:!0}));let te=e=>{typeof n.onExit==`function`?n.onExit(e):!p.env.JEST_WORKER_ID&&p.env.NODE_ENV!==`test`&&p.exit(e)},J=!1,Y=null,ne=()=>{if(J)Y&&=(clearTimeout(Y),null),te(130);else{J=!0,q.abort();try{typeof a.cleanupAllLlamafileProcesses==`function`&&a.cleanupAllLlamafileProcesses()}catch{}Y=setTimeout(()=>{te(130)},1500),Y.unref?.()}};p.on(`SIGINT`,ne);let X=n.invokeHandler||a.handleInvoke;try{await X(r,K,q.signal)}catch(e){F=e instanceof Error?e.message:String(e),!J&&!n.quiet&&console.error(`Error: ${F}`)}finally{p.removeListener(`SIGINT`,ne),Y&&=(clearTimeout(Y),null)}if(J)return n.quiet||p.stderr.write(`
|
|
24
24
|
Operation cancelled.
|
|
25
25
|
`),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(F&&I&&!n.quiet&&!n.output&&p.stdout.write(`
|
|
26
|
-
`),F)return p.exitCode=1,{success:!1,error:F};if(P&&typeof a.saveMessage==`function`)try{await a.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`assistant`,content:P,timestamp:Date.now()})}catch{}if(n.output&&P&&B.length===0){let e=w(f.resolve(n.output),P,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});B.push(e)}return await Promise.all(B),typeof a.setPostHandler==`function`&&a.setPostHandler(null),{success:!0,response:P,model:y,provider:g}}async function fe(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:i,downloadLocalModel:a,fetchRemoteModels:o,DEFAULT_LOCAL_MODEL:s}=await import(`./chunk-
|
|
26
|
+
`),F)return p.exitCode=1,{success:!1,error:F};if(P&&typeof a.saveMessage==`function`)try{await a.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`assistant`,content:P,timestamp:Date.now()})}catch{}if(n.output&&P&&B.length===0){let e=w(f.resolve(n.output),P,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});B.push(e)}return await Promise.all(B),typeof a.setPostHandler==`function`&&a.setPostHandler(null),{success:!0,response:P,model:y,provider:g}}async function fe(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:i,downloadLocalModel:a,fetchRemoteModels:o,DEFAULT_LOCAL_MODEL:s}=await import(`./chunk-SRBRVorc.js`),c=n.workspace?f.resolve(n.workspace):p.cwd(),l=e||`list`;if(l===`list`||l===`remote`){let e=l===`remote`||!!(n.remote||n.all||n.huggingface),a=await j(c),u=a?.config?.agent?.defaultModel||a?.config?.settings?.defaultModel||s;if(e){n.quiet||p.stdout.write(`
|
|
27
27
|
Fetching available ONNX models from Hugging Face (onnx-community)...
|
|
28
28
|
`);let e=await o({cacheDir:n.cacheDir,query:n.query||(l===`remote`&&t?t:void 0)});if(!n.quiet){if(e.length===0)p.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
|
|
29
29
|
|
|
@@ -38,4 +38,4 @@ Curated Transformers.js Models (Local ONNX):
|
|
|
38
38
|
|
|
39
39
|
`);for(let e of f){let t=e.fileName===u||e.id===u||u.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.fileName}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` URL: ${e.url}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write("Tip: Run `shadow-claw agent model list --remote` (or `shadow-claw agent model remote`) to browse all ONNX models from Hugging Face.\n\n")}return{success:!0,models:d,llamafileModels:f,defaultModel:u}}if(l===`download`){let e=t||n.model||s;n.verbose&&!n.quiet&&p.stderr.write(`Preparing to download model: ${e}\n`);let r=await a(e,{cacheDir:n.cacheDir,verbose:n.verbose,isTTY:n.isTTY,progress:n.progress!==!1&&!n.noProgress});return r.success||(p.exitCode=1),r}if(l===`set`){let e=t||n.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=await j(c),i=r?.configPath||f.join(c,`shadow-claw.config.json`),a=r?.config||{},o={...a,agent:{...a.agent||{},defaultModel:e}};return await w(i,JSON.stringify(o,null,2)+`
|
|
40
40
|
`,`utf8`),n.quiet||p.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:i}}let u=`Unknown model action: "${l}". Available: list, download, set`;return n.quiet||console.error(u),p.exitCode=1,{success:!1,error:u}}async function $(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.workspace||p.cwd(),{db:i,workspaceDir:a,core:o}=await R({...t,workspace:r}),s=t.group||o.DEFAULT_SERVER_GROUP_ID||Z,c=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.startsWith(`file://`)||/^[a-zA-Z]:[\\/]/.test(n)){let e=!!(t.tools||t.skills||t.scripts)&&!t.all,r={overwrite:!!t.overwrite,targetSubdir:t.targetSubdir},i={imported:[],skipped:[],failed:[]},o=e&&!t.skills?i:await te(n,a,{...r,skillNames:t.skills?c(t.skills):void 0}),s=e&&!t.tools?i:await Y(`tools`,n,a,{...r,names:c(t.tools)}),l=e&&!t.scripts?i:await Y(`scripts`,n,a,{...r,names:c(t.scripts)}),u=(e,t,n)=>[...e.imported.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`imported`})),...e.skipped.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`skipped`})),...e.failed.map(e=>({name:e.name,path:``,status:`failed`,error:e.error}))],d=o.imported.length+s.imported.length+l.imported.length,f=o.skipped.length+s.skipped.length+l.skipped.length,m=[...o.failed.map(e=>({...e,kind:`Skill`})),...s.failed.map(e=>({...e,kind:`Tool`})),...l.failed.map(e=>({...e,kind:`Script`}))],h=m.length,g=h===0||d>0;return g||(p.exitCode=1),{success:g,siteUrl:n,manifestUrl:n,result:{tools:u(s,`tools`,e=>`${e}.json`),scripts:u(l,`scripts`,e=>`${e}.js`),skills:u(o,`skills`,e=>`${e}/SKILL.md`),diagnostics:m.map(e=>`${e.kind} ${e.name}: ${e.error}`)},importedCount:d,skippedCount:f,failedCount:h,...h>0&&d===0?{error:m[0]?.error}:{}}}if(ne(n)&&t.useNpxSkills!==!1&&(t.npxSkillsExecFn||!t.fetchFn)){let e=await o.discoverSkills(i,s),r=new Set(e.skills.map(e=>e.name)),l=[`add`,n,`-a`,`universal`,`-y`];if(t.skills){let e=c(t.skills);e.length>0&&l.push(`--skill`,...e)}if((await K(l,{workspaceDir:a,execFn:t.npxSkillsExecFn})).success){let e=await o.discoverSkills(i,s),t=e.skills.filter(e=>!r.has(e.name)),a=t.length>0?t:e.skills;return{success:!0,siteUrl:n,manifestUrl:n,result:{tools:[],scripts:[],skills:a.map(e=>({name:e.name,path:e.path,status:`imported`})),diagnostics:[]},importedCount:a.length,skippedCount:0,failedCount:0}}}let l=o.fetchDiscoveryManifest||(await import(`./chunk-DXhq_VQy.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-DyD2eNPy.js`)).importRemoteArtifacts,d=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let f;try{f=await l(n,d)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let{manifest:m,siteUrl:h,manifestUrl:g}=f,_=m.tools||[],v=m.skills||[],y=m.scripts||[];t.quiet||console.log(`Discovered: ${m.name||`Remote Site`} (${v.length} skill${v.length===1?``:`s`}, ${_.length} tool${_.length===1?``:`s`}, ${y.length} script${y.length===1?``:`s`})`);let b=_.map(e=>e.name),x=v.map(e=>e.name),S=y.map(e=>e.name),C,w,T;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];C=e(t.tools),w=e(t.skills),T=e(t.scripts)}else C=b,w=x,T=S;let E=t.autoEnable!==!1,D=!!t.overwrite,O;try{O=await u(i,s,m,{toolNames:C,skillNames:w,scriptNames:T},{autoEnable:E,overwrite:D,fetchFn:d,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let k=O.tools.filter(e=>e.status===`imported`),A=O.skills.filter(e=>e.status===`imported`),j=O.scripts.filter(e=>e.status===`imported`),M=O.tools.filter(e=>e.status===`skipped`),N=O.skills.filter(e=>e.status===`skipped`),P=O.scripts.filter(e=>e.status===`skipped`),F=O.tools.filter(e=>e.status===`failed`),I=O.skills.filter(e=>e.status===`failed`),L=O.scripts.filter(e=>e.status===`failed`),z=k.length+A.length+j.length,B=M.length+N.length+P.length,V=F.length+I.length+L.length;if(!t.quiet){console.log(`
|
|
41
|
-
Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-
|
|
41
|
+
Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-DwvavohW.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{j as _,$ as a,de as c,ie as d,oe as f,I as g,R as h,pe as i,ce as l,K as m,G as n,re as o,ae as p,se as r,fe as s,le as t,Q as u};
|
|
@@ -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-66BvqAV0.js`)},o}catch{try{return o={...await import(`./chunk-66BvqAV0.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{r as orchestratorStore}from"./chunk-CZdCRqNe.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{t as getAgentCore}from"./chunk-B88Z8T_9.js";
|