shadow-claw 1.54.0 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +1 -1
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/{chunk-DO2t9bUI.js → chunk--IuVyWfT.js} +24 -23
  6. package/dist/cli/{chunk-2ZYd9gYC.js → chunk--JpdI-Ht.js} +1 -1
  7. package/dist/cli/{chunk-m4Ineemy.js → chunk-4O8yrQuN.js} +1 -1
  8. package/dist/cli/{chunk-BiH9IXnQ.js → chunk-7S9Ywlfy.js} +1 -1
  9. package/dist/cli/{chunk-BmMOdYvk.js → chunk-B0SqqDSK.js} +1 -1
  10. package/dist/cli/chunk-BNaWaEm-.js +1 -0
  11. package/dist/cli/chunk-BXCsxO9e.js +1 -0
  12. package/dist/cli/chunk-Bq37qDoZ.js +18 -0
  13. package/dist/cli/{chunk-C1htf-nO.js → chunk-BrEeCKIo.js} +2 -2
  14. package/dist/cli/{chunk-BI1SOTM1.js → chunk-Bu3ylrhT.js} +8 -8
  15. package/dist/cli/{chunk-3smiGQoQ.js → chunk-C1v_s0Kb.js} +1 -1
  16. package/dist/cli/{chunk-DGeysxz3.js → chunk-C44G533y.js} +1 -1
  17. package/dist/cli/{chunk-9KiBalKu.js → chunk-C7hJLmsL.js} +1 -1
  18. package/dist/cli/{chunk-BFv9XSNd.js → chunk-CAaQWd6t.js} +1 -1
  19. package/dist/cli/chunk-CIkgn5Fh.js +1 -0
  20. package/dist/cli/chunk-CWEIN2kc.js +1 -0
  21. package/dist/cli/{chunk-BDeDZ-0L.js → chunk-CYg1lO1a.js} +1 -1
  22. package/dist/cli/{chunk-DXLmEQ3i.js → chunk-Ce09lwXT.js} +1 -1
  23. package/dist/cli/{chunk-XsfHeN4m.js → chunk-CpdqRSO-.js} +1 -1
  24. package/dist/cli/chunk-DB4x5L-B.js +1 -0
  25. package/dist/cli/{chunk-DaNyMqrk.js → chunk-DBvObsBQ.js} +1 -1
  26. package/dist/cli/chunk-DGPpt7Ka.js +1 -0
  27. package/dist/cli/chunk-DGagHluH.js +1 -0
  28. package/dist/cli/chunk-DUIs23D9.js +1 -0
  29. package/dist/cli/{chunk-CyvfQV16.js → chunk-DaurYOqg.js} +1 -1
  30. package/dist/cli/{chunk-DSFrcSyA.js → chunk-DfwRL0Ue.js} +1 -1
  31. package/dist/cli/{chunk-M2tZrzY5.js → chunk-DudYQk0p.js} +1 -1
  32. package/dist/cli/chunk-DvKo50Tp.js +2 -0
  33. package/dist/cli/{chunk-H_Mw5ypp.js → chunk-Dvrqte5Q.js} +2 -2
  34. package/dist/cli/{chunk-BtNO-m9T.js → chunk-DzhSExU0.js} +1 -1
  35. package/dist/cli/{chunk-IOMO88kZ.js → chunk-ENKlt3i9.js} +1 -1
  36. package/dist/cli/{chunk-Bspgzwsm.js → chunk-FWRwAX75.js} +8 -8
  37. package/dist/cli/chunk-Lf-Z-h48.js +32 -0
  38. package/dist/cli/{chunk-BucXnZ4Z.js → chunk-VRfkSLrD.js} +1 -1
  39. package/dist/cli/chunk-uaTxD024.js +1 -0
  40. package/dist/cli/cli.js +1 -1
  41. package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
  42. package/dist/headless-agent.js +2 -2
  43. package/dist/lib/components/index.js +25 -25
  44. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  45. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  46. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  47. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  48. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  49. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  50. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  51. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  52. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  53. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  54. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  55. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  57. package/dist/lib/components/shadow-claw/utils/get-route.d.ts +3 -0
  58. package/dist/lib/components/shadow-claw/utils/sync-slotted-sidebar-active-links.d.ts +1 -1
  59. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  60. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  61. package/dist/lib/components/shadow-claw-channels.js +1 -1
  62. package/dist/lib/components/shadow-claw-chat.js +1 -1
  63. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  64. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  65. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  66. package/dist/lib/components/shadow-claw-files.js +1 -1
  67. package/dist/lib/components/shadow-claw-git.js +1 -1
  68. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  69. package/dist/lib/components/shadow-claw-llm.js +1 -1
  70. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  71. package/dist/lib/components/shadow-claw-networking.js +1 -1
  72. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  73. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  74. package/dist/lib/components/shadow-claw-pages.js +1 -1
  75. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  76. package/dist/lib/components/shadow-claw-settings.js +1 -1
  77. package/dist/lib/components/shadow-claw-storage.js +1 -1
  78. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  79. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  80. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  81. package/dist/lib/components/shadow-claw-tools.js +1 -1
  82. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  83. package/dist/lib/components/shadow-claw.js +1 -1
  84. package/dist/lib/{configure-peer-js-D5jDCtLx.js → configure-peer-js-C9554Slv.js} +2 -2
  85. package/dist/lib/{configure-peer-js-D5jDCtLx.js.map → configure-peer-js-C9554Slv.js.map} +1 -1
  86. package/dist/lib/{file-viewer-B4CL4e0i.js → file-viewer-DBc5dxNy.js} +2 -2
  87. package/dist/lib/{file-viewer-B4CL4e0i.js.map → file-viewer-DBc5dxNy.js.map} +1 -1
  88. package/dist/lib/index.js +28 -27
  89. package/dist/lib/{init-control-plane-l2uFnhGV.js → init-control-plane-D-41Fm5q.js} +12 -12
  90. package/dist/lib/{init-control-plane-l2uFnhGV.js.map → init-control-plane-D-41Fm5q.js.map} +1 -1
  91. package/dist/lib/{markdown-0_p_zfxL.js → markdown-KnDWzWJJ.js} +2 -2
  92. package/dist/lib/{markdown-0_p_zfxL.js.map → markdown-KnDWzWJJ.js.map} +1 -1
  93. package/dist/lib/{orchestrator-D6wm8Sec.js → orchestrator-BEZcqgR5.js} +9 -9
  94. package/dist/lib/{orchestrator-D6wm8Sec.js.map → orchestrator-BEZcqgR5.js.map} +1 -1
  95. package/dist/lib/{orchestrator-Dh-hnIpK.js → orchestrator-Cda13e5U.js} +4 -4
  96. package/dist/lib/{orchestrator-Dh-hnIpK.js.map → orchestrator-Cda13e5U.js.map} +1 -1
  97. package/dist/lib/{peerjs-BWZnsD0B.js → peerjs-DYkUTcee.js} +5 -5
  98. package/dist/lib/{peerjs-BWZnsD0B.js.map → peerjs-DYkUTcee.js.map} +1 -1
  99. package/dist/lib/{push-client-MybDfOdi.js → push-client-CQtCFDaD.js} +3 -3
  100. package/dist/lib/{push-client-MybDfOdi.js.map → push-client-CQtCFDaD.js.map} +1 -1
  101. package/dist/lib/security/custom-element-security.d.ts +8 -4
  102. package/dist/lib/{shadow-claw-PdOpgTxH.js → shadow-claw-DYe9u6Tp.js} +142 -33
  103. package/dist/lib/shadow-claw-DYe9u6Tp.js.map +1 -0
  104. package/dist/lib/{shadow-claw-accounts-3bR76EOb.js → shadow-claw-accounts-D2URoHys.js} +2 -2
  105. package/dist/lib/{shadow-claw-accounts-3bR76EOb.js.map → shadow-claw-accounts-D2URoHys.js.map} +1 -1
  106. package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js → shadow-claw-channel-config-buXoz2xv.js} +3 -3
  107. package/dist/lib/{shadow-claw-channel-config-ChdZ1iB8.js.map → shadow-claw-channel-config-buXoz2xv.js.map} +1 -1
  108. package/dist/lib/{shadow-claw-channels-CK9sc7h_.js → shadow-claw-channels-5yVJ1gLk.js} +3 -3
  109. package/dist/lib/{shadow-claw-channels-CK9sc7h_.js.map → shadow-claw-channels-5yVJ1gLk.js.map} +1 -1
  110. package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js → shadow-claw-chat-CVc-7ycM.js} +7 -7
  111. package/dist/lib/{shadow-claw-chat-B6uuZnJ7.js.map → shadow-claw-chat-CVc-7ycM.js.map} +1 -1
  112. package/dist/lib/{shadow-claw-control-plane-BpRcl312.js → shadow-claw-control-plane-B5vsF91B.js} +6 -6
  113. package/dist/lib/{shadow-claw-control-plane-BpRcl312.js.map → shadow-claw-control-plane-B5vsF91B.js.map} +1 -1
  114. package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js → shadow-claw-conversations-PGK5zqn3.js} +54 -12
  115. package/dist/lib/{shadow-claw-conversations-Dc_Xk2mB.js.map → shadow-claw-conversations-PGK5zqn3.js.map} +1 -1
  116. package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js → shadow-claw-file-viewer-DSqn0hgx.js} +6 -6
  117. package/dist/lib/{shadow-claw-file-viewer-C4x1PtB2.js.map → shadow-claw-file-viewer-DSqn0hgx.js.map} +1 -1
  118. package/dist/lib/{shadow-claw-files-DhnHbXKf.js → shadow-claw-files-vOa9ZWbr.js} +6 -6
  119. package/dist/lib/{shadow-claw-files-DhnHbXKf.js.map → shadow-claw-files-vOa9ZWbr.js.map} +1 -1
  120. package/dist/lib/{shadow-claw-git-BeQ1ElUd.js → shadow-claw-git-D54Z85Bj.js} +4 -4
  121. package/dist/lib/{shadow-claw-git-BeQ1ElUd.js.map → shadow-claw-git-D54Z85Bj.js.map} +1 -1
  122. package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js → shadow-claw-integrations-BTubMH9d.js} +2 -2
  123. package/dist/lib/{shadow-claw-integrations-Bbdolk3w.js.map → shadow-claw-integrations-BTubMH9d.js.map} +1 -1
  124. package/dist/lib/{shadow-claw-llm-DPda4L3C.js → shadow-claw-llm-8koGTNYs.js} +3 -3
  125. package/dist/lib/{shadow-claw-llm-DPda4L3C.js.map → shadow-claw-llm-8koGTNYs.js.map} +1 -1
  126. package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js → shadow-claw-mcp-remote-C2jwBsQt.js} +2 -2
  127. package/dist/lib/{shadow-claw-mcp-remote-Dn9c30WI.js.map → shadow-claw-mcp-remote-C2jwBsQt.js.map} +1 -1
  128. package/dist/lib/{shadow-claw-networking-zqNuyn3-.js → shadow-claw-networking-BV-rna16.js} +2 -2
  129. package/dist/lib/{shadow-claw-networking-zqNuyn3-.js.map → shadow-claw-networking-BV-rna16.js.map} +1 -1
  130. package/dist/lib/{shadow-claw-notifications-DFgdo33v.js → shadow-claw-notifications-Dku7VBLk.js} +2 -2
  131. package/dist/lib/{shadow-claw-notifications-DFgdo33v.js.map → shadow-claw-notifications-Dku7VBLk.js.map} +1 -1
  132. package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js → shadow-claw-page-header-VPjYWfsT.js} +2 -2
  133. package/dist/lib/{shadow-claw-page-header-B7LFGQRf.js.map → shadow-claw-page-header-VPjYWfsT.js.map} +1 -1
  134. package/dist/lib/{shadow-claw-pages-DLspFqdK.js → shadow-claw-pages-DXrM6hgZ.js} +29 -19
  135. package/dist/lib/shadow-claw-pages-DXrM6hgZ.js.map +1 -0
  136. package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js → shadow-claw-peerjs-D3xonez5.js} +3 -3
  137. package/dist/lib/{shadow-claw-peerjs-D8xWwuWR.js.map → shadow-claw-peerjs-D3xonez5.js.map} +1 -1
  138. package/dist/lib/{shadow-claw-settings-NbvzXASD.js → shadow-claw-settings-DMTx6OS9.js} +5 -5
  139. package/dist/lib/{shadow-claw-settings-NbvzXASD.js.map → shadow-claw-settings-DMTx6OS9.js.map} +1 -1
  140. package/dist/lib/{shadow-claw-storage-B_NAoZmd.js → shadow-claw-storage-BJLnukxa.js} +3 -3
  141. package/dist/lib/{shadow-claw-storage-B_NAoZmd.js.map → shadow-claw-storage-BJLnukxa.js.map} +1 -1
  142. package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js → shadow-claw-task-server-DcMj20hD.js} +2 -2
  143. package/dist/lib/{shadow-claw-task-server-BaQJXhYJ.js.map → shadow-claw-task-server-DcMj20hD.js.map} +1 -1
  144. package/dist/lib/{shadow-claw-tasks-CAZua0-j.js → shadow-claw-tasks-BQBe4lVi.js} +7 -7
  145. package/dist/lib/{shadow-claw-tasks-CAZua0-j.js.map → shadow-claw-tasks-BQBe4lVi.js.map} +1 -1
  146. package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js → shadow-claw-terminal-DPEzTxXv.js} +2 -2
  147. package/dist/lib/{shadow-claw-terminal-B2YJhkJL.js.map → shadow-claw-terminal-DPEzTxXv.js.map} +1 -1
  148. package/dist/lib/{shadow-claw-tools-CkZWxxTm.js → shadow-claw-tools-BCnU8FaK.js} +6 -6
  149. package/dist/lib/{shadow-claw-tools-CkZWxxTm.js.map → shadow-claw-tools-BCnU8FaK.js.map} +1 -1
  150. package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js → shadow-claw-webvm-CnW-hoJ8.js} +2 -2
  151. package/dist/lib/{shadow-claw-webvm-BL9cgrP9.js.map → shadow-claw-webvm-CnW-hoJ8.js.map} +1 -1
  152. package/dist/lib/subsystems/mcp/webmcp.d.ts +15 -2
  153. package/dist/lib/{sync-web-mcp-registration-dW2MVCj4.js → sync-web-mcp-registration-DwpGjVdo.js} +10 -4
  154. package/dist/lib/sync-web-mcp-registration-DwpGjVdo.js.map +1 -0
  155. package/dist/lib/{tools-D7whby3H.js → tools-CP6G0HF7.js} +5 -6
  156. package/dist/lib/tools-CP6G0HF7.js.map +1 -0
  157. package/dist/lib/{trusted-types-d0cdkut_.js → trusted-types-0cu5Dm6M.js} +29 -4
  158. package/dist/lib/{trusted-types-d0cdkut_.js.map → trusted-types-0cu5Dm6M.js.map} +1 -1
  159. package/dist/lib/utils/index.d.ts +1 -0
  160. package/dist/lib/utils/index.js +4 -2
  161. package/dist/lib/utils/index.js.map +1 -1
  162. package/dist/lib/utils/resolve-page-script-dependencies.d.ts +19 -0
  163. package/dist/lib/utils/resolve-page-script-dependencies.js +98 -0
  164. package/dist/lib/utils/resolve-page-script-dependencies.js.map +1 -0
  165. package/dist/lib/utils/utils.js +1 -1
  166. package/dist/lib/webmcp-Bf9rT7uu.js +2001 -0
  167. package/dist/lib/webmcp-Bf9rT7uu.js.map +1 -0
  168. package/dist/public/.well-known/mcp/server-card.json +1 -1
  169. package/dist/public/.well-known/mcp.json +1 -1
  170. package/dist/public/AGENTS.md +3 -3
  171. package/dist/public/README.md +1 -1
  172. package/dist/public/agent.worker.js +2 -2
  173. package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
  174. package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
  175. package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.css +1 -1
  176. package/dist/public/components/shadow-claw-conversations/shadow-claw-conversations.html +1 -1
  177. package/dist/public/{configure-peer-js-WLRM7Qa7.js → configure-peer-js-OYl3V8sW.js} +1 -1
  178. package/dist/public/{custom-element-security-Cl991z-x.js → custom-element-security-BR4V40j4.js} +1 -1
  179. package/dist/public/docs/example/article/index.html +3 -3
  180. package/dist/public/docs/example/article.html +3 -3
  181. package/dist/public/docs/publishing/index.html +3 -3
  182. package/dist/public/docs/publishing.html +3 -3
  183. package/dist/public/docs/skill-creator/index.html +3 -3
  184. package/dist/public/docs/skill-creator.html +3 -3
  185. package/dist/public/docs/subsystems/custom-element-security.md +19 -5
  186. package/dist/public/docs/subsystems/pages.md +10 -2
  187. package/dist/public/docs/subsystems/tools.md +1 -2
  188. package/dist/public/docs/subsystems/webmcp.md +41 -6
  189. package/dist/public/{download-group-file-fFjoIIp4.js → download-group-file-BNmK8wac.js} +1 -1
  190. package/dist/public/e2e/README.md +2 -2
  191. package/dist/public/{e2e-bridge-CiSfBRT4.js → e2e-bridge-4phD1JUQ.js} +1 -1
  192. package/dist/public/{file-viewer-DFC3kfeO.js → file-viewer-Dbh3K9nL.js} +1 -1
  193. package/dist/public/index.html +3 -3
  194. package/dist/public/index.js +1 -1
  195. package/dist/public/{init-control-plane-BEbcwmmv.js → init-control-plane-DGOY_RNS.js} +1 -1
  196. package/dist/public/llms.txt +1 -1
  197. package/dist/public/main/index.html +3 -3
  198. package/dist/public/main/memory/index.html +3 -3
  199. package/dist/public/main/memory.html +3 -3
  200. package/dist/public/main.html +3 -3
  201. package/dist/public/{markdown-BeglYzw9.js → markdown-BPZYpfGm.js} +1 -1
  202. package/dist/public/{orchestrator-BlvEG3PO.js → orchestrator-OoUK7CF9.js} +1 -1
  203. package/dist/public/{orchestrator-DTNrntd4.js → orchestrator-a9047bGu.js} +1 -1
  204. package/dist/public/{peerjs-CnBdK94R.js → peerjs-Cbn310Tz.js} +1 -1
  205. package/dist/public/{push-client-DOHbdCyj.js → push-client-Dy4LGJy9.js} +1 -1
  206. package/dist/public/service-worker.js +1 -1
  207. package/dist/public/shadow-claw-B-HWC1uN.js +1180 -0
  208. package/dist/public/{shadow-claw-accounts-C6FXVw2K.js → shadow-claw-accounts-Di-anCZ1.js} +1 -1
  209. package/dist/public/{shadow-claw-channels-tr_r60Kq.js → shadow-claw-channels-RVwCE8pE.js} +1 -1
  210. package/dist/public/{shadow-claw-chat-BAAPhAOs.js → shadow-claw-chat-DI1q8UnX.js} +1 -1
  211. package/dist/public/{shadow-claw-control-plane-C_5VIx8E.js → shadow-claw-control-plane-KXEdLOGl.js} +2 -2
  212. package/dist/public/{shadow-claw-conversations-DGYZdDa3.js → shadow-claw-conversations-BCBGtS30.js} +40 -6
  213. package/dist/public/{shadow-claw-file-viewer-5j2-Z3fN.js → shadow-claw-file-viewer-CW3t6j-w.js} +1 -1
  214. package/dist/public/{shadow-claw-files-DKF4Yy0m.js → shadow-claw-files-JQ-o0ImX.js} +1 -1
  215. package/dist/public/{shadow-claw-git-CtUTJXKT.js → shadow-claw-git-D2M8VixW.js} +2 -2
  216. package/dist/public/{shadow-claw-integrations-CuBy9D3z.js → shadow-claw-integrations-Cgw6v9_1.js} +1 -1
  217. package/dist/public/{shadow-claw-llm-BIfNNjGL.js → shadow-claw-llm-74ieXp7i.js} +1 -1
  218. package/dist/public/{shadow-claw-mcp-remote-C17FXvrb.js → shadow-claw-mcp-remote-BX0BkSmy.js} +1 -1
  219. package/dist/public/{shadow-claw-networking-CjxQ1CLI.js → shadow-claw-networking-DNX8vaIQ.js} +1 -1
  220. package/dist/public/{shadow-claw-notifications-Brn2O3Ps.js → shadow-claw-notifications-BLTaGAny.js} +1 -1
  221. package/dist/public/{shadow-claw-page-header-Bn1P7Cxb.js → shadow-claw-page-header-CjFOdo9v.js} +1 -1
  222. package/dist/public/shadow-claw-pages-DOQqMm0_.js +645 -0
  223. package/dist/public/{shadow-claw-settings-CfDm0hVA.js → shadow-claw-settings-DFtl0Fy8.js} +2 -2
  224. package/dist/public/{shadow-claw-storage-DOOesRzw.js → shadow-claw-storage-gQGExZRq.js} +1 -1
  225. package/dist/public/{shadow-claw-task-server-H36iDDp2.js → shadow-claw-task-server-Ca45uY7S.js} +1 -1
  226. package/dist/public/{shadow-claw-tasks-4JsjSGkN.js → shadow-claw-tasks-CCTaaSdi.js} +1 -1
  227. package/dist/public/{shadow-claw-terminal-CTRTcYz-.js → shadow-claw-terminal-BfgulLkl.js} +1 -1
  228. package/dist/public/{shadow-claw-tools-Dm1LxNf4.js → shadow-claw-tools-V8NA4n18.js} +1 -1
  229. package/dist/public/{shadow-claw-webvm-JzuPe9Nr.js → shadow-claw-webvm-CxxI2bnC.js} +1 -1
  230. package/dist/public/sync-web-mcp-registration-CkCA8UFm.js +1 -0
  231. package/dist/public/{tools-FiTtOlIt.js → tools-CwQq5tJH.js} +2 -2
  232. package/dist/public/webmcp-CmtWOAFm.js +6 -0
  233. package/dist/server.js +2 -2
  234. package/package.json +3 -3
  235. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +16 -0
  236. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +62 -1
  237. package/src/cli/prerender/pretty-paths/prerender-pretty-paths.test.ts +277 -0
  238. package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +28 -1
  239. package/src/cli/site-config/custom-elements/build-custom-element-script-tags.ts +13 -1
  240. package/src/components/shadow-claw/shadow-claw.css +12 -0
  241. package/src/components/shadow-claw/shadow-claw.html +12 -2
  242. package/src/components/shadow-claw/utils/bind-event-listeners.test.ts +18 -0
  243. package/src/components/shadow-claw/utils/bind-event-listeners.ts +14 -0
  244. package/src/components/shadow-claw/utils/get-route.test.ts +35 -0
  245. package/src/components/shadow-claw/utils/get-route.ts +18 -0
  246. package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.test.ts +152 -1
  247. package/src/components/shadow-claw/utils/sync-slotted-sidebar-active-links.ts +139 -8
  248. package/src/components/shadow-claw-conversations/shadow-claw-conversations.css +11 -0
  249. package/src/components/shadow-claw-conversations/shadow-claw-conversations.html +27 -4
  250. package/src/components/shadow-claw-conversations/shadow-claw-conversations.ts +32 -4
  251. package/src/components/shadow-claw-pages/shadow-claw-pages-scripts.test.ts +266 -0
  252. package/src/components/shadow-claw-pages/shadow-claw-pages.ts +41 -17
  253. package/src/core/orchestrator/utils/sync-web-mcp-registration.test.ts +18 -1
  254. package/src/core/orchestrator/utils/sync-web-mcp-registration.ts +8 -0
  255. package/src/core/utils/init-control-plane.test.ts +9 -4
  256. package/src/security/custom-element-security.test.ts +65 -0
  257. package/src/security/custom-element-security.ts +67 -4
  258. package/src/stores/tools.test.ts +5 -3
  259. package/src/stores/tools.ts +5 -10
  260. package/src/subsystems/mcp/webmcp.test.ts +84 -13
  261. package/src/subsystems/mcp/webmcp.ts +73 -10
  262. package/src/utils/index.ts +1 -0
  263. package/src/utils/resolve-page-script-dependencies.test.ts +245 -0
  264. package/src/utils/resolve-page-script-dependencies.ts +198 -0
  265. package/dist/cli/chunk-B1hufJeO.js +0 -1
  266. package/dist/cli/chunk-BZpn8npn.js +0 -1
  267. package/dist/cli/chunk-Bw5aOTFr.js +0 -1
  268. package/dist/cli/chunk-C8nH01Gw.js +0 -32
  269. package/dist/cli/chunk-CK1ZoyoE.js +0 -17
  270. package/dist/cli/chunk-CVkhDr-7.js +0 -1
  271. package/dist/cli/chunk-Cum07Vlh.js +0 -1
  272. package/dist/cli/chunk-D3UhDDmV.js +0 -2
  273. package/dist/cli/chunk-D8GI6qj6.js +0 -1
  274. package/dist/cli/chunk-DEH-FvmP.js +0 -1
  275. package/dist/cli/chunk-DksvJ_kf.js +0 -1
  276. package/dist/cli/chunk-RGb9wM4R.js +0 -1
  277. package/dist/lib/shadow-claw-PdOpgTxH.js.map +0 -1
  278. package/dist/lib/shadow-claw-pages-DLspFqdK.js.map +0 -1
  279. package/dist/lib/sync-web-mcp-registration-dW2MVCj4.js.map +0 -1
  280. package/dist/lib/tools-D7whby3H.js.map +0 -1
  281. package/dist/lib/webmcp-CYTNZfkn.js +0 -1687
  282. package/dist/lib/webmcp-CYTNZfkn.js.map +0 -1
  283. package/dist/public/shadow-claw-CnNX-WCh.js +0 -1158
  284. package/dist/public/shadow-claw-pages-BwOOqRWW.js +0 -645
  285. package/dist/public/sync-web-mcp-registration-BnHVUjat.js +0 -1
  286. package/dist/public/webmcp-_TBqXlVW.js +0 -1
