shadow-claw 1.59.6 → 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 (358) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +6 -2
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/chunk-3C5izdQW.js +1 -0
  6. package/dist/cli/chunk-B-75h9gX.js +1 -0
  7. package/dist/cli/{chunk-C9o6lXP3.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-DJqHK-qS.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-yiVdvGCJ.js → chunk-BVSC1MNQ.js} +11 -11
  14. package/dist/cli/{chunk-CX2itile.js → chunk-BdWcep6o.js} +1 -1
  15. package/dist/cli/{chunk-DLde6nuO.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-D3y7h9Xe.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-DM4xsTry.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-DB21BMqt.js +7 -0
  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-Bc_weULz.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-C8DBACtx.js → chunk-ZxDxSSn-.js} +1 -1
  40. package/dist/cli/chunk-lPvFUkd5.js +7 -0
  41. package/dist/cli/{chunk-Ctg5L55n.js → chunk-n5s-sCdU.js} +1 -1
  42. package/dist/cli/{chunk-Dw8GndPD.js → chunk-nD9VPVMq.js} +1 -1
  43. package/dist/cli/{chunk-Cq_kQohv.js → chunk-rFuy8aS_.js} +1 -1
  44. package/dist/cli/{chunk-Bq38OubR.js → chunk-wjM6JXWa.js} +1 -1
  45. package/dist/cli/{chunk-3wTukVof.js → chunk-zcES9rut.js} +1 -1
  46. package/dist/cli/cli.js +3 -3
  47. package/dist/headless-agent.js +2 -2
  48. package/dist/lib/{app-routes-DJdIjp2V.js → app-routes-BXiRvlNl.js} +7 -25
  49. package/dist/lib/{app-routes-DJdIjp2V.js.map → app-routes-BXiRvlNl.js.map} +1 -1
  50. package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js} +2 -2
  51. package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map} +1 -1
  52. package/dist/lib/{channel-Dlru5ofR.js → channel-DB77spML.js} +3 -3
  53. package/dist/lib/{channel-Dlru5ofR.js.map → channel-DB77spML.js.map} +1 -1
  54. package/dist/lib/{chat-template-BuuLY8l7.js → chat-template-DPEKGJhB.js} +2 -2
  55. package/dist/lib/{chat-template-BuuLY8l7.js.map → chat-template-DPEKGJhB.js.map} +1 -1
  56. package/dist/lib/{compact-context-BtR55YPU.js → compact-context-Q9t9aL1e.js} +19 -19
  57. package/dist/lib/{compact-context-BtR55YPU.js.map → compact-context-Q9t9aL1e.js.map} +1 -1
  58. package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
  59. package/dist/lib/components/index.js +27 -27
  60. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  61. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  63. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  64. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  65. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  66. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  67. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  68. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  69. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  70. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  71. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  72. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  73. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  74. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  75. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  76. package/dist/lib/components/shadow-claw-channels.js +1 -1
  77. package/dist/lib/components/shadow-claw-chat.js +1 -1
  78. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  79. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  80. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  81. package/dist/lib/components/shadow-claw-files.js +1 -1
  82. package/dist/lib/components/shadow-claw-git.js +1 -1
  83. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  84. package/dist/lib/components/shadow-claw-llm.js +1 -1
  85. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  86. package/dist/lib/components/shadow-claw-networking.js +1 -1
  87. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  88. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  89. package/dist/lib/components/shadow-claw-pages.js +1 -1
  90. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  91. package/dist/lib/components/shadow-claw-provider-model-picker.js +1 -1
  92. package/dist/lib/components/shadow-claw-settings.js +1 -1
  93. package/dist/lib/components/shadow-claw-storage.js +1 -1
  94. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  95. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  96. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  97. package/dist/lib/components/shadow-claw-tools.js +1 -1
  98. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  99. package/dist/lib/components/shadow-claw.js +1 -1
  100. package/dist/lib/{config-DxNI3TlW.js → config-BrHR97zt.js} +2 -2
  101. package/dist/lib/{config-DxNI3TlW.js.map → config-BrHR97zt.js.map} +1 -1
  102. package/dist/lib/{configure-peer-js-ChDhOZU4.js → configure-peer-js-CgFiwoxY.js} +3 -3
  103. package/dist/lib/{configure-peer-js-ChDhOZU4.js.map → configure-peer-js-CgFiwoxY.js.map} +1 -1
  104. package/dist/lib/{connections-DC4NZkJE.js → connections-C1FWsBsE.js} +2 -2
  105. package/dist/lib/{connections-DC4NZkJE.js.map → connections-C1FWsBsE.js.map} +1 -1
  106. package/dist/lib/content/build-attachment-content-blocks.d.ts +2 -0
  107. package/dist/lib/{credentials-5vpz0XPk.js → credentials-CZbngHXW.js} +2 -2
  108. package/dist/lib/{credentials-5vpz0XPk.js.map → credentials-CZbngHXW.js.map} +1 -1
  109. package/dist/lib/{discover-skills-CD0sKvAI.js → discover-skills-CXyaWHKi.js} +13 -13
  110. package/dist/lib/{discover-skills-CD0sKvAI.js.map → discover-skills-CXyaWHKi.js.map} +1 -1
  111. package/dist/lib/{download-group-file-Dk3qaxhJ.js → download-group-file-D0wgg10Q.js} +2 -2
  112. package/dist/lib/{download-group-file-Dk3qaxhJ.js.map → download-group-file-D0wgg10Q.js.map} +1 -1
  113. package/dist/lib/{file-viewer-B4pRW-_G.js → file-viewer-DOfvX6yy.js} +5 -5
  114. package/dist/lib/{file-viewer-B4pRW-_G.js.map → file-viewer-DOfvX6yy.js.map} +1 -1
  115. package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js → get-or-create-subscriber-id-wyzaML7Z.js} +2 -2
  116. package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js.map → get-or-create-subscriber-id-wyzaML7Z.js.map} +1 -1
  117. package/dist/lib/{git-B3Q1euc5.js → git-CogDRlEz.js} +5 -5
  118. package/dist/lib/{git-B3Q1euc5.js.map → git-CogDRlEz.js.map} +1 -1
  119. package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js → iframe-bridge-scripts-Dx825LLG.js} +2 -2
  120. package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js.map → iframe-bridge-scripts-Dx825LLG.js.map} +1 -1
  121. package/dist/lib/index.js +28 -28
  122. package/dist/lib/{init-chat-split-resize-B0ODULx9.js → init-chat-split-resize-Cc0bd2z9.js} +2 -2
  123. package/dist/lib/{init-chat-split-resize-B0ODULx9.js.map → init-chat-split-resize-Cc0bd2z9.js.map} +1 -1
  124. package/dist/lib/{init-control-plane-C1FRRmjC.js → init-control-plane-CEGdzgWX.js} +15 -15
  125. package/dist/lib/{init-control-plane-C1FRRmjC.js.map → init-control-plane-CEGdzgWX.js.map} +1 -1
  126. package/dist/lib/{invoke-agent-CzN7sVh-.js → invoke-agent-cac3gCsj.js} +11 -11
  127. package/dist/lib/{invoke-agent-CzN7sVh-.js.map → invoke-agent-cac3gCsj.js.map} +1 -1
  128. package/dist/lib/{markdown-mbNo7cV3.js → markdown--6vTAPEH.js} +2 -2
  129. package/dist/lib/{markdown-mbNo7cV3.js.map → markdown--6vTAPEH.js.map} +1 -1
  130. package/dist/lib/{mcp-reconnect-3T7yWGEY.js → mcp-reconnect-BeqQvNWO.js} +3 -3
  131. package/dist/lib/{mcp-reconnect-3T7yWGEY.js.map → mcp-reconnect-BeqQvNWO.js.map} +1 -1
  132. package/dist/lib/{model-ranking-DGNSWYwN.js → model-ranking-BhsJV7vb.js} +2 -2
  133. package/dist/lib/{model-ranking-DGNSWYwN.js.map → model-ranking-BhsJV7vb.js.map} +1 -1
  134. package/dist/lib/{move-group-entry-NMTJ59M9.js → move-group-entry-D8dptMg0.js} +5 -5
  135. package/dist/lib/{move-group-entry-NMTJ59M9.js.map → move-group-entry-D8dptMg0.js.map} +1 -1
  136. package/dist/lib/{orchestrator-B8FV1V7x.js → orchestrator-BBAwy9Nm.js} +24 -24
  137. package/dist/lib/{orchestrator-B8FV1V7x.js.map → orchestrator-BBAwy9Nm.js.map} +1 -1
  138. package/dist/lib/{orchestrator-i_QJ-o22.js → orchestrator-cRBe3lhq.js} +11 -11
  139. package/dist/lib/orchestrator-cRBe3lhq.js.map +1 -0
  140. package/dist/lib/{parse-path-DPCn-HwI.js → parse-path-BOHQP_IQ.js} +3 -3
  141. package/dist/lib/{parse-path-DPCn-HwI.js.map → parse-path-BOHQP_IQ.js.map} +1 -1
  142. package/dist/lib/{peerjs-z5zeioPV.js → peerjs-BLg8aGUj.js} +8 -8
  143. package/dist/lib/{peerjs-z5zeioPV.js.map → peerjs-BLg8aGUj.js.map} +1 -1
  144. package/dist/lib/{process-peer-query-param-CJp7w7AU.js → process-peer-query-param-BnsVnxzH.js} +5 -5
  145. package/dist/lib/{process-peer-query-param-CJp7w7AU.js.map → process-peer-query-param-BnsVnxzH.js.map} +1 -1
  146. package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js → process-pending-shared-payloads-DBZfZOOa.js} +4 -4
  147. package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js.map → process-pending-shared-payloads-DBZfZOOa.js.map} +1 -1
  148. package/dist/lib/{process-room-query-param-C3FFGGn6.js → process-room-query-param-B8EYg_-r.js} +4 -4
  149. package/dist/lib/{process-room-query-param-C3FFGGn6.js.map → process-room-query-param-B8EYg_-r.js.map} +1 -1
  150. package/dist/lib/{provider-DcQZypu5.js → provider-BC9KPI14.js} +3 -3
  151. package/dist/lib/{provider-DcQZypu5.js.map → provider-BC9KPI14.js.map} +1 -1
  152. package/dist/lib/{push-client-Cx5rMs6J.js → push-client-CAm6UMvE.js} +5 -5
  153. package/dist/lib/{push-client-Cx5rMs6J.js.map → push-client-CAm6UMvE.js.map} +1 -1
  154. package/dist/lib/{read-group-file-bytes-CXOG_YyM.js → read-group-file-bytes-UQIk1eJG.js} +2 -2
  155. package/dist/lib/{read-group-file-bytes-CXOG_YyM.js.map → read-group-file-bytes-UQIk1eJG.js.map} +1 -1
  156. package/dist/lib/{rooms-CwlkYLDU.js → rooms-Dzphx3rK.js} +2 -2
  157. package/dist/lib/{rooms-CwlkYLDU.js.map → rooms-Dzphx3rK.js.map} +1 -1
  158. package/dist/lib/{shadow-claw-DoQ7fgl5.js → shadow-claw-CGl8tXtG.js} +17 -20
  159. package/dist/lib/shadow-claw-CGl8tXtG.js.map +1 -0
  160. package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js → shadow-claw-a2ui-lG0vQbW8.js} +2 -2
  161. package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js.map → shadow-claw-a2ui-lG0vQbW8.js.map} +1 -1
  162. package/dist/lib/{shadow-claw-accounts-BTDILfWw.js → shadow-claw-accounts-CkqyCxwp.js} +3 -3
  163. package/dist/lib/{shadow-claw-accounts-BTDILfWw.js.map → shadow-claw-accounts-CkqyCxwp.js.map} +1 -1
  164. package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js → shadow-claw-channel-config-BNIWCdsL.js} +4 -4
  165. package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js.map → shadow-claw-channel-config-BNIWCdsL.js.map} +1 -1
  166. package/dist/lib/{shadow-claw-channels-JgEzuHWK.js → shadow-claw-channels-C2QSn4Ew.js} +3 -3
  167. package/dist/lib/{shadow-claw-channels-JgEzuHWK.js.map → shadow-claw-channels-C2QSn4Ew.js.map} +1 -1
  168. package/dist/lib/{shadow-claw-chat-SGUDT31r.js → shadow-claw-chat-Wx3y9y6c.js} +15 -15
  169. package/dist/lib/{shadow-claw-chat-SGUDT31r.js.map → shadow-claw-chat-Wx3y9y6c.js.map} +1 -1
  170. package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js → shadow-claw-control-plane-D5E4cFGu.js} +7 -7
  171. package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js.map → shadow-claw-control-plane-D5E4cFGu.js.map} +1 -1
  172. package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js → shadow-claw-conversations-BtDv7GRW.js} +7 -7
  173. package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js.map → shadow-claw-conversations-BtDv7GRW.js.map} +1 -1
  174. package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js → shadow-claw-file-viewer-CG40kwWV.js} +10 -10
  175. package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js.map → shadow-claw-file-viewer-CG40kwWV.js.map} +1 -1
  176. package/dist/lib/{shadow-claw-files-DN7irmE1.js → shadow-claw-files-BOUULrlX.js} +11 -11
  177. package/dist/lib/{shadow-claw-files-DN7irmE1.js.map → shadow-claw-files-BOUULrlX.js.map} +1 -1
  178. package/dist/lib/{shadow-claw-git-D-1oIh65.js → shadow-claw-git-BeHV73_9.js} +6 -6
  179. package/dist/lib/{shadow-claw-git-D-1oIh65.js.map → shadow-claw-git-BeHV73_9.js.map} +1 -1
  180. package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js → shadow-claw-integrations-RZZ-m-Id.js} +4 -4
  181. package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js.map → shadow-claw-integrations-RZZ-m-Id.js.map} +1 -1
  182. package/dist/lib/{shadow-claw-llm-4Gefh5FN.js → shadow-claw-llm-KONyWKZM.js} +9 -9
  183. package/dist/lib/{shadow-claw-llm-4Gefh5FN.js.map → shadow-claw-llm-KONyWKZM.js.map} +1 -1
  184. package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js → shadow-claw-mcp-remote-BKFROurv.js} +4 -4
  185. package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js.map → shadow-claw-mcp-remote-BKFROurv.js.map} +1 -1
  186. package/dist/lib/{shadow-claw-networking-BN5BB4hb.js → shadow-claw-networking-Diy3JJkc.js} +2 -2
  187. package/dist/lib/{shadow-claw-networking-BN5BB4hb.js.map → shadow-claw-networking-Diy3JJkc.js.map} +1 -1
  188. package/dist/lib/{shadow-claw-notifications-71KARtkY.js → shadow-claw-notifications-C-upPa-4.js} +3 -3
  189. package/dist/lib/{shadow-claw-notifications-71KARtkY.js.map → shadow-claw-notifications-C-upPa-4.js.map} +1 -1
  190. package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js → shadow-claw-page-header-C_Qr3xZM.js} +2 -2
  191. package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js.map → shadow-claw-page-header-C_Qr3xZM.js.map} +1 -1
  192. package/dist/lib/{shadow-claw-pages-BiRM6qiA.js → shadow-claw-pages-CfAjUKgd.js} +11 -11
  193. package/dist/lib/{shadow-claw-pages-BiRM6qiA.js.map → shadow-claw-pages-CfAjUKgd.js.map} +1 -1
  194. package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js → shadow-claw-peerjs-t4YibS9s.js} +6 -6
  195. package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js.map → shadow-claw-peerjs-t4YibS9s.js.map} +1 -1
  196. package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js → shadow-claw-provider-model-picker-B-Ct4yW-.js} +2 -2
  197. package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js.map → shadow-claw-provider-model-picker-B-Ct4yW-.js.map} +1 -1
  198. package/dist/lib/{shadow-claw-settings-CcT5EK08.js → shadow-claw-settings-Cg5V0e9g.js} +7 -7
  199. package/dist/lib/{shadow-claw-settings-CcT5EK08.js.map → shadow-claw-settings-Cg5V0e9g.js.map} +1 -1
  200. package/dist/lib/{shadow-claw-storage-eTOpbvpi.js → shadow-claw-storage-C7tCnsSG.js} +5 -5
  201. package/dist/lib/{shadow-claw-storage-eTOpbvpi.js.map → shadow-claw-storage-C7tCnsSG.js.map} +1 -1
  202. package/dist/lib/{shadow-claw-task-server-DFImTUbw.js → shadow-claw-task-server-BObsRdf8.js} +2 -2
  203. package/dist/lib/{shadow-claw-task-server-DFImTUbw.js.map → shadow-claw-task-server-BObsRdf8.js.map} +1 -1
  204. package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js → shadow-claw-tasks-B2EEqrcY.js} +9 -9
  205. package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js.map → shadow-claw-tasks-B2EEqrcY.js.map} +1 -1
  206. package/dist/lib/{shadow-claw-terminal-C-4wreFe.js → shadow-claw-terminal-DSHfO2b9.js} +2 -2
  207. package/dist/lib/{shadow-claw-terminal-C-4wreFe.js.map → shadow-claw-terminal-DSHfO2b9.js.map} +1 -1
  208. package/dist/lib/{shadow-claw-tools-COdrGZJk.js → shadow-claw-tools-DwPBADua.js} +7 -7
  209. package/dist/lib/{shadow-claw-tools-COdrGZJk.js.map → shadow-claw-tools-DwPBADua.js.map} +1 -1
  210. package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js → shadow-claw-webvm-CY4qGaMB.js} +3 -3
  211. package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js.map → shadow-claw-webvm-CY4qGaMB.js.map} +1 -1
  212. package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js → sync-web-mcp-registration-BiOZvW-R.js} +6 -6
  213. package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js.map → sync-web-mcp-registration-BiOZvW-R.js.map} +1 -1
  214. package/dist/lib/{system-prompt-DT_KeYaL.js → system-prompt-CxJ3Nx4c.js} +9 -8
  215. package/dist/lib/system-prompt-CxJ3Nx4c.js.map +1 -0
  216. package/dist/lib/{tools-Beuyh8y1.js → tools-B8OJ4sMF.js} +4 -4
  217. package/dist/lib/{tools-Beuyh8y1.js.map → tools-B8OJ4sMF.js.map} +1 -1
  218. package/dist/lib/{transformers-DydnReu4.js → transformers-BMURofG6.js} +2 -2
  219. package/dist/lib/{transformers-DydnReu4.js.map → transformers-BMURofG6.js.map} +1 -1
  220. package/dist/lib/{trusted-types-CfwZl_rr.js → trusted-types-HwsGS5Nj.js} +19 -17
  221. package/dist/lib/{trusted-types-CfwZl_rr.js.map → trusted-types-HwsGS5Nj.js.map} +1 -1
  222. package/dist/lib/{upload-group-file-BbBzjTcN.js → upload-group-file-CJpoNjEb.js} +3 -3
  223. package/dist/lib/{upload-group-file-BbBzjTcN.js.map → upload-group-file-CJpoNjEb.js.map} +1 -1
  224. package/dist/lib/utils/index.js +1 -1
  225. package/dist/lib/utils/namespaced-storage.js +1 -1
  226. package/dist/lib/utils/runtime-assets.js +1 -1
  227. package/dist/lib/utils/utils.js +1 -1
  228. package/dist/lib/{webmcp-DCfAFiIO.js → webmcp-BoMTvgmX.js} +3 -3
  229. package/dist/lib/{webmcp-DCfAFiIO.js.map → webmcp-BoMTvgmX.js.map} +1 -1
  230. package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js → write-group-file-bytes-CNT7DqOZ.js} +3 -3
  231. package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js.map → write-group-file-bytes-CNT7DqOZ.js.map} +1 -1
  232. package/dist/public/.well-known/mcp/server-card.json +1 -1
  233. package/dist/public/.well-known/mcp.json +1 -1
  234. package/dist/public/AGENTS.md +3 -1
  235. package/dist/public/README.md +6 -2
  236. package/dist/public/agent.worker.js +1 -1
  237. package/dist/public/attachment-capabilities-AdwXt3--.js +1 -0
  238. package/dist/public/{channel-BylT3rJC.js → channel-DIpDQekL.js} +1 -1
  239. package/dist/public/{chat-template-DPHJy7tr.js → chat-template-CXKs8lFR.js} +1 -1
  240. package/dist/public/compact-context-BQ2ZXoAc.js +5 -0
  241. package/dist/public/{compact-context-BINQh64w.js → compact-context-dHitmPsV.js} +2 -2
  242. package/dist/public/config-C16fFWtP.js +1 -0
  243. package/dist/public/{configure-peer-js-DChhcOfe.js → configure-peer-js-DV1rqvFX.js} +1 -1
  244. package/dist/public/{connections-CHaw0VqP.js → connections-Dxwj8yK_.js} +1 -1
  245. package/dist/public/{create-model-cache-fetch-DQebkoPL.js → create-model-cache-fetch-B0mSCEk6.js} +1 -1
  246. package/dist/public/{credentials-CgVqS119.js → credentials-CJUQ5Ep2.js} +1 -1
  247. package/dist/public/{custom-element-security-kiDhPfb8.js → custom-element-security-B2daIE5r.js} +2 -2
  248. package/dist/public/{discover-skills-Cvmx5I9V.js → discover-skills-BWJB8HUA.js} +6 -6
  249. package/dist/public/docs/architecture/overview.md +1 -1
  250. package/dist/public/docs/example/article/index.html +29 -30
  251. package/dist/public/docs/example/article.html +29 -30
  252. package/dist/public/docs/publishing/index.html +29 -30
  253. package/dist/public/docs/publishing.html +29 -30
  254. package/dist/public/docs/skill-creator/index.html +29 -30
  255. package/dist/public/docs/skill-creator.html +29 -30
  256. package/dist/public/docs/subsystems/attachment-capabilities.md +14 -1
  257. package/dist/public/docs/subsystems/cli.md +95 -51
  258. package/dist/public/docs/subsystems/pages.md +5 -0
  259. package/dist/public/{download-group-file-BapoRgfU.js → download-group-file-BkMH-JKi.js} +1 -1
  260. package/dist/public/e2e/README.md +1 -1
  261. package/dist/public/{e2e-bridge-C0g8vZKr.js → e2e-bridge-lP2qqiv3.js} +1 -1
  262. package/dist/public/get-group-dir-D--BiEyk.js +1 -0
  263. package/dist/public/{get-or-create-subscriber-id-GvRZYXwA.js → get-or-create-subscriber-id-jVHnQfbr.js} +1 -1
  264. package/dist/public/{git-CaAAZfVd.js → git-DjmQ16rm.js} +2 -2
  265. package/dist/public/{iframe-bridge-scripts-BnqtKhE4.js → iframe-bridge-scripts-CO0izGjW.js} +1 -1
  266. package/dist/public/index.html +29 -30
  267. package/dist/public/index.js +1 -1
  268. package/dist/public/{init-chat-split-resize-Btonoy8u.js → init-chat-split-resize-C8AqCCiK.js} +1 -1
  269. package/dist/public/init-control-plane-Ctz7FI8M.js +1 -0
  270. package/dist/public/{invoke-agent-B3Osw6K7.js → invoke-agent-C_geruwq.js} +1 -1
  271. package/dist/public/llms.txt +1 -1
  272. package/dist/public/main/index.html +29 -30
  273. package/dist/public/main/memory/index.html +29 -30
  274. package/dist/public/main/memory.html +29 -30
  275. package/dist/public/main.html +29 -30
  276. package/dist/public/{markdown-CPbU4r1U.js → markdown-CDSb5Hrl.js} +1 -1
  277. package/dist/public/{mcp-reconnect-CzROVsXG.js → mcp-reconnect-iPZPihwX.js} +1 -1
  278. package/dist/public/{memory-storage-BkoMlxOr.js → memory-storage-2m7KZ-aP.js} +1 -1
  279. package/dist/public/{model-ranking-CK0iBo3Z.js → model-ranking-BgOSaNIy.js} +1 -1
  280. package/dist/public/{move-group-entry-CTxoq7lw.js → move-group-entry-QQ9Hkk54.js} +1 -1
  281. package/dist/public/{orchestrator-BrDjQbGf.js → orchestrator-C1kaTltu.js} +2 -2
  282. package/dist/public/orchestrator-Li1UAsv7.js +63 -0
  283. package/dist/public/{peerjs-CgF4Iz5W.js → peerjs-DbBryE-9.js} +1 -1
  284. package/dist/public/{process-peer-query-param-BL2k0Hu-.js → process-peer-query-param-DQIgr3KL.js} +1 -1
  285. package/dist/public/{process-pending-shared-payloads-C1AgGvn8.js → process-pending-shared-payloads-Ctb-TFqB.js} +1 -1
  286. package/dist/public/{process-room-query-param-DM0QCq3_.js → process-room-query-param-F-XnIVoZ.js} +1 -1
  287. package/dist/public/provider-YPZmsuHR.js +1 -0
  288. package/dist/public/{push-client-DJEOz7bi.js → push-client-DRx9Eggz.js} +1 -1
  289. package/dist/public/{rooms-C6LXIJl4.js → rooms-BurBI7is.js} +1 -1
  290. package/dist/public/service-worker/init.js +1 -1
  291. package/dist/public/service-worker.js +1 -1
  292. package/dist/public/shadow-claw-Bg9AQ5x_.js +1176 -0
  293. package/dist/public/{shadow-claw-accounts--4hd_oCz.js → shadow-claw-accounts-B3mjYI0M.js} +1 -1
  294. package/dist/public/{shadow-claw-card-IbNlZAdK.js → shadow-claw-card-tcXRS1GF.js} +1 -1
  295. package/dist/public/{shadow-claw-channels-Vq_pPGa2.js → shadow-claw-channels-BiSfLvWv.js} +1 -1
  296. package/dist/public/{shadow-claw-chat-D7_GS25e.js → shadow-claw-chat-N5jMsXZZ.js} +3 -3
  297. package/dist/public/{shadow-claw-control-plane-WTMEV8_p.js → shadow-claw-control-plane-DFVe_Xdq.js} +2 -2
  298. package/dist/public/{shadow-claw-conversations-CLQgU1IT.js → shadow-claw-conversations-wAR06_ya.js} +1 -1
  299. package/dist/public/{shadow-claw-empty-state-D4CrFGsN.js → shadow-claw-empty-state-CnPm3NVM.js} +1 -1
  300. package/dist/public/{shadow-claw-file-viewer-BhqiqLWQ.js → shadow-claw-file-viewer-sZN_FCDW.js} +4 -4
  301. package/dist/public/{shadow-claw-files-senDiG9l.js → shadow-claw-files-CnvkCbd4.js} +2 -2
  302. package/dist/public/{shadow-claw-git-DOOCqY23.js → shadow-claw-git-BBHfClGk.js} +2 -2
  303. package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-DvdBqzRJ.js} +1 -1
  304. package/dist/public/{shadow-claw-llm-actYICAk.js → shadow-claw-llm-YfohG519.js} +2 -2
  305. package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-BAVbf5pi.js} +1 -1
  306. package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-CZ4LWPW7.js} +1 -1
  307. package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-BHwyREkG.js} +1 -1
  308. package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-De6Qf6eY.js} +1 -1
  309. package/dist/public/{shadow-claw-page-header-action-button-2DH5O1TD.js → shadow-claw-page-header-action-button-FSOhTc9z.js} +1 -1
  310. package/dist/public/{shadow-claw-pages-3r5I-wI8.js → shadow-claw-pages-D_oPyDca.js} +6 -6
  311. package/dist/public/{shadow-claw-pdf-viewer-BiCEwsoY.js → shadow-claw-pdf-viewer-CrU4wqRq.js} +1 -1
  312. package/dist/public/{shadow-claw-settings-DgB9RSZN.js → shadow-claw-settings-DkUhvxVr.js} +2 -2
  313. package/dist/public/{shadow-claw-storage-JB_43nd8.js → shadow-claw-storage-D0o56Tjw.js} +1 -1
  314. package/dist/public/{shadow-claw-task-server-oi5UIxdA.js → shadow-claw-task-server-4rkroO9K.js} +1 -1
  315. package/dist/public/{shadow-claw-tasks-CnyiOt81.js → shadow-claw-tasks-BdP7lmvu.js} +3 -3
  316. package/dist/public/{shadow-claw-terminal-BC3RynHt.js → shadow-claw-terminal-DVHX7Fsu.js} +1 -1
  317. package/dist/public/{shadow-claw-toast-YjG--2Za.js → shadow-claw-toast-B9Y9tSkW.js} +1 -1
  318. package/dist/public/{shadow-claw-tools-Bbwk4vlT.js → shadow-claw-tools-BwwY53Lr.js} +1 -1
  319. package/dist/public/{shadow-claw-webvm-HZqzl2H5.js → shadow-claw-webvm-CXGdkCNM.js} +1 -1
  320. package/dist/public/{sync-web-mcp-registration-BaH2nAP0.js → sync-web-mcp-registration-DVK_IhXZ.js} +1 -1
  321. package/dist/public/{system-prompt-Dck3N8T0.js → system-prompt-BmswoQwF.js} +2 -2
  322. package/dist/public/{tools-DHA1dK2I.js → tools-D-52Zmfc.js} +1 -1
  323. package/dist/public/{transformers-C-DuTM2K.js → transformers-CQ9ss9rD.js} +1 -1
  324. package/dist/public/{upload-group-file-Cejr3zo1.js → upload-group-file-A8kB7lvO.js} +1 -1
  325. package/dist/public/{webmcp-CMRtu57-.js → webmcp-DIUZjVF5.js} +1 -1
  326. package/dist/public/{workbox-92eae37e.js → workbox-e4022e15.js} +1 -1
  327. package/dist/public/{write-group-file-CmJuVQNO.js → write-group-file-R67DjJ-q.js} +1 -1
  328. package/dist/public/{write-group-file-bytes-Cejr3zo1.js → write-group-file-bytes-A8kB7lvO.js} +1 -1
  329. package/dist/public/{zip-reader-CuQ13eLe.js → zip-reader-JHoTbATw.js} +1 -1
  330. package/dist/server.js +6 -6
  331. package/package.json +1 -1
  332. package/dist/cli/chunk-2gZFafgY.js +0 -1
  333. package/dist/cli/chunk-BFziiMKt.js +0 -7
  334. package/dist/cli/chunk-BM3llsxb.js +0 -1
  335. package/dist/cli/chunk-BUNoeMKY.js +0 -36
  336. package/dist/cli/chunk-Bj5qFsDi.js +0 -7
  337. package/dist/cli/chunk-Bj95zm-y.js +0 -1
  338. package/dist/cli/chunk-BpyP-esT.js +0 -1
  339. package/dist/cli/chunk-CX696s3_.js +0 -1
  340. package/dist/cli/chunk-DRxCrCAA.js +0 -139
  341. package/dist/cli/chunk-DjbCHa0h.js +0 -1
  342. package/dist/cli/chunk-Ds5-K-9o.js +0 -1
  343. package/dist/cli/chunk-DsQhAF31.js +0 -1
  344. package/dist/cli/chunk-VM-dECyG.js +0 -1
  345. package/dist/cli/chunk-gvNsvav0.js +0 -225
  346. package/dist/cli/chunk-heu2xRw1.js +0 -1
  347. package/dist/lib/orchestrator-i_QJ-o22.js.map +0 -1
  348. package/dist/lib/shadow-claw-DoQ7fgl5.js.map +0 -1
  349. package/dist/lib/system-prompt-DT_KeYaL.js.map +0 -1
  350. package/dist/public/app-routes-V_-URXc5.js +0 -1
  351. package/dist/public/attachment-capabilities-B6ibLwQB.js +0 -1
  352. package/dist/public/compact-context-CX4H8V57.js +0 -5
  353. package/dist/public/config-C-YdSFZB.js +0 -1
  354. package/dist/public/get-group-dir-DL44kvqW.js +0 -1
  355. package/dist/public/init-control-plane-BoJijVtf.js +0 -1
  356. package/dist/public/orchestrator-CaUpEVkQ.js +0 -63
  357. package/dist/public/provider-DNIL4-Hw.js +0 -1
  358. package/dist/public/shadow-claw-DdgeYPg5.js +0 -1176
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
3
3
  "name": "shadow-claw",
