shadow-claw 1.26.0 → 1.27.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 (230) hide show
  1. package/.agents/skills/main/skill-creator/SKILL.md +39 -0
  2. package/.agents/skills/main/skill-creator/references/declarative-pipelines.md +44 -0
  3. package/.agents/skills/main/skill-creator/references/declarative-tools.md +35 -0
  4. package/.agents/skills/main/skill-creator/references/frontmatter-spec.md +50 -0
  5. package/.well-known/agent-skills/index.json +14 -0
  6. package/README.md +5 -3
  7. package/bin/build/build.mjs +148 -15
  8. package/bin/build/build.test.mjs +128 -0
  9. package/bin/cli.mjs +35 -0
  10. package/bin/commands/mcp.mjs +277 -55
  11. package/bin/commands/mcp.test.mjs +275 -1
  12. package/bin/commands/skills-index.mjs +447 -0
  13. package/bin/commands/skills-index.test.mjs +243 -0
  14. package/bin/site-config/utils/custom-elements/get-approved-custom-element-scripts.test.mjs +2 -0
  15. package/bin/site-config/utils/custom-elements/sanitize-embedded-custom-element-scripts.test.mjs +10 -1
  16. package/dist/lib/components/index.js +25 -25
  17. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  18. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  19. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  20. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  21. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  22. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  23. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  24. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  25. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  26. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  27. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  28. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  29. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  30. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  31. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  32. package/dist/lib/components/shadow-claw-channels.js +1 -1
  33. package/dist/lib/components/shadow-claw-chat.js +1 -1
  34. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  35. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  36. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  37. package/dist/lib/components/shadow-claw-files.js +1 -1
  38. package/dist/lib/components/shadow-claw-git.js +1 -1
  39. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  40. package/dist/lib/components/shadow-claw-llm.js +1 -1
  41. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  42. package/dist/lib/components/shadow-claw-networking.js +1 -1
  43. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  44. package/dist/lib/components/shadow-claw-pages.js +1 -1
  45. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  46. package/dist/lib/components/shadow-claw-settings.js +1 -1
  47. package/dist/lib/components/shadow-claw-storage.js +1 -1
  48. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  49. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  50. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  51. package/dist/lib/components/shadow-claw-tools.js +1 -1
  52. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  53. package/dist/lib/components/shadow-claw.js +1 -1
  54. package/dist/lib/{configurePeerJs-CrlGan0m.js → configurePeerJs-oODzltaC.js} +2 -2
  55. package/dist/lib/{configurePeerJs-CrlGan0m.js.map → configurePeerJs-oODzltaC.js.map} +1 -1
  56. package/dist/lib/core/control-plane-client.d.ts +1 -0
  57. package/dist/lib/{downloadGroupFile-DboUjmp2.js → downloadGroupFile-DmcBQU1n.js} +2 -2
  58. package/dist/lib/{downloadGroupFile-DboUjmp2.js.map → downloadGroupFile-DmcBQU1n.js.map} +1 -1
  59. package/dist/lib/{file-viewer-BrK2Wxgh.js → file-viewer-C3YKnq_-.js} +4 -3
  60. package/dist/lib/{file-viewer-BrK2Wxgh.js.map → file-viewer-C3YKnq_-.js.map} +1 -1
  61. package/dist/lib/index.js +26 -26
  62. package/dist/lib/{initControlPlane-CsO4UR6_.js → initControlPlane-C2zURVIS.js} +86 -13
  63. package/dist/lib/initControlPlane-C2zURVIS.js.map +1 -0
  64. package/dist/lib/{markdown-eeSTFnMA.js → markdown-C6EHl9zs.js} +3 -3
  65. package/dist/lib/{markdown-eeSTFnMA.js.map → markdown-C6EHl9zs.js.map} +1 -1
  66. package/dist/lib/{orchestrator-CJvoC2Uu.js → orchestrator-CACLa_Ro.js} +7 -6
  67. package/dist/lib/{orchestrator-CJvoC2Uu.js.map → orchestrator-CACLa_Ro.js.map} +1 -1
  68. package/dist/lib/{orchestrator-DCfomsn9.js → orchestrator-KRjx0eba.js} +6 -534
  69. package/dist/lib/{orchestrator-DCfomsn9.js.map → orchestrator-KRjx0eba.js.map} +1 -1
  70. package/dist/lib/parsePath-DwC_YZjw.js +16 -0
  71. package/dist/lib/parsePath-DwC_YZjw.js.map +1 -0
  72. package/dist/lib/{peerjs-Dp02bXcG.js → peerjs-DFWOBcXf.js} +4 -4
  73. package/dist/lib/{peerjs-Dp02bXcG.js.map → peerjs-DFWOBcXf.js.map} +1 -1
  74. package/dist/lib/{readGroupFileBytes-Bve-e5e_.js → readGroupFileBytes-C8oOe8Iu.js} +3 -16
  75. package/dist/lib/readGroupFileBytes-C8oOe8Iu.js.map +1 -0
  76. package/dist/lib/security/custom-element-security.d.ts +8 -0
  77. package/dist/lib/server/control-plane-types.d.ts +1 -1
  78. package/dist/lib/{shadow-claw-D8xINM3c.js → shadow-claw-6UHdiy4a.js} +5 -5
  79. package/dist/lib/{shadow-claw-D8xINM3c.js.map → shadow-claw-6UHdiy4a.js.map} +1 -1
  80. package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js → shadow-claw-a2ui-CpZUTzlh.js} +5 -4
  81. package/dist/lib/{shadow-claw-a2ui-7rJqG4Ke.js.map → shadow-claw-a2ui-CpZUTzlh.js.map} +1 -1
  82. package/dist/lib/{shadow-claw-accounts-CdruwN8A.js → shadow-claw-accounts-03oJ__XC.js} +2 -2
  83. package/dist/lib/{shadow-claw-accounts-CdruwN8A.js.map → shadow-claw-accounts-03oJ__XC.js.map} +1 -1
  84. package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js → shadow-claw-channel-config-DmfwJc6G.js} +3 -3
  85. package/dist/lib/{shadow-claw-channel-config-Bj0-Nk3t.js.map → shadow-claw-channel-config-DmfwJc6G.js.map} +1 -1
  86. package/dist/lib/{shadow-claw-channels-C_jI4KhP.js → shadow-claw-channels-1N6Jl-By.js} +3 -3
  87. package/dist/lib/{shadow-claw-channels-C_jI4KhP.js.map → shadow-claw-channels-1N6Jl-By.js.map} +1 -1
  88. package/dist/lib/{shadow-claw-chat-B16MspoP.js → shadow-claw-chat-BMoqQJRK.js} +10 -10
  89. package/dist/lib/{shadow-claw-chat-B16MspoP.js.map → shadow-claw-chat-BMoqQJRK.js.map} +1 -1
  90. package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js → shadow-claw-control-plane-UG0o7pCz.js} +6 -6
  91. package/dist/lib/{shadow-claw-control-plane-x8Ldid_h.js.map → shadow-claw-control-plane-UG0o7pCz.js.map} +1 -1
  92. package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js → shadow-claw-conversations-BwXep3iu.js} +4 -3
  93. package/dist/lib/{shadow-claw-conversations-Ct1kAYdB.js.map → shadow-claw-conversations-BwXep3iu.js.map} +1 -1
  94. package/dist/lib/{shadow-claw-file-viewer-BfDHHgpA.js → shadow-claw-file-viewer-DUxzVxDT.js} +14 -10
  95. package/dist/lib/shadow-claw-file-viewer-DUxzVxDT.js.map +1 -0
  96. package/dist/lib/{shadow-claw-files-EYhOPYIH.js → shadow-claw-files-DIREEnT2.js} +7 -7
  97. package/dist/lib/{shadow-claw-files-EYhOPYIH.js.map → shadow-claw-files-DIREEnT2.js.map} +1 -1
  98. package/dist/lib/{shadow-claw-git-tcSpT-P0.js → shadow-claw-git-Bg1SWgsF.js} +4 -4
  99. package/dist/lib/{shadow-claw-git-tcSpT-P0.js.map → shadow-claw-git-Bg1SWgsF.js.map} +1 -1
  100. package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js → shadow-claw-integrations-Ds-CLPhj.js} +2 -2
  101. package/dist/lib/{shadow-claw-integrations-NbcCx_ZI.js.map → shadow-claw-integrations-Ds-CLPhj.js.map} +1 -1
  102. package/dist/lib/{shadow-claw-llm-BazJdD5f.js → shadow-claw-llm-CazBrVpM.js} +3 -3
  103. package/dist/lib/{shadow-claw-llm-BazJdD5f.js.map → shadow-claw-llm-CazBrVpM.js.map} +1 -1
  104. package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js → shadow-claw-mcp-remote-CT5Q-54E.js} +2 -2
  105. package/dist/lib/{shadow-claw-mcp-remote-CYmhpg7a.js.map → shadow-claw-mcp-remote-CT5Q-54E.js.map} +1 -1
  106. package/dist/lib/{shadow-claw-networking-DImPxe0H.js → shadow-claw-networking-Df85tCbO.js} +2 -2
  107. package/dist/lib/{shadow-claw-networking-DImPxe0H.js.map → shadow-claw-networking-Df85tCbO.js.map} +1 -1
  108. package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js → shadow-claw-page-header-Cti2fzf-.js} +2 -2
  109. package/dist/lib/{shadow-claw-page-header-CcHUfFUx.js.map → shadow-claw-page-header-Cti2fzf-.js.map} +1 -1
  110. package/dist/lib/{shadow-claw-pages-D54jF1Qq.js → shadow-claw-pages-BgPyIEZO.js} +15 -11
  111. package/dist/lib/shadow-claw-pages-BgPyIEZO.js.map +1 -0
  112. package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js → shadow-claw-peerjs-xkBXILed.js} +3 -3
  113. package/dist/lib/{shadow-claw-peerjs-B9-T8Nlx.js.map → shadow-claw-peerjs-xkBXILed.js.map} +1 -1
  114. package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js → shadow-claw-settings-CN89xRVU.js} +4 -4
  115. package/dist/lib/{shadow-claw-settings-Bt1VAe-1.js.map → shadow-claw-settings-CN89xRVU.js.map} +1 -1
  116. package/dist/lib/{shadow-claw-storage-CFOjGf1d.js → shadow-claw-storage-VnhcObCe.js} +3 -3
  117. package/dist/lib/{shadow-claw-storage-CFOjGf1d.js.map → shadow-claw-storage-VnhcObCe.js.map} +1 -1
  118. package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js → shadow-claw-task-server-jgEC2hHB.js} +2 -2
  119. package/dist/lib/{shadow-claw-task-server-BiKa2GOm.js.map → shadow-claw-task-server-jgEC2hHB.js.map} +1 -1
  120. package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js → shadow-claw-tasks-i_evIufy.js} +6 -6
  121. package/dist/lib/{shadow-claw-tasks-DDHd8W4d.js.map → shadow-claw-tasks-i_evIufy.js.map} +1 -1
  122. package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js → shadow-claw-terminal-CwScROlu.js} +2 -2
  123. package/dist/lib/{shadow-claw-terminal-kB6_tWKz.js.map → shadow-claw-terminal-CwScROlu.js.map} +1 -1
  124. package/dist/lib/{shadow-claw-tools-DxXIm0ku.js → shadow-claw-tools-DD3fyXP4.js} +5 -4
  125. package/dist/lib/{shadow-claw-tools-DxXIm0ku.js.map → shadow-claw-tools-DD3fyXP4.js.map} +1 -1
  126. package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js → shadow-claw-webvm-DbJq4I3-.js} +2 -2
  127. package/dist/lib/{shadow-claw-webvm-Dc8oo7ao.js.map → shadow-claw-webvm-DbJq4I3-.js.map} +1 -1
  128. package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js → syncWebMcpRegistration-DNLnQ-jz.js} +3 -2
  129. package/dist/lib/{syncWebMcpRegistration-jyRGbC9w.js.map → syncWebMcpRegistration-DNLnQ-jz.js.map} +1 -1
  130. package/dist/lib/tools-DwwB9RBa.js +546 -0
  131. package/dist/lib/tools-DwwB9RBa.js.map +1 -0
  132. package/dist/lib/{trusted-types-CkLDpLiZ.js → trusted-types-Dx0RZlrd.js} +19 -8
  133. package/dist/lib/trusted-types-Dx0RZlrd.js.map +1 -0
  134. package/dist/lib/utils/index.js +1 -1
  135. package/dist/lib/utils/utils.js +1 -1
  136. package/dist/public/.well-known/agent-skills/index.json +14 -0
  137. package/dist/public/AGENTS.md +5 -3
  138. package/dist/public/README.md +5 -3
  139. package/dist/public/agent.worker.js +1 -1
  140. package/dist/public/{configurePeerJs-COcwE0E7.js → configurePeerJs-BqgeBjP7.js} +1 -1
  141. package/dist/public/custom-element-security-FU04Cq05.js +1 -0
  142. package/dist/public/dist-B9m1QM9v.js +58 -0
  143. package/dist/public/docs/README.md +31 -31
  144. package/dist/public/docs/example/article/index.html +1 -1
  145. package/dist/public/docs/publishing/index.html +1 -1
  146. package/dist/public/docs/skill-creator/index.html +1 -1
  147. package/dist/public/docs/subsystems/a2ui.md +11 -1
  148. package/dist/public/docs/subsystems/cli.md +32 -0
  149. package/dist/public/docs/subsystems/control-plane.md +8 -2
  150. package/dist/public/docs/subsystems/custom-element-security.md +19 -9
  151. package/dist/public/docs/subsystems/mcp-server.md +39 -15
  152. package/dist/public/docs/subsystems/skills.md +30 -0
  153. package/dist/public/docs/subsystems/webmcp.md +9 -0
  154. package/dist/public/downloadGroupFile-D8KRJGGL.js +1 -0
  155. package/dist/public/e2e/README.md +7 -4
  156. package/dist/public/{e2e-bridge-CHARpbpW.js → e2e-bridge-Ceqr5kGc.js} +1 -1
  157. package/dist/public/effect-BJCrpFdp.js +1 -0
  158. package/dist/public/file-viewer-C-6Jc_tb.js +1 -0
  159. package/dist/public/index.html +1 -1
  160. package/dist/public/index.js +1 -1
  161. package/dist/public/initControlPlane-BN9cWyO0.js +1 -0
  162. package/dist/public/main/index.html +1 -1
  163. package/dist/public/main/memory/index.html +1 -1
  164. package/dist/public/{markdown-1I3O6Mmd.js → markdown-C3M4OW_A.js} +1 -1
  165. package/dist/public/{orchestrator-Cl95w2vb.js → orchestrator-CMbCTjBf.js} +7 -7
  166. package/dist/public/{orchestrator-D-xlXG92.js → orchestrator-DHjdLtqa.js} +663 -663
  167. package/dist/public/peerjs-DUCKH-m9.js +1 -0
  168. package/dist/public/service-worker.js +1 -1
  169. package/dist/public/{shadow-claw-CaoKmIIB.js → shadow-claw-EAt2ml5Y.js} +3 -3
  170. package/dist/public/{shadow-claw-accounts-CJvYC4li.js → shadow-claw-accounts-xUOLBsQZ.js} +1 -1
  171. package/dist/public/{shadow-claw-channels-3K62sU5f.js → shadow-claw-channels-XsfuWFF8.js} +4 -4
  172. package/dist/public/{shadow-claw-chat-Cu2keU2I.js → shadow-claw-chat-CbSaOZ4q.js} +7 -7
  173. package/dist/public/{shadow-claw-control-plane-D1OwlQI_.js → shadow-claw-control-plane-DHvN3Ukg.js} +2 -2
  174. package/dist/public/{shadow-claw-conversations-DDtg3BEZ.js → shadow-claw-conversations-BWs5VVfs.js} +2 -2
  175. package/dist/public/{shadow-claw-file-viewer-BR__1z9S.js → shadow-claw-file-viewer-BWsoW5QS.js} +5 -4
  176. package/dist/public/{shadow-claw-files-BJSyZ-Bl.js → shadow-claw-files-CG7MqWiV.js} +8 -8
  177. package/dist/public/{shadow-claw-git-MAjhXRLc.js → shadow-claw-git-DBRPZNav.js} +6 -6
  178. package/dist/public/{shadow-claw-integrations-82UoFuDR.js → shadow-claw-integrations-BBVnO0Fc.js} +8 -8
  179. package/dist/public/{shadow-claw-llm-R8j0lwPP.js → shadow-claw-llm-DMvLgKXo.js} +2 -2
  180. package/dist/public/{shadow-claw-mcp-remote-BzZoz4LX.js → shadow-claw-mcp-remote-Bkx0gsmF.js} +2 -2
  181. package/dist/public/{shadow-claw-networking-DLEd9cNm.js → shadow-claw-networking-Dd8Rw31D.js} +2 -2
  182. package/dist/public/{shadow-claw-notifications-1vwR7TbT.js → shadow-claw-notifications-Dbevj-lq.js} +2 -2
  183. package/dist/public/{shadow-claw-page-header-DMKbkv3s.js → shadow-claw-page-header-BccSHItx.js} +1 -1
  184. package/dist/public/{shadow-claw-pages-CjyeIV__.js → shadow-claw-pages-3_lQAv0t.js} +4 -3
  185. package/dist/public/{shadow-claw-settings-BfbT4dBU.js → shadow-claw-settings-t8TIlgrM.js} +5 -5
  186. package/dist/public/{shadow-claw-storage-C-mWQQML.js → shadow-claw-storage-CfEXoSIE.js} +2 -2
  187. package/dist/public/{shadow-claw-task-server-D3lHp0Nc.js → shadow-claw-task-server-DxQSsgRZ.js} +2 -2
  188. package/dist/public/{shadow-claw-tasks-DVVWEm-c.js → shadow-claw-tasks-DNpicQwz.js} +14 -14
  189. package/dist/public/{shadow-claw-terminal-BwuTRp-O.js → shadow-claw-terminal-DpY6zU_r.js} +1 -1
  190. package/dist/public/{shadow-claw-toast-ClCwgzFG.js → shadow-claw-toast-BkrQIP-3.js} +1 -1
  191. package/dist/public/{shadow-claw-tools-zFLk2nbV.js → shadow-claw-tools-WSwWohnk.js} +2 -2
  192. package/dist/public/{shadow-claw-webvm-qR9X7fg7.js → shadow-claw-webvm-CP6oFjg5.js} +2 -2
  193. package/dist/public/syncWebMcpRegistration-DOn9gLnD.js +1 -0
  194. package/dist/public/toast-BXgUfbyh.js +1 -0
  195. package/dist/public/tools-DvckJZG2.js +1 -0
  196. package/dist/server.js +188 -188
  197. package/package.json +3 -1
  198. package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.stories.ts +1380 -93
  199. package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.ts +11 -6
  200. package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.test.ts +8 -1
  201. package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.ts +13 -5
  202. package/src/components/shadow-claw-pages/utils/buildHtmlPageSrcdoc.ts +13 -5
  203. package/src/core/control-plane-client.ts +15 -0
  204. package/src/core/utils/initControlPlane.test.ts +187 -0
  205. package/src/core/utils/initControlPlane.ts +194 -20
  206. package/src/security/custom-element-security.test.ts +51 -0
  207. package/src/security/custom-element-security.ts +33 -15
  208. package/src/server/control-plane-types.ts +1 -0
  209. package/src/server/control-plane.test.ts +69 -0
  210. package/src/server/control-plane.ts +45 -3
  211. package/src/server/mcp/tools/built-in-tools.ts +80 -5
  212. package/src/server/mcp/tools/client-tool-relay.ts +183 -26
  213. package/src/server/mcp/tools/mcp-tools.test.ts +140 -0
  214. package/src/server/middleware/static-files.test.ts +142 -0
  215. package/src/server/middleware/static-files.ts +66 -8
  216. package/src/testing/jest-setup.ts +14 -0
  217. package/src/worker/utils/handleMessage.ts +4 -1
  218. package/dist/lib/initControlPlane-CsO4UR6_.js.map +0 -1
  219. package/dist/lib/readGroupFileBytes-Bve-e5e_.js.map +0 -1
  220. package/dist/lib/shadow-claw-file-viewer-BfDHHgpA.js.map +0 -1
  221. package/dist/lib/shadow-claw-pages-D54jF1Qq.js.map +0 -1
  222. package/dist/lib/trusted-types-CkLDpLiZ.js.map +0 -1
  223. package/dist/public/custom-element-security-NCqQ5lmC.js +0 -1
  224. package/dist/public/downloadGroupFile-G0BZQgQg.js +0 -1
  225. package/dist/public/effect-rHYr4nfu.js +0 -1
  226. package/dist/public/file-viewer-8PdCURDD.js +0 -1
  227. package/dist/public/initControlPlane-CcGXax0A.js +0 -1
  228. package/dist/public/peerjs-BZdxWQFv.js +0 -1
  229. package/dist/public/syncWebMcpRegistration-DD42YsYV.js +0 -1
  230. package/dist/public/toast-HAq8XWFj.js +0 -58
