shadow-claw 1.40.1 → 1.41.0

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