shadow-claw 1.40.0 → 1.41.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 +2 -2
- package/.well-known/mcp/servers.json +1 -1
- package/.well-known/mcp.json +2 -2
- package/README.md +1 -0
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-Bfz2NYgD.js → chunk-0IeC97mU.js} +7 -7
- package/dist/cli/chunk-3oLxlxPn.js +1 -0
- package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
- package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
- package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
- package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
- package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
- package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
- package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
- package/dist/cli/chunk-BjOeVLb42.js +1 -0
- package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
- package/dist/cli/chunk-BqWBd_jF2.js +1 -0
- package/dist/cli/{chunk-Bc9nRNyN.js → chunk-BvVUnHTq.js} +12 -9
- package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
- package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
- package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
- package/dist/cli/chunk-CCx8WOwz2.js +1 -0
- package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
- package/dist/cli/chunk-CUUERioR2.js +1 -0
- package/dist/cli/chunk-CXAobnJd.js +1 -0
- package/dist/cli/chunk-CY1X0pOF2.js +1 -0
- package/dist/cli/chunk-CZvvgLVv.js +1 -0
- package/dist/cli/chunk-CbcwbfJB.js +1 -0
- package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
- package/dist/cli/chunk-Cj9wl0qx.js +1 -0
- package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
- package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
- package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
- package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
- package/dist/cli/chunk-DR2XtWRo.js +1 -0
- package/dist/cli/{chunk-DID5VvOG.js → chunk-DTES-dE6.js} +3 -3
- package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
- package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
- package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
- package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
- package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
- package/dist/cli/chunk-UcNbHaRQ.js +1 -0
- package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
- package/dist/cli/chunk-bQQkVCw-.js +94 -0
- package/dist/cli/{chunk-CGiXWHTi2.js → chunk-gwpxl-0W2.js} +1 -1
- package/dist/cli/{chunk-NH8koEis2.js → chunk-nmDhxXH_2.js} +1 -1
- package/dist/cli/chunk-p0n_c-I2.js +1 -0
- package/dist/cli/{chunk-D7xP72La.js → chunk-q7r4FosZ.js} +1 -1
- package/dist/cli/cli.js +3 -3
- package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
- package/dist/electron/main.cjs +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-BAEMLu9g.js → app-routes-CKkiX12g.js} +7 -2
- package/dist/lib/app-routes-CKkiX12g.js.map +1 -0
- package/dist/lib/components/index.js +26 -26
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.d.ts +10 -0
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer/shadow-claw-file-viewer.d.ts +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config-CPHDmyTx.js → config-DZkF9LiO.js} +2 -2
- package/dist/lib/{config-CPHDmyTx.js.map → config-DZkF9LiO.js.map} +1 -1
- package/dist/lib/{configurePeerJs-BsJoycQd.js → configurePeerJs-B3IE9BY2.js} +3 -3
- package/dist/lib/{configurePeerJs-BsJoycQd.js.map → configurePeerJs-B3IE9BY2.js.map} +1 -1
- package/dist/lib/{connections-BdIru7bF.js → connections-CalJGWvZ.js} +2 -2
- package/dist/lib/{connections-BdIru7bF.js.map → connections-CalJGWvZ.js.map} +1 -1
- package/dist/lib/core/orchestrator/orchestrator-state.d.ts +2 -1
- package/dist/lib/core/orchestrator/orchestrator.d.ts +2 -1
- package/dist/lib/core/orchestrator/utils/operations/task.d.ts +1 -0
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js → downloadGroupFile-DDE1fIhJ.js} +2 -2
- package/dist/lib/{downloadGroupFile-Dn0KsMlV.js.map → downloadGroupFile-DDE1fIhJ.js.map} +1 -1
- package/dist/lib/{file-viewer-BYrXXu-X.js → file-viewer-Bll2EoGc.js} +5 -5
- package/dist/lib/{file-viewer-BYrXXu-X.js.map → file-viewer-Bll2EoGc.js.map} +1 -1
- package/dist/lib/{getGroupDir-DF-RZO8X.js → getGroupDir-MHv7Lvmp.js} +4 -4
- package/dist/lib/{getGroupDir-DF-RZO8X.js.map → getGroupDir-MHv7Lvmp.js.map} +1 -1
- package/dist/lib/{git-s_0cgKm1.js → git-Bv_M3dgw.js} +3 -3
- package/dist/lib/{git-s_0cgKm1.js.map → git-Bv_M3dgw.js.map} +1 -1
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js → iframe-sanitizer-C7ZGDjEI.js} +2 -2
- package/dist/lib/{iframe-sanitizer-DFdda1jJ.js.map → iframe-sanitizer-C7ZGDjEI.js.map} +1 -1
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js → iframe-storage-proxy-CR8ZYHPd.js} +2 -2
- package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js.map → iframe-storage-proxy-CR8ZYHPd.js.map} +1 -1
- package/dist/lib/index.js +27 -27
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js → initChatSplitResize-DiKTI-wk.js} +2 -2
- package/dist/lib/{initChatSplitResize-DuNlwCuI.js.map → initChatSplitResize-DiKTI-wk.js.map} +1 -1
- package/dist/lib/{initControlPlane-D4UZ4EhV.js → initControlPlane-CzjtQ4aM.js} +15 -15
- package/dist/lib/{initControlPlane-D4UZ4EhV.js.map → initControlPlane-CzjtQ4aM.js.map} +1 -1
- package/dist/lib/{markdown-CRRwbN9h.js → markdown-k8wA9LKy.js} +4 -4
- package/dist/lib/{markdown-CRRwbN9h.js.map → markdown-k8wA9LKy.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-COdZ-cea.js → mcp-reconnect-CGIdfZnS.js} +2 -2
- package/dist/lib/{mcp-reconnect-COdZ-cea.js.map → mcp-reconnect-CGIdfZnS.js.map} +1 -1
- package/dist/lib/{memoryStorage-BsMe2FOQ.js → memoryStorage-DL-Bo3dh.js} +2 -2
- package/dist/lib/{memoryStorage-BsMe2FOQ.js.map → memoryStorage-DL-Bo3dh.js.map} +1 -1
- package/dist/lib/{orchestrator-D9f5fDCb.js → orchestrator-DKHCoikY.js} +11 -11
- package/dist/lib/{orchestrator-D9f5fDCb.js.map → orchestrator-DKHCoikY.js.map} +1 -1
- package/dist/lib/{orchestrator-Bq9ft3uG.js → orchestrator-Dn1ZOz9B.js} +20 -24
- package/dist/lib/orchestrator-Dn1ZOz9B.js.map +1 -0
- package/dist/lib/{peerjs-6u8KtenE.js → peerjs-BK41iBvP.js} +7 -7
- package/dist/lib/{peerjs-6u8KtenE.js.map → peerjs-BK41iBvP.js.map} +1 -1
- package/dist/lib/{push-client-DCnB2-OU.js → push-client-DKgVFD2Z.js} +3 -3
- package/dist/lib/{push-client-DCnB2-OU.js.map → push-client-DKgVFD2Z.js.map} +1 -1
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js → readGroupFileBytes-CgU_UfGv.js} +2 -2
- package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js.map → readGroupFileBytes-CgU_UfGv.js.map} +1 -1
- package/dist/lib/{shadow-claw-MumteAJy.js → shadow-claw-CtCj5Rn_.js} +121 -16
- package/dist/lib/shadow-claw-CtCj5Rn_.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js → shadow-claw-a2ui-CvK5w940.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js.map → shadow-claw-a2ui-CvK5w940.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js → shadow-claw-accounts-Br3XdHro.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js.map → shadow-claw-accounts-Br3XdHro.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js → shadow-claw-channel-config-Da2dN19M.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js.map → shadow-claw-channel-config-Da2dN19M.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-CaceK52s.js → shadow-claw-channels-BofYHgz8.js} +3 -3
- package/dist/lib/{shadow-claw-channels-CaceK52s.js.map → shadow-claw-channels-BofYHgz8.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js → shadow-claw-chat-Dw32DPV2.js} +12 -12
- package/dist/lib/{shadow-claw-chat-BD18-mAR.js.map → shadow-claw-chat-Dw32DPV2.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js → shadow-claw-control-plane-CwFotFDh.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js.map → shadow-claw-control-plane-CwFotFDh.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js → shadow-claw-conversations-0UXge23k.js} +5 -5
- package/dist/lib/{shadow-claw-conversations-CDsza_oB.js.map → shadow-claw-conversations-0UXge23k.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js → shadow-claw-file-viewer-CAsn9NxH.js} +30 -30
- package/dist/lib/{shadow-claw-file-viewer-CMOnFmcP.js.map → shadow-claw-file-viewer-CAsn9NxH.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js → shadow-claw-files-xGGhsHNH.js} +9 -9
- package/dist/lib/{shadow-claw-files-BI0P3m8a.js.map → shadow-claw-files-xGGhsHNH.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-xRApLEMN.js → shadow-claw-git-B606hcMU.js} +6 -6
- package/dist/lib/{shadow-claw-git-xRApLEMN.js.map → shadow-claw-git-B606hcMU.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js → shadow-claw-integrations-Bwq5cba1.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js.map → shadow-claw-integrations-Bwq5cba1.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js → shadow-claw-llm-BgpcMBIy.js} +6 -6
- package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js.map → shadow-claw-llm-BgpcMBIy.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js → shadow-claw-mcp-remote-DvQCA-Bk.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js.map → shadow-claw-mcp-remote-DvQCA-Bk.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js → shadow-claw-networking-Cxvf9c7E.js} +2 -2
- package/dist/lib/{shadow-claw-networking-F5W3n5ci.js.map → shadow-claw-networking-Cxvf9c7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js → shadow-claw-notifications-CGVcFYBy.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js.map → shadow-claw-notifications-CGVcFYBy.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js → shadow-claw-page-header-DAYz3I_o.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js.map → shadow-claw-page-header-DAYz3I_o.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-Bo8_z2S-.js → shadow-claw-pages-BLeEZb9k.js} +24 -12
- package/dist/lib/shadow-claw-pages-BLeEZb9k.js.map +1 -0
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js → shadow-claw-peerjs-BcFnbK74.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js.map → shadow-claw-peerjs-BcFnbK74.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js → shadow-claw-settings-B7o0Z4hu.js} +9 -9
- package/dist/lib/{shadow-claw-settings-D00B4p4L.js.map → shadow-claw-settings-B7o0Z4hu.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js → shadow-claw-storage-afMVqB7E.js} +5 -5
- package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js.map → shadow-claw-storage-afMVqB7E.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js → shadow-claw-task-server-B9-MQjl6.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-D103YOuI.js.map → shadow-claw-task-server-B9-MQjl6.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js → shadow-claw-tasks-Dc4BC-t-.js} +8 -8
- package/dist/lib/{shadow-claw-tasks-6OhALkq1.js.map → shadow-claw-tasks-Dc4BC-t-.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js → shadow-claw-terminal-BINcTdsk.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js.map → shadow-claw-terminal-BINcTdsk.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js → shadow-claw-tools-BjFgXNLR.js} +7 -7
- package/dist/lib/{shadow-claw-tools-OeIwAnnd.js.map → shadow-claw-tools-BjFgXNLR.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js → shadow-claw-webvm-Xe3ByMDw.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-gVFZ197u.js.map → shadow-claw-webvm-Xe3ByMDw.js.map} +1 -1
- package/dist/lib/subsystems/mcp/webmcp.d.ts +64 -0
- package/dist/lib/{syncWebMcpRegistration-Bbph0XZl.js → syncWebMcpRegistration-D7alChz0.js} +21 -6
- package/dist/lib/syncWebMcpRegistration-D7alChz0.js.map +1 -0
- package/dist/lib/{tools-D0OlSzMD.js → tools-Cmhpk3X8.js} +4 -4
- package/dist/lib/{tools-D0OlSzMD.js.map → tools-Cmhpk3X8.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespacedStorage.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{utils-DYdrO2KI.js → utils-CzgKe_XZ.js} +4 -4
- package/dist/lib/{utils-DYdrO2KI.js.map → utils-CzgKe_XZ.js.map} +1 -1
- package/dist/lib/{webmcp-D2bocsgh.js → webmcp-oEP9YpR2.js} +119 -3
- package/dist/lib/{webmcp-D2bocsgh.js.map → webmcp-oEP9YpR2.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +2 -2
- package/dist/public/.well-known/mcp/servers.json +1 -1
- package/dist/public/.well-known/mcp.json +2 -2
- package/dist/public/AGENTS.md +2 -1
- package/dist/public/README.md +1 -0
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/app-routes-C6-H2zPH.js +1 -0
- package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
- package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
- package/dist/public/components/shadow-claw-pages/shadow-claw-pages.css +1 -1
- package/dist/public/{config-D4lVqMs8.js → config-Dewnqegf.js} +1 -1
- package/dist/public/{configurePeerJs-DDOAVSaH.js → configurePeerJs-CaPU2sN5.js} +1 -1
- package/dist/public/{connections-CiukjGiH.js → connections-CwE7jE9l.js} +1 -1
- package/dist/public/{custom-element-security-piU2U-Ec.js → custom-element-security-DLgHMf5R.js} +1 -1
- package/dist/public/docs/decisions/native-web-components-and-signals.md +1 -1
- package/dist/public/docs/example/article/index.html +5 -5
- package/dist/public/docs/guides/publishing-to-github-pages.md +49 -6
- package/dist/public/docs/publishing/index.html +5 -5
- package/dist/public/docs/skill-creator/index.html +5 -5
- package/dist/public/docs/subsystems/pages.md +10 -3
- package/dist/public/docs/subsystems/webmcp.md +89 -1
- package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
- package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
- package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
- package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
- package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
- package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
- package/dist/public/index.css +1 -1
- package/dist/public/index.html +5 -5
- package/dist/public/index.js +1 -1
- package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
- package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
- package/dist/public/llms.txt +1 -1
- package/dist/public/main/index.html +5 -5
- package/dist/public/main/memory/index.html +5 -5
- package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
- package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
- package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
- package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
- package/dist/public/{orchestrator-BLkS_jpm.js → orchestrator-CQcc7OFA.js} +2 -2
- package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
- package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
- package/dist/public/service-worker/fetch-proxy.js +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-DmrxnX3Q.js → shadow-claw-WwfOu-tu.js} +33 -3
- package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
- package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
- package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
- package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-a_uRA30F.js → shadow-claw-file-viewer-DYgZjZb9.js} +2 -2
- package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
- package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
- package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
- package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
- package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
- package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
- package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
- package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
- package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
- package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
- package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
- package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
- package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
- package/dist/public/theme-init.js +1 -1
- package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
- package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
- package/dist/server.js +189 -189
- package/package.json +1 -1
- package/src/cli/cli.ts +2 -2
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
- package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +7 -1
- package/src/cli/prerender/utils/insert-before-closing-head.test.ts +12 -0
- package/src/cli/prerender/utils/insert-before-closing-head.ts +4 -6
- package/src/cli/site-config/apply.test.ts +90 -0
- package/src/cli/site-config/apply.ts +181 -13
- package/src/components/shadow-claw/shadow-claw.css +26 -0
- package/src/components/shadow-claw/shadow-claw.html +4 -0
- package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
- package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
- package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
- package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
- package/src/components/shadow-claw/utils/getRoute.ts +18 -0
- package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
- package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
- package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
- package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
- package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +31 -31
- package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
- package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
- package/src/core/effect.test.ts +19 -0
- package/src/core/orchestrator/orchestrator-state.ts +2 -1
- package/src/core/orchestrator/orchestrator.test.ts +686 -5
- package/src/core/orchestrator/orchestrator.ts +3 -10
- package/src/core/orchestrator/utils/compactContext.test.ts +423 -121
- package/src/core/orchestrator/utils/configurePeerJs.test.ts +27 -0
- package/src/core/orchestrator/utils/deliverResponse.test.ts +127 -0
- package/src/core/orchestrator/utils/dispatchSubagentInvoke.test.ts +23 -0
- package/src/core/orchestrator/utils/enqueue.test.ts +520 -86
- package/src/core/orchestrator/utils/handleWorkerMessage.test.ts +664 -144
- package/src/core/orchestrator/utils/initTasks.node.test.ts +147 -0
- package/src/core/orchestrator/utils/initTasks.test.ts +926 -191
- package/src/core/orchestrator/utils/initTasks.ts +5 -4
- package/src/core/orchestrator/utils/invokeAgent.test.ts +563 -110
- package/src/core/orchestrator/utils/invokeAgent.ts +8 -10
- package/src/core/orchestrator/utils/loadChannelConfigurations.test.ts +50 -0
- package/src/core/orchestrator/utils/operations/channel.test.ts +377 -170
- package/src/core/orchestrator/utils/operations/provider.test.ts +663 -85
- package/src/core/orchestrator/utils/operations/room.test.ts +74 -11
- package/src/core/orchestrator/utils/operations/task.test.ts +452 -56
- package/src/core/orchestrator/utils/operations/task.ts +1 -1
- package/src/core/orchestrator/utils/operations/vm.test.ts +66 -7
- package/src/core/orchestrator/utils/parseDirectToolCommand.test.ts +6 -0
- package/src/core/orchestrator/utils/settings.test.ts +248 -81
- package/src/core/orchestrator/utils/setupPushTaskListener.test.ts +58 -0
- package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +392 -64
- package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +32 -3
- package/src/server/middleware/static-files.test.ts +36 -0
- package/src/server/middleware/static-files.ts +14 -6
- package/src/server/routes/mcp.ts +2 -2
- package/src/storage/staticRouting.test.ts +36 -0
- package/src/storage/staticRouting.ts +31 -3
- package/src/stores/file-viewer.test.ts +11 -0
- package/src/stores/theme.test.ts +41 -2
- package/src/stores/toast.test.ts +25 -0
- package/src/subsystems/mcp/webmcp.test.ts +255 -0
- package/src/subsystems/mcp/webmcp.ts +253 -0
- package/src/worker/tools/bash/native-bash-executor.test.ts +31 -1
- package/src/worker/tools/git/utils/extractConflictPaths.test.ts +24 -0
- package/src/worker/tools/git/utils/parseConflictRegions.test.ts +46 -0
- package/src/worker/tools/git/utils/resolveCorsProxy.test.ts +26 -5
- package/src/worker/tools/git/utils/truncateSnippet.test.ts +16 -0
- package/src/worker/tools/node-transformers-executor.test.ts +105 -6
- package/src/worker/tools/remote-mcp/remote-mcp.test.ts +172 -47
- package/src/worker/tools/remote-mcp/utils/formatListToolsOutput.test.ts +19 -0
- package/src/worker/tools/remote-mcp/utils/isMcpReauthError.test.ts +45 -0
- package/src/worker/tools/remote-mcp/utils/resolveMcpReauth.test.ts +48 -0
- package/src/worker/tools/rooms/list-room-members.test.ts +24 -10
- package/src/worker/tools/tasks/list-tasks.test.ts +39 -8
- package/src/worker/tools/tasks/update-task.test.ts +78 -14
- package/src/worker/tools/ui/javascript.test.ts +70 -17
- package/src/worker/tools/ui/list-tool-profiles.test.ts +31 -9
- package/dist/cli/chunk-00GAzVPl2.js +0 -1
- package/dist/cli/chunk-2hnFoNNC.js +0 -1
- package/dist/cli/chunk-BKQL4nzF2.js +0 -1
- package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
- package/dist/cli/chunk-BVCGo6uf2.js +0 -1
- package/dist/cli/chunk-BcTH_-FL.js +0 -1
- package/dist/cli/chunk-BmD_sPRt.js +0 -1
- package/dist/cli/chunk-BsxNqqer.js +0 -1
- package/dist/cli/chunk-CCcF5T-c.js +0 -1
- package/dist/cli/chunk-CFhvwUeL.js +0 -91
- package/dist/cli/chunk-CwWtvULn.js +0 -1
- package/dist/cli/chunk-Drf-hXIR2.js +0 -1
- package/dist/cli/chunk-Dt5HNYVi.js +0 -1
- package/dist/cli/chunk-DwZQi9Ax.js +0 -1
- package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
- package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
- package/dist/lib/orchestrator-Bq9ft3uG.js.map +0 -1
- package/dist/lib/shadow-claw-MumteAJy.js.map +0 -1
- package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
- package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
- package/dist/public/app-routes-BMQ4HFaM.js +0 -1
- package/dist/public/syncWebMcpRegistration-4bT0YUyZ.js +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
|
|
3
3
|
"name": "shadow-claw",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "1.41.0",
|
|
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/",
|
|
8
8
|
"repository": {
|
package/.well-known/mcp.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
|
|
3
3
|
"name": "shadow-claw",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "1.41.0",
|
|
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/",
|
|
8
8
|
"repository": {
|
package/README.md
CHANGED
|
@@ -116,6 +116,7 @@ npm install && npm run dev # Dev server → http://localhost:8888
|
|
|
116
116
|
- **Dual-Dispatch Sandboxing & Storage:** Client-side compute via sandboxed JavaScript and `just-bash` (or WebVM Alpine Linux) backed by Origin Private File System (OPFS) and IndexedDB; paired with host-native Node filesystem handles and SQLite database persistence on the server side.
|
|
117
117
|
- **PWA & Electron Desktop Parity:** Deployable as a progressive web app with Service Worker and Web Push, or as a native desktop application with full feature parity.
|
|
118
118
|
- **Modular Package Library Exports & Standardized Utilities:** Exposes modular ESM exports declared in `package.json` under `.`, `./cli`, `./cli/*`, `./components`, `./components/*`, `./utils`, and `./utils/*`, compiled via Rolldown with dynamic entry point discovery for reusable components and standardized cross-cutting utilities (`base64`, `coerce`, `delay`, `filename`, `isBinary`, `mime`, `normalizeStringList`, `normalizeWorkspacePath`, `parseBooleanConfig`, `parseStoredStringList`, `ulid`).
|
|
119
|
+
- **Static Publishing & Slotted Navigation:** Publish documentation portals and knowledge hubs with Declarative Shadow DOM (DSD) SSR, root and sub-route pretty paths, customizable slotted sidebar navigation (`sidebar-nav`, `sidebar`, `sidebar-content`, `sidebar-footer`), and declarative sections.
|
|
119
120
|
- **Control Plane, CLI & Native MCP Server:** Backed by a Node.js service layer and CLI (`shadow-claw`) that provides background cron scheduling, remote backups, direct WebRTC DataChannel connectivity, and a Stateless MCP server featuring both native server management tools and dynamic browser tool relaying to external agent hosts (Claude Desktop, Cursor, Goose).
|
|
120
121
|
|
|
121
122
|
---
|
package/dist/cli/build/build.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../chunk-
|
|
1
|
+
import{t as e}from"../chunk-bQQkVCw-.js";export{e as runBuild};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./chunk-
|
|
1
|
+
import{t as e}from"./chunk-DKVkYTV9.js";import t from"node:fs";import n from"node:path";import r from"node:process";import{access as i,constants as a,mkdir as o,mkdtemp as s,readFile as c,writeFile as l}from"node:fs/promises";import{tmpdir as u}from"node:os";import d from"node:readline/promises";import f from"node:tty";function p(){let e=r.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(r,t,...n)};t.__suppressed=!0,r.emitWarning=t}p();const m=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function h(e){try{return await i(e,a.F_OK),!0}catch{return!1}}async function g(e,t){let r=[];if(e&&r.push(n.resolve(e)),t){let e=n.resolve(t);r.includes(e)||r.push(e)}if(e&&n.basename(n.resolve(e))===`.cache`){let t=n.dirname(n.resolve(e));r.includes(t)||r.push(t)}for(let e of r)for(let t of m){let r=n.join(e,t);if(await h(r))try{let e=await c(r,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:r,config:t}}catch{}}return null}function _(){return n.join(u(),`shadow-claw`)}function v(e){let i=n.resolve(e||r.cwd()),a=[n.join(i,`shadow-claw-config.json`),n.join(i,`shadow-claw.config.json`),n.join(i,`shadowclaw.config.json`),n.join(i,`pages`,`shadow-claw-config.json`),n.join(i,`pages`,`shadow-claw.config.json`),n.join(i,`site-config.json`),n.join(i,`pages`,`site-config.json`)];for(let e of a)if(t.existsSync(e))try{let r=t.readFileSync(e,`utf8`),a=JSON.parse(r);if(a&&typeof a.cacheDir==`string`&&a.cacheDir.trim())return n.resolve(i,a.cacheDir.trim());if(a&&a.server&&typeof a.server.cacheDir==`string`&&a.server.cacheDir.trim())return n.resolve(i,a.server.cacheDir.trim())}catch{}return null}function y(e,i=`.cache`){let a=n.resolve(e||r.cwd()),o=n.join(a,i),s=n.join(o,`database`),c=[o,n.join(o,`control-token.json`),n.join(o,`cli-peer-id`),s,n.join(s,`clients.db`),n.join(s,`agent.db`),n.join(s,`scheduled-tasks.db`),n.join(s,`push-subscriptions.db`),n.join(a,`database`,`clients.db`),n.join(a,`database`,`agent.db`)];for(let e of c)if(t.existsSync(e))return!0;return!1}async function b({contentRoot:e,stdin:i=r.stdin,stdout:a=r.stdout,onExit:o=e=>r.exit(e)}={}){let s=n.resolve(e||r.cwd()),c=n.join(s,`.cache`),l=_(),u=i,p=a,m=!1,h=null;if(i===r.stdin&&!r.stdin.isTTY&&!r.env.CI&&(r.stderr.isTTY||r.stdout.isTTY))try{let e=r.platform===`win32`?`CONIN$`:`/dev/tty`;h=t.openSync(e,`r`),u=new f.ReadStream(h),p=r.stderr.isTTY?r.stderr:r.stdout,m=!0}catch{try{let e=r.platform===`win32`?`CONIN$`:`/dev/tty`;u=t.createReadStream(e),p=r.stderr.isTTY?r.stderr:r.stdout,m=!0}catch{}}let g=d.createInterface({input:u,output:p}),v=!1,y=()=>{if(!v){v=!0,p.write(`
|
|
2
2
|
Operation cancelled.
|
|
3
3
|
`);try{g.close()}catch{}o(130)}};g.on(`SIGINT`,y),u&&typeof u.on==`function`&&u!==r.stdin&&u.on(`SIGINT`,y);let b=()=>y();r.on(`SIGINT`,b);let x=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&y()};u&&typeof u.on==`function`&&u.on(`data`,x);try{p.write(`
|
|
4
4
|
ShadowClaw needs a directory to store cache and database files:
|
|
@@ -11,10 +11,10 @@ ShadowClaw needs a directory to store cache and database files:
|
|
|
11
11
|
`),a.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 g.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return a.write(`Using current directory cache: ${c}\n\n`),c;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return a.write(`Using temporary directory: ${l}\n\n`),l;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await g.question(`Use temporary directory (${l}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(a.write(`Operation cancelled.
|
|
14
|
-
`),o(0),l):(a.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return a.write(`Using current directory cache: ${c}\n\n`),c;let t=n.resolve(s,e);return a.write(`Using custom directory: ${t}\n\n`),t}let t=n.resolve(s,e);return p.write(`Using directory: ${t}\n\n`),t}finally{r.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==r.stdin&&u.removeListener(`SIGINT`,y),u.removeListener(`data`,x));try{g.close()}catch{}if(m){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{t.closeSync(h)}catch{}}}}async function x(e={}){let t=n.resolve(e.contentRoot||r.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((r.env.SHADOWCLAW_TMP||r.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let r=_();return{cacheDir:r,databaseDir:e.databaseDir?n.resolve(t,e.databaseDir):n.join(r,`database`)}}let i=(e.cacheDir||r.env.SHADOWCLAW_CACHE_DIR||``).trim();if(i){let r=n.resolve(t,i);return{cacheDir:r,databaseDir:e.databaseDir?n.resolve(t,e.databaseDir):n.join(r,`database`)}}let a=(e.databaseDir||r.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(a){let e=n.resolve(t,a);return{cacheDir:n.basename(e)===`database`?n.dirname(e):n.resolve(e,`..`),databaseDir:e}}let o=v(t);if(o)return{cacheDir:o,databaseDir:n.join(o,`database`)};let s=y(t),c=n.join(t,`.cache`),l=n.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((r.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!r.stdin.isTTY,d=!e.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await b({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:n.join(m,`database`)}}function S(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 C(t={}){let i=t.core||await e();i.setHeadlessMode(!0);let a,c;if(t.workspace)a=n.resolve(t.workspace),c=t.databaseDir?n.resolve(t.databaseDir):t.cacheDir?n.resolve(t.cacheDir,`database`):n.resolve(a,`database`);else{let e=await x({contentRoot:r.cwd(),cacheDir:t.cacheDir,databaseDir:t.databaseDir,tmp:t.tmp||t.temp,yes:t.yes||t.y,quiet:t.quiet,isTTY:t.isTTY,stdin:t.stdin,stdout:t.stdout}),i=n.join(u(),`shadow-claw`);await o(i,{recursive:!0}),a=await s(n.join(i,`workspace-`)),c=e.databaseDir}await o(a,{recursive:!0}),await o(c,{recursive:!0});let l=n.join(c,`agent.db`),d=i.openSqliteDatabase(l);i.setDB(d),i.setStorageRootFromPath(a);let f=(await g(a))?.config||{},p=f.settings||{},m=t.internetAccess??t.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??f.internetAccess;if(m!==void 0&&typeof i.setConfig==`function`){let e=i.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await i.setConfig(d,e,m?`true`:`false`)}let h={response:e=>{!t.quiet&&e.payload?.text&&console.log(e.payload.text)},error:e=>{!t.quiet&&e.payload?.error&&console.error(`Error: ${e.payload.error}`)},"tool-activity":e=>{!t.quiet&&t.verbose&&e.payload&&console.log(`[Tool] ${e.payload.tool} (${e.payload.status||`executing`})`)},"thinking-log":e=>{if(!t.quiet&&t.verbose&&e.payload){let t=e.payload.label||e.payload.level||`Log`;console.log(`[${t}] ${e.payload.message||``}`)}},"request-native-ai-task":e=>{S(i,d,e.payload)}};return i.setPostHandler(e=>{h[e.type]?.(e)}),{db:d,workspaceDir:a,dbPath:l,core:i}}function w(e={}){let{force:t=!1,stdin:n=r.stdin,timeoutMs:i}=e,a=n;return!t&&a?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],r=!1,o;i!=null&&i>0&&(o=setTimeout(()=>{r=!0,typeof a?.destroy==`function`&&a.destroy(),e(null)},i)),typeof a?.setEncoding==`function`&&a.setEncoding(`utf8`),a.on(`data`,e=>{r||n.push(typeof e==`string`?e:e.toString(`utf8`))}),a.on(`end`,()=>{if(o&&clearTimeout(o),r)return;let t=n.join(``).trim();e(t.length>0?t:null)}),a.on(`error`,e=>{o&&clearTimeout(o),!r&&t(e)})})}function T(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}}const E=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`]),D=`server:main`;async function O(e={}){let t;if(e.workspace)t=n.resolve(e.workspace);else{let e=n.join(u(),`shadow-claw`);await o(e,{recursive:!0}),t=await s(n.join(e,`workspace-`))}let i=n.join(t,`.agents`,`skills`),a=n.join(t,`.agents`,`tools`),c=n.join(t,`database`);await o(t,{recursive:!0}),await o(i,{recursive:!0}),await o(a,{recursive:!0}),await o(c,{recursive:!0});let d=e.provider,f=e.model,p=e.stdin?!!e.stdin.isTTY:!!r.stdin.isTTY,m=!e.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,_=e.isCI===void 0?e.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!e.isCI,v=h&&!_&&!e.quiet&&!e.yes&&!e.y;if(!d&&!f&&v){let{promptForAgentModel:n}=await import(`./chunk-
|
|
15
|
-
`,`utf8`),e.download&&(d===`transformers_js_local`||d===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-
|
|
14
|
+
`),o(0),l):(a.write(`Using temporary directory: ${l}\n\n`),l)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await g.question(`Enter custom directory path: `)).trim();if(!e)return a.write(`Using current directory cache: ${c}\n\n`),c;let t=n.resolve(s,e);return a.write(`Using custom directory: ${t}\n\n`),t}let t=n.resolve(s,e);return p.write(`Using directory: ${t}\n\n`),t}finally{r.removeListener(`SIGINT`,b),u&&typeof u.removeListener==`function`&&(u!==r.stdin&&u.removeListener(`SIGINT`,y),u.removeListener(`data`,x));try{g.close()}catch{}if(m){if(u&&typeof u.destroy==`function`)try{u.destroy()}catch{}if(h!=null)try{t.closeSync(h)}catch{}}}}async function x(e={}){let t=n.resolve(e.contentRoot||r.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((r.env.SHADOWCLAW_TMP||r.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let r=_();return{cacheDir:r,databaseDir:e.databaseDir?n.resolve(t,e.databaseDir):n.join(r,`database`)}}let i=(e.cacheDir||r.env.SHADOWCLAW_CACHE_DIR||``).trim();if(i){let r=n.resolve(t,i);return{cacheDir:r,databaseDir:e.databaseDir?n.resolve(t,e.databaseDir):n.join(r,`database`)}}let a=(e.databaseDir||r.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(a){let e=n.resolve(t,a);return{cacheDir:n.basename(e)===`database`?n.dirname(e):n.resolve(e,`..`),databaseDir:e}}let o=v(t);if(o)return{cacheDir:o,databaseDir:n.join(o,`database`)};let s=y(t),c=n.join(t,`.cache`),l=n.join(c,`database`);if(s||e.yes||e.y||[`1`,`true`,`yes`].includes((r.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:c,databaseDir:l};let u=e.stdin?!!e.stdin.isTTY:!!r.stdin.isTTY,d=!e.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),f=e.isTTY===void 0?u||d:!!e.isTTY,p=e.isCI===void 0?e.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!e.isCI;if(!f||p||e.quiet)return{cacheDir:c,databaseDir:l};let m=await b({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:n.join(m,`database`)}}function S(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 C(t={}){let i=t.core||await e();i.setHeadlessMode(!0);let a,c;if(t.workspace)a=n.resolve(t.workspace),c=t.databaseDir?n.resolve(t.databaseDir):t.cacheDir?n.resolve(t.cacheDir,`database`):n.resolve(a,`database`);else{let e=await x({contentRoot:r.cwd(),cacheDir:t.cacheDir,databaseDir:t.databaseDir,tmp:t.tmp||t.temp,yes:t.yes||t.y,quiet:t.quiet,isTTY:t.isTTY,stdin:t.stdin,stdout:t.stdout}),i=n.join(u(),`shadow-claw`);await o(i,{recursive:!0}),a=await s(n.join(i,`workspace-`)),c=e.databaseDir}await o(a,{recursive:!0}),await o(c,{recursive:!0});let l=n.join(c,`agent.db`),d=i.openSqliteDatabase(l);i.setDB(d),i.setStorageRootFromPath(a);let f=(await g(a))?.config||{},p=f.settings||{},m=t.internetAccess??t.allowInternet??p.internetAccess??p.vm_bash_full_internet_access??p.fullInternetAccess??f.internetAccess;if(m!==void 0&&typeof i.setConfig==`function`){let e=i.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await i.setConfig(d,e,m?`true`:`false`)}let h={response:e=>{!t.quiet&&e.payload?.text&&console.log(e.payload.text)},error:e=>{!t.quiet&&e.payload?.error&&console.error(`Error: ${e.payload.error}`)},"tool-activity":e=>{!t.quiet&&t.verbose&&e.payload&&console.log(`[Tool] ${e.payload.tool} (${e.payload.status||`executing`})`)},"thinking-log":e=>{if(!t.quiet&&t.verbose&&e.payload){let t=e.payload.label||e.payload.level||`Log`;console.log(`[${t}] ${e.payload.message||``}`)}},"request-native-ai-task":e=>{S(i,d,e.payload)}};return i.setPostHandler(e=>{h[e.type]?.(e)}),{db:d,workspaceDir:a,dbPath:l,core:i}}function w(e={}){let{force:t=!1,stdin:n=r.stdin,timeoutMs:i}=e,a=n;return!t&&a?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],r=!1,o;i!=null&&i>0&&(o=setTimeout(()=>{r=!0,typeof a?.destroy==`function`&&a.destroy(),e(null)},i)),typeof a?.setEncoding==`function`&&a.setEncoding(`utf8`),a.on(`data`,e=>{r||n.push(typeof e==`string`?e:e.toString(`utf8`))}),a.on(`end`,()=>{if(o&&clearTimeout(o),r)return;let t=n.join(``).trim();e(t.length>0?t:null)}),a.on(`error`,e=>{o&&clearTimeout(o),!r&&t(e)})})}function T(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}}const E=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`]),D=`server:main`;async function O(e={}){let t;if(e.workspace)t=n.resolve(e.workspace);else{let e=n.join(u(),`shadow-claw`);await o(e,{recursive:!0}),t=await s(n.join(e,`workspace-`))}let i=n.join(t,`.agents`,`skills`),a=n.join(t,`.agents`,`tools`),c=n.join(t,`database`);await o(t,{recursive:!0}),await o(i,{recursive:!0}),await o(a,{recursive:!0}),await o(c,{recursive:!0});let d=e.provider,f=e.model,p=e.stdin?!!e.stdin.isTTY:!!r.stdin.isTTY,m=!e.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),h=e.isTTY===void 0?p||m:!!e.isTTY,_=e.isCI===void 0?e.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!e.isCI,v=h&&!_&&!e.quiet&&!e.yes&&!e.y;if(!d&&!f&&v){let{promptForAgentModel:n}=await import(`./chunk-DjWle8FF2.js`),i=await n({workspaceDir:t,contentRoot:r.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:h});d=i.providerId,f=i.model}if(d||=`transformers_js_local`,!f){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-DjWle8FF2.js`);f=d===`transformers_js_local`?e:`openrouter/free`}if(await g(t)||await l(n.join(t,`shadow-claw.config.json`),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:d,defaultModel:f}},null,2)+`
|
|
15
|
+
`,`utf8`),e.download&&(d===`transformers_js_local`||d===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-DjWle8FF2.js`);await t(f,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await C({workspace:t,quiet:!0}),{success:!0,workspace:t}}async function k(e={}){let{db:t,core:n}=await C(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||D,i=await n.discoverSkills(t,r);return{skills:i.skills,diagnostics:i.diagnostics}}async function A(e={}){let{db:t,core:n}=await C(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||D,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:!E.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function j(e,t,i={}){let{db:a,workspaceDir:o,core:s}=await C(i),c=i.group||s.DEFAULT_SERVER_GROUP_ID||D,u=(s.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!u&&typeof s.loadDeclarativeTools==`function`)try{u=(await s.loadDeclarativeTools(a,c)).tools.find(t=>t.name===e)}catch{}if(!u){let t=`Error: Tool "${e}" not found.`;return i.quiet||console.error(t),r.exitCode=1,{success:!1,error:t}}let d=!E.has(u.name),f=t??i.input;if(f===`-`&&(f=void 0),f==null&&i._stdinData!=null){let e=i._stdinData,t;try{t=JSON.parse(e)}catch{t=T(e,u.input_schema)}f=t}if(f!=null){let t={};if(typeof f==`string`)try{t=JSON.parse(f)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return i.quiet||console.error(t),r.exitCode=1,{success:!1,error:t}}else typeof f==`object`&&(t=f);let p;try{let e=await N(a,s,o,{...i,interactive:!1});p={db:a,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let o=await s.executeTool(a,e,t,c,{invokeContext:p}),f=typeof o==`string`?o:JSON.stringify(o,null,2);return i.output?(await l(n.resolve(i.output),f,`utf8`),i.quiet||r.stderr.write(`Output written to ${i.output}\n`)):i.quiet||r.stdout.write(f+`
|
|
16
16
|
`),{success:!0,tool:u,headlessSafe:d,output:o}}catch(t){let n=t instanceof Error?t.message:String(t);return i.quiet||console.error(`Error executing tool "${e}": ${n}`),r.exitCode=1,{success:!1,error:n}}}if(!i.quiet){let e=d?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${u.name} ${e}\n`),console.log(`Description:\n ${u.description}\n`),u.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(u.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${u.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${u.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
|
|
17
|
-
`)}return{success:!0,tool:u,headlessSafe:d}}async function M(e,t={}){let{db:n,core:r}=await C(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||D,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 N(e,t,n,i={}){let a=i.contentRoot,o=await g(n,a),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=i.provider||r.env.SHADOW_CLAW_PROVIDER||r.env.SHADOW_CLAW_DEFAULT_PROVIDER;!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=i.stdin?!!i.stdin.isTTY:!!r.stdin.isTTY,f=!i.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),p=i.isTTY===void 0?d||f:!!i.isTTY,m=i.isCI===void 0?i.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!i.isCI,h=p&&!m&&!i.quiet&&i.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-
|
|
17
|
+
`)}return{success:!0,tool:u,headlessSafe:d}}async function M(e,t={}){let{db:n,core:r}=await C(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||D,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 N(e,t,n,i={}){let a=i.contentRoot,o=await g(n,a),s=o?.config||{},c=s.settings||{},l=s.agent||c.agent||{},u=i.provider||r.env.SHADOW_CLAW_PROVIDER||r.env.SHADOW_CLAW_DEFAULT_PROVIDER;!u&&typeof t.getConfig==`function`&&(u=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),u||=l.defaultProvider||l.provider||c.defaultProvider||c.provider||s.defaultProvider;let d=i.stdin?!!i.stdin.isTTY:!!r.stdin.isTTY,f=!i.stdin&&!r.stdin.isTTY&&!!(r.stderr.isTTY||r.stdout.isTTY),p=i.isTTY===void 0?d||f:!!i.isTTY,m=i.isCI===void 0?i.isTTY===void 0&&!!(r.env.CI&&![`0`,`false`].includes(r.env.CI.toLowerCase())):!!i.isCI,h=p&&!m&&!i.quiet&&i.interactive!==!1;if(!u)if(h){let{promptForAgentModel:e}=await import(`./chunk-DjWle8FF2.js`),t=await e({workspaceDir:n,contentRoot:a,cacheDir:i.cacheDir,stdin:i.stdin,stdout:i.stdout,quiet:i.quiet,isTTY:p,service:i._transformersService});u=t.providerId,i.model=t.model}else u=`openrouter`;let _=typeof t.getProvider==`function`?t.getProvider(u):null;if(!_){let e=`Error: Unknown provider "${u}".`;throw Error(e)}let v;if(i.apiKey!==void 0)v=i.apiKey;else{if(v=r.env.SHADOW_CLAW_API_KEY,!v)switch(u){case`openrouter`:v=r.env.OPENROUTER_API_KEY;break;case`huggingface`:v=r.env.HUGGINGFACE_API_KEY||r.env.HF_TOKEN;break;case`gemini_proxy`:v=r.env.GEMINI_API_KEY;break}!v&&typeof t.getConfig==`function`&&(v=await t.getConfig(e,`api_key:${u}`)||await t.getConfig(e,`apiKey`))}let y=i.model||r.env.SHADOW_CLAW_MODEL||r.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||l.defaultModel||l.model||c.defaultModel||c.model||s.defaultModel||_?.defaultModel||(u===`transformers_js_local`?(await import(`./chunk-DjWle8FF2.js`)).DEFAULT_LOCAL_MODEL:`default`);if(u===`transformers_js_local`||u===`llamafile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-DjWle8FF2.js`);if(!e(y,i.cacheDir)){let e=i.stdout||r.stderr;if(i.download)i.quiet||e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:i.cacheDir,stream:e,isTTY:p,service:i._transformersService,progress:i.progress!==!1&&!i.noProgress,verbose:i.verbose});else if(h){let n=await import(`node:readline/promises`),a=await import(`node:tty`),o=await import(`node:fs`),s=i.stdin||r.stdin,c=e,l=!1,u=null;if(s===r.stdin&&!r.stdin.isTTY&&!r.env.CI&&(r.stderr.isTTY||r.stdout.isTTY))try{let e=r.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new a.ReadStream(u),c=r.stderr.isTTY?r.stderr:r.stdout,l=!0}catch{try{let e=r.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=r.stderr.isTTY?r.stderr:r.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),f=!1,m=()=>{if(!f){f=!0,c.write(`
|
|
18
18
|
Operation cancelled.
|
|
19
19
|
`);try{d.close()}catch{}typeof i.onExit==`function`?i.onExit(130):r.exit(130)}};d.on(`SIGINT`,m),s&&typeof s.on==`function`&&s!==r.stdin&&s.on(`SIGINT`,m);let h=()=>m();r.on(`SIGINT`,h);let g=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&m()};s&&typeof s.on==`function`&&s.on(`data`,g);let _=``;try{_=(await d.question(`\nModel "${y}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{r.removeListener(`SIGINT`,h),s&&typeof s.removeListener==`function`&&(s!==r.stdin&&s.removeListener(`SIGINT`,m),s.removeListener(`data`,g));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}(_===``||_===`y`||_===`yes`)&&(e.write(`\nDownloading ${y} from Hugging Face...\n`),await t(y,{cacheDir:i.cacheDir,stream:e,isTTY:p,service:i._transformersService,progress:i.progress!==!1&&!i.noProgress,verbose:i.verbose}))}}}return{providerId:u,providerConfig:_,apiKey:v||``,model:y,workspaceConfigData:o,workspaceConfig:s,workspaceSettings:c,workspaceAgent:l}}async function P(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=>!E.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)!E.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 F(e,t={}){let{db:i,workspaceDir:a,core:o}=await C(t),s=t.group||o.DEFAULT_SERVER_GROUP_ID||D,u=t._stdinData??null;if(e===`-`?e=u||``:u&&(e=e?`${e}\n\n${u}`:u),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return t.quiet||console.error(e),r.exitCode=1,{success:!1,error:e}}let d,f,p,m,h,g,_,v;try{let e=await N(i,o,a,t);d=e.providerId,f=e.providerConfig,p=e.apiKey,m=e.model,h=e.workspaceConfigData,g=e.workspaceConfig,_=e.workspaceSettings,v=e.workspaceAgent}catch(e){return t.quiet||console.error(e.message),r.exitCode=1,{success:!1,error:e.message}}let y=t.internetAccess??t.allowInternet??_?.internetAccess??_?.vm_bash_full_internet_access??_?.fullInternetAccess??g?.internetAccess;if(y!==void 0&&typeof o.setConfig==`function`){let e=o.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await o.setConfig(i,e,y?`true`:`false`)}if(f.requiresApiKey!==!1&&!p){let e=d===`huggingface`?`HUGGINGFACE_API_KEY`:`${d.toUpperCase()}_API_KEY`,n=`Error: Provider "${d}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return t.quiet||console.error(n),r.exitCode=1,{success:!1,error:n}}let b=[];if(typeof o.getRecentMessages==`function`)try{b=await o.getRecentMessages(i,s,50)}catch{}let x={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:s,role:`user`,content:e,timestamp:Date.now()};if(typeof o.saveMessage==`function`)try{await o.saveMessage(i,x)}catch{}let w=f?.supportsStreaming===!0,T=t.stream!==!1&&t.streaming!==!1&&!t.noStream,E=w&&T,O=Number(t.maxTokens)||(typeof o.getModelMaxTokens==`function`?o.getModelMaxTokens(m):o.DEFAULT_MAX_TOKENS||8192);if(t.verbose&&!t.quiet){let e=f?.name||d,t=E?`streaming`:`standard`;r.stderr.write(`[Agent] Connecting to ${e} (${m}) [${t}]...\n`),r.stderr.write(`[Agent] Workspace: ${a}\n[Agent] Group: ${s}\n[Agent] Max tokens: ${O}\n`)}let k,A,j=!1,M=[];o.setPostHandler(async e=>{({"streaming-start":()=>{j=!0},"streaming-chunk":e=>{e.payload?.text&&(j=!0,k=(k||``)+e.payload.text,!t.quiet&&!t.output&&r.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{},response:e=>{if(e.payload?.text)if(k=e.payload.text,t.output){let i=l(n.resolve(t.output),e.payload.text,`utf8`).then(()=>{t.quiet||r.stderr.write(`Output written to ${t.output}\n`)}).catch(()=>{});M.push(i)}else t.quiet||(j?e.payload.text.endsWith(`
|
|
20
20
|
`)||r.stdout.write(`
|
|
@@ -22,7 +22,7 @@ Operation cancelled.
|
|
|
22
22
|
`))},"intermediate-response":e=>{t.verbose&&!t.quiet&&e.payload?.text&&r.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(A=e.payload.error,t.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(t.verbose&&!t.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;r.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(t.verbose&&!t.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;r.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(t.verbose&&!t.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;r.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(t.verbose&&!t.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;r.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(t.verbose&&!t.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,i=t.completion_tokens??t.output_tokens??0,a=t.total_tokens??n+i;r.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${i}, Total: ${a}\n`)}},"request-native-ai-task":e=>{S(o,i,e.payload)}})[e.type]?.(e)});let F;try{F=await P(i,o,s,g,_,v,t)}catch(e){let n=e.message||String(e);return t.quiet||console.error(n),r.exitCode=1,{success:!1,error:n}}let{enabledTools:I,profileSystemPromptOverride:L}=F,R=t.systemPrompt;if(!R&&t.systemPromptFile)try{R=await c(n.resolve(t.systemPromptFile),`utf8`)}catch(e){let n=`Error: Failed to read system prompt file "${t.systemPromptFile}": ${e.message}`;return t.quiet||console.error(n),r.exitCode=1,{success:!1,error:n}}if(R||=r.env.SHADOW_CLAW_SYSTEM_PROMPT||r.env.SHADOWCLAW_SYSTEM_PROMPT,!R&&L&&(R=L),!R&&v?.systemPromptFile)try{let e=h?.configPath?n.dirname(h.configPath):a;R=await c(n.resolve(e,v.systemPromptFile),`utf8`)}catch(e){t.verbose&&!t.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(R||=v?.systemPrompt||_?.systemPrompt||_?.systemPromptOverride,!R&&typeof o.getConfig==`function`)try{let e=await o.getConfig(i,o.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(R=e)}catch{}R||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`;let z={apiKey:p||``,assistantName:`ShadowClaw`,enabledTools:I,groupId:s,maxTokens:O,messages:[...b,x],model:m,provider:d,streaming:E,verbose:!!t.verbose,systemPrompt:R},B=new AbortController;t.abortSignal&&(t.abortSignal.aborted?B.abort():t.abortSignal.addEventListener(`abort`,()=>B.abort(),{once:!0}));let V=!1,H=()=>{if(!V){V=!0,B.abort();try{typeof o.cleanupAllLlamafileProcesses==`function`&&o.cleanupAllLlamafileProcesses()}catch{}}};r.on(`SIGINT`,H);let U=t.invokeHandler||o.handleInvoke;try{await U(i,z,B.signal)}catch(e){A=e instanceof Error?e.message:String(e),!V&&!t.quiet&&console.error(`Error: ${A}`)}finally{r.removeListener(`SIGINT`,H)}if(V)return t.quiet||r.stderr.write(`
|
|
23
23
|
Operation cancelled.
|
|
24
24
|
`),r.exitCode=130,typeof t.onExit==`function`&&t.onExit(130),{success:!1,error:`Operation cancelled.`};if(A&&j&&!t.quiet&&!t.output&&r.stdout.write(`
|
|
25
|
-
`),A)return r.exitCode=1,{success:!1,error:A};if(k&&typeof o.saveMessage==`function`)try{await o.saveMessage(i,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:s,role:`assistant`,content:k,timestamp:Date.now()})}catch{}if(t.output&&k&&M.length===0){let e=l(n.resolve(t.output),k,`utf8`).then(()=>{t.quiet||r.stderr.write(`Output written to ${t.output}\n`)}).catch(()=>{});M.push(e)}return await Promise.all(M),typeof o.setPostHandler==`function`&&o.setPostHandler(null),{success:!0,response:k,model:m,provider:d}}async function I(e=`list`,t,i={}){let{listLocalModels:a,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:u}=await import(`./chunk-
|
|
25
|
+
`),A)return r.exitCode=1,{success:!1,error:A};if(k&&typeof o.saveMessage==`function`)try{await o.saveMessage(i,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:s,role:`assistant`,content:k,timestamp:Date.now()})}catch{}if(t.output&&k&&M.length===0){let e=l(n.resolve(t.output),k,`utf8`).then(()=>{t.quiet||r.stderr.write(`Output written to ${t.output}\n`)}).catch(()=>{});M.push(e)}return await Promise.all(M),typeof o.setPostHandler==`function`&&o.setPostHandler(null),{success:!0,response:k,model:m,provider:d}}async function I(e=`list`,t,i={}){let{listLocalModels:a,listLlamafileModels:o,downloadLocalModel:s,fetchRemoteModels:c,DEFAULT_LOCAL_MODEL:u}=await import(`./chunk-DjWle8FF2.js`),d=i.workspace?n.resolve(i.workspace):r.cwd(),f=e||`list`;if(f===`list`||f===`remote`){let e=f===`remote`||!!(i.remote||i.all||i.huggingface),n=await g(d),s=n?.config?.agent?.defaultModel||n?.config?.settings?.defaultModel||u;if(e){i.quiet||r.stdout.write(`
|
|
26
26
|
Fetching available ONNX models from Hugging Face (onnx-community)...
|
|
27
27
|
`);let e=await c({cacheDir:i.cacheDir,query:i.query||(f===`remote`&&t?t:void 0)});if(!i.quiet)if(e.length===0)r.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
|
|
28
28
|
|
|
@@ -36,5 +36,5 @@ Curated Transformers.js Models (Local ONNX):
|
|
|
36
36
|
`);for(let e of l){let t=e.id===s,n=e.cached?` [Cached]`:` [Not downloaded]`,i=t?` (Default)`:``;r.stdout.write(` • ${e.id}${i}${n}\n`),r.stdout.write(` Name: ${e.name}\n`),r.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),r.stdout.write(` ${e.description}\n\n`)}r.stdout.write(`Curated Llamafile Models (Local Executable):
|
|
37
37
|
|
|
38
38
|
`);for(let e of p){let t=e.fileName===s||e.id===s||s.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,i=t?` (Default)`:``;r.stdout.write(` • ${e.fileName}${i}${n}\n`),r.stdout.write(` Name: ${e.name}\n`),r.stdout.write(` URL: ${e.url}\n`),r.stdout.write(` ${e.description}\n\n`)}r.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:l,llamafileModels:p,defaultModel:s}}if(f===`download`){let e=t||i.model||u;i.verbose&&!i.quiet&&r.stderr.write(`Preparing to download model: ${e}\n`);let n=await s(e,{cacheDir:i.cacheDir,verbose:i.verbose,isTTY:i.isTTY,progress:i.progress!==!1&&!i.noProgress});return n.success||(r.exitCode=1),n}if(f===`set`){let e=t||i.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return i.quiet||console.error(e),r.exitCode=1,{success:!1,error:e}}let a=await g(d),o=a?.configPath||n.join(d,`shadow-claw.config.json`),s=a?.config||{},c={...s,agent:{...s.agent||{},defaultModel:e}};return await l(o,JSON.stringify(c,null,2)+`
|
|
39
|
-
`,`utf8`),i.quiet||r.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return i.quiet||console.error(p),r.exitCode=1,{success:!1,error:p}}async function L(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),r.exitCode=1,{success:!1,error:e}}let{db:i,core:a}=await C(t),o=t.group||a.DEFAULT_SERVER_GROUP_ID||D,s=a.fetchDiscoveryManifest||(await import(`./chunk-
|
|
40
|
-
Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.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(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${O.length} tool${O.length===1?``:`s`}, ${k.length} skill${k.length===1?``:`s`}, ${A.length} script${A.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(r.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function R(e,t=[],n={}){let i=t,a=n;if(!Array.isArray(t)&&typeof t==`object`&&(a=t,i=[]),a._stdinData===void 0)try{a={...a,_stdinData:r.stdin.isTTY?null:await w({timeoutMs:500})}}catch{a={...a,_stdinData:null}}switch(e){case`init`:{let e=i[0]||a.workspace,t=await O({...a,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await k(a);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)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=i[0];if(e)return await j(e,i[1],a);let t=await A(a);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=i[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),r.exitCode=1;return}return await j(e,i[1],a)}case`skill`:{let e=i[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),r.exitCode=1;return}return await M(e,a)}case`run`:return await F(i.join(` `)||`-`,a);case`models`:case`model`:{let e=i[0]||`list`,t=i[1];return await I(e,t,a)}case`import`:{let e=i[0];return e?await L(e,a):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),r.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(a.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-
|
|
39
|
+
`,`utf8`),i.quiet||r.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:o}}let p=`Unknown model action: "${f}". Available: list, download, set`;return i.quiet||console.error(p),r.exitCode=1,{success:!1,error:p}}async function L(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),r.exitCode=1,{success:!1,error:e}}let{db:i,core:a}=await C(t),o=t.group||a.DEFAULT_SERVER_GROUP_ID||D,s=a.fetchDiscoveryManifest||(await import(`./chunk-CCx8WOwz2.js`)).fetchDiscoveryManifest,c=a.importRemoteArtifacts||(await import(`./chunk-BqWBd_jF2.js`)).importRemoteArtifacts,l=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let u;try{u=await s(n,l)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),r.exitCode=1,{success:!1,error:n}}let{manifest:d,siteUrl:f,manifestUrl:p}=u,m=d.tools||[],h=d.skills||[],g=d.scripts||[];t.quiet||console.log(`Discovered: ${d.name||`Remote Site`} (${h.length} skill${h.length===1?``:`s`}, ${m.length} tool${m.length===1?``:`s`}, ${g.length} script${g.length===1?``:`s`})`);let _=m.map(e=>e.name),v=h.map(e=>e.name),y=g.map(e=>e.name),b,x,S;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):[];b=e(t.tools),x=e(t.skills),S=e(t.scripts)}else b=_,x=v,S=y;let w=t.autoEnable!==!1,T=!!t.overwrite,E;try{E=await c(i,o,d,{toolNames:b,skillNames:x,scriptNames:S},{autoEnable:w,overwrite:T,fetchFn:l,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}`),r.exitCode=1,{success:!1,error:n}}let O=E.tools.filter(e=>e.status===`imported`),k=E.skills.filter(e=>e.status===`imported`),A=E.scripts.filter(e=>e.status===`imported`),j=E.tools.filter(e=>e.status===`skipped`),M=E.skills.filter(e=>e.status===`skipped`),N=E.scripts.filter(e=>e.status===`skipped`),P=E.tools.filter(e=>e.status===`failed`),F=E.skills.filter(e=>e.status===`failed`),I=E.scripts.filter(e=>e.status===`failed`),L=O.length+k.length+A.length,R=j.length+M.length+N.length,z=P.length+F.length+I.length;if(!t.quiet){console.log(`
|
|
40
|
+
Importing artifacts:`);for(let e of[...E.tools,...E.skills,...E.scripts]){let t=E.tools.includes(e)?`tool`:E.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(z>0?`\nCompleted with ${z} error${z===1?``:`s`}. Successfully imported ${L} items, ${R} skipped.`:`\nSuccessfully imported ${L} item${L===1?``:`s`} (${O.length} tool${O.length===1?``:`s`}, ${k.length} skill${k.length===1?``:`s`}, ${A.length} script${A.length===1?``:`s`}).`)}let B=z===0||L>0;return B||(r.exitCode=1),{success:B,manifest:d,siteUrl:f,manifestUrl:p,result:E,importedCount:L,skippedCount:R,failedCount:z}}async function R(e,t=[],n={}){let i=t,a=n;if(!Array.isArray(t)&&typeof t==`object`&&(a=t,i=[]),a._stdinData===void 0)try{a={...a,_stdinData:r.stdin.isTTY?null:await w({timeoutMs:500})}}catch{a={...a,_stdinData:null}}switch(e){case`init`:{let e=i[0]||a.workspace,t=await O({...a,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=await k(a);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)console.log(` - ${t.name}: ${t.description||`No description`}`)}return e}case`tools`:{let e=i[0];if(e)return await j(e,i[1],a);let t=await A(a);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=i[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),r.exitCode=1;return}return await j(e,i[1],a)}case`skill`:{let e=i[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),r.exitCode=1;return}return await M(e,a)}case`run`:return await F(i.join(` `)||`-`,a);case`models`:case`model`:{let e=i[0]||`list`,t=i[1];return await I(e,t,a)}case`import`:{let e=i[0];return e?await L(e,a):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),r.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(a.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-CZvvgLVv.js`);return t(e)}))({...a,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|listen> [args...]`)}}export{I as a,k as c,C as d,x as f,O as i,j as l,R as n,F as o,g as p,L as r,M as s,N as t,A as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./chunk-DKVkYTV9.js";export{e as getAgentCore};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./chunk-
|
|
1
|
+
import{n as e}from"./chunk-P4JSeFBI.js";const t=`.well-known/agent-skills/index.json`;function n(e){let n=e.trim();if(!n)throw Error(`URL cannot be empty`);let r=n;if(!r.startsWith(`http://`)&&!r.startsWith(`https://`)&&(r=`https://${r}`),r=r.replace(/\/+$/,``),r.endsWith(t)){let e=r.slice(0,-35).replace(/\/+$/,``);return{baseUrl:e,siteUrl:e,manifestUrl:r}}return{baseUrl:r,siteUrl:r,manifestUrl:`${r}/${t}`}}function r(e,t){if(!e)return``;try{return new URL(e,t).href}catch{return e}}function i(e,t){let n=JSON.parse(JSON.stringify(e));return Array.isArray(n.tools)&&(n.tools=n.tools.map(e=>({...e,url:r(e.url,t)}))),Array.isArray(n.scripts)&&(n.scripts=n.scripts.map(e=>({...e,url:r(e.url,t)}))),Array.isArray(n.skills)&&(n.skills=n.skills.map(e=>({...e,url:r(e.url,t),tools:Array.isArray(e.tools)?e.tools.map(e=>({...e,url:e.url?r(e.url,t):void 0})):void 0,scripts:Array.isArray(e.scripts)?e.scripts.map(e=>({...e,url:e.url?r(e.url,t):void 0})):void 0}))),n}async function a(t,n){if(!n||!n.startsWith(`sha256:`))return!0;let r=n.slice(7).trim().toLowerCase();return!r||(await e(typeof t==`string`?new TextEncoder().encode(t):t)).toLowerCase()===r}async function o(e,t=globalThis.fetch){let{baseUrl:r,manifestUrl:a}=n(e),o=await t(a,{headers:{Accept:`application/json`}});if(!o.ok)throw Error(`Failed to fetch discovery manifest: HTTP ${o.status} ${o.statusText}`.trim());let s=await o.json();if(!s||typeof s!=`object`)throw Error(`Invalid discovery manifest: expected a JSON object`);return{manifest:i(s,a),siteUrl:r,manifestUrl:a}}export{a,i,n,r,o as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./chunk-BQCWtrzh.js";import{h as t,r as n,w as r}from"./chunk-
|
|
1
|
+
import{r as e}from"./chunk-BQCWtrzh.js";import{h as t,r as n,w as r}from"./chunk-CXAobnJd.js";import"./chunk-DFLqhyP_.js";import{t as i}from"./chunk-Dhh0lHO6.js";import{a}from"./chunk-UweLmfQS.js";import{t as o}from"./chunk-P4JSeFBI.js";async function s(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}let c=null;async function l(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function u(){let e=r();return e?`${t}-${e}`:t}async function d(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=u();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return a()}function f(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function p(e){if(c)return c;try{let t=await i(e,n.STORAGE_HANDLE);if(f(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return d()}function m(e){c=e}function h(){c=null}function g(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function _(e){if(c)try{let e=await c.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await l(c,e),name:c.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await i(e,n.STORAGE_HANDLE);if(f(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await l(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function v(t,n){let r=await p(t);return e()?r:s(r,`groups`,n.replace(/:/g,`-`))}function y(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function b(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(S(t)),await e.close();return}if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await C(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}return}throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function x(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await C(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
|
|
2
2
|
`);i=URL.createObjectURL(new Blob([e],{type:`text/javascript`})),a=new Worker(o(i))}catch{i&&URL.revokeObjectURL(i),r(Error(`Writable file streams are not supported by this browser/storage backend.`));return}let s=()=>{a&&a.terminate(),URL.revokeObjectURL(i)};a.onmessage=e=>{s(),e.data?.error?r(Error(e.data.error)):t()},a.onerror=e=>{s(),r(Error(e.message||`Worker file write failed`))},a.postMessage({pathSegments:e,bytes:n},[n.buffer])})}function S(e){if(typeof e==`string`||e instanceof Blob)return e;if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),new Blob([t])}return new Blob([e])}async function C(e){return e instanceof Uint8Array?e:typeof e==`string`?new TextEncoder().encode(e):e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array}export{u as a,h as c,v as i,g as l,x as n,p as o,y as r,_ as s,b as t,m as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./chunk-nmDhxXH_2.js";export{e as importRemoteArtifacts};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e from"node:fs";import t from"node:path";import n from"node:process";import{Buffer as r}from"buffer";import i from"node:readline/promises";import a from"node:tty";function o(e,t=1){if(!Number.isFinite(e)||e<=0)return`0 B`;let n=1024,r=t<0?0:t,i=[`B`,`KB`,`MB`,`GB`,`TB`],a=Math.floor(Math.log(e)/Math.log(n)),o=Math.min(a,i.length-1);return`${parseFloat((e/n**o).toFixed(r))} ${i[o]}`}function s(e={}){let{modelId:t=`model`,stream:r=n.stderr,barWidth:i=24,isTTY:a=!!(r&&typeof r==`object`&&r.isTTY),enabled:s=!0}=e;if(!s)return{update:()=>{},finish:()=>{},fail:e=>{r?.write&&r.write(`${e||`✖ Failed to download ${t}.`}\n`)}};let c=[],l=new Map,u=!1;function d(e){let t=Math.round(Math.max(0,Math.min(1,e))*i),n=i-t;return`[`+`=`.repeat(t)+(t<i?`>`:``)+` `.repeat(Math.max(0,n-+(t<i)))+`]`}function f(e,t=0,n=0){let i=l.get(e);return i||(i={lineIndex:c.length,lastPct:-1,lastRenderedTime:0,loaded:t,total:n,isDone:!1},l.set(e,i),c.push(e),a&&c.length>1&&r?.write&&r.write(`
|
|
2
|
-
`)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}return}if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}return}if(e.status===`done`){let i=l.get(n);if(i)if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`);else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B with Grouped Query Attention (Default)`,contextLength:32e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model`,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}],l=`onnx-community/gemma-3-1b-it-ONNX-GQA`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!1},{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:!1},{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:!1},{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:!1},{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:!1},{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:!1}];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`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(n,r){let i=f(r);if(!e.existsSync(i))return!1;let a=t.basename(n),o=a.endsWith(`.llamafile`)?a:`${a}.llamafile`,s=t.join(i,o);try{if(e.existsSync(s))return e.statSync(s).size>0}catch{}return!1}function h(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)&&e.readdirSync(t).length>0)return!0}catch{}return!1}function g(e){return c.map(t=>({...t,cached:h(t.id,e)}))}function _(e){return u.map(t=>({...t,cached:m(t.fileName,e)}))}async function v(e={}){let t=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=100`;try{let n=await fetch(t,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!n.ok)return[];let r=await n.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))}return i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:h(t,e.cacheDir)}))}catch{return[]}}async function y(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:p,noProgress:m,abortSignal:h}=a,g=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),_,v;g?(_=g.url,v=g.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(_=i,v=t.basename(new URL(i).pathname)):(v=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,_=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${v}`);let y=f(o);e.mkdirSync(y,{recursive:!0});let b=t.join(y,v),x=t.join(y,`${v}.downloading.${Date.now()}`),S=s({modelId:v,stream:d,isTTY:l,enabled:p!==!1&&!m});try{c&&d?.write&&d.write(`[Llamafile] Downloading ${_}...\n`);let t=await(a.fetch||globalThis.fetch)(_,{headers:{"User-Agent":`ShadowClaw-CLI`},redirect:`follow`,signal:h});if(!t.ok)throw Error(`Failed to download ${_}: HTTP ${t.status} ${t.statusText}`);let n=parseInt(t.headers?.get?.(`content-length`)||`0`,10),o=e.createWriteStream(x),s=0;if(t.body){let{Readable:e}=await import(`node:stream`),i;if(typeof e.fromWeb==`function`&&typeof t.body.getReader==`function`)i=e.fromWeb(t.body);else if(typeof t.body[Symbol.asyncIterator]==`function`)i=t.body;else{let e=r.from(await t.arrayBuffer());o.write(e),s=e.length}if(i)for await(let e of i){let t=r.isBuffer(e)?e:r.from(e);o.write(t),s+=t.length,S.update({status:`progress`,file:v,loaded:s,total:n,progress:n>0?s/n*100:void 0})}}o.end(),await new Promise((e,t)=>{o.on(`finish`,e),o.on(`error`,t)}),e.renameSync(x,b);try{e.chmodSync(b,493)}catch{}return S.finish(),{success:!0,modelId:i,path:b}}catch(t){try{e.existsSync(x)&&e.unlinkSync(x)}catch{}let n=t instanceof Error?t.message:String(t);return S.fail(`✖ Error downloading ${v}: ${n}`),{success:!1,modelId:i,error:n}}}async function b(e,t={}){if(p(e))return y(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l}=t,u=o;if(!u){let{getAgentCore:e}=await import(`./chunk-
|
|
2
|
+
`)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}return}if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}return}if(e.status===`done`){let i=l.get(n);if(i)if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`);else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B with Grouped Query Attention (Default)`,contextLength:32e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model`,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}],l=`onnx-community/gemma-3-1b-it-ONNX-GQA`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!1},{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:!1},{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:!1},{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:!1},{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:!1},{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:!1}];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`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(n,r){let i=f(r);if(!e.existsSync(i))return!1;let a=t.basename(n),o=a.endsWith(`.llamafile`)?a:`${a}.llamafile`,s=t.join(i,o);try{if(e.existsSync(s))return e.statSync(s).size>0}catch{}return!1}function h(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)&&e.readdirSync(t).length>0)return!0}catch{}return!1}function g(e){return c.map(t=>({...t,cached:h(t.id,e)}))}function _(e){return u.map(t=>({...t,cached:m(t.fileName,e)}))}async function v(e={}){let t=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=100`;try{let n=await fetch(t,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!n.ok)return[];let r=await n.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))}return i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:h(t,e.cacheDir)}))}catch{return[]}}async function y(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:p,noProgress:m,abortSignal:h}=a,g=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),_,v;g?(_=g.url,v=g.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(_=i,v=t.basename(new URL(i).pathname)):(v=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,_=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${v}`);let y=f(o);e.mkdirSync(y,{recursive:!0});let b=t.join(y,v),x=t.join(y,`${v}.downloading.${Date.now()}`),S=s({modelId:v,stream:d,isTTY:l,enabled:p!==!1&&!m});try{c&&d?.write&&d.write(`[Llamafile] Downloading ${_}...\n`);let t=await(a.fetch||globalThis.fetch)(_,{headers:{"User-Agent":`ShadowClaw-CLI`},redirect:`follow`,signal:h});if(!t.ok)throw Error(`Failed to download ${_}: HTTP ${t.status} ${t.statusText}`);let n=parseInt(t.headers?.get?.(`content-length`)||`0`,10),o=e.createWriteStream(x),s=0;if(t.body){let{Readable:e}=await import(`node:stream`),i;if(typeof e.fromWeb==`function`&&typeof t.body.getReader==`function`)i=e.fromWeb(t.body);else if(typeof t.body[Symbol.asyncIterator]==`function`)i=t.body;else{let e=r.from(await t.arrayBuffer());o.write(e),s=e.length}if(i)for await(let e of i){let t=r.isBuffer(e)?e:r.from(e);o.write(t),s+=t.length,S.update({status:`progress`,file:v,loaded:s,total:n,progress:n>0?s/n*100:void 0})}}o.end(),await new Promise((e,t)=>{o.on(`finish`,e),o.on(`error`,t)}),e.renameSync(x,b);try{e.chmodSync(b,493)}catch{}return S.finish(),{success:!0,modelId:i,path:b}}catch(t){try{e.existsSync(x)&&e.unlinkSync(x)}catch{}let n=t instanceof Error?t.message:String(t);return S.fail(`✖ Error downloading ${v}: ${n}`),{success:!1,modelId:i,error:n}}}async function b(e,t={}){if(p(e))return y(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l}=t,u=o;if(!u){let{getAgentCore:e}=await import(`./chunk-CbcwbfJB.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);u=t.createTransformersRuntimeService()}let d=s({modelId:e,stream:a,isTTY:i,enabled:c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await u.prewarmModel({modelId:e,verbose:r,onProgress:e=>{d.update(e)}}),d.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return d.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function x(r={}){let o=t.resolve(r.contentRoot||n.cwd()),s=t.resolve(r.workspaceDir||o),c=r.cacheDir,u=r.onExit||(e=>n.exit(e)),d=r.stdin||n.stdin,f=r.stdout||n.stderr,g=!1,_=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`;_=e.openSync(t,`r`),d=new a.ReadStream(_),f=n.stderr.isTTY?n.stderr:n.stdout,g=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,g=!0}catch{}}let x=i.createInterface({input:d,output:f}),S=!1,C=()=>{if(!S){S=!0,f.write(`
|
|
3
3
|
Operation cancelled.
|
|
4
4
|
`);try{x.close()}catch{}u(130)}};x.on(`SIGINT`,C),d&&typeof d.on==`function`&&d!==n.stdin&&d.on(`SIGINT`,C);let w=()=>C();n.on(`SIGINT`,w);let T=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&C()};d&&typeof d.on==`function`&&d.on(`data`,T);try{f.write(`
|
|
5
5
|
ShadowClaw CLI Agent — Model Selection:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-
|
|
1
|
+
import{t as e}from"./chunk-uAI_Zi6n.js";import{existsSync as t}from"node:fs";import n from"node:path";import{pathToFileURL as r}from"node:url";import i from"node:process";const a=e(import.meta.url);let o=null;async function s(){if(o)return o;let e=i.env.NODE_ENV===`test`,s=n.join(a,`dist/headless-agent.js`);if(!e&&t(s))return o=await import(r(s).href),o;try{return o={...await import(`./chunk-HlSiTC-u2.js`)},o}catch{try{return o={...await import(`./chunk-HlSiTC-u2.js`)},o}catch(e){if(t(s))return o={...await import(r(s).href)},o;throw e}}}export{s as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./chunk-BQCWtrzh.js";import{a as t,i as n}from"./chunk-
|
|
1
|
+
import{r as e}from"./chunk-BQCWtrzh.js";import{a as t,i as n}from"./chunk-CXAobnJd.js";import r from"isomorphic-git";import{Buffer as i}from"buffer";globalThis.Buffer||(globalThis.Buffer=i);function a(e){try{let t=typeof location<`u`&&location.origin?location.origin:typeof globalThis<`u`&&globalThis.location?.origin?globalThis.location.origin:`http://127.0.0.1:8888`,n=new URL(e,t).hostname.toLowerCase();if(n===`localhost`||n===`127.0.0.1`||n===`::1`||n===`[::1]`)return`loopback`;if(/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(n)||!n.includes(`.`)||n.endsWith(`.local`)||n.endsWith(`.lan`)||n.endsWith(`.home`)||n.endsWith(`.internal`))return`private`}catch{}}const o={async request({url:e,method:t=`GET`,headers:n={},body:r}){r&&=await s(r);let i=a(e),o={method:t,headers:n,body:r,credentials:`omit`};i&&(o.targetAddressSpace=i);let l=await fetch(e,o),u=l.body&&typeof l.body.getReader==`function`?c(l.body):[new Uint8Array(await l.arrayBuffer())],d={};for(let[e,t]of l.headers.entries())d[e]=t;return{url:l.url,method:t,statusCode:l.status,statusMessage:l.statusText,body:u,headers:d}}};async function s(e){let t=[];if(e[Symbol.asyncIterator])for await(let n of e)t.push(n);else if(e[Symbol.iterator])for(let n of e)t.push(n);else if(e.next){let n=await e.nexT();for(;!n.done;)t.push(n.value),n=await e.nexT()}else return e;let n=t.reduce((e,t)=>e+t.length,0),r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.length;return r}function c(e){let t=e.getReader();return{next(){return t.read()},return(){return t.releaseLock(),{}},[Symbol.asyncIterator](){return this}}}let l=null,u=null,d=null,f=null,p=null;function m(e){return e.trim().replace(/^[\\/]+/,``).replace(/[\\/]+$/,``).split(/[\\/]+/).filter(e=>e!==`.`&&e!==``).join(`/`)}const h=new class{_map=new Map;_maxSize;constructor(e=2048){this._maxSize=e}clear(){this._map.clear()}get(e){let t=this._map.get(e);return t!==void 0&&(this._map.delete(e),this._map.set(e,t)),t}invalidate(e){let t=e.endsWith(`/`)?e:e+`/`;for(let n of this._map.keys())(n===e||n.startsWith(t))&&this._map.delete(n)}set(e,t){if(this._map.size>=this._maxSize){let e=this._map.keys().next().value;e!==void 0&&this._map.delete(e)}this._map.set(e,t)}};async function g(e,t,n={},r=``){let i=e,a=r;for(let e of t){a=a?`${a}/${e}`:e;let t=h.get(a);t&&!n.create?i=t:(i=await i.getDirectoryHandle(e,{create:n.create??!1}),h.set(a,i))}return i}async function _(e,t,n={}){let r=m(t),i=r.split(`/`).filter(Boolean);if(i.length===0)return e;let a=await g(e,i.slice(0,-1),n),o=i[i.length-1];if(n.forceFile||o.includes(`.`))try{return await a.getFileHandle(o,{create:n.create??!1})}catch{}try{let e=await a.getDirectoryHandle(o,{create:n.create??!1}),t=r;return h.set(t,e),e}catch{return await a.getFileHandle(o,{create:n.create??!1})}}async function v(e,t,n={}){let r=m(t).split(`/`).filter(Boolean);return r.length===0?e:g(e,r,n)}async function y(e,t,n={}){let r=m(t).split(`/`).filter(Boolean);if(r.length===0)throw Error(`Cannot resolve '.' as file`);return(await g(e,r.slice(0,-1),n)).getFileHandle(r[r.length-1],{create:n.create??!1})}async function b(e,t){let n=m(t).split(`/`).filter(Boolean);if(n.length===0)throw Error(`Cannot get parent of root`);let r=n[n.length-1];return[await g(e,n.slice(0,-1)),r]}function x(e){return e.trim().replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``)}function S(e){let t=new Map,n=`repos/.git-modes`;function r(e){return e.replace(/\\/g,`/`.replace(/^\/+/,``))}async function i(){try{let r=await(await(await y(e,n)).getFile()).text(),i=JSON.parse(r);for(let[e,n]of i)t.set(e,n)}catch{}}let a=null;function o(){a===null&&(a=setTimeout(async()=>{a=null;try{let r=await(await y(e,n,{create:!0})).createWritable(),i=JSON.stringify([...t.entries()]);await r.write(new TextEncoder().encode(i)),await r.close()}catch{}},500))}let s=i(),c={async readFile(t,n){let r=await(await(await y(e,t)).getFile()).arrayBuffer(),i=typeof n==`string`?n:n?.encoding;return i===`utf8`||i===`utf-8`?new TextDecoder().decode(r):new Uint8Array(r)},async writeFile(n,i,a){let s=await(await y(e,n,{create:!0})).createWritable();typeof i==`string`&&(i=new TextEncoder().encode(i)),await s.write(i),await s.close();let c=typeof a==`object`&&a?a.mode:void 0,l=r(n);if(c!=null){let e=(c&73)!=0;t.set(l,e?33261:33188),o()}else t.has(l)||t.set(l,33188)},async mkdir(t){await v(e,t,{create:!0})},async rmdir(n){let[i,a]=await b(e,n);await i.removeEntry(a,{recursive:!0});let o=r(n)+`/`;for(let e of t.keys())(e===r(n)||e.startsWith(o))&&t.delete(e);h.invalidate(m(n))},async readdir(t){let n=await v(e,t),r=[];for await(let[e]of n.entries())r.push(e);return r},async stat(n){await s;let i;try{i=await _(e,n)}catch{let e=Error(`ENOENT: no such file or directory, stat '${n}'`);throw e.code=`ENOENT`,e}if(i.kind===`directory`){let e=new Date;return{isDirectory:()=>!0,isFile:()=>!1,isSymbolicLink:()=>!1,size:0,mtimeMs:Date.now(),mode:16877,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:e,mtime:e}}else{let e=await i.getFile(),a=new Date(e.lastModified),o=r(n),s=t.get(o)??33188;return{isDirectory:()=>!1,isFile:()=>!0,isSymbolicLink:()=>!1,size:e.size,mtimeMs:e.lastModified,mode:s,ino:0,dev:0,nlink:1,uid:0,gid:0,ctime:a,mtime:a}}},async lstat(e){return c.stat(e)},async unlink(n){let[i,a]=await b(e,n);await i.removeEntry(a),t.delete(r(n))},async symlink(e,t){throw Error(`OPFS does not support symlinks`)},async readlink(e){return await c.readFile(e,`utf8`)}};return{promises:c}}const ee=S,C=`repos`;function w(e,r,i){if(e===`custom`&&r)return r;if(e===`public`)return`https://www.cors-anywhere.com`;let a=i||(typeof globalThis<`u`&&globalThis.location?globalThis.location:typeof self<`u`&&self.location?self.location:typeof window<`u`&&window.location?window.location:null),o=a?.protocol||``,s=o===`https:`||o===`https`||typeof a?.origin==`string`&&a.origin.startsWith(`https:`)||typeof a?.href==`string`&&a.href.startsWith(`https://`)?`https:`:`http:`,c=a?.host||``,l=a?.hostname||``,u=l===`localhost`||l===`127.0.0.1`||l===`::1`||l===`[::1]`||l===`0.0.0.0`||c.startsWith(`localhost:`)||c.startsWith(`127.0.0.1:`)||c.startsWith(`[::1]:`),d=a&&(a.protocol===`file:`||l&&(l.endsWith(`.github.io`)||l.endsWith(`.pages.dev`)));return c&&(u||!d)?`${s}//${c}/git-proxy`:`${s}//${n}:${t}/git-proxy`}async function T(){return p||=(async()=>{if(l=r,u=o,!d){let e=null;if(typeof navigator<`u`&&typeof navigator.storage?.getDirectory==`function`)try{e=await navigator.storage.getDirectory()}catch(e){console.warn(`OPFS is unavailable for git root, falling back to memory:`,e)}if(!e){let{getMemoryOpfsRoot:t}=await import(`./chunk-p0n_c-I2.js`);e=t()}d=S(e),f=d.promises}})(),await p,{git:l,http:u,fs:d,pfs:f}}async function E(e){let t=await T();if(e){let n=S(e);return{git:t.git,http:t.http,fs:n,pfs:n.promises,repoDirFn:e=>`repos/${e}`}}return{...t,repoDirFn:O}}function D(e){return(e.replace(/\/+$/,``).split(`/`).pop()||`repo`).replace(/\.git$/,``)}function O(e){return`${C}/${e}`}async function k(e,t,n){try{await e.getConfig({fs:t,dir:n,path:`core.filemode`})!==!1&&await e.setConfig({fs:t,dir:n,path:`core.filemode`,value:!1})}catch(e){console.error(`Failed to set core.filemode=false:`,e)}}async function A(e,t){try{await e.mkdir(t)}catch{}}function j({token:e,username:t,password:n}={}){if(!e&&!t)return{};let r;e?r={Authorization:`Basic ${btoa(`${e}:x-oauth-basic`)}`}:t&&(r={Authorization:`Basic ${btoa(`${t}:${n||``}`)}`});let i=()=>e?{username:e,password:`x-oauth-basic`}:t?{username:t,password:n||``}:{cancel:!0},a=()=>({cancel:!0});return{...r?{headers:r}:{},onAuth:i,onAuthFailure:a}}async function M({url:t,branch:n,depth:r=20,corsProxy:i,name:a,token:o,username:s,password:c,groupRoot:l}){let{git:u,http:d,fs:f,pfs:p,repoDirFn:m}=await E(l),h=a||D(t),g=m(h);!i&&!e()&&(i=w(`local`)),await A(p,C),await A(p,g);let _=j({token:o,username:s,password:c});try{let e={fs:f,http:d,dir:g,url:t,singleBranch:!0,depth:r,corsProxy:i,..._};n&&(e.ref=n),await u.clone(e)}catch{try{let e={fs:f,http:d,dir:g,url:t,singleBranch:!0,depth:r,corsProxy:i,..._};n&&(e.ref=n),await u.fetch(e)}catch{try{await Q(p,g),await A(p,g);let e={fs:f,http:d,dir:g,url:t,singleBranch:!0,depth:r,corsProxy:i,..._};n&&(e.ref=n),await u.clone(e)}catch(e){throw Error(`Failed to clone/fetch ${t}: ${e instanceof Error?e.message:String(e)}`)}}}return await k(u,f,g),h}async function N({repo:e,ref:t,groupRoot:n}){let{git:r,fs:i,repoDirFn:a}=await E(n),o=a(e);return await r.checkout({fs:i,dir:o,ref:t,force:!0}),`Checked out ${t} in ${e}`}async function te({repo:e,name:t,checkout:n=!1,startPoint:r,groupRoot:i}){let{git:a,fs:o,repoDirFn:s}=await E(i),c=s(e),l={fs:o,dir:c,ref:t};return r&&(l.object=r),await a.branch(l),n?(await a.checkout({fs:o,dir:c,ref:t}),`Created and switched to branch ${t} in ${e}`):`Created branch ${t} in ${e}`}async function P({repo:e,groupRoot:t}){let{git:n,fs:r,repoDirFn:i}=await E(t),a=i(e);await k(n,r,a);let o=await n.statusMatrix({fs:r,dir:a});if(o.length===0)return`Empty repository.`;let s=[];for(let[e,t,n,r]of o){let i=``;if(t===0&&n===2&&r===2)i=`added`;else if(t===0&&n===2&&r===0)i=`new (unstaged)`;else if(t===1&&n===2&&r===2)i=`modified (staged)`;else if(t===1&&n===2&&r===1)i=`modified`;else if(t===1&&n===0&&r===0)i=`deleted`;else if(t===1&&n===1&&r===1)continue;else i=`[${t},${n},${r}]`;s.push(`${i}: ${e}`)}return s.length===0?`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\nNothing to commit, working tree clean.`:`On branch ${await n.currentBranch({fs:r,dir:a})||`(detached HEAD)`}\n${s.join(`
|
|
2
2
|
`)}`}async function F({repo:e,ref:t,depth:n=10,groupRoot:r}){let{git:i,fs:a,repoDirFn:o}=await E(r),s={fs:a,dir:o(e),depth:n};t&&(s.ref=t);let c=await i.log(s);return c.length===0?`No commits found.`:c.map(e=>{let t=e.commit,n=new Date(t.author.timestamp*1e3).toISOString();return`${e.oid} ${n} ${t.author.name} — ${t.message.trim().split(`
|
|
3
3
|
`)[0]}`}).join(`
|
|
4
4
|
`)}async function I({repo:e,ref1:t,ref2:n,groupRoot:r}){let{git:i,fs:a,repoDirFn:o}=await E(r),s=o(e),c=a.promises;if(await k(i,a,s),!t&&!n){let e=(await i.statusMatrix({fs:a,dir:s})).filter(([,e,t])=>!(e===1&&t===1));if(e.length===0)return`No differences.`;let t=[];for(let[n,r,o]of e)try{if(r===0&&o===2){let e=(await R(c,s,n)).split(`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as e,n as t,o as n,r}from"./chunk-BUD-sSgd.js";import{o as i}from"./chunk-
|
|
1
|
+
import{a as e,n as t,o as n,r}from"./chunk-BUD-sSgd.js";import{o as i}from"./chunk-ClPZ4Rea.js";import a from"node:fs";import o from"node:path";import s from"node:http";import{tmpdir as c}from"node:os";function l(e){return i(e,{replacement:`-`,fallback:`attachment`,stripLeadingDots:!0,collapseReplacement:!0,stripControlChars:!0})}function u(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(c(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),i={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-UcNbHaRQ.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>i[`send-message`](e,t),"send-file":async(n,i)=>{let{fileName:s,data:c,prompt:u,groupId:d}=n||{};if(!s||typeof s!=`string`||!c)throw Error(`Missing fileName or data in send-file args`);let f=l(s);await a.promises.mkdir(r,{recursive:!0});let p=o.join(r,f),m=Buffer.isBuffer(c)?c:Buffer.from(c,`base64`);await a.promises.writeFile(p,m);let h=i?.remotePeerId||`remote`,g=d||`peer:${h}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${f}" (${m.length} bytes) to ${p}`);let _;if(u&&typeof u==`string`&&u.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-UcNbHaRQ.js`);return n(e,t)}))(`[Attached file: ${f} (${m.length} bytes) saved at ${p}]\n\n${u.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:g,quiet:!e.verbose,stream:!1});t?.success&&(_=t.response)}return{success:!0,fileName:f,path:p,size:m.length,reply:_,text:_}},"transfer-file":async(e,t)=>i[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-C0xoMqcL2.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return i}function d(t,n){return new Promise((r,i)=>{let c=e(n);try{a.unlinkSync(c)}catch{}try{a.mkdirSync(o.dirname(c),{recursive:!0})}catch{}let l=s.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`){n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));return}if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}));return}if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}});return}n.writeHead(404),n.end()});l.listen(c,()=>{console.log(`[webrtc-listen] IPC socket: ${c}`),r(l)}),l.on(`error`,i)})}async function f(e={}){let i=e.host||process.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(process.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,s=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((process.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),c=!!(e.insecure===!1||[`0`,`false`,`no`].includes((process.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),l=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],f=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${f}`),console.log(`Signaling server : ${s?`wss`:`ws`}://${i}:${a}${o}`),s&&!c&&console.log(`TLS verification : disabled (self-signed cert allowed)`),l.length>0?console.log(`Trusted peers : ${l.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${f}"`),console.log(``);let p={...u({...e,peerId:f}),...e.handlers||{}},m=new t({host:i,port:a,path:o,secure:s,rejectUnauthorized:c,trustedPeerIds:l,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:p}),h=new Map;m._pendingIpc=h;let g=m._setupConnection.bind(m);m._setupConnection=function(e,t){g(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(!(!t||typeof t!=`object`)&&t.type===`command:result`){let e=t.payload||{},n=h.get(e.commandId);n&&(h.delete(e.commandId),n(e))}})};let _=t=>{if(console.log(`
|
|
2
2
|
[webrtc-listen] Shutting down…`),r(e.cacheDir),t)try{t.close()}catch{}m.close(),process.exit(0)};try{await m.start();let t=await d(m,e.cacheDir);process.on(`SIGINT`,()=>_(t)),process.on(`SIGTERM`,()=>_(t)),console.log(`[webrtc-listen] Ready. Run commands with:
|
|
3
3
|
node bin/cli.mjs send --transport webrtc --client <browser-peer-id> "message"`),await new Promise(()=>{})}catch(t){r(e.cacheDir),console.error(`Error starting WebRTC listener: ${t.message}`),process.exitCode=1}}export{f as n,d as r,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./chunk-C6FFByBU2.js";export{e as orchestratorStore};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./chunk-DxIsgrAF.js";import{r as t,w as n}from"./chunk-
|
|
1
|
+
import{t as e}from"./chunk-DxIsgrAF.js";import{r as t,w as n}from"./chunk-CXAobnJd.js";import"./chunk-DFLqhyP_.js";import"./chunk-CvoMdhST2.js";function r(){if(typeof localStorage<`u`)try{let e=localStorage.getItem(t.CONTROL_PLANE_CLIENT_ID);if(e&&e.trim())return e.trim()}catch{}let r=n(),i=r?`${r}-${e().toLowerCase()}`:`client-${e().toLowerCase()}`;if(typeof localStorage<`u`)try{localStorage.setItem(t.CONTROL_PLANE_CLIENT_ID,i)}catch{}return i}function i(){if(typeof navigator>`u`)return`ShadowClaw Node`;let e=navigator.userAgent,t=`Desktop`;/iPad/i.test(e)?t=`iPad`:/iPhone/i.test(e)?t=`iPhone`:/Android/i.test(e)?t=`Android`:/Macintosh/i.test(e)?t=`Mac`:/Windows/i.test(e)?t=`Windows`:/Linux/i.test(e)&&(t=`Linux`);let n=`Browser`;return/Chrome/i.test(e)&&!/Edg/i.test(e)?n=`Chrome`:/Safari/i.test(e)&&!/Chrome/i.test(e)?n=`Safari`:/Firefox/i.test(e)?n=`Firefox`:/Edg/i.test(e)&&(n=`Edge`),`${t} ${n}`}export{i as detectDeviceLabel,r as getOrCreateControlPlaneClientId};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./chunk-CjJsVrKI2.js";export{e as importRemoteArtifacts};
|