@@ -1,4 +1,4 @@
1
- import{A as e,F as t}from"./config-CrHchneq.js";import{n}from"./txPromise-EBECky1b.js";import{a as r,i,r as a}from"./toast-HAq8XWFj.js";import{mn as o,t as s}from"./orchestrator-D-xlXG92.js";import{t as c}from"./ulid-BY7rQVLN.js";import{t as l}from"./tools-C8x3nmo4.js";import{n as u,t as d}from"./syncWebMcpRegistration-DD42YsYV.js";import"./tools-COduyYJ0.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import{t as p}from"./effect-rHYr4nfu.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-DMKbkv3s.js";import"./shadow-claw-dialog-BrOwAOdk.js";import{t as m}from"./webmcp-DAjmliCx.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{A as e,F as t}from"./config-CrHchneq.js";import{n}from"./txPromise-EBECky1b.js";import{t as r}from"./orchestrator-DHjdLtqa.js";import{t as i}from"./tools-DvckJZG2.js";import{t as a}from"./ulid-BY7rQVLN.js";import{t as o}from"./tools-C8x3nmo4.js";import{n as s,t as c}from"./syncWebMcpRegistration-DOn9gLnD.js";import"./tools-COduyYJ0.js";import{a as l,i as u,r as d}from"./toast-BXgUfbyh.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import{t as p}from"./effect-BJCrpFdp.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-BccSHItx.js";import"./shadow-claw-dialog-BrOwAOdk.js";import{t as m}from"./webmcp-DAjmliCx.js";const h=new CSSStyleSheet;h.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1036,4 +1036,4 @@ dialog::backdrop {
1036
1036
  </shadow-claw-dialog>
1037
1037
  </section>
1038
1038
  </template>