@@ -1,4 +1,4 @@
1
- import{g as e,y as t}from"./custom-element-security-Cl991z-x.js";import{r as n}from"./config-y_2Fg77m.js";import{n as r}from"./db-BUuJo1Gf.js";import{n as i}from"./tx-promise-DNVEN3Wa.js";import{t as a}from"./get-config-Bkvl__ZS.js";import{c as o,d as s,et as c,t as l}from"./orchestrator-BlvEG3PO.js";import{o as u}from"./tools-FiTtOlIt.js";import{t as d}from"./set-config-DSiuMe0k.js";import{n as f,r as p}from"./crypto-4ETeplbS.js";import{t as m}from"./parse-boolean-config-BigJ9U46.js";import{a as h,i as g,r as _,s as v}from"./toast-CtIuHprH.js";import{t as y}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-page-header-Bn1P7Cxb.js";import{t as b}from"./date-B1vUpTS_.js";import"./shadow-claw-dialog-BVGf_c3S.js";function x(e){try{return JSON.parse(JSON.stringify(e))}catch{return null}}async function S(e,t){let r=[],i=[];for(let a of e){let e=a.key;if(e===n.STORAGE_HANDLE)continue;if(e===n.GIT_PASSWORD||e===n.API_KEY||e.startsWith(`api_key:`)||e===n.IMESSAGE_API_KEY||e===n.TELEGRAM_BOT_TOKEN){if(t&&typeof a.value==`string`){let t=await f(a.value);t&&i.push({key:e,path:[],value:t})}continue}let o=x(a.value);if(e===n.GIT_ACCOUNTS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n];if(!r||typeof r!=`object`)continue;let a=r.password;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`password`],value:t})}delete r.password}}if(e===n.INTEGRATION_CONNECTIONS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n]?.credentialRef,a=r?.encryptedSecret;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`credentialRef`,`encryptedSecret`],value:t})}delete r.encryptedSecret}}if(e===n.REMOTE_MCP_CONNECTIONS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n]?.credentialRef,a=r?.encryptedValue;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`credentialRef`,`encryptedValue`],value:t})}delete r.encryptedValue}}r.push({key:e,value:o})}return{configEntries:r,plaintextPasswords:i}}function C(e,t,n){if(t.length===0)return n;let r=e;for(let n=0;n<t.length-1;n+=1){let i=t[n];if(typeof i==`number`){if(!Array.isArray(r)||!r[i])return e;r=r[i]}else{if(!r||typeof r!=`object`)return e;let t=r[i];if(!t||typeof t!=`object`)return e;r=t}}let i=t[t.length-1];if(typeof i==`number`){if(!Array.isArray(r))return e;r[i]=n}else{if(!r||typeof r!=`object`)return e;r[i]=n}return e}async function w(e,t){let n=await S(e,t);return{kind:`shadowclaw-settings-backup`,version:1,exportedAt:Date.now(),includePlaintextPasswords:t,configEntries:n.configEntries,plaintextPasswords:t?n.plaintextPasswords:void 0}}async function T(e,t){let n=await w(e,t);return new Blob([JSON.stringify(n,null,2)],{type:`application/json`})}async function E(e,t,n){let r=await w(t,n);await u(e,JSON.stringify(r,null,2))}async function D(e,t){if(!t.length)return e;let n=e.map(e=>({key:e.key,value:x(e.value)}));for(let e of t){let t=await p(e.value);if(!t)continue;let r=n.find(t=>t.key===e.key);r?r.value=C(r.value,e.path,t):e.path.length===0&&n.push({key:e.key,value:t})}return n}function O(e){let t=JSON.parse(e);if(t?.kind!==`shadowclaw-settings-backup`||t.version!==1||!Array.isArray(t.configEntries))throw Error(`Invalid settings backup file`);let n=Array.isArray(t.plaintextPasswords)?t.plaintextPasswords.filter(e=>e&&typeof e.key==`string`&&Array.isArray(e.path)&&typeof e.value==`string`):[];return{kind:`shadowclaw-settings-backup`,version:1,exportedAt:typeof t.exportedAt==`number`?t.exportedAt:Date.now(),includePlaintextPasswords:!!t.includePlaintextPasswords,configEntries:t.configEntries.filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value})),plaintextPasswords:n}}function k(){try{let e=document.querySelector(`meta[name="shadow-claw-override-prerender-skeleton"]`)?.getAttribute(`content`);if(e===`true`)return!0;if(e===`false`)return!1}catch{}return!1}const A=new CSSStyleSheet;A.replaceSync(`*,
1
+ import{g as e,y as t}from"./custom-element-security-BR4V40j4.js";import{r as n}from"./config-y_2Fg77m.js";import{n as r}from"./db-BUuJo1Gf.js";import{n as i}from"./tx-promise-DNVEN3Wa.js";import{t as a}from"./get-config-Bkvl__ZS.js";import{c as o,d as s,et as c,t as l}from"./orchestrator-OoUK7CF9.js";import{o as u}from"./tools-CwQq5tJH.js";import{t as d}from"./set-config-DSiuMe0k.js";import{n as f,r as p}from"./crypto-4ETeplbS.js";import{t as m}from"./parse-boolean-config-BigJ9U46.js";import{a as h,i as g,r as _,s as v}from"./toast-CtIuHprH.js";import{t as y}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-page-header-CjFOdo9v.js";import{t as b}from"./date-B1vUpTS_.js";import"./shadow-claw-dialog-BVGf_c3S.js";function x(e){try{return JSON.parse(JSON.stringify(e))}catch{return null}}async function S(e,t){let r=[],i=[];for(let a of e){let e=a.key;if(e===n.STORAGE_HANDLE)continue;if(e===n.GIT_PASSWORD||e===n.API_KEY||e.startsWith(`api_key:`)||e===n.IMESSAGE_API_KEY||e===n.TELEGRAM_BOT_TOKEN){if(t&&typeof a.value==`string`){let t=await f(a.value);t&&i.push({key:e,path:[],value:t})}continue}let o=x(a.value);if(e===n.GIT_ACCOUNTS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n];if(!r||typeof r!=`object`)continue;let a=r.password;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`password`],value:t})}delete r.password}}if(e===n.INTEGRATION_CONNECTIONS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n]?.credentialRef,a=r?.encryptedSecret;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`credentialRef`,`encryptedSecret`],value:t})}delete r.encryptedSecret}}if(e===n.REMOTE_MCP_CONNECTIONS&&Array.isArray(o))for(let n=0;n<o.length;n+=1){let r=o[n]?.credentialRef,a=r?.encryptedValue;if(typeof a==`string`&&a){if(t){let t=await f(a);t&&i.push({key:e,path:[n,`credentialRef`,`encryptedValue`],value:t})}delete r.encryptedValue}}r.push({key:e,value:o})}return{configEntries:r,plaintextPasswords:i}}function C(e,t,n){if(t.length===0)return n;let r=e;for(let n=0;n<t.length-1;n+=1){let i=t[n];if(typeof i==`number`){if(!Array.isArray(r)||!r[i])return e;r=r[i]}else{if(!r||typeof r!=`object`)return e;let t=r[i];if(!t||typeof t!=`object`)return e;r=t}}let i=t[t.length-1];if(typeof i==`number`){if(!Array.isArray(r))return e;r[i]=n}else{if(!r||typeof r!=`object`)return e;r[i]=n}return e}async function w(e,t){let n=await S(e,t);return{kind:`shadowclaw-settings-backup`,version:1,exportedAt:Date.now(),includePlaintextPasswords:t,configEntries:n.configEntries,plaintextPasswords:t?n.plaintextPasswords:void 0}}async function T(e,t){let n=await w(e,t);return new Blob([JSON.stringify(n,null,2)],{type:`application/json`})}async function E(e,t,n){let r=await w(t,n);await u(e,JSON.stringify(r,null,2))}async function D(e,t){if(!t.length)return e;let n=e.map(e=>({key:e.key,value:x(e.value)}));for(let e of t){let t=await p(e.value);if(!t)continue;let r=n.find(t=>t.key===e.key);r?r.value=C(r.value,e.path,t):e.path.length===0&&n.push({key:e.key,value:t})}return n}function O(e){let t=JSON.parse(e);if(t?.kind!==`shadowclaw-settings-backup`||t.version!==1||!Array.isArray(t.configEntries))throw Error(`Invalid settings backup file`);let n=Array.isArray(t.plaintextPasswords)?t.plaintextPasswords.filter(e=>e&&typeof e.key==`string`&&Array.isArray(e.path)&&typeof e.value==`string`):[];return{kind:`shadowclaw-settings-backup`,version:1,exportedAt:typeof t.exportedAt==`number`?t.exportedAt:Date.now(),includePlaintextPasswords:!!t.includePlaintextPasswords,configEntries:t.configEntries.filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value})),plaintextPasswords:n}}function k(){try{let e=document.querySelector(`meta[name="shadow-claw-override-prerender-skeleton"]`)?.getAttribute(`content`);if(e===`true`)return!0;if(e===`false`)return!1}catch{}return!1}const A=new CSSStyleSheet;A.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -885,7 +885,7 @@ import{g as e,y as t}from"./custom-element-security-Cl991z-x.js";import{r as n}f
885
885
  </div>
886
886
  </div>
887
887
  </template>