4
- "version": "1.59.6",
4
+ "version": "1.60.0",
5
5
  "description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
6
6
  "title": "ShadowClaw MCP Server",
7
7
  "websiteUrl": "https://xt-ml.github.io/shadow-claw/",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
3
3
  "name": "shadow-claw",
4
- "version": "1.59.6",
4
+ "version": "1.60.0",
5
5
  "description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
6
6
  "title": "ShadowClaw MCP Server",
7
7
  "websiteUrl": "https://xt-ml.github.io/shadow-claw/",
package/README.md CHANGED
@@ -65,8 +65,12 @@ npx shadow-claw agent --tools none --no-system-prompt --no-history run "Explain
65
65
  # Pipe plain text into an agent tool (auto-mapped to tool schema)
66
66
  echo "how are you doing today" | npx shadow-claw agent tool rewrite_text
67
67
 
68
- # Attach local files (repeatable) without sharing a workspace
69
- npx shadow-claw agent run "Compare these" -f a.png -f b.png
68
+ # Attach local files (repeatable) — images, PDFs, audio, code, text
69
+ npx shadow-claw agent run "Compare these" --no-tools -f a.png -f b.png
70
+
71
+ # Images > 3 MB fall back to a text reference by default.
72
+ # Raise the limit with --max-image-size (in MB) for larger images:
73
+ npx shadow-claw agent run "Describe this poster" --no-tools --max-image-size 10 -f big-photo.png
70
74
 
