shadow-claw 1.59.7 → 1.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/.well-known/mcp/server-card.json +4 -12
  2. package/.well-known/mcp.json +4 -12
  3. package/README.md +6 -2
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/{chunk-DDvuLVfW.js → chunk-3C5izdQW.js} +1 -1
  6. package/dist/cli/chunk-B-75h9gX.js +1 -0
  7. package/dist/cli/{chunk-hVf839t7.js → chunk-B7Kn-otm.js} +1 -1
  8. package/dist/cli/{chunk-YX32FcN7.js → chunk-BBczgswQ.js} +1 -1
  9. package/dist/cli/{chunk-DcNxjqH6.js → chunk-BE-lYWcn.js} +1 -1
  10. package/dist/cli/{chunk-CQaCgswD.js → chunk-BECr0WxI.js} +11 -11
  11. package/dist/cli/chunk-BEz1PD1_.js +1 -0
  12. package/dist/cli/chunk-BLzI1Fp2.js +1 -0
  13. package/dist/cli/{chunk-B3TrWbca.js → chunk-BVSC1MNQ.js} +11 -11
  14. package/dist/cli/{chunk-D_te8ufL.js → chunk-BdWcep6o.js} +1 -1
  15. package/dist/cli/{chunk-SRBRVorc.js → chunk-BfTpnSS4.js} +1 -1
  16. package/dist/cli/{chunk-D2_eAO83.js → chunk-BgvqTf7w.js} +1 -1
  17. package/dist/cli/chunk-BwsJfUT3.js +1 -0
  18. package/dist/cli/{chunk--PFY91kE.js → chunk-C9b4b7c_.js} +1 -1
  19. package/dist/cli/{chunk-SxK79JmB.js → chunk-CAw9XYFe.js} +1 -1
  20. package/dist/cli/chunk-CFCcbFs2.js +396 -0
  21. package/dist/cli/{chunk-Cnjb8Usu.js → chunk-CTarF4FC.js} +1 -1
  22. package/dist/cli/{chunk-3vNYrs_L.js → chunk-Cbq5hpjb.js} +4 -4
  23. package/dist/cli/chunk-CjTjKy_v.js +310 -0
  24. package/dist/cli/chunk-Cjyu4cr_.js +36 -0
  25. package/dist/cli/{chunk-DUGZPka_.js → chunk-ClMKygjZ.js} +1 -1
  26. package/dist/cli/chunk-Cppnq1KF.js +1 -0
  27. package/dist/cli/{chunk-DvemF16v.js → chunk-D9QCNFMO.js} +1 -1
  28. package/dist/cli/{chunk-iB8OoMmW.js → chunk-DB21BMqt.js} +1 -1
  29. package/dist/cli/{chunk-_Vo-o_e3.js → chunk-DHoIWvCc.js} +1 -1
  30. package/dist/cli/chunk-DZEN9T5y.js +1 -0
  31. package/dist/cli/{chunk-5rLO4DWS.js → chunk-Dl14OyYO.js} +9 -9
  32. package/dist/cli/chunk-Dl_vv0dI.js +1 -0
  33. package/dist/cli/chunk-Dpmfhlyl.js +1 -0
  34. package/dist/cli/{chunk-BrR1DOBS.js → chunk-Du7Xtucq.js} +1 -1
  35. package/dist/cli/{chunk-B88Z8T_9.js → chunk-DxcDFUi_.js} +1 -1
  36. package/dist/cli/{chunk-Dt7-hzJU.js → chunk-DyyEWbV7.js} +1 -1
  37. package/dist/cli/chunk-N0x3mXU0.js +1 -0
  38. package/dist/cli/{chunk-CGoE4llV.js → chunk-V-w0Bata.js} +1 -1
  39. package/dist/cli/{chunk-CncW6_WL.js → chunk-ZxDxSSn-.js} +1 -1
  40. package/dist/cli/{chunk-CZdCRqNe.js → chunk-lPvFUkd5.js} +1 -1
  41. package/dist/cli/{chunk-66BvqAV0.js → chunk-n5s-sCdU.js} +1 -1
  42. package/dist/cli/{chunk-CAAeGOdy.js → chunk-nD9VPVMq.js} +1 -1
  43. package/dist/cli/{chunk-DMs7kREC.js → chunk-rFuy8aS_.js} +1 -1
  44. package/dist/cli/{chunk-B0qusANw.js → chunk-wjM6JXWa.js} +1 -1
  45. package/dist/cli/{chunk-DhOU6GYX.js → chunk-zcES9rut.js} +1 -1
  46. package/dist/cli/cli.js +3 -3
  47. package/dist/headless-agent.js +1 -1
  48. package/dist/lib/{channel-mmdGzPkT.js → channel-DB77spML.js} +2 -2
  49. package/dist/lib/{channel-mmdGzPkT.js.map → channel-DB77spML.js.map} +1 -1
  50. package/dist/lib/{compact-context-CY9BBlUQ.js → compact-context-Q9t9aL1e.js} +7 -7
  51. package/dist/lib/{compact-context-CY9BBlUQ.js.map → compact-context-Q9t9aL1e.js.map} +1 -1
  52. package/dist/lib/components/index.js +21 -21
  53. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  54. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  55. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  57. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  58. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  59. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  60. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  61. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  63. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  64. package/dist/lib/components/shadow-claw-channels.js +1 -1
  65. package/dist/lib/components/shadow-claw-chat.js +1 -1
  66. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  67. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  68. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  69. package/dist/lib/components/shadow-claw-files.js +1 -1
  70. package/dist/lib/components/shadow-claw-git.js +1 -1
  71. package/dist/lib/components/shadow-claw-llm.js +1 -1
  72. package/dist/lib/components/shadow-claw-networking.js +1 -1
  73. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  74. package/dist/lib/components/shadow-claw-pages.js +1 -1
  75. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  76. package/dist/lib/components/shadow-claw-settings.js +1 -1
  77. package/dist/lib/components/shadow-claw-storage.js +1 -1
  78. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  79. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  80. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  81. package/dist/lib/components/shadow-claw-tools.js +1 -1
  82. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  83. package/dist/lib/components/shadow-claw.js +1 -1
  84. package/dist/lib/{configure-peer-js-ccNvax2N.js → configure-peer-js-CgFiwoxY.js} +2 -2
  85. package/dist/lib/{configure-peer-js-ccNvax2N.js.map → configure-peer-js-CgFiwoxY.js.map} +1 -1
  86. package/dist/lib/content/build-attachment-content-blocks.d.ts +2 -0
  87. package/dist/lib/{discover-skills-OwlQ2sXA.js → discover-skills-CXyaWHKi.js} +5 -5
  88. package/dist/lib/{discover-skills-OwlQ2sXA.js.map → discover-skills-CXyaWHKi.js.map} +1 -1
  89. package/dist/lib/{git-D2J_j9X9.js → git-CogDRlEz.js} +2 -2
  90. package/dist/lib/{git-D2J_j9X9.js.map → git-CogDRlEz.js.map} +1 -1
  91. package/dist/lib/index.js +21 -21
  92. package/dist/lib/{init-control-plane-B7blDVIE.js → init-control-plane-CEGdzgWX.js} +7 -7
  93. package/dist/lib/{init-control-plane-B7blDVIE.js.map → init-control-plane-CEGdzgWX.js.map} +1 -1
  94. package/dist/lib/{invoke-agent-SxvudiDT.js → invoke-agent-cac3gCsj.js} +6 -6
  95. package/dist/lib/{invoke-agent-SxvudiDT.js.map → invoke-agent-cac3gCsj.js.map} +1 -1
  96. package/dist/lib/{move-group-entry-DDpjxa10.js → move-group-entry-D8dptMg0.js} +2 -2
  97. package/dist/lib/{move-group-entry-DDpjxa10.js.map → move-group-entry-D8dptMg0.js.map} +1 -1
  98. package/dist/lib/{orchestrator-C7fkh7T7.js → orchestrator-BBAwy9Nm.js} +12 -12
  99. package/dist/lib/{orchestrator-C7fkh7T7.js.map → orchestrator-BBAwy9Nm.js.map} +1 -1
  100. package/dist/lib/{orchestrator-CCARkxQC.js → orchestrator-cRBe3lhq.js} +2 -2
  101. package/dist/lib/{orchestrator-CCARkxQC.js.map → orchestrator-cRBe3lhq.js.map} +1 -1
  102. package/dist/lib/{peerjs-Bfw_FWLB.js → peerjs-BLg8aGUj.js} +3 -3
  103. package/dist/lib/{peerjs-Bfw_FWLB.js.map → peerjs-BLg8aGUj.js.map} +1 -1
  104. package/dist/lib/{process-peer-query-param-BxYiZNdf.js → process-peer-query-param-BnsVnxzH.js} +5 -5
  105. package/dist/lib/{process-peer-query-param-BxYiZNdf.js.map → process-peer-query-param-BnsVnxzH.js.map} +1 -1
  106. package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js → process-pending-shared-payloads-DBZfZOOa.js} +2 -2
  107. package/dist/lib/{process-pending-shared-payloads-DPIbwRb3.js.map → process-pending-shared-payloads-DBZfZOOa.js.map} +1 -1
  108. package/dist/lib/{process-room-query-param-B2_d50nE.js → process-room-query-param-B8EYg_-r.js} +4 -4
  109. package/dist/lib/{process-room-query-param-B2_d50nE.js.map → process-room-query-param-B8EYg_-r.js.map} +1 -1
  110. package/dist/lib/{push-client-rrjTdc-U.js → push-client-CAm6UMvE.js} +3 -3
  111. package/dist/lib/{push-client-rrjTdc-U.js.map → push-client-CAm6UMvE.js.map} +1 -1
  112. package/dist/lib/{rooms-bwGoYb1q.js → rooms-Dzphx3rK.js} +2 -2
  113. package/dist/lib/{rooms-bwGoYb1q.js.map → rooms-Dzphx3rK.js.map} +1 -1
  114. package/dist/lib/{shadow-claw-CypGVlVO.js → shadow-claw-CGl8tXtG.js} +6 -6
  115. package/dist/lib/{shadow-claw-CypGVlVO.js.map → shadow-claw-CGl8tXtG.js.map} +1 -1
  116. package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js → shadow-claw-channel-config-BNIWCdsL.js} +4 -4
  117. package/dist/lib/{shadow-claw-channel-config-DJpDovkF.js.map → shadow-claw-channel-config-BNIWCdsL.js.map} +1 -1
  118. package/dist/lib/{shadow-claw-channels-DJLwRovH.js → shadow-claw-channels-C2QSn4Ew.js} +2 -2
  119. package/dist/lib/{shadow-claw-channels-DJLwRovH.js.map → shadow-claw-channels-C2QSn4Ew.js.map} +1 -1
  120. package/dist/lib/{shadow-claw-chat-B92cPaft.js → shadow-claw-chat-Wx3y9y6c.js} +3 -3
  121. package/dist/lib/{shadow-claw-chat-B92cPaft.js.map → shadow-claw-chat-Wx3y9y6c.js.map} +1 -1
  122. package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js → shadow-claw-control-plane-D5E4cFGu.js} +6 -6
  123. package/dist/lib/{shadow-claw-control-plane-fvn-qyHj.js.map → shadow-claw-control-plane-D5E4cFGu.js.map} +1 -1
  124. package/dist/lib/{shadow-claw-conversations-CsVyDOny.js → shadow-claw-conversations-BtDv7GRW.js} +2 -2
  125. package/dist/lib/{shadow-claw-conversations-CsVyDOny.js.map → shadow-claw-conversations-BtDv7GRW.js.map} +1 -1
  126. package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js → shadow-claw-file-viewer-CG40kwWV.js} +2 -2
  127. package/dist/lib/{shadow-claw-file-viewer-DFfyP7s5.js.map → shadow-claw-file-viewer-CG40kwWV.js.map} +1 -1
  128. package/dist/lib/{shadow-claw-files-cT6HL7ye.js → shadow-claw-files-BOUULrlX.js} +3 -3
  129. package/dist/lib/{shadow-claw-files-cT6HL7ye.js.map → shadow-claw-files-BOUULrlX.js.map} +1 -1
  130. package/dist/lib/{shadow-claw-git-Cv9mQgTx.js → shadow-claw-git-BeHV73_9.js} +3 -3
  131. package/dist/lib/{shadow-claw-git-Cv9mQgTx.js.map → shadow-claw-git-BeHV73_9.js.map} +1 -1
  132. package/dist/lib/{shadow-claw-llm-CKOYzPDp.js → shadow-claw-llm-KONyWKZM.js} +2 -2
  133. package/dist/lib/{shadow-claw-llm-CKOYzPDp.js.map → shadow-claw-llm-KONyWKZM.js.map} +1 -1
  134. package/dist/lib/{shadow-claw-networking-DYfiUQaH.js → shadow-claw-networking-Diy3JJkc.js} +2 -2
  135. package/dist/lib/{shadow-claw-networking-DYfiUQaH.js.map → shadow-claw-networking-Diy3JJkc.js.map} +1 -1
  136. package/dist/lib/{shadow-claw-notifications-JJlzriuX.js → shadow-claw-notifications-C-upPa-4.js} +2 -2
  137. package/dist/lib/{shadow-claw-notifications-JJlzriuX.js.map → shadow-claw-notifications-C-upPa-4.js.map} +1 -1
  138. package/dist/lib/{shadow-claw-pages-BCo3ihZI.js → shadow-claw-pages-CfAjUKgd.js} +2 -2
  139. package/dist/lib/{shadow-claw-pages-BCo3ihZI.js.map → shadow-claw-pages-CfAjUKgd.js.map} +1 -1
  140. package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js → shadow-claw-peerjs-t4YibS9s.js} +5 -5
  141. package/dist/lib/{shadow-claw-peerjs-CFNjfrY5.js.map → shadow-claw-peerjs-t4YibS9s.js.map} +1 -1
  142. package/dist/lib/{shadow-claw-settings-BMwne0bh.js → shadow-claw-settings-Cg5V0e9g.js} +2 -2
  143. package/dist/lib/{shadow-claw-settings-BMwne0bh.js.map → shadow-claw-settings-Cg5V0e9g.js.map} +1 -1
  144. package/dist/lib/{shadow-claw-storage-DUY8B9m-.js → shadow-claw-storage-C7tCnsSG.js} +2 -2
  145. package/dist/lib/{shadow-claw-storage-DUY8B9m-.js.map → shadow-claw-storage-C7tCnsSG.js.map} +1 -1
  146. package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js → shadow-claw-task-server-BObsRdf8.js} +2 -2
  147. package/dist/lib/{shadow-claw-task-server-yWeoA3eL.js.map → shadow-claw-task-server-BObsRdf8.js.map} +1 -1
  148. package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js → shadow-claw-tasks-B2EEqrcY.js} +3 -3
  149. package/dist/lib/{shadow-claw-tasks-Bg0uM15I.js.map → shadow-claw-tasks-B2EEqrcY.js.map} +1 -1
  150. package/dist/lib/{shadow-claw-terminal-fyJPppY_.js → shadow-claw-terminal-DSHfO2b9.js} +2 -2
  151. package/dist/lib/{shadow-claw-terminal-fyJPppY_.js.map → shadow-claw-terminal-DSHfO2b9.js.map} +1 -1
  152. package/dist/lib/{shadow-claw-tools-D0T8m3go.js → shadow-claw-tools-DwPBADua.js} +3 -3
  153. package/dist/lib/{shadow-claw-tools-D0T8m3go.js.map → shadow-claw-tools-DwPBADua.js.map} +1 -1
  154. package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js → shadow-claw-webvm-CY4qGaMB.js} +2 -2
  155. package/dist/lib/{shadow-claw-webvm-CQvzJwKI.js.map → shadow-claw-webvm-CY4qGaMB.js.map} +1 -1
  156. package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js → sync-web-mcp-registration-BiOZvW-R.js} +3 -3
  157. package/dist/lib/{sync-web-mcp-registration-BFtG_4kx.js.map → sync-web-mcp-registration-BiOZvW-R.js.map} +1 -1
  158. package/dist/lib/{system-prompt-bhGRLoL2.js → system-prompt-CxJ3Nx4c.js} +4 -3
  159. package/dist/lib/system-prompt-CxJ3Nx4c.js.map +1 -0
  160. package/dist/public/.well-known/mcp/server-card.json +4 -12
  161. package/dist/public/.well-known/mcp.json +4 -12
  162. package/dist/public/AGENTS.md +3 -1
  163. package/dist/public/README.md +6 -2
  164. package/dist/public/agent.worker.js +1 -1
  165. package/dist/public/{channel-Dk7wl-Av.js → channel-DIpDQekL.js} +1 -1
  166. package/dist/public/{chat-template-BwAnTFKf.js → chat-template-CXKs8lFR.js} +1 -1
  167. package/dist/public/compact-context-BQ2ZXoAc.js +5 -0
  168. package/dist/public/{compact-context-fOTqwKF6.js → compact-context-dHitmPsV.js} +2 -2
  169. package/dist/public/{configure-peer-js-BOV0tR6G.js → configure-peer-js-DV1rqvFX.js} +1 -1
  170. package/dist/public/{create-model-cache-fetch-DSAFjOwc.js → create-model-cache-fetch-B0mSCEk6.js} +1 -1
  171. package/dist/public/{discover-skills-D1sNTy2r.js → discover-skills-BWJB8HUA.js} +1 -1
  172. package/dist/public/docs/architecture/overview.md +1 -1
  173. package/dist/public/docs/example/article/index.html +21 -21
  174. package/dist/public/docs/example/article.html +21 -21
  175. package/dist/public/docs/publishing/index.html +21 -21
  176. package/dist/public/docs/publishing.html +21 -21
  177. package/dist/public/docs/skill-creator/index.html +21 -21
  178. package/dist/public/docs/skill-creator.html +21 -21
  179. package/dist/public/docs/subsystems/attachment-capabilities.md +14 -1
  180. package/dist/public/docs/subsystems/cli.md +95 -51
  181. package/dist/public/docs/subsystems/pages.md +5 -0
  182. package/dist/public/e2e/README.md +1 -1
  183. package/dist/public/{e2e-bridge-Cz95DLlb.js → e2e-bridge-lP2qqiv3.js} +1 -1
  184. package/dist/public/{git-BmMlwIMP.js → git-DjmQ16rm.js} +1 -1
  185. package/dist/public/{iframe-bridge-scripts-Cibg0m6A.js → iframe-bridge-scripts-CO0izGjW.js} +1 -1
  186. package/dist/public/index.html +21 -21
  187. package/dist/public/index.js +1 -1
  188. package/dist/public/{init-control-plane-Cb31yLTY.js → init-control-plane-Ctz7FI8M.js} +1 -1
  189. package/dist/public/{invoke-agent-CN7mSV0Z.js → invoke-agent-C_geruwq.js} +1 -1
  190. package/dist/public/llms.txt +1 -1
  191. package/dist/public/main/index.html +21 -21
  192. package/dist/public/main/memory/index.html +21 -21
  193. package/dist/public/main/memory.html +21 -21
  194. package/dist/public/main.html +21 -21
  195. package/dist/public/{move-group-entry-CXneuNVa.js → move-group-entry-QQ9Hkk54.js} +1 -1
  196. package/dist/public/{orchestrator-Dyylc8IU.js → orchestrator-C1kaTltu.js} +2 -2
  197. package/dist/public/{orchestrator-DBO4NZqd.js → orchestrator-Li1UAsv7.js} +1 -1
  198. package/dist/public/{peerjs-l0jiBoh6.js → peerjs-DbBryE-9.js} +1 -1
  199. package/dist/public/{process-peer-query-param-s-aSP1Rq.js → process-peer-query-param-DQIgr3KL.js} +1 -1
  200. package/dist/public/{process-pending-shared-payloads-BN3GigPT.js → process-pending-shared-payloads-Ctb-TFqB.js} +1 -1
  201. package/dist/public/{process-room-query-param-B2Qe0F0M.js → process-room-query-param-F-XnIVoZ.js} +1 -1
  202. package/dist/public/{push-client-B2LC8Qp9.js → push-client-DRx9Eggz.js} +1 -1
  203. package/dist/public/{rooms-ChCEOvkw.js → rooms-BurBI7is.js} +1 -1
  204. package/dist/public/service-worker/init.js +1 -1
  205. package/dist/public/service-worker.js +1 -1
  206. package/dist/public/{shadow-claw-Br8mWDUx.js → shadow-claw-Bg9AQ5x_.js} +2 -2
  207. package/dist/public/{shadow-claw-accounts-Dm6G7KMP.js → shadow-claw-accounts-B3mjYI0M.js} +1 -1
  208. package/dist/public/{shadow-claw-card-CggS8uSa.js → shadow-claw-card-tcXRS1GF.js} +1 -1
  209. package/dist/public/{shadow-claw-channels-088vhuWO.js → shadow-claw-channels-BiSfLvWv.js} +1 -1
  210. package/dist/public/{shadow-claw-chat-BRwRlq-n.js → shadow-claw-chat-N5jMsXZZ.js} +1 -1
  211. package/dist/public/{shadow-claw-control-plane-rhKACK85.js → shadow-claw-control-plane-DFVe_Xdq.js} +2 -2
  212. package/dist/public/{shadow-claw-conversations-CF_yUfKl.js → shadow-claw-conversations-wAR06_ya.js} +1 -1
  213. package/dist/public/{shadow-claw-empty-state-CkpOSXCS.js → shadow-claw-empty-state-CnPm3NVM.js} +1 -1
  214. package/dist/public/{shadow-claw-file-viewer-DWCejuY3.js → shadow-claw-file-viewer-sZN_FCDW.js} +2 -2
  215. package/dist/public/{shadow-claw-files-L6_ioyzh.js → shadow-claw-files-CnvkCbd4.js} +2 -2
  216. package/dist/public/{shadow-claw-git-DsdkwLqQ.js → shadow-claw-git-BBHfClGk.js} +2 -2
  217. package/dist/public/{shadow-claw-integrations-CSbRTOm3.js → shadow-claw-integrations-DvdBqzRJ.js} +1 -1
  218. package/dist/public/{shadow-claw-llm-BitaeAVc.js → shadow-claw-llm-YfohG519.js} +1 -1
  219. package/dist/public/{shadow-claw-mcp-remote-gSbV5riy.js → shadow-claw-mcp-remote-BAVbf5pi.js} +1 -1
  220. package/dist/public/{shadow-claw-networking-Dn_y6Cl9.js → shadow-claw-networking-CZ4LWPW7.js} +1 -1
  221. package/dist/public/{shadow-claw-notifications-Cj4Lqx8U.js → shadow-claw-notifications-BHwyREkG.js} +1 -1
  222. package/dist/public/{shadow-claw-page-header-DR4OZFt2.js → shadow-claw-page-header-De6Qf6eY.js} +1 -1
  223. package/dist/public/{shadow-claw-page-header-action-button-BnCV_2Kb.js → shadow-claw-page-header-action-button-FSOhTc9z.js} +1 -1
  224. package/dist/public/{shadow-claw-pages-mpDOtNYj.js → shadow-claw-pages-D_oPyDca.js} +1 -1
  225. package/dist/public/{shadow-claw-pdf-viewer-DZ_84qJH.js → shadow-claw-pdf-viewer-CrU4wqRq.js} +1 -1
  226. package/dist/public/{shadow-claw-settings-CfFTYTEy.js → shadow-claw-settings-DkUhvxVr.js} +2 -2
  227. package/dist/public/{shadow-claw-storage-DLmiT4bG.js → shadow-claw-storage-D0o56Tjw.js} +1 -1
  228. package/dist/public/{shadow-claw-task-server-BoMBCsiS.js → shadow-claw-task-server-4rkroO9K.js} +1 -1
  229. package/dist/public/{shadow-claw-tasks-ChEp1j7x.js → shadow-claw-tasks-BdP7lmvu.js} +1 -1
  230. package/dist/public/{shadow-claw-terminal-BaoVbOda.js → shadow-claw-terminal-DVHX7Fsu.js} +1 -1
  231. package/dist/public/{shadow-claw-toast-e8oz7z6Z.js → shadow-claw-toast-B9Y9tSkW.js} +1 -1
  232. package/dist/public/{shadow-claw-tools-BYjUBiJz.js → shadow-claw-tools-BwwY53Lr.js} +1 -1
  233. package/dist/public/{shadow-claw-webvm-xGb13TME.js → shadow-claw-webvm-CXGdkCNM.js} +1 -1
  234. package/dist/public/{sync-web-mcp-registration-CQluj-Kz.js → sync-web-mcp-registration-DVK_IhXZ.js} +1 -1
  235. package/dist/public/{system-prompt-CTJn0tK-.js → system-prompt-BmswoQwF.js} +2 -2
  236. package/dist/public/{workbox-92eae37e.js → workbox-e4022e15.js} +1 -1
  237. package/dist/public/{zip-reader-DN7FB-Q0.js → zip-reader-JHoTbATw.js} +1 -1
  238. package/dist/server.js +5 -5
  239. package/package.json +1 -1
  240. package/dist/cli/chunk-2gZFafgY.js +0 -1
  241. package/dist/cli/chunk-BCjL0JXf.js +0 -1
  242. package/dist/cli/chunk-BNcu1oiT.js +0 -1
  243. package/dist/cli/chunk-BUNoeMKY.js +0 -36
  244. package/dist/cli/chunk-C5ypckWC.js +0 -225
  245. package/dist/cli/chunk-CFxww5Yz.js +0 -1
  246. package/dist/cli/chunk-CGIgtL6R.js +0 -1
  247. package/dist/cli/chunk-CafdvLx-.js +0 -1
  248. package/dist/cli/chunk-Dhap1VwA.js +0 -1
  249. package/dist/cli/chunk-Ds5-K-9o.js +0 -1
  250. package/dist/cli/chunk-DwvavohW.js +0 -1
  251. package/dist/cli/chunk-_a0CkUNS.js +0 -139
  252. package/dist/lib/system-prompt-bhGRLoL2.js.map +0 -1
  253. package/dist/public/compact-context-CX4H8V57.js +0 -5
