shadow-claw 1.40.1 → 1.41.1

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 (325) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +2 -1
  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-63s8NnIS.js +93 -0
  8. package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
  9. package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
  10. package/dist/cli/chunk-BATVgkFY.js +17 -0
  11. package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
  12. package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
  13. package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
  14. package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
  15. package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
  16. package/dist/cli/chunk-BjOeVLb42.js +1 -0
  17. package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
  18. package/dist/cli/chunk-BqWBd_jF2.js +1 -0
  19. package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
  20. package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
  21. package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
  22. package/dist/cli/chunk-CCx8WOwz2.js +1 -0
  23. package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
  24. package/dist/cli/chunk-CUUERioR2.js +1 -0
  25. package/dist/cli/chunk-CXAobnJd.js +1 -0
  26. package/dist/cli/chunk-CY1X0pOF2.js +1 -0
  27. package/dist/cli/chunk-CZvvgLVv.js +1 -0
  28. package/dist/cli/chunk-CbcwbfJB.js +1 -0
  29. package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
  30. package/dist/cli/chunk-Cj9wl0qx.js +1 -0
  31. package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
  32. package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
  33. package/dist/cli/chunk-Cmdxoq9q.js +13 -0
  34. package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
  35. package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
  36. package/dist/cli/chunk-DR2XtWRo.js +1 -0
  37. package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
  38. package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
  39. package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
  40. package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
  41. package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
  42. package/dist/cli/chunk-UcNbHaRQ.js +1 -0
  43. package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
  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 +8 -2
  201. package/dist/public/README.md +2 -1
  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/README.md +1 -0
  212. package/dist/public/docs/example/article/index.html +4 -4
  213. package/dist/public/docs/guides/publishing-to-github-pages.md +95 -6
  214. package/dist/public/docs/publishing/index.html +4 -4
  215. package/dist/public/docs/skill-creator/index.html +4 -4
  216. package/dist/public/docs/subsystems/pages.md +10 -3
  217. package/dist/public/docs/subsystems/theming.md +242 -0
  218. package/dist/public/docs/subsystems/webmcp.md +89 -1
  219. package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
  220. package/dist/public/e2e/README.md +3 -2
  221. package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
  222. package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
  223. package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
  224. package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
  225. package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
  226. package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
  227. package/dist/public/index.css +1 -1
  228. package/dist/public/index.html +4 -4
  229. package/dist/public/index.js +1 -1
  230. package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
  231. package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
  232. package/dist/public/llms.txt +2 -2
  233. package/dist/public/main/index.html +4 -4
  234. package/dist/public/main/memory/index.html +4 -4
  235. package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
  236. package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
  237. package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
  238. package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
  239. package/dist/public/{orchestrator-Dc_Q73La.js → orchestrator-CQcc7OFA.js} +2 -2
  240. package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
  241. package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
  242. package/dist/public/service-worker/fetch-proxy.js +1 -1
  243. package/dist/public/service-worker.js +1 -1
  244. package/dist/public/{shadow-claw-Dabb2AEp.js → shadow-claw-WwfOu-tu.js} +33 -3
  245. package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
  246. package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
  247. package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
  248. package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
  249. package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
  250. package/dist/public/{shadow-claw-file-viewer-CDs1QGXk.js → shadow-claw-file-viewer-DYgZjZb9.js} +1 -1
  251. package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
  252. package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
  253. package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
  254. package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
  255. package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
  256. package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
  257. package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
  258. package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
  259. package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
  260. package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
  261. package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
  262. package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
  263. package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
  264. package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
  265. package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
  266. package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
  267. package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
  268. package/dist/public/theme-init.js +1 -1
  269. package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
  270. package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
  271. package/dist/server.js +188 -188
  272. package/package.json +1 -1
  273. package/src/cli/build/build.ts +18 -11
  274. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
  275. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +13 -1
  276. package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +22 -0
  277. package/src/cli/prerender/utils/insert-before-closing-head.test.ts +34 -1
  278. package/src/cli/prerender/utils/insert-before-closing-head.ts +20 -6
  279. package/src/cli/site-config/apply.test.ts +90 -0
  280. package/src/cli/site-config/apply.ts +189 -22
  281. package/src/components/shadow-claw/shadow-claw.css +26 -0
  282. package/src/components/shadow-claw/shadow-claw.html +4 -0
  283. package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
  284. package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
  285. package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
  286. package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
  287. package/src/components/shadow-claw/utils/getRoute.ts +18 -0
  288. package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
  289. package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
  290. package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
  291. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
  292. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
  293. package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
  294. package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
  295. package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +52 -0
  296. package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +28 -1
  297. package/src/server/middleware/static-files.test.ts +36 -0
  298. package/src/server/middleware/static-files.ts +14 -6
  299. package/src/storage/staticRouting.test.ts +36 -0
  300. package/src/storage/staticRouting.ts +31 -3
  301. package/src/subsystems/mcp/webmcp.test.ts +255 -0
  302. package/src/subsystems/mcp/webmcp.ts +253 -0
  303. package/dist/cli/chunk-00GAzVPl2.js +0 -1
  304. package/dist/cli/chunk-2hnFoNNC.js +0 -1
  305. package/dist/cli/chunk-BKQL4nzF2.js +0 -1
  306. package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
  307. package/dist/cli/chunk-BVCGo6uf2.js +0 -1
  308. package/dist/cli/chunk-Bc9nRNyN.js +0 -11
  309. package/dist/cli/chunk-BcTH_-FL.js +0 -1
  310. package/dist/cli/chunk-BmD_sPRt.js +0 -1
  311. package/dist/cli/chunk-BsxNqqer.js +0 -1
  312. package/dist/cli/chunk-CCcF5T-c.js +0 -1
  313. package/dist/cli/chunk-CFhvwUeL.js +0 -91
  314. package/dist/cli/chunk-CwWtvULn.js +0 -1
  315. package/dist/cli/chunk-DID5VvOG.js +0 -17
  316. package/dist/cli/chunk-Drf-hXIR2.js +0 -1
  317. package/dist/cli/chunk-Dt5HNYVi.js +0 -1
  318. package/dist/cli/chunk-DwZQi9Ax.js +0 -1
  319. package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
  320. package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
  321. package/dist/lib/shadow-claw-4x3LqlII.js.map +0 -1
  322. package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
  323. package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
  324. package/dist/public/app-routes-BMQ4HFaM.js +0 -1
  325. 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.1",
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.1",
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, Theming & Slotted Navigation:** Publish documentation portals and knowledge hubs with Declarative Shadow DOM (DSD) SSR, root and sub-route pretty paths, custom stylesheets (`theme.stylesheet`), CSS custom property layout/shell tokens, customizable slotted navigation (`sidebar-nav`, `sidebar`, `sidebar-content`, `sidebar-footer`), and declarative sections. See [Theming Subsystem](docs/subsystems/theming.md).
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
  ---
