shadow-claw 1.59.7 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +4 -12
- package/.well-known/mcp.json +4 -12
- package/README.md +6 -2
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DDvuLVfW.js → chunk-3C5izdQW.js} +1 -1
- package/dist/cli/chunk-B-75h9gX.js +1 -0
- package/dist/cli/{chunk-hVf839t7.js → chunk-B7Kn-otm.js} +1 -1
- package/dist/cli/{chunk-YX32FcN7.js → chunk-BBczgswQ.js} +1 -1
- package/dist/cli/{chunk-DcNxjqH6.js → chunk-BE-lYWcn.js} +1 -1
- package/dist/cli/{chunk-CQaCgswD.js → chunk-BECr0WxI.js} +11 -11
- package/dist/cli/chunk-BEz1PD1_.js +1 -0
- package/dist/cli/chunk-BLzI1Fp2.js +1 -0
- package/dist/cli/{chunk-B3TrWbca.js → chunk-BVSC1MNQ.js} +11 -11
- package/dist/cli/{chunk-D_te8ufL.js → chunk-BdWcep6o.js} +1 -1
- package/dist/cli/{chunk-SRBRVorc.js → chunk-BfTpnSS4.js} +1 -1
- package/dist/cli/{chunk-D2_eAO83.js → chunk-BgvqTf7w.js} +1 -1
- package/dist/cli/chunk-BwsJfUT3.js +1 -0
- package/dist/cli/{chunk--PFY91kE.js → chunk-C9b4b7c_.js} +1 -1
- package/dist/cli/{chunk-SxK79JmB.js → chunk-CAw9XYFe.js} +1 -1
- package/dist/cli/chunk-CFCcbFs2.js +396 -0
- package/dist/cli/{chunk-Cnjb8Usu.js → chunk-CTarF4FC.js} +1 -1
- package/dist/cli/{chunk-3vNYrs_L.js → chunk-Cbq5hpjb.js} +4 -4
- package/dist/cli/chunk-CjTjKy_v.js +310 -0
- package/dist/cli/chunk-Cjyu4cr_.js +36 -0
- package/dist/cli/{chunk-DUGZPka_.js → chunk-ClMKygjZ.js} +1 -1
- package/dist/cli/chunk-Cppnq1KF.js +1 -0
- package/dist/cli/{chunk-DvemF16v.js → chunk-D9QCNFMO.js} +1 -1
- package/dist/cli/{chunk-iB8OoMmW.js → chunk-DB21BMqt.js} +1 -1
- package/dist/cli/{chunk-_Vo-o_e3.js → chunk-DHoIWvCc.js} +1 -1
- package/dist/cli/chunk-DZEN9T5y.js +1 -0
- package/dist/cli/{chunk-5rLO4DWS.js → chunk-Dl14OyYO.js} +9 -9
- package/dist/cli/chunk-Dl_vv0dI.js +1 -0
- package/dist/cli/chunk-Dpmfhlyl.js +1 -0
- package/dist/cli/{chunk-BrR1DOBS.js → chunk-Du7Xtucq.js} +1 -1
- package/dist/cli/{chunk-B88Z8T_9.js → chunk-DxcDFUi_.js} +1 -1
- package/dist/cli/{chunk-Dt7-hzJU.js → chunk-DyyEWbV7.js} +1 -1
- package/dist/cli/chunk-N0x3mXU0.js +1 -0
- package/dist/cli/{chunk-CGoE4llV.js → chunk-V-w0Bata.js} +1 -1
- package/dist/cli/{chunk-CncW6_WL.js → chunk-ZxDxSSn-.js} +1 -1
- package/dist/cli/{chunk-CZdCRqNe.js → chunk-lPvFUkd5.js} +1 -1
- package/dist/cli/{chunk-66BvqAV0.js → chunk-n5s-sCdU.js} +1 -1
- package/dist/cli/{chunk-CAAeGOdy.js → chunk-nD9VPVMq.js} +1 -1
- package/dist/cli/{chunk-DMs7kREC.js → chunk-rFuy8aS_.js} +1 -1
- package/dist/cli/{chunk-B0qusANw.js → chunk-wjM6JXWa.js} +1 -1
- package/dist/cli/{chunk-DhOU6GYX.js → chunk-zcES9rut.js} +1 -1
- package/dist/cli/cli.js +3 -3
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{channel-mmdGzPkT.js → channel-DB77spML.js} +2 -2
- package/dist/lib/{channel-mmdGzPkT.js.map → channel-DB77spML.js.map} +1 -1
- package/dist/lib/{compact-context-CY9BBlUQ.js → compact-context-Q9t9aL1e.js} +7 -7
- package/dist/lib/{compact-context-CY9BBlUQ.js.map → compact-context-Q9t9aL1e.js.map} +1 -1
- package/dist/lib/components/index.js +21 -21
- 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-llm.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-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-llm.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-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configure-peer-js-ccNvax2N.js → configure-peer-js-CgFiwoxY.js} +2 -2
- package/dist/lib/{configure-peer-js-ccNvax2N.js.map → configure-peer-js-CgFiwoxY.js.map} +1 -1
- package/dist/lib/content/build-attachment-content-blocks.d.ts +2 -0
- package/dist/lib/{discover-skills-OwlQ2sXA.js → discover-skills-CXyaWHKi.js} +5 -5
- package/dist/lib/{discover-skills-OwlQ2sXA.js.map → discover-skills-CXyaWHKi.js.map} +1 -1
- package/dist/lib/{git-D2J_j9X9.js → git-CogDRlEz.js} +2 -2
- package/dist/lib/{git-D2J_j9X9.js.map → git-CogDRlEz.js.map} +1 -1
- package/dist/lib/index.js +21 -21
- package/dist/lib/{init-control-plane-B7blDVIE.js → init-control-plane-CEGdzgWX.js} +7 -7
- package/dist/lib/{init-control-plane-B7blDVIE.js.map → init-control-plane-CEGdzgWX.js.map} +1 -1
- package/dist/lib/{invoke-agent-SxvudiDT.js → invoke-agent-cac3gCsj.js} +6 -6
- package/dist/lib/{invoke-agent-SxvudiDT.js.map → invoke-agent-cac3gCsj.js.map} +1 -1
- package/dist/lib/{move-group-entry-DDpjxa10.js → move-group-entry-D8dptMg0.js} +2 -2
- package/dist/lib/{move-group-entry-DDpjxa10.js.map → move-group-entry-D8dptMg0.js.map} +1 -1
- package/dist/lib/{orchestrator-C7fkh7T7.js → orchestrator-BBAwy9Nm.js} +12 -12
- package/dist/lib/{orchestrator-C7fkh7T7.js.map → orchestrator-BBAwy9Nm.js.map} +1 -1
- package/dist/lib/{orchestrator-CCARkxQC.js → orchestrator-cRBe3lhq.js} +2 -2
- package/dist/lib/{orchestrator-CCARkxQC.js.map → orchestrator-cRBe3lhq.js.map} +1 -1
- package/dist/lib/{peerjs-Bfw_FWLB.js → peerjs-BLg8aGUj.js} +3 -3
- package/dist/lib/{peerjs-Bfw_FWLB.js.map → peerjs-BLg8aGUj.js.map} +1 -1
- package/dist/lib/{process-peer-query-param-BxYiZNdf.js → process-peer-query-param-BnsVnxzH.js} +5 -5
- package/dist/lib/{process-peer-query-param-BxYiZNdf.js.map → process-peer-query-param-BnsVnxzH.js.map} +1 -1
- package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js → process-pending-shared-payloads-DBZfZOOa.js} +2 -2
- package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js.map → process-pending-shared-payloads-DBZfZOOa.js.map} +1 -1
- package/dist/lib/{process-room-query-param-B2_d50nE.js → process-room-query-param-B8EYg_-r.js} +4 -4
- package/dist/lib/{process-room-query-param-B2_d50nE.js.map → process-room-query-param-B8EYg_-r.js.map} +1 -1
- package/dist/lib/{push-client-rrjTdc-U.js → push-client-CAm6UMvE.js} +3 -3
- package/dist/lib/{push-client-rrjTdc-U.js.map → push-client-CAm6UMvE.js.map} +1 -1
- package/dist/lib/{rooms-bwGoYb1q.js → rooms-Dzphx3rK.js} +2 -2
- package/dist/lib/{rooms-bwGoYb1q.js.map → rooms-Dzphx3rK.js.map} +1 -1
- package/dist/lib/{shadow-claw-CypGVlVO.js → shadow-claw-CGl8tXtG.js} +6 -6
- package/dist/lib/{shadow-claw-CypGVlVO.js.map → shadow-claw-CGl8tXtG.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js → shadow-claw-channel-config-BNIWCdsL.js} +4 -4
- package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js.map → shadow-claw-channel-config-BNIWCdsL.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-DJLwRovH.js → shadow-claw-channels-C2QSn4Ew.js} +2 -2
- package/dist/lib/{shadow-claw-channels-DJLwRovH.js.map → shadow-claw-channels-C2QSn4Ew.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-B92cPaft.js → shadow-claw-chat-Wx3y9y6c.js} +3 -3
- package/dist/lib/{shadow-claw-chat-B92cPaft.js.map → shadow-claw-chat-Wx3y9y6c.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js → shadow-claw-control-plane-D5E4cFGu.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js.map → shadow-claw-control-plane-D5E4cFGu.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-CsVyDOny.js → shadow-claw-conversations-BtDv7GRW.js} +2 -2
- package/dist/lib/{shadow-claw-conversations-CsVyDOny.js.map → shadow-claw-conversations-BtDv7GRW.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js → shadow-claw-file-viewer-CG40kwWV.js} +2 -2
- package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js.map → shadow-claw-file-viewer-CG40kwWV.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-cT6HL7ye.js → shadow-claw-files-BOUULrlX.js} +3 -3
- package/dist/lib/{shadow-claw-files-cT6HL7ye.js.map → shadow-claw-files-BOUULrlX.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-Cv9mQgTx.js → shadow-claw-git-BeHV73_9.js} +3 -3
- package/dist/lib/{shadow-claw-git-Cv9mQgTx.js.map → shadow-claw-git-BeHV73_9.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-CKOYzPDp.js → shadow-claw-llm-KONyWKZM.js} +2 -2
- package/dist/lib/{shadow-claw-llm-CKOYzPDp.js.map → shadow-claw-llm-KONyWKZM.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-DYfiUQaH.js → shadow-claw-networking-Diy3JJkc.js} +2 -2
- package/dist/lib/{shadow-claw-networking-DYfiUQaH.js.map → shadow-claw-networking-Diy3JJkc.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-JJlzriuX.js → shadow-claw-notifications-C-upPa-4.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-JJlzriuX.js.map → shadow-claw-notifications-C-upPa-4.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BCo3ihZI.js → shadow-claw-pages-CfAjUKgd.js} +2 -2
- package/dist/lib/{shadow-claw-pages-BCo3ihZI.js.map → shadow-claw-pages-CfAjUKgd.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js → shadow-claw-peerjs-t4YibS9s.js} +5 -5
- package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js.map → shadow-claw-peerjs-t4YibS9s.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-BMwne0bh.js → shadow-claw-settings-Cg5V0e9g.js} +2 -2
- package/dist/lib/{shadow-claw-settings-BMwne0bh.js.map → shadow-claw-settings-Cg5V0e9g.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-DUY8B9m-.js → shadow-claw-storage-C7tCnsSG.js} +2 -2
- package/dist/lib/{shadow-claw-storage-DUY8B9m-.js.map → shadow-claw-storage-C7tCnsSG.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js → shadow-claw-task-server-BObsRdf8.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js.map → shadow-claw-task-server-BObsRdf8.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js → shadow-claw-tasks-B2EEqrcY.js} +3 -3
- package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js.map → shadow-claw-tasks-B2EEqrcY.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-fyJPppY_.js → shadow-claw-terminal-DSHfO2b9.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-fyJPppY_.js.map → shadow-claw-terminal-DSHfO2b9.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-D0T8m3go.js → shadow-claw-tools-DwPBADua.js} +3 -3
- package/dist/lib/{shadow-claw-tools-D0T8m3go.js.map → shadow-claw-tools-DwPBADua.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js → shadow-claw-webvm-CY4qGaMB.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js.map → shadow-claw-webvm-CY4qGaMB.js.map} +1 -1
- package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js → sync-web-mcp-registration-BiOZvW-R.js} +3 -3
- package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js.map → sync-web-mcp-registration-BiOZvW-R.js.map} +1 -1
- package/dist/lib/{system-prompt-bhGRLoL2.js → system-prompt-CxJ3Nx4c.js} +4 -3
- package/dist/lib/system-prompt-CxJ3Nx4c.js.map +1 -0
- package/dist/public/.well-known/mcp/server-card.json +4 -12
- package/dist/public/.well-known/mcp.json +4 -12
- package/dist/public/AGENTS.md +3 -1
- package/dist/public/README.md +6 -2
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/{channel-Dk7wl-Av.js → channel-DIpDQekL.js} +1 -1
- package/dist/public/{chat-template-BwAnTFKf.js → chat-template-CXKs8lFR.js} +1 -1
- package/dist/public/compact-context-BQ2ZXoAc.js +5 -0
- package/dist/public/{compact-context-fOTqwKF6.js → compact-context-dHitmPsV.js} +2 -2
- package/dist/public/{configure-peer-js-BOV0tR6G.js → configure-peer-js-DV1rqvFX.js} +1 -1
- package/dist/public/{create-model-cache-fetch-DSAFjOwc.js → create-model-cache-fetch-B0mSCEk6.js} +1 -1
- package/dist/public/{discover-skills-D1sNTy2r.js → discover-skills-BWJB8HUA.js} +1 -1
- package/dist/public/docs/architecture/overview.md +1 -1
- package/dist/public/docs/example/article/index.html +21 -21
- package/dist/public/docs/example/article.html +21 -21
- package/dist/public/docs/publishing/index.html +21 -21
- package/dist/public/docs/publishing.html +21 -21
- package/dist/public/docs/skill-creator/index.html +21 -21
- package/dist/public/docs/skill-creator.html +21 -21
- package/dist/public/docs/subsystems/attachment-capabilities.md +14 -1
- package/dist/public/docs/subsystems/cli.md +95 -51
- package/dist/public/docs/subsystems/pages.md +5 -0
- package/dist/public/e2e/README.md +1 -1
- package/dist/public/{e2e-bridge-Cz95DLlb.js → e2e-bridge-lP2qqiv3.js} +1 -1
- package/dist/public/{git-BmMlwIMP.js → git-DjmQ16rm.js} +1 -1
- package/dist/public/{iframe-bridge-scripts-Cibg0m6A.js → iframe-bridge-scripts-CO0izGjW.js} +1 -1
- package/dist/public/index.html +21 -21
- package/dist/public/index.js +1 -1
- package/dist/public/{init-control-plane-Cb31yLTY.js → init-control-plane-Ctz7FI8M.js} +1 -1
- package/dist/public/{invoke-agent-CN7mSV0Z.js → invoke-agent-C_geruwq.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +21 -21
- package/dist/public/main/memory/index.html +21 -21
- package/dist/public/main/memory.html +21 -21
- package/dist/public/main.html +21 -21
- package/dist/public/{move-group-entry-CXneuNVa.js → move-group-entry-QQ9Hkk54.js} +1 -1
- package/dist/public/{orchestrator-Dyylc8IU.js → orchestrator-C1kaTltu.js} +2 -2
- package/dist/public/{orchestrator-DBO4NZqd.js → orchestrator-Li1UAsv7.js} +1 -1
- package/dist/public/{peerjs-l0jiBoh6.js → peerjs-DbBryE-9.js} +1 -1
- package/dist/public/{process-peer-query-param-s-aSP1Rq.js → process-peer-query-param-DQIgr3KL.js} +1 -1
- package/dist/public/{process-pending-shared-payloads-BN3GigPT.js → process-pending-shared-payloads-Ctb-TFqB.js} +1 -1
- package/dist/public/{process-room-query-param-B2Qe0F0M.js → process-room-query-param-F-XnIVoZ.js} +1 -1
- package/dist/public/{push-client-B2LC8Qp9.js → push-client-DRx9Eggz.js} +1 -1
- package/dist/public/{rooms-ChCEOvkw.js → rooms-BurBI7is.js} +1 -1
- package/dist/public/service-worker/init.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-Br8mWDUx.js → shadow-claw-Bg9AQ5x_.js} +2 -2
- package/dist/public/{shadow-claw-accounts-Dm6G7KMP.js → shadow-claw-accounts-B3mjYI0M.js} +1 -1
- package/dist/public/{shadow-claw-card-CggS8uSa.js → shadow-claw-card-tcXRS1GF.js} +1 -1
- package/dist/public/{shadow-claw-channels-088vhuWO.js → shadow-claw-channels-BiSfLvWv.js} +1 -1
- package/dist/public/{shadow-claw-chat-BRwRlq-n.js → shadow-claw-chat-N5jMsXZZ.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-rhKACK85.js → shadow-claw-control-plane-DFVe_Xdq.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CF_yUfKl.js → shadow-claw-conversations-wAR06_ya.js} +1 -1
- package/dist/public/{shadow-claw-empty-state-CkpOSXCS.js → shadow-claw-empty-state-CnPm3NVM.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-DWCejuY3.js → shadow-claw-file-viewer-sZN_FCDW.js} +2 -2
- package/dist/public/{shadow-claw-files-L6_ioyzh.js → shadow-claw-files-CnvkCbd4.js} +2 -2
- package/dist/public/{shadow-claw-git-DsdkwLqQ.js → shadow-claw-git-BBHfClGk.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CSbRTOm3.js → shadow-claw-integrations-DvdBqzRJ.js} +1 -1
- package/dist/public/{shadow-claw-llm-BitaeAVc.js → shadow-claw-llm-YfohG519.js} +1 -1
- package/dist/public/{shadow-claw-mcp-remote-gSbV5riy.js → shadow-claw-mcp-remote-BAVbf5pi.js} +1 -1
- package/dist/public/{shadow-claw-networking-Dn_y6Cl9.js → shadow-claw-networking-CZ4LWPW7.js} +1 -1
- package/dist/public/{shadow-claw-notifications-Cj4Lqx8U.js → shadow-claw-notifications-BHwyREkG.js} +1 -1
- package/dist/public/{shadow-claw-page-header-DR4OZFt2.js → shadow-claw-page-header-De6Qf6eY.js} +1 -1
- package/dist/public/{shadow-claw-page-header-action-button-BnCV_2Kb.js → shadow-claw-page-header-action-button-FSOhTc9z.js} +1 -1
- package/dist/public/{shadow-claw-pages-mpDOtNYj.js → shadow-claw-pages-D_oPyDca.js} +1 -1
- package/dist/public/{shadow-claw-pdf-viewer-DZ_84qJH.js → shadow-claw-pdf-viewer-CrU4wqRq.js} +1 -1
- package/dist/public/{shadow-claw-settings-CfFTYTEy.js → shadow-claw-settings-DkUhvxVr.js} +2 -2
- package/dist/public/{shadow-claw-storage-DLmiT4bG.js → shadow-claw-storage-D0o56Tjw.js} +1 -1
- package/dist/public/{shadow-claw-task-server-BoMBCsiS.js → shadow-claw-task-server-4rkroO9K.js} +1 -1
- package/dist/public/{shadow-claw-tasks-ChEp1j7x.js → shadow-claw-tasks-BdP7lmvu.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BaoVbOda.js → shadow-claw-terminal-DVHX7Fsu.js} +1 -1
- package/dist/public/{shadow-claw-toast-e8oz7z6Z.js → shadow-claw-toast-B9Y9tSkW.js} +1 -1
- package/dist/public/{shadow-claw-tools-BYjUBiJz.js → shadow-claw-tools-BwwY53Lr.js} +1 -1
- package/dist/public/{shadow-claw-webvm-xGb13TME.js → shadow-claw-webvm-CXGdkCNM.js} +1 -1
- package/dist/public/{sync-web-mcp-registration-CQluj-Kz.js → sync-web-mcp-registration-DVK_IhXZ.js} +1 -1
- package/dist/public/{system-prompt-CTJn0tK-.js → system-prompt-BmswoQwF.js} +2 -2
- package/dist/public/{workbox-92eae37e.js → workbox-e4022e15.js} +1 -1
- package/dist/public/{zip-reader-DN7FB-Q0.js → zip-reader-JHoTbATw.js} +1 -1
- package/dist/server.js +5 -5
- package/package.json +1 -1
- package/dist/cli/chunk-2gZFafgY.js +0 -1
- package/dist/cli/chunk-BCjL0JXf.js +0 -1
- package/dist/cli/chunk-BNcu1oiT.js +0 -1
- package/dist/cli/chunk-BUNoeMKY.js +0 -36
- package/dist/cli/chunk-C5ypckWC.js +0 -225
- package/dist/cli/chunk-CFxww5Yz.js +0 -1
- package/dist/cli/chunk-CGIgtL6R.js +0 -1
- package/dist/cli/chunk-CafdvLx-.js +0 -1
- package/dist/cli/chunk-Dhap1VwA.js +0 -1
- package/dist/cli/chunk-Ds5-K-9o.js +0 -1
- package/dist/cli/chunk-DwvavohW.js +0 -1
- package/dist/cli/chunk-_a0CkUNS.js +0 -139
- package/dist/lib/system-prompt-bhGRLoL2.js.map +0 -1
- package/dist/public/compact-context-CX4H8V57.js +0 -5
|
@@ -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.
|
|
4
|
+
"version": "1.60.0",
|
|
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,27 +13,19 @@
|
|
|
13
13
|
{
|
|
14
14
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/favicon.svg",
|
|
15
15
|
"mimeType": "image/svg+xml",
|
|
16
|
-
"sizes": [
|
|
17
|
-
"any"
|
|
18
|
-
]
|
|
16
|
+
"sizes": ["any"]
|
|
19
17
|
},
|
|
20
18
|
{
|
|
21
19
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/512.png",
|
|
22
20
|
"mimeType": "image/png",
|
|
23
|
-
"sizes": [
|
|
24
|
-
"512x512"
|
|
25
|
-
]
|
|
21
|
+
"sizes": ["512x512"]
|
|
26
22
|
}
|
|
27
23
|
],
|
|
28
24
|
"remotes": [
|
|
29
25
|
{
|
|
30
26
|
"type": "streamable-http",
|
|
31
27
|
"url": "http://localhost:8888/mcp",
|
|
32
|
-
"supportedProtocolVersions": [
|
|
33
|
-
"2026-07-28",
|
|
34
|
-
"2025-11-25",
|
|
35
|
-
"2024-11-05"
|
|
36
|
-
],
|
|
28
|
+
"supportedProtocolVersions": ["2026-07-28", "2025-11-25", "2024-11-05"],
|
|
37
29
|
"headers": [
|
|
38
30
|
{
|
|
39
31
|
"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.
|
|
4
|
+
"version": "1.60.0",
|
|
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,27 +13,19 @@
|
|
|
13
13
|
{
|
|
14
14
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/favicon.svg",
|
|
15
15
|
"mimeType": "image/svg+xml",
|
|
16
|
-
"sizes": [
|
|
17
|
-
"any"
|
|
18
|
-
]
|
|
16
|
+
"sizes": ["any"]
|
|
19
17
|
},
|
|
20
18
|
{
|
|
21
19
|
"src": "https://xt-ml.github.io/shadow-claw/assets/icons/512.png",
|
|
22
20
|
"mimeType": "image/png",
|
|
23
|
-
"sizes": [
|
|
24
|
-
"512x512"
|
|
25
|
-
]
|
|
21
|
+
"sizes": ["512x512"]
|
|
26
22
|
}
|
|
27
23
|
],
|
|
28
24
|
"remotes": [
|
|
29
25
|
{
|
|
30
26
|
"type": "streamable-http",
|
|
31
27
|
"url": "http://localhost:8888/mcp",
|
|
32
|
-
"supportedProtocolVersions": [
|
|
33
|
-
"2026-07-28",
|
|
34
|
-
"2025-11-25",
|
|
35
|
-
"2024-11-05"
|
|
36
|
-
],
|
|
28
|
+
"supportedProtocolVersions": ["2026-07-28", "2025-11-25", "2024-11-05"],
|
|
37
29
|
"headers": [
|
|
38
30
|
{
|
|
39
31
|
"name": "MCP-Protocol-Version",
|
package/README.md
CHANGED
|
@@ -65,8 +65,12 @@ npx shadow-claw agent --tools none --no-system-prompt --no-history run "Explain
|
|
|
65
65
|
# Pipe plain text into an agent tool (auto-mapped to tool schema)
|
|
66
66
|
echo "how are you doing today" | npx shadow-claw agent tool rewrite_text
|
|
67
67
|
|
|
68
|
-
# Attach local files (repeatable)
|
|
69
|
-
npx shadow-claw agent run "Compare these" -f a.png -f b.png
|
|
68
|
+
# Attach local files (repeatable) — images, PDFs, audio, code, text
|
|
69
|
+
npx shadow-claw agent run "Compare these" --no-tools -f a.png -f b.png
|
|
70
|
+
|
|
71
|
+
# Images > 3 MB fall back to a text reference by default.
|
|
72
|
+
# Raise the limit with --max-image-size (in MB) for larger images:
|
|
73
|
+
npx shadow-claw agent run "Describe this poster" --no-tools --max-image-size 10 -f big-photo.png
|
|
70
74
|
|
|
71
75
|
# Combine CLI prompt with piped document content and save to file
|
|
72
76
|
cat doc.txt | npx shadow-claw agent run "Summarize this" -o summary.txt
|
package/dist/cli/build/build.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{t as runBuild}from"../chunk-
|
|
1
|
+
export{t as runBuild}from"../chunk-CFCcbFs2.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-
|
|
1
|
+
export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-BECr0WxI.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{n as runWebRtcListenCommand}from"./chunk-nD9VPVMq.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e from"node:fs";import t from"node:path";import n from"node:process";import r from"node:readline/promises";import i from"node:tty";function a(e,t=1){if(!Number.isFinite(e)||e<=0)return`0 B`;let n=1024,r=t<0?0:t,i=[`B`,`KB`,`MB`,`GB`,`TB`],a=Math.floor(Math.log(e)/Math.log(n)),o=Math.min(a,i.length-1);return`${parseFloat((e/n**o).toFixed(r))} ${i[o]}`}function o(e={}){let{modelId:t=`model`,stream:r=n.stderr,barWidth:i=24,isTTY:o=!!(r&&typeof r==`object`&&r.isTTY),enabled:s=!0}=e;if(!s)return{update:()=>{},finish:()=>{},fail:e=>{r?.write&&r.write(`${e||`✖ Failed to download ${t}.`}\n`)}};let c=[],l=/* @__PURE__ */ new Map,u=!1;function d(e){let t=Math.round(Math.max(0,Math.min(1,e))*i),n=i-t;return`[`+`=`.repeat(t)+(t<i?`>`:``)+` `.repeat(Math.max(0,n-+(t<i)))+`]`}function f(e,t=0,n=0){let i=l.get(e);return i||(i={lineIndex:c.length,lastPct:-1,lastRenderedTime:0,loaded:t,total:n,isDone:!1},l.set(e,i),c.push(e),o&&c.length>1&&r?.write&&r.write(`
|
|
2
|
-
`)),i}function p(e,t){if(!o||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,a=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${a}\x1b[${s}B\r`):r.write(`\r\x1b[2K${a}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!o&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(o){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(o){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${a(l)} / ${a(u)})`:l>0&&(i=` (${a(l)})`);let o=n?` [${n}]`:``;p(n,`Downloading ${t}${o} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${a(l)} / ${a(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,o){let e=d(1),r=i.total||i.loaded,o=r>0?` (${a(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${o}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!o&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const s=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],c=`onnx-community/gemma-4-E2B-it-ONNX`,l=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function u(e){if(!e)return;let t=s.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=l.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function d(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function f(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function p(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||l.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=f(i);if(!e.existsSync(o))return!1;let s=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),u=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,u),p=t.join(o,`${u}.part`);try{if(e.existsSync(p))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function h(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function g(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function _(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[h(i),f(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function v(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function y(n,r){if(g(n))return _(n,r);if(p(n))return m(n,r);let i=d(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=v(t);if(!e&&n)return!0}}catch{}return!1}function b(e){return s.map(t=>({...t,cached:y(t.id,e)}))}function x(e){return l.map(t=>({...t,cached:m(t.fileName,e)}))}async function S(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:y(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function C(r,i={}){let{cacheDir:a,verbose:s=!1,isTTY:c,stream:u=n.stderr,progress:d,noProgress:p,quiet:m=!1,abortSignal:_}=i,v=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),y=g(r),b,x;v?(b=v.url,x=v.fileName):r.startsWith(`http://`)||r.startsWith(`https://`)?(b=r,x=t.basename(new URL(r).pathname)):y?(x=t.basename(r).endsWith(`.agentfile`)?t.basename(r):`${t.basename(r)}.agentfile`,b=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${x}`):(x=t.basename(r).endsWith(`.llamafile`)?t.basename(r):`${t.basename(r)}.llamafile`,b=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${x}`);let S=y?h(a):f(a);e.mkdirSync(S,{recursive:!0});let C=t.join(S,x),w=t.join(S,`${x}.part`);if(e.existsSync(C))try{if(e.statSync(C).size>0)return{success:!0,modelId:r,path:C}}catch{}let T=0;if(e.existsSync(w))try{let t=e.statSync(w);t.size>0&&(T=t.size)}catch{T=0}let E=o({modelId:x,stream:u,isTTY:c,enabled:!m&&d!==!1&&!p}),D;try{s&&u?.write&&u.write(`[Llamafile] Downloading ${b}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};T>0&&(t.Range=`bytes=${T}-`);let n=i.fetch||globalThis.fetch,a=await n(b,{headers:t,redirect:`follow`,signal:_});if(a.status===416&&T>0){try{e.existsSync(w)&&e.unlinkSync(w)}catch{}T=0,delete t.Range,a=await n(b,{headers:t,redirect:`follow`,signal:_})}if(!a.ok&&a.status!==206)throw Error(`Failed to download ${b}: HTTP ${a.status} ${a.statusText}`);let o=a.status===206,c=0,l=0;if(o){let t=(a.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(a.headers?.get?.(`content-length`)||`0`,10);c=t?parseInt(t[1],10):T+n,l=T,D=e.createWriteStream(w,{flags:`a`})}else T=0,c=parseInt(a.headers?.get?.(`content-length`)||`0`,10),l=0,D=e.createWriteStream(w,{flags:`w`});if(l>0&&E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0}),a.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof a.body.getReader==`function`)t=e.fromWeb(a.body);else if(typeof a.body[Symbol.asyncIterator]==`function`)t=a.body;else{let e=Buffer.from(await a.arrayBuffer());D.write(e),l+=e.length}if(t)for await(let e of t){let t=Buffer.isBuffer(e)?e:Buffer.from(e);D.write(t),l+=t.length,E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0})}}if(D){let e=D;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(w,C);try{e.chmodSync(C,493)}catch{}return E.finish(),{success:!0,modelId:r,path:C}}catch(e){try{D?.end()}catch{}let t=e instanceof Error?e.message:String(e);return E.fail(`✖ Error downloading ${x}: ${t}`),{success:!1,modelId:r,error:t}}}async function w(e,t={}){if(p(e)||g(e))return C(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:s,progress:c,noProgress:l,quiet:u=!1}=t,d=s;if(!d){let{getAgentCore:e}=await import(`./chunk-BNcu1oiT.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=o({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function T(a={}){let o=t.resolve(a.contentRoot||n.cwd()),s=t.resolve(a.workspaceDir||o),l=a.cacheDir,u=a.onExit||(e=>n.exit(e)),d=a.stdin||n.stdin,f=a.stdout||n.stderr,h=!1,v=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;v=e.openSync(t,`r`),d=new i.ReadStream(v),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{}}let b=r.createInterface({input:d,output:f}),x=!1,T=()=>{if(!x){x=!0,f.write(`
|
|
2
|
+
`)),i}function p(e,t){if(!o||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,a=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${a}\x1b[${s}B\r`):r.write(`\r\x1b[2K${a}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!o&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(o){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(o){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${a(l)} / ${a(u)})`:l>0&&(i=` (${a(l)})`);let o=n?` [${n}]`:``;p(n,`Downloading ${t}${o} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${a(l)} / ${a(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,o){let e=d(1),r=i.total||i.loaded,o=r>0?` (${a(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${o}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!o&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const s=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],c=`onnx-community/gemma-4-E2B-it-ONNX`,l=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function u(e){if(!e)return;let t=s.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=l.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function d(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function f(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function p(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||l.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=f(i);if(!e.existsSync(o))return!1;let s=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),u=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,u),p=t.join(o,`${u}.part`);try{if(e.existsSync(p))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function h(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function g(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function _(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[h(i),f(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function v(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function y(n,r){if(g(n))return _(n,r);if(p(n))return m(n,r);let i=d(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=v(t);if(!e&&n)return!0}}catch{}return!1}function b(e){return s.map(t=>({...t,cached:y(t.id,e)}))}function x(e){return l.map(t=>({...t,cached:m(t.fileName,e)}))}async function S(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:y(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function C(r,i={}){let{cacheDir:a,verbose:s=!1,isTTY:c,stream:u=n.stderr,progress:d,noProgress:p,quiet:m=!1,abortSignal:_}=i,v=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),y=g(r),b,x;v?(b=v.url,x=v.fileName):r.startsWith(`http://`)||r.startsWith(`https://`)?(b=r,x=t.basename(new URL(r).pathname)):y?(x=t.basename(r).endsWith(`.agentfile`)?t.basename(r):`${t.basename(r)}.agentfile`,b=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${x}`):(x=t.basename(r).endsWith(`.llamafile`)?t.basename(r):`${t.basename(r)}.llamafile`,b=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${x}`);let S=y?h(a):f(a);e.mkdirSync(S,{recursive:!0});let C=t.join(S,x),w=t.join(S,`${x}.part`);if(e.existsSync(C))try{if(e.statSync(C).size>0)return{success:!0,modelId:r,path:C}}catch{}let T=0;if(e.existsSync(w))try{let t=e.statSync(w);t.size>0&&(T=t.size)}catch{T=0}let E=o({modelId:x,stream:u,isTTY:c,enabled:!m&&d!==!1&&!p}),D;try{s&&u?.write&&u.write(`[Llamafile] Downloading ${b}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};T>0&&(t.Range=`bytes=${T}-`);let n=i.fetch||globalThis.fetch,a=await n(b,{headers:t,redirect:`follow`,signal:_});if(a.status===416&&T>0){try{e.existsSync(w)&&e.unlinkSync(w)}catch{}T=0,delete t.Range,a=await n(b,{headers:t,redirect:`follow`,signal:_})}if(!a.ok&&a.status!==206)throw Error(`Failed to download ${b}: HTTP ${a.status} ${a.statusText}`);let o=a.status===206,c=0,l=0;if(o){let t=(a.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(a.headers?.get?.(`content-length`)||`0`,10);c=t?parseInt(t[1],10):T+n,l=T,D=e.createWriteStream(w,{flags:`a`})}else T=0,c=parseInt(a.headers?.get?.(`content-length`)||`0`,10),l=0,D=e.createWriteStream(w,{flags:`w`});if(l>0&&E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0}),a.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof a.body.getReader==`function`)t=e.fromWeb(a.body);else if(typeof a.body[Symbol.asyncIterator]==`function`)t=a.body;else{let e=Buffer.from(await a.arrayBuffer());D.write(e),l+=e.length}if(t)for await(let e of t){let t=Buffer.isBuffer(e)?e:Buffer.from(e);D.write(t),l+=t.length,E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0})}}if(D){let e=D;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(w,C);try{e.chmodSync(C,493)}catch{}return E.finish(),{success:!0,modelId:r,path:C}}catch(e){try{D?.end()}catch{}let t=e instanceof Error?e.message:String(e);return E.fail(`✖ Error downloading ${x}: ${t}`),{success:!1,modelId:r,error:t}}}async function w(e,t={}){if(p(e)||g(e))return C(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:s,progress:c,noProgress:l,quiet:u=!1}=t,d=s;if(!d){let{getAgentCore:e}=await import(`./chunk-Dl_vv0dI.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=o({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function T(a={}){let o=t.resolve(a.contentRoot||n.cwd()),s=t.resolve(a.workspaceDir||o),l=a.cacheDir,u=a.onExit||(e=>n.exit(e)),d=a.stdin||n.stdin,f=a.stdout||n.stderr,h=!1,v=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;v=e.openSync(t,`r`),d=new i.ReadStream(v),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{}}let b=r.createInterface({input:d,output:f}),x=!1,T=()=>{if(!x){x=!0,f.write(`
|
|
3
3
|
Operation cancelled.
|
|
4
4
|
`);try{b.close()}catch{}u(130)}};b.on(`SIGINT`,T),d&&typeof d.on==`function`&&d!==n.stdin&&d.on(`SIGINT`,T);let E=()=>T();n.on(`SIGINT`,E);let D=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&T()};d&&typeof d.on==`function`&&d.on(`data`,D);try{let r=`transformers_js_local`,i=c,u=/* @__PURE__ */ new Map;for(;!x;){f.write(`
|
|
5
5
|
ShadowClaw CLI Agent — Model Selection:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./chunk-
|
|
1
|
+
import{t as e}from"./chunk-CTarF4FC.js";var t=class e{#e;#t;constructor(e,t){this.#e=e,this.#t=t}static#n=`You are a helpful and accurate translator. Your goal is to translate the given text from the source language to the target language. Preserve the meaning, tone, and any formatting as much as possible. Do not include any explanations or extra text in your response, only the translated text itself. If you are unsure of the translation, provide the most likely one.`;static#r=[{role:`user`,content:`SOURCE: en
|
|
2
2
|
TARGET: de
|
|
3
3
|
TEXT: Good morning, how are you?`},{role:`assistant`,content:`Guten Morgen, wie geht es Ihnen?`},{role:`user`,content:`SOURCE: de
|
|
4
4
|
TARGET: en
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-mjuZTMQB.js";import"./chunk-BU-vs0np.js";import"./chunk-DPoeMCv9.js";import"./chunk-1VdYkt-J.js";export{t as sqlite3Command}from"./chunk-
|
|
1
|
+
import"./chunk-mjuZTMQB.js";import"./chunk-BU-vs0np.js";import"./chunk-DPoeMCv9.js";import"./chunk-1VdYkt-J.js";export{t as sqlite3Command}from"./chunk-Cjyu4cr_.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./chunk-BVLsV89M.js";import{t}from"./chunk-BQhU06JO.js";import{t as n}from"./chunk-
|
|
1
|
+
import{i as e}from"./chunk-BVLsV89M.js";import{t}from"./chunk-BQhU06JO.js";import{t as n}from"./chunk-ZxDxSSn-.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-Byi0_1tu.js";import{n as o,r as s,t as c}from"./chunk-vVEl6p-f.js";import{t as l}from"./chunk-Cppnq1KF.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:
|
|
@@ -11,19 +11,19 @@ ShadowClaw needs a directory to store cache and database files:
|
|
|
11
11
|
`),n.write(`Tip: You can pass --tmp, --cache-dir <dir>, set SHADOWCLAW_TMP=1, SHADOWCLAW_CACHE_DIR=<dir>, or configure "cacheDir" in shadow-claw.config.json to skip this prompt.
|
|
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
|
-
`),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
|
|
15
|
-
`,`utf8`),!0}catch{}return!1}async function
|
|
16
|
-
`,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-
|
|
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 te(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 ne(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 U(){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 W(e,t={}){let n=f.resolve(t.workspaceDir||p.cwd()),{command:r,shell:i}=U(),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 G(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 G(n,t):r.name.toLowerCase()===`skill.md`&&t.push(n)}}catch{}return t}async function K(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 G(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 q(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 q(r,t,n):t.includes(f.extname(i.name).toLowerCase())&&n.push(r)}}catch{}return n}async function J(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 q(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 Y(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-B7Kn-otm.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-B7Kn-otm.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-B7Kn-otm.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 W(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 W([`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 te(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 W([`init`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn})).success)return{success:!0,name:e,delegatedToNpxSkills:!0};try{let t=await ne(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 W([`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 W([`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 W([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-B7Kn-otm.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-B7Kn-otm.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-B7Kn-otm.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-B7Kn-otm.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
|
-
`);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=[],
|
|
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=typeof n.maxImageSize==`number`&&n.maxImageSize>0?Math.round(n.maxImageSize*1024*1024):3145728,h=[],g=/* @__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();g.set(t.fileName,new Uint8Array(e))}h=await t(r,u,e);for(let e of h)e.path&&g.has(e.fileName)&&g.set(e.path,g.get(e.fileName))}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let _,v,y,x,S,C,T,E;try{let e=await le(r,a,i,n);_=e.providerId,v=e.providerConfig,y=e.apiKey,x=e.model,S=e.workspaceConfigData,C=e.workspaceConfig,T=e.workspaceSettings,E=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let D=n.internetAccess??n.allowInternet??T?.internetAccess??T?.vm_bash_full_internet_access??T?.fullInternetAccess??C?.internetAccess;if(D!==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,D?`true`:`false`)}if(v.requiresApiKey!==!1&&!y){let e=_===`huggingface`?`HUGGINGFACE_API_KEY`:`${_.toUpperCase()}_API_KEY`,t=`Error: Provider "${_}" 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 O=[];if(n.history!==!1&&typeof a.getRecentMessages==`function`)try{let e=await a.getRecentMessages(r,u,50);O=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},{maxImageBytes:m});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 k={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(),...h.length>0?{attachments:h}:{}};if(typeof a.saveMessage==`function`)try{await a.saveMessage(r,k)}catch{}let A=k;if(h.length>0){let t=await l(h,async e=>{if(e.path&&g.has(e.path))return g.get(e.path);if(g.has(e.fileName))return g.get(e.fileName);if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null},{maxImageBytes:m});t.length>0&&(A={...k,content:e?[{type:`text`,text:e},...t]:t})}let j=v?.supportsStreaming===!0,M=n.stream!==!1&&n.streaming!==!1&&!n.noStream,N=j&&M,P=Number(n.maxTokens)||(typeof a.getModelMaxTokens==`function`?a.getModelMaxTokens(x):a.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=v?.name||_,t=N?`streaming`:`standard`;p.stderr.write(`[Agent] Connecting to ${e} (${x}) [${t}]...\n`),p.stderr.write(`[Agent] Workspace: ${i}\n[Agent] Group: ${u}\n[Agent] Max tokens: ${P}\n`)}let F,I,z=!1,B=``,H=[];a.setPostHandler(async e=>{({"streaming-start":()=>{z=!0},"streaming-chunk":e=>{e.payload?.text&&(z=!0,B+=e.payload.text,F=(F||``)+e.payload.text,!n.quiet&&!n.output&&p.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-error":e=>{e.payload?.error&&(I=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"streaming-end":()=>{z=!1,B=``},response:e=>{if(e.payload?.text){if(F=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(()=>{});H.push(t)}else n.quiet||(z&&typeof B==`string`&&B.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&&(
|
|
23
|
+
`))}},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&p.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(I=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 te;try{te=await ue(r,a,u,C,T,E,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let{enabledTools:ne,profileSystemPromptOverride:U}=te;if(ne.length>0&&!n.quiet){let{getCuratedModelToolSupport:e}=await import(`./chunk-B7Kn-otm.js`);e(x)===!1&&p.stderr.write(`[Agent] Warning: Model "${x}" 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(h.length>0&&!n.quiet){let e=s(x);for(let t of h){let n=o(t.mimeType,t.fileName);n===`image`&&!e.images&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" 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 "${x}" 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 "${x}" 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 "${x}" does not accept PDF/document input; "${t.fileName}" will be passed as a reference only.\n`);let r=typeof t.size==`number`?t.size:0;n===`image`&&r>m?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the ${(m/1024/1024).toFixed(0)} MB image limit and will be passed as a text reference only. Resize or compress the image before attaching.\n`):n===`audio`&&r>5242880?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 5 MB audio limit and will be passed as a text reference only.\n`):n===`document`&&r>20971520&&p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 20 MB document limit and will be passed as a text reference only.\n`)}}let W;if(n.systemPrompt===`none`||n.systemPrompt===``||n.systemPrompt===!1||n.noSystemPrompt===!0)W=``;else{if(W=n.systemPrompt,!W&&n.systemPromptFile)try{let e=f.resolve(n.systemPromptFile);W=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(W||=p.env.SHADOW_CLAW_SYSTEM_PROMPT||p.env.SHADOWCLAW_SYSTEM_PROMPT,!W&&U&&(W=U),!W&&E?.systemPromptFile)try{let e=S?.configPath?f.dirname(S.configPath):i,t=f.resolve(e,E.systemPromptFile);W=await b(t,`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(W||=E?.systemPrompt||T?.systemPrompt||T?.systemPromptOverride,!W&&typeof a.getConfig==`function`)try{let e=await a.getConfig(r,a.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(W=e)}catch{}W||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`}let G={apiKey:y||``,assistantName:`ShadowClaw`,enabledTools:ne,groupId:u,maxTokens:P,messages:[...O,A],model:x,provider:_,...v?.baseUrl?{baseUrl:v.baseUrl}:{},streaming:N,verbose:!!n.verbose,systemPrompt:W},K=new AbortController;n.abortSignal&&(n.abortSignal.aborted?K.abort():n.abortSignal.addEventListener(`abort`,()=>K.abort(),{once:!0}));let q=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,X=()=>{if(J)Y&&=(clearTimeout(Y),null),q(130);else{J=!0,K.abort();try{typeof a.cleanupAllLlamafileProcesses==`function`&&a.cleanupAllLlamafileProcesses()}catch{}Y=setTimeout(()=>{q(130)},1500),Y.unref?.()}};p.on(`SIGINT`,X);let re=n.invokeHandler||a.handleInvoke;try{await re(r,G,K.signal)}catch(e){I=e instanceof Error?e.message:String(e),!J&&!n.quiet&&console.error(`Error: ${I}`)}finally{p.removeListener(`SIGINT`,X),Y&&=(clearTimeout(Y),null)}if(J)return n.quiet||p.stderr.write(`
|
|
24
24
|
Operation cancelled.
|
|
25
|
-
`),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(
|
|
26
|
-
`),
|
|
25
|
+
`),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(I&&z&&!n.quiet&&!n.output&&p.stdout.write(`
|
|
26
|
+
`),I)return p.exitCode=1,{success:!1,error:I};if(F&&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:F,timestamp:Date.now()})}catch{}if(n.output&&F&&H.length===0){let e=w(f.resolve(n.output),F,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});H.push(e)}return await Promise.all(H),typeof a.setPostHandler==`function`&&a.setPostHandler(null),{success:!0,response:F,model:x,provider:_}}async function fe(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:i,downloadLocalModel:a,fetchRemoteModels:o,DEFAULT_LOCAL_MODEL:s}=await import(`./chunk-B7Kn-otm.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
|
|
|
@@ -37,5 +37,5 @@ Curated Transformers.js Models (Local ONNX):
|
|
|
37
37
|
`);for(let e of d){let t=e.id===u,n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.id}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write(`Curated Llamafile Models (Local Executable):
|
|
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
|
-
`,`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
|
|
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-
|
|
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 K(n,a,{...r,skillNames:t.skills?c(t.skills):void 0}),s=e&&!t.tools?i:await J(`tools`,n,a,{...r,names:c(t.tools)}),l=e&&!t.scripts?i:await J(`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(Y(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 W(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-CtMaOnRj.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-COBNl0vP.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-B-75h9gX.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,W as m,U as n,re as o,ae as p,se as r,fe as s,le as t,Q as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{n as runWebRtcListenCommand}from"./chunk-BdWcep6o.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{r as orchestratorStore}from"./chunk-DB21BMqt.js";
|