@@ -1,4 +1,4 @@
1
- import{i as e}from"./chunk-COWjYQhe.js";import{t}from"./chunk-BJhHc8Uw.js";import{t as n}from"./chunk-CncW6_WL.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-107J87Ou.js";import{n as o,r as s,t as c}from"./chunk-BeREXUw8.js";import{t as l}from"./chunk-2gZFafgY.js";import u,{existsSync as d}from"node:fs";import f from"node:path";import p from"node:process";import{spawn as m}from"node:child_process";import{access as h,constants as g,cp as _,mkdir as v,mkdtemp as y,readFile as b,readdir as x,rm as S,stat as C,writeFile as w}from"node:fs/promises";import{tmpdir as T}from"node:os";import E from"node:readline/promises";import D from"node:tty";function O(){let e=p.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if((typeof t!=`string`||n[0]!==`ExperimentalWarning`&&!t.includes(`ExperimentalWarning`)&&!t.includes(`SQLite`))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(p,t,...n)};t.__suppressed=!0,p.emitWarning=t}O();const k=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function A(e){try{return await h(e,g.F_OK),!0}catch{return!1}}async function j(e,t){let n=[];if(e&&n.push(f.resolve(e)),t){let e=f.resolve(t);n.includes(e)||n.push(e)}if(e&&f.basename(f.resolve(e))===`.cache`){let t=f.dirname(f.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of k){let n=f.join(e,t);if(await A(n))try{let e=await b(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function M(){return f.join(T(),`shadow-claw`)}function N(e){let t=f.resolve(e||p.cwd()),n=[f.join(t,`shadow-claw-config.json`),f.join(t,`shadow-claw.config.json`),f.join(t,`shadowclaw.config.json`),f.join(t,`pages`,`shadow-claw-config.json`),f.join(t,`pages`,`shadow-claw.config.json`),f.join(t,`site-config.json`),f.join(t,`pages`,`site-config.json`)];for(let e of n)if(u.existsSync(e))try{let n=u.readFileSync(e,`utf8`),r=JSON.parse(n);if(r&&typeof r.cacheDir==`string`&&r.cacheDir.trim())return f.resolve(t,r.cacheDir.trim());if(r&&r.server&&typeof r.server.cacheDir==`string`&&r.server.cacheDir.trim())return f.resolve(t,r.server.cacheDir.trim())}catch{}return null}function P(e,t=`.cache`){let n=f.resolve(e||p.cwd()),r=f.join(n,t),i=f.join(r,`database`),a=[r,f.join(r,`control-token.json`),f.join(r,`cli-peer-id`),i,f.join(i,`clients.db`),f.join(i,`agent.db`),f.join(i,`scheduled-tasks.db`),f.join(i,`push-subscriptions.db`),f.join(n,`database`,`clients.db`),f.join(n,`database`,`agent.db`)];for(let e of a)if(u.existsSync(e))return!0;return!1}async function F({contentRoot:e,stdin:t=p.stdin,stdout:n=p.stdout,onExit:r=e=>p.exit(e)}={}){let i=f.resolve(e||p.cwd()),a=f.join(i,`.cache`),o=M(),s=t,c=n,l=!1,d=null;if(t===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;d=u.openSync(e,`r`),s=new D.ReadStream(d),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=u.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let m=E.createInterface({input:s,output:c}),h=!1,g=()=>{if(!h){h=!0,c.write(`
1
+ import{i as e}from"./chunk-COWjYQhe.js";import{t}from"./chunk-BJhHc8Uw.js";import{t as n}from"./chunk-DxcDFUi_.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-107J87Ou.js";import{n as o,r as s,t as c}from"./chunk-BeREXUw8.js";import{t as l}from"./chunk-N0x3mXU0.js";import u,{existsSync as d}from"node:fs";import f from"node:path";import p from"node:process";import{spawn as m}from"node:child_process";import{access as h,constants as g,cp as _,mkdir as v,mkdtemp as y,readFile as b,readdir as x,rm as S,stat as C,writeFile as w}from"node:fs/promises";import{tmpdir as T}from"node:os";import E from"node:readline/promises";import D from"node:tty";function O(){let e=p.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if((typeof t!=`string`||n[0]!==`ExperimentalWarning`&&!t.includes(`ExperimentalWarning`)&&!t.includes(`SQLite`))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(p,t,...n)};t.__suppressed=!0,p.emitWarning=t}O();const k=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function A(e){try{return await h(e,g.F_OK),!0}catch{return!1}}async function j(e,t){let n=[];if(e&&n.push(f.resolve(e)),t){let e=f.resolve(t);n.includes(e)||n.push(e)}if(e&&f.basename(f.resolve(e))===`.cache`){let t=f.dirname(f.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of k){let n=f.join(e,t);if(await A(n))try{let e=await b(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function M(){return f.join(T(),`shadow-claw`)}function N(e){let t=f.resolve(e||p.cwd()),n=[f.join(t,`shadow-claw-config.json`),f.join(t,`shadow-claw.config.json`),f.join(t,`shadowclaw.config.json`),f.join(t,`pages`,`shadow-claw-config.json`),f.join(t,`pages`,`shadow-claw.config.json`),f.join(t,`site-config.json`),f.join(t,`pages`,`site-config.json`)];for(let e of n)if(u.existsSync(e))try{let n=u.readFileSync(e,`utf8`),r=JSON.parse(n);if(r&&typeof r.cacheDir==`string`&&r.cacheDir.trim())return f.resolve(t,r.cacheDir.trim());if(r&&r.server&&typeof r.server.cacheDir==`string`&&r.server.cacheDir.trim())return f.resolve(t,r.server.cacheDir.trim())}catch{}return null}function P(e,t=`.cache`){let n=f.resolve(e||p.cwd()),r=f.join(n,t),i=f.join(r,`database`),a=[r,f.join(r,`control-token.json`),f.join(r,`cli-peer-id`),i,f.join(i,`clients.db`),f.join(i,`agent.db`),f.join(i,`scheduled-tasks.db`),f.join(i,`push-subscriptions.db`),f.join(n,`database`,`clients.db`),f.join(n,`database`,`agent.db`)];for(let e of a)if(u.existsSync(e))return!0;return!1}async function F({contentRoot:e,stdin:t=p.stdin,stdout:n=p.stdout,onExit:r=e=>p.exit(e)}={}){let i=f.resolve(e||p.cwd()),a=f.join(i,`.cache`),o=M(),s=t,c=n,l=!1,d=null;if(t===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;d=u.openSync(e,`r`),s=new D.ReadStream(d),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=u.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let m=E.createInterface({input:s,output:c}),h=!1,g=()=>{if(!h){h=!0,c.write(`
2
2
  Operation cancelled.
3
3
  `);try{m.close()}catch{}r(130)}};m.on(`SIGINT`,g),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,g);let _=()=>g();p.on(`SIGINT`,_);let v=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&g()};s&&typeof s.on==`function`&&s.on(`data`,v);try{c.write(`
4
4
  ShadowClaw needs a directory to store cache and database files:
@@ -11,19 +11,19 @@ ShadowClaw needs a directory to store cache and database files:
11
11
  `),n.write(`Tip: You can pass --tmp, --cache-dir <dir>, set SHADOWCLAW_TMP=1, SHADOWCLAW_CACHE_DIR=<dir>, or configure "cacheDir" in shadow-claw.config.json to skip this prompt.
12
12
 
13
13
  `);let e=(await m.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return n.write(`Using current directory cache: ${a}\n\n`),a;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return n.write(`Using temporary directory: ${o}\n\n`),o;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await m.question(`Use temporary directory (${o}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(n.write(`Operation cancelled.
14
- `),r(0),o):(n.write(`Using temporary directory: ${o}\n\n`),o)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await m.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${a}\n\n`),a;let t=f.resolve(i,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=f.resolve(i,e);return c.write(`Using directory: ${t}\n\n`),t}finally{p.removeListener(`SIGINT`,_),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,g),s.removeListener(`data`,v));try{m.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(d!=null)try{u.closeSync(d)}catch{}}}}async function I(e={}){let t=f.resolve(e.contentRoot||p.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_TMP||p.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=M();return{cacheDir:n,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(n,`database`)}}let n=(e.cacheDir||p.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=f.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(r,`database`)}}let r=(e.databaseDir||p.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=f.resolve(t,r);return{cacheDir:f.basename(e)===`database`?f.dirname(e):f.resolve(e,`..`),databaseDir:e}}let i=N(t);if(i)return{cacheDir:i,databaseDir:f.join(i,`database`)};let a=P(t),o=f.join(t,`.cache`),s=f.join(o,`database`);if(a||e.yes||e.y||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:o,databaseDir:s};let c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI;if(!u||d||e.quiet)return{cacheDir:o,databaseDir:s};let m=await F({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:f.join(m,`database`)}}function L(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function R(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,i;if(e.workspace)r=f.resolve(e.workspace),i=e.databaseDir?f.resolve(e.databaseDir):e.cacheDir?f.resolve(e.cacheDir,`database`):f.resolve(r,`database`);else{let t=await I({contentRoot:p.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=f.join(T(),`shadow-claw`);await v(n,{recursive:!0}),r=await y(f.join(n,`workspace-`)),i=t.databaseDir}await v(r,{recursive:!0}),await v(i,{recursive:!0});let a=f.join(i,`agent.db`),o=t.openSqliteDatabase(a);t.setDB(o),t.setStorageRootFromPath(r);let s=(await j(r))?.config||{},c=s.settings||{},l=e.internetAccess??e.allowInternet??c.internetAccess??c.vm_bash_full_internet_access??c.fullInternetAccess??s.internetAccess;if(l!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(o,e,l?`true`:`false`)}let u={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{L(t,o,e.payload)}};return t.setPostHandler(e=>{u[e.type]?.(e)}),{db:o,workspaceDir:r,dbPath:a,core:t}}function z(e={}){let{force:t=!1,stdin:n=p.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function B(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function V(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function ee(t){let n=[];for(let r of t){let t=f.resolve(r),i;try{i=await b(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let a=f.basename(t),o=e(a,``);n.push({fileName:a,mimeType:o,size:i.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(i)],{type:o})}})}return n}async function H(e){try{let t=f.join(f.resolve(e),`skills-lock.json`),n=await b(t,`utf8`);return JSON.parse(n)}catch{return null}}async function U(e,t){try{let n=f.join(f.resolve(e),`skills-lock.json`),r=await b(n,`utf8`),i=JSON.parse(r);if(i?.skills?.[t])return delete i.skills[t],await w(n,JSON.stringify(i,null,2)+`
15
- `,`utf8`),!0}catch{}return!1}async function W(e,t,n={}){let r=t.trim().toLowerCase().replace(/[^a-z0-9-_]/g,`-`);if(!r)throw Error(`Skill name is required`);let i=n.flat===!1?f.join(`.agents`,`skills`,`main`,r):f.join(`.agents`,`skills`,r),a=f.join(f.resolve(e),i),o=f.join(a,`SKILL.md`);await v(a,{recursive:!0});let s=`---\nname: ${r}\ndescription: ${n.description||`Instructions and workflow for the ${r} skill.`}\n---\n\n# ${r}\n\nProvide step-by-step instructions for the agent when this skill is activated.\n`;return await w(o,s,`utf8`),{name:r,path:f.posix.join(...i.split(f.sep),`SKILL.md`)}}function G(){let e=p.platform===`win32`,t=e?`npx.cmd`:`npx`;try{let n=f.join(f.dirname(p.execPath),t);if(d(n))return{command:n,shell:e}}catch{}return{command:t,shell:e}}function K(e,t={}){let n=f.resolve(t.workspaceDir||p.cwd()),{command:r,shell:i}=G(),a=[`--yes`,`skills`,...e];return t.execFn?t.execFn(r,a,{cwd:n,env:p.env,timeoutMs:t.timeoutMs,shell:i}).then(e=>({success:e.exitCode===0,exitCode:e.exitCode??0,stdout:e.stdout||``,stderr:e.stderr||``})).catch(e=>({success:!1,exitCode:1,stdout:``,stderr:String(e),error:String(e)})):new Promise(t=>{let a=m(r,[`--yes`,`skills`,...e],{cwd:n,env:p.env,stdio:[`ignore`,`pipe`,`pipe`],shell:i}),o=``,s=``;a.stdout?.on(`data`,e=>o+=String(e)),a.stderr?.on(`data`,e=>s+=String(e)),a.on(`error`,e=>{t({success:!1,exitCode:1,stdout:o,stderr:s,error:e.message})}),a.on(`close`,e=>{t({success:e===0,exitCode:e??1,stdout:o,stderr:s,...e===0?{}:{error:s||`Process exited with code ${e}`}})})})}async function q(e,t=[]){try{let n=await x(e,{withFileTypes:!0});for(let r of n){if(r.name===`node_modules`||r.name===`.git`)continue;let n=f.join(e,r.name);r.isDirectory()?await q(n,t):r.name.toLowerCase()===`skill.md`&&t.push(n)}}catch{}return t}async function te(e,t,n={}){let r=f.resolve(e.replace(/^file:\/\//,``)),i=f.resolve(t),o=[],s=[],c=[],l=n.skillNames&&n.skillNames.length>0?new Set(n.skillNames):null,u=n.targetSubdir?f.join(i,`.agents`,`skills`,n.targetSubdir):f.join(i,`.agents`,`skills`);try{let e=await q(r);if(e.length===0){let t=f.join(r,`SKILL.md`);try{await C(t),e.push(t)}catch{}}for(let t of e.sort()){let e=f.dirname(t);try{let r=await b(t,`utf8`),i=a(t,r);if(l&&!l.has(i.name))continue;let c=f.join(u,i.name),d=f.join(c,`SKILL.md`),p=!1;try{await C(d),p=!0}catch{}if(p&&!n.overwrite){s.push(i.name);continue}await v(c,{recursive:!0}),await _(e,c,{recursive:!0,force:!0}),o.push(i.name)}catch(t){c.push({name:f.basename(e),error:t instanceof Error?t.message:String(t)})}}}catch(e){c.push({name:f.basename(r),error:e?.message||String(e)})}return{imported:o,skipped:s,failed:c}}async function J(e,t,n=[]){try{let r=await x(e,{withFileTypes:!0});for(let i of r){if(i.name===`node_modules`||i.name===`.git`)continue;let r=f.join(e,i.name);i.isDirectory()?await J(r,t,n):t.includes(f.extname(i.name).toLowerCase())&&n.push(r)}}catch{}return n}async function Y(e,t,n,r={}){let i=f.resolve(t.replace(/^file:\/\//,``)),a=[f.join(i,`.agents`,e),f.join(i,e)];f.basename(i)===e&&a.push(i);let o=e===`tools`?[`.json`]:[`.js`,`.mjs`],s=r.names&&r.names.length>0?new Set(r.names):null,c=r.targetSubdir?f.join(f.resolve(n),`.agents`,e,r.targetSubdir):f.join(f.resolve(n),`.agents`,e),l=[],u=[],d=[],p=/* @__PURE__ */ new Set;for(let t of a)for(let n of(await J(t,o)).sort()){let t=f.basename(n),i=t.replace(/\.[^.]+$/,``);if(!p.has(t)&&(p.add(t),!s||s.has(i)||s.has(t)))try{if(e===`tools`&&!/^[a-z][a-z0-9_]{0,63}$/.test(i))throw Error(`Invalid tool name: ${i}`);let a=f.join(c,t),o=!1;try{await C(a),o=!0}catch{}if(o&&!r.overwrite){u.push(i);continue}await v(c,{recursive:!0}),await _(n,a,{force:!0}),l.push(i)}catch(e){d.push({name:i,error:e?.message||String(e)})}}return{imported:l,skipped:u,failed:d}}function ne(e){let t=(e||``).trim();return!t||/^(?:\.\/|\.\.\/|\/|[a-zA-Z]:[\\/]|file:\/\/)/.test(t)?!1:t.startsWith(`http://`)||t.startsWith(`https://`)?/github\.com|gitlab\.com/i.test(t):/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+(?:@[a-zA-Z0-9_.-]+)?$/.test(t)}const X=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),Z=`server:main`;async function re(e={}){let t;if(e.workspace)t=f.resolve(e.workspace);else{let e=f.join(T(),`shadow-claw`);await v(e,{recursive:!0}),t=await y(f.join(e,`workspace-`))}let n=f.join(t,`.agents`,`skills`),i=f.join(t,`.agents`,`tools`),a=f.join(t,`database`);await v(t,{recursive:!0}),await v(n,{recursive:!0}),await v(i,{recursive:!0}),await v(a,{recursive:!0});let o=e.provider,s=e.model,c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI,m=u&&!d&&!e.quiet&&!e.yes&&!e.y;if(!o&&!s&&m){let{promptForAgentModel:n}=await import(`./chunk-SRBRVorc.js`),r=await n({workspaceDir:t,contentRoot:p.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:u});o=r.providerId,s=r.model}if(o||=`transformers_js_local`,!s){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-SRBRVorc.js`);s=o===`transformers_js_local`?e:`openrouter/free`}if(!await j(t)){let e=f.join(t,`shadow-claw.config.json`);await w(e,JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:o,defaultModel:s}},null,2)+`
16
- `,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-SRBRVorc.js`);await t(s,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await R({workspace:t,quiet:!0}),await r(t),{success:!0,workspace:t}}async function Q(e={}){let t=e.workspace||p.cwd(),{db:n,workspaceDir:i,core:a}=await R({...e,workspace:t}),o=e.group||a.DEFAULT_SERVER_GROUP_ID||Z;await r(i);let s=await a.discoverSkills(n,o),c=await H(i);return{skills:s.skills.map(e=>{let t=c?.skills?.[e.name];return t?{...e,lockSource:t.source,lockSourceType:t.sourceType,lockHash:t.computedHash}:e}),diagnostics:s.diagnostics,...c?{lockfile:c}:{}}}async function ie(e=`list`,t=[],n={}){let r=n.workspace||p.cwd(),a=(e||`list`).trim().toLowerCase();if(a===`list`||a===`ls`){let e=await Q({...n,workspace:r});if(!n.quiet){if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills){let e=t.lockSource?` [source: ${t.lockSource}]`:``;console.log(` - ${t.name}${e}: ${t.description||`No description`}`)}}}return{success:!0,...e}}let{workspaceDir:o}=await R({...n,workspace:r,quiet:!0});if(a===`add`||a===`install`||a===`i`||a===`a`){let e=t[0];if(!e){let e=`Error: Package or skill source required. Usage: shadow-claw agent skills add <package-or-url>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.slice(1);if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)){let t=[`add`,e,`-a`,`universal`];if((n.yes!==!1||n.quiet||!p.stdin.isTTY)&&!r.includes(`-y`)&&!r.includes(`--yes`)&&t.push(`-y`),n.skills){let e=Array.isArray(n.skills)?n.skills:String(n.skills).split(`,`).map(e=>e.trim()).filter(Boolean);e.length>0&&t.push(`--skill`,...e)}t.push(...r);let i=await K(t,{workspaceDir:o,execFn:n.npxSkillsExecFn});if(i.success)return!n.quiet&&i.stdout.trim()&&console.log(i.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,skills:(await Q({...n,workspace:o,quiet:!0})).skills,stdout:i.stdout}}let i=await $(e,{...n,workspace:o,useNpxSkills:!1}),a=await Q({...n,workspace:o,quiet:!0});return{success:i.success,delegatedToNpxSkills:!1,fallbackUsed:!0,skills:a.skills,importResult:i,...i.error?{error:i.error}:{}}}if(a===`remove`||a===`rm`||a===`r`||a===`uninstall`){let e=t.filter(e=>!e.startsWith(`-`));if(e.length===0){let e=`Error: Skill name(s) required. Usage: shadow-claw agent skills remove <name...>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}n.useNpxSkills!==!1&&await K([`remove`,...e,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let r=[];for(let t of e){let e=[f.join(o,`.agents`,`skills`,t),f.join(o,`.agents`,`skills`,`main`,t)],n=!1;for(let t of e)try{(await C(t)).isDirectory()&&(await S(t,{recursive:!0,force:!0}),n=!0)}catch{}let i=await U(o,t);(n||i)&&r.push(t)}return n.quiet||(r.length>0?console.log(`Removed skill(s): ${r.join(`, `)}`):console.log(`No matching skills found to remove.`)),{success:!0,removed:r}}if(a===`init`){let e=t[0]||`my-skill`;if(n.useNpxSkills===!0&&n.npxSkillsExecFn&&(await K([`init`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn})).success)return{success:!0,name:e,delegatedToNpxSkills:!0};try{let t=await W(o,e,{description:n.description,flat:n.flat!==!1});return n.quiet||console.log(`Initialized skill "${t.name}" at ${t.path}`),{success:!0,...t}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error: ${t}`),p.exitCode=1,{success:!1,error:t}}}if(a===`sync`){n.useNpxSkills!==!1&&n.npxSkillsExecFn&&await K([`experimental_sync`,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let e=await i(o,{overwrite:!!n.overwrite});return n.quiet||console.log(`Synced skills (migrated: ${e.migratedSkills.length}).`),{success:!0,...e,syncedToFlat:e.migratedSkills,syncedToMain:[]}}if(a===`find`||a===`search`||a===`f`||a===`s`){let e=t.join(` `).trim()||n.query||``;if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)&&e){let t=await K([`find`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(t.success)return!n.quiet&&t.stdout.trim()&&console.log(t.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:t.stdout,results:[]}}let r=n.fetchFn||globalThis.fetch;try{let t=await r(`https://skills.sh/api/search?q=${encodeURIComponent(e)}&limit=10`);if(!t.ok)throw Error(`HTTP ${t.status}`);let i=((await t.json()).skills||[]).map(e=>({name:e.name,package:`${e.source||e.id}@${e.name}`,source:e.source||e.id,installs:e.installs||0}));if(!n.quiet){if(i.length===0)console.log(`No skills found for "${e}".`);else{console.log(`Found ${i.length} skill(s):\n`);for(let e of i)console.log(` - ${e.package} (${e.installs} installs)`)}}return{success:!0,delegatedToNpxSkills:!1,results:i}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error searching skills: ${t}`),{success:!1,error:t,results:[]}}}if(a===`update`||a===`up`||a===`check`||a===`restore`||a===`experimental_install`){let e=a===`restore`?`experimental_install`:a===`up`?`update`:a,r=await K([e,...t],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(r.success)return!n.quiet&&r.stdout.trim()&&console.log(r.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:r.stdout};if(a===`restore`||a===`experimental_install`){let e=await H(o);if(e&&Object.keys(e.skills).length>0){let t=0;for(let[r,i]of Object.entries(e.skills)){let e=i,a=e?.sourceType===`github`?`${e.source}@${r}`:e?.sourceUrl||e?.source;if(!a)continue;let s=await $(a,{...n,workspace:o,useNpxSkills:!1,quiet:!0});s.success&&(t+=s.importedCount||0)}return{success:!0,delegatedToNpxSkills:!1,fallbackUsed:!0,importedCount:t}}}return{success:!1,error:r.error||`Failed to run npx skills ${e}`}}let s=`Unknown skills subcommand "${e}". Available: list, add, remove, find, init, sync, update, check, restore`;return n.quiet||console.error(s),p.exitCode=1,{success:!1,error:s}}async function ae(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!X.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function oe(e,t,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),o=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,s=(a.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!s&&typeof a.loadDeclarativeTools==`function`)try{s=(await a.loadDeclarativeTools(r,o)).tools.find(t=>t.name===e)}catch{}if(!s){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let c=!X.has(s.name),l=t??n.input;if(l===`-`&&(l=void 0),l==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=B(e,s.input_schema)}l=t}if(l!=null){let t={};if(typeof l==`string`)try{t=JSON.parse(l)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}else typeof l==`object`&&(t=l);let u;try{let e=await le(r,a,i,{...n,interactive:!1});u={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let i=await a.executeTool(r,e,t,o,{invokeContext:u}),l=typeof i==`string`?i:JSON.stringify(i,null,2);return n.output?(await w(f.resolve(n.output),l,`utf8`),n.quiet||p.stderr.write(`Output written to ${n.output}\n`)):n.quiet||p.stdout.write(l+`
14
+ `),r(0),o):(n.write(`Using temporary directory: ${o}\n\n`),o)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await m.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${a}\n\n`),a;let t=f.resolve(i,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=f.resolve(i,e);return c.write(`Using directory: ${t}\n\n`),t}finally{p.removeListener(`SIGINT`,_),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,g),s.removeListener(`data`,v));try{m.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(d!=null)try{u.closeSync(d)}catch{}}}}async function I(e={}){let t=f.resolve(e.contentRoot||p.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_TMP||p.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=M();return{cacheDir:n,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(n,`database`)}}let n=(e.cacheDir||p.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=f.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(r,`database`)}}let r=(e.databaseDir||p.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=f.resolve(t,r);return{cacheDir:f.basename(e)===`database`?f.dirname(e):f.resolve(e,`..`),databaseDir:e}}let i=N(t);if(i)return{cacheDir:i,databaseDir:f.join(i,`database`)};let a=P(t),o=f.join(t,`.cache`),s=f.join(o,`database`);if(a||e.yes||e.y||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:o,databaseDir:s};let c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI;if(!u||d||e.quiet)return{cacheDir:o,databaseDir:s};let m=await F({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:f.join(m,`database`)}}function L(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function R(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,i;if(e.workspace)r=f.resolve(e.workspace),i=e.databaseDir?f.resolve(e.databaseDir):e.cacheDir?f.resolve(e.cacheDir,`database`):f.resolve(r,`database`);else{let t=await I({contentRoot:p.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=f.join(T(),`shadow-claw`);await v(n,{recursive:!0}),r=await y(f.join(n,`workspace-`)),i=t.databaseDir}await v(r,{recursive:!0}),await v(i,{recursive:!0});let a=f.join(i,`agent.db`),o=t.openSqliteDatabase(a);t.setDB(o),t.setStorageRootFromPath(r);let s=(await j(r))?.config||{},c=s.settings||{},l=e.internetAccess??e.allowInternet??c.internetAccess??c.vm_bash_full_internet_access??c.fullInternetAccess??s.internetAccess;if(l!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(o,e,l?`true`:`false`)}let u={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{L(t,o,e.payload)}};return t.setPostHandler(e=>{u[e.type]?.(e)}),{db:o,workspaceDir:r,dbPath:a,core:t}}function z(e={}){let{force:t=!1,stdin:n=p.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function B(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function V(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function ee(t){let n=[];for(let r of t){let t=f.resolve(r),i;try{i=await b(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let a=f.basename(t),o=e(a,``);n.push({fileName:a,mimeType:o,size:i.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(i)],{type:o})}})}return n}async function H(e){try{let t=f.join(f.resolve(e),`skills-lock.json`),n=await b(t,`utf8`);return JSON.parse(n)}catch{return null}}async function te(e,t){try{let n=f.join(f.resolve(e),`skills-lock.json`),r=await b(n,`utf8`),i=JSON.parse(r);if(i?.skills?.[t])return delete i.skills[t],await w(n,JSON.stringify(i,null,2)+`
15
+ `,`utf8`),!0}catch{}return!1}async function ne(e,t,n={}){let r=t.trim().toLowerCase().replace(/[^a-z0-9-_]/g,`-`);if(!r)throw Error(`Skill name is required`);let i=n.flat===!1?f.join(`.agents`,`skills`,`main`,r):f.join(`.agents`,`skills`,r),a=f.join(f.resolve(e),i),o=f.join(a,`SKILL.md`);await v(a,{recursive:!0});let s=`---\nname: ${r}\ndescription: ${n.description||`Instructions and workflow for the ${r} skill.`}\n---\n\n# ${r}\n\nProvide step-by-step instructions for the agent when this skill is activated.\n`;return await w(o,s,`utf8`),{name:r,path:f.posix.join(...i.split(f.sep),`SKILL.md`)}}function U(){let e=p.platform===`win32`,t=e?`npx.cmd`:`npx`;try{let n=f.join(f.dirname(p.execPath),t);if(d(n))return{command:n,shell:e}}catch{}return{command:t,shell:e}}function W(e,t={}){let n=f.resolve(t.workspaceDir||p.cwd()),{command:r,shell:i}=U(),a=[`--yes`,`skills`,...e];return t.execFn?t.execFn(r,a,{cwd:n,env:p.env,timeoutMs:t.timeoutMs,shell:i}).then(e=>({success:e.exitCode===0,exitCode:e.exitCode??0,stdout:e.stdout||``,stderr:e.stderr||``})).catch(e=>({success:!1,exitCode:1,stdout:``,stderr:String(e),error:String(e)})):new Promise(t=>{let a=m(r,[`--yes`,`skills`,...e],{cwd:n,env:p.env,stdio:[`ignore`,`pipe`,`pipe`],shell:i}),o=``,s=``;a.stdout?.on(`data`,e=>o+=String(e)),a.stderr?.on(`data`,e=>s+=String(e)),a.on(`error`,e=>{t({success:!1,exitCode:1,stdout:o,stderr:s,error:e.message})}),a.on(`close`,e=>{t({success:e===0,exitCode:e??1,stdout:o,stderr:s,...e===0?{}:{error:s||`Process exited with code ${e}`}})})})}async function G(e,t=[]){try{let n=await x(e,{withFileTypes:!0});for(let r of n){if(r.name===`node_modules`||r.name===`.git`)continue;let n=f.join(e,r.name);r.isDirectory()?await G(n,t):r.name.toLowerCase()===`skill.md`&&t.push(n)}}catch{}return t}async function K(e,t,n={}){let r=f.resolve(e.replace(/^file:\/\//,``)),i=f.resolve(t),o=[],s=[],c=[],l=n.skillNames&&n.skillNames.length>0?new Set(n.skillNames):null,u=n.targetSubdir?f.join(i,`.agents`,`skills`,n.targetSubdir):f.join(i,`.agents`,`skills`);try{let e=await G(r);if(e.length===0){let t=f.join(r,`SKILL.md`);try{await C(t),e.push(t)}catch{}}for(let t of e.sort()){let e=f.dirname(t);try{let r=await b(t,`utf8`),i=a(t,r);if(l&&!l.has(i.name))continue;let c=f.join(u,i.name),d=f.join(c,`SKILL.md`),p=!1;try{await C(d),p=!0}catch{}if(p&&!n.overwrite){s.push(i.name);continue}await v(c,{recursive:!0}),await _(e,c,{recursive:!0,force:!0}),o.push(i.name)}catch(t){c.push({name:f.basename(e),error:t instanceof Error?t.message:String(t)})}}}catch(e){c.push({name:f.basename(r),error:e?.message||String(e)})}return{imported:o,skipped:s,failed:c}}async function q(e,t,n=[]){try{let r=await x(e,{withFileTypes:!0});for(let i of r){if(i.name===`node_modules`||i.name===`.git`)continue;let r=f.join(e,i.name);i.isDirectory()?await q(r,t,n):t.includes(f.extname(i.name).toLowerCase())&&n.push(r)}}catch{}return n}async function J(e,t,n,r={}){let i=f.resolve(t.replace(/^file:\/\//,``)),a=[f.join(i,`.agents`,e),f.join(i,e)];f.basename(i)===e&&a.push(i);let o=e===`tools`?[`.json`]:[`.js`,`.mjs`],s=r.names&&r.names.length>0?new Set(r.names):null,c=r.targetSubdir?f.join(f.resolve(n),`.agents`,e,r.targetSubdir):f.join(f.resolve(n),`.agents`,e),l=[],u=[],d=[],p=/* @__PURE__ */ new Set;for(let t of a)for(let n of(await q(t,o)).sort()){let t=f.basename(n),i=t.replace(/\.[^.]+$/,``);if(!p.has(t)&&(p.add(t),!s||s.has(i)||s.has(t)))try{if(e===`tools`&&!/^[a-z][a-z0-9_]{0,63}$/.test(i))throw Error(`Invalid tool name: ${i}`);let a=f.join(c,t),o=!1;try{await C(a),o=!0}catch{}if(o&&!r.overwrite){u.push(i);continue}await v(c,{recursive:!0}),await _(n,a,{force:!0}),l.push(i)}catch(e){d.push({name:i,error:e?.message||String(e)})}}return{imported:l,skipped:u,failed:d}}function Y(e){let t=(e||``).trim();return!t||/^(?:\.\/|\.\.\/|\/|[a-zA-Z]:[\\/]|file:\/\/)/.test(t)?!1:t.startsWith(`http://`)||t.startsWith(`https://`)?/github\.com|gitlab\.com/i.test(t):/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+(?:@[a-zA-Z0-9_.-]+)?$/.test(t)}const X=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`show_toast`,`send_notification`,`spawn_subagent`]),Z=`server:main`;async function re(e={}){let t;if(e.workspace)t=f.resolve(e.workspace);else{let e=f.join(T(),`shadow-claw`);await v(e,{recursive:!0}),t=await y(f.join(e,`workspace-`))}let n=f.join(t,`.agents`,`skills`),i=f.join(t,`.agents`,`tools`),a=f.join(t,`database`);await v(t,{recursive:!0}),await v(n,{recursive:!0}),await v(i,{recursive:!0}),await v(a,{recursive:!0});let o=e.provider,s=e.model,c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI,m=u&&!d&&!e.quiet&&!e.yes&&!e.y;if(!o&&!s&&m){let{promptForAgentModel:n}=await import(`./chunk-BfTpnSS4.js`),r=await n({workspaceDir:t,contentRoot:p.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:u});o=r.providerId,s=r.model}if(o||=`transformers_js_local`,!s){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-BfTpnSS4.js`);s=o===`transformers_js_local`?e:`openrouter/free`}if(!await j(t)){let e=f.join(t,`shadow-claw.config.json`);await w(e,JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:o,defaultModel:s}},null,2)+`
16
+ `,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-BfTpnSS4.js`);await t(s,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await R({workspace:t,quiet:!0}),await r(t),{success:!0,workspace:t}}async function Q(e={}){let t=e.workspace||p.cwd(),{db:n,workspaceDir:i,core:a}=await R({...e,workspace:t}),o=e.group||a.DEFAULT_SERVER_GROUP_ID||Z;await r(i);let s=await a.discoverSkills(n,o),c=await H(i);return{skills:s.skills.map(e=>{let t=c?.skills?.[e.name];return t?{...e,lockSource:t.source,lockSourceType:t.sourceType,lockHash:t.computedHash}:e}),diagnostics:s.diagnostics,...c?{lockfile:c}:{}}}async function ie(e=`list`,t=[],n={}){let r=n.workspace||p.cwd(),a=(e||`list`).trim().toLowerCase();if(a===`list`||a===`ls`){let e=await Q({...n,workspace:r});if(!n.quiet){if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills){let e=t.lockSource?` [source: ${t.lockSource}]`:``;console.log(` - ${t.name}${e}: ${t.description||`No description`}`)}}}return{success:!0,...e}}let{workspaceDir:o}=await R({...n,workspace:r,quiet:!0});if(a===`add`||a===`install`||a===`i`||a===`a`){let e=t[0];if(!e){let e=`Error: Package or skill source required. Usage: shadow-claw agent skills add <package-or-url>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.slice(1);if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)){let t=[`add`,e,`-a`,`universal`];if((n.yes!==!1||n.quiet||!p.stdin.isTTY)&&!r.includes(`-y`)&&!r.includes(`--yes`)&&t.push(`-y`),n.skills){let e=Array.isArray(n.skills)?n.skills:String(n.skills).split(`,`).map(e=>e.trim()).filter(Boolean);e.length>0&&t.push(`--skill`,...e)}t.push(...r);let i=await W(t,{workspaceDir:o,execFn:n.npxSkillsExecFn});if(i.success)return!n.quiet&&i.stdout.trim()&&console.log(i.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,skills:(await Q({...n,workspace:o,quiet:!0})).skills,stdout:i.stdout}}let i=await $(e,{...n,workspace:o,useNpxSkills:!1}),a=await Q({...n,workspace:o,quiet:!0});return{success:i.success,delegatedToNpxSkills:!1,fallbackUsed:!0,skills:a.skills,importResult:i,...i.error?{error:i.error}:{}}}if(a===`remove`||a===`rm`||a===`r`||a===`uninstall`){let e=t.filter(e=>!e.startsWith(`-`));if(e.length===0){let e=`Error: Skill name(s) required. Usage: shadow-claw agent skills remove <name...>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}n.useNpxSkills!==!1&&await W([`remove`,...e,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let r=[];for(let t of e){let e=[f.join(o,`.agents`,`skills`,t),f.join(o,`.agents`,`skills`,`main`,t)],n=!1;for(let t of e)try{(await C(t)).isDirectory()&&(await S(t,{recursive:!0,force:!0}),n=!0)}catch{}let i=await te(o,t);(n||i)&&r.push(t)}return n.quiet||(r.length>0?console.log(`Removed skill(s): ${r.join(`, `)}`):console.log(`No matching skills found to remove.`)),{success:!0,removed:r}}if(a===`init`){let e=t[0]||`my-skill`;if(n.useNpxSkills===!0&&n.npxSkillsExecFn&&(await W([`init`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn})).success)return{success:!0,name:e,delegatedToNpxSkills:!0};try{let t=await ne(o,e,{description:n.description,flat:n.flat!==!1});return n.quiet||console.log(`Initialized skill "${t.name}" at ${t.path}`),{success:!0,...t}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error: ${t}`),p.exitCode=1,{success:!1,error:t}}}if(a===`sync`){n.useNpxSkills!==!1&&n.npxSkillsExecFn&&await W([`experimental_sync`,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let e=await i(o,{overwrite:!!n.overwrite});return n.quiet||console.log(`Synced skills (migrated: ${e.migratedSkills.length}).`),{success:!0,...e,syncedToFlat:e.migratedSkills,syncedToMain:[]}}if(a===`find`||a===`search`||a===`f`||a===`s`){let e=t.join(` `).trim()||n.query||``;if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)&&e){let t=await W([`find`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(t.success)return!n.quiet&&t.stdout.trim()&&console.log(t.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:t.stdout,results:[]}}let r=n.fetchFn||globalThis.fetch;try{let t=await r(`https://skills.sh/api/search?q=${encodeURIComponent(e)}&limit=10`);if(!t.ok)throw Error(`HTTP ${t.status}`);let i=((await t.json()).skills||[]).map(e=>({name:e.name,package:`${e.source||e.id}@${e.name}`,source:e.source||e.id,installs:e.installs||0}));if(!n.quiet){if(i.length===0)console.log(`No skills found for "${e}".`);else{console.log(`Found ${i.length} skill(s):\n`);for(let e of i)console.log(` - ${e.package} (${e.installs} installs)`)}}return{success:!0,delegatedToNpxSkills:!1,results:i}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error searching skills: ${t}`),{success:!1,error:t,results:[]}}}if(a===`update`||a===`up`||a===`check`||a===`restore`||a===`experimental_install`){let e=a===`restore`?`experimental_install`:a===`up`?`update`:a,r=await W([e,...t],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(r.success)return!n.quiet&&r.stdout.trim()&&console.log(r.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:r.stdout};if(a===`restore`||a===`experimental_install`){let e=await H(o);if(e&&Object.keys(e.skills).length>0){let t=0;for(let[r,i]of Object.entries(e.skills)){let e=i,a=e?.sourceType===`github`?`${e.source}@${r}`:e?.sourceUrl||e?.source;if(!a)continue;let s=await $(a,{...n,workspace:o,useNpxSkills:!1,quiet:!0});s.success&&(t+=s.importedCount||0)}return{success:!0,delegatedToNpxSkills:!1,fallbackUsed:!0,importedCount:t}}}return{success:!1,error:r.error||`Failed to run npx skills ${e}`}}let s=`Unknown skills subcommand "${e}". Available: list, add, remove, find, init, sync, update, check, restore`;return n.quiet||console.error(s),p.exitCode=1,{success:!1,error:s}}async function ae(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!X.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function oe(e,t,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),o=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,s=(a.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!s&&typeof a.loadDeclarativeTools==`function`)try{s=(await a.loadDeclarativeTools(r,o)).tools.find(t=>t.name===e)}catch{}if(!s){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let c=!X.has(s.name),l=t??n.input;if(l===`-`&&(l=void 0),l==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=B(e,s.input_schema)}l=t}if(l!=null){let t={};if(typeof l==`string`)try{t=JSON.parse(l)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}else typeof l==`object`&&(t=l);let u;try{let e=await le(r,a,i,{...n,interactive:!1});u={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let i=await a.executeTool(r,e,t,o,{invokeContext:u}),l=typeof i==`string`?i:JSON.stringify(i,null,2);return n.output?(await w(f.resolve(n.output),l,`utf8`),n.quiet||p.stderr.write(`Output written to ${n.output}\n`)):n.quiet||p.stdout.write(l+`
17
17
  `),{success:!0,tool:s,headlessSafe:c,output:i}}catch(t){let r=t instanceof Error?t.message:String(t);return n.quiet||console.error(`Error executing tool "${e}": ${r}`),p.exitCode=1,{success:!1,error:r}}}if(!n.quiet){let e=c?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${s.name} ${e}\n`),console.log(`Description:\n ${s.description}\n`),s.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(s.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${s.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${s.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
18
- `)}return{success:!0,tool:s,headlessSafe:c}}async function se(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,{clearGroupMessages:i}=await import(`./chunk-CAxYfMhR.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function ce(e,t={}){let{db:n,core:r}=await R(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||Z,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function le(e,t,n,r={}){let i=r.contentRoot??p.cwd(),a=await j(n,i),o=a?.config||{},s=o.settings||{},c=o.agent||s.agent||{},l=r.provider||p.env.SHADOW_CLAW_PROVIDER||p.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!l&&typeof t.getConfig==`function`&&(l=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!l&&r.model){let{isLlamafile:e,isAgentfile:t}=await import(`./chunk-SRBRVorc.js`);t(r.model)?l=`agentfile`:e(r.model)?l=`llamafile`:/onnx/i.test(r.model)&&(l=`transformers_js_local`)}l||=c.defaultProvider||c.provider||s.defaultProvider||s.provider||o.defaultProvider;let u=r.stdin?!!r.stdin.isTTY:!!p.stdin.isTTY,d=!r.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),f=r.isTTY===void 0?u||d:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!r.isCI,h=f&&!m&&!r.quiet&&r.interactive!==!1;if(!l){if(h){let{promptForAgentModel:e}=await import(`./chunk-SRBRVorc.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:f,service:r._transformersService});l=t.providerId,r.model=t.model}else l=`openrouter`}let g=typeof t.getProvider==`function`?t.getProvider(l):null;if(!g){let e=`Error: Unknown provider "${l}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=p.env.SHADOW_CLAW_API_KEY,!_)switch(l){case`openrouter`:_=p.env.OPENROUTER_API_KEY;break;case`huggingface`:_=p.env.HUGGINGFACE_API_KEY||p.env.HF_TOKEN;break;case`gemini_proxy`:_=p.env.GEMINI_API_KEY}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${l}`)||await t.getConfig(e,`apiKey`))}let v=r.model||p.env.SHADOW_CLAW_MODEL||p.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||c.defaultModel||c.model||s.defaultModel||s.model||o.defaultModel||g?.defaultModel||(l===`transformers_js_local`?(await import(`./chunk-SRBRVorc.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-SRBRVorc.js`),i=r.cacheDir||c.cacheDir||o.cacheDir||s.cacheDir;if(!(e(v,i)||n&&e(v,n))){let e=r.stdout||p.stderr;if(r.download||r.yes||r.y)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),a=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||p.stdin,c=e,l=!1,u=null;if(s===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new a.ReadStream(u),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),m=!1,h=()=>{if(!m){m=!0,c.write(`
18
+ `)}return{success:!0,tool:s,headlessSafe:c}}async function se(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,{clearGroupMessages:i}=await import(`./chunk-CAxYfMhR.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function ce(e,t={}){let{db:n,core:r}=await R(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||Z,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function le(e,t,n,r={}){let i=r.contentRoot??p.cwd(),a=await j(n,i),o=a?.config||{},s=o.settings||{},c=o.agent||s.agent||{},l=r.provider||p.env.SHADOW_CLAW_PROVIDER||p.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!l&&typeof t.getConfig==`function`&&(l=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!l&&r.model){let{isLlamafile:e,isAgentfile:t}=await import(`./chunk-BfTpnSS4.js`);t(r.model)?l=`agentfile`:e(r.model)?l=`llamafile`:/onnx/i.test(r.model)&&(l=`transformers_js_local`)}l||=c.defaultProvider||c.provider||s.defaultProvider||s.provider||o.defaultProvider;let u=r.stdin?!!r.stdin.isTTY:!!p.stdin.isTTY,d=!r.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),f=r.isTTY===void 0?u||d:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!r.isCI,h=f&&!m&&!r.quiet&&r.interactive!==!1;if(!l){if(h){let{promptForAgentModel:e}=await import(`./chunk-BfTpnSS4.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:f,service:r._transformersService});l=t.providerId,r.model=t.model}else l=`openrouter`}let g=typeof t.getProvider==`function`?t.getProvider(l):null;if(!g){let e=`Error: Unknown provider "${l}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=p.env.SHADOW_CLAW_API_KEY,!_)switch(l){case`openrouter`:_=p.env.OPENROUTER_API_KEY;break;case`huggingface`:_=p.env.HUGGINGFACE_API_KEY||p.env.HF_TOKEN;break;case`gemini_proxy`:_=p.env.GEMINI_API_KEY}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${l}`)||await t.getConfig(e,`apiKey`))}let v=r.model||p.env.SHADOW_CLAW_MODEL||p.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||c.defaultModel||c.model||s.defaultModel||s.model||o.defaultModel||g?.defaultModel||(l===`transformers_js_local`?(await import(`./chunk-BfTpnSS4.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-BfTpnSS4.js`),i=r.cacheDir||c.cacheDir||o.cacheDir||s.cacheDir;if(!(e(v,i)||n&&e(v,n))){let e=r.stdout||p.stderr;if(r.download||r.yes||r.y)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),a=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||p.stdin,c=e,l=!1,u=null;if(s===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new a.ReadStream(u),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),m=!1,h=()=>{if(!m){m=!0,c.write(`
19
19
  Operation cancelled.
20
- `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):p.exit(130)}};d.on(`SIGINT`,h),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,h);let g=()=>h();p.on(`SIGINT`,g);let _=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&h()};s&&typeof s.on==`function`&&s.on(`data`,_);let y=``;try{y=(await d.question(`\nModel "${v}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{p.removeListener(`SIGINT`,g),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,h),s.removeListener(`data`,_));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}if(y===``||y===`y`||y===`yes`)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else throw Error(`Model "${v}" is not downloaded. Download aborted.`)}else throw Error(`Model "${v}" is not downloaded. Run with --download or --yes to download model weights automatically.`)}}let y=r.baseUrl||r.providerBaseUrl||c?.baseUrl||s?.baseUrl||s?.providerBaseUrl;return y&&g&&(g={...g,baseUrl:y}),{providerId:l,providerConfig:g,apiKey:_||``,model:v,workspaceConfigData:a,workspaceConfig:o,workspaceSettings:s,workspaceAgent:c}}async function ue(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!X.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!X.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function de(e,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),u=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,d=n._stdinData??null;if(e===`-`?e=d||``:d&&(e=e?`${e}\n\n${d}`:d),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let m=[],h=/* @__PURE__ */ new Map;try{let e=await ee(V(n.file));for(let t of e)if(t.source?.kind===`local-file`){let e=await t.source.file.arrayBuffer();h.set(t.fileName,new Uint8Array(e))}m=await t(r,u,e);for(let e of m)e.path&&h.has(e.fileName)&&h.set(e.path,h.get(e.fileName))}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let g,_,v,y,x,S,C,T;try{let e=await le(r,a,i,n);g=e.providerId,_=e.providerConfig,v=e.apiKey,y=e.model,x=e.workspaceConfigData,S=e.workspaceConfig,C=e.workspaceSettings,T=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let E=n.internetAccess??n.allowInternet??C?.internetAccess??C?.vm_bash_full_internet_access??C?.fullInternetAccess??S?.internetAccess;if(E!==void 0&&typeof a.setConfig==`function`){let e=a.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await a.setConfig(r,e,E?`true`:`false`)}if(_.requiresApiKey!==!1&&!v){let e=g===`huggingface`?`HUGGINGFACE_API_KEY`:`${g.toUpperCase()}_API_KEY`,t=`Error: Provider "${g}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let D=[];if(n.history!==!1&&typeof a.getRecentMessages==`function`)try{let e=await a.getRecentMessages(r,u,50);D=await Promise.all(e.map(async e=>{if(e?.role===`user`&&Array.isArray(e?.attachments)&&e.attachments.length>0){let t=await l(e.attachments,async e=>{if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null});if(t.length>0){let n=typeof e.content==`string`?e.content:``;return{...e,content:n?[{type:`text`,text:n},...t]:t}}}return e}))}catch{}let O={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...m.length>0?{attachments:m}:{}};if(typeof a.saveMessage==`function`)try{await a.saveMessage(r,O)}catch{}let k=O;if(m.length>0){let t=await l(m,async e=>{if(e.path&&h.has(e.path))return h.get(e.path);if(h.has(e.fileName))return h.get(e.fileName);if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null});t.length>0&&(k={...O,content:e?[{type:`text`,text:e},...t]:t})}let A=_?.supportsStreaming===!0,j=n.stream!==!1&&n.streaming!==!1&&!n.noStream,M=A&&j,N=Number(n.maxTokens)||(typeof a.getModelMaxTokens==`function`?a.getModelMaxTokens(y):a.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=_?.name||g,t=M?`streaming`:`standard`;p.stderr.write(`[Agent] Connecting to ${e} (${y}) [${t}]...\n`),p.stderr.write(`[Agent] Workspace: ${i}\n[Agent] Group: ${u}\n[Agent] Max tokens: ${N}\n`)}let P,F,I=!1,z=``,B=[];a.setPostHandler(async e=>{({"streaming-start":()=>{I=!0},"streaming-chunk":e=>{e.payload?.text&&(I=!0,z+=e.payload.text,P=(P||``)+e.payload.text,!n.quiet&&!n.output&&p.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-end":()=>{I=!1,z=``},response:e=>{if(e.payload?.text){if(P=e.payload.text,n.output){let t=w(f.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});B.push(t)}else n.quiet||(I&&typeof z==`string`&&z.trim()===e.payload.text.trim()?e.payload.text.endsWith(`
20
+ `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):p.exit(130)}};d.on(`SIGINT`,h),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,h);let g=()=>h();p.on(`SIGINT`,g);let _=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&h()};s&&typeof s.on==`function`&&s.on(`data`,_);let y=``;try{y=(await d.question(`\nModel "${v}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{p.removeListener(`SIGINT`,g),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,h),s.removeListener(`data`,_));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}if(y===``||y===`y`||y===`yes`)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else throw Error(`Model "${v}" is not downloaded. Download aborted.`)}else throw Error(`Model "${v}" is not downloaded. Run with --download or --yes to download model weights automatically.`)}}let y=r.baseUrl||r.providerBaseUrl||c?.baseUrl||s?.baseUrl||s?.providerBaseUrl;return y&&g&&(g={...g,baseUrl:y}),{providerId:l,providerConfig:g,apiKey:_||``,model:v,workspaceConfigData:a,workspaceConfig:o,workspaceSettings:s,workspaceAgent:c}}async function ue(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!X.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!X.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function de(e,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),u=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,d=n._stdinData??null;if(e===`-`?e=d||``:d&&(e=e?`${e}\n\n${d}`:d),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let m=typeof n.maxImageSize==`number`&&n.maxImageSize>0?Math.round(n.maxImageSize*1024*1024):3145728,h=[],g=/* @__PURE__ */ new Map;try{let e=await ee(V(n.file));for(let t of e)if(t.source?.kind===`local-file`){let e=await t.source.file.arrayBuffer();g.set(t.fileName,new Uint8Array(e))}h=await t(r,u,e);for(let e of h)e.path&&g.has(e.fileName)&&g.set(e.path,g.get(e.fileName))}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let _,v,y,x,S,C,T,E;try{let e=await le(r,a,i,n);_=e.providerId,v=e.providerConfig,y=e.apiKey,x=e.model,S=e.workspaceConfigData,C=e.workspaceConfig,T=e.workspaceSettings,E=e.workspaceAgent}catch(e){return n.quiet||console.error(e.message),p.exitCode=1,{success:!1,error:e.message}}let D=n.internetAccess??n.allowInternet??T?.internetAccess??T?.vm_bash_full_internet_access??T?.fullInternetAccess??C?.internetAccess;if(D!==void 0&&typeof a.setConfig==`function`){let e=a.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await a.setConfig(r,e,D?`true`:`false`)}if(v.requiresApiKey!==!1&&!y){let e=_===`huggingface`?`HUGGINGFACE_API_KEY`:`${_.toUpperCase()}_API_KEY`,t=`Error: Provider "${_}" requires an API key, but none was provided.\nPlease provide an API key via --api-key <key> or export ${e}="...".`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let O=[];if(n.history!==!1&&typeof a.getRecentMessages==`function`)try{let e=await a.getRecentMessages(r,u,50);O=await Promise.all(e.map(async e=>{if(e?.role===`user`&&Array.isArray(e?.attachments)&&e.attachments.length>0){let t=await l(e.attachments,async e=>{if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null},{maxImageBytes:m});if(t.length>0){let n=typeof e.content==`string`?e.content:``;return{...e,content:n?[{type:`text`,text:n},...t]:t}}}return e}))}catch{}let k={id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`user`,sender:`user`,channel:`chat`,isFromMe:!1,isTrigger:!0,content:e,timestamp:Date.now(),...h.length>0?{attachments:h}:{}};if(typeof a.saveMessage==`function`)try{await a.saveMessage(r,k)}catch{}let A=k;if(h.length>0){let t=await l(h,async e=>{if(e.path&&g.has(e.path))return g.get(e.path);if(g.has(e.fileName))return g.get(e.fileName);if(e.path&&r)try{return await c(r,u,e.path)}catch{}return null},{maxImageBytes:m});t.length>0&&(A={...k,content:e?[{type:`text`,text:e},...t]:t})}let j=v?.supportsStreaming===!0,M=n.stream!==!1&&n.streaming!==!1&&!n.noStream,N=j&&M,P=Number(n.maxTokens)||(typeof a.getModelMaxTokens==`function`?a.getModelMaxTokens(x):a.DEFAULT_MAX_TOKENS||8192);if(n.verbose&&!n.quiet){let e=v?.name||_,t=N?`streaming`:`standard`;p.stderr.write(`[Agent] Connecting to ${e} (${x}) [${t}]...\n`),p.stderr.write(`[Agent] Workspace: ${i}\n[Agent] Group: ${u}\n[Agent] Max tokens: ${P}\n`)}let F,I,z=!1,B=``,H=[];a.setPostHandler(async e=>{({"streaming-start":()=>{z=!0},"streaming-chunk":e=>{e.payload?.text&&(z=!0,B+=e.payload.text,F=(F||``)+e.payload.text,!n.quiet&&!n.output&&p.stdout.write(e.payload.text))},"streaming-done":()=>{},"streaming-error":e=>{e.payload?.error&&(I=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"streaming-end":()=>{z=!1,B=``},response:e=>{if(e.payload?.text){if(F=e.payload.text,n.output){let t=w(f.resolve(n.output),e.payload.text,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});H.push(t)}else n.quiet||(z&&typeof B==`string`&&B.trim()===e.payload.text.trim()?e.payload.text.endsWith(`
21
21
  `)||p.stdout.write(`
22
22
  `):p.stdout.write(e.payload.text+`
23
- `))}},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&p.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(F=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;p.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;p.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;p.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{L(a,r,e.payload)}})[e.type]?.(e)});let H;try{H=await ue(r,a,u,S,C,T,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let{enabledTools:U,profileSystemPromptOverride:W}=H;if(U.length>0&&!n.quiet){let{getCuratedModelToolSupport:e}=await import(`./chunk-SRBRVorc.js`);e(y)===!1&&p.stderr.write(`[Agent] Warning: Model "${y}" does not support tool calling; tools will be ignored. Use --tools none or choose a tool-capable model (e.g. onnx-community/gemma-4-E2B-it-ONNX).\n`)}if(m.length>0&&!n.quiet){let e=s(y);for(let t of m){let n=o(t.mimeType,t.fileName);n===`image`&&!e.images&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept image input; "${t.fileName}" will be passed as a reference only.\n`):n===`audio`&&!e.audio&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept audio input; "${t.fileName}" will be passed as a reference only.\n`):n===`video`&&!e.video&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${y}" does not accept video input; "${t.fileName}" will be passed as a reference only.\n`):n===`document`&&!e.documents&&!e.routerByFeatures&&p.stderr.write(`[Agent] Warning: Model "${y}" does not accept PDF/document input; "${t.fileName}" will be passed as a reference only.\n`)}}let G;if(n.systemPrompt===`none`||n.systemPrompt===``||n.systemPrompt===!1||n.noSystemPrompt===!0)G=``;else{if(G=n.systemPrompt,!G&&n.systemPromptFile)try{let e=f.resolve(n.systemPromptFile);G=await b(e,`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}if(G||=p.env.SHADOW_CLAW_SYSTEM_PROMPT||p.env.SHADOWCLAW_SYSTEM_PROMPT,!G&&W&&(G=W),!G&&T?.systemPromptFile)try{let e=x?.configPath?f.dirname(x.configPath):i,t=f.resolve(e,T.systemPromptFile);G=await b(t,`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(G||=T?.systemPrompt||C?.systemPrompt||C?.systemPromptOverride,!G&&typeof a.getConfig==`function`)try{let e=await a.getConfig(r,a.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(G=e)}catch{}G||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`}let K={apiKey:v||``,assistantName:`ShadowClaw`,enabledTools:U,groupId:u,maxTokens:N,messages:[...D,k],model:y,provider:g,..._?.baseUrl?{baseUrl:_.baseUrl}:{},streaming:M,verbose:!!n.verbose,systemPrompt:G},q=new AbortController;n.abortSignal&&(n.abortSignal.aborted?q.abort():n.abortSignal.addEventListener(`abort`,()=>q.abort(),{once:!0}));let te=e=>{typeof n.onExit==`function`?n.onExit(e):!p.env.JEST_WORKER_ID&&p.env.NODE_ENV!==`test`&&p.exit(e)},J=!1,Y=null,ne=()=>{if(J)Y&&=(clearTimeout(Y),null),te(130);else{J=!0,q.abort();try{typeof a.cleanupAllLlamafileProcesses==`function`&&a.cleanupAllLlamafileProcesses()}catch{}Y=setTimeout(()=>{te(130)},1500),Y.unref?.()}};p.on(`SIGINT`,ne);let X=n.invokeHandler||a.handleInvoke;try{await X(r,K,q.signal)}catch(e){F=e instanceof Error?e.message:String(e),!J&&!n.quiet&&console.error(`Error: ${F}`)}finally{p.removeListener(`SIGINT`,ne),Y&&=(clearTimeout(Y),null)}if(J)return n.quiet||p.stderr.write(`
23
+ `))}},"intermediate-response":e=>{n.verbose&&!n.quiet&&e.payload?.text&&p.stderr.write(`[Thought] ${e.payload.text}\n`)},error:e=>{e.payload?.error&&(I=e.payload.error,n.quiet||console.error(`Error: ${e.payload.error}`))},"tool-activity":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.tool||`tool`,n=e.payload.status||`executing`;p.stderr.write(`[Tool] ${t} (${n})\n`)}},"thinking-log":e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},status:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label?`[${e.payload.label}] `:``;p.stderr.write(`${t}${e.payload.message||``}\n`)}},log:e=>{if(n.verbose&&!n.quiet&&e.payload){let t=e.payload.label||e.payload.level||`Log`;p.stderr.write(`[${t}] ${e.payload.message||``}\n`)}},"token-usage":e=>{if(n.verbose&&!n.quiet&&e.payload?.usage){let t=e.payload.usage,n=t.prompt_tokens??t.input_tokens??0,r=t.completion_tokens??t.output_tokens??0,i=t.total_tokens??n+r;p.stderr.write(`[Tokens] Prompt: ${n}, Completion: ${r}, Total: ${i}\n`)}},"request-native-ai-task":e=>{L(a,r,e.payload)}})[e.type]?.(e)});let te;try{te=await ue(r,a,u,C,T,E,n)}catch(e){let t=e.message||String(e);return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let{enabledTools:ne,profileSystemPromptOverride:U}=te;if(ne.length>0&&!n.quiet){let{getCuratedModelToolSupport:e}=await import(`./chunk-BfTpnSS4.js`);e(x)===!1&&p.stderr.write(`[Agent] Warning: Model "${x}" does not support tool calling; tools will be ignored. Use --tools none or choose a tool-capable model (e.g. onnx-community/gemma-4-E2B-it-ONNX).\n`)}if(h.length>0&&!n.quiet){let e=s(x);for(let t of h){let n=o(t.mimeType,t.fileName);n===`image`&&!e.images&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept image input; "${t.fileName}" will be passed as a reference only.\n`):n===`audio`&&!e.audio&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept audio input; "${t.fileName}" will be passed as a reference only.\n`):n===`video`&&!e.video&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept video input; "${t.fileName}" will be passed as a reference only.\n`):n===`document`&&!e.documents&&!e.routerByFeatures&&p.stderr.write(`[Agent] Warning: Model "${x}" does not accept PDF/document input; "${t.fileName}" will be passed as a reference only.\n`);let r=typeof t.size==`number`?t.size:0;n===`image`&&r>m?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the ${(m/1024/1024).toFixed(0)} MB image limit and will be passed as a text reference only. Resize or compress the image before attaching.\n`):n===`audio`&&r>5242880?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 5 MB audio limit and will be passed as a text reference only.\n`):n===`document`&&r>20971520&&p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 20 MB document limit and will be passed as a text reference only.\n`)}}let W;if(n.systemPrompt===`none`||n.systemPrompt===``||n.systemPrompt===!1||n.noSystemPrompt===!0)W=``;else{if(W=n.systemPrompt,!W&&n.systemPromptFile)try{let e=f.resolve(n.systemPromptFile);W=await b(e,`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}if(W||=p.env.SHADOW_CLAW_SYSTEM_PROMPT||p.env.SHADOWCLAW_SYSTEM_PROMPT,!W&&U&&(W=U),!W&&E?.systemPromptFile)try{let e=S?.configPath?f.dirname(S.configPath):i,t=f.resolve(e,E.systemPromptFile);W=await b(t,`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(W||=E?.systemPrompt||T?.systemPrompt||T?.systemPromptOverride,!W&&typeof a.getConfig==`function`)try{let e=await a.getConfig(r,a.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(W=e)}catch{}W||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`}let G={apiKey:y||``,assistantName:`ShadowClaw`,enabledTools:ne,groupId:u,maxTokens:P,messages:[...O,A],model:x,provider:_,...v?.baseUrl?{baseUrl:v.baseUrl}:{},streaming:N,verbose:!!n.verbose,systemPrompt:W},K=new AbortController;n.abortSignal&&(n.abortSignal.aborted?K.abort():n.abortSignal.addEventListener(`abort`,()=>K.abort(),{once:!0}));let q=e=>{typeof n.onExit==`function`?n.onExit(e):!p.env.JEST_WORKER_ID&&p.env.NODE_ENV!==`test`&&p.exit(e)},J=!1,Y=null,X=()=>{if(J)Y&&=(clearTimeout(Y),null),q(130);else{J=!0,K.abort();try{typeof a.cleanupAllLlamafileProcesses==`function`&&a.cleanupAllLlamafileProcesses()}catch{}Y=setTimeout(()=>{q(130)},1500),Y.unref?.()}};p.on(`SIGINT`,X);let re=n.invokeHandler||a.handleInvoke;try{await re(r,G,K.signal)}catch(e){I=e instanceof Error?e.message:String(e),!J&&!n.quiet&&console.error(`Error: ${I}`)}finally{p.removeListener(`SIGINT`,X),Y&&=(clearTimeout(Y),null)}if(J)return n.quiet||p.stderr.write(`
24
24
  Operation cancelled.
25
- `),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(F&&I&&!n.quiet&&!n.output&&p.stdout.write(`
26
- `),F)return p.exitCode=1,{success:!1,error:F};if(P&&typeof a.saveMessage==`function`)try{await a.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`assistant`,content:P,timestamp:Date.now()})}catch{}if(n.output&&P&&B.length===0){let e=w(f.resolve(n.output),P,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});B.push(e)}return await Promise.all(B),typeof a.setPostHandler==`function`&&a.setPostHandler(null),{success:!0,response:P,model:y,provider:g}}async function fe(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:i,downloadLocalModel:a,fetchRemoteModels:o,DEFAULT_LOCAL_MODEL:s}=await import(`./chunk-SRBRVorc.js`),c=n.workspace?f.resolve(n.workspace):p.cwd(),l=e||`list`;if(l===`list`||l===`remote`){let e=l===`remote`||!!(n.remote||n.all||n.huggingface),a=await j(c),u=a?.config?.agent?.defaultModel||a?.config?.settings?.defaultModel||s;if(e){n.quiet||p.stdout.write(`
25
+ `),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(I&&z&&!n.quiet&&!n.output&&p.stdout.write(`
26
+ `),I)return p.exitCode=1,{success:!1,error:I};if(F&&typeof a.saveMessage==`function`)try{await a.saveMessage(r,{id:`msg_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,groupId:u,role:`assistant`,content:F,timestamp:Date.now()})}catch{}if(n.output&&F&&H.length===0){let e=w(f.resolve(n.output),F,`utf8`).then(()=>{n.quiet||p.stderr.write(`Output written to ${n.output}\n`)}).catch(()=>{});H.push(e)}return await Promise.all(H),typeof a.setPostHandler==`function`&&a.setPostHandler(null),{success:!0,response:F,model:x,provider:_}}async function fe(e=`list`,t,n={}){let{listLocalModels:r,listLlamafileModels:i,downloadLocalModel:a,fetchRemoteModels:o,DEFAULT_LOCAL_MODEL:s}=await import(`./chunk-BfTpnSS4.js`),c=n.workspace?f.resolve(n.workspace):p.cwd(),l=e||`list`;if(l===`list`||l===`remote`){let e=l===`remote`||!!(n.remote||n.all||n.huggingface),a=await j(c),u=a?.config?.agent?.defaultModel||a?.config?.settings?.defaultModel||s;if(e){n.quiet||p.stdout.write(`
27
27
  Fetching available ONNX models from Hugging Face (onnx-community)...
28
28
  `);let e=await o({cacheDir:n.cacheDir,query:n.query||(l===`remote`&&t?t:void 0)});if(!n.quiet){if(e.length===0)p.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
29
29
 
@@ -37,5 +37,5 @@ Curated Transformers.js Models (Local ONNX):
37
37
  `);for(let e of d){let t=e.id===u,n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.id}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write(`Curated Llamafile Models (Local Executable):
38
38
 
39
39
  `);for(let e of f){let t=e.fileName===u||e.id===u||u.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.fileName}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` URL: ${e.url}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write("Tip: Run `shadow-claw agent model list --remote` (or `shadow-claw agent model remote`) to browse all ONNX models from Hugging Face.\n\n")}return{success:!0,models:d,llamafileModels:f,defaultModel:u}}if(l===`download`){let e=t||n.model||s;n.verbose&&!n.quiet&&p.stderr.write(`Preparing to download model: ${e}\n`);let r=await a(e,{cacheDir:n.cacheDir,verbose:n.verbose,isTTY:n.isTTY,progress:n.progress!==!1&&!n.noProgress});return r.success||(p.exitCode=1),r}if(l===`set`){let e=t||n.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=await j(c),i=r?.configPath||f.join(c,`shadow-claw.config.json`),a=r?.config||{},o={...a,agent:{...a.agent||{},defaultModel:e}};return await w(i,JSON.stringify(o,null,2)+`
40
- `,`utf8`),n.quiet||p.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:i}}let u=`Unknown model action: "${l}". Available: list, download, set`;return n.quiet||console.error(u),p.exitCode=1,{success:!1,error:u}}async function $(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.workspace||p.cwd(),{db:i,workspaceDir:a,core:o}=await R({...t,workspace:r}),s=t.group||o.DEFAULT_SERVER_GROUP_ID||Z,c=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.startsWith(`file://`)||/^[a-zA-Z]:[\\/]/.test(n)){let e=!!(t.tools||t.skills||t.scripts)&&!t.all,r={overwrite:!!t.overwrite,targetSubdir:t.targetSubdir},i={imported:[],skipped:[],failed:[]},o=e&&!t.skills?i:await te(n,a,{...r,skillNames:t.skills?c(t.skills):void 0}),s=e&&!t.tools?i:await Y(`tools`,n,a,{...r,names:c(t.tools)}),l=e&&!t.scripts?i:await Y(`scripts`,n,a,{...r,names:c(t.scripts)}),u=(e,t,n)=>[...e.imported.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`imported`})),...e.skipped.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`skipped`})),...e.failed.map(e=>({name:e.name,path:``,status:`failed`,error:e.error}))],d=o.imported.length+s.imported.length+l.imported.length,f=o.skipped.length+s.skipped.length+l.skipped.length,m=[...o.failed.map(e=>({...e,kind:`Skill`})),...s.failed.map(e=>({...e,kind:`Tool`})),...l.failed.map(e=>({...e,kind:`Script`}))],h=m.length,g=h===0||d>0;return g||(p.exitCode=1),{success:g,siteUrl:n,manifestUrl:n,result:{tools:u(s,`tools`,e=>`${e}.json`),scripts:u(l,`scripts`,e=>`${e}.js`),skills:u(o,`skills`,e=>`${e}/SKILL.md`),diagnostics:m.map(e=>`${e.kind} ${e.name}: ${e.error}`)},importedCount:d,skippedCount:f,failedCount:h,...h>0&&d===0?{error:m[0]?.error}:{}}}if(ne(n)&&t.useNpxSkills!==!1&&(t.npxSkillsExecFn||!t.fetchFn)){let e=await o.discoverSkills(i,s),r=new Set(e.skills.map(e=>e.name)),l=[`add`,n,`-a`,`universal`,`-y`];if(t.skills){let e=c(t.skills);e.length>0&&l.push(`--skill`,...e)}if((await K(l,{workspaceDir:a,execFn:t.npxSkillsExecFn})).success){let e=await o.discoverSkills(i,s),t=e.skills.filter(e=>!r.has(e.name)),a=t.length>0?t:e.skills;return{success:!0,siteUrl:n,manifestUrl:n,result:{tools:[],scripts:[],skills:a.map(e=>({name:e.name,path:e.path,status:`imported`})),diagnostics:[]},importedCount:a.length,skippedCount:0,failedCount:0}}}let l=o.fetchDiscoveryManifest||(await import(`./chunk-DXhq_VQy.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-DyD2eNPy.js`)).importRemoteArtifacts,d=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let f;try{f=await l(n,d)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let{manifest:m,siteUrl:h,manifestUrl:g}=f,_=m.tools||[],v=m.skills||[],y=m.scripts||[];t.quiet||console.log(`Discovered: ${m.name||`Remote Site`} (${v.length} skill${v.length===1?``:`s`}, ${_.length} tool${_.length===1?``:`s`}, ${y.length} script${y.length===1?``:`s`})`);let b=_.map(e=>e.name),x=v.map(e=>e.name),S=y.map(e=>e.name),C,w,T;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];C=e(t.tools),w=e(t.skills),T=e(t.scripts)}else C=b,w=x,T=S;let E=t.autoEnable!==!1,D=!!t.overwrite,O;try{O=await u(i,s,m,{toolNames:C,skillNames:w,scriptNames:T},{autoEnable:E,overwrite:D,fetchFn:d,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let k=O.tools.filter(e=>e.status===`imported`),A=O.skills.filter(e=>e.status===`imported`),j=O.scripts.filter(e=>e.status===`imported`),M=O.tools.filter(e=>e.status===`skipped`),N=O.skills.filter(e=>e.status===`skipped`),P=O.scripts.filter(e=>e.status===`skipped`),F=O.tools.filter(e=>e.status===`failed`),I=O.skills.filter(e=>e.status===`failed`),L=O.scripts.filter(e=>e.status===`failed`),z=k.length+A.length+j.length,B=M.length+N.length+P.length,V=F.length+I.length+L.length;if(!t.quiet){console.log(`
41
- Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-DwvavohW.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{j as _,$ as a,de as c,ie as d,oe as f,I as g,R as h,pe as i,ce as l,K as m,G as n,re as o,ae as p,se as r,fe as s,le as t,Q as u};
40
+ `,`utf8`),n.quiet||p.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:i}}let u=`Unknown model action: "${l}". Available: list, download, set`;return n.quiet||console.error(u),p.exitCode=1,{success:!1,error:u}}async function $(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.workspace||p.cwd(),{db:i,workspaceDir:a,core:o}=await R({...t,workspace:r}),s=t.group||o.DEFAULT_SERVER_GROUP_ID||Z,c=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.startsWith(`file://`)||/^[a-zA-Z]:[\\/]/.test(n)){let e=!!(t.tools||t.skills||t.scripts)&&!t.all,r={overwrite:!!t.overwrite,targetSubdir:t.targetSubdir},i={imported:[],skipped:[],failed:[]},o=e&&!t.skills?i:await K(n,a,{...r,skillNames:t.skills?c(t.skills):void 0}),s=e&&!t.tools?i:await J(`tools`,n,a,{...r,names:c(t.tools)}),l=e&&!t.scripts?i:await J(`scripts`,n,a,{...r,names:c(t.scripts)}),u=(e,t,n)=>[...e.imported.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`imported`})),...e.skipped.map(e=>({name:e,path:`.agents/${t}/${n(e)}`,status:`skipped`})),...e.failed.map(e=>({name:e.name,path:``,status:`failed`,error:e.error}))],d=o.imported.length+s.imported.length+l.imported.length,f=o.skipped.length+s.skipped.length+l.skipped.length,m=[...o.failed.map(e=>({...e,kind:`Skill`})),...s.failed.map(e=>({...e,kind:`Tool`})),...l.failed.map(e=>({...e,kind:`Script`}))],h=m.length,g=h===0||d>0;return g||(p.exitCode=1),{success:g,siteUrl:n,manifestUrl:n,result:{tools:u(s,`tools`,e=>`${e}.json`),scripts:u(l,`scripts`,e=>`${e}.js`),skills:u(o,`skills`,e=>`${e}/SKILL.md`),diagnostics:m.map(e=>`${e.kind} ${e.name}: ${e.error}`)},importedCount:d,skippedCount:f,failedCount:h,...h>0&&d===0?{error:m[0]?.error}:{}}}if(Y(n)&&t.useNpxSkills!==!1&&(t.npxSkillsExecFn||!t.fetchFn)){let e=await o.discoverSkills(i,s),r=new Set(e.skills.map(e=>e.name)),l=[`add`,n,`-a`,`universal`,`-y`];if(t.skills){let e=c(t.skills);e.length>0&&l.push(`--skill`,...e)}if((await W(l,{workspaceDir:a,execFn:t.npxSkillsExecFn})).success){let e=await o.discoverSkills(i,s),t=e.skills.filter(e=>!r.has(e.name)),a=t.length>0?t:e.skills;return{success:!0,siteUrl:n,manifestUrl:n,result:{tools:[],scripts:[],skills:a.map(e=>({name:e.name,path:e.path,status:`imported`})),diagnostics:[]},importedCount:a.length,skippedCount:0,failedCount:0}}}let l=o.fetchDiscoveryManifest||(await import(`./chunk-DXhq_VQy.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-DyD2eNPy.js`)).importRemoteArtifacts,d=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let f;try{f=await l(n,d)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let{manifest:m,siteUrl:h,manifestUrl:g}=f,_=m.tools||[],v=m.skills||[],y=m.scripts||[];t.quiet||console.log(`Discovered: ${m.name||`Remote Site`} (${v.length} skill${v.length===1?``:`s`}, ${_.length} tool${_.length===1?``:`s`}, ${y.length} script${y.length===1?``:`s`})`);let b=_.map(e=>e.name),x=v.map(e=>e.name),S=y.map(e=>e.name),C,w,T;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];C=e(t.tools),w=e(t.skills),T=e(t.scripts)}else C=b,w=x,T=S;let E=t.autoEnable!==!1,D=!!t.overwrite,O;try{O=await u(i,s,m,{toolNames:C,skillNames:w,scriptNames:T},{autoEnable:E,overwrite:D,fetchFn:d,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let k=O.tools.filter(e=>e.status===`imported`),A=O.skills.filter(e=>e.status===`imported`),j=O.scripts.filter(e=>e.status===`imported`),M=O.tools.filter(e=>e.status===`skipped`),N=O.skills.filter(e=>e.status===`skipped`),P=O.scripts.filter(e=>e.status===`skipped`),F=O.tools.filter(e=>e.status===`failed`),I=O.skills.filter(e=>e.status===`failed`),L=O.scripts.filter(e=>e.status===`failed`),z=k.length+A.length+j.length,B=M.length+N.length+P.length,V=F.length+I.length+L.length;if(!t.quiet){console.log(`
41
+ Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-BEz1PD1_.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{j as _,$ as a,de as c,ie as d,oe as f,I as g,R as h,pe as i,ce as l,W as m,U as n,re as o,ae as p,se as r,fe as s,le as t,Q as u};
@@ -1,3 +1,3 @@
1
- import{a as e,n as t,o as n,r}from"./chunk-YrgA1KKk.js";import{n as i}from"./chunk-BJhHc8Uw.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-DDvuLVfW.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>s[`send-message`](e,t),"send-file":async(n,s)=>{let{fileName:l,data:u,prompt:d,groupId:f}=n||{};if(!l||typeof l!=`string`||!u)throw Error(`Missing fileName or data in send-file args`);let p=i(l);await a.promises.mkdir(r,{recursive:!0});let m=o.join(r,p),h=c.isBuffer(u)?u:c.from(u,`base64`);await a.promises.writeFile(m,h);let g=s?.remotePeerId||`remote`,_=f||`peer:${g}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${p}" (${h.length} bytes) to ${m}`);let v;if(d&&typeof d==`string`&&d.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-DDvuLVfW.js`);return n(e,t)}))(`[Attached file: ${p} (${h.length} bytes) saved at ${m}]\n\n${d.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:_,quiet:!e.verbose,stream:!1});t?.success&&(v=t.response)}return{success:!0,fileName:p,path:m,size:h.length,reply:v,text:v}},"transfer-file":async(e,t)=>s[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-bKcol4wy.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return s}function f(t,n){return new Promise((r,i)=>{let s=e(n);try{a.unlinkSync(s)}catch{}try{a.mkdirSync(o.dirname(s),{recursive:!0})}catch{}let c=l.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`)n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));else if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}))}else if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(/* @__PURE__ */ Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}})}else n.writeHead(404),n.end()});c.listen(s,()=>{console.log(`[webrtc-listen] IPC socket: ${s}`),r(c)}),c.on(`error`,i)})}async function p(e={}){let i=e.host||s.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(s.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,c=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((s.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),l=!!(e.insecure===!1||[`0`,`false`,`no`].includes((s.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),u=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],p=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${p}`),console.log(`Signaling server : ${c?`wss`:`ws`}://${i}:${a}${o}`),c&&!l&&console.log(`TLS verification : disabled (self-signed cert allowed)`),u.length>0?console.log(`Trusted peers : ${u.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${p}"`),console.log(``);let m={...d({...e,peerId:p}),...e.handlers||{}},h=new t({host:i,port:a,path:o,secure:c,rejectUnauthorized:l,trustedPeerIds:u,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:m}),g=/* @__PURE__ */ new Map;h._pendingIpc=g;let _=h._setupConnection.bind(h);h._setupConnection=function(e,t){_(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(t&&typeof t==`object`&&t.type===`command:result`){let e=t.payload||{},n=g.get(e.commandId);n&&(g.delete(e.commandId),n(e))}})};let v=t=>{if(console.log(`
1
+ import{a as e,n as t,o as n,r}from"./chunk-YrgA1KKk.js";import{n as i}from"./chunk-BJhHc8Uw.js";import a from"node:fs";import o from"node:path";import s from"process";import{Buffer as c}from"buffer";import l from"node:http";import{tmpdir as u}from"node:os";function d(e={}){let t=e.agent!==!1,n;if(e.workspace)n=o.resolve(e.workspace);else{let e=o.join(u(),`shadow-claw`);a.mkdirSync(e,{recursive:!0}),n=a.mkdtempSync(o.join(e,`workspace-`))}let r=e.transfersDir||o.join(n,`transfers`),s={"send-message":async(n,r)=>{let i=n?.text??n?.prompt??n?.message;if(!i||typeof i!=`string`||!i.trim())throw Error(`Missing text or prompt parameter`);let a=r?.remotePeerId||`remote`,o=n.groupId||`peer:${a}`;if(!t)return e.verbose&&console.log(`[webrtc-listen] Message received from ${a} (agent disabled): "${i.trim()}"`),{success:!0,queued:!0,groupId:o,text:`Message received (agent disabled)`};e.verbose&&console.log(`[webrtc-listen] Prompt from ${a}: "${i.length>80?i.slice(0,77)+`...`:i}"`);let s=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-BwsJfUT3.js`);return n(e,t)}))(i.trim(),{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:o,quiet:!e.verbose,stream:!1});if(!s?.success)throw Error(s?.error||`Agent execution failed`);return{success:!0,reply:s.response,text:s.response,model:s.model,provider:s.provider,groupId:o}},prompt:async(e,t)=>s[`send-message`](e,t),"send-file":async(n,s)=>{let{fileName:l,data:u,prompt:d,groupId:f}=n||{};if(!l||typeof l!=`string`||!u)throw Error(`Missing fileName or data in send-file args`);let p=i(l);await a.promises.mkdir(r,{recursive:!0});let m=o.join(r,p),h=c.isBuffer(u)?u:c.from(u,`base64`);await a.promises.writeFile(m,h);let g=s?.remotePeerId||`remote`,_=f||`peer:${g}`;e.verbose&&console.log(`[webrtc-listen] Saved file "${p}" (${h.length} bytes) to ${m}`);let v;if(d&&typeof d==`string`&&d.trim()&&t){let t=await(e.runAgent||(async(e,t)=>{let{runAgentRun:n}=await import(`./chunk-BwsJfUT3.js`);return n(e,t)}))(`[Attached file: ${p} (${h.length} bytes) saved at ${m}]\n\n${d.trim()}`,{workspace:e.workspace,cacheDir:e.cacheDir,model:e.model,provider:e.provider,apiKey:e.apiKey,systemPrompt:e.systemPrompt,systemPromptFile:e.systemPromptFile,tools:e.tools,allowInternet:e.allowInternet,group:_,quiet:!e.verbose,stream:!1});t?.success&&(v=t.response)}return{success:!0,fileName:p,path:m,size:h.length,reply:v,text:v}},"transfer-file":async(e,t)=>s[`send-file`](e,t),"list-tools":async()=>{try{let{TOOL_DEFINITIONS:e}=await import(`./chunk-bKcol4wy.js`);return{tools:e.map(e=>e.name)}}catch{return{tools:[]}}},ping:async t=>({ok:!0,peerId:e.peerId||``,timestamp:Date.now()})};return s}function f(t,n){return new Promise((r,i)=>{let s=e(n);try{a.unlinkSync(s)}catch{}try{a.mkdirSync(o.dirname(s),{recursive:!0})}catch{}let c=l.createServer(async(e,n)=>{if(e.method===`GET`&&e.url===`/ping`)n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,peerId:t.cliPeerId}));else if(e.method===`GET`&&e.url===`/clients`){let e=Array.from(t._connections.keys()).map(e=>{let n=t._peerCards?.get(e);return{clientId:e,peerId:e,deviceLabel:n?.name||`Browser Peer (${e})`,capabilities:n?.capabilities||[`webrtc`,`peerjs`],version:n?.version||`1.0.0`,transport:`webrtc`,connectedAt:Date.now(),lastSeen:Date.now()}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify({ok:!0,clients:e}))}else if(e.method===`POST`&&e.url===`/command`){let r=``;e.on(`data`,e=>r+=e),e.on(`end`,async()=>{try{let{targetPeerId:e,action:i,args:a,timeoutMs:o}=JSON.parse(r);if(!e){n.writeHead(400,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`targetPeerId is required`}));return}let s=t._connections.get(e);if(!s){let r=Array.from(t._connections.keys());n.writeHead(503,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:`No DataChannel open to peer "${e}". Make sure the browser has connected to this listener first.`+(r.length?` Connected peers: ${r.join(`, `)}`:` No peers are currently connected.`)}));return}let c=`${Date.now()}-${Math.random().toString(36).slice(2)}`,l={id:c,type:`command:execute`,payload:{commandId:c,action:i,args:a||{}}},u=await new Promise((e,n)=>{let r=setTimeout(()=>{t._pendingIpc.delete(c),n(/* @__PURE__ */ Error(`Command "${i}" timed out after ${o||3e4}ms`))},o||3e4);t._pendingIpc.set(c,t=>{clearTimeout(r),e(t)});try{s.send(l)}catch(e){clearTimeout(r),t._pendingIpc.delete(c),n(e)}});n.writeHead(200,{"Content-Type":`application/json`}),n.end(JSON.stringify(u))}catch(e){n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e.message}))}})}else n.writeHead(404),n.end()});c.listen(s,()=>{console.log(`[webrtc-listen] IPC socket: ${s}`),r(c)}),c.on(`error`,i)})}async function p(e={}){let i=e.host||s.env.SHADOWCLAW_HOST||`127.0.0.1`,a=e.port?parseInt(String(e.port),10):parseInt(s.env.SHADOWCLAW_PORT||`8888`,10),o=e.path||`/`,c=!!(e.secure||e.https||[`1`,`true`,`yes`].includes((s.env.SHADOWCLAW_HTTPS||``).toLowerCase().trim())),l=!!(e.insecure===!1||[`0`,`false`,`no`].includes((s.env.SHADOWCLAW_TLS_REJECT_UNAUTHORIZED||``).toLowerCase().trim())),u=e.trustedPeer?Array.isArray(e.trustedPeer)?e.trustedPeer:[e.trustedPeer]:[],p=n(e.peerId,e.cacheDir);console.log(`WebRTC CLI Peer ID : ${p}`),console.log(`Signaling server : ${c?`wss`:`ws`}://${i}:${a}${o}`),c&&!l&&console.log(`TLS verification : disabled (self-signed cert allowed)`),u.length>0?console.log(`Trusted peers : ${u.join(`, `)}`):console.log(`Trusted peers : (any — add --trusted-peer <id> to restrict)`),console.log(``),console.log(`Add this CLI Peer ID as a trusted peer in the browser:`),console.log(` Settings → WebRTC/PeerJS → Trusted Peer IDs → "${p}"`),console.log(``);let m={...d({...e,peerId:p}),...e.handlers||{}},h=new t({host:i,port:a,path:o,secure:c,rejectUnauthorized:l,trustedPeerIds:u,peerId:e.peerId,cacheDir:e.cacheDir,renewPeerId:!!e.renewPeerId,verbose:!!e.verbose,handlers:m}),g=/* @__PURE__ */ new Map;h._pendingIpc=g;let _=h._setupConnection.bind(h);h._setupConnection=function(e,t){_(e,t),e.on(`data`,e=>{let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}if(t&&typeof t==`object`&&t.type===`command:result`){let e=t.payload||{},n=g.get(e.commandId);n&&(g.delete(e.commandId),n(e))}})};let v=t=>{if(console.log(`
2
2
  [webrtc-listen] Shutting down…`),r(e.cacheDir),t)try{t.close()}catch{}h.close(),s.exit(0)};try{await h.start();let t=await f(h,e.cacheDir);s.on(`SIGINT`,()=>v(t)),s.on(`SIGTERM`,()=>v(t)),console.log(`[webrtc-listen] Ready. Run commands with:
3
3
  node bin/cli.mjs send --transport webrtc --client <browser-peer-id> "message"`),await new Promise(()=>{})}catch(t){r(e.cacheDir),console.error(`Error starting WebRTC listener: ${t.message}`),s.exitCode=1}}export{p as n,f as r,d as t};
@@ -1,5 +1,5 @@
1
1
  import e from"node:fs";import t from"node:path";import n from"node:process";import{Buffer as r}from"buffer";import i from"node:readline/promises";import a from"node:tty";function o(e,t=1){if(!Number.isFinite(e)||e<=0)return`0 B`;let n=1024,r=t<0?0:t,i=[`B`,`KB`,`MB`,`GB`,`TB`],a=Math.floor(Math.log(e)/Math.log(n)),o=Math.min(a,i.length-1);return`${parseFloat((e/n**o).toFixed(r))} ${i[o]}`}function s(e={}){let{modelId:t=`model`,stream:r=n.stderr,barWidth:i=24,isTTY:a=!!(r&&typeof r==`object`&&r.isTTY),enabled:s=!0}=e;if(!s)return{update:()=>{},finish:()=>{},fail:e=>{r?.write&&r.write(`${e||`✖ Failed to download ${t}.`}\n`)}};let c=[],l=/* @__PURE__ */ new Map,u=!1;function d(e){let t=Math.round(Math.max(0,Math.min(1,e))*i),n=i-t;return`[`+`=`.repeat(t)+(t<i?`>`:``)+` `.repeat(Math.max(0,n-+(t<i)))+`]`}function f(e,t=0,n=0){let i=l.get(e);return i||(i={lineIndex:c.length,lastPct:-1,lastRenderedTime:0,loaded:t,total:n,isDone:!1},l.set(e,i),c.push(e),a&&c.length>1&&r?.write&&r.write(`
2
- `)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],l=`onnx-community/gemma-4-E2B-it-ONNX`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function d(e){if(!e)return;let t=c.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=u.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function f(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function p(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function m(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function h(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=p(i);if(!e.existsSync(o))return!1;let s=u.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),l=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,l),f=t.join(o,`${l}.part`);try{if(e.existsSync(f))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function g(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function _(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function v(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[g(i),p(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function y(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function b(n,r){if(_(n))return v(n,r);if(m(n))return h(n,r);let i=f(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=y(t);if(!e&&n)return!0}}catch{}return!1}function x(e){return c.map(t=>({...t,cached:b(t.id,e)}))}function S(e){return u.map(t=>({...t,cached:h(t.fileName,e)}))}async function C(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:b(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function w(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:f,noProgress:m,quiet:h=!1,abortSignal:v}=a,y=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),b=_(i),x,S;y?(x=y.url,S=y.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(x=i,S=t.basename(new URL(i).pathname)):b?(S=t.basename(i).endsWith(`.agentfile`)?t.basename(i):`${t.basename(i)}.agentfile`,x=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${S}`):(S=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,x=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${S}`);let C=b?g(o):p(o);e.mkdirSync(C,{recursive:!0});let w=t.join(C,S),T=t.join(C,`${S}.part`);if(e.existsSync(w))try{if(e.statSync(w).size>0)return{success:!0,modelId:i,path:w}}catch{}let E=0;if(e.existsSync(T))try{let t=e.statSync(T);t.size>0&&(E=t.size)}catch{E=0}let D=s({modelId:S,stream:d,isTTY:l,enabled:!h&&f!==!1&&!m}),O;try{c&&d?.write&&d.write(`[Llamafile] Downloading ${x}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};E>0&&(t.Range=`bytes=${E}-`);let n=a.fetch||globalThis.fetch,o=await n(x,{headers:t,redirect:`follow`,signal:v});if(o.status===416&&E>0){try{e.existsSync(T)&&e.unlinkSync(T)}catch{}E=0,delete t.Range,o=await n(x,{headers:t,redirect:`follow`,signal:v})}if(!o.ok&&o.status!==206)throw Error(`Failed to download ${x}: HTTP ${o.status} ${o.statusText}`);let s=o.status===206,l=0,u=0;if(s){let t=(o.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(o.headers?.get?.(`content-length`)||`0`,10);l=t?parseInt(t[1],10):E+n,u=E,O=e.createWriteStream(T,{flags:`a`})}else E=0,l=parseInt(o.headers?.get?.(`content-length`)||`0`,10),u=0,O=e.createWriteStream(T,{flags:`w`});if(u>0&&D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0}),o.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof o.body.getReader==`function`)t=e.fromWeb(o.body);else if(typeof o.body[Symbol.asyncIterator]==`function`)t=o.body;else{let e=r.from(await o.arrayBuffer());O.write(e),u+=e.length}if(t)for await(let e of t){let t=r.isBuffer(e)?e:r.from(e);O.write(t),u+=t.length,D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0})}}if(O){let e=O;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(T,w);try{e.chmodSync(w,493)}catch{}return D.finish(),{success:!0,modelId:i,path:w}}catch(e){try{O?.end()}catch{}let t=e instanceof Error?e.message:String(e);return D.fail(`✖ Error downloading ${S}: ${t}`),{success:!1,modelId:i,error:t}}}async function T(e,t={}){if(m(e)||_(e))return w(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l,quiet:u=!1}=t,d=o;if(!d){let{getAgentCore:e}=await import(`./chunk-CFxww5Yz.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=s({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function E(r={}){let o=t.resolve(r.contentRoot||n.cwd()),s=t.resolve(r.workspaceDir||o),c=r.cacheDir,u=r.onExit||(e=>n.exit(e)),d=r.stdin||n.stdin,f=r.stdout||n.stderr,p=!1,g=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;g=e.openSync(t,`r`),d=new a.ReadStream(g),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{}}let y=i.createInterface({input:d,output:f}),x=!1,S=()=>{if(!x){x=!0,f.write(`
2
+ `)),i}function p(e,t){if(!a||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,o=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${o}\x1b[${s}B\r`):r.write(`\r\x1b[2K${o}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!a&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(a){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(a){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${o(l)} / ${o(u)})`:l>0&&(i=` (${o(l)})`);let a=n?` [${n}]`:``;p(n,`Downloading ${t}${a} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${o(l)} / ${o(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,a){let e=d(1),r=i.total||i.loaded,a=r>0?` (${o(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${a}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!a&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;a&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const c=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],l=`onnx-community/gemma-4-E2B-it-ONNX`,u=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function d(e){if(!e)return;let t=c.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=u.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function f(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function p(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function m(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||u.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function h(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=p(i);if(!e.existsSync(o))return!1;let s=u.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),l=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,l),f=t.join(o,`${l}.part`);try{if(e.existsSync(f))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function g(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function _(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function v(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[g(i),p(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function y(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function b(n,r){if(_(n))return v(n,r);if(m(n))return h(n,r);let i=f(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=y(t);if(!e&&n)return!0}}catch{}return!1}function x(e){return c.map(t=>({...t,cached:b(t.id,e)}))}function S(e){return u.map(t=>({...t,cached:h(t.fileName,e)}))}async function C(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:b(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function w(i,a={}){let{cacheDir:o,verbose:c=!1,isTTY:l,stream:d=n.stderr,progress:f,noProgress:m,quiet:h=!1,abortSignal:v}=a,y=u.find(e=>e.id===i||e.fileName===i||e.fileName===t.basename(i)||e.url===i),b=_(i),x,S;y?(x=y.url,S=y.fileName):i.startsWith(`http://`)||i.startsWith(`https://`)?(x=i,S=t.basename(new URL(i).pathname)):b?(S=t.basename(i).endsWith(`.agentfile`)?t.basename(i):`${t.basename(i)}.agentfile`,x=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${S}`):(S=t.basename(i).endsWith(`.llamafile`)?t.basename(i):`${t.basename(i)}.llamafile`,x=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${S}`);let C=b?g(o):p(o);e.mkdirSync(C,{recursive:!0});let w=t.join(C,S),T=t.join(C,`${S}.part`);if(e.existsSync(w))try{if(e.statSync(w).size>0)return{success:!0,modelId:i,path:w}}catch{}let E=0;if(e.existsSync(T))try{let t=e.statSync(T);t.size>0&&(E=t.size)}catch{E=0}let D=s({modelId:S,stream:d,isTTY:l,enabled:!h&&f!==!1&&!m}),O;try{c&&d?.write&&d.write(`[Llamafile] Downloading ${x}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};E>0&&(t.Range=`bytes=${E}-`);let n=a.fetch||globalThis.fetch,o=await n(x,{headers:t,redirect:`follow`,signal:v});if(o.status===416&&E>0){try{e.existsSync(T)&&e.unlinkSync(T)}catch{}E=0,delete t.Range,o=await n(x,{headers:t,redirect:`follow`,signal:v})}if(!o.ok&&o.status!==206)throw Error(`Failed to download ${x}: HTTP ${o.status} ${o.statusText}`);let s=o.status===206,l=0,u=0;if(s){let t=(o.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(o.headers?.get?.(`content-length`)||`0`,10);l=t?parseInt(t[1],10):E+n,u=E,O=e.createWriteStream(T,{flags:`a`})}else E=0,l=parseInt(o.headers?.get?.(`content-length`)||`0`,10),u=0,O=e.createWriteStream(T,{flags:`w`});if(u>0&&D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0}),o.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof o.body.getReader==`function`)t=e.fromWeb(o.body);else if(typeof o.body[Symbol.asyncIterator]==`function`)t=o.body;else{let e=r.from(await o.arrayBuffer());O.write(e),u+=e.length}if(t)for await(let e of t){let t=r.isBuffer(e)?e:r.from(e);O.write(t),u+=t.length,D.update({status:`progress`,file:S,loaded:u,total:l,progress:l>0?u/l*100:void 0})}}if(O){let e=O;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(T,w);try{e.chmodSync(w,493)}catch{}return D.finish(),{success:!0,modelId:i,path:w}}catch(e){try{O?.end()}catch{}let t=e instanceof Error?e.message:String(e);return D.fail(`✖ Error downloading ${S}: ${t}`),{success:!1,modelId:i,error:t}}}async function T(e,t={}){if(m(e)||_(e))return w(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:o,progress:c,noProgress:l,quiet:u=!1}=t,d=o;if(!d){let{getAgentCore:e}=await import(`./chunk-DZEN9T5y.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=s({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function E(r={}){let o=t.resolve(r.contentRoot||n.cwd()),s=t.resolve(r.workspaceDir||o),c=r.cacheDir,u=r.onExit||(e=>n.exit(e)),d=r.stdin||n.stdin,f=r.stdout||n.stderr,p=!1,g=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;g=e.openSync(t,`r`),d=new a.ReadStream(g),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,p=!0}catch{}}let y=i.createInterface({input:d,output:f}),x=!1,S=()=>{if(!x){x=!0,f.write(`
3
3
  Operation cancelled.
4
4
  `);try{y.close()}catch{}u(130)}};y.on(`SIGINT`,S),d&&typeof d.on==`function`&&d!==n.stdin&&d.on(`SIGINT`,S);let E=()=>S();n.on(`SIGINT`,E);let D=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&S()};d&&typeof d.on==`function`&&d.on(`data`,D);try{let i=`transformers_js_local`,a=l,u=/* @__PURE__ */ new Map;for(;!x;){f.write(`
5
5
  ShadowClaw CLI Agent — Model Selection:
@@ -1,4 +1,4 @@
1
- import{t as e}from"./chunk-Cnjb8Usu.js";import{t}from"./chunk-DorZAfZa.js";var n={"tldr|plain-text|short":`You are a skilled assistant that accurately summarizes content provided in the TEXT section.
1
+ import{t as e}from"./chunk-CTarF4FC.js";import{t}from"./chunk-DorZAfZa.js";var n={"tldr|plain-text|short":`You are a skilled assistant that accurately summarizes content provided in the TEXT section.
2
2
  Summarize the text as if explaining it to someone with a very short attention span.
3
3
  The summary must fit within one sentence.
4
4
  The summary must not contain any formatting or markup language.
@@ -0,0 +1 @@
1
+ export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-BVSC1MNQ.js";
@@ -1,4 +1,4 @@
1
- import{t as e}from"./chunk-Cnjb8Usu.js";import{t}from"./chunk-DorZAfZa.js";var n={"formal|plain-text|short":`You are a direct-instruction text generation AI. Your SOLE PURPOSE is to generate text that precisely fulfills the user's 'INSTRUCTIONS' and adheres to all specified parameters. Your task is to PERFORM the request to CREATE text, not to talk about it, summarize it, or repeat it. You must synthesize the information provided to create a new, original response.
1
+ import{t as e}from"./chunk-CTarF4FC.js";import{t}from"./chunk-DorZAfZa.js";var n={"formal|plain-text|short":`You are a direct-instruction text generation AI. Your SOLE PURPOSE is to generate text that precisely fulfills the user's 'INSTRUCTIONS' and adheres to all specified parameters. Your task is to PERFORM the request to CREATE text, not to talk about it, summarize it, or repeat it. You must synthesize the information provided to create a new, original response.
2
2
 
3
3
  ---
4
4
  **CRITICAL RULES (NON-NEGOTIABLE - YOU MUST FOLLOW THESE PERFECTLY):**
@@ -1,4 +1,4 @@
1
- import{f as e,v as t}from"./chunk-CZdCRqNe.js";import{t as n}from"./chunk-BChOKoxf.js";import{t as r}from"./chunk-sC-eQ-Nh.js";import{a as i,i as a,n as o,r as s,t as c}from"./chunk-Cpdoq2Nw.js";import{a as l,d as u,h as d,p as f}from"./chunk-CeGycQxn.js";import{_ as p,b as m,g as h,l as g,r as _,s as v,y}from"./chunk-BcxWvEHa.js";import{n as b,r as x,t as S}from"./chunk-Dl4zTOqg.js";import{n as C,t as w}from"./chunk-DjKQO7aV.js";import{t as T}from"./chunk-IVWoxOkm.js";import{A as E,B as D,C as O,D as k,E as A,F as j,H as M,I as N,J as ee,O as te,P as ne,R as re,S as P,T as ie,V as F,X as ae,Y as I,Z as oe,_ as se,a as ce,b as L,c as R,d as le,f as ue,g as de,h as fe,i as pe,j as me,k as he,l as ge,m as _e,o as ve,p as ye,q as z,r as be,s as xe,t as Se,u as Ce,v as we,w as Te,x as Ee,y as De,z as B}from"./chunk-3vNYrs_L.js";import{i as Oe,n as ke,o as Ae,r as je,t as Me,u as Ne}from"./chunk-D0Xq-Muz.js";import{n as Pe}from"./chunk-CMEzBK2J.js";import{t as Fe}from"./chunk-CuwzD5GU.js";import{r as Ie,t as Le}from"./chunk-C4pZzeqM.js";import{createRequire as Re}from"node:module";import ze,{constants as Be,existsSync as Ve}from"node:fs";import V from"node:path";import{fileURLToPath as He}from"node:url";import{env as Ue}from"node:process";import{exec as We,spawn as Ge}from"node:child_process";import{access as Ke,mkdir as qe,readFile as Je,readdir as Ye,rename as Xe,rm as Ze,rmdir as Qe,stat as H,unlink as $e,writeFile as U}from"node:fs/promises";import W from"process";import{Buffer as G}from"buffer";import{EventEmitter as et}from"node:events";import{isIP as tt}from"node:net";import{runInNewContext as nt}from"node:vm";import{DatabaseSync as rt}from"node:sqlite";var it=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=V.basename(e)}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async getFile(){let e=await Je(this._path);return{size:e.length,type:`application/octet-stream`,async text(){return e.toString(`utf8`)},async arrayBuffer(){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}}}async createWritable(){let e=[],t=this._path,n=async t=>{if(typeof t==`string`)e.push(G.from(t,`utf8`));else if(t instanceof Uint8Array)e.push(G.from(t));else if(t instanceof ArrayBuffer)e.push(G.from(t));else if(t instanceof Blob){if(typeof t.arrayBuffer==`function`){let n=await t.arrayBuffer();e.push(G.from(n))}else if(typeof t.bytes==`function`){let n=await t.bytes();e.push(G.from(n))}else if(typeof t.text==`function`){let n=await t.text();e.push(G.from(n,`utf8`))}else if(t._buffer)e.push(G.from(t._buffer));else if(typeof FileReader<`u`){let n=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=n,r.readAsArrayBuffer(t)});e.push(G.from(n))}}else t&&typeof t==`object`&&`data`in t?await n(t.data):e.push(G.from(new Uint8Array(t)))};return{write:n,async close(){let n=G.concat(e);await U(t,n)}}}},at=class e{kind=`directory`;name;_path;_rootPath;constructor(e,t){this._path=V.resolve(e),this._rootPath=t?V.resolve(t):this._path,this.name=V.basename(this._path)||this._path}_resolveChild(e){if(!e||e===`.`||e.includes(`\0`)){let t=/* @__PURE__ */ Error(`Invalid path name: "${e}"`);throw t.name=`TypeError`,t}let t=V.resolve(this._path,e),n=V.relative(this._path,t),r=V.relative(this._rootPath,t);if(n.startsWith(`..`)||V.isAbsolute(n)||r.startsWith(`..`)||V.isAbsolute(r)){let t=/* @__PURE__ */ Error(`SecurityError: Path traversal outside workspace root is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return t}async getDirectoryHandle(t,n){let r=this._resolveChild(t);if(n?.create)await qe(r,{recursive:!0});else if(!Ve(r)){let e=/* @__PURE__ */ Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}if(!(await H(r)).isDirectory()){let e=/* @__PURE__ */ Error(`TypeMismatchError: "${t}" is a file, not a directory`);throw e.name=`TypeMismatchError`,e}return new e(r,this._rootPath)}async getFileHandle(e,t){let n=this._resolveChild(e);if(t?.create)Ve(n)||await U(n,``);else if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){let t=/* @__PURE__ */ Error(`TypeMismatchError: "${e}" is a directory, not a file`);throw t.name=`TypeMismatchError`,t}return new it(n)}async*entries(){let t;try{t=await Ye(this._path)}catch{return}for(let n of t){let t=V.join(this._path,n);try{(await H(t)).isDirectory()?yield[n,new e(t,this._rootPath)]:yield[n,new it(t)]}catch{}}}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async removeEntry(e,t){let n=this._resolveChild(e);if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){if(t?.recursive)await Ze(n,{recursive:!0});else try{await Qe(n)}catch(t){if(t.code===`ENOTEMPTY`){let t=/* @__PURE__ */ Error(`InvalidModificationError: directory is not empty: "${e}"`);throw t.name=`InvalidModificationError`,t}throw t}}else await $e(n)}};let ot=null;function st(){return ot}function ct(e){ot=V.resolve(e),d(new at(e))}globalThis.__setStorageRootFromPath=ct,globalThis.__getStorageRootPath=st;const lt=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=st?.()??globalThis.__getStorageRootPath?.()??W.cwd(),a=We(e,{timeout:n*1e3,maxBuffer:10485760,cwd:i},(e,t,n)=>{let i=t||``;n&&(i+=(i?`
1
+ import{f as e,v as t}from"./chunk-lPvFUkd5.js";import{t as n}from"./chunk-BChOKoxf.js";import{t as r}from"./chunk-sC-eQ-Nh.js";import{a as i,i as a,n as o,r as s,t as c}from"./chunk-Cpdoq2Nw.js";import{a as l,d as u,h as d,p as f}from"./chunk-CeGycQxn.js";import{_ as p,b as m,g as h,l as g,r as _,s as v,y}from"./chunk-BcxWvEHa.js";import{n as b,r as x,t as S}from"./chunk-Dl4zTOqg.js";import{n as C,t as w}from"./chunk-DjKQO7aV.js";import{t as T}from"./chunk-IVWoxOkm.js";import{A as E,B as D,C as O,D as k,E as A,F as j,H as M,I as N,J as ee,O as te,P as ne,R as re,S as P,T as ie,V as F,X as ae,Y as I,Z as oe,_ as se,a as ce,b as L,c as R,d as le,f as ue,g as de,h as fe,i as pe,j as me,k as he,l as ge,m as _e,o as ve,p as ye,q as z,r as be,s as xe,t as Se,u as Ce,v as we,w as Te,x as Ee,y as De,z as B}from"./chunk-Cbq5hpjb.js";import{i as Oe,n as ke,o as Ae,r as je,t as Me,u as Ne}from"./chunk-D0Xq-Muz.js";import{n as Pe}from"./chunk-CMEzBK2J.js";import{t as Fe}from"./chunk-CuwzD5GU.js";import{r as Ie,t as Le}from"./chunk-C4pZzeqM.js";import{createRequire as Re}from"node:module";import ze,{constants as Be,existsSync as Ve}from"node:fs";import V from"node:path";import{fileURLToPath as He}from"node:url";import{env as Ue}from"node:process";import{exec as We,spawn as Ge}from"node:child_process";import{access as Ke,mkdir as qe,readFile as Je,readdir as Ye,rename as Xe,rm as Ze,rmdir as Qe,stat as H,unlink as $e,writeFile as U}from"node:fs/promises";import W from"process";import{Buffer as G}from"buffer";import{EventEmitter as et}from"node:events";import{isIP as tt}from"node:net";import{runInNewContext as nt}from"node:vm";import{DatabaseSync as rt}from"node:sqlite";var it=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=V.basename(e)}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async getFile(){let e=await Je(this._path);return{size:e.length,type:`application/octet-stream`,async text(){return e.toString(`utf8`)},async arrayBuffer(){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}}}async createWritable(){let e=[],t=this._path,n=async t=>{if(typeof t==`string`)e.push(G.from(t,`utf8`));else if(t instanceof Uint8Array)e.push(G.from(t));else if(t instanceof ArrayBuffer)e.push(G.from(t));else if(t instanceof Blob){if(typeof t.arrayBuffer==`function`){let n=await t.arrayBuffer();e.push(G.from(n))}else if(typeof t.bytes==`function`){let n=await t.bytes();e.push(G.from(n))}else if(typeof t.text==`function`){let n=await t.text();e.push(G.from(n,`utf8`))}else if(t._buffer)e.push(G.from(t._buffer));else if(typeof FileReader<`u`){let n=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(r.result),r.onerror=n,r.readAsArrayBuffer(t)});e.push(G.from(n))}}else t&&typeof t==`object`&&`data`in t?await n(t.data):e.push(G.from(new Uint8Array(t)))};return{write:n,async close(){let n=G.concat(e);await U(t,n)}}}},at=class e{kind=`directory`;name;_path;_rootPath;constructor(e,t){this._path=V.resolve(e),this._rootPath=t?V.resolve(t):this._path,this.name=V.basename(this._path)||this._path}_resolveChild(e){if(!e||e===`.`||e.includes(`\0`)){let t=/* @__PURE__ */ Error(`Invalid path name: "${e}"`);throw t.name=`TypeError`,t}let t=V.resolve(this._path,e),n=V.relative(this._path,t),r=V.relative(this._rootPath,t);if(n.startsWith(`..`)||V.isAbsolute(n)||r.startsWith(`..`)||V.isAbsolute(r)){let t=/* @__PURE__ */ Error(`SecurityError: Path traversal outside workspace root is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return t}async getDirectoryHandle(t,n){let r=this._resolveChild(t);if(n?.create)await qe(r,{recursive:!0});else if(!Ve(r)){let e=/* @__PURE__ */ Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}if(!(await H(r)).isDirectory()){let e=/* @__PURE__ */ Error(`TypeMismatchError: "${t}" is a file, not a directory`);throw e.name=`TypeMismatchError`,e}return new e(r,this._rootPath)}async getFileHandle(e,t){let n=this._resolveChild(e);if(t?.create)Ve(n)||await U(n,``);else if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){let t=/* @__PURE__ */ Error(`TypeMismatchError: "${e}" is a directory, not a file`);throw t.name=`TypeMismatchError`,t}return new it(n)}async*entries(){let t;try{t=await Ye(this._path)}catch{return}for(let n of t){let t=V.join(this._path,n);try{(await H(t)).isDirectory()?yield[n,new e(t,this._rootPath)]:yield[n,new it(t)]}catch{}}}async isSameEntry(e){return!e||typeof e!=`object`?!1:e.kind===this.kind&&e._path===this._path}async removeEntry(e,t){let n=this._resolveChild(e);if(!Ve(n)){let e=/* @__PURE__ */ Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}if((await H(n)).isDirectory()){if(t?.recursive)await Ze(n,{recursive:!0});else try{await Qe(n)}catch(t){if(t.code===`ENOTEMPTY`){let t=/* @__PURE__ */ Error(`InvalidModificationError: directory is not empty: "${e}"`);throw t.name=`InvalidModificationError`,t}throw t}}else await $e(n)}};let ot=null;function st(){return ot}function ct(e){ot=V.resolve(e),d(new at(e))}globalThis.__setStorageRootFromPath=ct,globalThis.__getStorageRootPath=st;const lt=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=st?.()??globalThis.__getStorageRootPath?.()??W.cwd(),a=We(e,{timeout:n*1e3,maxBuffer:10485760,cwd:i},(e,t,n)=>{let i=t||``;n&&(i+=(i?`
2
2
  `:``)+n),e&&!i&&(i=e.message),r(i)});t&&a.stdin&&(a.stdin.write(t),a.stdin.end())});re(lt),globalThis.__headlessBashExecutor=lt;function ut(e,t,n){let r=t.input_tokens||0,i=t.output_tokens||0,a=t.cache_read_input_tokens||0,o=t.cache_creation_input_tokens||0;return{type:`token-usage`,payload:{groupId:e,inputTokens:r,outputTokens:i,cacheReadTokens:a,cacheCreationTokens:o,totalTokens:r+i+a+o,contextLimit:n}}}function K(e,t,n,r){B(ee(e,t,n,r))}async function*dt(e,t){let n=e.getReader(),r=new TextDecoder,i=``;try{for(;!t?.aborted;){let{done:e,value:t}=await n.read();if(e)break;i+=r.decode(t,{stream:!0});let a=i.split(`
3
3
 
4
4
  `);i=a.pop()||``;for(let e of a){let t=e.split(`