1039
- `,`text/html`),_=g.querySelector(`template`);let v=[];v=_?Array.from(_.content.children):Array.from(g.head.children).concat(Array.from(g.body.children));var y=v;const b=new Set(l.map(e=>e.name)),x=`shadow-claw-tools`;var S=class extends f{static styles=h;static template=y;orchestrator=null;constructor(){super()}async connectedCallback(){let e=await n();this.orchestrator=s.orchestrator,await o.refreshDeclarativeTools(e),this.setupEffects(e),this.bindEventListeners(e)}disconnectedCallback(){super.disconnectedCallback()}bindEventListeners(n){let c=this.shadowRoot;if(!c)return;c.querySelector(`.tools__back-btn`)?.addEventListener(`click`,()=>{this.dispatchEvent(new CustomEvent(`navigate-back`,{bubbles:!0,composed:!0}))}),c.querySelector(`.tools__add-btn`)?.addEventListener(`click`,()=>{let e=c.querySelector(`dialog`);e&&(c.querySelector(`.tools__dialog-form`)?.reset(),e.showModal())}),c.querySelector(`.tools__backup-btn`)?.addEventListener(`click`,()=>{this.handleBackup()});let l=c.querySelector(`.tools__hidden-restore`);c.querySelector(`.tools__restore-btn`)?.addEventListener(`click`,()=>{l instanceof HTMLInputElement&&l.click()}),l?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.handleRestore(n,e.target)}),c.querySelector(`.tools__select-all-btn`)?.addEventListener(`click`,()=>{let e=o.allTools.map(e=>e.name);o.setAllEnabled(n,e);let t=o.declarativeTools.map(e=>e.name);o.setAllDeclarativeEnabled(n,t),i(`All tools enabled`)}),c.querySelector(`.tools__select-none-btn`)?.addEventListener(`click`,()=>{o.setAllEnabled(n,[]),o.setAllDeclarativeEnabled(n,[]),i(`All tools disabled`)});let f=c.querySelector(`.tools__webmcp-toggle`);f&&f.addEventListener(`change`,async()=>{let e=this.orchestrator??s.orchestrator;if(!e){f.checked=!1,a(`Orchestrator is not ready`);return}let t=f.checked;try{await u(e,n,t,{orchestrator:e}),i(t?`WebMCP tool registration enabled`:`WebMCP tool registration disabled`)}catch(e){f.checked=!t,a(`Failed to update WebMCP setting: ${e instanceof Error?e.message:String(e)}`)}});let p=c.querySelector(`.tools__internet-access-toggle`);p&&p.addEventListener(`change`,async()=>{let e=p.checked;try{await s.setVMBashFullInternetAccess(n,e),i(e?`Full internet access enabled for Bash and JavaScript tools`:`Full internet access disabled for Bash and JavaScript tools`)}catch(t){p.checked=!e,a(`Failed to update internet access setting: ${t instanceof Error?t.message:String(t)}`)}});let m=c.querySelector(`.tools__websearch-proxy-toggle`);m?.addEventListener(`change`,async()=>{try{await o.setWebSearchUseProxy(n,m.checked),i(m.checked?`Web Search local proxy enabled`:`Web Search local proxy disabled`)}catch(e){m.checked=!m.checked,a(`Failed to update Web Search proxy setting: ${e instanceof Error?e.message:String(e)}`)}}),c.querySelector(`.tools__save-searchfiles-btn`)?.addEventListener(`click`,async()=>{let e=c.querySelector(`.tools__searchfiles-max-file-bytes-input`),t=c.querySelector(`.tools__searchfiles-max-files-visited-input`),i=c.querySelector(`.tools__searchfiles-skip-dirs-input`),s=parseInt(e?.value||``,10),l=parseInt(t?.value||``,10),u=i?.value??``;try{!isNaN(s)&&s>0&&await o.setSearchFilesMaxFileBytes(n,s),!isNaN(l)&&l>0&&await o.setSearchFilesMaxFilesVisited(n,l),await o.setSearchFilesSkipDirs(n,u),r(`Search Files settings saved`)}catch(e){a(`Failed to save Search Files settings: ${e instanceof Error?e.message:String(e)}`)}}),c.querySelector(`.tools__save-websearch-btn`)?.addEventListener(`click`,async()=>{let e=c.querySelector(`.tools__websearch-proxy-url-input`),t=c.querySelector(`.tools__websearch-url-input`),i=e?.value.trim()||`/proxy`,s=t?.value.trim()||`https://html.duckduckgo.com/html/?q={query}`;try{await o.setWebSearchProxyUrl(n,i),await o.setWebSearchUrl(n,s),r(`Web Search settings saved`)}catch(e){a(`Failed to save Web Search settings: ${e instanceof Error?e.message:String(e)}`)}});let h=c.querySelector(`.tools__webmcp-mode`);h&&h.addEventListener(`change`,async()=>{let e=this.orchestrator??s.orchestrator;if(!e)return;let t=h.value;try{await d(e,n,t,{orchestrator:e}),i(`WebMCP mode set to ${t}`)}catch(e){a(`Failed to update WebMCP mode: ${e instanceof Error?e.message:String(e)}`)}}),c.querySelector(`.tools__save-prompt-btn`)?.addEventListener(`click`,()=>{let e=c.querySelector(`.tools__prompt-area`);e instanceof HTMLTextAreaElement&&(o.setSystemPromptOverride(n,e.value),r(`System prompt override saved`))}),c.querySelector(`.tools__clear-prompt-btn`)?.addEventListener(`click`,()=>{let e=c.querySelector(`.tools__prompt-area`);e instanceof HTMLTextAreaElement&&(e.value=``,o.setSystemPromptOverride(n,``),r(`System prompt override cleared`))});let g=c.querySelector(`.tools__dialog`),_=g?.querySelector(`.tools__dialog-close`),v=g?.querySelector(`.tools__btn-cancel`),y=c.querySelector(`.tools__dialog-form`);_?.addEventListener(`click`,()=>g?.close()),v?.addEventListener(`click`,()=>g?.close()),g?.addEventListener(`click`,e=>{e.target===g&&g.close()}),y?.addEventListener(`submit`,e=>{e.preventDefault(),y&&this.handleAddTool(n,y)});let b=c.querySelector(`.tools__clone-dialog`),x=c.querySelector(`.tools__clone-dialog-close`),S=c.querySelector(`.tools__clone-cancel-btn`),C=c.querySelector(`.tools__clone-dialog-form`);x?.addEventListener(`click`,()=>b?.close()),S?.addEventListener(`click`,()=>b?.close()),b?.addEventListener(`click`,e=>{e.target===b&&b.close()}),C?.addEventListener(`submit`,e=>{e.preventDefault(),C&&this.handleCloneTool(n,C)});let w=c.querySelector(`.tools__profile-dialog`),T=c.querySelector(`.tools__profile-dialog-close`),E=c.querySelector(`.tools__profile-cancel-btn`),D=c.querySelector(`.tools__profile-dialog-form`);T?.addEventListener(`click`,()=>w?.close()),E?.addEventListener(`click`,()=>w?.close()),w?.addEventListener(`click`,e=>{e.target===w&&w.close()}),D?.addEventListener(`submit`,e=>{e.preventDefault(),D&&this.handleSaveProfile(n,D)}),c.querySelector(`.tools__profile-select`)?.addEventListener(`change`,e=>{let t=e.target.value;t?(o.activateProfile(n,t),i(`Profile activated`)):(o.deactivateProfile(n),i(`Profile deactivated`))}),c.querySelector(`.tools__profile-new-btn`)?.addEventListener(`click`,()=>{if(w&&D){D.reset();let n=D.querySelector(`[name="providerId"]`);if(n){n.replaceChildren();let r=document.createElement(`option`);r.value=``,r.textContent=`— Any provider —`,n.append(r);for(let r of e()){let e=t(r);if(e){let t=document.createElement(`option`);t.value=r,t.textContent=e.name,n.appendChild(t)}}}w.showModal()}}),c.querySelector(`.tools__profile-save-btn`)?.addEventListener(`click`,async()=>{o.activeProfileId?(await o.saveToActiveProfile(n),r(`Profile saved`)):c.querySelector(`.tools__profile-new-btn`)?.dispatchEvent(new Event(`click`))}),c.querySelector(`.tools__profile-delete-btn`)?.addEventListener(`click`,async()=>{let e=o.activeProfileId;if(!e){i(`No profile selected`);return}if(e.startsWith(`__builtin_`)){i(`Built-in profiles cannot be deleted`);return}await o.deleteProfile(n,e),r(`Profile deleted`)})}handleBackup(){let e=o.exportBackup(),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),i=document.createElement(`a`);i.href=n,i.download=`shadowclaw-tools-${Date.now()}.json`,i.click(),URL.revokeObjectURL(n),r(`Tools config exported`)}openCloneDialog(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.tools__clone-dialog`),r=t.querySelector(`.tools__clone-dialog-form`);if(!n||!r)return;r.reset();let i=r.querySelector(`[name="source"]`);i&&(i.value=e),n.showModal()}setupEffects(e){let t=this.shadowRoot;if(!t)return;this.addCleanup(p(()=>{o.enabledToolNames,o.customTools,o.declarativeTools,o.declarativeToolNamesEnabled,o.systemPromptOverride,o.profiles,o.activeProfileId,this.updateToolList(e)}));let n=t.querySelector(`.tools__webmcp-toggle`),r=t.querySelector(`.tools__internet-access-toggle`),i=t.querySelector(`.tools__webmcp-mode`);n&&this.addCleanup(p(()=>{s.ready&&(this.orchestrator=s.orchestrator,n.checked=this.orchestrator?.webMcpToolsEnabled===!0,i&&this.orchestrator&&(i.value=m()||`polyfill`))})),r&&this.addCleanup(p(()=>{r.checked=s.vmBashFullInternetAccess}));let a=t.querySelector(`.tools__websearch-proxy-toggle`),c=t.querySelector(`.tools__websearch-proxy-url-input`),l=t.querySelector(`.tools__websearch-url-input`);a&&this.addCleanup(p(()=>{a.checked=o.webSearchUseProxy})),c&&this.addCleanup(p(()=>{document.activeElement!==c&&!c.matches(`:focus`)&&(c.value=o.webSearchProxyUrl)})),l&&this.addCleanup(p(()=>{document.activeElement!==l&&!l.matches(`:focus`)&&(l.value=o.webSearchUrl)}));let u=t.querySelector(`.tools__searchfiles-max-file-bytes-input`),d=t.querySelector(`.tools__searchfiles-max-files-visited-input`),f=t.querySelector(`.tools__searchfiles-skip-dirs-input`);u&&this.addCleanup(p(()=>{document.activeElement!==u&&!u.matches(`:focus`)&&(u.value=String(o.searchFilesMaxFileBytes))})),d&&this.addCleanup(p(()=>{document.activeElement!==d&&!d.matches(`:focus`)&&(d.value=String(o.searchFilesMaxFilesVisited))})),f&&this.addCleanup(p(()=>{document.activeElement!==f&&!f.matches(`:focus`)&&(f.value=o.searchFilesSkipDirs)}))}updateProfileSelector(){let e=this.shadowRoot;if(!e)return;let n=e.querySelector(`.tools__profile-select`);if(!n)return;let r=o.profiles,i=o.activeProfileId;n.replaceChildren();let a=document.createElement(`option`);a.value=``,a.textContent=`— No profile (manual config) —`,n.append(a);for(let e of r){let r=document.createElement(`option`);r.value=e.id;let a=e.id.startsWith(`__builtin_`),o=e.providerId?t(e.providerId)?.name||e.providerId:`any`,s=e.model||`any`;r.textContent=a?`⚡ ${e.name} (${o})`:`${e.name} (${o} / ${s})`,e.id===i&&(r.selected=!0),n.appendChild(r)}let s=e.querySelector(`.tools__profile-delete-btn`);if(s){let e=i?.startsWith(`__builtin_`);s.disabled=!!e,s.title=e?`Built-in profiles cannot be deleted`:``}}updateToolList(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.tools__list`);if(!n)return;let r=o.enabledToolNames,a=o.allTools,s=o.declarativeTools,c=n.querySelectorAll(`.tools__item-checkbox[data-tool]`),l=Array.from(c).map(e=>e.getAttribute(`data-tool`)||``),u=[...a.map(e=>e.name),...s.map(e=>e.name)];if(l.length===u.length&&l.every((e,t)=>e===u[t]))for(let e of c){let t=e.getAttribute(`data-tool`);if(!t)continue;let n=s.some(e=>e.name===t)?o.isDeclarativeToolEnabled(t):r.has(t);e.checked!==n&&(e.checked=n)}else{n.replaceChildren();for(let t of a){let a=!b.has(t.name),s=r.has(t.name),c=t.description.split(`. `)[0],l=document.createElement(`div`);l.className=`tools__item`,l.setAttribute(`role`,`listitem`);let u=document.createElement(`input`);u.type=`checkbox`,u.className=`tools__item-checkbox`,u.setAttribute(`data-tool`,t.name),u.setAttribute(`aria-label`,`Enable ${t.name}`),u.checked=s;let d=document.createElement(`div`);d.className=`tools__item-info`;let f=document.createElement(`div`);f.className=`tools__item-name`,f.textContent=t.name;let p=document.createElement(`div`);p.className=`tools__item-desc`,p.setAttribute(`title`,t.description),p.textContent=c,d.append(f,p);let m=document.createElement(`button`);if(m.className=`tools__item-clone`,m.setAttribute(`data-clone`,t.name),m.setAttribute(`aria-label`,`Clone ${t.name}`),m.setAttribute(`title`,`Clone tool`),m.textContent=`📋`,l.append(u,d),a){let e=document.createElement(`span`);e.className=`tools__item-badge`,e.textContent=`custom`,l.append(e)}l.append(m);let h=null;a&&(h=document.createElement(`button`),h.className=`tools__item-delete`,h.setAttribute(`data-delete`,t.name),h.setAttribute(`aria-label`,`Delete ${t.name}`),h.textContent=`🗑️`,l.append(h)),u?.addEventListener(`change`,()=>{o.setToolEnabled(e,t.name,u.checked)}),m?.addEventListener(`click`,()=>{this.openCloneDialog(t.name)}),h?.addEventListener(`click`,()=>{o.removeCustomTool(e,t.name),i(`Removed custom tool: ${t.name}`)}),n.appendChild(l)}for(let t of s){let r=o.isDeclarativeToolEnabled(t.name),i=t.description.split(`. `)[0],a=document.createElement(`div`);a.className=`tools__item`,a.setAttribute(`role`,`listitem`);let s=document.createElement(`input`);s.type=`checkbox`,s.className=`tools__item-checkbox`,s.setAttribute(`data-tool`,t.name),s.setAttribute(`aria-label`,`Enable ${t.name}`),s.checked=r;let c=document.createElement(`div`);c.className=`tools__item-info`;let l=document.createElement(`div`);l.className=`tools__item-name`,l.textContent=t.name;let u=document.createElement(`div`);u.className=`tools__item-desc`,u.setAttribute(`title`,t.description),u.textContent=i,c.append(l,u);let d=document.createElement(`span`);d.className=`tools__item-badge tools__item-badge--declarative`,d.textContent=`declarative`,a.append(s,c,d),s.addEventListener(`change`,()=>{o.setDeclarativeToolEnabled(e,t.name,s.checked)}),n.appendChild(a)}}let d=t.querySelector(`.tools__count`);d&&(d.textContent=`${(o.enabledTools||[]).length+(o.enabledDeclarativeTools||[]).length} of ${a.length+s.length} enabled`);let f=t.querySelector(`.tools__prompt-area`);f instanceof HTMLTextAreaElement&&document.activeElement!==f&&!f.matches(`:focus`)&&(f.value=o.systemPromptOverride),this.updateProfileSelector()}async handleAddTool(e,t){let n=new FormData(t),i=String(n.get(`name`)||``).trim(),s=String(n.get(`description`)||``).trim(),c=String(n.get(`input_schema`)||``).trim();if(!i||!s){a(`Name and description are required`);return}if(o.allTools.some(e=>e.name===i)){a(`A tool named "${i}" already exists`);return}let l={type:`object`,properties:{}};if(c)try{l=JSON.parse(c)}catch{a(`Invalid JSON in input schema`);return}await o.addCustomTool(e,{name:i,description:s,input_schema:l}),r(`Added custom tool: ${i}`),(this.shadowRoot?.querySelector(`.tools__dialog`))?.close()}async handleCloneTool(e,t){let n=new FormData(t),i=String(n.get(`source`)||``).trim(),s=String(n.get(`name`)||``).trim(),c=String(n.get(`description`)||``).trim();if(!i||!s){a(`Source and new tool name are required`);return}if(!await o.cloneTool(e,i,s,c||void 0)){a(`Clone failed: source not found or name "${s}" already exists.`);return}r(`Cloned "${i}" → "${s}"`),(this.shadowRoot?.querySelector(`.tools__clone-dialog`))?.close()}async handleRestore(e,t){let n=t.files?.[0];if(n){try{let t=await n.text();await o.importBackup(e,t),r(`Tools config restored`)}catch(e){a(`Failed to restore: ${e instanceof Error?e.message:String(e)}`)}t.value=``}}async handleSaveProfile(e,t){let n=new FormData(t),i=String(n.get(`name`)||``).trim(),s=String(n.get(`providerId`)||``).trim(),l=String(n.get(`model`)||``).trim();if(!i){a(`Profile name is required`);return}let u={id:c(),name:i,providerId:s||void 0,model:l||void 0,enabledToolNames:[...o.enabledToolNames],customTools:[...o.customTools],systemPromptOverride:o.systemPromptOverride};await o.addProfile(e,u),await o.activateProfile(e,u.id),r(`Profile "${i}" created and activated`),(this.shadowRoot?.querySelector(`.tools__profile-dialog`))?.close()}};customElements.get(x)||customElements.define(x,S);export{S as ShadowClawTools};
1039
+ `,`text/html`),_=g.querySelector(`template`);let v=[];v=_?Array.from(_.content.children):Array.from(g.head.children).concat(Array.from(g.body.children));var y=v;const b=new Set(o.map(e=>e.name)),x=`shadow-claw-tools`;var S=class extends f{static styles=h;static template=y;orchestrator=null;constructor(){super()}async connectedCallback(){let e=await n();this.orchestrator=r.orchestrator,await i.refreshDeclarativeTools(e),this.setupEffects(e),this.bindEventListeners(e)}disconnectedCallback(){super.disconnectedCallback()}bindEventListeners(n){let a=this.shadowRoot;if(!a)return;a.querySelector(`.tools__back-btn`)?.addEventListener(`click`,()=>{this.dispatchEvent(new CustomEvent(`navigate-back`,{bubbles:!0,composed:!0}))}),a.querySelector(`.tools__add-btn`)?.addEventListener(`click`,()=>{let e=a.querySelector(`dialog`);e&&(a.querySelector(`.tools__dialog-form`)?.reset(),e.showModal())}),a.querySelector(`.tools__backup-btn`)?.addEventListener(`click`,()=>{this.handleBackup()});let o=a.querySelector(`.tools__hidden-restore`);a.querySelector(`.tools__restore-btn`)?.addEventListener(`click`,()=>{o instanceof HTMLInputElement&&o.click()}),o?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.handleRestore(n,e.target)}),a.querySelector(`.tools__select-all-btn`)?.addEventListener(`click`,()=>{let e=i.allTools.map(e=>e.name);i.setAllEnabled(n,e);let t=i.declarativeTools.map(e=>e.name);i.setAllDeclarativeEnabled(n,t),u(`All tools enabled`)}),a.querySelector(`.tools__select-none-btn`)?.addEventListener(`click`,()=>{i.setAllEnabled(n,[]),i.setAllDeclarativeEnabled(n,[]),u(`All tools disabled`)});let f=a.querySelector(`.tools__webmcp-toggle`);f&&f.addEventListener(`change`,async()=>{let e=this.orchestrator??r.orchestrator;if(!e){f.checked=!1,d(`Orchestrator is not ready`);return}let t=f.checked;try{await s(e,n,t,{orchestrator:e}),u(t?`WebMCP tool registration enabled`:`WebMCP tool registration disabled`)}catch(e){f.checked=!t,d(`Failed to update WebMCP setting: ${e instanceof Error?e.message:String(e)}`)}});let p=a.querySelector(`.tools__internet-access-toggle`);p&&p.addEventListener(`change`,async()=>{let e=p.checked;try{await r.setVMBashFullInternetAccess(n,e),u(e?`Full internet access enabled for Bash and JavaScript tools`:`Full internet access disabled for Bash and JavaScript tools`)}catch(t){p.checked=!e,d(`Failed to update internet access setting: ${t instanceof Error?t.message:String(t)}`)}});let m=a.querySelector(`.tools__websearch-proxy-toggle`);m?.addEventListener(`change`,async()=>{try{await i.setWebSearchUseProxy(n,m.checked),u(m.checked?`Web Search local proxy enabled`:`Web Search local proxy disabled`)}catch(e){m.checked=!m.checked,d(`Failed to update Web Search proxy setting: ${e instanceof Error?e.message:String(e)}`)}}),a.querySelector(`.tools__save-searchfiles-btn`)?.addEventListener(`click`,async()=>{let e=a.querySelector(`.tools__searchfiles-max-file-bytes-input`),t=a.querySelector(`.tools__searchfiles-max-files-visited-input`),r=a.querySelector(`.tools__searchfiles-skip-dirs-input`),o=parseInt(e?.value||``,10),s=parseInt(t?.value||``,10),c=r?.value??``;try{!isNaN(o)&&o>0&&await i.setSearchFilesMaxFileBytes(n,o),!isNaN(s)&&s>0&&await i.setSearchFilesMaxFilesVisited(n,s),await i.setSearchFilesSkipDirs(n,c),l(`Search Files settings saved`)}catch(e){d(`Failed to save Search Files settings: ${e instanceof Error?e.message:String(e)}`)}}),a.querySelector(`.tools__save-websearch-btn`)?.addEventListener(`click`,async()=>{let e=a.querySelector(`.tools__websearch-proxy-url-input`),t=a.querySelector(`.tools__websearch-url-input`),r=e?.value.trim()||`/proxy`,o=t?.value.trim()||`https://html.duckduckgo.com/html/?q={query}`;try{await i.setWebSearchProxyUrl(n,r),await i.setWebSearchUrl(n,o),l(`Web Search settings saved`)}catch(e){d(`Failed to save Web Search settings: ${e instanceof Error?e.message:String(e)}`)}});let h=a.querySelector(`.tools__webmcp-mode`);h&&h.addEventListener(`change`,async()=>{let e=this.orchestrator??r.orchestrator;if(!e)return;let t=h.value;try{await c(e,n,t,{orchestrator:e}),u(`WebMCP mode set to ${t}`)}catch(e){d(`Failed to update WebMCP mode: ${e instanceof Error?e.message:String(e)}`)}}),a.querySelector(`.tools__save-prompt-btn`)?.addEventListener(`click`,()=>{let e=a.querySelector(`.tools__prompt-area`);e instanceof HTMLTextAreaElement&&(i.setSystemPromptOverride(n,e.value),l(`System prompt override saved`))}),a.querySelector(`.tools__clear-prompt-btn`)?.addEventListener(`click`,()=>{let e=a.querySelector(`.tools__prompt-area`);e instanceof HTMLTextAreaElement&&(e.value=``,i.setSystemPromptOverride(n,``),l(`System prompt override cleared`))});let g=a.querySelector(`.tools__dialog`),_=g?.querySelector(`.tools__dialog-close`),v=g?.querySelector(`.tools__btn-cancel`),y=a.querySelector(`.tools__dialog-form`);_?.addEventListener(`click`,()=>g?.close()),v?.addEventListener(`click`,()=>g?.close()),g?.addEventListener(`click`,e=>{e.target===g&&g.close()}),y?.addEventListener(`submit`,e=>{e.preventDefault(),y&&this.handleAddTool(n,y)});let b=a.querySelector(`.tools__clone-dialog`),x=a.querySelector(`.tools__clone-dialog-close`),S=a.querySelector(`.tools__clone-cancel-btn`),C=a.querySelector(`.tools__clone-dialog-form`);x?.addEventListener(`click`,()=>b?.close()),S?.addEventListener(`click`,()=>b?.close()),b?.addEventListener(`click`,e=>{e.target===b&&b.close()}),C?.addEventListener(`submit`,e=>{e.preventDefault(),C&&this.handleCloneTool(n,C)});let w=a.querySelector(`.tools__profile-dialog`),T=a.querySelector(`.tools__profile-dialog-close`),E=a.querySelector(`.tools__profile-cancel-btn`),D=a.querySelector(`.tools__profile-dialog-form`);T?.addEventListener(`click`,()=>w?.close()),E?.addEventListener(`click`,()=>w?.close()),w?.addEventListener(`click`,e=>{e.target===w&&w.close()}),D?.addEventListener(`submit`,e=>{e.preventDefault(),D&&this.handleSaveProfile(n,D)}),a.querySelector(`.tools__profile-select`)?.addEventListener(`change`,e=>{let t=e.target.value;t?(i.activateProfile(n,t),u(`Profile activated`)):(i.deactivateProfile(n),u(`Profile deactivated`))}),a.querySelector(`.tools__profile-new-btn`)?.addEventListener(`click`,()=>{if(w&&D){D.reset();let n=D.querySelector(`[name="providerId"]`);if(n){n.replaceChildren();let r=document.createElement(`option`);r.value=``,r.textContent=`— Any provider —`,n.append(r);for(let r of e()){let e=t(r);if(e){let t=document.createElement(`option`);t.value=r,t.textContent=e.name,n.appendChild(t)}}}w.showModal()}}),a.querySelector(`.tools__profile-save-btn`)?.addEventListener(`click`,async()=>{i.activeProfileId?(await i.saveToActiveProfile(n),l(`Profile saved`)):a.querySelector(`.tools__profile-new-btn`)?.dispatchEvent(new Event(`click`))}),a.querySelector(`.tools__profile-delete-btn`)?.addEventListener(`click`,async()=>{let e=i.activeProfileId;if(!e){u(`No profile selected`);return}if(e.startsWith(`__builtin_`)){u(`Built-in profiles cannot be deleted`);return}await i.deleteProfile(n,e),l(`Profile deleted`)})}handleBackup(){let e=i.exportBackup(),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`shadowclaw-tools-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),l(`Tools config exported`)}openCloneDialog(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.tools__clone-dialog`),r=t.querySelector(`.tools__clone-dialog-form`);if(!n||!r)return;r.reset();let i=r.querySelector(`[name="source"]`);i&&(i.value=e),n.showModal()}setupEffects(e){let t=this.shadowRoot;if(!t)return;this.addCleanup(p(()=>{i.enabledToolNames,i.customTools,i.declarativeTools,i.declarativeToolNamesEnabled,i.systemPromptOverride,i.profiles,i.activeProfileId,this.updateToolList(e)}));let n=t.querySelector(`.tools__webmcp-toggle`),a=t.querySelector(`.tools__internet-access-toggle`),o=t.querySelector(`.tools__webmcp-mode`);n&&this.addCleanup(p(()=>{r.ready&&(this.orchestrator=r.orchestrator,n.checked=this.orchestrator?.webMcpToolsEnabled===!0,o&&this.orchestrator&&(o.value=m()||`polyfill`))})),a&&this.addCleanup(p(()=>{a.checked=r.vmBashFullInternetAccess}));let s=t.querySelector(`.tools__websearch-proxy-toggle`),c=t.querySelector(`.tools__websearch-proxy-url-input`),l=t.querySelector(`.tools__websearch-url-input`);s&&this.addCleanup(p(()=>{s.checked=i.webSearchUseProxy})),c&&this.addCleanup(p(()=>{document.activeElement!==c&&!c.matches(`:focus`)&&(c.value=i.webSearchProxyUrl)})),l&&this.addCleanup(p(()=>{document.activeElement!==l&&!l.matches(`:focus`)&&(l.value=i.webSearchUrl)}));let u=t.querySelector(`.tools__searchfiles-max-file-bytes-input`),d=t.querySelector(`.tools__searchfiles-max-files-visited-input`),f=t.querySelector(`.tools__searchfiles-skip-dirs-input`);u&&this.addCleanup(p(()=>{document.activeElement!==u&&!u.matches(`:focus`)&&(u.value=String(i.searchFilesMaxFileBytes))})),d&&this.addCleanup(p(()=>{document.activeElement!==d&&!d.matches(`:focus`)&&(d.value=String(i.searchFilesMaxFilesVisited))})),f&&this.addCleanup(p(()=>{document.activeElement!==f&&!f.matches(`:focus`)&&(f.value=i.searchFilesSkipDirs)}))}updateProfileSelector(){let e=this.shadowRoot;if(!e)return;let n=e.querySelector(`.tools__profile-select`);if(!n)return;let r=i.profiles,a=i.activeProfileId;n.replaceChildren();let o=document.createElement(`option`);o.value=``,o.textContent=`— No profile (manual config) —`,n.append(o);for(let e of r){let r=document.createElement(`option`);r.value=e.id;let i=e.id.startsWith(`__builtin_`),o=e.providerId?t(e.providerId)?.name||e.providerId:`any`,s=e.model||`any`;r.textContent=i?`⚡ ${e.name} (${o})`:`${e.name} (${o} / ${s})`,e.id===a&&(r.selected=!0),n.appendChild(r)}let s=e.querySelector(`.tools__profile-delete-btn`);if(s){let e=a?.startsWith(`__builtin_`);s.disabled=!!e,s.title=e?`Built-in profiles cannot be deleted`:``}}updateToolList(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.tools__list`);if(!n)return;let r=i.enabledToolNames,a=i.allTools,o=i.declarativeTools,s=n.querySelectorAll(`.tools__item-checkbox[data-tool]`),c=Array.from(s).map(e=>e.getAttribute(`data-tool`)||``),l=[...a.map(e=>e.name),...o.map(e=>e.name)];if(c.length===l.length&&c.every((e,t)=>e===l[t]))for(let e of s){let t=e.getAttribute(`data-tool`);if(!t)continue;let n=o.some(e=>e.name===t)?i.isDeclarativeToolEnabled(t):r.has(t);e.checked!==n&&(e.checked=n)}else{n.replaceChildren();for(let t of a){let a=!b.has(t.name),o=r.has(t.name),s=t.description.split(`. `)[0],c=document.createElement(`div`);c.className=`tools__item`,c.setAttribute(`role`,`listitem`);let l=document.createElement(`input`);l.type=`checkbox`,l.className=`tools__item-checkbox`,l.setAttribute(`data-tool`,t.name),l.setAttribute(`aria-label`,`Enable ${t.name}`),l.checked=o;let d=document.createElement(`div`);d.className=`tools__item-info`;let f=document.createElement(`div`);f.className=`tools__item-name`,f.textContent=t.name;let p=document.createElement(`div`);p.className=`tools__item-desc`,p.setAttribute(`title`,t.description),p.textContent=s,d.append(f,p);let m=document.createElement(`button`);if(m.className=`tools__item-clone`,m.setAttribute(`data-clone`,t.name),m.setAttribute(`aria-label`,`Clone ${t.name}`),m.setAttribute(`title`,`Clone tool`),m.textContent=`📋`,c.append(l,d),a){let e=document.createElement(`span`);e.className=`tools__item-badge`,e.textContent=`custom`,c.append(e)}c.append(m);let h=null;a&&(h=document.createElement(`button`),h.className=`tools__item-delete`,h.setAttribute(`data-delete`,t.name),h.setAttribute(`aria-label`,`Delete ${t.name}`),h.textContent=`🗑️`,c.append(h)),l?.addEventListener(`change`,()=>{i.setToolEnabled(e,t.name,l.checked)}),m?.addEventListener(`click`,()=>{this.openCloneDialog(t.name)}),h?.addEventListener(`click`,()=>{i.removeCustomTool(e,t.name),u(`Removed custom tool: ${t.name}`)}),n.appendChild(c)}for(let t of o){let r=i.isDeclarativeToolEnabled(t.name),a=t.description.split(`. `)[0],o=document.createElement(`div`);o.className=`tools__item`,o.setAttribute(`role`,`listitem`);let s=document.createElement(`input`);s.type=`checkbox`,s.className=`tools__item-checkbox`,s.setAttribute(`data-tool`,t.name),s.setAttribute(`aria-label`,`Enable ${t.name}`),s.checked=r;let c=document.createElement(`div`);c.className=`tools__item-info`;let l=document.createElement(`div`);l.className=`tools__item-name`,l.textContent=t.name;let u=document.createElement(`div`);u.className=`tools__item-desc`,u.setAttribute(`title`,t.description),u.textContent=a,c.append(l,u);let d=document.createElement(`span`);d.className=`tools__item-badge tools__item-badge--declarative`,d.textContent=`declarative`,o.append(s,c,d),s.addEventListener(`change`,()=>{i.setDeclarativeToolEnabled(e,t.name,s.checked)}),n.appendChild(o)}}let d=t.querySelector(`.tools__count`);d&&(d.textContent=`${(i.enabledTools||[]).length+(i.enabledDeclarativeTools||[]).length} of ${a.length+o.length} enabled`);let f=t.querySelector(`.tools__prompt-area`);f instanceof HTMLTextAreaElement&&document.activeElement!==f&&!f.matches(`:focus`)&&(f.value=i.systemPromptOverride),this.updateProfileSelector()}async handleAddTool(e,t){let n=new FormData(t),r=String(n.get(`name`)||``).trim(),a=String(n.get(`description`)||``).trim(),o=String(n.get(`input_schema`)||``).trim();if(!r||!a){d(`Name and description are required`);return}if(i.allTools.some(e=>e.name===r)){d(`A tool named "${r}" already exists`);return}let s={type:`object`,properties:{}};if(o)try{s=JSON.parse(o)}catch{d(`Invalid JSON in input schema`);return}await i.addCustomTool(e,{name:r,description:a,input_schema:s}),l(`Added custom tool: ${r}`),(this.shadowRoot?.querySelector(`.tools__dialog`))?.close()}async handleCloneTool(e,t){let n=new FormData(t),r=String(n.get(`source`)||``).trim(),a=String(n.get(`name`)||``).trim(),o=String(n.get(`description`)||``).trim();if(!r||!a){d(`Source and new tool name are required`);return}if(!await i.cloneTool(e,r,a,o||void 0)){d(`Clone failed: source not found or name "${a}" already exists.`);return}l(`Cloned "${r}" → "${a}"`),(this.shadowRoot?.querySelector(`.tools__clone-dialog`))?.close()}async handleRestore(e,t){let n=t.files?.[0];if(n){try{let t=await n.text();await i.importBackup(e,t),l(`Tools config restored`)}catch(e){d(`Failed to restore: ${e instanceof Error?e.message:String(e)}`)}t.value=``}}async handleSaveProfile(e,t){let n=new FormData(t),r=String(n.get(`name`)||``).trim(),o=String(n.get(`providerId`)||``).trim(),s=String(n.get(`model`)||``).trim();if(!r){d(`Profile name is required`);return}let c={id:a(),name:r,providerId:o||void 0,model:s||void 0,enabledToolNames:[...i.enabledToolNames],customTools:[...i.customTools],systemPromptOverride:i.systemPromptOverride};await i.addProfile(e,c),await i.activateProfile(e,c.id),l(`Profile "${r}" created and activated`),(this.shadowRoot?.querySelector(`.tools__profile-dialog`))?.close()}};customElements.get(x)||customElements.define(x,S);export{S as ShadowClawTools};
@@ -1,4 +1,4 @@
1
- import{f as e,n as t,r as n}from"./config-CrHchneq.js";import{n as r}from"./txPromise-EBECky1b.js";import{t as i}from"./getConfig-D89uJgo5.js";import{a,r as o,s}from"./toast-HAq8XWFj.js";import{A as c,O as l,S as u,k as d,t as f}from"./orchestrator-D-xlXG92.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-rHYr4nfu.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{f as e,n as t,r as n}from"./config-CrHchneq.js";import{n as r}from"./txPromise-EBECky1b.js";import{t as i}from"./getConfig-D89uJgo5.js";import{A as a,O as o,S as s,k as c,t as l}from"./orchestrator-DHjdLtqa.js";import{a as u,r as d,s as f}from"./toast-BXgUfbyh.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-BJCrpFdp.js";const h=new CSSStyleSheet;h.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -164,4 +164,4 @@ import{f as e,n as t,r as n}from"./config-CrHchneq.js";import{n as r}from"./txPr
164
164
  </div>