@@ -286,7 +287,7 @@ Each channel creates isolated conversations with their own message history and w
286
287
  Comprehensive architectural specifications, subsystem deep-dives, step-by-step guides, and ADRs live in [`docs/`](docs/README.md):
287
288
 
288
289
  - **[Architecture](docs/README.md#architecture):** [System Overview](docs/architecture/overview.md) · [Orchestrator & State Machine](docs/architecture/orchestrator.md) · [Worker Protocol](docs/architecture/worker-protocol.md) · [Storage System](docs/architecture/storage.md) · [Context Management](docs/architecture/context-management.md) · [Streaming](docs/architecture/streaming.md)
289
- - **[Subsystems](docs/README.md#subsystems):** [Headless Agent & CLI](docs/subsystems/cli.md) · [Local Models & Hugging Face](docs/subsystems/local-models.md) · [Shell Emulator](docs/subsystems/shell.md) · [WebVM](docs/subsystems/vm.md) · [Git Integration](docs/subsystems/git.md) · [Channels](docs/subsystems/channels.md) · [Tools & Profiles](docs/subsystems/tools.md) · [Providers & Model Registry](docs/subsystems/providers.md) · [Notifications & Scheduling](docs/subsystems/notifications.md) · [Electron Desktop](docs/subsystems/electron.md) · [Reactive UI & Web Components](docs/subsystems/reactive-ui.md) · [Remote MCP](docs/subsystems/remote-mcp.md) · [Stateless MCP Server](docs/subsystems/mcp-server.md) · [WebMCP](docs/subsystems/webmcp.md) · [Crypto & Secrets](docs/subsystems/crypto.md) · [Control Plane](docs/subsystems/control-plane.md) · [Pages System](docs/subsystems/pages.md) · [Agent Skills](docs/subsystems/skills.md) · [Security Hardening](docs/subsystems/custom-element-security.md) · [File Backup](docs/subsystems/backup.md) · [Web Share Target](docs/subsystems/share-target.md) · [OpenAPI](docs/subsystems/openapi.md)
290
+ - **[Subsystems](docs/README.md#subsystems):** [Headless Agent & CLI](docs/subsystems/cli.md) · [Local Models & Hugging Face](docs/subsystems/local-models.md) · [Shell Emulator](docs/subsystems/shell.md) · [WebVM](docs/subsystems/vm.md) · [Git Integration](docs/subsystems/git.md) · [Channels](docs/subsystems/channels.md) · [Tools & Profiles](docs/subsystems/tools.md) · [Providers & Model Registry](docs/subsystems/providers.md) · [Notifications & Scheduling](docs/subsystems/notifications.md) · [Electron Desktop](docs/subsystems/electron.md) · [Reactive UI & Web Components](docs/subsystems/reactive-ui.md) · [Remote MCP](docs/subsystems/remote-mcp.md) · [Stateless MCP Server](docs/subsystems/mcp-server.md) · [WebMCP](docs/subsystems/webmcp.md) · [Crypto & Secrets](docs/subsystems/crypto.md) · [Control Plane](docs/subsystems/control-plane.md) · [Pages System](docs/subsystems/pages.md) · [Theming & Stylesheets](docs/subsystems/theming.md) · [Agent Skills](docs/subsystems/skills.md) · [Security Hardening](docs/subsystems/custom-element-security.md) · [File Backup](docs/subsystems/backup.md) · [Web Share Target](docs/subsystems/share-target.md) · [OpenAPI](docs/subsystems/openapi.md)
290
291
  - **[Guides](docs/README.md#guides):** [Adding a Provider](docs/guides/adding-a-provider.md) · [Adding a Tool](docs/guides/adding-a-tool.md) · [Adding a Shell Command](docs/guides/adding-a-shell-command.md) · [Adding a UI Page](docs/guides/adding-a-page.md) · [Adding a Channel](docs/guides/adding-a-channel.md) · [Protocol-Agnostic Integrations](docs/guides/protocol-agnostic-integrations.md) · [Service Accounts & Credentials](docs/guides/adding-service-accounts.md) · [Configuring Messaging Channels](docs/guides/configuring-messaging-channels.md) · [Server Development Configuration](docs/guides/server-development-configuration.md) · [Publishing to GitHub Pages](docs/guides/publishing-to-github-pages.md)
291
292
  - **[Decisions](docs/README.md#decisions):** ADRs on [Headless CLI Agent Participant](docs/decisions/headless-cli-agent-participant.md), [Bundled TypeScript Architecture](docs/decisions/bundled-typescript-architecture.md), [Native Web Components and Signals](docs/decisions/native-web-components-and-signals.md), [Worker-Isolated Agent Runtime](docs/decisions/worker-isolated-agent-runtime.md), [IndexedDB and OPFS Storage](docs/decisions/indexeddb-and-opfs-storage.md), and [Peer-to-Peer Protocol (A2A via AGUI)](docs/decisions/peer-protocol-a2a-agui.md)
292
293
  - **[Agent Conventions](AGENTS.md):** Architectural guardrails and conventions for AI coding agents
@@ -1 +1 @@
1
- import{t as e}from"../chunk-CFhvwUeL.js";export{e as runBuild};
1
+ import{t as e}from"../chunk-63s8NnIS.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};