888
- `,`text/html`),M=j.querySelector(`template`);let N=[];N=M?Array.from(M.content.children):Array.from(j.head.children).concat(Array.from(j.body.children));var P=N;const F={ai:[()=>import(`./shadow-claw-llm-BIfNNjGL.js`)],environment:[()=>import(`./shadow-claw-networking-CjxQ1CLI.js`),()=>import(`./shadow-claw-webvm-JzuPe9Nr.js`),()=>import(`./shadow-claw-storage-DOOesRzw.js`)],integrations:[()=>import(`./shadow-claw-git-CtUTJXKT.js`),()=>import(`./shadow-claw-accounts-C6FXVw2K.js`),()=>import(`./shadow-claw-mcp-remote-C17FXvrb.js`),()=>import(`./shadow-claw-control-plane-C_5VIx8E.js`),()=>import(`./shadow-claw-integrations-CuBy9D3z.js`),()=>import(`./shadow-claw-task-server-H36iDDp2.js`),()=>import(`./shadow-claw-notifications-Brn2O3Ps.js`)]},I=/* @__PURE__ */ new Set;async function L(e){if(I.has(e))return;let t=F[e];t&&(I.add(e),await Promise.all(t.map(e=>e())))}const R=`shadow-claw-settings`;var z=class extends y{static styles=A;static template=P;activeTab=`ai`;db=null;orchestrator=null;pendingRestoreFile=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await r(),this.orchestrator=l.orchestrator,await this.render()}activateTab(e){e&&this.activeTab!==e&&(this.activeTab=e,this.applyTabState())}applyTabState(){L(this.activeTab).catch(console.error);let e=this.shadowRoot;e&&(e.querySelectorAll(`[data-tab-target]`).forEach(e=>{let t=e.dataset.tabTarget===this.activeTab;e.classList.toggle(`active`,t),e.setAttribute(`aria-selected`,String(t)),e.tabIndex=t?0:-1}),e.querySelectorAll(`[data-tab-panel]`).forEach(e=>{e.hidden=e.dataset.tabPanel!==this.activeTab}))}bindSettingsActions(){let e=this.shadowRoot;if(!e)return;e.querySelector(`[data-action="backup-settings"]`)?.addEventListener(`click`,()=>this.openBackupDialog());let t=e.querySelector(`.settings__restore-input`);e.querySelector(`[data-action="restore-settings"]`)?.addEventListener(`click`,()=>{t instanceof HTMLInputElement&&(t.value=``,t.click())}),t?.addEventListener(`change`,e=>{let t=e.target;if(!(t instanceof HTMLInputElement))return;let n=t.files?.[0]||null;n&&(this.pendingRestoreFile=n,this.openRestoreDialog(n.name))}),e.querySelector(`[data-action="clear-settings"]`)?.addEventListener(`click`,()=>this.openClearDialog()),e.querySelector(`[data-action="cancel-backup-settings"]`)?.addEventListener(`click`,()=>this.closeDialog(`.settings__backup-dialog`)),e.querySelector(`[data-action="confirm-backup-settings"]`)?.addEventListener(`click`,()=>{this.confirmBackup()}),e.querySelector(`[data-action="cancel-restore-settings"]`)?.addEventListener(`click`,()=>{this.pendingRestoreFile=null,this.closeDialog(`.settings__restore-dialog`)}),e.querySelector(`[data-action="confirm-restore-settings"]`)?.addEventListener(`click`,()=>{this.confirmRestore()}),e.querySelector(`[data-action="cancel-clear-settings"]`)?.addEventListener(`click`,()=>this.closeDialog(`.settings__clear-dialog`)),e.querySelector(`[data-action="confirm-clear-settings"]`)?.addEventListener(`click`,()=>{this.confirmClear()}),e.querySelector(`[data-action="save-assistant-name"]`)?.addEventListener(`click`,()=>this.saveAssistantName()),e.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onActivityLogDiskLoggingToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHidePagesToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideChatToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideTasksToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-files-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideFilesToggle(t.checked)}),e.querySelector(`[data-setting="chat-split-view-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onChatSplitViewToggle(t.checked)}),e.querySelector(`[data-setting="pages-auto-refresh-input"]`)?.addEventListener(`change`,e=>{let t=e.target;if(t){let e=parseInt(t.value,10);this.onPagesAutoRefreshInputChange(isNaN(e)?0:e)}}),e.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onOverridePrerenderSkeletonToggle(t.checked)}),e.querySelector(`[data-action="save-dom-allowed-iframe-hosts"]`)?.addEventListener(`click`,()=>{this.saveDomAllowedIframeHosts()})}closeDialog(e){this.getDialog(e)?.close()}getDialog(e){let t=this.shadowRoot;if(!t)return null;let n=t.querySelector(e);return n instanceof HTMLDialogElement?n:null}handleTabKeydown(e,t){let n=this.shadowRoot;if(!n)return;let r=Array.from(n.querySelectorAll(`[data-tab-target]`)),i=r.indexOf(t);if(i<0)return;let a=-1;switch(e.key){case`ArrowRight`:case`ArrowDown`:a=(i+1)%r.length;break;case`ArrowLeft`:case`ArrowUp`:a=(i-1+r.length)%r.length;break;case`Home`:a=0;break;case`End`:a=r.length-1;break;default:return}e.preventDefault();let o=r[a];o.focus(),this.activateTab(o.dataset.tabTarget)}openBackupDialog(){let e=this.shadowRoot?.querySelector(`[data-setting="include-plaintext-passwords"]`);e instanceof HTMLInputElement&&(e.checked=!1),this.showDialog(`.settings__backup-dialog`)}openClearDialog(){this.showDialog(`.settings__clear-dialog`)}openRestoreDialog(e){let t=this.shadowRoot?.querySelector(`[data-info="restore-filename"]`);t instanceof HTMLElement&&(t.textContent=`Selected file: ${e}`),this.showDialog(`.settings__restore-dialog`)}showDialog(e){let t=this.getDialog(e);t&&(typeof t.showModal==`function`?t.showModal():t.setAttribute(`open`,``))}async confirmBackup(){if(!this.db){_(`Settings database is unavailable`,5e3);return}let e=this.shadowRoot?.querySelector(`[data-setting="include-plaintext-passwords"]`),t=e instanceof HTMLInputElement&&e.checked;try{if(t){let e=await this.promptForPlaintextBackupHandle();if(!e)return;await E(e,await this.getAllConfigEntries(),t),this.closeDialog(`.settings__backup-dialog`),h(`Settings backup saved`,3e3);return}let e=await T(await this.getAllConfigEntries(),t),n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`shadowclaw-settings-backup-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n),this.closeDialog(`.settings__backup-dialog`),h(`Settings backup downloaded`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to backup settings: ${t}`,6e3)}}async confirmClear(){if(!this.db)_(`Settings database is unavailable`,5e3);else try{await this.replaceConfigEntries([]),this.closeDialog(`.settings__clear-dialog`),g(`Settings cleared. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to clear settings: ${t}`,6e3)}}async confirmRestore(){if(!this.db){_(`Settings database is unavailable`,5e3);return}let e=this.pendingRestoreFile;if(!e)_(`No backup file selected`,4e3);else try{let t=O(await e.text()),n=await D(t.configEntries,t.plaintextPasswords||[]);await this.replaceConfigEntries(n),this.pendingRestoreFile=null,this.closeDialog(`.settings__restore-dialog`),h(`Settings restored. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to restore settings: ${t}`,6e3)}}async getAllConfigEntries(){if(!this.db)throw Error(`Database is unavailable`);if(i(this.db))return(this.db.db.prepare(`SELECT key, value FROM config ORDER BY key`).all()??[]).filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value}));let e=this.db;return await new Promise((t,n)=>{try{let r=e.transaction(`config`,`readonly`);if(!r){n(/* @__PURE__ */ Error(`Failed to open read transaction`));return}let i=r.objectStore(`config`).getAll();i.onsuccess=()=>{t((Array.isArray(i.result)?i.result:[]).filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value})))},i.onerror=()=>{n(i.error||/* @__PURE__ */ Error(`Failed to read settings config`))}}catch(e){n(e)}})}async onActivityLogDiskLoggingToggle(e){if(this.db)try{await d(this.db,n.ACTIVITY_LOG_DISK_LOGGING_ENABLED,e?`true`:`false`),h(e?`Activity log disk logging enabled`:`Activity log disk logging disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving activity log disk logging setting: `+t,6e3)}}async onChatSplitViewToggle(e){if(this.db)try{await d(this.db,n.CHAT_SPLIT_VIEW_ENABLED,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`chat-split-view-change`,{detail:{enabled:e},bubbles:!0,composed:!0})),h(e?`Horizontal Chat split view enabled`:`Horizontal Chat split view disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving Chat split view setting: `+t,6e3)}}async onOverridePrerenderSkeletonToggle(e){try{s(`shadow-claw-override-prerender-skeleton`,e?`true`:`false`)}catch(e){console.warn(`Unable to save setting to localStorage:`,e)}if(this.db)try{await d(this.db,n.OVERRIDE_PRERENDER_SKELETON,e?`true`:`false`),h(e?`Pre-rendered content override enabled`:`Pre-rendered content override disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving pre-rendered content override setting: `+t,6e3)}}async onPagesAutoRefreshInputChange(e){if(!this.db)return;let t=Math.max(0,Math.min(e,86400));try{await d(this.db,n.PAGES_AUTO_REFRESH_INTERVAL,String(t)),window.dispatchEvent(new CustomEvent(`shadow-claw-pages-auto-refresh-change`,{detail:{interval:t}})),h(t>0?`Pages auto refresh set to ${t}s`:`Pages auto refresh disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving Pages auto refresh interval: `+t,6e3)}}async onSidebarHideChatToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_CHAT_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-chat-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Chat hidden in sidebar`:`Chat shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Chat visibility: `+t,6e3)}}async onSidebarHideFilesToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_FILES_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-files-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Files hidden in sidebar`:`Files shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Files visibility: `+t,6e3)}}async onSidebarHidePagesToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_PAGES_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-pages-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Pages hidden in sidebar`:`Pages shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Pages visibility: `+t,6e3)}}async onSidebarHideTasksToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_TASKS_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-tasks-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Tasks hidden in sidebar`:`Tasks shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Tasks visibility: `+t,6e3)}}async populateAssistantSettings(){let r=this.shadowRoot;if(!r||!this.db)return;let i=r.querySelector(`[data-setting="assistant-name-input"]`);if(i){let e=await a(this.db,n.ASSISTANT_NAME),t=this.orchestrator?.assistantName||l.orchestrator?.assistantName;i.value=typeof e==`string`&&e||t||`ShadowClaw`}let c=await a(this.db,n.ACTIVITY_LOG_DISK_LOGGING_ENABLED),u=c===!0||c===`true`||c===1||c===`1`,d=r.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`);d&&(d.checked=u);let f=await a(this.db,n.SIDEBAR_PAGES_HIDDEN),p=f===!0||f===`true`||f===1||f===`1`,h=r.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`);h&&(h.checked=p);let g=await a(this.db,n.SIDEBAR_CHAT_HIDDEN),_=g===!0||g===`true`||g===1||g===`1`,v=r.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`);v&&(v.checked=_);let y=await a(this.db,n.SIDEBAR_TASKS_HIDDEN),b=y===!0||y===`true`||y===1||y===`1`,x=r.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`);x&&(x.checked=b);let S=await a(this.db,n.SIDEBAR_FILES_HIDDEN),C=S===!0||S===`true`||S===1||S===`1`,w=r.querySelector(`[data-setting="sidebar-hide-files-toggle"]`);w&&(w.checked=C);let T=await a(this.db,n.CHAT_SPLIT_VIEW_ENABLED),E=m(T,!1),D=r.querySelector(`[data-setting="chat-split-view-toggle"]`);D&&(D.checked=E);let O=r.querySelector(`[data-setting="pages-auto-refresh-input"]`);if(O){let e=await a(this.db,n.PAGES_AUTO_REFRESH_INTERVAL);if(typeof e==`string`||typeof e==`number`){let t=parseInt(String(e),10);O.value=!isNaN(t)&&t>=0?String(t):`0`}else O.value=`0`}let A=await a(this.db,n.OVERRIDE_PRERENDER_SKELETON),j=null;try{j=o(`shadow-claw-override-prerender-skeleton`)}catch{}let M=k();if(A!=null){M=m(A);try{s(`shadow-claw-override-prerender-skeleton`,M?`true`:`false`)}catch{}}else j!==null&&(M=j===`true`);let N=r.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`);N&&(N.checked=M);let P=r.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(P){let r=await a(this.db,n.ALLOWED_IFRAME_HOST_PATTERNS);typeof r==`string`&&r.trim().length>0?(P.value=r,t(r)):P.value=e.join(`
888
+ `,`text/html`),M=j.querySelector(`template`);let N=[];N=M?Array.from(M.content.children):Array.from(j.head.children).concat(Array.from(j.body.children));var P=N;const F={ai:[()=>import(`./shadow-claw-llm-74ieXp7i.js`)],environment:[()=>import(`./shadow-claw-networking-DNX8vaIQ.js`),()=>import(`./shadow-claw-webvm-CxxI2bnC.js`),()=>import(`./shadow-claw-storage-gQGExZRq.js`)],integrations:[()=>import(`./shadow-claw-git-D2M8VixW.js`),()=>import(`./shadow-claw-accounts-Di-anCZ1.js`),()=>import(`./shadow-claw-mcp-remote-BX0BkSmy.js`),()=>import(`./shadow-claw-control-plane-KXEdLOGl.js`),()=>import(`./shadow-claw-integrations-Cgw6v9_1.js`),()=>import(`./shadow-claw-task-server-Ca45uY7S.js`),()=>import(`./shadow-claw-notifications-BLTaGAny.js`)]},I=/* @__PURE__ */ new Set;async function L(e){if(I.has(e))return;let t=F[e];t&&(I.add(e),await Promise.all(t.map(e=>e())))}const R=`shadow-claw-settings`;var z=class extends y{static styles=A;static template=P;activeTab=`ai`;db=null;orchestrator=null;pendingRestoreFile=null;constructor(){super()}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await r(),this.orchestrator=l.orchestrator,await this.render()}activateTab(e){e&&this.activeTab!==e&&(this.activeTab=e,this.applyTabState())}applyTabState(){L(this.activeTab).catch(console.error);let e=this.shadowRoot;e&&(e.querySelectorAll(`[data-tab-target]`).forEach(e=>{let t=e.dataset.tabTarget===this.activeTab;e.classList.toggle(`active`,t),e.setAttribute(`aria-selected`,String(t)),e.tabIndex=t?0:-1}),e.querySelectorAll(`[data-tab-panel]`).forEach(e=>{e.hidden=e.dataset.tabPanel!==this.activeTab}))}bindSettingsActions(){let e=this.shadowRoot;if(!e)return;e.querySelector(`[data-action="backup-settings"]`)?.addEventListener(`click`,()=>this.openBackupDialog());let t=e.querySelector(`.settings__restore-input`);e.querySelector(`[data-action="restore-settings"]`)?.addEventListener(`click`,()=>{t instanceof HTMLInputElement&&(t.value=``,t.click())}),t?.addEventListener(`change`,e=>{let t=e.target;if(!(t instanceof HTMLInputElement))return;let n=t.files?.[0]||null;n&&(this.pendingRestoreFile=n,this.openRestoreDialog(n.name))}),e.querySelector(`[data-action="clear-settings"]`)?.addEventListener(`click`,()=>this.openClearDialog()),e.querySelector(`[data-action="cancel-backup-settings"]`)?.addEventListener(`click`,()=>this.closeDialog(`.settings__backup-dialog`)),e.querySelector(`[data-action="confirm-backup-settings"]`)?.addEventListener(`click`,()=>{this.confirmBackup()}),e.querySelector(`[data-action="cancel-restore-settings"]`)?.addEventListener(`click`,()=>{this.pendingRestoreFile=null,this.closeDialog(`.settings__restore-dialog`)}),e.querySelector(`[data-action="confirm-restore-settings"]`)?.addEventListener(`click`,()=>{this.confirmRestore()}),e.querySelector(`[data-action="cancel-clear-settings"]`)?.addEventListener(`click`,()=>this.closeDialog(`.settings__clear-dialog`)),e.querySelector(`[data-action="confirm-clear-settings"]`)?.addEventListener(`click`,()=>{this.confirmClear()}),e.querySelector(`[data-action="save-assistant-name"]`)?.addEventListener(`click`,()=>this.saveAssistantName()),e.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onActivityLogDiskLoggingToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHidePagesToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideChatToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideTasksToggle(t.checked)}),e.querySelector(`[data-setting="sidebar-hide-files-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onSidebarHideFilesToggle(t.checked)}),e.querySelector(`[data-setting="chat-split-view-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onChatSplitViewToggle(t.checked)}),e.querySelector(`[data-setting="pages-auto-refresh-input"]`)?.addEventListener(`change`,e=>{let t=e.target;if(t){let e=parseInt(t.value,10);this.onPagesAutoRefreshInputChange(isNaN(e)?0:e)}}),e.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`)?.addEventListener(`change`,e=>{let t=e.target;t&&this.onOverridePrerenderSkeletonToggle(t.checked)}),e.querySelector(`[data-action="save-dom-allowed-iframe-hosts"]`)?.addEventListener(`click`,()=>{this.saveDomAllowedIframeHosts()})}closeDialog(e){this.getDialog(e)?.close()}getDialog(e){let t=this.shadowRoot;if(!t)return null;let n=t.querySelector(e);return n instanceof HTMLDialogElement?n:null}handleTabKeydown(e,t){let n=this.shadowRoot;if(!n)return;let r=Array.from(n.querySelectorAll(`[data-tab-target]`)),i=r.indexOf(t);if(i<0)return;let a=-1;switch(e.key){case`ArrowRight`:case`ArrowDown`:a=(i+1)%r.length;break;case`ArrowLeft`:case`ArrowUp`:a=(i-1+r.length)%r.length;break;case`Home`:a=0;break;case`End`:a=r.length-1;break;default:return}e.preventDefault();let o=r[a];o.focus(),this.activateTab(o.dataset.tabTarget)}openBackupDialog(){let e=this.shadowRoot?.querySelector(`[data-setting="include-plaintext-passwords"]`);e instanceof HTMLInputElement&&(e.checked=!1),this.showDialog(`.settings__backup-dialog`)}openClearDialog(){this.showDialog(`.settings__clear-dialog`)}openRestoreDialog(e){let t=this.shadowRoot?.querySelector(`[data-info="restore-filename"]`);t instanceof HTMLElement&&(t.textContent=`Selected file: ${e}`),this.showDialog(`.settings__restore-dialog`)}showDialog(e){let t=this.getDialog(e);t&&(typeof t.showModal==`function`?t.showModal():t.setAttribute(`open`,``))}async confirmBackup(){if(!this.db){_(`Settings database is unavailable`,5e3);return}let e=this.shadowRoot?.querySelector(`[data-setting="include-plaintext-passwords"]`),t=e instanceof HTMLInputElement&&e.checked;try{if(t){let e=await this.promptForPlaintextBackupHandle();if(!e)return;await E(e,await this.getAllConfigEntries(),t),this.closeDialog(`.settings__backup-dialog`),h(`Settings backup saved`,3e3);return}let e=await T(await this.getAllConfigEntries(),t),n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`shadowclaw-settings-backup-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n),this.closeDialog(`.settings__backup-dialog`),h(`Settings backup downloaded`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to backup settings: ${t}`,6e3)}}async confirmClear(){if(!this.db)_(`Settings database is unavailable`,5e3);else try{await this.replaceConfigEntries([]),this.closeDialog(`.settings__clear-dialog`),g(`Settings cleared. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to clear settings: ${t}`,6e3)}}async confirmRestore(){if(!this.db){_(`Settings database is unavailable`,5e3);return}let e=this.pendingRestoreFile;if(!e)_(`No backup file selected`,4e3);else try{let t=O(await e.text()),n=await D(t.configEntries,t.plaintextPasswords||[]);await this.replaceConfigEntries(n),this.pendingRestoreFile=null,this.closeDialog(`.settings__restore-dialog`),h(`Settings restored. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Failed to restore settings: ${t}`,6e3)}}async getAllConfigEntries(){if(!this.db)throw Error(`Database is unavailable`);if(i(this.db))return(this.db.db.prepare(`SELECT key, value FROM config ORDER BY key`).all()??[]).filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value}));let e=this.db;return await new Promise((t,n)=>{try{let r=e.transaction(`config`,`readonly`);if(!r){n(/* @__PURE__ */ Error(`Failed to open read transaction`));return}let i=r.objectStore(`config`).getAll();i.onsuccess=()=>{t((Array.isArray(i.result)?i.result:[]).filter(e=>e&&typeof e.key==`string`).map(e=>({key:e.key,value:e.value})))},i.onerror=()=>{n(i.error||/* @__PURE__ */ Error(`Failed to read settings config`))}}catch(e){n(e)}})}async onActivityLogDiskLoggingToggle(e){if(this.db)try{await d(this.db,n.ACTIVITY_LOG_DISK_LOGGING_ENABLED,e?`true`:`false`),h(e?`Activity log disk logging enabled`:`Activity log disk logging disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving activity log disk logging setting: `+t,6e3)}}async onChatSplitViewToggle(e){if(this.db)try{await d(this.db,n.CHAT_SPLIT_VIEW_ENABLED,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`chat-split-view-change`,{detail:{enabled:e},bubbles:!0,composed:!0})),h(e?`Horizontal Chat split view enabled`:`Horizontal Chat split view disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving Chat split view setting: `+t,6e3)}}async onOverridePrerenderSkeletonToggle(e){try{s(`shadow-claw-override-prerender-skeleton`,e?`true`:`false`)}catch(e){console.warn(`Unable to save setting to localStorage:`,e)}if(this.db)try{await d(this.db,n.OVERRIDE_PRERENDER_SKELETON,e?`true`:`false`),h(e?`Pre-rendered content override enabled`:`Pre-rendered content override disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving pre-rendered content override setting: `+t,6e3)}}async onPagesAutoRefreshInputChange(e){if(!this.db)return;let t=Math.max(0,Math.min(e,86400));try{await d(this.db,n.PAGES_AUTO_REFRESH_INTERVAL,String(t)),window.dispatchEvent(new CustomEvent(`shadow-claw-pages-auto-refresh-change`,{detail:{interval:t}})),h(t>0?`Pages auto refresh set to ${t}s`:`Pages auto refresh disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving Pages auto refresh interval: `+t,6e3)}}async onSidebarHideChatToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_CHAT_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-chat-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Chat hidden in sidebar`:`Chat shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Chat visibility: `+t,6e3)}}async onSidebarHideFilesToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_FILES_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-files-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Files hidden in sidebar`:`Files shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Files visibility: `+t,6e3)}}async onSidebarHidePagesToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_PAGES_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-pages-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Pages hidden in sidebar`:`Pages shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Pages visibility: `+t,6e3)}}async onSidebarHideTasksToggle(e){if(this.db)try{await d(this.db,n.SIDEBAR_TASKS_HIDDEN,e?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-tasks-visibility-change`,{detail:{hidden:e},bubbles:!0,composed:!0})),h(e?`Tasks hidden in sidebar`:`Tasks shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving sidebar Tasks visibility: `+t,6e3)}}async populateAssistantSettings(){let r=this.shadowRoot;if(!r||!this.db)return;let i=r.querySelector(`[data-setting="assistant-name-input"]`);if(i){let e=await a(this.db,n.ASSISTANT_NAME),t=this.orchestrator?.assistantName||l.orchestrator?.assistantName;i.value=typeof e==`string`&&e||t||`ShadowClaw`}let c=await a(this.db,n.ACTIVITY_LOG_DISK_LOGGING_ENABLED),u=c===!0||c===`true`||c===1||c===`1`,d=r.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`);d&&(d.checked=u);let f=await a(this.db,n.SIDEBAR_PAGES_HIDDEN),p=f===!0||f===`true`||f===1||f===`1`,h=r.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`);h&&(h.checked=p);let g=await a(this.db,n.SIDEBAR_CHAT_HIDDEN),_=g===!0||g===`true`||g===1||g===`1`,v=r.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`);v&&(v.checked=_);let y=await a(this.db,n.SIDEBAR_TASKS_HIDDEN),b=y===!0||y===`true`||y===1||y===`1`,x=r.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`);x&&(x.checked=b);let S=await a(this.db,n.SIDEBAR_FILES_HIDDEN),C=S===!0||S===`true`||S===1||S===`1`,w=r.querySelector(`[data-setting="sidebar-hide-files-toggle"]`);w&&(w.checked=C);let T=await a(this.db,n.CHAT_SPLIT_VIEW_ENABLED),E=m(T,!1),D=r.querySelector(`[data-setting="chat-split-view-toggle"]`);D&&(D.checked=E);let O=r.querySelector(`[data-setting="pages-auto-refresh-input"]`);if(O){let e=await a(this.db,n.PAGES_AUTO_REFRESH_INTERVAL);if(typeof e==`string`||typeof e==`number`){let t=parseInt(String(e),10);O.value=!isNaN(t)&&t>=0?String(t):`0`}else O.value=`0`}let A=await a(this.db,n.OVERRIDE_PRERENDER_SKELETON),j=null;try{j=o(`shadow-claw-override-prerender-skeleton`)}catch{}let M=k();if(A!=null){M=m(A);try{s(`shadow-claw-override-prerender-skeleton`,M?`true`:`false`)}catch{}}else j!==null&&(M=j===`true`);let N=r.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`);N&&(N.checked=M);let P=r.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(P){let r=await a(this.db,n.ALLOWED_IFRAME_HOST_PATTERNS);typeof r==`string`&&r.trim().length>0?(P.value=r,t(r)):P.value=e.join(`
889
889
  `)}let F=r.querySelector(`[data-setting="markdown-frontmatter-pages-toggle"]`);F&&(F.checked=m(await a(this.db,n.MARKDOWN_FRONTMATTER_PAGES),!0));let I=r.querySelector(`[data-setting="markdown-frontmatter-file-viewer-toggle"]`);I&&(I.checked=m(await a(this.db,n.MARKDOWN_FRONTMATTER_FILE_VIEWER),!0));let L=r.querySelector(`[data-setting="markdown-frontmatter-chat-toggle"]`);L&&(L.checked=m(await a(this.db,n.MARKDOWN_FRONTMATTER_CHAT),!0));let R=r.querySelector(`[data-setting="markdown-frontmatter-tasks-toggle"]`);R&&(R.checked=m(await a(this.db,n.MARKDOWN_FRONTMATTER_TASKS),!0))}async promptForPlaintextBackupHandle(){let e=Reflect.get(globalThis,`showSaveFilePicker`),t=typeof e==`function`?e.bind(globalThis):null;if(!t)throw Error(`Plaintext settings backup requires the File System Access API.`);try{return await t({id:`shadowclaw-settings-backup`,suggestedName:`shadowclaw-settings-backup-${b()}.json`,types:[{description:`JSON Files`,accept:{"application/json":[`.json`]}}]})}catch(e){if(e instanceof Error&&e.name===`AbortError`)return null;throw e}}async render(){let e=this.shadowRoot;if(!e)return;e.querySelector(`[data-action="show-channels-config"]`)?.addEventListener(`click`,()=>{this.dispatchEvent(new CustomEvent(`navigate`,{detail:{page:`channels`},bubbles:!0,composed:!0}))}),e.querySelector(`[data-action="show-tools-config"]`)?.addEventListener(`click`,()=>{this.dispatchEvent(new CustomEvent(`navigate`,{detail:{page:`tools`},bubbles:!0,composed:!0}))}),e.querySelectorAll(`[data-tab-target]`).forEach(e=>{e.addEventListener(`click`,()=>{this.activateTab(e.dataset.tabTarget)}),e.addEventListener(`keydown`,t=>{this.handleTabKeydown(t,e)})}),this.applyTabState(),this.bindSettingsActions();let t=e.querySelector(`[data-info="deployed-revision"]`);t&&(t.textContent=`Deployed revision: ${document.querySelector(`meta[name="revision"]`)?.getAttribute(`content`)?.trim()||`unknown`}`),await this.populateAssistantSettings()}async replaceConfigEntries(e){if(!this.db)throw Error(`Database is unavailable`);if(i(this.db)){let t=this.db.db;t.prepare(`DELETE FROM config`).run();let n=t.prepare(`INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)`);for(let t of e)n.run(t.key,typeof t.value==`string`?t.value:JSON.stringify(t.value));return}let t=this.db;await new Promise((n,r)=>{try{let i=t.transaction(`config`,`readwrite`);if(!i){r(/* @__PURE__ */ Error(`Failed to open write transaction`));return}let a=i.objectStore(`config`);a.clear();for(let t of e)a.put({key:t.key,value:t.value});i.oncomplete=()=>n(),i.onerror=()=>r(i.error||/* @__PURE__ */ Error(`Failed to update config`)),i.onabort=()=>r(i.error||/* @__PURE__ */ Error(`Config update aborted`))}catch(e){r(e)}})}async saveAssistantName(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="assistant-name-input"]`);if(!t)return;let r=t.value.trim();if(!r)v(`Please enter a name`,3e3);else{s(`assistantName`,r);try{let e=this.orchestrator||l.orchestrator;e?(this.orchestrator=e,await c(e,this.db,r)):await d(this.db,n.ASSISTANT_NAME,r)}catch(e){console.warn(`Could not update orchestrator:`,e)}h(`Assistant name saved`,3e3)}}async saveDomAllowedIframeHosts(){let e=this.shadowRoot;if(!e||!this.db)return;let r=e.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(!r)return;let i=r.value.split(`