71
75
  # Combine CLI prompt with piped document content and save to file
72
76
  cat doc.txt | npx shadow-claw agent run "Summarize this" -o summary.txt
@@ -1 +1 @@
1
- export{t as runBuild}from"../chunk-gvNsvav0.js";
1
+ export{t as runBuild}from"../chunk-CFCcbFs2.js";
@@ -0,0 +1 @@
1
+ export{t as resolveAgentProvider,c as runAgentRun}from"./chunk-BECr0WxI.js";
@@ -0,0 +1 @@
1
+ export{n as runWebRtcListenCommand}from"./chunk-nD9VPVMq.js";
@@ -1,5 +1,5 @@
1
1
  import e from"node:fs";import t from"node:path";import n from"node:process";import r from"node:readline/promises";import i from"node:tty";function a(e,t=1){if(!Number.isFinite(e)||e<=0)return`0 B`;let n=1024,r=t<0?0:t,i=[`B`,`KB`,`MB`,`GB`,`TB`],a=Math.floor(Math.log(e)/Math.log(n)),o=Math.min(a,i.length-1);return`${parseFloat((e/n**o).toFixed(r))} ${i[o]}`}function o(e={}){let{modelId:t=`model`,stream:r=n.stderr,barWidth:i=24,isTTY:o=!!(r&&typeof r==`object`&&r.isTTY),enabled:s=!0}=e;if(!s)return{update:()=>{},finish:()=>{},fail:e=>{r?.write&&r.write(`${e||`✖ Failed to download ${t}.`}\n`)}};let c=[],l=/* @__PURE__ */ new Map,u=!1;function d(e){let t=Math.round(Math.max(0,Math.min(1,e))*i),n=i-t;return`[`+`=`.repeat(t)+(t<i?`>`:``)+` `.repeat(Math.max(0,n-+(t<i)))+`]`}function f(e,t=0,n=0){let i=l.get(e);return i||(i={lineIndex:c.length,lastPct:-1,lastRenderedTime:0,loaded:t,total:n,isDone:!1},l.set(e,i),c.push(e),o&&c.length>1&&r?.write&&r.write(`
2
- `)),i}function p(e,t){if(!o||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,a=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${a}\x1b[${s}B\r`):r.write(`\r\x1b[2K${a}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!o&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(o){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(o){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${a(l)} / ${a(u)})`:l>0&&(i=` (${a(l)})`);let o=n?` [${n}]`:``;p(n,`Downloading ${t}${o} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${a(l)} / ${a(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,o){let e=d(1),r=i.total||i.loaded,o=r>0?` (${a(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${o}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!o&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const s=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],c=`onnx-community/gemma-4-E2B-it-ONNX`,l=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function u(e){if(!e)return;let t=s.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=l.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function d(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function f(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function p(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||l.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=f(i);if(!e.existsSync(o))return!1;let s=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),u=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,u),p=t.join(o,`${u}.part`);try{if(e.existsSync(p))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function h(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function g(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function _(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[h(i),f(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function v(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function y(n,r){if(g(n))return _(n,r);if(p(n))return m(n,r);let i=d(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=v(t);if(!e&&n)return!0}}catch{}return!1}function b(e){return s.map(t=>({...t,cached:y(t.id,e)}))}function x(e){return l.map(t=>({...t,cached:m(t.fileName,e)}))}async function S(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:y(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function C(r,i={}){let{cacheDir:a,verbose:s=!1,isTTY:c,stream:u=n.stderr,progress:d,noProgress:p,quiet:m=!1,abortSignal:_}=i,v=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),y=g(r),b,x;v?(b=v.url,x=v.fileName):r.startsWith(`http://`)||r.startsWith(`https://`)?(b=r,x=t.basename(new URL(r).pathname)):y?(x=t.basename(r).endsWith(`.agentfile`)?t.basename(r):`${t.basename(r)}.agentfile`,b=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${x}`):(x=t.basename(r).endsWith(`.llamafile`)?t.basename(r):`${t.basename(r)}.llamafile`,b=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${x}`);let S=y?h(a):f(a);e.mkdirSync(S,{recursive:!0});let C=t.join(S,x),w=t.join(S,`${x}.part`);if(e.existsSync(C))try{if(e.statSync(C).size>0)return{success:!0,modelId:r,path:C}}catch{}let T=0;if(e.existsSync(w))try{let t=e.statSync(w);t.size>0&&(T=t.size)}catch{T=0}let E=o({modelId:x,stream:u,isTTY:c,enabled:!m&&d!==!1&&!p}),D;try{s&&u?.write&&u.write(`[Llamafile] Downloading ${b}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};T>0&&(t.Range=`bytes=${T}-`);let n=i.fetch||globalThis.fetch,a=await n(b,{headers:t,redirect:`follow`,signal:_});if(a.status===416&&T>0){try{e.existsSync(w)&&e.unlinkSync(w)}catch{}T=0,delete t.Range,a=await n(b,{headers:t,redirect:`follow`,signal:_})}if(!a.ok&&a.status!==206)throw Error(`Failed to download ${b}: HTTP ${a.status} ${a.statusText}`);let o=a.status===206,c=0,l=0;if(o){let t=(a.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(a.headers?.get?.(`content-length`)||`0`,10);c=t?parseInt(t[1],10):T+n,l=T,D=e.createWriteStream(w,{flags:`a`})}else T=0,c=parseInt(a.headers?.get?.(`content-length`)||`0`,10),l=0,D=e.createWriteStream(w,{flags:`w`});if(l>0&&E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0}),a.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof a.body.getReader==`function`)t=e.fromWeb(a.body);else if(typeof a.body[Symbol.asyncIterator]==`function`)t=a.body;else{let e=Buffer.from(await a.arrayBuffer());D.write(e),l+=e.length}if(t)for await(let e of t){let t=Buffer.isBuffer(e)?e:Buffer.from(e);D.write(t),l+=t.length,E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0})}}if(D){let e=D;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(w,C);try{e.chmodSync(C,493)}catch{}return E.finish(),{success:!0,modelId:r,path:C}}catch(e){try{D?.end()}catch{}let t=e instanceof Error?e.message:String(e);return E.fail(`✖ Error downloading ${x}: ${t}`),{success:!1,modelId:r,error:t}}}async function w(e,t={}){if(p(e)||g(e))return C(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:s,progress:c,noProgress:l,quiet:u=!1}=t,d=s;if(!d){let{getAgentCore:e}=await import(`./chunk-BM3llsxb.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=o({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function T(a={}){let o=t.resolve(a.contentRoot||n.cwd()),s=t.resolve(a.workspaceDir||o),l=a.cacheDir,u=a.onExit||(e=>n.exit(e)),d=a.stdin||n.stdin,f=a.stdout||n.stderr,h=!1,v=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;v=e.openSync(t,`r`),d=new i.ReadStream(v),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{}}let b=r.createInterface({input:d,output:f}),x=!1,T=()=>{if(!x){x=!0,f.write(`
2
+ `)),i}function p(e,t){if(!o||!r?.write)return;let n=l.get(e);if(!n)return;let i=typeof r.columns==`number`&&r.columns>0?r.columns:null,a=i&&t.length>i-1?t.slice(0,i-1):t,s=c.length-1-n.lineIndex;s>0?r.write(`\x1b[${s}A\r\x1b[2K${a}\x1b[${s}B\r`):r.write(`\r\x1b[2K${a}`)}function m(e){if(u||!e)return;let n=e.file||(e.status===`progress_total`?`Total`:t);if(e.status===`initiate`){if(f(n),!o&&r?.write)r.write(`[Download] Starting ${t}${n?` (${n})`:``}...\n`);else if(o){let e=n?` [${n}]`:``;p(n,`Downloading ${t}${e} ${d(0)} 0.0%`)}}else if(e.status===`progress`||e.status===`progress_total`){let i=typeof e.progress==`number`?e.progress:0,s=Math.max(0,Math.min(100,i)),c=s/100,l=Number(e.loaded)||0,u=Number(e.total)||0,m=f(n,l,u),h=Date.now();if(o){if(h-m.lastRenderedTime<30&&s<100&&Math.abs(s-m.lastPct)<.5)return;m.lastRenderedTime=h,m.lastPct=s,m.loaded=l,m.total=u;let e=d(c),r=`${s.toFixed(1)}%`.padStart(6,` `),i=``;u>0?i=` (${a(l)} / ${a(u)})`:l>0&&(i=` (${a(l)})`);let o=n?` [${n}]`:``;p(n,`Downloading ${t}${o} ${e} ${r}${i}`)}else{let e=Math.floor(s/20)*20;if(e>m.lastPct&&(e>0||s===0)){m.lastPct=e;let i=u>0?` (${a(l)} / ${a(u)})`:``;r?.write&&r.write(`[Download] ${t}${n?` [${n}]`:``}: ${e}%${i}\n`)}}}else if(e.status===`done`){let i=l.get(n);if(i){if(i.isDone=!0,o){let e=d(1),r=i.total||i.loaded,o=r>0?` (${a(r)})`:``,s=n?` [${n}]`:``;p(n,`Downloading ${t}${s} ${e} 100.0%${o}`)}else r?.write&&r.write(`[Download] Finished file: ${n}\n`)}else!o&&e.file&&r?.write&&r.write(`[Download] Finished file: ${e.file}\n`)}}function h(e){if(u)return;u=!0;let n=`✔ Model ${t} downloaded successfully.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}function g(e){if(u)return;u=!0;let n=`✖ Failed to download ${t}.`;o&&r?.write?c.length>0?r.write(`\n${e||n}\n`):r.write(`${e||n}\n`):r?.write&&r.write(`${e||n}\n`)}return{update:m,finish:h,fail:g}}const s=[{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,description:`Google Gemma 4 E2B instruction-tuned ONNX model (Default, 128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,description:`Google Gemma 4 E4B instruction-tuned ONNX model (128k context, tools)`,contextLength:128e3,supportsTools:!0,recommended:!1},{id:`onnx-community/Qwen3-0.6B-ONNX`,name:`Qwen 3 0.6B (ONNX)`,description:`Fast, compact, tool-calling supported 0.6B model`,contextLength:32768,supportsTools:!0,recommended:!1},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,description:`Google Gemma 3 1B GQA — chat only (template has no tool support)`,contextLength:32e3,supportsTools:!1,recommended:!1}],c=`onnx-community/gemma-4-E2B-it-ONNX`,l=[{id:`mozilla-ai/gemma-4-E2B-it-Q5_K_M.llamafile`,name:`Gemma 4 E2B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E2B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E2B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E2B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/gemma-4-E4B-it-Q5_K_M.llamafile`,name:`Gemma 4 E4B Q5_K_M (Llamafile)`,description:`Google Gemma 4 E4B instruction-tuned Llamafile (Q5_K_M)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/gemma-4-E4B-it-Q5_K_M.llamafile`,fileName:`gemma-4-E4B-it-Q5_K_M.llamafile`,contextLength:128e3,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-0.8B-Q8_0.llamafile`,name:`Qwen 3.5 0.8B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 0.8B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-0.8B-Q8_0.llamafile`,fileName:`Qwen3.5-0.8B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-2B-Q8_0.llamafile`,name:`Qwen 3.5 2B Q8_0 (Llamafile)`,description:`Alibaba Qwen 3.5 2B Llamafile (Q8_0)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-2B-Q8_0.llamafile`,fileName:`Qwen3.5-2B-Q8_0.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-4B-Q5_K_S.llamafile`,name:`Qwen 3.5 4B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 4B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-4B-Q5_K_S.llamafile`,fileName:`Qwen3.5-4B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0},{id:`mozilla-ai/Qwen3.5-9B-Q5_K_S.llamafile`,name:`Qwen 3.5 9B Q5_K_S (Llamafile)`,description:`Alibaba Qwen 3.5 9B Llamafile (Q5_K_S)`,url:`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/Qwen3.5-9B-Q5_K_S.llamafile`,fileName:`Qwen3.5-9B-Q5_K_S.llamafile`,contextLength:32768,supportsTools:!0}];function u(e){if(!e)return;let t=s.find(t=>t.id===e||t.id.toLowerCase()===e.toLowerCase());if(t)return t.supportsTools;let n=l.find(t=>t.id===e||t.fileName===e||t.id.toLowerCase()===e.toLowerCase()||t.fileName.toLowerCase()===e.toLowerCase());if(n)return n.supportsTools}function d(e){return e?t.resolve(e):t.resolve(n.cwd(),`assets/cache/transformers.js`)}function f(e){return e?t.resolve(e,`llamafile`):t.resolve(n.cwd(),`assets/cache/llamafile`)}function p(e){return!e||typeof e!=`string`?!1:e.endsWith(`.llamafile`)||e.includes(`llamafile`)||l.some(n=>n.id===e||n.fileName===e||n.url===e||n.fileName===t.basename(e))}function m(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=f(i);if(!e.existsSync(o))return!1;let s=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),c=s?s.fileName:t.basename(r),u=c.endsWith(`.llamafile`)?c:`${c}.llamafile`,d=t.join(o,u),p=t.join(o,`${u}.part`);try{if(e.existsSync(p))return!1;if(e.existsSync(d))return e.statSync(d).size>0}catch{}return!1}function h(e){return e?t.resolve(e,`agentfile`):t.resolve(n.cwd(),`assets/cache/agentfile`)}function g(e){return!e||typeof e!=`string`?!1:e.endsWith(`.agentfile`)||e.includes(`agentfile`)}function _(r,i){if(e.existsSync(r))try{if(e.statSync(r).size>0)return!0}catch{}let a=t.resolve(n.cwd(),r);if(e.existsSync(a))try{if(e.statSync(a).size>0)return!0}catch{}let o=[h(i),f(i)],s=t.basename(r),c=s.endsWith(`.agentfile`)?s:`${s}.agentfile`;for(let n of o){if(!e.existsSync(n))continue;let r=t.join(n,c),i=t.join(n,`${c}.part`);try{if(e.existsSync(i))return!1;if(e.existsSync(r)&&e.statSync(r).size>0)return!0}catch{}}return!1}function v(n){let r=!1,i=!1;function a(n){let o;try{o=e.readdirSync(n,{withFileTypes:!0})}catch{return}for(let e of o)if(e.isDirectory())a(t.join(n,e.name));else if(e.isFile()){let t=e.name;(t.endsWith(`.part`)||t.includes(`.tmp`))&&(r=!0),t.endsWith(`.onnx`)&&!t.endsWith(`.part`)&&!t.includes(`.tmp`)&&(i=!0)}}return a(n),{hasPartFiles:r,hasOnnxFiles:i}}function y(n,r){if(g(n))return _(n,r);if(p(n))return m(n,r);let i=d(r);if(!e.existsSync(i))return!1;let a=[t.join(i,n),t.join(i,`models--${n.replace(/\//g,`--`)}`),t.join(i,n.split(`/`)[1]||n)];for(let t of a)try{if(e.existsSync(t)){let{hasPartFiles:e,hasOnnxFiles:n}=v(t);if(!e&&n)return!0}}catch{}return!1}function b(e){return s.map(t=>({...t,cached:y(t.id,e)}))}function x(e){return l.map(t=>({...t,cached:m(t.fileName,e)}))}async function S(e={}){let t=e.limit??100,n=e.endpoint||`https://huggingface.co/api/models?author=onnx-community&pipeline_tag=text-generation&limit=${t}`;try{let t=await fetch(n,{headers:{"User-Agent":`ShadowClaw-CLI`},signal:AbortSignal.timeout(e.timeoutMs||8e3)});if(!t.ok)return[];let r=await t.json();if(!Array.isArray(r))return[];let i=r.map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e&&e.toLowerCase().includes(`onnx`));if(e.query){let t=e.query.toLowerCase();i=i.filter(e=>e.toLowerCase().includes(t))}let a=i.sort().map(t=>({id:t,name:t.replace(/^onnx-community\//,``),cached:y(t,e.cacheDir)}));if(e.page!==void 0||e.pageSize!==void 0){let t=Math.max(1,e.page??1),n=Math.max(1,e.pageSize??25),r=(t-1)*n;a=a.slice(r,r+n)}return a}catch{return[]}}async function C(r,i={}){let{cacheDir:a,verbose:s=!1,isTTY:c,stream:u=n.stderr,progress:d,noProgress:p,quiet:m=!1,abortSignal:_}=i,v=l.find(e=>e.id===r||e.fileName===r||e.fileName===t.basename(r)||e.url===r),y=g(r),b,x;v?(b=v.url,x=v.fileName):r.startsWith(`http://`)||r.startsWith(`https://`)?(b=r,x=t.basename(new URL(r).pathname)):y?(x=t.basename(r).endsWith(`.agentfile`)?t.basename(r):`${t.basename(r)}.agentfile`,b=`https://huggingface.co/mozilla-ai/agentfile/resolve/main/${x}`):(x=t.basename(r).endsWith(`.llamafile`)?t.basename(r):`${t.basename(r)}.llamafile`,b=`https://huggingface.co/mozilla-ai/llamafile_0.10/resolve/main/${x}`);let S=y?h(a):f(a);e.mkdirSync(S,{recursive:!0});let C=t.join(S,x),w=t.join(S,`${x}.part`);if(e.existsSync(C))try{if(e.statSync(C).size>0)return{success:!0,modelId:r,path:C}}catch{}let T=0;if(e.existsSync(w))try{let t=e.statSync(w);t.size>0&&(T=t.size)}catch{T=0}let E=o({modelId:x,stream:u,isTTY:c,enabled:!m&&d!==!1&&!p}),D;try{s&&u?.write&&u.write(`[Llamafile] Downloading ${b}...\n`);let t={"User-Agent":`ShadowClaw-CLI`,"Accept-Encoding":`identity`};T>0&&(t.Range=`bytes=${T}-`);let n=i.fetch||globalThis.fetch,a=await n(b,{headers:t,redirect:`follow`,signal:_});if(a.status===416&&T>0){try{e.existsSync(w)&&e.unlinkSync(w)}catch{}T=0,delete t.Range,a=await n(b,{headers:t,redirect:`follow`,signal:_})}if(!a.ok&&a.status!==206)throw Error(`Failed to download ${b}: HTTP ${a.status} ${a.statusText}`);let o=a.status===206,c=0,l=0;if(o){let t=(a.headers?.get?.(`content-range`))?.match(/\/\s*(\d+)\s*$/),n=parseInt(a.headers?.get?.(`content-length`)||`0`,10);c=t?parseInt(t[1],10):T+n,l=T,D=e.createWriteStream(w,{flags:`a`})}else T=0,c=parseInt(a.headers?.get?.(`content-length`)||`0`,10),l=0,D=e.createWriteStream(w,{flags:`w`});if(l>0&&E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0}),a.body){let{Readable:e}=await import(`node:stream`),t;if(typeof e.fromWeb==`function`&&typeof a.body.getReader==`function`)t=e.fromWeb(a.body);else if(typeof a.body[Symbol.asyncIterator]==`function`)t=a.body;else{let e=Buffer.from(await a.arrayBuffer());D.write(e),l+=e.length}if(t)for await(let e of t){let t=Buffer.isBuffer(e)?e:Buffer.from(e);D.write(t),l+=t.length,E.update({status:`progress`,file:x,loaded:l,total:c,progress:c>0?l/c*100:void 0})}}if(D){let e=D;e.end(),await new Promise((t,n)=>{e.on(`finish`,t),e.on(`error`,n)})}e.renameSync(w,C);try{e.chmodSync(C,493)}catch{}return E.finish(),{success:!0,modelId:r,path:C}}catch(e){try{D?.end()}catch{}let t=e instanceof Error?e.message:String(e);return E.fail(`✖ Error downloading ${x}: ${t}`),{success:!1,modelId:r,error:t}}}async function w(e,t={}){if(p(e)||g(e))return C(e,t);let{verbose:r=!1,isTTY:i,stream:a=n.stderr,service:s,progress:c,noProgress:l,quiet:u=!1}=t,d=s;if(!d){let{getAgentCore:e}=await import(`./chunk-Dl_vv0dI.js`),t=await e();if(typeof t.createTransformersRuntimeService!=`function`)throw Error(`createTransformersRuntimeService is not available in agent core`);d=t.createTransformersRuntimeService()}let f=o({modelId:e,stream:a,isTTY:i,enabled:!u&&c!==!1&&!l});try{return r&&a?.write&&a.write(`[Transformers.js] Prewarming model ${e}...\n`),await d.prewarmModel({modelId:e,verbose:r,cacheDir:t.cacheDir,onProgress:e=>{f.update(e)}}),f.finish(),{success:!0,modelId:e}}catch(t){let n=t instanceof Error?t.message:String(t);return f.fail(`✖ Error downloading ${e}: ${n}`),{success:!1,modelId:e,error:n}}}async function T(a={}){let o=t.resolve(a.contentRoot||n.cwd()),s=t.resolve(a.workspaceDir||o),l=a.cacheDir,u=a.onExit||(e=>n.exit(e)),d=a.stdin||n.stdin,f=a.stdout||n.stderr,h=!1,v=null;if(d===n.stdin&&!n.stdin.isTTY&&!n.env.CI&&(n.stderr.isTTY||n.stdout.isTTY))try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;v=e.openSync(t,`r`),d=new i.ReadStream(v),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{try{let t=n.platform===`win32`?`CONIN$`:`/dev/tty`;d=e.createReadStream(t),f=n.stderr.isTTY?n.stderr:n.stdout,h=!0}catch{}}let b=r.createInterface({input:d,output:f}),x=!1,T=()=>{if(!x){x=!0,f.write(`
3
3
  Operation cancelled.
4
4
  `);try{b.close()}catch{}u(130)}};b.on(`SIGINT`,T),d&&typeof d.on==`function`&&d!==n.stdin&&d.on(`SIGINT`,T);let E=()=>T();n.on(`SIGINT`,E);let D=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&T()};d&&typeof d.on==`function`&&d.on(`data`,D);try{let r=`transformers_js_local`,i=c,u=/* @__PURE__ */ new Map;for(;!x;){f.write(`
5
5
  ShadowClaw CLI Agent — Model Selection:
@@ -1,4 +1,4 @@
1
- import{t as e}from"./chunk-Cnjb8Usu.js";var t=class e{#e;#t;constructor(e,t){this.#e=e,this.#t=t}static#n=`You are a helpful and accurate translator. Your goal is to translate the given text from the source language to the target language. Preserve the meaning, tone, and any formatting as much as possible. Do not include any explanations or extra text in your response, only the translated text itself. If you are unsure of the translation, provide the most likely one.`;static#r=[{role:`user`,content:`SOURCE: en
1
+ import{t as e}from"./chunk-CTarF4FC.js";var t=class e{#e;#t;constructor(e,t){this.#e=e,this.#t=t}static#n=`You are a helpful and accurate translator. Your goal is to translate the given text from the source language to the target language. Preserve the meaning, tone, and any formatting as much as possible. Do not include any explanations or extra text in your response, only the translated text itself. If you are unsure of the translation, provide the most likely one.`;static#r=[{role:`user`,content:`SOURCE: en
2
2
  TARGET: de
3
3
  TEXT: Good morning, how are you?`},{role:`assistant`,content:`Guten Morgen, wie geht es Ihnen?`},{role:`user`,content:`SOURCE: de
4
4
  TARGET: en
@@ -1 +1 @@
1
- import"./chunk-mjuZTMQB.js";import"./chunk-BU-vs0np.js";import"./chunk-DPoeMCv9.js";import"./chunk-1VdYkt-J.js";export{t as sqlite3Command}from"./chunk-BUNoeMKY.js";
1
+ import"./chunk-mjuZTMQB.js";import"./chunk-BU-vs0np.js";import"./chunk-DPoeMCv9.js";import"./chunk-1VdYkt-J.js";export{t as sqlite3Command}from"./chunk-Cjyu4cr_.js";
@@ -1,4 +1,4 @@
1
- import{i as e}from"./chunk-BVLsV89M.js";import{t}from"./chunk-BQhU06JO.js";import{t as n}from"./chunk-Bc_weULz.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-Byi0_1tu.js";import{n as o,r as s,t as c}from"./chunk-vVEl6p-f.js";import{t as l}from"./chunk-Ds5-K-9o.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-BVLsV89M.js";import{t}from"./chunk-BQhU06JO.js";import{t as n}from"./chunk-ZxDxSSn-.js";import{n as r,t as i}from"./chunk-glBuRjUn.js";import{t as a}from"./chunk-Byi0_1tu.js";import{n as o,r as s,t as c}from"./chunk-vVEl6p-f.js";import{t as l}from"./chunk-Cppnq1KF.js";import u,{existsSync as d}from"node:fs";import f from"node:path";import p from"node:process";import{spawn as m}from"node:child_process";import{access as h,constants as g,cp as _,mkdir as v,mkdtemp as y,readFile as b,readdir as x,rm as S,stat as C,writeFile as w}from"node:fs/promises";import{tmpdir as T}from"node:os";import E from"node:readline/promises";import D from"node:tty";function O(){let e=p.emitWarning;if(!e||e.__suppressed)return;let t=function(t,...n){if((typeof t!=`string`||n[0]!==`ExperimentalWarning`&&!t.includes(`ExperimentalWarning`)&&!t.includes(`SQLite`))&&!(t&&typeof t==`object`&&(t.name===`ExperimentalWarning`||typeof t.message==`string`&&t.message.includes(`SQLite`))))return e.call(p,t,...n)};t.__suppressed=!0,p.emitWarning=t}O();const k=[`shadow-claw.config.json`,`shadow-claw-config.json`,`shadowclaw.config.json`,`site-config.json`];async function A(e){try{return await h(e,g.F_OK),!0}catch{return!1}}async function j(e,t){let n=[];if(e&&n.push(f.resolve(e)),t){let e=f.resolve(t);n.includes(e)||n.push(e)}if(e&&f.basename(f.resolve(e))===`.cache`){let t=f.dirname(f.resolve(e));n.includes(t)||n.push(t)}for(let e of n)for(let t of k){let n=f.join(e,t);if(await A(n))try{let e=await b(n,`utf8`),t=JSON.parse(e);if(t&&typeof t==`object`)return{configPath:n,config:t}}catch{}}return null}function M(){return f.join(T(),`shadow-claw`)}function N(e){let t=f.resolve(e||p.cwd()),n=[f.join(t,`shadow-claw-config.json`),f.join(t,`shadow-claw.config.json`),f.join(t,`shadowclaw.config.json`),f.join(t,`pages`,`shadow-claw-config.json`),f.join(t,`pages`,`shadow-claw.config.json`),f.join(t,`site-config.json`),f.join(t,`pages`,`site-config.json`)];for(let e of n)if(u.existsSync(e))try{let n=u.readFileSync(e,`utf8`),r=JSON.parse(n);if(r&&typeof r.cacheDir==`string`&&r.cacheDir.trim())return f.resolve(t,r.cacheDir.trim());if(r&&r.server&&typeof r.server.cacheDir==`string`&&r.server.cacheDir.trim())return f.resolve(t,r.server.cacheDir.trim())}catch{}return null}function P(e,t=`.cache`){let n=f.resolve(e||p.cwd()),r=f.join(n,t),i=f.join(r,`database`),a=[r,f.join(r,`control-token.json`),f.join(r,`cli-peer-id`),i,f.join(i,`clients.db`),f.join(i,`agent.db`),f.join(i,`scheduled-tasks.db`),f.join(i,`push-subscriptions.db`),f.join(n,`database`,`clients.db`),f.join(n,`database`,`agent.db`)];for(let e of a)if(u.existsSync(e))return!0;return!1}async function F({contentRoot:e,stdin:t=p.stdin,stdout:n=p.stdout,onExit:r=e=>p.exit(e)}={}){let i=f.resolve(e||p.cwd()),a=f.join(i,`.cache`),o=M(),s=t,c=n,l=!1,d=null;if(t===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;d=u.openSync(e,`r`),s=new D.ReadStream(d),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=u.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let m=E.createInterface({input:s,output:c}),h=!1,g=()=>{if(!h){h=!0,c.write(`
2
2
  Operation cancelled.
3
3
  `);try{m.close()}catch{}r(130)}};m.on(`SIGINT`,g),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,g);let _=()=>g();p.on(`SIGINT`,_);let v=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&g()};s&&typeof s.on==`function`&&s.on(`data`,v);try{c.write(`
4
4
  ShadowClaw needs a directory to store cache and database files:
@@ -11,19 +11,19 @@ ShadowClaw needs a directory to store cache and database files:
11
11
  `),n.write(`Tip: You can pass --tmp, --cache-dir <dir>, set SHADOWCLAW_TMP=1, SHADOWCLAW_CACHE_DIR=<dir>, or configure "cacheDir" in shadow-claw.config.json to skip this prompt.
12
12
 
13
13
  `);let e=(await m.question(`Enter choice [1-3] or a directory path (default: 1): `)).trim();if(!e||e===`1`||e.toLowerCase()===`y`||e.toLowerCase()===`yes`)return n.write(`Using current directory cache: ${a}\n\n`),a;if(e===`2`||e.toLowerCase()===`tmp`||e.toLowerCase()===`temp`||e.toLowerCase()===`t`)return n.write(`Using temporary directory: ${o}\n\n`),o;if(e.toLowerCase()===`n`||e.toLowerCase()===`no`){let e=(await m.question(`Use temporary directory (${o}) instead? (Y/n): `)).trim();return e.toLowerCase()===`n`||e.toLowerCase()===`no`?(n.write(`Operation cancelled.
14
- `),r(0),o):(n.write(`Using temporary directory: ${o}\n\n`),o)}if(e===`3`||e.toLowerCase()===`c`||e.toLowerCase()===`custom`){let e=(await m.question(`Enter custom directory path: `)).trim();if(!e)return n.write(`Using current directory cache: ${a}\n\n`),a;let t=f.resolve(i,e);return n.write(`Using custom directory: ${t}\n\n`),t}let t=f.resolve(i,e);return c.write(`Using directory: ${t}\n\n`),t}finally{p.removeListener(`SIGINT`,_),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,g),s.removeListener(`data`,v));try{m.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(d!=null)try{u.closeSync(d)}catch{}}}}async function I(e={}){let t=f.resolve(e.contentRoot||p.cwd());if(e.tmp||e.temp||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_TMP||p.env.SHADOWCLAW_TEMP||``).toLowerCase().trim())){let n=M();return{cacheDir:n,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(n,`database`)}}let n=(e.cacheDir||p.env.SHADOWCLAW_CACHE_DIR||``).trim();if(n){let r=f.resolve(t,n);return{cacheDir:r,databaseDir:e.databaseDir?f.resolve(t,e.databaseDir):f.join(r,`database`)}}let r=(e.databaseDir||p.env.SHADOWCLAW_DATABASE_DIR||``).trim();if(r){let e=f.resolve(t,r);return{cacheDir:f.basename(e)===`database`?f.dirname(e):f.resolve(e,`..`),databaseDir:e}}let i=N(t);if(i)return{cacheDir:i,databaseDir:f.join(i,`database`)};let a=P(t),o=f.join(t,`.cache`),s=f.join(o,`database`);if(a||e.yes||e.y||[`1`,`true`,`yes`].includes((p.env.SHADOWCLAW_YES||``).toLowerCase().trim()))return{cacheDir:o,databaseDir:s};let c=e.stdin?!!e.stdin.isTTY:!!p.stdin.isTTY,l=!e.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),u=e.isTTY===void 0?c||l:!!e.isTTY,d=e.isCI===void 0?e.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!e.isCI;if(!u||d||e.quiet)return{cacheDir:o,databaseDir:s};let m=await F({contentRoot:t,stdin:e.stdin,stdout:e.stdout,onExit:e.onExit});return{cacheDir:m,databaseDir:f.join(m,`database`)}}function L(e,t,n){if(!n||typeof e?.executeNativeAiTask!=`function`)return;let{id:r,groupId:i,taskType:a,input:o}=n;return e.executeNativeAiTask({taskType:a,input:o,groupId:i,db:t}).then(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].resolve(e),delete t[r])}).catch(e=>{let t=globalThis.pendingNativeAiResolvers;t&&t[r]&&(t[r].reject(e),delete t[r])})}async function R(e={}){let t=e.core||await n();t.setHeadlessMode(!0);let r,i;if(e.workspace)r=f.resolve(e.workspace),i=e.databaseDir?f.resolve(e.databaseDir):e.cacheDir?f.resolve(e.cacheDir,`database`):f.resolve(r,`database`);else{let t=await I({contentRoot:p.cwd(),cacheDir:e.cacheDir,databaseDir:e.databaseDir,tmp:e.tmp||e.temp,yes:e.yes||e.y,quiet:e.quiet,isTTY:e.isTTY,stdin:e.stdin,stdout:e.stdout}),n=f.join(T(),`shadow-claw`);await v(n,{recursive:!0}),r=await y(f.join(n,`workspace-`)),i=t.databaseDir}await v(r,{recursive:!0}),await v(i,{recursive:!0});let a=f.join(i,`agent.db`),o=t.openSqliteDatabase(a);t.setDB(o),t.setStorageRootFromPath(r);let s=(await j(r))?.config||{},c=s.settings||{},l=e.internetAccess??e.allowInternet??c.internetAccess??c.vm_bash_full_internet_access??c.fullInternetAccess??s.internetAccess;if(l!==void 0&&typeof t.setConfig==`function`){let e=t.CONFIG_KEYS?.VM_BASH_FULL_INTERNET_ACCESS||`vm_bash_full_internet_access`;await t.setConfig(o,e,l?`true`:`false`)}let u={response:t=>{!e.quiet&&t.payload?.text&&console.log(t.payload.text)},error:t=>{!e.quiet&&t.payload?.error&&console.error(`Error: ${t.payload.error}`)},"tool-activity":t=>{!e.quiet&&e.verbose&&t.payload&&console.log(`[Tool] ${t.payload.tool} (${t.payload.status||`executing`})`)},"thinking-log":t=>{if(!e.quiet&&e.verbose&&t.payload){let e=t.payload.label||t.payload.level||`Log`;console.log(`[${e}] ${t.payload.message||``}`)}},"request-native-ai-task":e=>{L(t,o,e.payload)}};return t.setPostHandler(e=>{u[e.type]?.(e)}),{db:o,workspaceDir:r,dbPath:a,core:t}}function z(e={}){let{force:t=!1,stdin:n=p.stdin,timeoutMs:r}=e,i=n;return!t&&i?.isTTY?Promise.resolve(null):new Promise((e,t)=>{let n=[],a=!1,o;r!=null&&r>0&&(o=setTimeout(()=>{a=!0,typeof i?.destroy==`function`&&i.destroy(),e(null)},r)),typeof i?.setEncoding==`function`&&i.setEncoding(`utf8`),i.on(`data`,e=>{a||n.push(typeof e==`string`?e:e.toString(`utf8`))}),i.on(`end`,()=>{if(o&&clearTimeout(o),a)return;let t=n.join(``).trim();e(t.length>0?t:null)}),i.on(`error`,e=>{o&&clearTimeout(o),!a&&t(e)})})}function B(e,t){let n=t&&typeof t==`object`?Object.keys(t.properties||{}):[];for(let t of[`text`,`prompt`,`content`,`input`])if(n.includes(t))return{[t]:e};return{input:e}}function V(e){return(Array.isArray(e)?e:e?[e]:[]).map(e=>String(e)).filter(Boolean)}async function ee(t){let n=[];for(let r of t){let t=f.resolve(r),i;try{i=await b(t)}catch(e){throw Error(`Error: Failed to read attachment file "${r}": ${e.message}`)}let a=f.basename(t),o=e(a,``);n.push({fileName:a,mimeType:o,size:i.length,source:{kind:`local-file`,file:new Blob([new Uint8Array(i)],{type:o})}})}return n}async function H(e){try{let t=f.join(f.resolve(e),`skills-lock.json`),n=await b(t,`utf8`);return JSON.parse(n)}catch{return null}}async function 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-C9o6lXP3.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-C9o6lXP3.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-C9o6lXP3.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-B7Kn-otm.js`),r=await n({workspaceDir:t,contentRoot:p.cwd(),cacheDir:e.cacheDir,stdin:e.stdin,stdout:e.stdout,quiet:e.quiet,isTTY:u});o=r.providerId,s=r.model}if(o||=`transformers_js_local`,!s){let{DEFAULT_LOCAL_MODEL:e}=await import(`./chunk-B7Kn-otm.js`);s=o===`transformers_js_local`?e:`openrouter/free`}if(!await j(t)){let e=f.join(t,`shadow-claw.config.json`);await w(e,JSON.stringify({$schema:`https://json-schema.org/draft/2020-12/schema`,site:{title:`ShadowClaw Agent Workspace`,description:`Headless CLI agent workspace`},settings:{defaultProvider:`openrouter`,defaultModel:`openrouter/free`},agent:{defaultProvider:o,defaultModel:s}},null,2)+`
16
+ `,`utf8`)}if(e.download&&(o===`transformers_js_local`||o===`llamafile`)){let{downloadLocalModel:t}=await import(`./chunk-B7Kn-otm.js`);await t(s,{cacheDir:e.cacheDir,verbose:e.verbose,isTTY:e.isTTY})}return await R({workspace:t,quiet:!0}),await r(t),{success:!0,workspace:t}}async function Q(e={}){let t=e.workspace||p.cwd(),{db:n,workspaceDir:i,core:a}=await R({...e,workspace:t}),o=e.group||a.DEFAULT_SERVER_GROUP_ID||Z;await r(i);let s=await a.discoverSkills(n,o),c=await H(i);return{skills:s.skills.map(e=>{let t=c?.skills?.[e.name];return t?{...e,lockSource:t.source,lockSourceType:t.sourceType,lockHash:t.computedHash}:e}),diagnostics:s.diagnostics,...c?{lockfile:c}:{}}}async function ie(e=`list`,t=[],n={}){let r=n.workspace||p.cwd(),a=(e||`list`).trim().toLowerCase();if(a===`list`||a===`ls`){let e=await Q({...n,workspace:r});if(!n.quiet){if(e.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${e.skills.length}):\n`);for(let t of e.skills){let e=t.lockSource?` [source: ${t.lockSource}]`:``;console.log(` - ${t.name}${e}: ${t.description||`No description`}`)}}}return{success:!0,...e}}let{workspaceDir:o}=await R({...n,workspace:r,quiet:!0});if(a===`add`||a===`install`||a===`i`||a===`a`){let e=t[0];if(!e){let e=`Error: Package or skill source required. Usage: shadow-claw agent skills add <package-or-url>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.slice(1);if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)){let t=[`add`,e,`-a`,`universal`];if((n.yes!==!1||n.quiet||!p.stdin.isTTY)&&!r.includes(`-y`)&&!r.includes(`--yes`)&&t.push(`-y`),n.skills){let e=Array.isArray(n.skills)?n.skills:String(n.skills).split(`,`).map(e=>e.trim()).filter(Boolean);e.length>0&&t.push(`--skill`,...e)}t.push(...r);let i=await W(t,{workspaceDir:o,execFn:n.npxSkillsExecFn});if(i.success)return!n.quiet&&i.stdout.trim()&&console.log(i.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,skills:(await Q({...n,workspace:o,quiet:!0})).skills,stdout:i.stdout}}let i=await $(e,{...n,workspace:o,useNpxSkills:!1}),a=await Q({...n,workspace:o,quiet:!0});return{success:i.success,delegatedToNpxSkills:!1,fallbackUsed:!0,skills:a.skills,importResult:i,...i.error?{error:i.error}:{}}}if(a===`remove`||a===`rm`||a===`r`||a===`uninstall`){let e=t.filter(e=>!e.startsWith(`-`));if(e.length===0){let e=`Error: Skill name(s) required. Usage: shadow-claw agent skills remove <name...>`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}n.useNpxSkills!==!1&&await W([`remove`,...e,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let r=[];for(let t of e){let e=[f.join(o,`.agents`,`skills`,t),f.join(o,`.agents`,`skills`,`main`,t)],n=!1;for(let t of e)try{(await C(t)).isDirectory()&&(await S(t,{recursive:!0,force:!0}),n=!0)}catch{}let i=await te(o,t);(n||i)&&r.push(t)}return n.quiet||(r.length>0?console.log(`Removed skill(s): ${r.join(`, `)}`):console.log(`No matching skills found to remove.`)),{success:!0,removed:r}}if(a===`init`){let e=t[0]||`my-skill`;if(n.useNpxSkills===!0&&n.npxSkillsExecFn&&(await W([`init`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn})).success)return{success:!0,name:e,delegatedToNpxSkills:!0};try{let t=await ne(o,e,{description:n.description,flat:n.flat!==!1});return n.quiet||console.log(`Initialized skill "${t.name}" at ${t.path}`),{success:!0,...t}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error: ${t}`),p.exitCode=1,{success:!1,error:t}}}if(a===`sync`){n.useNpxSkills!==!1&&n.npxSkillsExecFn&&await W([`experimental_sync`,`-y`],{workspaceDir:o,execFn:n.npxSkillsExecFn});let e=await i(o,{overwrite:!!n.overwrite});return n.quiet||console.log(`Synced skills (migrated: ${e.migratedSkills.length}).`),{success:!0,...e,syncedToFlat:e.migratedSkills,syncedToMain:[]}}if(a===`find`||a===`search`||a===`f`||a===`s`){let e=t.join(` `).trim()||n.query||``;if(n.useNpxSkills!==!1&&(n.npxSkillsExecFn||!n.fetchFn)&&e){let t=await W([`find`,e],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(t.success)return!n.quiet&&t.stdout.trim()&&console.log(t.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:t.stdout,results:[]}}let r=n.fetchFn||globalThis.fetch;try{let t=await r(`https://skills.sh/api/search?q=${encodeURIComponent(e)}&limit=10`);if(!t.ok)throw Error(`HTTP ${t.status}`);let i=((await t.json()).skills||[]).map(e=>({name:e.name,package:`${e.source||e.id}@${e.name}`,source:e.source||e.id,installs:e.installs||0}));if(!n.quiet){if(i.length===0)console.log(`No skills found for "${e}".`);else{console.log(`Found ${i.length} skill(s):\n`);for(let e of i)console.log(` - ${e.package} (${e.installs} installs)`)}}return{success:!0,delegatedToNpxSkills:!1,results:i}}catch(e){let t=e instanceof Error?e.message:String(e);return n.quiet||console.error(`Error searching skills: ${t}`),{success:!1,error:t,results:[]}}}if(a===`update`||a===`up`||a===`check`||a===`restore`||a===`experimental_install`){let e=a===`restore`?`experimental_install`:a===`up`?`update`:a,r=await W([e,...t],{workspaceDir:o,execFn:n.npxSkillsExecFn});if(r.success)return!n.quiet&&r.stdout.trim()&&console.log(r.stdout.trim()),{success:!0,delegatedToNpxSkills:!0,stdout:r.stdout};if(a===`restore`||a===`experimental_install`){let e=await H(o);if(e&&Object.keys(e.skills).length>0){let t=0;for(let[r,i]of Object.entries(e.skills)){let e=i,a=e?.sourceType===`github`?`${e.source}@${r}`:e?.sourceUrl||e?.source;if(!a)continue;let s=await $(a,{...n,workspace:o,useNpxSkills:!1,quiet:!0});s.success&&(t+=s.importedCount||0)}return{success:!0,delegatedToNpxSkills:!1,fallbackUsed:!0,importedCount:t}}}return{success:!1,error:r.error||`Failed to run npx skills ${e}`}}let s=`Unknown skills subcommand "${e}". Available: list, add, remove, find, init, sync, update, check, restore`;return n.quiet||console.error(s),p.exitCode=1,{success:!1,error:s}}async function ae(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,i=null;if(e.toolsProfile||e.profile){let r=String(e.toolsProfile||e.profile).trim().toLowerCase(),a=n.DEFAULT_BUILTIN_PROFILE||null,o=[];if(typeof n.getConfig==`function`)try{let e=await n.getConfig(t,n.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof e==`string`?o=JSON.parse(e):Array.isArray(e)&&(o=e)}catch{}let s=[a,...o].filter(Boolean).find(e=>e.id&&String(e.id).toLowerCase()===r||e.name&&String(e.name).toLowerCase()===r);s&&(i=new Set(s.enabledToolNames||[]))}let a=[...n.TOOL_DEFINITIONS||[]];if(typeof n.loadDeclarativeTools==`function`)try{let e=await n.loadDeclarativeTools(t,r);if(e&&Array.isArray(e.tools))for(let t of e.tools)a.some(e=>e.name===t.name)||a.push(t)}catch{}return{tools:a.map(e=>({name:e.name,description:e.description,headlessSafe:!X.has(e.name),...i?{enabled:i.has(e.name)}:{}}))}}async function oe(e,t,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),o=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,s=(a.TOOL_DEFINITIONS||[]).find(t=>t.name===e);if(!s&&typeof a.loadDeclarativeTools==`function`)try{s=(await a.loadDeclarativeTools(r,o)).tools.find(t=>t.name===e)}catch{}if(!s){let t=`Error: Tool "${e}" not found.`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}let c=!X.has(s.name),l=t??n.input;if(l===`-`&&(l=void 0),l==null&&n._stdinData!=null){let e=n._stdinData,t;try{t=JSON.parse(e)}catch{t=B(e,s.input_schema)}l=t}if(l!=null){let t={};if(typeof l==`string`)try{t=JSON.parse(l)}catch(e){let t=`Error: Failed to parse input JSON: ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}else typeof l==`object`&&(t=l);let u;try{let e=await le(r,a,i,{...n,interactive:!1});u={db:r,provider:e.providerId,model:e.model,apiKey:e.apiKey}}catch{}try{let i=await a.executeTool(r,e,t,o,{invokeContext:u}),l=typeof i==`string`?i:JSON.stringify(i,null,2);return n.output?(await w(f.resolve(n.output),l,`utf8`),n.quiet||p.stderr.write(`Output written to ${n.output}\n`)):n.quiet||p.stdout.write(l+`
17
17
  `),{success:!0,tool:s,headlessSafe:c,output:i}}catch(t){let r=t instanceof Error?t.message:String(t);return n.quiet||console.error(`Error executing tool "${e}": ${r}`),p.exitCode=1,{success:!1,error:r}}}if(!n.quiet){let e=c?`[headless-safe]`:`[browser-only]`;console.log(`Tool: ${s.name} ${e}\n`),console.log(`Description:\n ${s.description}\n`),s.input_schema&&(console.log(`Parameters (JSON Schema):`),console.log(JSON.stringify(s.input_schema,null,2)),console.log()),console.log(`Usage:`),console.log(` Direct CLI: npx shadow-claw agent tool ${s.name} '<json-input>'`),console.log(` Pipe input: echo '<text>' | npx shadow-claw agent tool ${s.name}`),console.log(` Agent Prompt: npx shadow-claw agent run "<instruction>"
18
- `)}return{success:!0,tool:s,headlessSafe:c}}async function se(e={}){let{db:t,core:n}=await R(e),r=e.group||n.DEFAULT_SERVER_GROUP_ID||Z,{clearGroupMessages:i}=await import(`./chunk-CAxYfMhR.js`);return await i(t,r),e.quiet||console.log(`Cleared conversation history for group "${r}".`),{success:!0,groupId:r}}async function ce(e,t={}){let{db:n,core:r}=await R(t),i=t.group||r.DEFAULT_SERVER_GROUP_ID||Z,a=await r.loadSkill(n,i,e);if(!a)throw Error(`Skill "${e}" not found in workspace.`);if(a.execution?.type===`tools`&&Array.isArray(a.execution.tools)){let e=a.execution.tools.map(e=>({name:e.name||e.tool,input:e.input||e.arguments||{},suppressOutput:e.suppressOutput})),t=await r.executeToolChain(n,i,e,{isManual:!0});return{success:!0,skill:a,results:t.results,rawOutputs:t.rawOutputs}}return{success:!0,skill:a,message:`Skill "${e}" loaded (no declarative tools defined).`}}async function le(e,t,n,r={}){let i=r.contentRoot??p.cwd(),a=await j(n,i),o=a?.config||{},s=o.settings||{},c=o.agent||s.agent||{},l=r.provider||p.env.SHADOW_CLAW_PROVIDER||p.env.SHADOW_CLAW_DEFAULT_PROVIDER;if(!l&&typeof t.getConfig==`function`&&(l=await t.getConfig(e,t.CONFIG_KEYS?.PROVIDER||`provider`)),!l&&r.model){let{isLlamafile:e,isAgentfile:t}=await import(`./chunk-C9o6lXP3.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-C9o6lXP3.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-C9o6lXP3.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-C9o6lXP3.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-B7Kn-otm.js`);t(r.model)?l=`agentfile`:e(r.model)?l=`llamafile`:/onnx/i.test(r.model)&&(l=`transformers_js_local`)}l||=c.defaultProvider||c.provider||s.defaultProvider||s.provider||o.defaultProvider;let u=r.stdin?!!r.stdin.isTTY:!!p.stdin.isTTY,d=!r.stdin&&!p.stdin.isTTY&&!!(p.stderr.isTTY||p.stdout.isTTY),f=r.isTTY===void 0?u||d:!!r.isTTY,m=r.isCI===void 0?r.isTTY===void 0&&!(!p.env.CI||[`0`,`false`].includes(p.env.CI.toLowerCase())):!!r.isCI,h=f&&!m&&!r.quiet&&r.interactive!==!1;if(!l){if(h){let{promptForAgentModel:e}=await import(`./chunk-B7Kn-otm.js`),t=await e({workspaceDir:n,contentRoot:i,cacheDir:r.cacheDir,stdin:r.stdin,stdout:r.stdout,quiet:r.quiet,isTTY:f,service:r._transformersService});l=t.providerId,r.model=t.model}else l=`openrouter`}let g=typeof t.getProvider==`function`?t.getProvider(l):null;if(!g){let e=`Error: Unknown provider "${l}".`;throw Error(e)}let _;if(r.apiKey!==void 0)_=r.apiKey;else{if(_=p.env.SHADOW_CLAW_API_KEY,!_)switch(l){case`openrouter`:_=p.env.OPENROUTER_API_KEY;break;case`huggingface`:_=p.env.HUGGINGFACE_API_KEY||p.env.HF_TOKEN;break;case`gemini_proxy`:_=p.env.GEMINI_API_KEY}!_&&typeof t.getConfig==`function`&&(_=await t.getConfig(e,`api_key:${l}`)||await t.getConfig(e,`apiKey`))}let v=r.model||p.env.SHADOW_CLAW_MODEL||p.env.SHADOW_CLAW_DEFAULT_MODEL||(typeof t.getConfig==`function`?await t.getConfig(e,t.CONFIG_KEYS?.MODEL||`model`):null)||c.defaultModel||c.model||s.defaultModel||s.model||o.defaultModel||g?.defaultModel||(l===`transformers_js_local`?(await import(`./chunk-B7Kn-otm.js`)).DEFAULT_LOCAL_MODEL:`default`);if(l===`transformers_js_local`||l===`llamafile`||l===`agentfile`){let{isModelLocallyCached:e,downloadLocalModel:t}=await import(`./chunk-B7Kn-otm.js`),i=r.cacheDir||c.cacheDir||o.cacheDir||s.cacheDir;if(!(e(v,i)||n&&e(v,n))){let e=r.stdout||p.stderr;if(r.download||r.yes||r.y)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else if(h){let n=await import(`node:readline/promises`),a=await import(`node:tty`),o=await import(`node:fs`),s=r.stdin||p.stdin,c=e,l=!1,u=null;if(s===p.stdin&&!p.stdin.isTTY&&!p.env.CI&&(p.stderr.isTTY||p.stdout.isTTY))try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;u=o.openSync(e,`r`),s=new a.ReadStream(u),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{try{let e=p.platform===`win32`?`CONIN$`:`/dev/tty`;s=o.createReadStream(e),c=p.stderr.isTTY?p.stderr:p.stdout,l=!0}catch{}}let d=n.createInterface({input:s,output:c}),m=!1,h=()=>{if(!m){m=!0,c.write(`
19
19
  Operation cancelled.
20
- `);try{d.close()}catch{}typeof r.onExit==`function`?r.onExit(130):p.exit(130)}};d.on(`SIGINT`,h),s&&typeof s.on==`function`&&s!==p.stdin&&s.on(`SIGINT`,h);let g=()=>h();p.on(`SIGINT`,g);let _=e=>{let t=typeof e==`string`?e:e.toString(`binary`);(t.includes(``)||t.includes(``))&&h()};s&&typeof s.on==`function`&&s.on(`data`,_);let y=``;try{y=(await d.question(`\nModel "${v}" is not yet downloaded to local disk.\nDownload model weights now? (Y/n) [default: Y]: `)).trim().toLowerCase()}finally{p.removeListener(`SIGINT`,g),s&&typeof s.removeListener==`function`&&(s!==p.stdin&&s.removeListener(`SIGINT`,h),s.removeListener(`data`,_));try{d.close()}catch{}if(l){if(s&&typeof s.destroy==`function`)try{s.destroy()}catch{}if(u!=null)try{o.closeSync(u)}catch{}}}if(y===``||y===`y`||y===`yes`)r.quiet||e.write(`\nDownloading ${v} from Hugging Face...\n`),await t(v,{cacheDir:i||r.cacheDir,stream:e,isTTY:f,service:r._transformersService,progress:!r.quiet&&r.progress!==!1&&!r.noProgress,quiet:r.quiet,verbose:r.verbose});else throw Error(`Model "${v}" is not downloaded. Download aborted.`)}else throw Error(`Model "${v}" is not downloaded. Run with --download or --yes to download model weights automatically.`)}}let y=r.baseUrl||r.providerBaseUrl||c?.baseUrl||s?.baseUrl||s?.providerBaseUrl;return y&&g&&(g={...g,baseUrl:y}),{providerId:l,providerConfig:g,apiKey:_||``,model:v,workspaceConfigData:a,workspaceConfig:o,workspaceSettings:s,workspaceAgent:c}}async function ue(e,t,n,r,i,a,o){let s=[...t.TOOL_DEFINITIONS||[]];if(typeof t.loadDeclarativeTools==`function`)try{let r=await t.loadDeclarativeTools(e,n);if(r&&Array.isArray(r.tools))for(let e of r.tools)s.some(t=>t.name===e.name)||s.push(e)}catch{}let c=s.filter(e=>!X.has(e.name)),l=c,u=null;async function d(){let n=t.DEFAULT_BUILTIN_PROFILE||null,a=[];if(typeof t.getConfig==`function`)try{let n=await t.getConfig(e,t.CONFIG_KEYS?.TOOL_PROFILES||`tool_profiles`);typeof n==`string`?a=JSON.parse(n):Array.isArray(n)&&(a=n)}catch{}let o=r?.toolProfiles||i?.toolProfiles||r?.profiles||[];return[n,...a,...o].filter(Boolean)}if(o.noTools===!0||o.tools===!1||o.tools===`none`||o.tools===``)return l=[],{enabledTools:l,profileSystemPromptOverride:u};if(o.tools!==void 0&&o.tools!==null)return l=(Array.isArray(o.tools)?o.tools:String(o.tools).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===String(e))).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u};if(o.toolsProfile){let e=await d(),t=String(o.toolsProfile).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(!n)throw Error(`Error: Tool profile "${o.toolsProfile}" not found.`);let r=new Set(n.enabledToolNames||[]);if(l=c.filter(e=>r.has(e.name)),n.customTools&&Array.isArray(n.customTools))for(let e of n.customTools)!X.has(e.name)&&!l.some(t=>t.name===e.name)&&l.push(e);return n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}let f=a?.tools??a?.enabledTools;if(f!=null)return f===!1||f===`none`||f===``?(l=[],{enabledTools:l,profileSystemPromptOverride:u}):(l=(Array.isArray(f)?f:String(f).split(`,`)).map(e=>String(e).trim()).filter(Boolean).map(e=>c.find(t=>t.name===e)).filter(Boolean),{enabledTools:l,profileSystemPromptOverride:u});let p=a?.toolsProfile||a?.defaultToolsProfile;if(p){let e=await d(),t=String(p).trim().toLowerCase(),n=e.find(e=>e.id&&String(e.id).toLowerCase()===t||e.name&&String(e.name).toLowerCase()===t);if(n){let e=new Set(n.enabledToolNames||[]);return l=c.filter(t=>e.has(t.name)),n.systemPromptOverride&&(u=n.systemPromptOverride),{enabledTools:l,profileSystemPromptOverride:u}}}return{enabledTools:l,profileSystemPromptOverride:u}}async function de(e,n={}){let{db:r,workspaceDir:i,core:a}=await R(n),u=n.group||a.DEFAULT_SERVER_GROUP_ID||Z,d=n._stdinData??null;if(e===`-`?e=d||``:d&&(e=e?`${e}\n\n${d}`:d),!e){let e=`Error: Prompt required. Provide a prompt argument or pipe text to stdin.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let m=[],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-C9o6lXP3.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-B7Kn-otm.js`);e(x)===!1&&p.stderr.write(`[Agent] Warning: Model "${x}" does not support tool calling; tools will be ignored. Use --tools none or choose a tool-capable model (e.g. onnx-community/gemma-4-E2B-it-ONNX).\n`)}if(h.length>0&&!n.quiet){let e=s(x);for(let t of h){let n=o(t.mimeType,t.fileName);n===`image`&&!e.images&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept image input; "${t.fileName}" will be passed as a reference only.\n`):n===`audio`&&!e.audio&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept audio input; "${t.fileName}" will be passed as a reference only.\n`):n===`video`&&!e.video&&!e.routerByFeatures?p.stderr.write(`[Agent] Warning: Model "${x}" does not accept video input; "${t.fileName}" will be passed as a reference only.\n`):n===`document`&&!e.documents&&!e.routerByFeatures&&p.stderr.write(`[Agent] Warning: Model "${x}" does not accept PDF/document input; "${t.fileName}" will be passed as a reference only.\n`);let r=typeof t.size==`number`?t.size:0;n===`image`&&r>m?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the ${(m/1024/1024).toFixed(0)} MB image limit and will be passed as a text reference only. Resize or compress the image before attaching.\n`):n===`audio`&&r>5242880?p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 5 MB audio limit and will be passed as a text reference only.\n`):n===`document`&&r>20971520&&p.stderr.write(`[Agent] Warning: "${t.fileName}" is ${(r/1024/1024).toFixed(1)} MB — exceeds the 20 MB document limit and will be passed as a text reference only.\n`)}}let W;if(n.systemPrompt===`none`||n.systemPrompt===``||n.systemPrompt===!1||n.noSystemPrompt===!0)W=``;else{if(W=n.systemPrompt,!W&&n.systemPromptFile)try{let e=f.resolve(n.systemPromptFile);W=await b(e,`utf8`)}catch(e){let t=`Error: Failed to read system prompt file "${n.systemPromptFile}": ${e.message}`;return n.quiet||console.error(t),p.exitCode=1,{success:!1,error:t}}if(W||=p.env.SHADOW_CLAW_SYSTEM_PROMPT||p.env.SHADOWCLAW_SYSTEM_PROMPT,!W&&U&&(W=U),!W&&E?.systemPromptFile)try{let e=S?.configPath?f.dirname(S.configPath):i,t=f.resolve(e,E.systemPromptFile);W=await b(t,`utf8`)}catch(e){n.verbose&&!n.quiet&&console.error(`Warning: Failed to read systemPromptFile from config: ${e.message}`)}if(W||=E?.systemPrompt||T?.systemPrompt||T?.systemPromptOverride,!W&&typeof a.getConfig==`function`)try{let e=await a.getConfig(r,a.CONFIG_KEYS?.SYSTEM_PROMPT_OVERRIDE||`system_prompt_override`);e&&typeof e==`string`&&(W=e)}catch{}W||=`You are ShadowClaw, a helpful AI assistant operating in a headless workspace. Answer concisely.`}let G={apiKey:y||``,assistantName:`ShadowClaw`,enabledTools:ne,groupId:u,maxTokens:P,messages:[...O,A],model:x,provider:_,...v?.baseUrl?{baseUrl:v.baseUrl}:{},streaming:N,verbose:!!n.verbose,systemPrompt:W},K=new AbortController;n.abortSignal&&(n.abortSignal.aborted?K.abort():n.abortSignal.addEventListener(`abort`,()=>K.abort(),{once:!0}));let q=e=>{typeof n.onExit==`function`?n.onExit(e):!p.env.JEST_WORKER_ID&&p.env.NODE_ENV!==`test`&&p.exit(e)},J=!1,Y=null,X=()=>{if(J)Y&&=(clearTimeout(Y),null),q(130);else{J=!0,K.abort();try{typeof a.cleanupAllLlamafileProcesses==`function`&&a.cleanupAllLlamafileProcesses()}catch{}Y=setTimeout(()=>{q(130)},1500),Y.unref?.()}};p.on(`SIGINT`,X);let re=n.invokeHandler||a.handleInvoke;try{await re(r,G,K.signal)}catch(e){I=e instanceof Error?e.message:String(e),!J&&!n.quiet&&console.error(`Error: ${I}`)}finally{p.removeListener(`SIGINT`,X),Y&&=(clearTimeout(Y),null)}if(J)return n.quiet||p.stderr.write(`
24
24
  Operation cancelled.
25
- `),p.exitCode=130,typeof n.onExit==`function`&&n.onExit(130),{success:!1,error:`Operation cancelled.`};if(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-C9o6lXP3.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-B7Kn-otm.js`),c=n.workspace?f.resolve(n.workspace):p.cwd(),l=e||`list`;if(l===`list`||l===`remote`){let e=l===`remote`||!!(n.remote||n.all||n.huggingface),a=await j(c),u=a?.config?.agent?.defaultModel||a?.config?.settings?.defaultModel||s;if(e){n.quiet||p.stdout.write(`
27
27
  Fetching available ONNX models from Hugging Face (onnx-community)...
28
28
  `);let e=await o({cacheDir:n.cacheDir,query:n.query||(l===`remote`&&t?t:void 0)});if(!n.quiet){if(e.length===0)p.stdout.write(`No models found on Hugging Face or could not reach huggingface.co.
29
29
 
@@ -37,5 +37,5 @@ Curated Transformers.js Models (Local ONNX):
37
37
  `);for(let e of d){let t=e.id===u,n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.id}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` Context: ${e.contextLength.toLocaleString()} tokens | Tools: ${e.supportsTools?`Yes`:`No`}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write(`Curated Llamafile Models (Local Executable):
38
38
 
39
39
  `);for(let e of f){let t=e.fileName===u||e.id===u||u.endsWith(e.fileName),n=e.cached?` [Cached]`:` [Not downloaded]`,r=t?` (Default)`:``;p.stdout.write(` • ${e.fileName}${r}${n}\n`),p.stdout.write(` Name: ${e.name}\n`),p.stdout.write(` URL: ${e.url}\n`),p.stdout.write(` ${e.description}\n\n`)}p.stdout.write("Tip: Run `shadow-claw agent model list --remote` (or `shadow-claw agent model remote`) to browse all ONNX models from Hugging Face.\n\n")}return{success:!0,models:d,llamafileModels:f,defaultModel:u}}if(l===`download`){let e=t||n.model||s;n.verbose&&!n.quiet&&p.stderr.write(`Preparing to download model: ${e}\n`);let r=await a(e,{cacheDir:n.cacheDir,verbose:n.verbose,isTTY:n.isTTY,progress:n.progress!==!1&&!n.noProgress});return r.success||(p.exitCode=1),r}if(l===`set`){let e=t||n.model;if(!e){let e=`Error: Please specify a model ID to set as default.`;return n.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=await j(c),i=r?.configPath||f.join(c,`shadow-claw.config.json`),a=r?.config||{},o={...a,agent:{...a.agent||{},defaultModel:e}};return await w(i,JSON.stringify(o,null,2)+`
40
- `,`utf8`),n.quiet||p.stdout.write(`Updated default CLI agent model to: ${e}\n`),{success:!0,model:e,configPath:i}}let u=`Unknown model action: "${l}". Available: list, download, set`;return n.quiet||console.error(u),p.exitCode=1,{success:!1,error:u}}async function $(e,t={}){let n=(e||``).trim();if(!n){let e=`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`;return t.quiet||console.error(e),p.exitCode=1,{success:!1,error:e}}let r=t.workspace||p.cwd(),{db:i,workspaceDir:a,core:o}=await R({...t,workspace:r}),s=t.group||o.DEFAULT_SERVER_GROUP_ID||Z,c=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];if(n.startsWith(`./`)||n.startsWith(`../`)||n.startsWith(`/`)||n.startsWith(`file://`)||/^[a-zA-Z]:[\\/]/.test(n)){let e=!!(t.tools||t.skills||t.scripts)&&!t.all,r={overwrite:!!t.overwrite,targetSubdir:t.targetSubdir},i={imported:[],skipped:[],failed:[]},o=e&&!t.skills?i:await 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-CtMaOnRj.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-COBNl0vP.js`)).importRemoteArtifacts,d=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let f;try{f=await l(n,d)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let{manifest:m,siteUrl:h,manifestUrl:g}=f,_=m.tools||[],v=m.skills||[],y=m.scripts||[];t.quiet||console.log(`Discovered: ${m.name||`Remote Site`} (${v.length} skill${v.length===1?``:`s`}, ${_.length} tool${_.length===1?``:`s`}, ${y.length} script${y.length===1?``:`s`})`);let b=_.map(e=>e.name),x=v.map(e=>e.name),S=y.map(e=>e.name),C,w,T;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];C=e(t.tools),w=e(t.skills),T=e(t.scripts)}else C=b,w=x,T=S;let E=t.autoEnable!==!1,D=!!t.overwrite,O;try{O=await u(i,s,m,{toolNames:C,skillNames:w,scriptNames:T},{autoEnable:E,overwrite:D,fetchFn:d,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let k=O.tools.filter(e=>e.status===`imported`),A=O.skills.filter(e=>e.status===`imported`),j=O.scripts.filter(e=>e.status===`imported`),M=O.tools.filter(e=>e.status===`skipped`),N=O.skills.filter(e=>e.status===`skipped`),P=O.scripts.filter(e=>e.status===`skipped`),F=O.tools.filter(e=>e.status===`failed`),I=O.skills.filter(e=>e.status===`failed`),L=O.scripts.filter(e=>e.status===`failed`),z=k.length+A.length+j.length,B=M.length+N.length+P.length,V=F.length+I.length+L.length;if(!t.quiet){console.log(`
41
- Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-Bj95zm-y.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-CtMaOnRj.js`)).fetchDiscoveryManifest,u=o.importRemoteArtifacts||(await import(`./chunk-COBNl0vP.js`)).importRemoteArtifacts,d=t.fetchFn||globalThis.fetch;t.quiet||console.log(`Fetching discovery manifest from ${n}...`);let f;try{f=await l(n,d)}catch(e){let n=`Failed to fetch discovery manifest: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let{manifest:m,siteUrl:h,manifestUrl:g}=f,_=m.tools||[],v=m.skills||[],y=m.scripts||[];t.quiet||console.log(`Discovered: ${m.name||`Remote Site`} (${v.length} skill${v.length===1?``:`s`}, ${_.length} tool${_.length===1?``:`s`}, ${y.length} script${y.length===1?``:`s`})`);let b=_.map(e=>e.name),x=v.map(e=>e.name),S=y.map(e=>e.name),C,w,T;if((t.tools||t.skills||t.scripts)&&!t.all){let e=e=>e?Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[];C=e(t.tools),w=e(t.skills),T=e(t.scripts)}else C=b,w=x,T=S;let E=t.autoEnable!==!1,D=!!t.overwrite,O;try{O=await u(i,s,m,{toolNames:C,skillNames:w,scriptNames:T},{autoEnable:E,overwrite:D,fetchFn:d,siteSlug:t.siteSlug,targetSubdir:t.targetSubdir})}catch(e){let n=`Import failed: ${e instanceof Error?e.message:String(e)}`;return t.quiet||console.error(`Error: ${n}`),p.exitCode=1,{success:!1,error:n}}let k=O.tools.filter(e=>e.status===`imported`),A=O.skills.filter(e=>e.status===`imported`),j=O.scripts.filter(e=>e.status===`imported`),M=O.tools.filter(e=>e.status===`skipped`),N=O.skills.filter(e=>e.status===`skipped`),P=O.scripts.filter(e=>e.status===`skipped`),F=O.tools.filter(e=>e.status===`failed`),I=O.skills.filter(e=>e.status===`failed`),L=O.scripts.filter(e=>e.status===`failed`),z=k.length+A.length+j.length,B=M.length+N.length+P.length,V=F.length+I.length+L.length;if(!t.quiet){console.log(`
41
+ Importing artifacts:`);for(let e of[...O.tools,...O.skills,...O.scripts]){let t=O.tools.includes(e)?`tool`:O.skills.includes(e)?`skill`:`script`;e.status===`imported`?console.log(` [${t}] ${e.name} -> ${e.path} (imported)`):e.status===`skipped`?console.log(` [${t}] ${e.name} -> ${e.path} (skipped, already exists - use --overwrite to replace)`):console.log(` [${t}] ${e.name} (failed: ${e.error||`unknown error`})`)}console.log(V>0?`\nCompleted with ${V} error${V===1?``:`s`}. Successfully imported ${z} items, ${B} skipped.`:`\nSuccessfully imported ${z} item${z===1?``:`s`} (${k.length} tool${k.length===1?``:`s`}, ${A.length} skill${A.length===1?``:`s`}, ${j.length} script${j.length===1?``:`s`}).`)}let ee=V===0||z>0;return ee||(p.exitCode=1),{success:ee,manifest:m,siteUrl:h,manifestUrl:g,result:O,importedCount:z,skippedCount:B,failedCount:V}}async function pe(e,t=[],n={}){let r=t,i=n;if(!Array.isArray(t)&&typeof t==`object`&&(i=t,r=[]),i._stdinData===void 0)try{i={...i,_stdinData:p.stdin.isTTY?null:await z({timeoutMs:500})}}catch{i={...i,_stdinData:null}}switch(e){case`init`:{let e=r[0]||i.workspace,t=await re({...i,workspace:e});return console.log(`Headless agent workspace initialized at: ${t.workspace}`),t}case`skills`:{let e=r[0],t={...i,workspace:i.workspace||p.cwd()};if(e)return await ie(e,r.slice(1),t);let n=await Q(t);if(n.skills.length===0)console.log(`No skills found in workspace (.agents/skills/).`);else{console.log(`Available skills (${n.skills.length}):\n`);for(let e of n.skills){let t=e.lockSource?` [source: ${e.lockSource}]`:``;console.log(` - ${e.name}${t}: ${e.description||`No description`}`)}}return n}case`tools`:{let e=r[0];if(e)return await oe(e,r[1],i);let t=await ae(i);console.log(`Available tools (${t.tools.length}):\n`);for(let e of t.tools){let t=e.headlessSafe?`[headless-safe]`:`[browser-only]`;console.log(` - ${e.name.padEnd(25)} ${t} ${e.description||``}`)}return t}case`tool`:{let e=r[0];if(!e){console.error(`Error: Tool name required. Usage: shadow-claw agent tool <name> [input-json]`),p.exitCode=1;return}return await oe(e,r[1],i)}case`skill`:{let e=r[0];if(!e){console.error(`Error: Skill name required. Usage: shadow-claw agent skill <name>`),p.exitCode=1;return}return await ce(e,i)}case`clear`:return await se(i);case`run`:return await de(r.join(` `)||`-`,i);case`models`:case`model`:{let e=r[0]||`list`,t=r[1];return await fe(e,t,i)}case`import`:{let e=r[0];return e?await $(e,{...i,workspace:i.workspace||p.cwd()}):(console.error(`Error: Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`),p.exitCode=1,{success:!1,error:`Discovery URL or site URL required. Usage: shadow-claw agent import <url> [options]`})}case`listen`:return await(i.listenFn||(async e=>{let{runWebRtcListenCommand:t}=await import(`./chunk-B-75h9gX.js`);return t(e)}))({...i,agent:!0});default:console.log(`Usage: shadow-claw agent <init|model|skills|tools|tool|skill|import|run|clear|listen> [args...]`)}}export{j as _,$ as a,de as c,ie as d,oe as f,I as g,R as h,pe as i,ce as l,W as m,U as n,re as o,ae as p,se as r,fe as s,le as t,Q as u};
@@ -0,0 +1 @@
1
+ export{n as runWebRtcListenCommand}from"./chunk-BdWcep6o.js";
@@ -0,0 +1 @@
1
+ export{r as orchestratorStore}from"./chunk-DB21BMqt.js";