165
165
  </div>
166
166
  </template>
167
- `,`text/html`),_=g.querySelector(`template`);let v=[];v=_?Array.from(_.content.children):Array.from(g.head.children).concat(Array.from(g.body.children));var y=v;const b=`shadow-claw-webvm`;var x=class extends p{static styles=h;static template=y;db=null;orchestrator=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.bindEventListeners(),this.setupEffects()}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-action="save-vm-boot-mode"]`)?.addEventListener(`click`,()=>this.saveVMBootMode()),e.querySelector(`[data-action="save-vm-bash-timeout"]`)?.addEventListener(`click`,()=>this.saveVMBashTimeout()),e.querySelector(`[data-action="save-vm-boot-host"]`)?.addEventListener(`click`,()=>this.saveVMBootHost()),e.querySelector(`[data-action="save-vm-network-relay-url"]`)?.addEventListener(`click`,()=>this.saveVMNetworkRelayURL()))}setupEffects(){m(()=>{f.ready&&(async()=>{this.db=await r(),this.orchestrator=f.orchestrator,await this.render()})()})}async render(){if(!this.db)return;let r=this.shadowRoot;if(r)try{let a=r.querySelector(`[data-setting="vm-boot-mode-select"]`),o=await i(this.db,n.VM_BOOT_MODE);a&&(a.value=o===`disabled`||o===`9p`||o===`ext2`||o===`auto`?o:`disabled`);let s=r.querySelector(`[data-setting="vm-bash-timeout-input"]`),c=await i(this.db,n.VM_BASH_TIMEOUT_SEC),l=Number(c);s&&(s.value=String(Number.isFinite(l)?Math.min(Math.max(Math.floor(l),1),t):900));let u=r.querySelector(`[data-setting="vm-boot-host-input"]`),d=await i(this.db,n.VM_BOOT_HOST);u&&(u.value=typeof d==`string`?d.trim():e);let f=r.querySelector(`[data-setting="vm-network-relay-url-input"]`),p=await i(this.db,n.VM_NETWORK_RELAY_URL);f&&typeof p==`string`&&(f.value=p.trim())}catch(e){console.warn(`Could not load WebVM settings:`,e)}}async saveVMBashTimeout(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let n=e.querySelector(`[data-setting="vm-bash-timeout-input"]`),r=Number(n?.value);if(!Number.isFinite(r)){s(`Please enter a valid timeout in seconds`,3e3);return}let i=Math.min(Math.max(Math.floor(r),1),t);n&&(n.value=String(i));try{await u(this.orchestrator,this.db,i),a(`WebVM bash timeout saved`,3e3)}catch(e){o(`Error saving WebVM bash timeout: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMBootHost(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-boot-host-input"]`)?.value?.trim()||``;if(t)try{let e=new URL(t);if(e.protocol!==`http:`&&e.protocol!==`https:`)throw Error(`Boot host must use http:// or https://`)}catch{s(`Please enter a valid HTTP(S) boot host URL`,3500);return}try{await l(this.orchestrator,this.db,t),a(`WebVM boot host saved`,3e3)}catch(e){o(`Error saving WebVM boot host: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMBootMode(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-boot-mode-select"]`)?.value||`disabled`,n=t===`disabled`||t===`9p`||t===`ext2`||t===`auto`?t:`disabled`;try{await d(this.orchestrator,this.db,n),a(`WebVM boot mode saved`,3e3)}catch(e){o(`Error saving WebVM mode: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMNetworkRelayURL(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-network-relay-url-input"]`),n=t?.value?.trim()||``;if(n)try{let e=new URL(n);if(e.protocol!==`ws:`&&e.protocol!==`wss:`)throw Error(`Relay URL must use ws:// or wss://`)}catch{s(`Please enter a valid ws:// or wss:// relay URL`,3500);return}t&&(t.value=n);try{await c(this.orchestrator,this.db,n),a(`WebVM relay URL saved`,3e3)}catch(e){o(`Error saving WebVM relay URL: `+(e instanceof Error?e.message:String(e)),6e3)}}};customElements.get(b)||customElements.define(b,x);export{x as ShadowClawWebvm};
167
+ `,`text/html`),_=g.querySelector(`template`);let v=[];v=_?Array.from(_.content.children):Array.from(g.head.children).concat(Array.from(g.body.children));var y=v;const b=`shadow-claw-webvm`;var x=class extends p{static styles=h;static template=y;db=null;orchestrator=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.bindEventListeners(),this.setupEffects()}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-action="save-vm-boot-mode"]`)?.addEventListener(`click`,()=>this.saveVMBootMode()),e.querySelector(`[data-action="save-vm-bash-timeout"]`)?.addEventListener(`click`,()=>this.saveVMBashTimeout()),e.querySelector(`[data-action="save-vm-boot-host"]`)?.addEventListener(`click`,()=>this.saveVMBootHost()),e.querySelector(`[data-action="save-vm-network-relay-url"]`)?.addEventListener(`click`,()=>this.saveVMNetworkRelayURL()))}setupEffects(){m(()=>{l.ready&&(async()=>{this.db=await r(),this.orchestrator=l.orchestrator,await this.render()})()})}async render(){if(!this.db)return;let r=this.shadowRoot;if(r)try{let a=r.querySelector(`[data-setting="vm-boot-mode-select"]`),o=await i(this.db,n.VM_BOOT_MODE);a&&(a.value=o===`disabled`||o===`9p`||o===`ext2`||o===`auto`?o:`disabled`);let s=r.querySelector(`[data-setting="vm-bash-timeout-input"]`),c=await i(this.db,n.VM_BASH_TIMEOUT_SEC),l=Number(c);s&&(s.value=String(Number.isFinite(l)?Math.min(Math.max(Math.floor(l),1),t):900));let u=r.querySelector(`[data-setting="vm-boot-host-input"]`),d=await i(this.db,n.VM_BOOT_HOST);u&&(u.value=typeof d==`string`?d.trim():e);let f=r.querySelector(`[data-setting="vm-network-relay-url-input"]`),p=await i(this.db,n.VM_NETWORK_RELAY_URL);f&&typeof p==`string`&&(f.value=p.trim())}catch(e){console.warn(`Could not load WebVM settings:`,e)}}async saveVMBashTimeout(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let n=e.querySelector(`[data-setting="vm-bash-timeout-input"]`),r=Number(n?.value);if(!Number.isFinite(r)){f(`Please enter a valid timeout in seconds`,3e3);return}let i=Math.min(Math.max(Math.floor(r),1),t);n&&(n.value=String(i));try{await s(this.orchestrator,this.db,i),u(`WebVM bash timeout saved`,3e3)}catch(e){d(`Error saving WebVM bash timeout: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMBootHost(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-boot-host-input"]`)?.value?.trim()||``;if(t)try{let e=new URL(t);if(e.protocol!==`http:`&&e.protocol!==`https:`)throw Error(`Boot host must use http:// or https://`)}catch{f(`Please enter a valid HTTP(S) boot host URL`,3500);return}try{await o(this.orchestrator,this.db,t),u(`WebVM boot host saved`,3e3)}catch(e){d(`Error saving WebVM boot host: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMBootMode(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-boot-mode-select"]`)?.value||`disabled`,n=t===`disabled`||t===`9p`||t===`ext2`||t===`auto`?t:`disabled`;try{await c(this.orchestrator,this.db,n),u(`WebVM boot mode saved`,3e3)}catch(e){d(`Error saving WebVM mode: `+(e instanceof Error?e.message:String(e)),6e3)}}async saveVMNetworkRelayURL(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="vm-network-relay-url-input"]`),n=t?.value?.trim()||``;if(n)try{let e=new URL(n);if(e.protocol!==`ws:`&&e.protocol!==`wss:`)throw Error(`Relay URL must use ws:// or wss://`)}catch{f(`Please enter a valid ws:// or wss:// relay URL`,3500);return}t&&(t.value=n);try{await a(this.orchestrator,this.db,n),u(`WebVM relay URL saved`,3e3)}catch(e){d(`Error saving WebVM relay URL: `+(e instanceof Error?e.message:String(e)),6e3)}}};customElements.get(b)||customElements.define(b,x);export{x as ShadowClawWebvm};
@@ -0,0 +1 @@
1
+ import{r as e}from"./config-CrHchneq.js";import{Lt as t,M as n,t as r}from"./orchestrator-DHjdLtqa.js";import{t as i}from"./tools-DvckJZG2.js";import{t as a}from"./setConfig-DFMYnYLE.js";import{t as o}from"./effect-BJCrpFdp.js";import{i as s,n as c,r as l}from"./webmcp-DAjmliCx.js";const u={name:`activate_skill`,description:`Load the full instructions for a workspace skill when its description matches the current task.`,input_schema:{type:`object`,properties:{name:{type:`string`,description:`The exact skill name from the available skills catalog.`}},required:[`name`]}};function d(e,a){if(typeof e.webMcpEffectCleanup==`function`&&(e.webMcpEffectCleanup(),e.webMcpEffectCleanup=null),!e.webMcpToolsEnabled){s();return}e.webMcpEffectCleanup=o(()=>{let o=r.activeGroupId,l=i.allTools,d=i.enabledTools;i.declarativeTools,i.declarativeToolNamesEnabled;let f=r.groups.find(e=>e.groupId===o);e.webMcpRegistrationLock=e.webMcpRegistrationLock.then(async()=>{s(),await new Promise(e=>setTimeout(e,0));let r=[];try{r=await i.refreshDeclarativeTools(a,o)}catch{}let p=r.filter(e=>i.isDeclarativeToolEnabled(e.name)),m=[...l,...r],h=f?.toolTags&&f.toolTags.length>0?m.filter(e=>f.toolTags.includes(e.name)):[...d,...p],g={skills:[]};try{g=await t(a,o)}catch{}g.skills.length>0&&!h.some(e=>e.name===u.name)&&(h=[...h,u]),await c(e.agentWorker,async t=>{await n(e,a,t)},o,h)}).catch(e=>{console.error(`WebMCP registration failed:`,e)})})}async function f(t,n,r,i){s(),l(r),await a(n,e.WEBMCP_MODE,r),d(i.orchestrator,n)}async function p(t,n,r,i){t.webMcpToolsEnabled=!!r,await a(n,e.WEBMCP_TOOLS_ENABLED,t.webMcpToolsEnabled?`true`:`false`),d(i.orchestrator,n)}export{u as i,p as n,d as r,f as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./dist-B9m1QM9v.js";const n=new class{#e=new t.State(0);#t=new Map;#n=new t.State([]);clear(){this.#t.forEach((e,t)=>this.clearTimer(t)),this.#t.clear(),this.#n.set([])}clearTimer(e){let t=this.#t.get(e);t?.timeoutId&&clearTimeout(t.timeoutId),this.#t.delete(e)}dismiss(e){this.clearTimer(e),this.#n.set(this.#n.get().filter(t=>t.id!==e))}pause(e){let t=this.#t.get(e);!t||!t.timeoutId||(clearTimeout(t.timeoutId),t.timeoutId=void 0,t.remaining=Math.max(0,t.remaining-(Date.now()-t.startedAt)),this.#t.set(e,t))}resolveAction(e){if(!(!e||typeof e.label!=`string`||typeof e.onClick!=`function`))return e}resolveDuration(e){return typeof e!=`number`||Number.isNaN(e)||e<0?4e3:e}resolveType(e){return e&&[`success`,`warning`,`error`,`info`].includes(e)?e:`info`}resume(e){let t=this.#t.get(e);!t||t.timeoutId||t.remaining<=0||this.scheduleDismiss(e,t.remaining)}scheduleDismiss(e,t){this.clearTimer(e);let n=globalThis.setTimeout(()=>{this.dismiss(e)},t);this.#t.set(e,{timeoutId:n,remaining:t,startedAt:Date.now()})}show(e,t={}){let n=this.#e.get()+1;this.#e.set(n);let r={id:n,message:e,type:this.resolveType(t.type),duration:this.resolveDuration(t.duration),action:this.resolveAction(t.action),createdAt:Date.now()},i=[...this.#n.get(),r];if(i.length>5){let e=i[0];this.clearTimer(e.id),this.#n.set(i.slice(1))}else this.#n.set(i);return r.duration>0&&this.scheduleDismiss(r.id,r.duration),r.id}get toasts(){return this.#n.get()}async runAction(e){let t=this.#n.get().find(t=>t.id===e);t?.action&&await t.action.onClick()}};var r=e({clearAllToasts:()=>u,dismissToast:()=>l,showError:()=>o,showInfo:()=>c,showSuccess:()=>a,showToast:()=>i,showWarning:()=>s});function i(e,t={}){return n.show(e,t)}function a(e,t=4e3){return n.show(e,{type:`success`,duration:t})}function o(e,t=5e3){return n.show(e,{type:`error`,duration:t})}function s(e,t=4500){return n.show(e,{type:`warning`,duration:t})}function c(e,t=4e3){return n.show(e,{type:`info`,duration:t})}function l(e){n.dismiss(e)}function u(){n.clear()}export{a,r as c,c as i,n as l,l as n,i as o,o as r,s,u as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{o as t,r as n}from"./config-CrHchneq.js";import{t as r}from"./getConfig-D89uJgo5.js";import{t as i}from"./dist-B9m1QM9v.js";import{t as a}from"./getGroupDir-P1h9wl6S.js";import{t as o}from"./setConfig-DFMYnYLE.js";import{t as s}from"./tools-C8x3nmo4.js";import"./tools-COduyYJ0.js";function c(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);return{dirs:t,filename:t.pop()||``}}async function l(e,t,n){let r=await a(e,t),{dirs:i,filename:o}=c(n),s=r;for(let e of i)s=await s.getDirectoryHandle(e);let l=await s.getFileHandle(o);try{let e=await l.createSyncAccessHandle(),t=e.getSize(),n=new Uint8Array(t);return e.read(n,{at:0}),e.close(),new TextDecoder(`utf-8`).decode(n)}catch{return(await l.getFile()).text()}}const u={id:`__builtin_default`,name:`Default`,providerId:`prompt_api`,enabledToolNames:[`javascript`,`list_files`,`open_file`,`read_file`,`write_file`],customTools:[],systemPromptOverride:"You are a helpful coding assistant.\nContent intended to be rendered as a `Page` (HTML or Markdown) SHOULD include frontmatter (title, created, updated, and slug).\nHTML content intended to be rendered as a `Page` SHOULD USE `<article><h2>${subTitle}</h2>...</article>` for its main body content."},d=/^[a-z][a-z0-9_]{0,63}$/;function f(e,t){if(!t||typeof t!=`object`)throw Error(`Tool at ${e} must be a JSON object`);let n=t,r=typeof n.name==`string`?n.name.trim():``,i=typeof n.description==`string`?n.description.trim():``,a=n.input_schema??n.parameters,o=n.execution??n.evaluation;if(!d.test(r))throw Error(`Tool name is invalid: ${r||`(missing)`}`);if(!i)throw Error(`Tool ${r} requires a description`);if(!a||typeof a!=`object`)throw Error(`Tool ${r} requires input_schema`);if(!o||typeof o!=`object`)throw Error(`Tool ${r} requires execution`);let s=o,c=s.type;if(c!==`bash`&&c!==`javascript`&&c!==`tool`)throw Error(`Tool ${r} execution type must be bash, javascript, or tool`);if(c===`tool`){if(typeof s.name!=`string`||!d.test(s.name))throw Error(`Tool ${r} execution requires a valid tool name`);return{name:r,description:i,input_schema:a,execution:{type:c,name:s.name,...s.input&&typeof s.input==`object`?{input:s.input}:{}},path:e}}let l=c===`bash`?`command`:`code`,u=s[l]??s.expression;if(typeof u!=`string`||u.trim()===``)throw Error(`Tool ${r} execution requires ${l}`);return{name:r,description:i,input_schema:a,execution:{type:c,[l]:u},path:e}}async function p(e,n=t){let r=[],i=[],o=n===`br:main`?[t]:[n,t];for(let t of o)try{let n=await a(e,t),o=[];async function s(e,t){for await(let[n,r]of e.entries()){let e=`${t}/${n}`;r.kind===`directory`?await s(r,e):n.endsWith(`.json`)&&e.startsWith(`.agents/tools/`)&&o.push(e)}}try{await s(await(await n.getDirectoryHandle(`.agents`)).getDirectoryHandle(`tools`),`.agents/tools`)}catch{continue}for(let n of o.sort())try{let i=f(n,JSON.parse(await l(e,t,n)));r.some(e=>e.name===i.name)||r.push(i)}catch(e){i.push(e instanceof Error?e.message:String(e))}}catch{}return{tools:r,diagnostics:i}}async function m(e,i=t,a){try{let{tools:t}=await p(e,i),o=t.find(e=>e.name===a)||null;if(!o)return null;let s=await r(e,n.DECLARATIVE_TOOLS_ENABLED);return Array.isArray(s)&&!s.includes(a)?null:o}catch{return null}}var h=e({ToolsStore:()=>g,toolsStore:()=>_}),g=class{_activeProfile;_activeProfileId;_allTools;_customTools;_declarativeTools;_declarativeToolNamesEnabled;_enabledDeclarativeTools;_enabledToolNames;_enabledTools;_profiles;_systemPromptOverride;_webSearchProxyUrl;_webSearchUrl;_webSearchUseProxy;_searchFilesMaxFileBytes;_searchFilesMaxFilesVisited;_searchFilesSkipDirs;constructor(){this._enabledToolNames=new i.State(new Set(u.enabledToolNames)),this._customTools=new i.State([]),this._declarativeTools=new i.State([]),this._declarativeToolNamesEnabled=new i.State(null),this._systemPromptOverride=new i.State(``),this._profiles=new i.State([]),this._activeProfileId=new i.State(u.id),this._webSearchUseProxy=new i.State(!1),this._webSearchProxyUrl=new i.State(`/proxy`),this._webSearchUrl=new i.State(`https://html.duckduckgo.com/html/?q={query}`),this._searchFilesMaxFileBytes=new i.State(512*1024),this._searchFilesMaxFilesVisited=new i.State(1e3),this._searchFilesSkipDirs=new i.State(`.git,node_modules,dist,dist-electron,.cache,.nx,.turbo,__pycache__,.venv,venv`),this._allTools=new i.Computed(()=>[...s,...this._customTools.get()]),this._enabledTools=new i.Computed(()=>{let e=this._enabledToolNames.get();return this._allTools.get().filter(t=>e.has(t.name))}),this._enabledDeclarativeTools=new i.Computed(()=>{let e=this._declarativeTools.get(),t=this._declarativeToolNamesEnabled.get();return t===null?e:e.filter(e=>t.has(e.name))}),this._activeProfile=new i.Computed(()=>{let e=this._activeProfileId.get();return e?u.id===e?u:this._profiles.get().find(t=>t.id===e)||null:null})}get activeProfile(){return this._activeProfile.get()}get activeProfileId(){return this._activeProfileId.get()}get allTools(){return this._allTools.get()}get customTools(){return this._customTools.get()}get declarativeTools(){return this._declarativeTools.get()}get declarativeToolNamesEnabled(){return this._declarativeToolNamesEnabled.get()}get enabledDeclarativeTools(){return this._enabledDeclarativeTools.get()}get enabledToolNames(){return this._enabledToolNames.get()}get enabledTools(){return this._enabledTools.get()}isDeclarativeToolEnabled(e){let t=this._declarativeToolNamesEnabled.get();return t===null||t.has(e)}async refreshDeclarativeTools(e,t){try{let n=await p(e,t||`br:main`),r=this.allTools,i=(n?.tools||[]).filter(e=>!r.some(t=>t.name===e.name)),a=this._declarativeTools.get();return a.length===i.length&&a.every((e,t)=>e.name===i[t].name&&e.description===i[t].description&&JSON.stringify(e.execution)===JSON.stringify(i[t].execution))||this._declarativeTools.set(i),i}catch{return this._declarativeTools.get().length>0&&this._declarativeTools.set([]),[]}}async setDeclarativeToolEnabled(e,t,r){let i=this._declarativeToolNamesEnabled.get(),a=this._declarativeTools.get(),s=new Set(i===null?a.map(e=>e.name):i);r?s.add(t):s.delete(t),this._declarativeToolNamesEnabled.set(s),await o(e,n.DECLARATIVE_TOOLS_ENABLED,Array.from(s))}async setAllDeclarativeEnabled(e,t){let r=new Set(t);this._declarativeToolNamesEnabled.set(r),await o(e,n.DECLARATIVE_TOOLS_ENABLED,t)}exportBackup(){return JSON.stringify({enabledTools:[...this._enabledToolNames.get()],customTools:this._customTools.get(),declarativeToolsEnabled:this._declarativeToolNamesEnabled.get()?Array.from(this._declarativeToolNamesEnabled.get()):null,systemPromptOverride:this._systemPromptOverride.get(),profiles:this._profiles.get(),activeProfileId:this._activeProfileId.get(),webSearchUseProxy:this._webSearchUseProxy.get(),webSearchProxyUrl:this._webSearchProxyUrl.get(),webSearchUrl:this._webSearchUrl.get(),searchFilesMaxFileBytes:this._searchFilesMaxFileBytes.get(),searchFilesMaxFilesVisited:this._searchFilesMaxFilesVisited.get(),searchFilesSkipDirs:this._searchFilesSkipDirs.get()},null,2)}findProfilesForProvider(e,t){return this.profiles.filter(n=>!(n.providerId&&n.providerId!==e||n.model&&n.model!==t))}get profiles(){return[u,...this._profiles.get()]}get systemPromptOverride(){return this._systemPromptOverride.get()}get webSearchProxyUrl(){return this._webSearchProxyUrl.get()}get webSearchUrl(){return this._webSearchUrl.get()}get webSearchUseProxy(){return this._webSearchUseProxy.get()}get searchFilesMaxFileBytes(){return this._searchFilesMaxFileBytes.get()}get searchFilesMaxFilesVisited(){return this._searchFilesMaxFilesVisited.get()}get searchFilesSkipDirs(){return this._searchFilesSkipDirs.get()}get searchFilesSkipDirsSet(){return new Set(this._searchFilesSkipDirs.get().split(`,`).map(e=>e.trim()).filter(Boolean))}async activateProfile(e,t){let r=this.profiles.find(e=>e.id===t);r&&(this._activeProfileId.set(t),this._enabledToolNames.set(new Set(r.enabledToolNames)),this._customTools.set(r.customTools),this._systemPromptOverride.set(r.systemPromptOverride||``),await Promise.all([o(e,n.ACTIVE_TOOL_PROFILE,t),o(e,n.ENABLED_TOOLS,r.enabledToolNames),o(e,n.CUSTOM_TOOLS,r.customTools),o(e,n.SYSTEM_PROMPT_OVERRIDE,r.systemPromptOverride||``)]))}async addCustomTool(e,t){let r=[...this._customTools.get(),t];this._customTools.set(r);let i=new Set(this._enabledToolNames.get());i.add(t.name),this._enabledToolNames.set(i),await Promise.all([o(e,n.CUSTOM_TOOLS,r),o(e,n.ENABLED_TOOLS,[...i])])}async addProfile(e,t){let r=[...this._profiles.get(),t];this._profiles.set(r),await o(e,n.TOOL_PROFILES,r)}async cloneTool(e,t,n,r){let i=this.allTools.find(e=>e.name===t);if(!i||this.allTools.some(e=>e.name===n))return!1;let a={name:n,description:r||i.description,input_schema:JSON.parse(JSON.stringify(i.input_schema))};return await this.addCustomTool(e,a),!0}async deactivateProfile(e){this._activeProfileId.set(null),await o(e,n.ACTIVE_TOOL_PROFILE,null)}async deleteProfile(e,t){if(t===u.id)return;let r=this._profiles.get().filter(e=>e.id!==t);this._profiles.set(r),this._activeProfileId.get()===t&&(this._activeProfileId.set(null),await o(e,n.ACTIVE_TOOL_PROFILE,null)),await o(e,n.TOOL_PROFILES,r)}async importBackup(e,t){let r=JSON.parse(t);Array.isArray(r.enabledTools)&&(this._enabledToolNames.set(new Set(r.enabledTools)),await o(e,n.ENABLED_TOOLS,r.enabledTools)),Array.isArray(r.customTools)&&(this._customTools.set(r.customTools),await o(e,n.CUSTOM_TOOLS,r.customTools)),typeof r.systemPromptOverride==`string`&&(this._systemPromptOverride.set(r.systemPromptOverride),await o(e,n.SYSTEM_PROMPT_OVERRIDE,r.systemPromptOverride)),Array.isArray(r.profiles)&&(this._profiles.set(r.profiles),await o(e,n.TOOL_PROFILES,r.profiles)),(typeof r.activeProfileId==`string`||r.activeProfileId===null)&&(this._activeProfileId.set(r.activeProfileId),await o(e,n.ACTIVE_TOOL_PROFILE,r.activeProfileId)),typeof r.webSearchUseProxy==`boolean`&&(this._webSearchUseProxy.set(r.webSearchUseProxy),await o(e,n.WEB_SEARCH_USE_PROXY,r.webSearchUseProxy?`true`:`false`)),typeof r.webSearchProxyUrl==`string`&&(this._webSearchProxyUrl.set(r.webSearchProxyUrl),await o(e,n.WEB_SEARCH_PROXY_URL,r.webSearchProxyUrl)),typeof r.webSearchUrl==`string`&&(this._webSearchUrl.set(r.webSearchUrl),await o(e,n.WEB_SEARCH_URL,r.webSearchUrl)),typeof r.searchFilesMaxFileBytes==`number`&&r.searchFilesMaxFileBytes>0&&(this._searchFilesMaxFileBytes.set(r.searchFilesMaxFileBytes),await o(e,n.SEARCH_FILES_MAX_FILE_BYTES,String(r.searchFilesMaxFileBytes))),typeof r.searchFilesMaxFilesVisited==`number`&&r.searchFilesMaxFilesVisited>0&&(this._searchFilesMaxFilesVisited.set(r.searchFilesMaxFilesVisited),await o(e,n.SEARCH_FILES_MAX_FILES_VISITED,String(r.searchFilesMaxFilesVisited))),typeof r.searchFilesSkipDirs==`string`&&(this._searchFilesSkipDirs.set(r.searchFilesSkipDirs),await o(e,n.SEARCH_FILES_SKIP_DIRS,r.searchFilesSkipDirs)),Array.isArray(r.declarativeToolsEnabled)?(this._declarativeToolNamesEnabled.set(new Set(r.declarativeToolsEnabled)),await o(e,n.DECLARATIVE_TOOLS_ENABLED,r.declarativeToolsEnabled)):r.declarativeToolsEnabled===null&&(this._declarativeToolNamesEnabled.set(null),await o(e,n.DECLARATIVE_TOOLS_ENABLED,null))}async load(e){let[t,i,a,o,s,c,l,u,d,f,p,m]=await Promise.all([r(e,n.ENABLED_TOOLS),r(e,n.CUSTOM_TOOLS),r(e,n.SYSTEM_PROMPT_OVERRIDE),r(e,n.TOOL_PROFILES),r(e,n.ACTIVE_TOOL_PROFILE),r(e,n.WEB_SEARCH_USE_PROXY),r(e,n.WEB_SEARCH_PROXY_URL),r(e,n.WEB_SEARCH_URL),r(e,n.SEARCH_FILES_MAX_FILE_BYTES),r(e,n.SEARCH_FILES_MAX_FILES_VISITED),r(e,n.SEARCH_FILES_SKIP_DIRS),r(e,n.DECLARATIVE_TOOLS_ENABLED)]);if(Array.isArray(t)&&this._enabledToolNames.set(new Set(t)),Array.isArray(i)&&this._customTools.set(i),Array.isArray(m)&&this._declarativeToolNamesEnabled.set(new Set(m)),typeof a==`string`&&this._systemPromptOverride.set(a),Array.isArray(o)&&this._profiles.set(o),typeof s==`string`&&this._activeProfileId.set(s),c!=null){let e=String(c).toLowerCase();this._webSearchUseProxy.set(e===`true`||e===`1`)}if(typeof l==`string`&&l.trim().length>0&&this._webSearchProxyUrl.set(l.trim()),typeof u==`string`&&u.trim().length>0&&this._webSearchUrl.set(u.trim()),d!=null){let e=Number(d);Number.isFinite(e)&&e>0&&this._searchFilesMaxFileBytes.set(e)}if(f!=null){let e=Number(f);Number.isFinite(e)&&e>0&&this._searchFilesMaxFilesVisited.set(e)}typeof p==`string`&&p.trim().length>0&&this._searchFilesSkipDirs.set(p.trim())}async setWebSearchProxyUrl(e,t){let r=t.trim()||`/proxy`;this._webSearchProxyUrl.set(r),await o(e,n.WEB_SEARCH_PROXY_URL,r)}async setWebSearchUrl(e,t){let r=t.trim()||`https://html.duckduckgo.com/html/?q={query}`;this._webSearchUrl.set(r),await o(e,n.WEB_SEARCH_URL,r)}async setWebSearchUseProxy(e,t){let r=!!t;this._webSearchUseProxy.set(r),await o(e,n.WEB_SEARCH_USE_PROXY,r?`true`:`false`)}async setSearchFilesMaxFileBytes(e,t){let r=Math.max(1,Math.round(t));this._searchFilesMaxFileBytes.set(r),await o(e,n.SEARCH_FILES_MAX_FILE_BYTES,String(r))}async setSearchFilesMaxFilesVisited(e,t){let r=Math.max(1,Math.round(t));this._searchFilesMaxFilesVisited.set(r),await o(e,n.SEARCH_FILES_MAX_FILES_VISITED,String(r))}async setSearchFilesSkipDirs(e,t){let r=t.trim();this._searchFilesSkipDirs.set(r),await o(e,n.SEARCH_FILES_SKIP_DIRS,r)}async removeCustomTool(e,t){let r=this._customTools.get().filter(e=>e.name!==t);this._customTools.set(r);let i=new Set(this._enabledToolNames.get());i.delete(t),this._enabledToolNames.set(i),await Promise.all([o(e,n.CUSTOM_TOOLS,r),o(e,n.ENABLED_TOOLS,[...i])])}async saveToActiveProfile(e){let t=this._activeProfileId.get();if(!t)return;let n=this._profiles.get().find(e=>e.id===t);if(!n)return;let r={...n,enabledToolNames:[...this._enabledToolNames.get()],customTools:[...this._customTools.get()],systemPromptOverride:this._systemPromptOverride.get()};await this.updateProfile(e,r)}async setAllEnabled(e,t){this._enabledToolNames.set(new Set(t));let r=[o(e,n.ENABLED_TOOLS,t)];this._activeProfileId.get()&&(this._activeProfileId.set(null),r.push(o(e,n.ACTIVE_TOOL_PROFILE,null))),await Promise.all(r)}async setSystemPromptOverride(e,t){this._systemPromptOverride.set(t),await o(e,n.SYSTEM_PROMPT_OVERRIDE,t)}async setToolEnabled(e,t,r){let i=new Set(this._enabledToolNames.get());r?i.add(t):i.delete(t),this._enabledToolNames.set(i);let a=[o(e,n.ENABLED_TOOLS,[...i])];this._activeProfileId.get()&&(this._activeProfileId.set(null),a.push(o(e,n.ACTIVE_TOOL_PROFILE,null))),await Promise.all(a)}async updateProfile(e,t){let r=this._profiles.get().map(e=>e.id===t.id?t:e);this._profiles.set(r),await o(e,n.TOOL_PROFILES,r)}};const _=new g;export{u as a,p as i,h as n,l as o,m as r,c as s,_ as t};