890
890
  `).map(e=>e.trim()).filter(e=>e.length>0),a=e.querySelector(`[data-setting="markdown-frontmatter-pages-toggle"]`),o=e.querySelector(`[data-setting="markdown-frontmatter-file-viewer-toggle"]`),s=e.querySelector(`[data-setting="markdown-frontmatter-chat-toggle"]`),c=e.querySelector(`[data-setting="markdown-frontmatter-tasks-toggle"]`);try{let e=i.join(`
891
891
  `);await d(this.db,n.ALLOWED_IFRAME_HOST_PATTERNS,e),await d(this.db,n.MARKDOWN_FRONTMATTER_PAGES,String(a?.checked??!0)),await d(this.db,n.MARKDOWN_FRONTMATTER_FILE_VIEWER,String(o?.checked??!0)),await d(this.db,n.MARKDOWN_FRONTMATTER_CHAT,String(s?.checked??!0)),await d(this.db,n.MARKDOWN_FRONTMATTER_TASKS,String(c?.checked??!0)),t(i),h(`DOM iframe embed settings saved`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);_(`Error saving DOM iframe embed settings: `+t,6e3)}}};customElements.get(R)||customElements.define(R,z);export{z as ShadowClawSettings};
@@ -1,4 +1,4 @@
1
- import{d as e}from"./custom-element-security-Cl991z-x.js";import{r as t}from"./config-y_2Fg77m.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./get-config-Bkvl__ZS.js";import{an as i,in as a,t as o}from"./orchestrator-BlvEG3PO.js";import{c as s}from"./get-group-dir-CffDzUlA.js";import{t as c}from"./set-config-DSiuMe0k.js";import{t as l}from"./parse-boolean-config-BigJ9U46.js";import{a as u,r as d,s as f}from"./toast-CtIuHprH.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-xrx5qhzv.js";async function h(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.estimate){let e=await navigator.storage.estimate();return{usage:e.usage||0,quota:e.quota||0}}}catch(e){console.warn(`Failed to get storage estimate:`,e)}return{usage:0,quota:0}}async function g(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.persisted)return await navigator.storage.persisted()}catch(e){console.warn(`Failed to check persistent storage:`,e)}return!1}async function _(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.persist)return await navigator.storage.persist()}catch(e){console.warn(`Failed to request persistent storage:`,e)}return!1}async function v(e){let n=Reflect.get(globalThis,`showDirectoryPicker`),r=typeof n==`function`?n.bind(globalThis):null;if(!r)throw Error(`Local folder picker is unavailable in this browser/context.`);try{let n=await r({mode:`readwrite`,id:`shadowclaw-storage`});return await c(e,t.STORAGE_HANDLE,n),await i(e),await a(e),!0}catch(e){if(e instanceof Error&&e.name===`AbortError`)return!1;throw e}}const y=new CSSStyleSheet;y.replaceSync(`*,
1
+ import{d as e}from"./custom-element-security-BR4V40j4.js";import{r as t}from"./config-y_2Fg77m.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./get-config-Bkvl__ZS.js";import{an as i,in as a,t as o}from"./orchestrator-OoUK7CF9.js";import{c as s}from"./get-group-dir-CffDzUlA.js";import{t as c}from"./set-config-DSiuMe0k.js";import{t as l}from"./parse-boolean-config-BigJ9U46.js";import{a as u,r as d,s as f}from"./toast-CtIuHprH.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-xrx5qhzv.js";async function h(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.estimate){let e=await navigator.storage.estimate();return{usage:e.usage||0,quota:e.quota||0}}}catch(e){console.warn(`Failed to get storage estimate:`,e)}return{usage:0,quota:0}}async function g(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.persisted)return await navigator.storage.persisted()}catch(e){console.warn(`Failed to check persistent storage:`,e)}return!1}async function _(){try{if(typeof navigator<`u`&&navigator.storage&&navigator.storage.persist)return await navigator.storage.persist()}catch(e){console.warn(`Failed to request persistent storage:`,e)}return!1}async function v(e){let n=Reflect.get(globalThis,`showDirectoryPicker`),r=typeof n==`function`?n.bind(globalThis):null;if(!r)throw Error(`Local folder picker is unavailable in this browser/context.`);try{let n=await r({mode:`readwrite`,id:`shadowclaw-storage`});return await c(e,t.STORAGE_HANDLE,n),await i(e),await a(e),!0}catch(e){if(e instanceof Error&&e.name===`AbortError`)return!1;throw e}}const y=new CSSStyleSheet;y.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{n as e}from"./db-BUuJo1Gf.js";import{C as t,S as n,t as r}from"./orchestrator-BlvEG3PO.js";import{a as i,r as a}from"./toast-CtIuHprH.js";import{t as o}from"./shadow-claw-element-DIrv3P6A.js";import{t as s}from"./effect-xrx5qhzv.js";const c=new CSSStyleSheet;c.replaceSync(`*,
1
+ import{n as e}from"./db-BUuJo1Gf.js";import{C as t,S as n,t as r}from"./orchestrator-OoUK7CF9.js";import{a as i,r as a}from"./toast-CtIuHprH.js";import{t as o}from"./shadow-claw-element-DIrv3P6A.js";import{t as s}from"./effect-xrx5qhzv.js";const c=new CSSStyleSheet;c.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{d as e}from"./custom-element-security-Cl991z-x.js";import{r as t}from"./config-y_2Fg77m.js";import{i as n}from"./app-routes-H23VN-4O.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{t as a}from"./html-BwtE_7wp.js";import{t as o}from"./orchestrator-BlvEG3PO.js";import{t as s}from"./parse-boolean-config-BigJ9U46.js";import{t as c}from"./push-client-DOHbdCyj.js";import{a as l,i as u,r as d}from"./toast-CtIuHprH.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-empty-state-CkvLk0-B.js";import{t as p}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-Bn1P7Cxb.js";import{renderMarkdown as m}from"./markdown-BeglYzw9.js";import{t as h}from"./file-viewer-DFC3kfeO.js";import"./shadow-claw-dialog-BVGf_c3S.js";const g=new CSSStyleSheet;g.replaceSync(`*,
1
+ import{d as e}from"./custom-element-security-BR4V40j4.js";import{r as t}from"./config-y_2Fg77m.js";import{i as n}from"./app-routes-H23VN-4O.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{t as a}from"./html-BwtE_7wp.js";import{t as o}from"./orchestrator-OoUK7CF9.js";import{t as s}from"./parse-boolean-config-BigJ9U46.js";import{t as c}from"./push-client-Dy4LGJy9.js";import{a as l,i as u,r as d}from"./toast-CtIuHprH.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-empty-state-CkvLk0-B.js";import{t as p}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-CjFOdo9v.js";import{renderMarkdown as m}from"./markdown-BPZYpfGm.js";import{t as h}from"./file-viewer-Dbh3K9nL.js";import"./shadow-claw-dialog-BVGf_c3S.js";const g=new CSSStyleSheet;g.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{A as e,O as t,k as n,t as r}from"./orchestrator-BlvEG3PO.js";import{t as i}from"./shadow-claw-element-DIrv3P6A.js";function a(e){if(!e)return``;let t=e.split(`
1
+ import{A as e,O as t,k as n,t as r}from"./orchestrator-OoUK7CF9.js";import{t as i}from"./shadow-claw-element-DIrv3P6A.js";function a(e){if(!e)return``;let t=e.split(`
2
2
  `);for(let e=t.length-1;e>=0;--e){let n=t[e]||``;if(/[#$](?:\s|$)/.test(n))return n}return``}function o(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=12}function s(e,t){let n=e[t+1];if(n===void 0)return{action:`ignore`,nextIndex:t+1,incomplete:!0};if(n===`[`){let n=t+2;for(;n<e.length;){let t=e.charCodeAt(n);if(t>=64&&t<=126){let t=e[n];return t===`J`?{action:`clear-screen`,nextIndex:n+1}:t===`K`?{action:`clear-line`,nextIndex:n+1}:{action:`ignore`,nextIndex:n+1}}n+=1}return{action:`ignore`,nextIndex:e.length,incomplete:!0}}if(n===`]`){let n=t+2;for(;n<e.length;){let t=e[n];if(t===`\x07`)return{action:`ignore`,nextIndex:n+1};if(t===`\x1B`&&e[n+1]===`\\`)return{action:`ignore`,nextIndex:n+2};n+=1}return{action:`ignore`,nextIndex:e.length,incomplete:!0}}return{action:`ignore`,nextIndex:Math.min(t+2,e.length)}}function c(e){return e.replace(/(?:^|\n)[^\n]*mkdir -p \/home\/user 2>&1; echo "?__BCDONE_\d+__\$\?"?[^\n]*(?:\n|$)/g,`
3
3
  `).replace(/(?:^|\n)\s*__BCDONE_\d+__(?:\d+|\$\?)?\s*(?:\n|$)/g,`
4
4
  `).replace(/^\n+(?=\S)/,``)}function l(e,t,n=``,r){let i=r?.respectEraseSequences??!0,a=n+t,o=e;for(let e=0;e<a.length;e++){let t=a[e];if(t===`\x1B`){let t=s(a,e);if(t.incomplete)return{text:o,pending:a.slice(e)};if(t.action===`clear-screen`&&i&&(o=``),t.action===`clear-line`&&i){let e=o.lastIndexOf(`
@@ -1,4 +1,4 @@
1
- import{A as e,F as t}from"./config-y_2Fg77m.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./orchestrator-BlvEG3PO.js";import{t as i}from"./tools-FiTtOlIt.js";import{t as a}from"./ulid-BSJxYh6W.js";import{t as o}from"./tools-CHxUdGxZ.js";import{n as s,t as c}from"./sync-web-mcp-registration-BnHVUjat.js";import"./tools-C4xNCwrc.js";import{a as l,i as u,r as d}from"./toast-CtIuHprH.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import{t as p}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-Bn1P7Cxb.js";import"./shadow-claw-dialog-BVGf_c3S.js";import{t as m}from"./webmcp-_TBqXlVW.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{A as e,F as t}from"./config-y_2Fg77m.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./orchestrator-OoUK7CF9.js";import{t as i}from"./tools-CwQq5tJH.js";import{t as a}from"./ulid-BSJxYh6W.js";import{t as o}from"./tools-CHxUdGxZ.js";import{n as s,t as c}from"./sync-web-mcp-registration-CkCA8UFm.js";import"./tools-C4xNCwrc.js";import{a as l,i as u,r as d}from"./toast-CtIuHprH.js";import{t as f}from"./shadow-claw-element-DIrv3P6A.js";import{t as p}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-CjFOdo9v.js";import"./shadow-claw-dialog-BVGf_c3S.js";import{t as m}from"./webmcp-CmtWOAFm.js";const h=new CSSStyleSheet;h.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{f as e,n as t,r as n}from"./config-y_2Fg77m.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{M as a,N as o,T as s,j as c,t as l}from"./orchestrator-BlvEG3PO.js";import{a as u,r as d,s as f}from"./toast-CtIuHprH.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-xrx5qhzv.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{f as e,n as t,r as n}from"./config-y_2Fg77m.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{M as a,N as o,T as s,j as c,t as l}from"./orchestrator-OoUK7CF9.js";import{a as u,r as d,s as f}from"./toast-CtIuHprH.js";import{t as p}from"./shadow-claw-element-DIrv3P6A.js";import{t as m}from"./effect-xrx5qhzv.js";const h=new CSSStyleSheet;h.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -0,0 +1 @@
1
+ import{r as e}from"./config-y_2Fg77m.js";import{F as t,Vt as n,t as r}from"./orchestrator-OoUK7CF9.js";import{t as i}from"./tools-CwQq5tJH.js";import{t as a}from"./set-config-DSiuMe0k.js";import{t as o}from"./effect-xrx5qhzv.js";import{a as s,i as c,n as l,o as u,r as d,s as f}from"./webmcp-CmtWOAFm.js";const p={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 m(e,a){if(typeof e.webMcpEffectCleanup==`function`&&(e.webMcpEffectCleanup(),e.webMcpEffectCleanup=null),!e.webMcpToolsEnabled){f();return}let u=l(t=>{e.events?.emit(`webmcp-tool-activated`,{toolName:t.toolName})}),m=d(t=>{e.events?.emit(`webmcp-tool-cancel`,{toolName:t.toolName})}),h=c(t=>{e.events?.emit(`webmcp-tool-change`,{event:t})}),g=o(()=>{let o=r.activeGroupId,c=i.allTools,l=i.enabledTools;i.declarativeTools,i.declarativeToolNamesEnabled;let u=r.groups.find(e=>e.groupId===o);e.webMcpRegistrationLock=e.webMcpRegistrationLock.then(async()=>{f(),await new Promise(e=>setTimeout(e,0));let r=[];try{r=await i.refreshDeclarativeTools(a,o)}catch{}let d=r.filter(e=>i.isDeclarativeToolEnabled(e.name)),m=[...c,...r],h=u?.toolTags&&u.toolTags.length>0?m.filter(e=>u.toolTags.includes(e.name)):[...l,...d],g={skills:[]};try{g=await n(a,o)}catch{}g.skills.length>0&&!h.some(e=>e.name===p.name)&&(h=[...h,p]),await s(e.agentWorker,async n=>{await t(e,a,n)},o,h)}).catch(e=>{console.error(`WebMCP registration failed:`,e)})});e.webMcpEffectCleanup=()=>{try{u()}catch{}try{m()}catch{}try{h()}catch{}typeof g==`function`&&g()}}async function h(t,n,r,i){f(),u(r),await a(n,e.WEBMCP_MODE,r),m(i.orchestrator,n)}async function g(t,n,r,i){t.webMcpToolsEnabled=!!r,await a(n,e.WEBMCP_TOOLS_ENABLED,t.webMcpToolsEnabled?`true`:`false`),m(i.orchestrator,n)}export{p as i,g as n,m as r,h as t};
@@ -1,3 +1,3 @@
1
- import{i as e,n as t}from"./rolldown-runtime-DBVvNlSN.js";import{m as n}from"./custom-element-security-Cl991z-x.js";import{t as r}from"./browser-B1SoUj6D.js";import{o as i,r as a}from"./config-y_2Fg77m.js";import{t as o}from"./get-config-Bkvl__ZS.js";import{t as s}from"./dist-CeFyqf9k.js";import{a as c,o as l,r as u,s as d,t as f}from"./get-group-dir-CffDzUlA.js";import{t as p}from"./set-config-DSiuMe0k.js";import{t as m}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";import{t as h}from"./gray-matter-CbX9xU8_.js";function g(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=/* @__PURE__ */ Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function _(e,t,n){let r=await f(e,t),{dirs:i,filename:a}=g(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.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 s.getFile()).text()}}const v={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."},y=/^[a-z][a-z0-9_]{0,63}$/;function b(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(!y.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`||!y.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 x(e,t=i){let n=[],r=[],a=t===`br:main`?[i]:[t,i];for(let t of a)try{let i=await f(e,t),a=[];async function o(e,t){for await(let[n,r]of e.entries()){let e=`${t}/${n}`;r.kind===`directory`?await o(r,e):n.endsWith(`.json`)&&e.startsWith(`.agents/tools/`)&&a.push(e)}}try{await o(await(await i.getDirectoryHandle(`.agents`)).getDirectoryHandle(`tools`),`.agents/tools`)}catch{continue}for(let i of a.sort())try{let r=b(i,JSON.parse(await _(e,t,i)));n.some(e=>e.name===r.name)||n.push(r)}catch(e){r.push(e instanceof Error?e.message:String(e))}}catch{}return{tools:n,diagnostics:r}}async function S(e,t=i,n){try{let{tools:r}=await x(e,t),i=r.find(e=>e.name===n)||null;if(!i)return null;let s=await o(e,a.DECLARATIVE_TOOLS_ENABLED);return Array.isArray(s)&&!s.includes(n)?null:i}catch{return null}}var C=/* @__PURE__ */ e(r(),1);async function w(e){if(typeof e==`string`)return new TextEncoder().encode(e).buffer;if(typeof Blob<`u`&&e instanceof Blob)return e.arrayBuffer();if(e instanceof ArrayBuffer)return e.slice(0);if(ArrayBuffer.isView(e)){let{buffer:t,byteOffset:n,byteLength:r}=e;return t.slice(n,n+r)}return/* @__PURE__ */ new ArrayBuffer(0)}function T(e){return Array.from(new Uint8Array(e)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function E(t){let n=await w(t),r=globalThis.crypto?.subtle??globalThis.window?.crypto?.subtle??(C.default===void 0?void 0:(await import(`./crypto-browserify-B2g2edTN.js`).then(t=>/* @__PURE__ */ e(t.default,1))).webcrypto?.subtle);if(!r)throw Error(`crypto.subtle is not available in current environment`);return T(await r.digest(`SHA-256`,n))}const D=`.well-known/agent-skills/index.json`;function O(e){let t=e.trim();if(!t)throw Error(`URL cannot be empty`);let n=t;if(!n.startsWith(`http://`)&&!n.startsWith(`https://`)&&(n=`https://${n}`),n=n.replace(/\/+$/,``),n.endsWith(D)){let e=n.slice(0,-35).replace(/\/+$/,``);return{baseUrl:e,siteUrl:e,manifestUrl:n}}return{baseUrl:n,siteUrl:n,manifestUrl:`${n}/${D}`}}function k(e,t){if(!e)return``;try{return new URL(e,t).href}catch{return e}}function A(e,t){let n=JSON.parse(JSON.stringify(e));return Array.isArray(n.tools)&&(n.tools=n.tools.map(e=>({...e,url:k(e.url,t)}))),Array.isArray(n.scripts)&&(n.scripts=n.scripts.map(e=>({...e,url:k(e.url,t)}))),Array.isArray(n.skills)&&(n.skills=n.skills.map(e=>({...e,url:k(e.url,t),tools:Array.isArray(e.tools)?e.tools.map(e=>({...e,url:e.url?k(e.url,t):void 0})):void 0,scripts:Array.isArray(e.scripts)?e.scripts.map(e=>({...e,url:e.url?k(e.url,t):void 0})):void 0}))),n}async function j(e,t){if(!t||!t.startsWith(`sha256:`))return!0;let n=t.slice(7).trim().toLowerCase();return!n||(await E(typeof e==`string`?new TextEncoder().encode(e):e)).toLowerCase()===n}async function M(e,t=globalThis.fetch){let{baseUrl:n,manifestUrl:r}=O(e),i=await t(r,{headers:{Accept:`application/json`}});if(!i.ok)throw Error(`Failed to fetch discovery manifest: HTTP ${i.status} ${i.statusText}`.trim());let a=await i.json();if(!a||typeof a!=`object`)throw Error(`Invalid discovery manifest: expected a JSON object`);return{manifest:A(a,r),siteUrl:n,manifestUrl:r}}async function N(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(F(t)),await e.close()}else if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await I(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}}else throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function P(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let r=await I(t);return new Promise((t,i)=>{let a=``,o=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
1
+ import{i as e,n as t}from"./rolldown-runtime-DBVvNlSN.js";import{m as n}from"./custom-element-security-BR4V40j4.js";import{t as r}from"./browser-B1SoUj6D.js";import{o as i,r as a}from"./config-y_2Fg77m.js";import{t as o}from"./get-config-Bkvl__ZS.js";import{t as s}from"./dist-CeFyqf9k.js";import{a as c,o as l,r as u,s as d,t as f}from"./get-group-dir-CffDzUlA.js";import{t as p}from"./set-config-DSiuMe0k.js";import{t as m}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";import{t as h}from"./gray-matter-CbX9xU8_.js";function g(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=/* @__PURE__ */ Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function _(e,t,n){let r=await f(e,t),{dirs:i,filename:a}=g(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.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 s.getFile()).text()}}const v={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."},y=/^[a-z][a-z0-9_]{0,63}$/;function b(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(!y.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`||!y.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 x(e,t=i){let n=[],r=[],a=t===`br:main`?[i]:[t,i];for(let t of a)try{let i=await f(e,t),a=[];async function o(e,t){for await(let[n,r]of e.entries()){let e=`${t}/${n}`;r.kind===`directory`?await o(r,e):n.endsWith(`.json`)&&e.startsWith(`.agents/tools/`)&&a.push(e)}}try{await o(await(await i.getDirectoryHandle(`.agents`)).getDirectoryHandle(`tools`),`.agents/tools`)}catch{continue}for(let i of a.sort())try{let r=b(i,JSON.parse(await _(e,t,i)));n.some(e=>e.name===r.name)||n.push(r)}catch(e){r.push(e instanceof Error?e.message:String(e))}}catch{}return{tools:n,diagnostics:r}}async function S(e,t=i,n){try{let{tools:r}=await x(e,t),i=r.find(e=>e.name===n)||null;if(!i)return null;let s=await o(e,a.DECLARATIVE_TOOLS_ENABLED);return Array.isArray(s)&&!s.includes(n)?null:i}catch{return null}}var C=/* @__PURE__ */ e(r(),1);async function w(e){if(typeof e==`string`)return new TextEncoder().encode(e).buffer;if(typeof Blob<`u`&&e instanceof Blob)return e.arrayBuffer();if(e instanceof ArrayBuffer)return e.slice(0);if(ArrayBuffer.isView(e)){let{buffer:t,byteOffset:n,byteLength:r}=e;return t.slice(n,n+r)}return/* @__PURE__ */ new ArrayBuffer(0)}function T(e){return Array.from(new Uint8Array(e)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function E(t){let n=await w(t),r=globalThis.crypto?.subtle??globalThis.window?.crypto?.subtle??(C.default===void 0?void 0:(await import(`./crypto-browserify-B2g2edTN.js`).then(t=>/* @__PURE__ */ e(t.default,1))).webcrypto?.subtle);if(!r)throw Error(`crypto.subtle is not available in current environment`);return T(await r.digest(`SHA-256`,n))}const D=`.well-known/agent-skills/index.json`;function O(e){let t=e.trim();if(!t)throw Error(`URL cannot be empty`);let n=t;if(!n.startsWith(`http://`)&&!n.startsWith(`https://`)&&(n=`https://${n}`),n=n.replace(/\/+$/,``),n.endsWith(D)){let e=n.slice(0,-35).replace(/\/+$/,``);return{baseUrl:e,siteUrl:e,manifestUrl:n}}return{baseUrl:n,siteUrl:n,manifestUrl:`${n}/${D}`}}function k(e,t){if(!e)return``;try{return new URL(e,t).href}catch{return e}}function A(e,t){let n=JSON.parse(JSON.stringify(e));return Array.isArray(n.tools)&&(n.tools=n.tools.map(e=>({...e,url:k(e.url,t)}))),Array.isArray(n.scripts)&&(n.scripts=n.scripts.map(e=>({...e,url:k(e.url,t)}))),Array.isArray(n.skills)&&(n.skills=n.skills.map(e=>({...e,url:k(e.url,t),tools:Array.isArray(e.tools)?e.tools.map(e=>({...e,url:e.url?k(e.url,t):void 0})):void 0,scripts:Array.isArray(e.scripts)?e.scripts.map(e=>({...e,url:e.url?k(e.url,t):void 0})):void 0}))),n}async function j(e,t){if(!t||!t.startsWith(`sha256:`))return!0;let n=t.slice(7).trim().toLowerCase();return!n||(await E(typeof e==`string`?new TextEncoder().encode(e):e)).toLowerCase()===n}async function M(e,t=globalThis.fetch){let{baseUrl:n,manifestUrl:r}=O(e),i=await t(r,{headers:{Accept:`application/json`}});if(!i.ok)throw Error(`Failed to fetch discovery manifest: HTTP ${i.status} ${i.statusText}`.trim());let a=await i.json();if(!a||typeof a!=`object`)throw Error(`Invalid discovery manifest: expected a JSON object`);return{manifest:A(a,r),siteUrl:n,manifestUrl:r}}async function N(e,t){let n=e?.createWritable,r=Reflect.get(e,`createWriteable`),i=typeof n==`function`?n.bind(e):typeof r==`function`?r.bind(e):null;if(i){let e=await i();await e.write(F(t)),await e.close()}else if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await I(t);n.truncate(0),n.write(e,{at:0}),typeof n.flush==`function`&&n.flush()}finally{n.close()}}else throw Error(`Writable file streams are not supported by this browser/storage backend.`)}async function P(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let r=await I(t);return new Promise((t,i)=>{let a=``,o=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
2
2
  `);a=URL.createObjectURL(new Blob([e],{type:`text/javascript`})),o=new Worker(n(a))}catch{a&&URL.revokeObjectURL(a),i(/* @__PURE__ */ Error(`Writable file streams are not supported by this browser/storage backend.`));return}let s=()=>{o&&o.terminate(),URL.revokeObjectURL(a)};o.onmessage=e=>{s(),e.data?.error?i(Error(e.data.error)):t()},o.onerror=e=>{s(),i(Error(e.message||`Worker file write failed`))},o.postMessage({pathSegments:e,bytes:r},[r.buffer])})}function F(e){if(typeof e==`string`||e instanceof Blob)return e;if(e instanceof Uint8Array){let t=new Uint8Array(e.byteLength);return t.set(e),new Blob([t])}return new Blob([e])}async function I(e){return e instanceof Uint8Array?e:typeof e==`string`?new TextEncoder().encode(e):e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof ArrayBuffer?new Uint8Array(e):/* @__PURE__ */ new Uint8Array}async function L(e,t,n,r){let{dirs:i,filename:a}=g(n);for(let n=0;n<2;n++)try{let n=await f(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await N(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await c(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await P([u(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&d(e)){l();continue}throw e}}async function R(e,t,n){try{return await _(e,t,n),!0}catch{return!1}}var z=/* @__PURE__ */ e(h(),1);const B=/^[a-z0-9](?:[a-z0-9]|-(?!-))*[a-z0-9]$|^[a-z0-9]$/;function V(e){try{let t=(0,z.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);if(t){let e=t[1],n=t[2]||``,r=e.split(/\r?\n/).map(e=>{let t=e.match(/^([a-zA-Z0-9_-]+):\s*(.+)$/);if(t){let[,e,n]=t,r=n.trim();if(r&&r!==`true`&&r!==`false`&&r!==`null`&&!r.startsWith(`"`)&&!r.startsWith(`'`)&&!r.startsWith(`[`)&&!r.startsWith(`{`)&&r!==`>`&&r!==`|`&&r!==`>-`&&r!==`|-`&&!/^-?\d+(?:\.\d+)?$/.test(r))return`${e}: ${JSON.stringify(r)}`}return e});try{let e=`---\n${r.join(`
3
- `)}\n---\n${n}`,t=(0,z.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{}let i={},a=e.match(/^name:\s*["']?([^"'\r\n]+)["']?/m);a&&(i.name=a[1].trim());let o=e.match(/^description:\s*(.+)$/m);if(o){let e=o[1].trim();(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))&&(e=e.slice(1,-1)),i.description=e}let s=e.match(/^user-invocable:\s*(true|false)/im);s&&(i[`user-invocable`]=s[1].toLowerCase()===`true`);let c=e.match(/^disable-model-invocation:\s*(true|false)/im);c&&(i[`disable-model-invocation`]=c[1].toLowerCase()===`true`);let l=e.match(/^allowed-tools:\s*["']?([^"'\r\n]+)["']?/m);l&&(i[`allowed-tools`]=l[1].trim());let u=e.match(/allowed-tools:\s*\n((?:\s*-\s*[^\r\n]+\r?\n?)+)/m);if(u){let e=u[1].split(/\r?\n/).map(e=>e.replace(/^\s*-\s*/,``).trim()).filter(Boolean);e.length>0&&(i[`allowed-tools`]=e)}return{data:i,content:n}}return{data:{},content:e}}}function H(e){if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t.join(` `):void 0}}function U(e,t){let n=V(t),r=n.data,i=typeof r.name==`string`?r.name.trim():``,a=typeof r.description==`string`?r.description.trim():``;if(!i)throw Error(`Skill at ${e} requires a name`);if(!a)throw Error(`Skill ${i} requires a description`);if(i.length>64||!B.test(i))throw Error(`Skill name must be 1-64 lowercase characters and hyphens: ${i}`);if(a.length>1024)throw Error(`Skill ${i} description must be 1024 characters or fewer`);let o=e.replace(/\/SKILL\.md$/u,``),s=r.metadata&&typeof r.metadata==`object`?r.metadata:void 0,c=H(s?.[`allowed-tools`])||H(s?.allowedTools)||H(r[`allowed-tools`])||H(r.allowedTools),l=[];if(s){for(let[e,t]of Object.entries(s))if(e!==`execution`&&t!=null){if(e===`allowed-tools`||e===`allowedTools`)c&&l.push([e,c]);else if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)l.push([e,String(t)]);else if(Array.isArray(t)){let n=t.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean);n.length>0&&l.push([e,n.join(` `)])}}}let u=l.length>0?Object.fromEntries(l):void 0,d=s?.execution,f;if(d!==void 0){if(!d||typeof d!=`object`||d.type!==`tools`||!Array.isArray(d.tools))throw Error(`Skill ${i} has invalid tools execution`);let e=d,t=typeof e.suppressToast==`boolean`?e.suppressToast:void 0,n=typeof e.suppressOutput==`boolean`?e.suppressOutput:void 0,r=e.tools.map(e=>({...e,...t!==void 0&&e.suppressToast===void 0?{suppressToast:t}:{},...n!==void 0&&e.suppressOutput===void 0?{suppressOutput:n}:{}}));f={type:`tools`,...t===void 0?{}:{suppressToast:t},...n===void 0?{}:{suppressOutput:n},tools:r}}return{name:i,description:a,...typeof r.license==`string`?{license:r.license}:{},...typeof r.compatibility==`string`?{compatibility:r.compatibility}:{},...u?{metadata:u}:{},...typeof c==`string`?{allowedTools:c}:{},...typeof r[`user-invocable`]==`boolean`?{userInvocable:r[`user-invocable`]}:typeof r[`user-invocable`]==`string`&&(r[`user-invocable`].toLowerCase()===`true`||r[`user-invocable`].toLowerCase()===`false`)?{userInvocable:r[`user-invocable`].toLowerCase()===`true`}:{},...typeof r[`disable-model-invocation`]==`boolean`?{disableModelInvocation:r[`disable-model-invocation`]}:typeof r[`disable-model-invocation`]==`string`&&(r[`disable-model-invocation`].toLowerCase()===`true`||r[`disable-model-invocation`].toLowerCase()===`false`)?{disableModelInvocation:r[`disable-model-invocation`].toLowerCase()===`true`}:{},...f?{execution:f}:{},body:n.content.trim(),path:e,basePath:o}}const W=new Set(m.map(e=>e.name)),G=/^[a-z][a-z0-9_]{0,63}$/;function K(e){return e?.targetSubdir?e.targetSubdir:e?.siteSlug?`imported/${e.siteSlug}`:`main`}async function q(e,t=i,n,r){let s=(n.name||``).trim();if(W.has(s))return{name:s,path:``,status:`failed`,error:`Cannot shadow built-in tool: ${s}`};if(!G.test(s))return{name:s,path:``,status:`failed`,error:`Invalid tool name: ${s}`};let c=`.agents/tools/${K(r)}/${s}.json`;try{if(await R(e,t,c)&&!r?.overwrite)return{name:s,path:c,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:s,path:c,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let l=await i.text();if(n.digest&&!await j(l,n.digest))return{name:s,path:c,status:`failed`,error:`Integrity verification failed for tool definition`};let u;try{u=JSON.parse(l)}catch{return{name:s,path:c,status:`failed`,error:`Downloaded tool definition is not valid JSON`}}if(b(c,u),await L(e,t,c,JSON.stringify(u,null,2)),r?.autoEnable){let t=await o(e,a.DECLARATIVE_TOOLS_ENABLED),n=new Set(Array.isArray(t)?t:[]);n.add(s),await p(e,a.DECLARATIVE_TOOLS_ENABLED,Array.from(n))}return{name:s,path:c,status:`imported`}}catch(e){return{name:s,path:c,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function J(e,t=i,n,r){let a=(n.name||``).trim(),o=`.agents/scripts/${K(r)}/${a.endsWith(`.js`)||a.endsWith(`.mjs`)?a:`${a}.js`}`;try{if(await R(e,t,o)&&!r?.overwrite)return{name:a,path:o,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:a,path:o,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let s=await i.text();return n.digest&&!await j(s,n.digest)?{name:a,path:o,status:`failed`,error:`Integrity verification failed for script`}:(await L(e,t,o,s),{name:a,path:o,status:`imported`})}catch(e){return{name:a,path:o,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function Y(e,t=i,n,r){let a=(n.name||``).trim(),o=`.agents/skills/${K(r)}/${a}/SKILL.md`;try{if(await R(e,t,o)&&!r?.overwrite)return{name:a,path:o,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:a,path:o,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let s=await i.text();return n.digest&&!await j(s,n.digest)?{name:a,path:o,status:`failed`,error:`Integrity verification failed for skill`}:(U(o,s),await L(e,t,o,s),{name:a,path:o,status:`imported`})}catch(e){return{name:a,path:o,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function X(e,t=i,n,r,a){let o={tools:[],skills:[],scripts:[],diagnostics:[]},s=new Set(r.toolNames||[]),c=new Set(r.skillNames||[]),l=new Set(r.scriptNames||[]),u=n.tools||[],d=n.skills||[],f=n.scripts||[];for(let e of d)if(c.has(e.name)){if(Array.isArray(e.tools))for(let t of e.tools)s.add(t.name);if(Array.isArray(e.scripts))for(let t of e.scripts)l.add(t.name)}for(let n of f)if(l.has(n.name)){let r=await J(e,t,n,a);o.scripts.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Script ${n.name}: ${r.error}`)}for(let n of u)if(s.has(n.name)){let r=await q(e,t,n,a);o.tools.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Tool ${n.name}: ${r.error}`)}for(let n of d)if(c.has(n.name)){let r=await Y(e,t,n,a);o.skills.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Skill ${n.name}: ${r.error}`)}return o}var Z=/* @__PURE__ */ t({ToolsStore:()=>Q,toolsStore:()=>$}),Q=class{_activeProfile;_activeProfileId;_allTools;_customTools;_declarativeTools;_declarativeToolNamesEnabled;_enabledDeclarativeTools;_enabledToolNames;_enabledTools;_profiles;_systemPromptOverride;_webSearchProxyUrl;_webSearchUrl;_webSearchUseProxy;_searchFilesMaxFileBytes;_searchFilesMaxFilesVisited;_searchFilesSkipDirs;constructor(){this._enabledToolNames=new s.State(new Set(v.enabledToolNames)),this._customTools=new s.State([]),this._declarativeTools=new s.State([]),this._declarativeToolNamesEnabled=new s.State(null),this._systemPromptOverride=new s.State(``),this._profiles=new s.State([]),this._activeProfileId=new s.State(v.id),this._webSearchUseProxy=new s.State(!1),this._webSearchProxyUrl=new s.State(`/proxy`),this._webSearchUrl=new s.State(`https://html.duckduckgo.com/html/?q={query}`),this._searchFilesMaxFileBytes=new s.State(524288),this._searchFilesMaxFilesVisited=new s.State(1e3),this._searchFilesSkipDirs=new s.State(`.git,node_modules,dist,dist-electron,.cache,.nx,.turbo,__pycache__,.venv,venv`),this._allTools=new s.Computed(()=>[...m,...this._customTools.get()]),this._enabledTools=new s.Computed(()=>{let e=this._enabledToolNames.get();return this._allTools.get().filter(t=>e.has(t.name))}),this._enabledDeclarativeTools=new s.Computed(()=>{let e=this._declarativeTools.get(),t=this._declarativeToolNamesEnabled.get();return t===null?e:e.filter(e=>t.has(e.name))}),this._activeProfile=new s.Computed(()=>{let e=this._activeProfileId.get();return e?v.id===e?v: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 x(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,n){let r=this._declarativeToolNamesEnabled.get(),i=this._declarativeTools.get(),o=new Set(r===null?i.map(e=>e.name):r);n?o.add(t):o.delete(t),this._declarativeToolNamesEnabled.set(o),await p(e,a.DECLARATIVE_TOOLS_ENABLED,Array.from(o))}async setAllDeclarativeEnabled(e,t){let n=new Set(t);this._declarativeToolNamesEnabled.set(n),await p(e,a.DECLARATIVE_TOOLS_ENABLED,t)}async fetchRemoteDiscoveryManifest(e){return await M(e)}async importFromRemoteSite(e,t,n,r){let i=r?.groupId||`br:main`,a=await X(e,i,t,n,r);return await this.refreshDeclarativeTools(e,i),a}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[v,...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 n=this.profiles.find(e=>e.id===t);n&&(this._activeProfileId.set(t),this._enabledToolNames.set(new Set(n.enabledToolNames)),this._customTools.set(n.customTools),this._systemPromptOverride.set(n.systemPromptOverride||``),await Promise.all([p(e,a.ACTIVE_TOOL_PROFILE,t),p(e,a.ENABLED_TOOLS,n.enabledToolNames),p(e,a.CUSTOM_TOOLS,n.customTools),p(e,a.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride||``)]))}async addCustomTool(e,t){let n=[...this._customTools.get(),t];this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.add(t.name),this._enabledToolNames.set(r),await Promise.all([p(e,a.CUSTOM_TOOLS,n),p(e,a.ENABLED_TOOLS,[...r])])}async addProfile(e,t){let n=[...this._profiles.get(),t];this._profiles.set(n),await p(e,a.TOOL_PROFILES,n)}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 p(e,a.ACTIVE_TOOL_PROFILE,null)}async deleteProfile(e,t){if(t===v.id)return;let n=this._profiles.get().filter(e=>e.id!==t);this._profiles.set(n),this._activeProfileId.get()===t&&(this._activeProfileId.set(null),await p(e,a.ACTIVE_TOOL_PROFILE,null)),await p(e,a.TOOL_PROFILES,n)}async importBackup(e,t){let n=JSON.parse(t);Array.isArray(n.enabledTools)&&(this._enabledToolNames.set(new Set(n.enabledTools)),await p(e,a.ENABLED_TOOLS,n.enabledTools)),Array.isArray(n.customTools)&&(this._customTools.set(n.customTools),await p(e,a.CUSTOM_TOOLS,n.customTools)),typeof n.systemPromptOverride==`string`&&(this._systemPromptOverride.set(n.systemPromptOverride),await p(e,a.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride)),Array.isArray(n.profiles)&&(this._profiles.set(n.profiles),await p(e,a.TOOL_PROFILES,n.profiles)),(typeof n.activeProfileId==`string`||n.activeProfileId===null)&&(this._activeProfileId.set(n.activeProfileId),await p(e,a.ACTIVE_TOOL_PROFILE,n.activeProfileId)),typeof n.webSearchUseProxy==`boolean`&&(this._webSearchUseProxy.set(n.webSearchUseProxy),await p(e,a.WEB_SEARCH_USE_PROXY,n.webSearchUseProxy?`true`:`false`)),typeof n.webSearchProxyUrl==`string`&&(this._webSearchProxyUrl.set(n.webSearchProxyUrl),await p(e,a.WEB_SEARCH_PROXY_URL,n.webSearchProxyUrl)),typeof n.webSearchUrl==`string`&&(this._webSearchUrl.set(n.webSearchUrl),await p(e,a.WEB_SEARCH_URL,n.webSearchUrl)),typeof n.searchFilesMaxFileBytes==`number`&&n.searchFilesMaxFileBytes>0&&(this._searchFilesMaxFileBytes.set(n.searchFilesMaxFileBytes),await p(e,a.SEARCH_FILES_MAX_FILE_BYTES,String(n.searchFilesMaxFileBytes))),typeof n.searchFilesMaxFilesVisited==`number`&&n.searchFilesMaxFilesVisited>0&&(this._searchFilesMaxFilesVisited.set(n.searchFilesMaxFilesVisited),await p(e,a.SEARCH_FILES_MAX_FILES_VISITED,String(n.searchFilesMaxFilesVisited))),typeof n.searchFilesSkipDirs==`string`&&(this._searchFilesSkipDirs.set(n.searchFilesSkipDirs),await p(e,a.SEARCH_FILES_SKIP_DIRS,n.searchFilesSkipDirs)),Array.isArray(n.declarativeToolsEnabled)?(this._declarativeToolNamesEnabled.set(new Set(n.declarativeToolsEnabled)),await p(e,a.DECLARATIVE_TOOLS_ENABLED,n.declarativeToolsEnabled)):n.declarativeToolsEnabled===null&&(this._declarativeToolNamesEnabled.set(null),await p(e,a.DECLARATIVE_TOOLS_ENABLED,null))}async load(e){let[t,n,r,i,s,c,l,u,d,f,p,m]=await Promise.all([o(e,a.ENABLED_TOOLS),o(e,a.CUSTOM_TOOLS),o(e,a.SYSTEM_PROMPT_OVERRIDE),o(e,a.TOOL_PROFILES),o(e,a.ACTIVE_TOOL_PROFILE),o(e,a.WEB_SEARCH_USE_PROXY),o(e,a.WEB_SEARCH_PROXY_URL),o(e,a.WEB_SEARCH_URL),o(e,a.SEARCH_FILES_MAX_FILE_BYTES),o(e,a.SEARCH_FILES_MAX_FILES_VISITED),o(e,a.SEARCH_FILES_SKIP_DIRS),o(e,a.DECLARATIVE_TOOLS_ENABLED)]);if(Array.isArray(t)&&this._enabledToolNames.set(new Set(t)),Array.isArray(n)&&this._customTools.set(n),Array.isArray(m)&&this._declarativeToolNamesEnabled.set(new Set(m)),typeof r==`string`&&this._systemPromptOverride.set(r),Array.isArray(i)&&this._profiles.set(i),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 n=t.trim()||`/proxy`;this._webSearchProxyUrl.set(n),await p(e,a.WEB_SEARCH_PROXY_URL,n)}async setWebSearchUrl(e,t){let n=t.trim()||`https://html.duckduckgo.com/html/?q={query}`;this._webSearchUrl.set(n),await p(e,a.WEB_SEARCH_URL,n)}async setWebSearchUseProxy(e,t){let n=!!t;this._webSearchUseProxy.set(n),await p(e,a.WEB_SEARCH_USE_PROXY,n?`true`:`false`)}async setSearchFilesMaxFileBytes(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFileBytes.set(n),await p(e,a.SEARCH_FILES_MAX_FILE_BYTES,String(n))}async setSearchFilesMaxFilesVisited(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFilesVisited.set(n),await p(e,a.SEARCH_FILES_MAX_FILES_VISITED,String(n))}async setSearchFilesSkipDirs(e,t){let n=t.trim();this._searchFilesSkipDirs.set(n),await p(e,a.SEARCH_FILES_SKIP_DIRS,n)}async removeCustomTool(e,t){let n=this._customTools.get().filter(e=>e.name!==t);this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.delete(t),this._enabledToolNames.set(r),await Promise.all([p(e,a.CUSTOM_TOOLS,n),p(e,a.ENABLED_TOOLS,[...r])])}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 n=[p(e,a.ENABLED_TOOLS,t)];this._activeProfileId.get()&&(this._activeProfileId.set(null),n.push(p(e,a.ACTIVE_TOOL_PROFILE,null))),await Promise.all(n)}async setSystemPromptOverride(e,t){this._systemPromptOverride.set(t),await p(e,a.SYSTEM_PROMPT_OVERRIDE,t)}async setToolEnabled(e,t,n){let r=new Set(this._enabledToolNames.get());n?r.add(t):r.delete(t),this._enabledToolNames.set(r);let i=[p(e,a.ENABLED_TOOLS,[...r])];this._activeProfileId.get()&&(this._activeProfileId.set(null),i.push(p(e,a.ACTIVE_TOOL_PROFILE,null))),await Promise.all(i)}async updateProfile(e,t){let n=this._profiles.get().map(e=>e.id===t.id?t:e);this._profiles.set(n),await p(e,a.TOOL_PROFILES,n)}};const $=new Q;export{L as a,S as c,_ as d,g as f,R as i,x as l,Z as n,N as o,U as r,P as s,$ as t,v as u};
3
+ `)}\n---\n${n}`,t=(0,z.default)(e);return{data:t.data&&typeof t.data==`object`?t.data:{},content:t.content||``}}catch{}let i={},a=e.match(/^name:\s*["']?([^"'\r\n]+)["']?/m);a&&(i.name=a[1].trim());let o=e.match(/^description:\s*(.+)$/m);if(o){let e=o[1].trim();(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))&&(e=e.slice(1,-1)),i.description=e}let s=e.match(/^user-invocable:\s*(true|false)/im);s&&(i[`user-invocable`]=s[1].toLowerCase()===`true`);let c=e.match(/^disable-model-invocation:\s*(true|false)/im);c&&(i[`disable-model-invocation`]=c[1].toLowerCase()===`true`);let l=e.match(/^allowed-tools:\s*["']?([^"'\r\n]+)["']?/m);l&&(i[`allowed-tools`]=l[1].trim());let u=e.match(/allowed-tools:\s*\n((?:\s*-\s*[^\r\n]+\r?\n?)+)/m);if(u){let e=u[1].split(/\r?\n/).map(e=>e.replace(/^\s*-\s*/,``).trim()).filter(Boolean);e.length>0&&(i[`allowed-tools`]=e)}return{data:i,content:n}}return{data:{},content:e}}}function H(e){if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t.join(` `):void 0}}function U(e,t){let n=V(t),r=n.data,i=typeof r.name==`string`?r.name.trim():``,a=typeof r.description==`string`?r.description.trim():``;if(!i)throw Error(`Skill at ${e} requires a name`);if(!a)throw Error(`Skill ${i} requires a description`);if(i.length>64||!B.test(i))throw Error(`Skill name must be 1-64 lowercase characters and hyphens: ${i}`);if(a.length>1024)throw Error(`Skill ${i} description must be 1024 characters or fewer`);let o=e.replace(/\/SKILL\.md$/u,``),s=r.metadata&&typeof r.metadata==`object`?r.metadata:void 0,c=H(s?.[`allowed-tools`])||H(s?.allowedTools)||H(r[`allowed-tools`])||H(r.allowedTools),l=[];if(s){for(let[e,t]of Object.entries(s))if(e!==`execution`&&t!=null){if(e===`allowed-tools`||e===`allowedTools`)c&&l.push([e,c]);else if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)l.push([e,String(t)]);else if(Array.isArray(t)){let n=t.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean);n.length>0&&l.push([e,n.join(` `)])}}}let u=l.length>0?Object.fromEntries(l):void 0,d=s?.execution,f;if(d!==void 0){if(!d||typeof d!=`object`||d.type!==`tools`||!Array.isArray(d.tools))throw Error(`Skill ${i} has invalid tools execution`);let e=d,t=typeof e.suppressToast==`boolean`?e.suppressToast:void 0,n=typeof e.suppressOutput==`boolean`?e.suppressOutput:void 0,r=e.tools.map(e=>({...e,...t!==void 0&&e.suppressToast===void 0?{suppressToast:t}:{},...n!==void 0&&e.suppressOutput===void 0?{suppressOutput:n}:{}}));f={type:`tools`,...t===void 0?{}:{suppressToast:t},...n===void 0?{}:{suppressOutput:n},tools:r}}return{name:i,description:a,...typeof r.license==`string`?{license:r.license}:{},...typeof r.compatibility==`string`?{compatibility:r.compatibility}:{},...u?{metadata:u}:{},...typeof c==`string`?{allowedTools:c}:{},...typeof r[`user-invocable`]==`boolean`?{userInvocable:r[`user-invocable`]}:typeof r[`user-invocable`]==`string`&&(r[`user-invocable`].toLowerCase()===`true`||r[`user-invocable`].toLowerCase()===`false`)?{userInvocable:r[`user-invocable`].toLowerCase()===`true`}:{},...typeof r[`disable-model-invocation`]==`boolean`?{disableModelInvocation:r[`disable-model-invocation`]}:typeof r[`disable-model-invocation`]==`string`&&(r[`disable-model-invocation`].toLowerCase()===`true`||r[`disable-model-invocation`].toLowerCase()===`false`)?{disableModelInvocation:r[`disable-model-invocation`].toLowerCase()===`true`}:{},...f?{execution:f}:{},body:n.content.trim(),path:e,basePath:o}}const W=new Set(m.map(e=>e.name)),G=/^[a-z][a-z0-9_]{0,63}$/;function K(e){return e?.targetSubdir?e.targetSubdir:e?.siteSlug?`imported/${e.siteSlug}`:`main`}async function q(e,t=i,n,r){let s=(n.name||``).trim();if(W.has(s))return{name:s,path:``,status:`failed`,error:`Cannot shadow built-in tool: ${s}`};if(!G.test(s))return{name:s,path:``,status:`failed`,error:`Invalid tool name: ${s}`};let c=`.agents/tools/${K(r)}/${s}.json`;try{if(await R(e,t,c)&&!r?.overwrite)return{name:s,path:c,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:s,path:c,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let l=await i.text();if(n.digest&&!await j(l,n.digest))return{name:s,path:c,status:`failed`,error:`Integrity verification failed for tool definition`};let u;try{u=JSON.parse(l)}catch{return{name:s,path:c,status:`failed`,error:`Downloaded tool definition is not valid JSON`}}if(b(c,u),await L(e,t,c,JSON.stringify(u,null,2)),r?.autoEnable){let t=await o(e,a.DECLARATIVE_TOOLS_ENABLED),n=new Set(Array.isArray(t)?t:[]);n.add(s),await p(e,a.DECLARATIVE_TOOLS_ENABLED,Array.from(n))}return{name:s,path:c,status:`imported`}}catch(e){return{name:s,path:c,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function J(e,t=i,n,r){let a=(n.name||``).trim(),o=`.agents/scripts/${K(r)}/${a.endsWith(`.js`)||a.endsWith(`.mjs`)?a:`${a}.js`}`;try{if(await R(e,t,o)&&!r?.overwrite)return{name:a,path:o,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:a,path:o,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let s=await i.text();return n.digest&&!await j(s,n.digest)?{name:a,path:o,status:`failed`,error:`Integrity verification failed for script`}:(await L(e,t,o,s),{name:a,path:o,status:`imported`})}catch(e){return{name:a,path:o,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function Y(e,t=i,n,r){let a=(n.name||``).trim(),o=`.agents/skills/${K(r)}/${a}/SKILL.md`;try{if(await R(e,t,o)&&!r?.overwrite)return{name:a,path:o,status:`skipped`};let i=await(r?.fetchFn||globalThis.fetch)(n.url);if(!i.ok)return{name:a,path:o,status:`failed`,error:`HTTP ${i.status} ${i.statusText}`};let s=await i.text();return n.digest&&!await j(s,n.digest)?{name:a,path:o,status:`failed`,error:`Integrity verification failed for skill`}:(U(o,s),await L(e,t,o,s),{name:a,path:o,status:`imported`})}catch(e){return{name:a,path:o,status:`failed`,error:e instanceof Error?e.message:String(e)}}}async function X(e,t=i,n,r,a){let o={tools:[],skills:[],scripts:[],diagnostics:[]},s=new Set(r.toolNames||[]),c=new Set(r.skillNames||[]),l=new Set(r.scriptNames||[]),u=n.tools||[],d=n.skills||[],f=n.scripts||[];for(let e of d)if(c.has(e.name)){if(Array.isArray(e.tools))for(let t of e.tools)s.add(t.name);if(Array.isArray(e.scripts))for(let t of e.scripts)l.add(t.name)}for(let n of f)if(l.has(n.name)){let r=await J(e,t,n,a);o.scripts.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Script ${n.name}: ${r.error}`)}for(let n of u)if(s.has(n.name)){let r=await q(e,t,n,a);o.tools.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Tool ${n.name}: ${r.error}`)}for(let n of d)if(c.has(n.name)){let r=await Y(e,t,n,a);o.skills.push(r),r.status===`failed`&&r.error&&o.diagnostics.push(`Skill ${n.name}: ${r.error}`)}return o}var Z=/* @__PURE__ */ t({ToolsStore:()=>Q,toolsStore:()=>$}),Q=class{_activeProfile;_activeProfileId;_allTools;_customTools;_declarativeTools;_declarativeToolNamesEnabled;_enabledDeclarativeTools;_enabledToolNames;_enabledTools;_profiles;_systemPromptOverride;_webSearchProxyUrl;_webSearchUrl;_webSearchUseProxy;_searchFilesMaxFileBytes;_searchFilesMaxFilesVisited;_searchFilesSkipDirs;constructor(){this._enabledToolNames=new s.State(new Set(v.enabledToolNames)),this._customTools=new s.State([]),this._declarativeTools=new s.State([]),this._declarativeToolNamesEnabled=new s.State(null),this._systemPromptOverride=new s.State(``),this._profiles=new s.State([]),this._activeProfileId=new s.State(v.id),this._webSearchUseProxy=new s.State(!1),this._webSearchProxyUrl=new s.State(`/proxy`),this._webSearchUrl=new s.State(`https://html.duckduckgo.com/html/?q={query}`),this._searchFilesMaxFileBytes=new s.State(524288),this._searchFilesMaxFilesVisited=new s.State(1e3),this._searchFilesSkipDirs=new s.State(`.git,node_modules,dist,dist-electron,.cache,.nx,.turbo,__pycache__,.venv,venv`),this._allTools=new s.Computed(()=>[...m,...this._customTools.get()]),this._enabledTools=new s.Computed(()=>{let e=this._enabledToolNames.get();return this._allTools.get().filter(t=>e.has(t.name))}),this._enabledDeclarativeTools=new s.Computed(()=>{let e=this._declarativeTools.get(),t=this._declarativeToolNamesEnabled.get();return!t||t.size===0?[]:e.filter(e=>t.has(e.name))}),this._activeProfile=new s.Computed(()=>{let e=this._activeProfileId.get();return e?v.id===e?v: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?t.has(e):!1}async refreshDeclarativeTools(e,t){try{let n=await x(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,n){let r=this._declarativeToolNamesEnabled.get(),i=new Set(r===null?[]:r);n?i.add(t):i.delete(t),this._declarativeToolNamesEnabled.set(i),await p(e,a.DECLARATIVE_TOOLS_ENABLED,Array.from(i))}async setAllDeclarativeEnabled(e,t){let n=new Set(t);this._declarativeToolNamesEnabled.set(n),await p(e,a.DECLARATIVE_TOOLS_ENABLED,t)}async fetchRemoteDiscoveryManifest(e){return await M(e)}async importFromRemoteSite(e,t,n,r){let i=r?.groupId||`br:main`,a=await X(e,i,t,n,r);return await this.refreshDeclarativeTools(e,i),a}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[v,...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 n=this.profiles.find(e=>e.id===t);n&&(this._activeProfileId.set(t),this._enabledToolNames.set(new Set(n.enabledToolNames)),this._customTools.set(n.customTools),this._systemPromptOverride.set(n.systemPromptOverride||``),await Promise.all([p(e,a.ACTIVE_TOOL_PROFILE,t),p(e,a.ENABLED_TOOLS,n.enabledToolNames),p(e,a.CUSTOM_TOOLS,n.customTools),p(e,a.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride||``)]))}async addCustomTool(e,t){let n=[...this._customTools.get(),t];this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.add(t.name),this._enabledToolNames.set(r),await Promise.all([p(e,a.CUSTOM_TOOLS,n),p(e,a.ENABLED_TOOLS,[...r])])}async addProfile(e,t){let n=[...this._profiles.get(),t];this._profiles.set(n),await p(e,a.TOOL_PROFILES,n)}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 p(e,a.ACTIVE_TOOL_PROFILE,null)}async deleteProfile(e,t){if(t===v.id)return;let n=this._profiles.get().filter(e=>e.id!==t);this._profiles.set(n),this._activeProfileId.get()===t&&(this._activeProfileId.set(null),await p(e,a.ACTIVE_TOOL_PROFILE,null)),await p(e,a.TOOL_PROFILES,n)}async importBackup(e,t){let n=JSON.parse(t);Array.isArray(n.enabledTools)&&(this._enabledToolNames.set(new Set(n.enabledTools)),await p(e,a.ENABLED_TOOLS,n.enabledTools)),Array.isArray(n.customTools)&&(this._customTools.set(n.customTools),await p(e,a.CUSTOM_TOOLS,n.customTools)),typeof n.systemPromptOverride==`string`&&(this._systemPromptOverride.set(n.systemPromptOverride),await p(e,a.SYSTEM_PROMPT_OVERRIDE,n.systemPromptOverride)),Array.isArray(n.profiles)&&(this._profiles.set(n.profiles),await p(e,a.TOOL_PROFILES,n.profiles)),(typeof n.activeProfileId==`string`||n.activeProfileId===null)&&(this._activeProfileId.set(n.activeProfileId),await p(e,a.ACTIVE_TOOL_PROFILE,n.activeProfileId)),typeof n.webSearchUseProxy==`boolean`&&(this._webSearchUseProxy.set(n.webSearchUseProxy),await p(e,a.WEB_SEARCH_USE_PROXY,n.webSearchUseProxy?`true`:`false`)),typeof n.webSearchProxyUrl==`string`&&(this._webSearchProxyUrl.set(n.webSearchProxyUrl),await p(e,a.WEB_SEARCH_PROXY_URL,n.webSearchProxyUrl)),typeof n.webSearchUrl==`string`&&(this._webSearchUrl.set(n.webSearchUrl),await p(e,a.WEB_SEARCH_URL,n.webSearchUrl)),typeof n.searchFilesMaxFileBytes==`number`&&n.searchFilesMaxFileBytes>0&&(this._searchFilesMaxFileBytes.set(n.searchFilesMaxFileBytes),await p(e,a.SEARCH_FILES_MAX_FILE_BYTES,String(n.searchFilesMaxFileBytes))),typeof n.searchFilesMaxFilesVisited==`number`&&n.searchFilesMaxFilesVisited>0&&(this._searchFilesMaxFilesVisited.set(n.searchFilesMaxFilesVisited),await p(e,a.SEARCH_FILES_MAX_FILES_VISITED,String(n.searchFilesMaxFilesVisited))),typeof n.searchFilesSkipDirs==`string`&&(this._searchFilesSkipDirs.set(n.searchFilesSkipDirs),await p(e,a.SEARCH_FILES_SKIP_DIRS,n.searchFilesSkipDirs)),Array.isArray(n.declarativeToolsEnabled)?(this._declarativeToolNamesEnabled.set(new Set(n.declarativeToolsEnabled)),await p(e,a.DECLARATIVE_TOOLS_ENABLED,n.declarativeToolsEnabled)):n.declarativeToolsEnabled===null&&(this._declarativeToolNamesEnabled.set(null),await p(e,a.DECLARATIVE_TOOLS_ENABLED,null))}async load(e){let[t,n,r,i,s,c,l,u,d,f,p,m]=await Promise.all([o(e,a.ENABLED_TOOLS),o(e,a.CUSTOM_TOOLS),o(e,a.SYSTEM_PROMPT_OVERRIDE),o(e,a.TOOL_PROFILES),o(e,a.ACTIVE_TOOL_PROFILE),o(e,a.WEB_SEARCH_USE_PROXY),o(e,a.WEB_SEARCH_PROXY_URL),o(e,a.WEB_SEARCH_URL),o(e,a.SEARCH_FILES_MAX_FILE_BYTES),o(e,a.SEARCH_FILES_MAX_FILES_VISITED),o(e,a.SEARCH_FILES_SKIP_DIRS),o(e,a.DECLARATIVE_TOOLS_ENABLED)]);if(Array.isArray(t)&&this._enabledToolNames.set(new Set(t)),Array.isArray(n)&&this._customTools.set(n),Array.isArray(m)&&this._declarativeToolNamesEnabled.set(new Set(m)),typeof r==`string`&&this._systemPromptOverride.set(r),Array.isArray(i)&&this._profiles.set(i),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 n=t.trim()||`/proxy`;this._webSearchProxyUrl.set(n),await p(e,a.WEB_SEARCH_PROXY_URL,n)}async setWebSearchUrl(e,t){let n=t.trim()||`https://html.duckduckgo.com/html/?q={query}`;this._webSearchUrl.set(n),await p(e,a.WEB_SEARCH_URL,n)}async setWebSearchUseProxy(e,t){let n=!!t;this._webSearchUseProxy.set(n),await p(e,a.WEB_SEARCH_USE_PROXY,n?`true`:`false`)}async setSearchFilesMaxFileBytes(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFileBytes.set(n),await p(e,a.SEARCH_FILES_MAX_FILE_BYTES,String(n))}async setSearchFilesMaxFilesVisited(e,t){let n=Math.max(1,Math.round(t));this._searchFilesMaxFilesVisited.set(n),await p(e,a.SEARCH_FILES_MAX_FILES_VISITED,String(n))}async setSearchFilesSkipDirs(e,t){let n=t.trim();this._searchFilesSkipDirs.set(n),await p(e,a.SEARCH_FILES_SKIP_DIRS,n)}async removeCustomTool(e,t){let n=this._customTools.get().filter(e=>e.name!==t);this._customTools.set(n);let r=new Set(this._enabledToolNames.get());r.delete(t),this._enabledToolNames.set(r),await Promise.all([p(e,a.CUSTOM_TOOLS,n),p(e,a.ENABLED_TOOLS,[...r])])}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 n=[p(e,a.ENABLED_TOOLS,t)];this._activeProfileId.get()&&(this._activeProfileId.set(null),n.push(p(e,a.ACTIVE_TOOL_PROFILE,null))),await Promise.all(n)}async setSystemPromptOverride(e,t){this._systemPromptOverride.set(t),await p(e,a.SYSTEM_PROMPT_OVERRIDE,t)}async setToolEnabled(e,t,n){let r=new Set(this._enabledToolNames.get());n?r.add(t):r.delete(t),this._enabledToolNames.set(r);let i=[p(e,a.ENABLED_TOOLS,[...r])];this._activeProfileId.get()&&(this._activeProfileId.set(null),i.push(p(e,a.ACTIVE_TOOL_PROFILE,null))),await Promise.all(i)}async updateProfile(e,t){let n=this._profiles.get().map(e=>e.id===t.id?t:e);this._profiles.set(n),await p(e,a.TOOL_PROFILES,n)}};const $=new Q;export{L as a,S as c,_ as d,g as f,R as i,x as l,Z as n,N as o,U as r,P as s,$ as t,v as u};
@@ -0,0 +1,6 @@
1
+ import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{o as t}from"./config-y_2Fg77m.js";import{t as n}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";const r=[`consequentialHint`,`debugging`,`readOnlyHint`,`untrustedContentHint`],i=`webmcp-polyfill`,a=globalThis.DOMException;var o=class{#e;#t;#n;#r=/* @__PURE__ */ new Set;#i=/* @__PURE__ */ new Set;#a=Promise.withResolvers();#o=/* @__PURE__ */ new Map;#s=/* @__PURE__ */ new Set;#c;#l=!1;constructor(e,t){this.#t=e,this.#e=e.document,this.#n=t,this.#t.addEventListener(`message`,e=>this.#d(e),!0),this.#t.addEventListener(`pagehide`,()=>{this.#l=!0;for(let e of this.#s)e.end()}),this.#t.addEventListener(`pageshow`,e=>{e.persisted&&(this.#l=!1,this.#x())});for(let e of this.#x())this.#i.add(e);this.#i.size===0?this.#a.resolve():setTimeout(()=>{this.#i.clear(),this.#a.resolve()},500)}async allowed(){return!this.#l&&this.#h(this.#e)}async getTools(e){await this.#a.promise;let t=this.#t.origin,n=[t,...e];return(await Promise.all(this.#b().map(async e=>{if(e===this.#t)return this.#n.getTools(t).map(e=>p(e,this.#t,t));try{let t=await this.#u(e,n,{kind:`getTools`});if(!Array.isArray(t.value))throw TypeError(`Expected a tool list from the frame`);return t.value.map(n=>p(m(n),e,t.origin))}catch(e){return e instanceof a&&e.name===`UnknownError`||console.warn(`WebMCP: could not read tools from a frame.`,e),[]}}))).flat()}async execute(e,t,n,r,i){let a=await this.#u(e,[t],{kind:`execute`,name:n,input:r},i);if(typeof a.value!=`string`)throw v();return a.value}async notify(e){await this.#a.promise;let t=[this.#t.origin,...e];for(let e of this.#b())if(e===this.#t)await this.#n.changed();else try{await this.#u(e,t,{kind:`changed`})}catch{}}#u(e,t,n,r){return new Promise((a,o)=>{if(r?.throwIfAborted(),this.#l||!this.#v(e)){o(v());return}let s=crypto.randomUUID(),{port1:c,port2:l}=new MessageChannel,u,d=()=>{clearTimeout(_),y(),r?.removeEventListener(`abort`,p),this.#o.delete(s),c.close()},f=(e=v())=>{c.postMessage({kind:`cancel`}),d(),o(e)},p=()=>f(r?.reason),m=()=>{u===void 0&&this.#C(e),f()},h=r=>{r.source===e&&(this.#o.delete(s),t&&!t.includes(r.origin)?f():(u=r.origin,clearTimeout(_),n.kind!==`execute`&&n.kind!==`changed`&&(_=setTimeout(m,500)),c.postMessage(n)))},_=setTimeout(m,500),y=this.#w(e,f);c.onmessage=e=>{let t=g(e.data);t?.kind===`error`?f():t?.kind===`result`&&u!==void 0&&(d(),a({value:t.value,origin:u}))},c.onmessageerror=()=>f(),r?.addEventListener(`abort`,p,{once:!0}),this.#o.set(s,h);try{e.postMessage(`${i}:connect:${s}`,`*`,[l])}catch{l.close(),f()}})}#d(e){let t=h(e.data);if(!t)return;e.stopImmediatePropagation();let n=e.source;if(!e.isTrusted||!n||!_(n)||!this.#v(n)||e.origin===`null`||this.#l)return;if(t.kind===`announce`){let t=!this.#r.has(n);if(this.#S(n),n.postMessage(`${i}:present`,e.origin),!t||this.#t!==this.#t.top)return;for(let e of this.#r)e!==n&&e.postMessage(`${i}:refresh`,`*`);return}if(t.kind===`present`){this.#S(n);return}if(t.kind===`refresh`){n===this.#t.top&&this.#x();return}if(t.kind===`ready`){this.#o.get(t.id)?.(e);return}let[r]=e.ports;t.kind===`connect`&&t.id&&r&&e.ports.length===1&&(this.#S(n),this.#f(n,e.origin,t.id,r))}#f(e,t,n,r){let a=new AbortController,o=!1,s=()=>{clearTimeout(u),d(),r.close()},c=()=>{a.abort(),s()},l=()=>{r.postMessage({kind:`error`}),c()},u=setTimeout(l,500),d=this.#w(e,l);r.onmessageerror=l,r.onmessage=async n=>{let i=g(n.data);if(i?.kind===`cancel`)c();else if(!o){o=!0,clearTimeout(u);try{let n=await this.#p(e,t,i,a.signal);r.postMessage({kind:`result`,value:n}),s()}catch{l()}}},e.postMessage(`${i}:ready:${n}`,t)}async#p(e,t,n,r){if(!n||!this.#v(e))throw v();if(n.kind===`permission`){let{childIndex:e,childOrigin:t}=n;if(typeof e!=`number`||!Number.isInteger(e)||e<0||typeof t!=`string`)throw v();return this.#m(e,t)}if(!await this.allowed()||!await this.#g(e,t)||!this.#v(e))throw v();if(r.throwIfAborted(),n.kind===`getTools`)return this.#n.getTools(t);if(n.kind===`execute`&&typeof n.name==`string`&&typeof n.input==`string`)return this.#n.execute(t,n.name,n.input,r);if(n.kind===`changed`)await this.#n.changed();else throw v()}async#m(e,t){let n=this.#t[e];return n!==void 0&&await this.allowed()&&s(this.#e,n,t)}async#h(e){let t=d(e);if(!t)return!1;let n=f(e);if(n!==void 0)return n;if(t===t.parent)return!0;let r=t.location.ancestorOrigins?.[0],i=c(t.parent,r===void 0||r===t.origin);return i?s(i,t,t.origin)&&await this.#h(i):this.#_(t,t.origin)}async#g(e,t){let n=c(e,t===this.#t.origin);return n?this.#h(n):this.#_(e,t)}async#_(e,t){let n=e.parent;if(n===e)return!0;let r=-1;for(let t=0;t<n.length;t++)if(n[t]===e){r=t;break}if(r<0)return!1;if(n===this.#t)return await this.allowed()&&s(this.#e,e,t);if(await this.#a.promise,!this.#r.has(n))return!1;try{let e=await this.#u(n,void 0,{kind:`permission`,childIndex:r,childOrigin:t});return e.value===!0&&await this.#g(n,e.origin)}catch{return!1}}#v(e){try{return!e.closed&&e!==this.#t&&e.top===this.#t.top}catch{return!1}}#y(){if(this.#t.closed)return[];for(let e of this.#r)this.#v(e)||this.#r.delete(e);let e=[this.#t,...this.#r];for(let t=this.#t.parent;t!==t.parent;t=t.parent)e.push(t);let t=/* @__PURE__ */ new Set,n=[this.#t.top];for(;n.length;){let r=n.pop();if(t.has(r))continue;t.add(r);let i=[];for(let e=0;e<r.length;e++){let t=r[e];t&&i.push(t)}for(let t of e)t!==r&&t.parent===r&&!i.includes(t)&&i.push(t);n.push(...i.reverse())}return Array.from(t).filter(e=>e===this.#t||this.#v(e))}#b(){return this.#y().filter(e=>e===this.#t||this.#r.has(e))}#x(){let e=this.#y().filter(e=>e!==this.#t);for(let t of e)t.postMessage(`${i}:announce`,`*`);return e}#S(e){this.#r.add(e),this.#i.delete(e),this.#i.size===0&&this.#a.resolve()}#C(e){this.#r.delete(e),this.#v(e)&&e.postMessage(`${i}:announce`,`*`)}#w(e,t){let n={peer:e,end:t};return this.#s.add(n),this.#c===void 0&&(this.#c=this.#t.setInterval(()=>{for(let e of this.#s)this.#v(e.peer)||e.end()},100)),()=>{this.#s.delete(n),this.#s.size===0&&(this.#t.clearInterval(this.#c),this.#c=void 0)}}};function s(e,t,n){let r=e.defaultView?.origin,i=l(e,t,n===r);if(!i)return!1;let a=(i.getAttribute(`allow`)??``).split(`;`).map(e=>e.trim().split(/\s+/u)).find(([e])=>e===`tools`);if(!a)return n===r;let o=a.length===1?[`'src'`]:a.slice(1);if(o.includes(`'none'`))return!1;let s=i.hasAttribute(`srcdoc`)?null:i.getAttribute(`src`),c=s?URL.parse(s,e.baseURI):null,u=!s||c?.protocol===`about:`?r:c?.origin;return o.some(e=>e===`*`||e===`'self'`&&n===r||e===`'src'`&&n===u||e===n)}function c(e,t){if(t)try{return e.document}catch{return}}function l(e,t,n){if(n)try{let n=t.frameElement;if(n?.ownerDocument===e)return n}catch{}return u(e,t)}function u(e,t){let n=e.querySelectorAll(`iframe, frame`);for(let e of n)if(e.contentWindow===t)return e;for(let n of e.querySelectorAll(`*`)){if(!n.shadowRoot)continue;let e=u(n.shadowRoot,t);if(e)return e}}function d(e){let t=e.defaultView;return t&&!t.closed&&t.document===e?t:void 0}function f(e){let t=e,n=g(t.permissionsPolicy??t.featurePolicy);if(typeof n?.features!=`function`||typeof n.allowsFeature!=`function`)return;let r=n.features();return Array.isArray(r)&&r.includes(`tools`)?!!n.allowsFeature(`tools`):void 0}function p(e,t,n){let r=e.serializedSchema===void 0?void 0:JSON.parse(e.serializedSchema);return{...e.annotations!==void 0&&{annotations:{...e.annotations}},description:e.description,...r!==void 0&&{inputSchema:r},name:e.name,origin:n,title:e.title,window:t}}function m(e){let t=g(e);if(!t||typeof t.name!=`string`||typeof t.title!=`string`||typeof t.description!=`string`||t.serializedSchema!==void 0&&typeof t.serializedSchema!=`string`)throw TypeError(`Invalid tool metadata from the frame`);let n={name:t.name,title:t.title,description:t.description,annotations:void 0,serializedSchema:t.serializedSchema};if(t.annotations===void 0)return n;let i=g(t.annotations);if(!i)throw TypeError(`Invalid tool annotations from the frame`);let a={};for(let e of r){let t=i[e];if(t!==void 0){if(typeof t!=`boolean`)throw TypeError(`Invalid ${e} annotation from the frame`);a[e]=t}}return n.annotations=a,n}function h(e){if(typeof e!=`string`)return;let[t,n=``,r=``,a]=e.split(`:`);return t===i&&a===void 0?{kind:n,id:r}:void 0}function g(e){if(typeof e==`object`&&e&&!Array.isArray(e))return e}function _(e){try{return`postMessage`in e&&`window`in e}catch{return!1}}function v(){return new a(`Tool execution failed`,`UnknownError`)}const y=/* @__PURE__ */ new WeakSet,b=/* @__PURE__ */ new WeakMap,x=/* @__PURE__ */ new WeakMap;function S(e){return e.isTrusted&&(y.has(e)||e.eventPhase!==Event.NONE&&e.target instanceof HTMLFormElement&&x.has(e.target))}function ee(e,t){if(!S(e))throw new DOMException(`respondWith() is only available during an agent-invoked submit event`,`InvalidStateError`);if(!e.defaultPrevented)throw new DOMException(`respondWith() requires preventDefault() during an agent-invoked submit event`,`InvalidStateError`);if(e.eventPhase===Event.NONE)throw new DOMException(`respondWith() is only available while the submit event is being dispatched`,`InvalidStateError`);y.add(e);let n=Promise.resolve(t);b.set(e,n),e.target instanceof HTMLFormElement&&x.get(e.target)?.respond(e)}const C=/* @__PURE__ */ new Set([`email`,`password`,`search`,`tel`,`text`,`url`]),te=/* @__PURE__ */ new Set([...C,`date`,`datetime-local`,`month`,`number`,`time`,`week`]);function ne(e){return e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement}function w(e){return Object.getOwnPropertyDescriptor(HTMLFormElement.prototype,`elements`)?.get?.call(e)}function T(e,t){return Element.prototype.getAttribute.call(e,t)}function E(e,t){return Element.prototype.hasAttribute.call(e,t)}function re(e){return Object.getOwnPropertyDescriptor(Node.prototype,`isConnected`)?.get?.call(e)}function ie(e){return Object.getOwnPropertyDescriptor(Element.prototype,`shadowRoot`)?.get?.call(e)}function ae(e){return HTMLFormElement.prototype.checkValidity.call(e)}function oe(e,t){HTMLFormElement.prototype.requestSubmit.call(e,t)}function se(e){return[...w(e)].filter(e=>ne(e)&&!e.matches(`:disabled`)&&!(`readOnly`in e&&e.readOnly&&(e instanceof HTMLTextAreaElement||te.has(e.type))))}function ce(e){let t=/* @__PURE__ */ new Map;for(let n of se(e)){let e=n.name.trim(),r=t.get(e);r?r.push(n):t.set(e,[n])}return t}function le(e){return[...e.labels??[]].map(e=>{let t=e.cloneNode(!0);return t instanceof HTMLElement?(t.querySelectorAll(`button, input, meter, output, progress, select, textarea`).forEach(e=>e.remove()),t.textContent?.trim()??``):``}).filter(Boolean).join(`; `)}function ue(e,t){for(let n=t[0]?.parentElement;n&&n!==e;n=n.parentElement)if(n instanceof HTMLFieldSetElement&&t.every(e=>n.contains(e)))return n}function de(e,t){if(t.length===1){let e=t[0];return e&&(e.getAttribute(`toolparamdescription`)||le(e)||e.getAttribute(`aria-description`))||void 0}return ue(e,t)?.getAttribute(`toolparamdescription`)||void 0}function fe(e,t,n,r){let i=de(t,n),a=i&&r?`${i} (${r})`:i||r;return a?{...e,description:a}:e}function pe(e,t){let n=e.getAttribute(t);if(n===null||n.trim()===``)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function me(e,t){let n=Number(e.getAttribute(`step`));return Number.isFinite(n)&&n>0?n:t}function he(e,t){let n=e/t;return Math.abs(n-Math.round(n))<2**-52*16}function ge(e,t){let n=t.getAttribute(`pattern`);if(n===null)return e;try{new RegExp(n,`v`)}catch{return e}return{...e,pattern:n}}function _e(e){let t={type:`number`},n=pe(e,`min`),r=pe(e,`max`);if(n!==void 0&&(t.minimum=n),r!==void 0&&(t.maximum=r),e.getAttribute(`step`)!==`any`){let r=me(e,1),i=Number(e.getAttribute(`value`));he(n??(Number.isFinite(i)?i:0),r)&&(t.multipleOf=r)}return t}function ve(e,t){let n=me(e,60);return n<1?`${t}(:[0-5][0-9](\\.[0-9]{1,3})?)?$`:n<60?`${t}(:[0-5][0-9])?$`:`${t}$`}function ye(e){return{anyOf:e.map(e=>({type:`string`,const:e.value,title:e.textContent??``})),enum:e.map(e=>e.value)}}function be(e){return{anyOf:e.map(e=>{let t=le(e),n={type:`string`,const:e.value};return t&&(n.title=t),n}),enum:e.map(e=>e.value)}}function D(e,t){return e instanceof HTMLInputElement&&e.type===t}function xe(e){if(C.has(e.type))return ge({type:`string`},e);switch(e.type){case`hidden`:return e.getAttribute(`toolparamdescription`)?{type:`string`}:void 0;case`number`:return ge(_e(e),e);case`range`:{let t=_e(e);return t.minimum??=0,t.maximum??=100,t}case`checkbox`:return{type:`boolean`};case`date`:return{type:`string`,format:`date`};case`month`:return{type:`string`,format:`^[0-9]{4}-(0[1-9]|1[0-2])$`};case`week`:return{type:`string`,format:`^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])$`};case`time`:return{type:`string`,format:ve(e,`^([01][0-9]|2[0-3]):[0-5][0-9]`)};case`datetime-local`:return{type:`string`,format:ve(e,`^[0-9]{4}-(0[1-9]|1[0-2])-[0-9]{2}T([01][0-9]|2[0-3]):[0-5][0-9]`)};case`color`:return{type:`string`,format:`^#[0-9a-zA-Z]{6}$`};default:return}}function O(e,t){let[n]=t;if(!n)return;let r;if(t.every(e=>D(e,`radio`)))r={type:`string`,...be(t)};else if(t.length>1)t.every(e=>D(e,`checkbox`))&&(r={type:`array`,items:{type:`string`,...be(t)},uniqueItems:!0});else if(n instanceof HTMLTextAreaElement)r={type:`string`};else if(n instanceof HTMLSelectElement){let e=ye([...n.options]);r=n.multiple?{type:`array`,items:{type:`string`,...e},uniqueItems:!0}:{type:`string`,...e}}else r=xe(n);let i=n.type===`date`?`Dates MUST be provided in 'YYYY-MM-DD' format.`:void 0;return r&&fe(r,e,t,i)}function Se(e){let t={},n=[];for(let[r,i]of ce(e)){if(!r)continue;let a=O(e,i);a&&(Object.defineProperty(t,r,{configurable:!0,enumerable:!0,value:a,writable:!0}),i.some(e=>e.required)&&n.push(r))}return{type:`object`,properties:t,required:n}}function Ce(e){return{name:T(e,`toolname`)??``,title:T(e,`tooltitle`)??``,description:T(e,`tooldescription`)??``,inputSchema:Se(e),autosubmit:E(e,`toolautosubmit`)}}function k(e){if(typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return String(e)}function A(e){if(typeof e==`boolean`)return e;if(typeof e==`number`&&Number.isInteger(e))return e!==0;if(typeof e==`string`){if(e===`1`||e.toLowerCase()===`true`)return!0;if(e===`0`||e.toLowerCase()===`false`)return!1}}function j(e,t){if(!Array.isArray(e))return!1;let n=new Set(t);for(let t of e){let e=k(t);if(e===void 0||!n.delete(e))return!1}return!0}function we(e,t){if(t===``)return e.type!==`number`&&e.type!==`range`;let n=e.ownerDocument.createElement(`input`);return n.type=e.type,n.value=t,n.value!==``}function Te(e,t,n){let[r]=t;if(!r||!O(e,t))return!1;let i=k(n);if(t.every(e=>D(e,`radio`)))return t.some(e=>e.value===i);if(t.length>1)return j(n,new Set(t.map(e=>e.value)));if(r instanceof HTMLSelectElement){let e=new Set([...r.options].map(e=>e.value));return r.multiple?j(n,e):i!==void 0&&e.has(i)}return r instanceof HTMLTextAreaElement?i!==void 0:r.type===`checkbox`?A(n)!==void 0:i!==void 0&&we(r,i)}function M(e){e.dispatchEvent(new Event(`input`,{bubbles:!0,composed:!0})),e.dispatchEvent(new Event(`change`,{bubbles:!0}))}function Ee(e,t){if(e.value===t)return;let n=e instanceof HTMLInputElement?HTMLInputElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(n,`value`)?.set?.call(e,t),M(e)}function N(e,t){e.checked!==t&&(Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,`checked`)?.set?.call(e,t),M(e))}function De(e,t){let[n]=e,r=k(t),i=new Set(Array.isArray(t)?t.map(k):[]);if(e.every(e=>D(e,`radio`))){let t=e.find(e=>e.value===r);t&&N(t,!0)}else if(e.length>1)for(let t of e)t instanceof HTMLInputElement&&N(t,i.has(t.value));else if(n instanceof HTMLSelectElement){if(n.multiple){let e=!1;for(let t of n.options){let n=i.has(t.value);t.selected!==n&&(t.selected=n,e=!0)}e&&M(n)}else r!==void 0&&n.value!==r&&(n.value=r,M(n))}else if(n&&D(n,`checkbox`)){let e=A(t);e!==void 0&&N(n,e)}else n&&r!==void 0&&Ee(n,r)}function Oe(e,t){if(Array.isArray(t))throw v();let n=ce(e),r=[];for(let[i,a]of Object.entries(t)){let t=n.get(i);if(!t||!Te(e,t,a))throw v();r.push({controls:t,value:a})}for(let{controls:e,value:t}of r)De(e,t)}function ke(e){return[...w(e)].find(e=>!e.matches(`:disabled`)&&(e instanceof HTMLButtonElement&&e.type===`submit`||e instanceof HTMLInputElement&&[`image`,`submit`].includes(e.type)))}function P(e,t){let n=new Event(e);return Object.defineProperty(n,"toolName",{enumerable:!0,value:t}),n}function Ae(e,t,n,r,i){let{form:a}=t;return t.cancelPending?.(v()),new Promise((o,s)=>{let c=!1,l=()=>{EventTarget.prototype.removeEventListener.call(a,`invalid`,p,!0),i.removeEventListener(`abort`,m),x.delete(a),t.cancelPending===d&&delete t.cancelPending},u=e=>{c||(c=!0,l(),e())},d=e=>u(()=>s(e)),f=e=>{t.cancelPending===d&&delete t.cancelPending,e.then(e=>u(()=>o(e??null)),e=>u(()=>s(e)))},p=e=>{e.isTrusted&&queueMicrotask(()=>{ae(a)||d(v())})},m=()=>{u(()=>{e.dispatchEvent(P(`toolcancel`,n.name)),s(i.reason)})};if(x.set(a,{complete(e){setTimeout(()=>{let t=b.get(e);t?f(t):e.defaultPrevented?d(v()):u(()=>o(null))})},direct(){u(()=>o(null))},respond(e){queueMicrotask(()=>{let t=b.get(e);t&&f(t)})}}),t.cancelPending=d,EventTarget.prototype.addEventListener.call(a,`invalid`,p,!0),i.addEventListener(`abort`,m,{once:!0}),!n.autosubmit)r?.focus(),e.dispatchEvent(P(`toolactivated`,n.name));else try{oe(a,r),e.dispatchEvent(P(`toolactivated`,n.name))}catch(e){d(e)}})}function je(e){let t=SubmitEvent.prototype;if(`agentInvoked`in t&&`respondWith`in t)return;`agentInvoked`in t||Object.defineProperty(t,"agentInvoked",{configurable:!0,enumerable:!0,get(){return S(this)}}),`respondWith`in t||Object.defineProperty(t,"respondWith",{configurable:!0,enumerable:!0,writable:!0,value(e){ee(this,e)}});let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=e=>{if(!(e instanceof SubmitEvent)||!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=x.get(e.target);t&&(y.add(e),t.complete(e))},o=e=>{if(!e.isTrusted||!(e.target instanceof HTMLFormElement))return;let t=e.target;setTimeout(()=>{e.defaultPrevented||n.get(t)?.cancelPending?.(v())})};function s(e){i.get(e)?.disconnect(),i.delete(e),e.removeEventListener(`reset`,o,!0),e.removeEventListener(`submit`,a,!0)}function c(e){if(i.has(e))return;let t=new MutationObserver(l);i.set(e,t),t.observe(e,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),e.addEventListener(`reset`,o,!0),e.addEventListener(`submit`,a,!0)}function l(){c(document);for(let e of i.keys())e instanceof ShadowRoot&&!e.host.isConnected&&s(e);let t=/* @__PURE__ */ new Set,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map;for(let e of i.keys())for(let i of e.querySelectorAll(`*`)){let e=ie(i);if(e&&c(e),!(i instanceof HTMLFormElement)||!E(i,`toolname`)||!E(i,`tooldescription`)||!re(i))continue;let s=i;t.add(s);let l=Ce(s),u=JSON.stringify(l);if(r.get(s)===u)continue;r.delete(s);let d=o.get(l.name);if(d){let e=e=>n.get(e)?.name===l.name;if(!e(s)||e(d)){r.set(s,u);continue}let t=a.get(d);t&&r.set(d,t.fingerprint),a.delete(d)}o.set(l.name,s),a.set(s,{definition:l,fingerprint:u})}for(let e of r.keys())t.has(e)||r.delete(e);for(let[e,t]of n)a.get(e)?.fingerprint!==t.fingerprint&&(t.cancelPending?.(v()),t.controller.abort(),n.delete(e));for(let[t,{definition:r,fingerprint:i}]of a){if(n.has(t))continue;let a=new AbortController,o={controller:a,fingerprint:i,form:t,name:r.name};n.set(t,o),e.registerTool({name:r.name,title:r.title,description:r.description,inputSchema:r.inputSchema,execute(n,i){let a=ke(t);if(!r.autosubmit&&!a)throw v();return Oe(t,n),Ae(e,o,r,a,i.signal)}},{signal:a.signal}).catch(e=>{a.abort(),!(e instanceof DOMException&&e.name===`AbortError`)&&console.error(`[webmcp] declarative form tool "${r.name}" was not registered:`,e)})}}let u=Object.getOwnPropertyDescriptor(Element.prototype,`attachShadow`);if(u?.configurable){let e=Element.prototype.attachShadow,t=function(t){let n=e.call(this,t);return n.mode===`open`&&Object.getOwnPropertyDescriptor(Node.prototype,`ownerDocument`)?.get?.call(this)===document&&re(this)&&c(n),n};Object.defineProperty(Element.prototype,"attachShadow",{...u,value:t})}let d=Object.getOwnPropertyDescriptor(HTMLFormElement.prototype,`submit`);if(d?.configurable){let e=HTMLFormElement.prototype.submit,t=function(){e.call(this),x.get(this)?.direct()};Object.defineProperty(HTMLFormElement.prototype,"submit",{...d,value:t})}l()}
2
+ /*!
3
+ * Copyright (c) 2026 WebMCP polyfill contributors
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ const F=globalThis.DOMException,Me=Object.getOwnPropertyDescriptor(globalThis,`window`)?.get,I=/* @__PURE__ */ new WeakMap;function Ne(){if(typeof document>`u`||!globalThis.isSecureContext||`modelContext`in document)return;let e=Document.prototype,t=Object.getOwnPropertyDescriptor(e,`defaultView`).get,n=Object.getOwnPropertyDescriptor(globalThis,`ModelContext`);if(!Object.isExtensible(e)||n&&!n.configurable||!n&&!Object.isExtensible(globalThis))throw TypeError(`Cannot install WebMCP on this realm`);Object.defineProperty(globalThis,"ModelContext",{value:R,configurable:!0,writable:!0});let{getModelContext:r}={getModelContext(){t.call(this);let e=I.get(this);return e||(e=new L(this),I.set(this,e)),e}};Object.defineProperty(r,"name",{value:`get modelContext`}),Object.defineProperty(e,"modelContext",{configurable:!0,enumerable:!0,get:r}),document.modelContext}var L=class extends EventTarget{#e;#t=/* @__PURE__ */ new Map;#n;#r=null;#i=e=>{let t=this.#r;typeof t==`function`&&Reflect.apply(t,this,[e])===!1&&Event.prototype.preventDefault.call(e)};constructor(e){super(),this.#e=e;let t=d(e);t&&(this.#n=new o(t,{getTools:e=>this.#s(e),execute:(t,n,r,i)=>{let a=G(e).origin;return this.#a(n,r,a,t,i)},changed:()=>this.#c()}))}get ontoolchange(){return this.#r}set ontoolchange(e){let t=z(e)?e:null;!this.#r&&t&&this.addEventListener(`toolchange`,this.#i),this.#r&&!t&&this.removeEventListener(`toolchange`,this.#i),this.#r=t}async registerTool(e,t={}){let n=this.#e,{name:r,title:i,description:a,annotations:o,inputSchema:s,execute:c}=Fe(e),l=B(t),u=Be(l.exposedTo),d=ze(l.signal);G(n);let f=()=>{if(this.#t.has(r))throw new F(`A tool named ${r} is already registered`,`InvalidStateError`)};if(f(),!/^[A-Za-z0-9_.-]{1,128}$/u.test(r))throw new F(`Tool names are 1 to 128 characters of ASCII alphanumerics, "_", "-" or ".": ${r}`,`InvalidStateError`);if(!a)throw new F(`A tool description cannot be empty`,`InvalidStateError`);let p=s===void 0?void 0:W(s);d?.throwIfAborted();let m=Ve(u),h={metadata:{name:r,title:i,description:a,annotations:o,serializedSchema:p},execute:c,exposedTo:m},g=await this.#o();return d?.throwIfAborted(),f(),new Promise((e,t)=>{d?.addEventListener(`abort`,()=>{this.#t.delete(r),g.notify(m),t(d.reason)},{once:!0}),this.#t.set(r,h),g.notify(m).then(e,t)})}async getTools(e={}){let t=this.#e,n=Be(B(e).fromOrigins);G(t);let r=await this.#o(),i=Ve(n),a=await r.getTools(i);return a.sort((e,t)=>e.name===t.name?0:e.name<t.name?-1:1),new Promise(e=>{q(()=>e(a))})}async executeTool(e,t={},n={}){let r=this.#e,i=Ie(e),a=ze(B(n).signal);G(r);let o=URL.parse(i.origin)?.origin;if(!o||o===`null`)throw new F(`Invalid or opaque origin`,`NotSupportedError`);if(!z(t))throw TypeError(`inputObject must be an object`);let s=W(t);a?.throwIfAborted();let c=await this.#o();a?.throwIfAborted();let l=G(r);return i.window===l?this.#a(i.name,s,o,l.origin,a):c.execute(i.window,o,i.name,s,a)}#a(e,t,n,r,i){return new Promise((a,o)=>{i?.throwIfAborted();let s=new AbortController,c=!1,l=()=>{o(i.reason),q(()=>{c||s.abort()})},u=()=>{c=!0,q(()=>{i?.removeEventListener(`abort`,l),o(v())})},d=e=>{if(c=!0,!i?.aborted)try{let t=W(e);q(()=>{i?.removeEventListener(`abort`,l),a(t)})}catch{u()}};i?.addEventListener(`abort`,l,{once:!0}),q(()=>{if(!i?.aborted)try{let i=G(this.#e),a=this.#t.get(e);if(!a||n!==i.origin||!Pe(a,i.origin,r)){u();return}let o=JSON.parse(t);if(!z(o)){u();return}let c=a.execute,l=c(o,{signal:s.signal});Promise.resolve(l).then(d,u)}catch{u()}})})}async#o(){let e=this.#n;if(!e||!await e.allowed())throw new F(`WebMCP is disabled by Permissions Policy`,`NotAllowedError`);return G(this.#e),e}#s(e){let t=G(this.#e).origin,n=[];for(let r of this.#t.values())Pe(r,t,e)&&n.push(r.metadata);return n}#c(){return new Promise(e=>{q(()=>{this.dispatchEvent(new Event(`toolchange`)),e()})})}};function Pe(e,t,n){return t===n||e.exposedTo.includes(n)}const R=function(){throw TypeError(`Illegal constructor`)};Object.defineProperty(R,"name",{value:`ModelContext`}),Object.defineProperty(R,"prototype",{value:L.prototype,writable:!1}),Object.setPrototypeOf(R,EventTarget),Object.defineProperties(L.prototype,{constructor:{value:R,configurable:!0,writable:!0},[Symbol.toStringTag]:{value:`ModelContext`,configurable:!0},registerTool:{enumerable:!0},getTools:{enumerable:!0},executeTool:{enumerable:!0},ontoolchange:{enumerable:!0}});function Fe(e){let t=B(e),n=Re(t.annotations),r=V(U(t.description,`description`)),i=U(t.execute,`execute`);if(typeof i!=`function`)throw TypeError(`execute must be a function`);let a=i,o=Le(t.inputSchema),s=V(U(t.name,`name`)),c=t.title;return{name:s,title:c===void 0?``:H(c),description:r,annotations:n,inputSchema:o,execute:a}}function Ie(e){let t=B(e);Re(t.annotations),V(U(t.description,`description`)),Le(t.inputSchema);let n=V(U(t.name,`name`)),r=H(U(t.origin,`origin`)),i=t.title;i!==void 0&&V(i);let a=U(t.window,`window`);if(!z(a))throw TypeError(`window must be a Window`);return Me.call(a),{name:n,origin:r,window:a}}function Le(e){if(e!==void 0&&!z(e))throw TypeError(`inputSchema must be an object`);return e}function z(e){return typeof e==`object`&&!!e||typeof e==`function`}function B(e){if(e==null)return{};if(!z(e))throw TypeError(`Expected a dictionary`);return e}function Re(e){if(e===void 0)return;let t=B(e),n={};for(let e of r)n[e]=!!t[e];return n}function V(e){if(typeof e==`symbol`)throw TypeError(`Cannot convert a Symbol to a string`);return String(e)}function H(e){return V(e).toWellFormed()}function U(e,t){if(e===void 0)throw TypeError(`${t} is required`);return e}function W(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`Value is not JSON-serializable`);return t}function ze(e){if(e!==void 0)return AbortSignal.any([e])}function Be(e){if(e===void 0)return[];if(!z(e))throw TypeError(`Origins must be a sequence`);let t=B(e)[Symbol.iterator];if(typeof t!=`function`)throw TypeError(`Origins must be a sequence`);let n={[Symbol.iterator](){let n=Reflect.apply(t,e,[]);if(!z(n))throw TypeError(`Iterator must be an object`);let r=B(n).next;if(typeof r!=`function`)throw TypeError(`Iterator next must be a function`);return{next(){return Reflect.apply(r,n,[])}}}};return Array.from(n,H)}function Ve(e){return e.map(e=>{let t=URL.parse(e)?.origin;if(t===void 0)throw new F(`Invalid origin`,`SecurityError`);let n=URL.parse(t);if(!n||!He(n))throw new F(`Origin is not potentially trustworthy`,`SecurityError`);return t})}function He({protocol:e,hostname:t}){if([`https:`,`wss:`].includes(e))return!0;let n=t===`[::1]`||/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t),r=t===`localhost`||t===`localhost.`||t.endsWith(`.localhost`)||t.endsWith(`.localhost.`);return[`http:`,`ws:`].includes(e)&&(n||r)}function G(e){let t=d(e);if(!t)throw new F(`The document is not fully active`,`InvalidStateError`);if(f(e)===!1)throw new F(`WebMCP is disabled by Permissions Policy`,`NotAllowedError`);return t}let K;const Ue=[];function q(e){if(!K){let e=new MessageChannel;e.port1.onmessage=()=>Ue.shift()?.(),K=e.port2}Ue.push(e),K.postMessage(void 0)}function We(){if(typeof document>`u`||!globalThis.isSecureContext||typeof Promise.withResolvers!=`function`||typeof AbortSignal.any!=`function`||typeof String.prototype.toWellFormed!=`function`||typeof URL.parse!=`function`)return;Ne();let e=document.modelContext;e&&je(e)}var Ge=/* @__PURE__ */ e({CONSEQUENTIAL_TOOL_NAMES:()=>rt,READ_ONLY_TOOL_NAMES:()=>it,addWebMcpEventListener:()=>$,executeWebMcpTool:()=>Qe,extractAbortSignal:()=>Xe,getWebMcpEventTarget:()=>$e,getWebMcpMode:()=>Z,getWebMcpTools:()=>Ze,onWebMcpToolActivated:()=>et,onWebMcpToolCancel:()=>tt,onWebMcpToolChange:()=>nt,parseWebMcpInputSchema:()=>Q,registerWebMcpTools:()=>ot,resolveWebMcpToolAnnotations:()=>at,setWebMcpMode:()=>Ke,unregisterWebMcpTools:()=>st});const J=/* @__PURE__ */ new Map,Y=/* @__PURE__ */ new Set;let X=`polyfill`;function Ke(e){X=e}function Z(){return X}function qe(){try{if(typeof globalThis<`u`&&globalThis.isSecureContext===void 0&&typeof location<`u`&&(location.protocol===`https:`||location.hostname===`localhost`||location.hostname===`127.0.0.1`))try{Object.defineProperty(globalThis,"isSecureContext",{value:!0,configurable:!0})}catch{}typeof We==`function`&&We()}catch(e){console.warn(`WebMCP polyfill initialization failed:`,e)}}function Je(){return globalThis.originAgentCluster===void 0||globalThis.location?.protocol===`file:`||globalThis.originAgentCluster!==!1}function Ye(){if(typeof document>`u`&&typeof navigator>`u`)return null;X===`polyfill`&&qe();try{let e=typeof document<`u`&&document.modelContext!==void 0?Reflect.get(document,`modelContext`):typeof navigator<`u`&&navigator.modelContext!==void 0?Reflect.get(navigator,`modelContext`):void 0;if(!e||typeof e!=`object`)return null;let t=e;return typeof t.registerTool==`function`?t:null}catch(e){return console.warn(`WebMCP modelContext access failed:`,e),null}}function Q(e){if(typeof e==`string`){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{type:`object`,properties:{}}}return e&&typeof e==`object`&&!Array.isArray(e)?e:{type:`object`,properties:{}}}function Xe(e){if(e){if(typeof AbortSignal<`u`&&e instanceof AbortSignal)return e;if(typeof e==`object`&&`signal`in e&&typeof AbortSignal<`u`&&e.signal instanceof AbortSignal)return e.signal}}async function Ze(e){let t=Ye();if(!t||typeof t.getTools!=`function`)return[];try{let n=await t.getTools(e);return Array.isArray(n)?n.map(e=>({name:e.name,...e.title?{title:e.title}:{},...e.description?{description:e.description}:{},inputSchema:Q(e.inputSchema),...e.annotations?{annotations:e.annotations}:{},...e.execute?{execute:e.execute}:{}})):[]}catch(e){return console.warn(`Failed to retrieve WebMCP tools via getTools():`,e),[]}}async function Qe(e,t,n,r){if(!e||typeof e.executeTool!=`function`)throw Error(`ModelContext executeTool is not available`);let i,a;if(typeof n==`string`){a=n;try{let e=JSON.parse(n);i=e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch{i={}}}else if(n&&typeof n==`object`&&!Array.isArray(n)){i=n;try{a=JSON.stringify(n)}catch{a=`{}`}}else i={},a=`{}`;try{return await e.executeTool(t,i,r)}catch(n){let i=typeof n?.message==`string`&&n.message.startsWith(`Failed to parse input`),o=n instanceof TypeError;if(i||o)return await e.executeTool(t,a,r);throw n}}function $e(e){let t=typeof document<`u`?document:void 0,n=typeof window<`u`?window:void 0,r=typeof navigator<`u`?navigator:void 0,i=t?.modelContext??r?.modelContext,a=i&&typeof i.addEventListener==`function`,o=n&&typeof n.addEventListener==`function`;if(e){let t=`on${e}`;if(i&&t in i&&a)return i;if(n&&t in n&&o)return n}return a?i:o?n:null}function $(e,t,n){let r=$e(e),i=typeof n==`object`?n:void 0,a=i?.listenBoth??!1,o=typeof window<`u`&&typeof window.addEventListener==`function`?window:null,s=typeof document<`u`?document:null,c=typeof navigator<`u`?navigator:null,l=s?.modelContext??c?.modelContext,u=l&&typeof l.addEventListener==`function`,d=a?r===l?o===r?null:o:u?l:null:null;if(!r&&!d)return()=>{};let f=null,p=null,m=e=>{let n=e.toolName;if(typeof n!=`string`&&`detail`in e&&typeof e.detail==`object`&&(n=e.detail?.toolName),typeof n!=`string`&&(n=``),!(`toolName`in e)||e.toolName!==n)try{Object.defineProperty(e,"toolName",{value:n,configurable:!0,enumerable:!0})}catch{}if(a&&n){if(f||=/* @__PURE__ */ new Set,f.has(n))return;f.add(n),p||=setTimeout(()=>{f?.clear(),p=null},100)}t(e)};r&&r.addEventListener(e,m,n),d&&d.addEventListener(e,m,n);let h=!1,g=()=>{h||(h=!0,p&&=(clearTimeout(p),null),r&&r.removeEventListener(e,m,n),d&&d.removeEventListener(e,m,n))};if(i?.signal){if(i.signal.aborted)return g(),()=>{};i.signal.addEventListener(`abort`,()=>g(),{once:!0})}return g}function et(e,t){return $(`toolactivated`,e,t)}function tt(e,t){return $(`toolcancel`,e,t)}function nt(e,t){let n=typeof document<`u`?document:void 0,r=typeof navigator<`u`?navigator:void 0,i=n?.modelContext??r?.modelContext;return!i||typeof i.addEventListener!=`function`?()=>{}:(i.addEventListener(`toolchange`,e,t),()=>{try{i.removeEventListener(`toolchange`,e,t)}catch{}})}const rt=/* @__PURE__ */ new Set([`bash`,`clear_chat`,`delete_file`,`delete_task`,`email_send_message`,`git_delete_branch`,`git_delete_repo`,`git_push`,`git_reset`]),it=/* @__PURE__ */ new Set(/* @__PURE__ */ `ask_user.detect_language.diff_files.email_read_messages.fetch_url.get_current_time.git_branches.git_diff.git_list_repos.git_log.git_read_file_at_ref.git_show.git_status.list_components.list_files.list_room_members.list_tasks.list_tool_profiles.proofread_text.read_file.remote_mcp_list_tools.rewrite_text.search_files.summarize_text.translate_text.web_search.write_text`.split(`.`));function at(e,t){let n=rt.has(e);return{readOnlyHint:!n&&it.has(e),consequentialHint:n,untrustedContentHint:!0,...typeof t?.debugging==`boolean`?{debugging:t.debugging}:{},...t||{}}}async function ot(e,r,i=t,a){let o=Array.isArray(a)?a:n;if(o.length===0)return!0;if(X===`polyfill`&&!Je())return console.warn(`WebMCP polyfill registration skipped: this browser reports originAgentCluster = false. The @mcp-b/webmcp-polyfill v5.1.0+ requires an origin-keyed agent cluster (Chrome enforces this automatically for HTTPS; Firefox requires the server to send Origin-Agent-Cluster: ?1). WebMCP tools are unavailable in this browser session.`),!1;let s=Ye();if(!s)return!1;for(let t of o){if(Y.has(t.name))continue;let n=new AbortController;J.set(t.name,n),Y.add(t.name);try{let r={name:t.name,title:t.title||t.name,description:t.description,inputSchema:Q(t.input_schema),annotations:at(t.name,t.annotations),execute:(n,r)=>{if(!e)throw Error(`Cannot execute tool: agent worker is not ready`);let a=Xe(r);return a?.aborted?Promise.reject(/* @__PURE__ */ Error(`Tool execution aborted`)):new Promise((r,o)=>{let s=Date.now().toString(36)+Math.random().toString(36).slice(2),c=null,l=()=>{c!==null&&(clearTimeout(c),c=null),e?.removeEventListener(`message`,d),a&&u&&a.removeEventListener(`abort`,u)},u=()=>{l(),o(/* @__PURE__ */ Error(`Tool execution aborted`))};a&&a.addEventListener(`abort`,u,{once:!0}),c=setTimeout(()=>{l(),o(/* @__PURE__ */ Error(`Timeout waiting for tool execution`))},6e5);let d=e=>{let t=e.data;t&&t.type===`execute-tool-result`&&t.callId===s&&(l(),t.error?o(Error(t.error)):r(t.result))};e.addEventListener(`message`,d),e.postMessage({type:`execute-tool`,callId:s,payload:{name:t.name,input:n||{},groupId:i}})})}};await s.registerTool(r,{signal:n.signal}),await new Promise(e=>setTimeout(e,0))}catch(e){if(J.delete(t.name),Y.delete(t.name),e instanceof Error&&(e.message.includes(`already registered`)||e.message.includes(`Duplicate tool name`)))continue;if(e instanceof DOMException&&e.name===`SecurityError`)return console.warn(`WebMCP tool registration aborted: browser security policy (SecurityError) prevented registration. Remaining tools will not be registered for this session.`,e),!1;throw console.error(`Failed to register tool ${t.name}:`,e),e}}return!0}function st(){for(let e of J.values())try{e.abort()}catch{}J.clear(),Y.clear()}export{ot as a,Ge as c,nt as i,et as n,Ke as o,tt as r,st as s,Z as t};