shadow-claw 1.51.0 → 1.52.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 (296) 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/{chunk-Dtse8rAn.js → chunk-5ryVpyup.js} +1 -1
  5. package/dist/cli/chunk-Aq3057Xo.js +1 -0
  6. package/dist/cli/{chunk-4CZJpLqA.js → chunk-BV9JBYpl.js} +2 -2
  7. package/dist/cli/{chunk-mbFAP9Ev.js → chunk-BZI3bWDA.js} +1 -1
  8. package/dist/cli/chunk-BaUCHRPD.js +1 -0
  9. package/dist/cli/{chunk-vzUrhBN5.js → chunk-BdbEt6gM.js} +1 -1
  10. package/dist/cli/{chunk-BU8UG4L_.js → chunk-BiWLawPV.js} +1 -1
  11. package/dist/cli/chunk-BkLnHJeo.js +1 -0
  12. package/dist/cli/{chunk-BqfPWIBf.js → chunk-BzWY1sKE.js} +1 -1
  13. package/dist/cli/{chunk-DajM7Kro.js → chunk-C79eIU-4.js} +1 -1
  14. package/dist/cli/{chunk-CI9r1AM5.js → chunk-CDw214Zi.js} +1 -1
  15. package/dist/cli/chunk-CNqc7LLn.js +1 -0
  16. package/dist/cli/{chunk-CEhU-Ah-.js → chunk-CWW7dqIv.js} +1 -1
  17. package/dist/cli/{chunk-BT_C3OlA.js → chunk-CcSTYHtR.js} +1 -1
  18. package/dist/cli/chunk-ClOfk6Ga.js +1 -0
  19. package/dist/cli/chunk-ComXUwW0.js +1 -0
  20. package/dist/cli/{chunk-lL1BhHVe.js → chunk-CooeO4UQ.js} +1 -1
  21. package/dist/cli/{chunk-khr7--yI.js → chunk-CtfWY4G6.js} +1 -1
  22. package/dist/cli/{chunk-C4iW1XuQ.js → chunk-DFgSiYMW.js} +1 -1
  23. package/dist/cli/chunk-DGBnjngK.js +1 -0
  24. package/dist/cli/{chunk-D7bFIUK3.js → chunk-DGu1OhJs.js} +1 -1
  25. package/dist/cli/{chunk-CzfOerQR.js → chunk-DIjCY0Wf.js} +1 -1
  26. package/dist/cli/{chunk-D-iqEY5G.js → chunk-DJ_LeQtz.js} +1 -1
  27. package/dist/cli/{chunk-BmEsDkRK.js → chunk-DQRu-9wO.js} +1 -1
  28. package/dist/cli/{chunk-DojiYody.js → chunk-DToVgO9a.js} +1 -1
  29. package/dist/cli/{chunk-De5a_Rlp.js → chunk-DVbNkQRL.js} +1 -1
  30. package/dist/cli/{chunk-c8MIYB2y.js → chunk-Ddtzaj43.js} +1 -1
  31. package/dist/cli/{chunk-aJ6fufe-.js → chunk-DiqS56rD.js} +1 -1
  32. package/dist/cli/{chunk-CeUEmZNt.js → chunk-DnRcu9b4.js} +1 -1
  33. package/dist/cli/chunk-DtgZDsJA.js +1 -0
  34. package/dist/cli/{chunk-DVMcK7g6.js → chunk-Du4qvxo_.js} +2 -2
  35. package/dist/cli/{chunk-CegcvNc9.js → chunk-Dz5_hgvL.js} +8 -8
  36. package/dist/cli/{chunk-Cd4Dv5Eq.js → chunk-I3mxEelq.js} +1 -1
  37. package/dist/cli/{chunk-Do3VICh1.js → chunk-IU2SH_ti.js} +1 -1
  38. package/dist/cli/{chunk-BQveaAaD.js → chunk-NC8XsSSA.js} +1 -1
  39. package/dist/cli/{chunk-D702W_Ry.js → chunk-Q4BZ9QN9.js} +1 -1
  40. package/dist/cli/chunk-WTlDd4Ou.js +1 -0
  41. package/dist/cli/chunk-XGzq5joC.js +1 -0
  42. package/dist/cli/{chunk-ar7eAlxK.js → chunk-aJfaGe2s.js} +8 -8
  43. package/dist/cli/chunk-bPVrFlmk.js +1 -0
  44. package/dist/cli/chunk-jXJHKxdR.js +1 -0
  45. package/dist/cli/{chunk-C3dTAmV_.js → chunk-rstVU7U0.js} +1 -1
  46. package/dist/cli/{chunk-DGfTzQui.js → chunk-t72uObQ7.js} +1 -1
  47. package/dist/cli/{chunk-DDgfljzN.js → chunk-vq8xlroY.js} +1 -1
  48. package/dist/cli/cli.js +1 -1
  49. package/dist/headless-agent.js +1 -1
  50. package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
  51. package/dist/lib/components/index.js +27 -27
  52. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  53. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  54. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  55. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  57. package/dist/lib/components/settings/shadow-claw-llm/model-ranking.d.ts +12 -0
  58. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  59. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  60. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  61. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  63. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  64. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  65. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  66. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  67. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  68. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  69. package/dist/lib/components/shadow-claw-channels.js +1 -1
  70. package/dist/lib/components/shadow-claw-chat/shadow-claw-chat.d.ts +1 -0
  71. package/dist/lib/components/shadow-claw-chat.js +1 -1
  72. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  73. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  74. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  75. package/dist/lib/components/shadow-claw-files.js +1 -1
  76. package/dist/lib/components/shadow-claw-git.js +1 -1
  77. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  78. package/dist/lib/components/shadow-claw-llm.js +1 -1
  79. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  80. package/dist/lib/components/shadow-claw-networking.js +1 -1
  81. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  82. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  83. package/dist/lib/components/shadow-claw-pages.js +1 -1
  84. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  85. package/dist/lib/components/shadow-claw-provider-model-picker.js +1 -1
  86. package/dist/lib/components/shadow-claw-settings.js +1 -1
  87. package/dist/lib/components/shadow-claw-storage.js +1 -1
  88. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  89. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  90. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  91. package/dist/lib/components/shadow-claw-tools.js +1 -1
  92. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  93. package/dist/lib/components/shadow-claw.js +1 -1
  94. package/dist/lib/config/config.d.ts +2 -1
  95. package/dist/lib/{config-DxDaVDTn.js → config-DFLs7eoC.js} +3 -2
  96. package/dist/lib/config-DFLs7eoC.js.map +1 -0
  97. package/dist/lib/{configurePeerJs-ScwZiGbF.js → configurePeerJs-DJ0H6e6s.js} +3 -3
  98. package/dist/lib/{configurePeerJs-ScwZiGbF.js.map → configurePeerJs-DJ0H6e6s.js.map} +1 -1
  99. package/dist/lib/{connections-D82zele0.js → connections-DT3nPylw.js} +2 -2
  100. package/dist/lib/{connections-D82zele0.js.map → connections-DT3nPylw.js.map} +1 -1
  101. package/dist/lib/{downloadGroupFile-D7-5y6NI.js → downloadGroupFile-DMnAiPj4.js} +2 -2
  102. package/dist/lib/{downloadGroupFile-D7-5y6NI.js.map → downloadGroupFile-DMnAiPj4.js.map} +1 -1
  103. package/dist/lib/{file-viewer-BMvvndPQ.js → file-viewer-OHmGC_l7.js} +5 -5
  104. package/dist/lib/{file-viewer-BMvvndPQ.js.map → file-viewer-OHmGC_l7.js.map} +1 -1
  105. package/dist/lib/{getGroupDir-BidwYPfP.js → getGroupDir-mTV2Iz2b.js} +3 -3
  106. package/dist/lib/{getGroupDir-BidwYPfP.js.map → getGroupDir-mTV2Iz2b.js.map} +1 -1
  107. package/dist/lib/{git-CXmWufWS.js → git-CGdKghMC.js} +3 -3
  108. package/dist/lib/{git-CXmWufWS.js.map → git-CGdKghMC.js.map} +1 -1
  109. package/dist/lib/index.js +28 -28
  110. package/dist/lib/{initChatSplitResize-tvUZ-wsp.js → initChatSplitResize-B8zHHQdm.js} +2 -2
  111. package/dist/lib/{initChatSplitResize-tvUZ-wsp.js.map → initChatSplitResize-B8zHHQdm.js.map} +1 -1
  112. package/dist/lib/{initControlPlane-Dnjkb-6J.js → initControlPlane-BczrlTf3.js} +14 -14
  113. package/dist/lib/{initControlPlane-Dnjkb-6J.js.map → initControlPlane-BczrlTf3.js.map} +1 -1
  114. package/dist/lib/{markdown-WCXar9C8.js → markdown-D-7Cjyye.js} +3 -3
  115. package/dist/lib/{markdown-WCXar9C8.js.map → markdown-D-7Cjyye.js.map} +1 -1
  116. package/dist/lib/{mcp-reconnect-WTOQONHZ.js → mcp-reconnect-Czf7QCCv.js} +2 -2
  117. package/dist/lib/{mcp-reconnect-WTOQONHZ.js.map → mcp-reconnect-Czf7QCCv.js.map} +1 -1
  118. package/dist/lib/{memoryStorage-Bo2Wpfmg.js → memoryStorage-CXyKsKMo.js} +2 -2
  119. package/dist/lib/{memoryStorage-Bo2Wpfmg.js.map → memoryStorage-CXyKsKMo.js.map} +1 -1
  120. package/dist/lib/model-ranking-Bo8CpGH1.js +116 -0
  121. package/dist/lib/model-ranking-Bo8CpGH1.js.map +1 -0
  122. package/dist/lib/{orchestrator-Crw4btGn.js → orchestrator-BK138MkV.js} +10 -10
  123. package/dist/lib/{orchestrator-Crw4btGn.js.map → orchestrator-BK138MkV.js.map} +1 -1
  124. package/dist/lib/{orchestrator-Dro541iH.js → orchestrator-BtbxiPQB.js} +17 -16
  125. package/dist/lib/{orchestrator-Dro541iH.js.map → orchestrator-BtbxiPQB.js.map} +1 -1
  126. package/dist/lib/{peerjs-D741bHrf.js → peerjs-QJr03K9F.js} +7 -7
  127. package/dist/lib/{peerjs-D741bHrf.js.map → peerjs-QJr03K9F.js.map} +1 -1
  128. package/dist/lib/{prompt-api-D9XdrCep.js → prompt-api-vf351sf2.js} +2 -19
  129. package/dist/lib/{prompt-api-D9XdrCep.js.map → prompt-api-vf351sf2.js.map} +1 -1
  130. package/dist/lib/{push-client-DKFUY_Ti.js → push-client-BOHgqHbk.js} +4 -4
  131. package/dist/lib/{push-client-DKFUY_Ti.js.map → push-client-BOHgqHbk.js.map} +1 -1
  132. package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js → readGroupFileBytes-CRA6dmgT.js} +2 -2
  133. package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js.map → readGroupFileBytes-CRA6dmgT.js.map} +1 -1
  134. package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js → shadow-claw-a2ui-DbZa4Gxp.js} +2 -2
  135. package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js.map → shadow-claw-a2ui-DbZa4Gxp.js.map} +1 -1
  136. package/dist/lib/{shadow-claw-accounts-CUypXc3I.js → shadow-claw-accounts-B6OW2NVD.js} +3 -3
  137. package/dist/lib/{shadow-claw-accounts-CUypXc3I.js.map → shadow-claw-accounts-B6OW2NVD.js.map} +1 -1
  138. package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js → shadow-claw-channel-config-F_EJ-uK2.js} +3 -3
  139. package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js.map → shadow-claw-channel-config-F_EJ-uK2.js.map} +1 -1
  140. package/dist/lib/{shadow-claw-channels-hgjjzvRr.js → shadow-claw-channels-XYylMpjg.js} +3 -3
  141. package/dist/lib/{shadow-claw-channels-hgjjzvRr.js.map → shadow-claw-channels-XYylMpjg.js.map} +1 -1
  142. package/dist/lib/{shadow-claw-chat-D69IiLXd.js → shadow-claw-chat-dbK_DGO_.js} +124 -38
  143. package/dist/lib/shadow-claw-chat-dbK_DGO_.js.map +1 -0
  144. package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js → shadow-claw-control-plane-BJKkmahQ.js} +7 -7
  145. package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js.map → shadow-claw-control-plane-BJKkmahQ.js.map} +1 -1
  146. package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js → shadow-claw-conversations-BKSsMYTc.js} +6 -6
  147. package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js.map → shadow-claw-conversations-BKSsMYTc.js.map} +1 -1
  148. package/dist/lib/{shadow-claw-D3z3tFyE.js → shadow-claw-eBB2dbpd.js} +11 -11
  149. package/dist/lib/{shadow-claw-D3z3tFyE.js.map → shadow-claw-eBB2dbpd.js.map} +1 -1
  150. package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js → shadow-claw-file-viewer-BqChtTvM.js} +8 -8
  151. package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js.map → shadow-claw-file-viewer-BqChtTvM.js.map} +1 -1
  152. package/dist/lib/{shadow-claw-files-BM7qW3TW.js → shadow-claw-files-Bu7VCQw6.js} +9 -9
  153. package/dist/lib/{shadow-claw-files-BM7qW3TW.js.map → shadow-claw-files-Bu7VCQw6.js.map} +1 -1
  154. package/dist/lib/{shadow-claw-git-BBTiTYIn.js → shadow-claw-git-CdPPN6Qb.js} +6 -6
  155. package/dist/lib/{shadow-claw-git-BBTiTYIn.js.map → shadow-claw-git-CdPPN6Qb.js.map} +1 -1
  156. package/dist/lib/{shadow-claw-integrations-DTY3E545.js → shadow-claw-integrations-DehqBSRe.js} +4 -4
  157. package/dist/lib/{shadow-claw-integrations-DTY3E545.js.map → shadow-claw-integrations-DehqBSRe.js.map} +1 -1
  158. package/dist/lib/{shadow-claw-llm-AJwzkOGo.js → shadow-claw-llm-COZkufA8.js} +13 -11
  159. package/dist/lib/shadow-claw-llm-COZkufA8.js.map +1 -0
  160. package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js → shadow-claw-mcp-remote-axF50-le.js} +4 -4
  161. package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js.map → shadow-claw-mcp-remote-axF50-le.js.map} +1 -1
  162. package/dist/lib/{shadow-claw-networking-B3leDgZ4.js → shadow-claw-networking-BT_Rxj36.js} +2 -2
  163. package/dist/lib/{shadow-claw-networking-B3leDgZ4.js.map → shadow-claw-networking-BT_Rxj36.js.map} +1 -1
  164. package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js → shadow-claw-notifications-ClqAXDDN.js} +3 -3
  165. package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js.map → shadow-claw-notifications-ClqAXDDN.js.map} +1 -1
  166. package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js → shadow-claw-page-header-bigC_h6U.js} +2 -2
  167. package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js.map → shadow-claw-page-header-bigC_h6U.js.map} +1 -1
  168. package/dist/lib/{shadow-claw-pages-BFOcluFY.js → shadow-claw-pages-kA2qa-4B.js} +9 -9
  169. package/dist/lib/{shadow-claw-pages-BFOcluFY.js.map → shadow-claw-pages-kA2qa-4B.js.map} +1 -1
  170. package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js → shadow-claw-peerjs-CvcH2DkA.js} +3 -3
  171. package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js.map → shadow-claw-peerjs-CvcH2DkA.js.map} +1 -1
  172. package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js → shadow-claw-provider-model-picker-fcVQdDtQ.js} +2 -2
  173. package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js.map → shadow-claw-provider-model-picker-fcVQdDtQ.js.map} +1 -1
  174. package/dist/lib/{shadow-claw-settings-CZgGMz0a.js → shadow-claw-settings-CkO6JjA4.js} +6 -6
  175. package/dist/lib/{shadow-claw-settings-CZgGMz0a.js.map → shadow-claw-settings-CkO6JjA4.js.map} +1 -1
  176. package/dist/lib/{shadow-claw-storage-BTUpEKO0.js → shadow-claw-storage-10w-y8vL.js} +5 -5
  177. package/dist/lib/{shadow-claw-storage-BTUpEKO0.js.map → shadow-claw-storage-10w-y8vL.js.map} +1 -1
  178. package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js → shadow-claw-task-server-U98sZxPu.js} +2 -2
  179. package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js.map → shadow-claw-task-server-U98sZxPu.js.map} +1 -1
  180. package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js → shadow-claw-tasks-DrSVUOsP.js} +8 -8
  181. package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js.map → shadow-claw-tasks-DrSVUOsP.js.map} +1 -1
  182. package/dist/lib/{shadow-claw-terminal-LGuXKu77.js → shadow-claw-terminal-B7HYLuce.js} +2 -2
  183. package/dist/lib/{shadow-claw-terminal-LGuXKu77.js.map → shadow-claw-terminal-B7HYLuce.js.map} +1 -1
  184. package/dist/lib/{shadow-claw-tools-C_S-xXVG.js → shadow-claw-tools-BKrXzZfF.js} +7 -7
  185. package/dist/lib/{shadow-claw-tools-C_S-xXVG.js.map → shadow-claw-tools-BKrXzZfF.js.map} +1 -1
  186. package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js → shadow-claw-webvm-Duwa5oiW.js} +3 -3
  187. package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js.map → shadow-claw-webvm-Duwa5oiW.js.map} +1 -1
  188. package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js → syncWebMcpRegistration-BOx-0F6_.js} +5 -5
  189. package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js.map → syncWebMcpRegistration-BOx-0F6_.js.map} +1 -1
  190. package/dist/lib/{tools-B7gC1eb_.js → tools-BEuBatUs.js} +4 -4
  191. package/dist/lib/{tools-B7gC1eb_.js.map → tools-BEuBatUs.js.map} +1 -1
  192. package/dist/lib/utils/index.js +1 -1
  193. package/dist/lib/utils/utils.js +1 -1
  194. package/dist/lib/{utils-D_ylqOY-.js → utils-D8AxCH6m.js} +2 -2
  195. package/dist/lib/{utils-D_ylqOY-.js.map → utils-D8AxCH6m.js.map} +1 -1
  196. package/dist/lib/{webmcp-CkYINKJj.js → webmcp-BjfVWX1K.js} +2 -2
  197. package/dist/lib/{webmcp-CkYINKJj.js.map → webmcp-BjfVWX1K.js.map} +1 -1
  198. package/dist/public/.well-known/mcp/server-card.json +1 -1
  199. package/dist/public/.well-known/mcp.json +1 -1
  200. package/dist/public/README.md +1 -1
  201. package/dist/public/agent.worker.js +1 -1
  202. package/dist/public/components/shadow-claw-chat/shadow-claw-chat.html +1 -1
  203. package/dist/public/config-071HSho8.js +1 -0
  204. package/dist/public/{configurePeerJs-DQQ6YL-5.js → configurePeerJs-DL-LurJY.js} +1 -1
  205. package/dist/public/{connections-CRNk2FxF.js → connections-Bb0rBpV-.js} +1 -1
  206. package/dist/public/{custom-element-security-3_FKCXcg.js → custom-element-security-Td4vrRc_.js} +1 -1
  207. package/dist/public/docs/example/article/index.html +1 -1
  208. package/dist/public/docs/example/article.html +1 -1
  209. package/dist/public/docs/publishing/index.html +1 -1
  210. package/dist/public/docs/publishing.html +1 -1
  211. package/dist/public/docs/skill-creator/index.html +1 -1
  212. package/dist/public/docs/skill-creator.html +1 -1
  213. package/dist/public/docs/subsystems/providers.md +1 -1
  214. package/dist/public/{downloadGroupFile-wkdhVgrZ.js → downloadGroupFile-Unq8_7D9.js} +1 -1
  215. package/dist/public/{e2e-bridge-DnFHPuwg.js → e2e-bridge-Dbc9fCDq.js} +1 -1
  216. package/dist/public/{file-viewer-C92v4Ggd.js → file-viewer-QkCuknFn.js} +1 -1
  217. package/dist/public/{getGroupDir-BGGIJL4Y.js → getGroupDir-Bj5XCflQ.js} +1 -1
  218. package/dist/public/{git-BH6qyToB.js → git-Bhz4YHc8.js} +2 -2
  219. package/dist/public/index.html +1 -1
  220. package/dist/public/index.js +1 -1
  221. package/dist/public/{initChatSplitResize--RH5kzVF.js → initChatSplitResize-KNL9Oh7s.js} +1 -1
  222. package/dist/public/{initControlPlane-yPJ3ajkj.js → initControlPlane-D2fVhRFC.js} +1 -1
  223. package/dist/public/main/index.html +1 -1
  224. package/dist/public/main/memory/index.html +1 -1
  225. package/dist/public/main/memory.html +1 -1
  226. package/dist/public/main.html +1 -1
  227. package/dist/public/{markdown-CA0v11cd.js → markdown-By6gdUvF.js} +1 -1
  228. package/dist/public/{mcp-reconnect-uyNSigzu.js → mcp-reconnect-CDRJPuoN.js} +1 -1
  229. package/dist/public/{memoryStorage-DjPNAT5t.js → memoryStorage-C-ao9y-j.js} +1 -1
  230. package/dist/public/model-ranking-DUdrFOcC.js +1 -0
  231. package/dist/public/{orchestrator-DTzgyL23.js → orchestrator-B7MpomoG.js} +2 -2
  232. package/dist/public/{orchestrator-Cmr69pMC.js → orchestrator-C8aIHbDy.js} +2 -2
  233. package/dist/public/{peerjs-Br38mUFC.js → peerjs-DwGjY5VX.js} +1 -1
  234. package/dist/public/prompt-api-BWe_j3Wg.js +1 -0
  235. package/dist/public/{push-client-CB8haOGC.js → push-client-o8g5_EOe.js} +1 -1
  236. package/dist/public/service-worker.js +1 -1
  237. package/dist/public/{shadow-claw-RuFQ2Ej5.js → shadow-claw-Ba2ZFE9m.js} +2 -2
  238. package/dist/public/{shadow-claw-accounts-BMsEItB6.js → shadow-claw-accounts-BbNPiiaV.js} +1 -1
  239. package/dist/public/{shadow-claw-channels-Q_AXuEaI.js → shadow-claw-channels-CHGtPkfY.js} +1 -1
  240. package/dist/public/{shadow-claw-chat-DZQ3OaH7.js → shadow-claw-chat-3TmjJA6-.js} +90 -23
  241. package/dist/public/{shadow-claw-control-plane-CyXA8tB8.js → shadow-claw-control-plane-BAFT06LL.js} +2 -2
  242. package/dist/public/{shadow-claw-conversations-BLKtlvHe.js → shadow-claw-conversations-DsQ_kxWm.js} +1 -1
  243. package/dist/public/{shadow-claw-file-viewer-CVLDfpZe.js → shadow-claw-file-viewer-hBxTknL2.js} +1 -1
  244. package/dist/public/{shadow-claw-files-DB6VVjir.js → shadow-claw-files-Daw6IIrJ.js} +1 -1
  245. package/dist/public/{shadow-claw-git-D57bTSMF.js → shadow-claw-git-CxGwyxim.js} +2 -2
  246. package/dist/public/{shadow-claw-integrations-BOwhUY-4.js → shadow-claw-integrations-DnIr6xp-.js} +1 -1
  247. package/dist/public/{shadow-claw-llm-CYenm-mm.js → shadow-claw-llm-Bc6tZ8kk.js} +3 -3
  248. package/dist/public/{shadow-claw-mcp-remote-CJ-Ckl0j.js → shadow-claw-mcp-remote-nGPpFpI-.js} +1 -1
  249. package/dist/public/{shadow-claw-networking-Cut76YQL.js → shadow-claw-networking-B6YgtiA7.js} +1 -1
  250. package/dist/public/{shadow-claw-notifications-C3kYCrIa.js → shadow-claw-notifications-BSxifptS.js} +1 -1
  251. package/dist/public/{shadow-claw-page-header-Dd7QafUk.js → shadow-claw-page-header-LzVgEn46.js} +1 -1
  252. package/dist/public/{shadow-claw-pages-BWtVtwTG.js → shadow-claw-pages-Cy6T0G9y.js} +1 -1
  253. package/dist/public/{shadow-claw-settings-Bj7jnngO.js → shadow-claw-settings-DGkwt1ge.js} +2 -2
  254. package/dist/public/{shadow-claw-storage-CMSzQs1-.js → shadow-claw-storage-DX_4T7KR.js} +1 -1
  255. package/dist/public/{shadow-claw-task-server-CFclo7UX.js → shadow-claw-task-server-DTsbEs5z.js} +1 -1
  256. package/dist/public/{shadow-claw-tasks-ClDdeB6Z.js → shadow-claw-tasks-rr6fMxAM.js} +1 -1
  257. package/dist/public/{shadow-claw-terminal-3ysWZJix.js → shadow-claw-terminal-C7DhrrX6.js} +1 -1
  258. package/dist/public/{shadow-claw-tools-DQVwpTcZ.js → shadow-claw-tools-DcQroojH.js} +1 -1
  259. package/dist/public/{shadow-claw-webvm-Cnxz04Fk.js → shadow-claw-webvm-bZj44Did.js} +1 -1
  260. package/dist/public/{syncWebMcpRegistration-QwnLMAK3.js → syncWebMcpRegistration-XJjIlDNO.js} +1 -1
  261. package/dist/public/{tools-DvQ_ngXn.js → tools-BpZh7hgB.js} +1 -1
  262. package/dist/public/{webmcp-CJymew4t.js → webmcp-CkfDZfZ0.js} +1 -1
  263. package/dist/server.js +1 -1
  264. package/package.json +1 -1
  265. package/src/components/settings/shadow-claw-llm/model-ranking.test.ts +121 -7
  266. package/src/components/settings/shadow-claw-llm/model-ranking.ts +97 -0
  267. package/src/components/settings/shadow-claw-llm/shadow-claw-llm.test.ts +35 -0
  268. package/src/components/settings/shadow-claw-llm/shadow-claw-llm.ts +15 -5
  269. package/src/components/shadow-claw-chat/shadow-claw-chat.html +81 -14
  270. package/src/components/shadow-claw-chat/shadow-claw-chat.test.ts +73 -0
  271. package/src/components/shadow-claw-chat/shadow-claw-chat.trusted-types.test.ts +3 -0
  272. package/src/components/shadow-claw-chat/shadow-claw-chat.ts +79 -32
  273. package/src/config/config.test.ts +4 -4
  274. package/src/config/config.ts +2 -1
  275. package/src/core/orchestrator/orchestrator.test.ts +2 -1
  276. package/src/core/orchestrator/utils/initTasks.ts +5 -4
  277. package/dist/cli/chunk-B3S061IE.js +0 -1
  278. package/dist/cli/chunk-BUJdF9o3.js +0 -1
  279. package/dist/cli/chunk-BX0R2gIY.js +0 -1
  280. package/dist/cli/chunk-BoiPfhwJ.js +0 -1
  281. package/dist/cli/chunk-BtJYj7vB.js +0 -1
  282. package/dist/cli/chunk-BwXrZVeU.js +0 -1
  283. package/dist/cli/chunk-CaWh9Pru.js +0 -1
  284. package/dist/cli/chunk-Ck4ePI8z.js +0 -1
  285. package/dist/cli/chunk-Ctg-SXcP.js +0 -1
  286. package/dist/cli/chunk-DTKv1-tk.js +0 -1
  287. package/dist/cli/chunk-DdYpd9Nu.js +0 -1
  288. package/dist/cli/chunk-DflhmBY2.js +0 -1
  289. package/dist/lib/config-DxDaVDTn.js.map +0 -1
  290. package/dist/lib/model-ranking-CDXs7hkK.js +0 -57
  291. package/dist/lib/model-ranking-CDXs7hkK.js.map +0 -1
  292. package/dist/lib/shadow-claw-chat-D69IiLXd.js.map +0 -1
  293. package/dist/lib/shadow-claw-llm-AJwzkOGo.js.map +0 -1
  294. package/dist/public/config-Dqn5OMfC.js +0 -1
  295. package/dist/public/model-ranking-DLIC9IDU.js +0 -1
  296. package/dist/public/prompt-api-B-8N-MRY.js +0 -11
@@ -1,4 +1,4 @@
1
- import{P as e,R as t,c as n,r,u as i}from"./config-Dqn5OMfC.js";import{r as a}from"./txPromise-DlzJBj9N.js";import{t as o}from"./getConfig-DSieAlsi.js";import{m as s}from"./custom-element-security-3_FKCXcg.js";import{At as c,J as l,K as u,X as d,Y as f,_ as p,b as m,dt as h,et as g,h as _,jt as v,m as y,nt as b,ot as x,p as S,rt as C,t as w,tt as T,ut as E,v as D,y as O}from"./orchestrator-DTzgyL23.js";import{t as k}from"./setConfig-CIdSs9rh.js";import{a as A,r as j,s as M}from"./toast-CtIuHprH.js";import{t as N}from"./shadow-claw-element-DIrv3P6A.js";import{t as P}from"./effect-xrx5qhzv.js";import{n as F,r as I}from"./prompt-api-B-8N-MRY.js";import{n as L,t as R}from"./model-ranking-DLIC9IDU.js";const z=[{pattern:`gemma-3-1b-it-ONNX-GQA`,contextWindow:128e3},{pattern:`gemma-3-1b-it-ONNX`,contextWindow:128e3},{pattern:`Qwen3-0.6B-ONNX`,contextWindow:131072},{pattern:`Qwen3.5`,contextWindow:32768},{pattern:`Llama-3.2`,contextWindow:128e3},{pattern:`Phi-4`,contextWindow:128e3},{pattern:`Phi-3.5`,contextWindow:128e3},{pattern:`SmolLM`,contextWindow:8192},{pattern:`DeepSeek-R1`,contextWindow:128e3},{pattern:`LFM2`,contextWindow:32768},{pattern:`gpt-oss`,contextWindow:32768},{pattern:`gemma-4`,contextWindow:128e3},{pattern:`browser-built-in`,contextWindow:4096}];function B(e){let n=t.getModelInfo(e);if(n&&typeof n.contextWindow==`number`&&n.contextWindow>0)return n.contextWindow;for(let{pattern:t,contextWindow:n}of z)if(e.includes(t))return n;return null}function V(t,r,i){let a=r;t===`prompt_api`&&(r===`browser-built-in`||!r)&&(i?a=i:c()||(a=n));let o=e(a),s=typeof navigator>`u`?null:navigator,l=typeof s?.deviceMemory==`number`?s.deviceMemory:null,u=typeof s?.hardwareConcurrency==`number`?s.hardwareConcurrency:null;if(t===`prompt_api`||t===`transformers_js_browser`||t===`litert_lm_browser`||t===`ollama`){let e=B(a),t=o;l!==null&&(t=l>=32?Math.min(t,16384):l>=16?Math.min(t,8192):l>=8?Math.min(t,4096):Math.min(t,2048)),u!==null&&(u<=4?t=Math.min(t,2048):u>=16?t=Math.min(o,Math.max(t,8192)):u>=8&&(t=Math.min(o,Math.max(t,4096)))),/thinking|reasoning/i.test(a)&&(t=Math.min(t,4096)),t=Math.max(512,Math.min(t,o));let n=[];return e!==null&&n.push(`native context: ${e.toLocaleString()} tokens`),l!==null&&n.push(`${l} GB browser-reported memory`),u!==null&&n.push(`${u} CPU threads`),/thinking|reasoning/i.test(a)&&n.push(`reasoning model`),{recommended:t,detail:n.length>0?`Recommended for this device: ${t.toLocaleString()} tokens (${n.join(`, `)}). Model ceiling: ${o.toLocaleString()}.`:`Recommended for local inference: ${t.toLocaleString()} tokens. Model ceiling: ${o.toLocaleString()}.`}}return{recommended:o,detail:`Model-aware ceiling: ${o.toLocaleString()} tokens.`}}const H=new CSSStyleSheet;H.replaceSync(`*,
1
+ import{P as e,R as t,c as n,r,u as i}from"./config-071HSho8.js";import{r as a}from"./txPromise-DlzJBj9N.js";import{t as o}from"./getConfig-DSieAlsi.js";import{m as s}from"./custom-element-security-Td4vrRc_.js";import{At as c,J as l,K as u,X as d,Y as f,_ as p,b as m,dt as h,et as g,h as _,jt as v,m as y,nt as b,ot as x,p as S,rt as C,t as w,tt as T,ut as E,v as D,y as O}from"./orchestrator-B7MpomoG.js";import{t as k}from"./setConfig-CIdSs9rh.js";import{a as A,r as j,s as M}from"./toast-CtIuHprH.js";import{t as N}from"./shadow-claw-element-DIrv3P6A.js";import{t as P}from"./effect-xrx5qhzv.js";import{n as F,r as I}from"./prompt-api-BWe_j3Wg.js";import{i as L,n as R,r as z,t as B}from"./model-ranking-DUdrFOcC.js";const V=[{pattern:`gemma-3-1b-it-ONNX-GQA`,contextWindow:128e3},{pattern:`gemma-3-1b-it-ONNX`,contextWindow:128e3},{pattern:`Qwen3-0.6B-ONNX`,contextWindow:131072},{pattern:`Qwen3.5`,contextWindow:32768},{pattern:`Llama-3.2`,contextWindow:128e3},{pattern:`Phi-4`,contextWindow:128e3},{pattern:`Phi-3.5`,contextWindow:128e3},{pattern:`SmolLM`,contextWindow:8192},{pattern:`DeepSeek-R1`,contextWindow:128e3},{pattern:`LFM2`,contextWindow:32768},{pattern:`gpt-oss`,contextWindow:32768},{pattern:`gemma-4`,contextWindow:128e3},{pattern:`browser-built-in`,contextWindow:4096}];function H(e){let n=t.getModelInfo(e);if(n&&typeof n.contextWindow==`number`&&n.contextWindow>0)return n.contextWindow;for(let{pattern:t,contextWindow:n}of V)if(e.includes(t))return n;return null}function U(t,r,i){let a=r;t===`prompt_api`&&(r===`browser-built-in`||!r)&&(i?a=i:c()||(a=n));let o=e(a),s=typeof navigator>`u`?null:navigator,l=typeof s?.deviceMemory==`number`?s.deviceMemory:null,u=typeof s?.hardwareConcurrency==`number`?s.hardwareConcurrency:null;if(t===`prompt_api`||t===`transformers_js_browser`||t===`litert_lm_browser`||t===`ollama`){let e=H(a),t=o;l!==null&&(t=l>=32?Math.min(t,16384):l>=16?Math.min(t,8192):l>=8?Math.min(t,4096):Math.min(t,2048)),u!==null&&(u<=4?t=Math.min(t,2048):u>=16?t=Math.min(o,Math.max(t,8192)):u>=8&&(t=Math.min(o,Math.max(t,4096)))),/thinking|reasoning/i.test(a)&&(t=Math.min(t,4096)),t=Math.max(512,Math.min(t,o));let n=[];return e!==null&&n.push(`native context: ${e.toLocaleString()} tokens`),l!==null&&n.push(`${l} GB browser-reported memory`),u!==null&&n.push(`${u} CPU threads`),/thinking|reasoning/i.test(a)&&n.push(`reasoning model`),{recommended:t,detail:n.length>0?`Recommended for this device: ${t.toLocaleString()} tokens (${n.join(`, `)}). Model ceiling: ${o.toLocaleString()}.`:`Recommended for local inference: ${t.toLocaleString()} tokens. Model ceiling: ${o.toLocaleString()}.`}}return{recommended:o,detail:`Model-aware ceiling: ${o.toLocaleString()} tokens.`}}const W=new CSSStyleSheet;W.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -133,7 +133,7 @@ import{P as e,R as t,c as n,r,u as i}from"./config-Dqn5OMfC.js";import{r as a}fr
133
133
  background-color: var(--shadow-claw-accent-primary);
134
134
  color: var(--shadow-claw-on-primary);
135
135
  }
136
- `);const U=new DOMParser().parseFromString(`<template>
136
+ `);const G=new DOMParser().parseFromString(`<template>
137
137
  <div class="settings-section" data-setting="llm-provider-settings">
138
138
  <h3>🔑 LLM Provider</h3>
139
139
  <div class="form-group">
@@ -671,4 +671,4 @@ import{P as e,R as t,c as n,r,u as i}from"./config-Dqn5OMfC.js";import{r as a}fr
671
671
  </button>
672
672
  </div>
673
673
  </template>
674
- `,`text/html`),W=U.querySelector(`template`);let G=[];G=W?Array.from(W.content.children):Array.from(U.head.children).concat(Array.from(U.body.children));var K=G;const q=`shadow-claw-llm`;var J=class extends N{static styles=H;static template=K;db;lastLlamafileHelpKey;llamafileDiscoveredModelIds;llamafileModelLoadError;modelFetchToken;orchestrator;constructor(){super(),this.db=null,this.orchestrator=null,this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null,this.lastLlamafileHelpKey=``,this.modelFetchToken=0}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await a(),this.orchestrator=w.orchestrator,this.bindEventListeners(),this.setupEffects()}applyRecommendedMaxTokens(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=this.orchestrator.provider,r=this.orchestrator.model,i;n===`prompt_api`&&(i=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let a=V(n,r,i);t.value=String(a.recommended)}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-setting="provider-select"]`)?.addEventListener(`change`,()=>this.onProviderChange()),e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.addEventListener(`change`,e=>{let t=e.target;t?.value&&v(t.value).then(()=>this.updateMaxTokensUI()).catch(()=>{}),this.updateMaxTokensUI()}),e.querySelector(`[data-action="save-llm-provider"]`)?.addEventListener(`click`,()=>this.saveApiKey()),e.querySelector(`[data-action="save-model"]`)?.addEventListener(`click`,()=>this.saveModel()),e.querySelector(`[data-action="refresh-models"]`)?.addEventListener(`click`,()=>this.updateModelSelector()),e.querySelector(`[data-setting="model-select"]`)?.addEventListener(`change`,t=>{let n=e.querySelector(`[data-setting="custom-model-input"]`),r=t.target;n&&r&&(n.style.display=r.value===`__custom__`?`block`:`none`)}),e.querySelector(`[data-setting="streaming-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onStreamingToggle(e.target.checked)}),e.querySelector(`[data-setting="context-compression-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onContextCompressionToggle(e.target.checked)}),e.querySelector(`[data-action="save-max-iterations"]`)?.addEventListener(`click`,()=>this.saveMaxIterations()),e.querySelector(`[data-action="save-subagent-max-parallel"]`)?.addEventListener(`click`,()=>this.saveSubagentMaxParallel()),e.querySelector(`[data-action="save-subagent-workspace-mode"]`)?.addEventListener(`click`,()=>this.saveSubagentWorkspaceMode()),e.querySelector(`[data-action="save-rate-limit-settings"]`)?.addEventListener(`click`,()=>this.saveRateLimitSettings()),e.querySelector(`[data-action="save-max-tokens"]`)?.addEventListener(`click`,()=>this.saveMaxTokens()),e.querySelector(`[data-action="save-reasoning-effort"]`)?.addEventListener(`click`,()=>this.saveReasoningEffort()),e.querySelector(`[data-action="apply-recommended-max-tokens"]`)?.addEventListener(`click`,()=>this.applyRecommendedMaxTokens()),e.querySelector(`[data-action="save-llamafile-settings"]`)?.addEventListener(`click`,()=>this.saveLlamafileSettings()),e.querySelector(`[data-action="save-bedrock-settings"]`)?.addEventListener(`click`,()=>this.saveBedrockSettings()),e.querySelector(`[data-action="save-mesh-llm-settings"]`)?.addEventListener(`click`,()=>this.saveMeshLlmSettings()),e.querySelector(`[data-action="save-transformers-js-settings"]`)?.addEventListener(`click`,()=>this.saveTransformersJsSettings()),e.querySelector(`[data-action="save-builtin-ai-settings"]`)?.addEventListener(`click`,()=>this.saveBuiltinAiSettings()),e.querySelector(`[data-setting="llamafile-mode"]`)?.addEventListener(`change`,()=>{this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector()}))}renderBedrockSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator?f(this.orchestrator):null,n=e.querySelector(`[data-setting="bedrock-region-input"]`),r=e.querySelector(`[data-setting="bedrock-profile-input"]`),i=e.querySelector(`[data-setting="bedrock-auth-mode"]`);n&&(n.value=t?.region||``),r&&(r.value=t?.profile||``),i&&(i.value=t?.authMode||`provider_chain`)}renderLlamafileSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=d(this.orchestrator);if(!t)return;let n=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),r=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),i=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),a=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);n&&(n.value=t.mode),r&&(r.value=t.host),i&&(i.value=String(t.port)),a&&(a.checked=t.offline)}renderMeshLlmSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator.getMeshLlmSettings?.(),n=e.querySelector(`[data-setting="mesh-llm-host-input"]`);n&&(n.value=t?.host||``)}setupEffects(){P(()=>{w.ready&&(this.orchestrator=w.orchestrator,this.render())})}updateBedrockSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="bedrock-settings"]`);n&&(n.style.display=e===`bedrock_proxy`?`block`:`none`)}updateLlamafileModelSectionVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-settings"]`);if(!t)return;let n=d(this.orchestrator);t.style.display=n?.mode===`server`?`none`:`block`}updateLlamafileModeVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-server-only"]`),n=e.querySelector(`[data-setting="llamafile-cli-only"]`);if(!t&&!n)return;let r=this.orchestrator.provider===`llamafile`&&d(this.orchestrator)?.mode===`server`;t&&(t.style.display=r?`block`:`none`),n&&(n.style.display=r?`none`:`block`)}updateLlamafileSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="llamafile-settings"]`);n&&(n.style.display=e===`llamafile`?`block`:`none`)}updateMaxTokensUI(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`),n=e.querySelector(`[data-setting="max-tokens-helper"]`),r=this.orchestrator.provider,i=this.orchestrator.model,a;r===`prompt_api`&&(a=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let o=this.orchestrator.maxTokens,s=V(r,i,a);t&&(t.value=String(o),t.removeAttribute(`max`)),n&&(n.textContent=`${s.detail} Current value: ${o.toLocaleString()}.`)}updateMeshLlmSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="mesh-llm-settings"]`);n&&(n.style.display=e===`mesh-llm`?`block`:`none`)}updateModelProviderHelperText(){let e=this.shadowRoot;if(!e||!this.orchestrator)return;let t=e.querySelector(`[data-setting="model-provider-helper"]`);if(!t)return;let n=this.orchestrator.provider,r=d(this.orchestrator);n!==`llamafile`||r?.mode===`server`?(t.hidden=!0,t.textContent=``):(t.hidden=!1,t.textContent=this.llamafileDiscoveredModelIds.length>0?`Discovered ${this.llamafileDiscoveredModelIds.length} *.llamafile model${this.llamafileDiscoveredModelIds.length===1?``:`s`} in ${E}. Choose Custom Model ID to target a file name that is not listed yet.`:this.llamafileModelLoadError?`Could not load llamafile models from ${E}. You can still enter a custom model id, but the file must exist there.`:`ShadowClaw looks for *.llamafile binaries in ${E}.`)}updateModelSelector(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=l(),n=this.orchestrator.provider,r=t.find(e=>e.id===n),i=++this.modelFetchToken;n!==`llamafile`&&(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null);let a=!1;if(n===`llamafile`&&d(this.orchestrator)?.mode===`server`){let t=e.querySelector(`[data-setting="model-select"]`);t&&(s(t,`<option value="">Model is served by local llamafile server</option>`),t.disabled=!0),a=!0}this.updateModelProviderHelperText();let o=e.querySelector(`[data-setting="prompt-api-fallback-group"]`);if(o){let e=I();o.style.display=n===`prompt_api`&&!e?`block`:`none`,F().then(e=>{this.orchestrator?.provider===`prompt_api`&&(o.style.display=e?`none`:`block`)})}let c=e.querySelector(`[data-setting="model-select"]`),p=e.querySelector(`[data-setting="custom-model-input"]`),m=this.orchestrator.model,h=/* @__PURE__ */ new Set([`transformers_js_local`,`transformers_js_browser`,`ollama`,`llamafile`,`prompt_api`]),g=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/\"/g,`&quot;`).replace(/'/g,`&#39;`),_=e=>h.has(n)||n===`mesh-llm`?!0:typeof e==`string`?!1:Array.isArray(e.providers)?e.providers.some(e=>e.provider===`hf-inference`||!e.pricing||parseFloat(String(e.pricing.input||e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.output||e.pricing.completion||0))===0):e.pricing?parseFloat(String(e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.completion||0))===0:!1,v=e=>{let t=typeof e==`string`?e:e.id||e.name;return h.has(n)?L(t):typeof e==`string`?!1:e.supports_tools===!0||e.supportsTools===!0?!0:Array.isArray(e.providers)?e.providers.some(e=>e.supports_tools===!0):Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`):!1},y=e=>{let t=typeof e==`string`?e:e.id||e.name;if(h.has(n))return L(t)?` 🛠️`:` ❔🛠️`;if(typeof e==`string`)return` ❔🛠️`;if(e.supports_tools===!0||e.supportsTools===!0)return` 🛠️`;if(e.supports_tools===!1||e.supportsTools===!1)return` 🚫🛠️`;if(Array.isArray(e.providers)){let t=e.providers.some(e=>e.supports_tools===!0),n=e.providers.some(e=>e.supports_tools===!1);if(t)return` 🛠️`;if(n)return` 🚫🛠️`}return Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`)?` 🛠️`:` 🚫🛠️`:` ❔🛠️`},b=e=>typeof e==`string`?0:typeof e.context_length==`number`?e.context_length:typeof e.context_window==`number`?e.context_window:Array.isArray(e.providers)?Math.max(...e.providers.map(e=>e.context_length||0),0):0,x=e=>{if(!c||!p)return;if(!Array.isArray(e)||e.length===0){let e=this.orchestrator?.model||``,t=n===`llamafile`?`No *.llamafile models found in ${E}`:`No models available`;s(c,[`<option value="" ${e?``:`selected`}>${g(t)}</option>`,`<option value="__custom__">-- Custom Model ID --</option>`].join(``)),e?(c.value=`__custom__`,p.value=e,p.style.display=`block`):(c.value=``,p.value=``,p.style.display=`none`),n===`llamafile`&&!e&&this.showLlamafileHelpDialog(this.llamafileModelLoadError?`Failed to load *.llamafile models: ${this.llamafileModelLoadError}`:`No *.llamafile files were found in ${E}.`),this.updateModelProviderHelperText();return}let t=[],r=[];for(let n of e)n&&(typeof n==`string`||n.id)&&(_(n)?t.push(n):r.push(n));let i=(e,t)=>{if(h.has(n)){let r=typeof e==`string`?e:e.id||e.name,i=typeof t==`string`?t:t.id||t.name;return R({id:r,supportsTools:v(e),contextLength:b(e)},{id:i,supportsTools:v(t),contextLength:b(t)},n)}let r=v(e),i=v(t);if(r!==i)return i?1:-1;let a=b(e),o=b(t);if(a!==o)return o-a;let s=typeof e==`string`?e:e.id||e.name,c=typeof t==`string`?t:t.id||t.name;return s.localeCompare(c)};t.sort(i),r.sort(i);let a=e=>{let t=typeof e==`string`?e:e.id||e.name,n=typeof e==`string`?t:typeof e.displayName==`string`&&e.displayName.trim()?e.displayName.trim():typeof e.name==`string`&&e.name.trim()?e.name.trim():t,r=y(e),i=b(e),a=``;i>=1e6?a=` (${(i/1e6).toFixed(1)}M)`:i>=1e3?a=` (${Math.round(i/1024)}k)`:i>0&&(a=` (${i})`);let o=n===t?t:`${n} - ${t}`;return`<option value="${g(t)}">${g(o)}${a}${r}</option>`},o=``;if(h.has(n)){let e=[...t,...r].sort(i);e.length>0&&(o+=`<optgroup label="${n===`prompt_api`?`Built-in`:`Local / Self-hosted`}">`,o+=e.map(a).join(``),o+=`</optgroup>`)}else t.length>0&&(o+=`<optgroup label="Free / Included">`,o+=t.map(a).join(``),o+=`</optgroup>`),r.length>0&&(o+=`<optgroup label="Paid / Pro">`,o+=r.map(a).join(``),o+=`</optgroup>`);o+=`<option value="__custom__">-- Custom Model ID --</option>`,s(c,o),e.map(e=>typeof e==`string`?e:e.id||e.name).includes(m)?(c.value=m,p.style.display=`none`):(c.value=`__custom__`,p.value=m||``,p.style.display=`block`),this.updateModelProviderHelperText()};if(!a){if(r?.modelsUrl&&c){let e=i;s(c,`<option>Loading models…</option>`),c.disabled=!0;let t={...r.headers};if(n===`llamafile`){let e=d(this.orchestrator);e&&(t[`x-llamafile-mode`]=e.mode,t[`x-llamafile-host`]=e.host,t[`x-llamafile-port`]=String(e.port),t[`x-llamafile-offline`]=e.offline?`true`:`false`)}else if(n===`bedrock_proxy`){let e=this.orchestrator?f(this.orchestrator):null;e?.region&&(t[`x-bedrock-region`]=e.region),e?.profile&&(t[`x-bedrock-profile`]=e.profile),e?.authMode&&(t[`x-bedrock-auth-mode`]=e.authMode)}u(this.orchestrator).then(i=>{if(i&&r.apiKeyHeader){let e=(r.apiKeyHeaderFormat||`{key}`).replace(`{key}`,i);t[r.apiKeyHeader]=e}r.modelsUrl&&fetch(r.modelsUrl,{headers:t}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(t=>{if(e!==this.modelFetchToken||this.orchestrator?.provider!==n)return;let i=[];if(Array.isArray(t))i=t;else if(t&&typeof t==`object`){if(i=t.models||t.data||[],i.length===0){for(let e in t)if(Array.isArray(t[e])&&t[e].length>0){i=t[e];break}}i.length===0&&t.id&&(i=[t])}if(Array.isArray(r.models)){let e=new Set(i.map(e=>typeof e==`string`?e:e.id||e.name));i=[...r.models.filter(t=>{let n=typeof t==`string`?t:t.id||t.name;return!e.has(n)}),...i]}n===`llamafile`&&(this.llamafileModelLoadError=null,this.llamafileDiscoveredModelIds=i.map(e=>typeof e==`string`?e:String(e?.id||e?.name||``)).filter(Boolean)),c.disabled=!1,x(i)}).catch(t=>{if(e!==this.modelFetchToken||this.orchestrator?.provider!==n)return;console.error(`[ShadowClaw] Failed to load models from`,r.modelsUrl,t);let i=t instanceof Error?t.message:String(t);n===`llamafile`?(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=i,c.disabled=!1,x([])):(s(c,`<option>Failed to load models</option>`),r?.models?(console.warn(`Falling back to statically configured models due to fetch failure.`),c.disabled=!1,x(r.models)):j(`Could not reach the model server — or proxy configuration is wrong`,5e3))})})}else r?.models&&c?(c.disabled=!1,x(r.models)):c&&(c.disabled=!1,x([]))}let S=e.querySelector(`[data-setting="api-key-helper"]`),C=e.querySelector(`[data-setting="provider-select"]`);if(S&&C){let e=C.selectedOptions[0]?.text||`Provider`,t=r?.requiresApiKey!==!1;S.textContent=n===`llamafile`?`Runs local .llamafile binaries through the local proxy. No API key required.`:t?`Enter your ${e} API key. It is encrypted and stored locally.`:`This provider does not require an API key.`}let w=e.querySelector(`[data-setting="api-key-input"]`);if(w){let e=r?.requiresApiKey===!1;w.disabled=e,w.placeholder=e?`No API key required`:`sk-...`}}updateTransformersJsSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="transformers-js-settings"]`);n&&(n.style.display=e===`transformers_js_browser`?`block`:`none`)}async onContextCompressionToggle(e){if(this.orchestrator&&this.db)try{await S(this.orchestrator,this.db,e),A(e?`Context compression enabled`:`Context compression disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving context compression setting: `+t,6e3)}}async onProviderChange(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="provider-select"]`);if(!t)return;let n=t.value,r=this.orchestrator.provider;if(n!==r)try{await x(this.orchestrator,this.db,n,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>u(this.orchestrator)}),this.updateModelSelector(),this.updateMaxTokensUI(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateBedrockSettingsVisibility(n),this.updateBedrockSettingsVisibility(n),this.updateMeshLlmSettingsVisibility(n),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings();let e=t.selectedOptions[0]?.text||n;A(`Switched to ${e}`,3e3)}catch(e){let n=e instanceof Error?e.message:String(e);j(`Error switching provider: `+n,6e3),t.value=r}}async onStreamingToggle(e){if(this.orchestrator&&this.db)try{await m(this.orchestrator,this.db,e),A(e?`Streaming enabled`:`Streaming disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving streaming setting: `+t,6e3)}}async render(){let e=this.shadowRoot;if(!e||!this.orchestrator||!this.db)return;this.bindEventListeners();let t=l(),n=this.orchestrator.provider,a=e.querySelector(`[data-setting="provider-select"]`);a&&s(a,t.map(e=>`<option value="${e.id}" ${e.id===n?`selected`:``}>${e.name}</option>`).join(``)),this.updateModelSelector(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelProviderHelperText(),this.updateBedrockSettingsVisibility(n),this.renderBedrockSettings(),this.updateMeshLlmSettingsVisibility(n),this.renderMeshLlmSettings(),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings(),this.renderBuiltinAiSettings();let c=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);c&&(c.value=await o(this.db,r.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,this.updateMaxTokensUI(),c.value&&v(c.value).then(()=>{this.updateMaxTokensUI()}).catch(()=>{}));let u=e.querySelector(`[data-setting="prompt-api-device-select"]`);u&&(u.value=await o(this.db,r.PROMPT_API_BACKEND)||`auto`);let d=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);d&&(d.value=await o(this.db,r.PROMPT_API_DTYPE_STRATEGY)||`auto`);let f=e.querySelector(`[data-setting="streaming-toggle"]`);f&&(f.checked=this.orchestrator.streamingEnabled);let p=e.querySelector(`[data-setting="context-compression-toggle"]`);p&&(p.checked=this.orchestrator.contextCompressionEnabled);let m=e.querySelector(`[data-setting="reasoning-effort-select"]`);m&&(m.value=this.orchestrator.reasoningEffort||`none`);let h=e.querySelector(`[data-setting="max-iterations-input"]`);h&&this.orchestrator&&(h.value=String(this.orchestrator.maxIterations));let g=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(g){let e=await o(this.db,r.SUBAGENT_MAX_PARALLEL),t=Number(e);g.value=String(Number.isFinite(t)&&t>0?t:5)}let _=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(_){let e=await o(this.db,r.SUBAGENT_WORKSPACE_MODE);_.value=e===`parent`||e===`isolated`||e===`automatic`?e:i}let y=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`);y&&this.orchestrator&&(y.value=String(this.orchestrator.rateLimitCallsPerMinute||0));let b=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);b&&this.orchestrator&&(b.checked=this.orchestrator.rateLimitAutoAdapt!==!1),this.updateMaxTokensUI()}async renderBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`),i=await o(this.db,r.COMPACTION_ENGINE_PREFERENCE),a=await o(this.db,r.BUILTIN_AI_TOOLS_BACKEND);t&&(t.value=i||`auto`),n&&(n.value=a||`active_provider`)}async renderTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-Dqn5OMfC.js`).then(e=>e.k),r=await t(this.db,n.TRANSFORMERS_JS_BACKEND)||`auto`,i=await t(this.db,n.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`,a=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`);a&&(a.value=r);let o=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`);o&&(o.value=i)}async requestAppDialog(e){let t=document.querySelector(`shadow-claw`);return t&&typeof t.requestDialog==`function`?await t.requestDialog(e):!1}async saveApiKey(){if(!this.orchestrator||!this.db){j(`Orchestrator not initialized`,5e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="api-key-input"]`),n=e.querySelector(`[data-setting="provider-select"]`);if(!t||!n)return;let r=t.value.trim(),i=n.value;if(l().find(e=>e.id===i)?.requiresApiKey===!1)try{await x(this.orchestrator,this.db,i,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>u(this.orchestrator)}),t.value=``,A(`Provider saved (no API key required)`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving provider: `+t,6e3)}else if(!r)M(`Please enter an API key`,3e3);else try{await this.orchestrator.setApiKey(this.db,r),t.value=``,A(`API key and provider saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving API key: `+t,6e3)}}async saveBedrockSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="bedrock-region-input"]`),n=e.querySelector(`[data-setting="bedrock-profile-input"]`),r=e.querySelector(`[data-setting="bedrock-auth-mode"]`);if(!t||!n)return;let i=t.value.trim(),a=n.value.trim(),o=r?.value||`provider_chain`;if(i&&!a||!i&&a)M(`Enter both Bedrock region and profile (or leave both blank to rely on environment variables)`,4e3);else try{await g(this.orchestrator,this.db,{region:i,profile:a,authMode:o}),A(`Bedrock fallback settings saved`,3e3),this.orchestrator.provider===`bedrock_proxy`&&this.updateModelSelector()}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Bedrock fallback settings: `+t,6e3)}}async saveBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`);try{t&&await k(this.db,r.COMPACTION_ENGINE_PREFERENCE,t.value),n&&await k(this.db,r.BUILTIN_AI_TOOLS_BACKEND,n.value),A(`Built-in AI settings saved successfully`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Built-in AI settings: `+t,5e3)}}async saveLlamafileSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),n=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),r=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),i=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);if(!t||!n||!r||!i)return;let a=t.value===`cli`?`cli`:`server`,o=n.value.trim(),s=parseInt(r.value,10);if(!o)M(`Please enter a host`,3e3);else if(!Number.isFinite(s)||s<1||s>65535)M(`Please enter a valid port (1-65535)`,3e3);else try{if(await T(this.orchestrator,this.db,{mode:a,host:o,port:s,offline:i.checked}),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector(),this.orchestrator.provider===`llamafile`){let e=await w.restartCurrentRequest();A(e?`Llamafile settings saved, request restarted`:`Llamafile settings saved`,3e3);return}A(`Llamafile settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving llamafile settings: `+t,6e3)}}async saveMaxIterations(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-iterations-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await y(this.orchestrator,this.db,n),A(`Max iterations saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving max iterations: `+t,6e3)}}async saveMaxTokens(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await _(this.orchestrator,this.db,n),this.updateMaxTokensUI(),A(`Max tokens saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving max tokens: `+t,6e3)}}async saveMeshLlmSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="mesh-llm-host-input"]`);if(!t)return;let n=t.value.trim();try{this.orchestrator&&(await b(this.orchestrator,this.db,{host:n}),A(`Mesh LLM settings saved`,3e3),this.orchestrator.provider===`mesh-llm`&&this.updateModelSelector())}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Mesh LLM settings: `+t,6e3)}}async saveModel(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-select"]`),n=e.querySelector(`[data-setting="custom-model-input"]`);if(!t||!n)return;let i=t.value;if(i===`__custom__`&&(i=n.value.trim()),this.orchestrator.provider===`llamafile`&&d(this.orchestrator).mode===`cli`&&!i)await this.showLlamafileHelpDialog(`Select a discovered *.llamafile model or enter a custom model id that matches a file in the ${E} folder.`);else{if(this.orchestrator.provider===`prompt_api`){let t=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);if(t)try{await k(this.db,r.PROMPT_API_FALLBACK_MODEL,t.value)}catch(e){console.warn(`Error saving prompt api fallback model`,e)}let n=e.querySelector(`[data-setting="prompt-api-device-select"]`);if(n)try{await k(this.db,r.PROMPT_API_BACKEND,n.value)}catch(e){console.warn(`Error saving prompt api backend`,e)}let i=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);if(i)try{await k(this.db,r.PROMPT_API_DTYPE_STRATEGY,i.value)}catch(e){console.warn(`Error saving prompt api dtype strategy`,e)}}try{if(await C(this.orchestrator,this.db,i),this.updateMaxTokensUI(),this.orchestrator.provider===`llamafile`){let e=await w.restartCurrentRequest();A(e?`Model saved, request restarted`:`Model saved`,3e3);return}A(`Model saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving model: `+t,6e3)}}}async saveRateLimitSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`),n=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);if(!t||!n)return;let r=parseInt(t.value,10);if(!Number.isFinite(r)||r<0)M(`Please enter a valid non-negative calls-per-minute value`,3e3);else try{await D(this.orchestrator,this.db,r),await p(this.orchestrator,this.db,n.checked),A(`Rate limit settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving rate limit settings: `+t,6e3)}}async saveReasoningEffort(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="reasoning-effort-select"]`);if(t)try{await O(this.orchestrator,this.db,t.value||`none`),A(`Reasoning effort saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving reasoning effort: `+t,6e3)}}async saveSubagentMaxParallel(){if(!this.db){j(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await k(this.db,r.SUBAGENT_MAX_PARALLEL,String(n)),A(`Subagent limit saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving subagent limit: `+t,6e3)}}async saveSubagentWorkspaceMode(){if(!this.db){j(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(!t)return;let n=t.value;if(n!==`automatic`&&n!==`parent`&&n!==`isolated`)M(`Please select a valid subagent workspace mode`,3e3);else try{await k(this.db,r.SUBAGENT_WORKSPACE_MODE,n),A(`Subagent workspace mode saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving subagent workspace mode: `+t,6e3)}}async saveTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`)?.value||`auto`,n=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`)?.value||`auto`,{setConfig:r}=await import(`./setConfig-CIdSs9rh.js`).then(e=>e.n),{CONFIG_KEYS:i}=await import(`./config-Dqn5OMfC.js`).then(e=>e.k);await r(this.db,i.TRANSFORMERS_JS_BACKEND,t),await r(this.db,i.TRANSFORMERS_JS_DTYPE_STRATEGY,n),A(`Transformers.js settings saved.`)}async showLlamafileHelpDialog(e){let t=`${e||``}|${this.orchestrator?.model||``}`;this.lastLlamafileHelpKey!==t&&(this.lastLlamafileHelpKey=t,await this.requestAppDialog(h(e)))}};customElements.get(q)||customElements.define(q,J);export{J as ShadowClawLlm};
674
+ `,`text/html`),K=G.querySelector(`template`);let q=[];q=K?Array.from(K.content.children):Array.from(G.head.children).concat(Array.from(G.body.children));var J=q;const Y=`shadow-claw-llm`;var X=class extends N{static styles=W;static template=J;db;lastLlamafileHelpKey;llamafileDiscoveredModelIds;llamafileModelLoadError;modelFetchToken;orchestrator;constructor(){super(),this.db=null,this.orchestrator=null,this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null,this.lastLlamafileHelpKey=``,this.modelFetchToken=0}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await a(),this.orchestrator=w.orchestrator,this.bindEventListeners(),this.setupEffects()}applyRecommendedMaxTokens(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=this.orchestrator.provider,r=this.orchestrator.model,i;n===`prompt_api`&&(i=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let a=U(n,r,i);t.value=String(a.recommended)}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-setting="provider-select"]`)?.addEventListener(`change`,()=>this.onProviderChange()),e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.addEventListener(`change`,e=>{let t=e.target;t?.value&&v(t.value).then(()=>this.updateMaxTokensUI()).catch(()=>{}),this.updateMaxTokensUI()}),e.querySelector(`[data-action="save-llm-provider"]`)?.addEventListener(`click`,()=>this.saveApiKey()),e.querySelector(`[data-action="save-model"]`)?.addEventListener(`click`,()=>this.saveModel()),e.querySelector(`[data-action="refresh-models"]`)?.addEventListener(`click`,()=>this.updateModelSelector()),e.querySelector(`[data-setting="model-select"]`)?.addEventListener(`change`,t=>{let n=e.querySelector(`[data-setting="custom-model-input"]`),r=t.target;n&&r&&(n.style.display=r.value===`__custom__`?`block`:`none`)}),e.querySelector(`[data-setting="streaming-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onStreamingToggle(e.target.checked)}),e.querySelector(`[data-setting="context-compression-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onContextCompressionToggle(e.target.checked)}),e.querySelector(`[data-action="save-max-iterations"]`)?.addEventListener(`click`,()=>this.saveMaxIterations()),e.querySelector(`[data-action="save-subagent-max-parallel"]`)?.addEventListener(`click`,()=>this.saveSubagentMaxParallel()),e.querySelector(`[data-action="save-subagent-workspace-mode"]`)?.addEventListener(`click`,()=>this.saveSubagentWorkspaceMode()),e.querySelector(`[data-action="save-rate-limit-settings"]`)?.addEventListener(`click`,()=>this.saveRateLimitSettings()),e.querySelector(`[data-action="save-max-tokens"]`)?.addEventListener(`click`,()=>this.saveMaxTokens()),e.querySelector(`[data-action="save-reasoning-effort"]`)?.addEventListener(`click`,()=>this.saveReasoningEffort()),e.querySelector(`[data-action="apply-recommended-max-tokens"]`)?.addEventListener(`click`,()=>this.applyRecommendedMaxTokens()),e.querySelector(`[data-action="save-llamafile-settings"]`)?.addEventListener(`click`,()=>this.saveLlamafileSettings()),e.querySelector(`[data-action="save-bedrock-settings"]`)?.addEventListener(`click`,()=>this.saveBedrockSettings()),e.querySelector(`[data-action="save-mesh-llm-settings"]`)?.addEventListener(`click`,()=>this.saveMeshLlmSettings()),e.querySelector(`[data-action="save-transformers-js-settings"]`)?.addEventListener(`click`,()=>this.saveTransformersJsSettings()),e.querySelector(`[data-action="save-builtin-ai-settings"]`)?.addEventListener(`click`,()=>this.saveBuiltinAiSettings()),e.querySelector(`[data-setting="llamafile-mode"]`)?.addEventListener(`change`,()=>{this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector()}))}renderBedrockSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator?f(this.orchestrator):null,n=e.querySelector(`[data-setting="bedrock-region-input"]`),r=e.querySelector(`[data-setting="bedrock-profile-input"]`),i=e.querySelector(`[data-setting="bedrock-auth-mode"]`);n&&(n.value=t?.region||``),r&&(r.value=t?.profile||``),i&&(i.value=t?.authMode||`provider_chain`)}renderLlamafileSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=d(this.orchestrator);if(!t)return;let n=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),r=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),i=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),a=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);n&&(n.value=t.mode),r&&(r.value=t.host),i&&(i.value=String(t.port)),a&&(a.checked=t.offline)}renderMeshLlmSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator.getMeshLlmSettings?.(),n=e.querySelector(`[data-setting="mesh-llm-host-input"]`);n&&(n.value=t?.host||``)}setupEffects(){P(()=>{w.ready&&(this.orchestrator=w.orchestrator,this.render())})}updateBedrockSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="bedrock-settings"]`);n&&(n.style.display=e===`bedrock_proxy`?`block`:`none`)}updateLlamafileModelSectionVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-settings"]`);if(!t)return;let n=d(this.orchestrator);t.style.display=n?.mode===`server`?`none`:`block`}updateLlamafileModeVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-server-only"]`),n=e.querySelector(`[data-setting="llamafile-cli-only"]`);if(!t&&!n)return;let r=this.orchestrator.provider===`llamafile`&&d(this.orchestrator)?.mode===`server`;t&&(t.style.display=r?`block`:`none`),n&&(n.style.display=r?`none`:`block`)}updateLlamafileSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="llamafile-settings"]`);n&&(n.style.display=e===`llamafile`?`block`:`none`)}updateMaxTokensUI(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`),n=e.querySelector(`[data-setting="max-tokens-helper"]`),r=this.orchestrator.provider,i=this.orchestrator.model,a;r===`prompt_api`&&(a=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let o=this.orchestrator.maxTokens,s=U(r,i,a);t&&(t.value=String(o),t.removeAttribute(`max`)),n&&(n.textContent=`${s.detail} Current value: ${o.toLocaleString()}.`)}updateMeshLlmSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="mesh-llm-settings"]`);n&&(n.style.display=e===`mesh-llm`?`block`:`none`)}updateModelProviderHelperText(){let e=this.shadowRoot;if(!e||!this.orchestrator)return;let t=e.querySelector(`[data-setting="model-provider-helper"]`);if(!t)return;let n=this.orchestrator.provider,r=d(this.orchestrator);n!==`llamafile`||r?.mode===`server`?(t.hidden=!0,t.textContent=``):(t.hidden=!1,t.textContent=this.llamafileDiscoveredModelIds.length>0?`Discovered ${this.llamafileDiscoveredModelIds.length} *.llamafile model${this.llamafileDiscoveredModelIds.length===1?``:`s`} in ${E}. Choose Custom Model ID to target a file name that is not listed yet.`:this.llamafileModelLoadError?`Could not load llamafile models from ${E}. You can still enter a custom model id, but the file must exist there.`:`ShadowClaw looks for *.llamafile binaries in ${E}.`)}updateModelSelector(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=l(),n=this.orchestrator.provider,r=t.find(e=>e.id===n),i=++this.modelFetchToken;n!==`llamafile`&&(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null);let a=!1;if(n===`llamafile`&&d(this.orchestrator)?.mode===`server`){let t=e.querySelector(`[data-setting="model-select"]`);t&&(s(t,`<option value="">Model is served by local llamafile server</option>`),t.disabled=!0),a=!0}this.updateModelProviderHelperText();let o=e.querySelector(`[data-setting="prompt-api-fallback-group"]`);if(o){let e=I();o.style.display=n===`prompt_api`&&!e?`block`:`none`,F().then(e=>{this.orchestrator?.provider===`prompt_api`&&(o.style.display=e?`none`:`block`)})}let c=e.querySelector(`[data-setting="model-select"]`),p=e.querySelector(`[data-setting="custom-model-input"]`),m=this.orchestrator.model,h=/* @__PURE__ */ new Set([`transformers_js_local`,`transformers_js_browser`,`ollama`,`llamafile`,`prompt_api`]),g=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/\"/g,`&quot;`).replace(/'/g,`&#39;`),_=e=>h.has(n)||n===`mesh-llm`?!0:typeof e==`string`?!1:Array.isArray(e.providers)?e.providers.some(e=>e.provider===`hf-inference`||!e.pricing||parseFloat(String(e.pricing.input||e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.output||e.pricing.completion||0))===0):e.pricing?parseFloat(String(e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.completion||0))===0:!1,v=e=>{let t=typeof e==`string`?e:e.id||e.name;return h.has(n)?z(t):typeof e==`string`?!1:e.supports_tools===!0||e.supportsTools===!0?!0:Array.isArray(e.providers)?e.providers.some(e=>e.supports_tools===!0):Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`):!1},y=e=>{let t=typeof e==`string`?e:e.id||e.name;if(h.has(n))return z(t)?` 🛠️`:` ❔🛠️`;if(typeof e==`string`)return` ❔🛠️`;if(e.supports_tools===!0||e.supportsTools===!0)return` 🛠️`;if(e.supports_tools===!1||e.supportsTools===!1)return` 🚫🛠️`;if(Array.isArray(e.providers)){let t=e.providers.some(e=>e.supports_tools===!0),n=e.providers.some(e=>e.supports_tools===!1);if(t)return` 🛠️`;if(n)return` 🚫🛠️`}return Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`)?` 🛠️`:` 🚫🛠️`:` ❔🛠️`},b=e=>typeof e==`string`?0:typeof e.context_length==`number`?e.context_length:typeof e.context_window==`number`?e.context_window:Array.isArray(e.providers)?Math.max(...e.providers.map(e=>e.context_length||0),0):0,x=e=>{if(!c||!p)return;if(!Array.isArray(e)||e.length===0){let e=this.orchestrator?.model||``,t=n===`llamafile`?`No *.llamafile models found in ${E}`:`No models available`;s(c,[`<option value="" ${e?``:`selected`}>${g(t)}</option>`,`<option value="__custom__">-- Custom Model ID --</option>`].join(``)),e?(c.value=`__custom__`,p.value=e,p.style.display=`block`):(c.value=``,p.value=``,p.style.display=`none`),n===`llamafile`&&!e&&this.showLlamafileHelpDialog(this.llamafileModelLoadError?`Failed to load *.llamafile models: ${this.llamafileModelLoadError}`:`No *.llamafile files were found in ${E}.`),this.updateModelProviderHelperText();return}let t=[],r=[];for(let n of e)n&&(typeof n==`string`||n.id)&&(_(n)?t.push(n):r.push(n));let i=(e,t)=>{if(h.has(n)){let r=typeof e==`string`?e:e.id||e.name,i=typeof t==`string`?t:t.id||t.name;return B({id:r,supportsTools:v(e),contextLength:b(e)},{id:i,supportsTools:v(t),contextLength:b(t)},n)}let r=v(e),i=v(t);if(r!==i)return i?1:-1;let a=b(e),o=b(t);if(a!==o)return o-a;let s=typeof e==`string`?e:e.id||e.name,c=typeof t==`string`?t:t.id||t.name;return s.localeCompare(c)};t.sort(i),r.sort(i);let a=e=>{let t=typeof e==`string`?e:e.id||e.name,n=typeof e==`string`?t:typeof e.displayName==`string`&&e.displayName.trim()?e.displayName.trim():typeof e.name==`string`&&e.name.trim()?e.name.trim():t,r=y(e),i=b(e),a=``;i>=1e6?a=` (${(i/1e6).toFixed(1)}M)`:i>=1e3?a=` (${Math.round(i/1024)}k)`:i>0&&(a=` (${i})`);let o=n===t?t:`${n} - ${t}`;return`<option value="${g(t)}">${g(o)}${a}${r}</option>`},o=``;if(n===`transformers_js_browser`)o=L(m,e,{includeCustom:!0});else if(h.has(n)){let e=[...t,...r].sort(i);e.length>0&&(o+=`<optgroup label="${n===`prompt_api`?`Built-in`:`Local / Self-hosted`}">`,o+=e.map(a).join(``),o+=`</optgroup>`),o+=`<option value="__custom__">-- Custom Model ID --</option>`}else t.length>0&&(o+=`<optgroup label="Free / Included">`,o+=t.map(a).join(``),o+=`</optgroup>`),r.length>0&&(o+=`<optgroup label="Paid / Pro">`,o+=r.map(a).join(``),o+=`</optgroup>`),o+=`<option value="__custom__">-- Custom Model ID --</option>`;s(c,o),(n===`transformers_js_browser`?R(e):e.map(e=>typeof e==`string`?e:e.id||e.name)).includes(m)?(c.value=m,p.style.display=`none`):(c.value=`__custom__`,p.value=m||``,p.style.display=`block`),this.updateModelProviderHelperText()};if(!a){if(r?.modelsUrl&&c){let e=i;s(c,`<option>Loading models…</option>`),c.disabled=!0;let t={...r.headers};if(n===`llamafile`){let e=d(this.orchestrator);e&&(t[`x-llamafile-mode`]=e.mode,t[`x-llamafile-host`]=e.host,t[`x-llamafile-port`]=String(e.port),t[`x-llamafile-offline`]=e.offline?`true`:`false`)}else if(n===`bedrock_proxy`){let e=this.orchestrator?f(this.orchestrator):null;e?.region&&(t[`x-bedrock-region`]=e.region),e?.profile&&(t[`x-bedrock-profile`]=e.profile),e?.authMode&&(t[`x-bedrock-auth-mode`]=e.authMode)}u(this.orchestrator).then(i=>{if(i&&r.apiKeyHeader){let e=(r.apiKeyHeaderFormat||`{key}`).replace(`{key}`,i);t[r.apiKeyHeader]=e}r.modelsUrl&&fetch(r.modelsUrl,{headers:t}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(t=>{if(e!==this.modelFetchToken||this.orchestrator?.provider!==n)return;let i=[];if(Array.isArray(t))i=t;else if(t&&typeof t==`object`){if(i=t.models||t.data||[],i.length===0){for(let e in t)if(Array.isArray(t[e])&&t[e].length>0){i=t[e];break}}i.length===0&&t.id&&(i=[t])}if(Array.isArray(r.models)){let e=new Set(i.map(e=>typeof e==`string`?e:e.id||e.name));i=[...r.models.filter(t=>{let n=typeof t==`string`?t:t.id||t.name;return!e.has(n)}),...i]}n===`llamafile`&&(this.llamafileModelLoadError=null,this.llamafileDiscoveredModelIds=i.map(e=>typeof e==`string`?e:String(e?.id||e?.name||``)).filter(Boolean)),c.disabled=!1,x(i)}).catch(t=>{if(e!==this.modelFetchToken||this.orchestrator?.provider!==n)return;console.error(`[ShadowClaw] Failed to load models from`,r.modelsUrl,t);let i=t instanceof Error?t.message:String(t);n===`llamafile`?(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=i,c.disabled=!1,x([])):(s(c,`<option>Failed to load models</option>`),r?.models?(console.warn(`Falling back to statically configured models due to fetch failure.`),c.disabled=!1,x(r.models)):j(`Could not reach the model server — or proxy configuration is wrong`,5e3))})})}else r?.models&&c?(c.disabled=!1,x(r.models)):c&&(c.disabled=!1,x([]))}let S=e.querySelector(`[data-setting="api-key-helper"]`),C=e.querySelector(`[data-setting="provider-select"]`);if(S&&C){let e=C.selectedOptions[0]?.text||`Provider`,t=r?.requiresApiKey!==!1;S.textContent=n===`llamafile`?`Runs local .llamafile binaries through the local proxy. No API key required.`:t?`Enter your ${e} API key. It is encrypted and stored locally.`:`This provider does not require an API key.`}let w=e.querySelector(`[data-setting="api-key-input"]`);if(w){let e=r?.requiresApiKey===!1;w.disabled=e,w.placeholder=e?`No API key required`:`sk-...`}}updateTransformersJsSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="transformers-js-settings"]`);n&&(n.style.display=e===`transformers_js_browser`?`block`:`none`)}async onContextCompressionToggle(e){if(this.orchestrator&&this.db)try{await S(this.orchestrator,this.db,e),A(e?`Context compression enabled`:`Context compression disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving context compression setting: `+t,6e3)}}async onProviderChange(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="provider-select"]`);if(!t)return;let n=t.value,r=this.orchestrator.provider;if(n!==r)try{await x(this.orchestrator,this.db,n,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>u(this.orchestrator)}),this.updateModelSelector(),this.updateMaxTokensUI(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateBedrockSettingsVisibility(n),this.updateBedrockSettingsVisibility(n),this.updateMeshLlmSettingsVisibility(n),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings();let e=t.selectedOptions[0]?.text||n;A(`Switched to ${e}`,3e3)}catch(e){let n=e instanceof Error?e.message:String(e);j(`Error switching provider: `+n,6e3),t.value=r}}async onStreamingToggle(e){if(this.orchestrator&&this.db)try{await m(this.orchestrator,this.db,e),A(e?`Streaming enabled`:`Streaming disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving streaming setting: `+t,6e3)}}async render(){let e=this.shadowRoot;if(!e||!this.orchestrator||!this.db)return;this.bindEventListeners();let t=l(),n=this.orchestrator.provider,a=e.querySelector(`[data-setting="provider-select"]`);a&&s(a,t.map(e=>`<option value="${e.id}" ${e.id===n?`selected`:``}>${e.name}</option>`).join(``)),this.updateModelSelector(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelProviderHelperText(),this.updateBedrockSettingsVisibility(n),this.renderBedrockSettings(),this.updateMeshLlmSettingsVisibility(n),this.renderMeshLlmSettings(),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings(),this.renderBuiltinAiSettings();let c=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);c&&(c.value=await o(this.db,r.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,this.updateMaxTokensUI(),c.value&&v(c.value).then(()=>{this.updateMaxTokensUI()}).catch(()=>{}));let u=e.querySelector(`[data-setting="prompt-api-device-select"]`);u&&(u.value=await o(this.db,r.PROMPT_API_BACKEND)||`auto`);let d=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);d&&(d.value=await o(this.db,r.PROMPT_API_DTYPE_STRATEGY)||`auto`);let f=e.querySelector(`[data-setting="streaming-toggle"]`);f&&(f.checked=this.orchestrator.streamingEnabled);let p=e.querySelector(`[data-setting="context-compression-toggle"]`);p&&(p.checked=this.orchestrator.contextCompressionEnabled);let m=e.querySelector(`[data-setting="reasoning-effort-select"]`);m&&(m.value=this.orchestrator.reasoningEffort||`none`);let h=e.querySelector(`[data-setting="max-iterations-input"]`);h&&this.orchestrator&&(h.value=String(this.orchestrator.maxIterations));let g=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(g){let e=await o(this.db,r.SUBAGENT_MAX_PARALLEL),t=Number(e);g.value=String(Number.isFinite(t)&&t>0?t:5)}let _=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(_){let e=await o(this.db,r.SUBAGENT_WORKSPACE_MODE);_.value=e===`parent`||e===`isolated`||e===`automatic`?e:i}let y=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`);y&&this.orchestrator&&(y.value=String(this.orchestrator.rateLimitCallsPerMinute||0));let b=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);b&&this.orchestrator&&(b.checked=this.orchestrator.rateLimitAutoAdapt!==!1),this.updateMaxTokensUI()}async renderBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`),i=await o(this.db,r.COMPACTION_ENGINE_PREFERENCE),a=await o(this.db,r.BUILTIN_AI_TOOLS_BACKEND);t&&(t.value=i||`auto`),n&&(n.value=a||`active_provider`)}async renderTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let{getConfig:t}=await import(`./getConfig-DSieAlsi.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-071HSho8.js`).then(e=>e.k),r=await t(this.db,n.TRANSFORMERS_JS_BACKEND)||`auto`,i=await t(this.db,n.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`,a=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`);a&&(a.value=r);let o=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`);o&&(o.value=i)}async requestAppDialog(e){let t=document.querySelector(`shadow-claw`);return t&&typeof t.requestDialog==`function`?await t.requestDialog(e):!1}async saveApiKey(){if(!this.orchestrator||!this.db){j(`Orchestrator not initialized`,5e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="api-key-input"]`),n=e.querySelector(`[data-setting="provider-select"]`);if(!t||!n)return;let r=t.value.trim(),i=n.value;if(l().find(e=>e.id===i)?.requiresApiKey===!1)try{await x(this.orchestrator,this.db,i,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>u(this.orchestrator)}),t.value=``,A(`Provider saved (no API key required)`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving provider: `+t,6e3)}else if(!r)M(`Please enter an API key`,3e3);else try{await this.orchestrator.setApiKey(this.db,r),t.value=``,A(`API key and provider saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving API key: `+t,6e3)}}async saveBedrockSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="bedrock-region-input"]`),n=e.querySelector(`[data-setting="bedrock-profile-input"]`),r=e.querySelector(`[data-setting="bedrock-auth-mode"]`);if(!t||!n)return;let i=t.value.trim(),a=n.value.trim(),o=r?.value||`provider_chain`;if(i&&!a||!i&&a)M(`Enter both Bedrock region and profile (or leave both blank to rely on environment variables)`,4e3);else try{await g(this.orchestrator,this.db,{region:i,profile:a,authMode:o}),A(`Bedrock fallback settings saved`,3e3),this.orchestrator.provider===`bedrock_proxy`&&this.updateModelSelector()}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Bedrock fallback settings: `+t,6e3)}}async saveBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`);try{t&&await k(this.db,r.COMPACTION_ENGINE_PREFERENCE,t.value),n&&await k(this.db,r.BUILTIN_AI_TOOLS_BACKEND,n.value),A(`Built-in AI settings saved successfully`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Built-in AI settings: `+t,5e3)}}async saveLlamafileSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),n=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),r=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),i=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);if(!t||!n||!r||!i)return;let a=t.value===`cli`?`cli`:`server`,o=n.value.trim(),s=parseInt(r.value,10);if(!o)M(`Please enter a host`,3e3);else if(!Number.isFinite(s)||s<1||s>65535)M(`Please enter a valid port (1-65535)`,3e3);else try{if(await T(this.orchestrator,this.db,{mode:a,host:o,port:s,offline:i.checked}),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector(),this.orchestrator.provider===`llamafile`){let e=await w.restartCurrentRequest();A(e?`Llamafile settings saved, request restarted`:`Llamafile settings saved`,3e3);return}A(`Llamafile settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving llamafile settings: `+t,6e3)}}async saveMaxIterations(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-iterations-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await y(this.orchestrator,this.db,n),A(`Max iterations saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving max iterations: `+t,6e3)}}async saveMaxTokens(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await _(this.orchestrator,this.db,n),this.updateMaxTokensUI(),A(`Max tokens saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving max tokens: `+t,6e3)}}async saveMeshLlmSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="mesh-llm-host-input"]`);if(!t)return;let n=t.value.trim();try{this.orchestrator&&(await b(this.orchestrator,this.db,{host:n}),A(`Mesh LLM settings saved`,3e3),this.orchestrator.provider===`mesh-llm`&&this.updateModelSelector())}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving Mesh LLM settings: `+t,6e3)}}async saveModel(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-select"]`),n=e.querySelector(`[data-setting="custom-model-input"]`);if(!t||!n)return;let i=t.value;if(i===`__custom__`&&(i=n.value.trim()),this.orchestrator.provider===`llamafile`&&d(this.orchestrator).mode===`cli`&&!i)await this.showLlamafileHelpDialog(`Select a discovered *.llamafile model or enter a custom model id that matches a file in the ${E} folder.`);else{if(this.orchestrator.provider===`prompt_api`){let t=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);if(t)try{await k(this.db,r.PROMPT_API_FALLBACK_MODEL,t.value)}catch(e){console.warn(`Error saving prompt api fallback model`,e)}let n=e.querySelector(`[data-setting="prompt-api-device-select"]`);if(n)try{await k(this.db,r.PROMPT_API_BACKEND,n.value)}catch(e){console.warn(`Error saving prompt api backend`,e)}let i=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);if(i)try{await k(this.db,r.PROMPT_API_DTYPE_STRATEGY,i.value)}catch(e){console.warn(`Error saving prompt api dtype strategy`,e)}}try{if(await C(this.orchestrator,this.db,i),this.updateMaxTokensUI(),this.orchestrator.provider===`llamafile`){let e=await w.restartCurrentRequest();A(e?`Model saved, request restarted`:`Model saved`,3e3);return}A(`Model saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving model: `+t,6e3)}}}async saveRateLimitSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`),n=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);if(!t||!n)return;let r=parseInt(t.value,10);if(!Number.isFinite(r)||r<0)M(`Please enter a valid non-negative calls-per-minute value`,3e3);else try{await D(this.orchestrator,this.db,r),await p(this.orchestrator,this.db,n.checked),A(`Rate limit settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving rate limit settings: `+t,6e3)}}async saveReasoningEffort(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="reasoning-effort-select"]`);if(t)try{await O(this.orchestrator,this.db,t.value||`none`),A(`Reasoning effort saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving reasoning effort: `+t,6e3)}}async saveSubagentMaxParallel(){if(!this.db){j(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)M(`Please enter a valid number (1 or higher)`,3e3);else try{await k(this.db,r.SUBAGENT_MAX_PARALLEL,String(n)),A(`Subagent limit saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving subagent limit: `+t,6e3)}}async saveSubagentWorkspaceMode(){if(!this.db){j(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(!t)return;let n=t.value;if(n!==`automatic`&&n!==`parent`&&n!==`isolated`)M(`Please select a valid subagent workspace mode`,3e3);else try{await k(this.db,r.SUBAGENT_WORKSPACE_MODE,n),A(`Subagent workspace mode saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);j(`Error saving subagent workspace mode: `+t,6e3)}}async saveTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`)?.value||`auto`,n=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`)?.value||`auto`,{setConfig:r}=await import(`./setConfig-CIdSs9rh.js`).then(e=>e.n),{CONFIG_KEYS:i}=await import(`./config-071HSho8.js`).then(e=>e.k);await r(this.db,i.TRANSFORMERS_JS_BACKEND,t),await r(this.db,i.TRANSFORMERS_JS_DTYPE_STRATEGY,n),A(`Transformers.js settings saved.`)}async showLlamafileHelpDialog(e){let t=`${e||``}|${this.orchestrator?.model||``}`;this.lastLlamafileHelpKey!==t&&(this.lastLlamafileHelpKey=t,await this.requestAppDialog(h(e)))}};customElements.get(Y)||customElements.define(Y,X);export{X as ShadowClawLlm};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{m as r,y as i}from"./custom-element-security-3_FKCXcg.js";import{r as a}from"./crypto-4ETeplbS.js";import{a as o,l as s,o as c,s as l,t as u,u as d}from"./mcp-reconnect-uyNSigzu.js";import{a as f,r as p}from"./toast-CtIuHprH.js";import{t as m}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-card-gJym6eBr.js";import"./shadow-claw-empty-state-CkvLk0-B.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{r as e}from"./config-071HSho8.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{m as r,y as i}from"./custom-element-security-Td4vrRc_.js";import{r as a}from"./crypto-4ETeplbS.js";import{a as o,l as s,o as c,s as l,t as u,u as d}from"./mcp-reconnect-CDRJPuoN.js";import{a as f,r as p}from"./toast-CtIuHprH.js";import{t as m}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-card-gJym6eBr.js";import"./shadow-claw-empty-state-CkvLk0-B.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{r as e}from"./txPromise-DlzJBj9N.js";import{C as t,g as n,t as r}from"./orchestrator-DTzgyL23.js";import{a as i,r as a,s as o}from"./toast-CtIuHprH.js";import{t as s}from"./shadow-claw-element-DIrv3P6A.js";import{t as c}from"./effect-xrx5qhzv.js";const l=new CSSStyleSheet;l.replaceSync(`*,
1
+ import{r as e}from"./txPromise-DlzJBj9N.js";import{C as t,g as n,t as r}from"./orchestrator-B7MpomoG.js";import{a as i,r as a,s as o}from"./toast-CtIuHprH.js";import{t as s}from"./shadow-claw-element-DIrv3P6A.js";import{t as c}from"./effect-xrx5qhzv.js";const l=new CSSStyleSheet;l.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{t as r}from"./setConfig-CIdSs9rh.js";import{i,n as a,o,r as s,t as c}from"./push-client-CB8haOGC.js";import{a as l,r as u}from"./toast-CtIuHprH.js";import{t as d}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-empty-state-CkvLk0-B.js";const f=new CSSStyleSheet;f.replaceSync(`*,
1
+ import{r as e}from"./config-071HSho8.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{t as r}from"./setConfig-CIdSs9rh.js";import{i,n as a,o,r as s,t as c}from"./push-client-o8g5_EOe.js";import{a as l,r as u}from"./toast-CtIuHprH.js";import{t as d}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-empty-state-CkvLk0-B.js";const f=new CSSStyleSheet;f.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  font-family: var(--shadow-claw-font-sans);
@@ -1,4 +1,4 @@
1
- import{m as e}from"./custom-element-security-3_FKCXcg.js";import{t}from"./shadow-claw-element-DIrv3P6A.js";const n=new CSSStyleSheet;n.replaceSync(`*,
1
+ import{m as e}from"./custom-element-security-Td4vrRc_.js";import{t}from"./shadow-claw-element-DIrv3P6A.js";const n=new CSSStyleSheet;n.replaceSync(`*,
2
2
  *::before,
3
3
  *::after {
4
4
  box-sizing: border-box;
@@ -1,4 +1,4 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{c as t,f as n,l as r,n as i,r as a,s as o}from"./app-routes-CanH2f3S.js";import{r as s}from"./txPromise-DlzJBj9N.js";import{t as c}from"./getConfig-DSieAlsi.js";import{a as l,d as u,h as d,i as f,l as p,m,o as h,p as g,r as _,u as v}from"./custom-element-security-3_FKCXcg.js";import{t as y}from"./dist-CeFyqf9k.js";import{a as b,en as x,hn as S,l as C,s as w,t as T,u as E}from"./orchestrator-DTzgyL23.js";import{f as ee,o as D,t as te}from"./tools-DvQ_ngXn.js";import{t as ne}from"./buffer-B98mcmH0.js";import{a as O,r as k,s as re}from"./toast-CtIuHprH.js";import{t as ie}from"./shadow-claw-element-DIrv3P6A.js";import{t as A}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-Dd7QafUk.js";import{n as j,t as ae}from"./markdown-CA0v11cd.js";import{t as oe}from"./file-viewer-C92v4Ggd.js";import{a as M,c as se,i as ce,l as le,n as ue,o as de,r as fe,s as pe,t as me}from"./iframe-storage-proxy-BOMTYygY.js";function he(e,t,n){n&&(n.textContent=`Navigated to page: ${t||e.path}`)}function N(e,t){if(e===t||e===`main`&&t===`br:main`||e===`br:main`&&t===`main`)return!0;if(!e.includes(`:`)&&!t.includes(`:`))return!1;let n=e=>e.trim().replace(/:/g,`-`);return n(e)===n(t)}function P(e,r,a,s=typeof window<`u`?window.location.origin:``){let c=e.trim();if(!c||c.startsWith(`#`))return null;let l=c.split(/[?#]/,1)[0],u=l.replace(/^(?:\.\/)+/u,``),d=[];if(u.startsWith(`files/`)&&d.push(`/${u}`),l.startsWith(`/`)){let e=l.lastIndexOf(`/files/`);e>0&&d.push(l.slice(e)),d.push(l)}for(let e of d){let n=t(e);if(n&&N(n.groupId,a))return n.path}let f=i(o(a,r)),p=n(c,f,s||(typeof window<`u`?window.location.origin:``));if(!p||s&&p.origin!==s)return null;let m=t(p.pathname);return!m||!N(m.groupId,a)?null:m.path}function F(e,t,i,a,o=typeof window<`u`?window.location.origin:``){if(!e)return e;let s=o||(typeof window<`u`?window.location.origin:``),c=new DOMParser().parseFromString(e,`text/html`),l=(e,o)=>{let l=Array.from(c.querySelectorAll(e));for(let e of l){let c=(e.getAttribute(o)||``).trim();if(!c||c.startsWith(`#`)||c.startsWith(`javascript:`))continue;let l=n(c,i,s);!l||s&&l.origin!==s||(o!==`href`||r(l.pathname)||P(c,t,a,s))&&e.setAttribute(o,`${l.pathname}${l.search}${l.hash}`)}};return l(`a[href]`,`href`),l(`img[src]`,`src`),l(`audio[src]`,`src`),l(`video[src]`,`src`),l(`source[src]`,`src`),c.body.innerHTML}const ge={ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|ftp|tel|file|blob|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:[`iframe`,`figure`,`figcaption`],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:e=>p(e),attributeNameCheck:()=>!0,allowCustomizedBuiltInElements:!1},ADD_ATTR:[`allow`,`allowfullscreen`,`frameborder`,`scrolling`,`referrerpolicy`,`loading`]};async function _e({content:e,filePath:t,searchParams:n=``,groupId:r,origin:a=typeof window<`u`?window.location?.origin:``,sanitizeOptions:s=ge,resolveRelativeImagesInHtmlFn:c}){let l=i(o(r,t)),u=F(e,t,l,r,a),d=c?await c(u,t,r):u,p=g(d,s),m=crypto.randomUUID().replace(/-/g,``),v=i(`/assets/file-viewer-preview-bridge.js`),y=i(`/assets/iframe-storage-bridge.js`),b=_(),x=f(m),S=typeof document<`u`?document.getElementById(`shadow-claw-site-config`):null,C=S&&S.textContent?`<script id="shadow-claw-site-config" type="application/json">${S.textContent}<\/script>`:``,w=n?`<script nonce="${m}">(function(){try{Object.defineProperty(globalThis.location,"search",{get:function(){return ${JSON.stringify(n)};},configurable:true});}catch(e){}})();<\/script>`:``,T=b.length>0&&h(p)?b.map(({src:e,hasInit:t})=>{let n=e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`//`)?e:i(e.startsWith(`/`)?e:`/${e.replace(/^pages\/main\//,``)}`),r=[`<script type="module" src="${n}" nonce="${m}"><\/script>`];return t&&r.push(`<script type="module" nonce="${m}">import("${n}").then((m) => { try { if (typeof m?.init === "function") m.init(); } catch (e) { console.error("[ShadowClaw] Error executing init for " + ${JSON.stringify(n)}, e); } }).catch(() => {});<\/script>`),r.join(`
1
+ import{r as e}from"./config-071HSho8.js";import{c as t,f as n,l as r,n as i,r as a,s as o}from"./app-routes-CanH2f3S.js";import{r as s}from"./txPromise-DlzJBj9N.js";import{t as c}from"./getConfig-DSieAlsi.js";import{a as l,d as u,h as d,i as f,l as p,m,o as h,p as g,r as _,u as v}from"./custom-element-security-Td4vrRc_.js";import{t as y}from"./dist-CeFyqf9k.js";import{a as b,en as x,hn as S,l as C,s as w,t as T,u as E}from"./orchestrator-B7MpomoG.js";import{f as ee,o as D,t as te}from"./tools-BpZh7hgB.js";import{t as ne}from"./buffer-B98mcmH0.js";import{a as O,r as k,s as re}from"./toast-CtIuHprH.js";import{t as ie}from"./shadow-claw-element-DIrv3P6A.js";import{t as A}from"./effect-xrx5qhzv.js";import"./shadow-claw-page-header-action-button-Bmua3mAb.js";import"./shadow-claw-page-header-LzVgEn46.js";import{n as j,t as ae}from"./markdown-By6gdUvF.js";import{t as oe}from"./file-viewer-QkCuknFn.js";import{a as M,c as se,i as ce,l as le,n as ue,o as de,r as fe,s as pe,t as me}from"./iframe-storage-proxy-BOMTYygY.js";function he(e,t,n){n&&(n.textContent=`Navigated to page: ${t||e.path}`)}function N(e,t){if(e===t||e===`main`&&t===`br:main`||e===`br:main`&&t===`main`)return!0;if(!e.includes(`:`)&&!t.includes(`:`))return!1;let n=e=>e.trim().replace(/:/g,`-`);return n(e)===n(t)}function P(e,r,a,s=typeof window<`u`?window.location.origin:``){let c=e.trim();if(!c||c.startsWith(`#`))return null;let l=c.split(/[?#]/,1)[0],u=l.replace(/^(?:\.\/)+/u,``),d=[];if(u.startsWith(`files/`)&&d.push(`/${u}`),l.startsWith(`/`)){let e=l.lastIndexOf(`/files/`);e>0&&d.push(l.slice(e)),d.push(l)}for(let e of d){let n=t(e);if(n&&N(n.groupId,a))return n.path}let f=i(o(a,r)),p=n(c,f,s||(typeof window<`u`?window.location.origin:``));if(!p||s&&p.origin!==s)return null;let m=t(p.pathname);return!m||!N(m.groupId,a)?null:m.path}function F(e,t,i,a,o=typeof window<`u`?window.location.origin:``){if(!e)return e;let s=o||(typeof window<`u`?window.location.origin:``),c=new DOMParser().parseFromString(e,`text/html`),l=(e,o)=>{let l=Array.from(c.querySelectorAll(e));for(let e of l){let c=(e.getAttribute(o)||``).trim();if(!c||c.startsWith(`#`)||c.startsWith(`javascript:`))continue;let l=n(c,i,s);!l||s&&l.origin!==s||(o!==`href`||r(l.pathname)||P(c,t,a,s))&&e.setAttribute(o,`${l.pathname}${l.search}${l.hash}`)}};return l(`a[href]`,`href`),l(`img[src]`,`src`),l(`audio[src]`,`src`),l(`video[src]`,`src`),l(`source[src]`,`src`),c.body.innerHTML}const ge={ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|ftp|tel|file|blob|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:[`iframe`,`figure`,`figcaption`],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:e=>p(e),attributeNameCheck:()=>!0,allowCustomizedBuiltInElements:!1},ADD_ATTR:[`allow`,`allowfullscreen`,`frameborder`,`scrolling`,`referrerpolicy`,`loading`]};async function _e({content:e,filePath:t,searchParams:n=``,groupId:r,origin:a=typeof window<`u`?window.location?.origin:``,sanitizeOptions:s=ge,resolveRelativeImagesInHtmlFn:c}){let l=i(o(r,t)),u=F(e,t,l,r,a),d=c?await c(u,t,r):u,p=g(d,s),m=crypto.randomUUID().replace(/-/g,``),v=i(`/assets/file-viewer-preview-bridge.js`),y=i(`/assets/iframe-storage-bridge.js`),b=_(),x=f(m),S=typeof document<`u`?document.getElementById(`shadow-claw-site-config`):null,C=S&&S.textContent?`<script id="shadow-claw-site-config" type="application/json">${S.textContent}<\/script>`:``,w=n?`<script nonce="${m}">(function(){try{Object.defineProperty(globalThis.location,"search",{get:function(){return ${JSON.stringify(n)};},configurable:true});}catch(e){}})();<\/script>`:``,T=b.length>0&&h(p)?b.map(({src:e,hasInit:t})=>{let n=e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`//`)?e:i(e.startsWith(`/`)?e:`/${e.replace(/^pages\/main\//,``)}`),r=[`<script type="module" src="${n}" nonce="${m}"><\/script>`];return t&&r.push(`<script type="module" nonce="${m}">import("${n}").then((m) => { try { if (typeof m?.init === "function") m.init(); } catch (e) { console.error("[ShadowClaw] Error executing init for " + ${JSON.stringify(n)}, e); } }).catch(() => {});<\/script>`),r.join(`
2
2
  `)}).join(`
3
3
  `):``,E=le();return[`<!doctype html>`,`<html class="${pe()}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">`,`<meta http-equiv="Content-Security-Policy" content="${x}">`,`<base href="${l}" target="_blank">`,w,C,`<script src="${y}" nonce="${m}"><\/script>`,`<script src="${v}" nonce="${m}"><\/script>`,se(),E,T,`</head><body>`,p,`</body></html>`].join(``)}function ve(e,t){return t===0?{isPrevDisabled:!0,isNextDisabled:!0}:{isPrevDisabled:e<=0,isNextDisabled:e<0||e>=t-1}}async function ye(e,t,n=e=>T.removeAllPages(e)){return!e||!await t({title:`Remove All Pages`,message:`Remove ALL saved pages from Pages? This cannot be undone!`,confirmLabel:`Remove All`,cancelLabel:`Cancel`})?!1:(await n(e),!0)}const I={setItem:M,deleteItem:ue,clear:me,getAll:ce,getItem:fe,putItem:M};async function be(e,t,n,r=I){switch(e){case`setItem`:await r.setItem(n,String(t.key||``),t.value);return;case`removeItem`:await r.deleteItem(n,String(t.key||``));return;case`clear`:await r.clear(n);return;case`getAllItems`:return await r.getAll(n);case`idb-get`:return await r.getItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));case`idb-getAll`:return await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);case`idb-put`:{let e=t.key==null?`__auto_${Date.now()}`:String(t.key);return await r.putItem(`${n}::idb::${t.dbName}::${t.storeName}`,e,t.value),e}case`idb-delete`:await r.deleteItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));return;case`idb-clear`:await r.clear(`${n}::idb::${t.dbName}::${t.storeName}`);return;case`idb-deleteDatabase`:await r.clear(`${n}::idb::${t.dbName}::__default__`);return;case`idb-count`:{let e=await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);return Object.keys(e).length}default:throw Error(`Unknown storage proxy method: ${e}`)}}async function xe(e,t,n,r,i,a=I){if(t)try{let o=await be(n,r,i,a);e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,result:o??null},`*`)}catch(n){e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,error:n instanceof Error?n.message:String(n)},`*`)}}function Se({root:e,rendered:t,selectedPath:n,onIframeLoad:r}){let i=e.querySelector(`[data-pages-iframe]`);if(i instanceof HTMLIFrameElement)return i;let a=document.createElement(`iframe`);return a.className=`pages__iframe`,a.setAttribute(`data-pages-iframe`,``),a.setAttribute(`title`,n?`Preview: ${n}`:`Page preview`),a.setAttribute(`sandbox`,l()),a.setAttribute(`allow`,`fullscreen`),a.hidden=!0,r&&a.addEventListener(`load`,()=>{r(a.contentWindow)}),t.before(a),a}function L(e){if(typeof e==`string`||typeof e==`number`){let t=parseInt(String(e),10);if(!isNaN(t)&&t>=0)return Math.min(t,86400)}return 0}async function Ce(t,n=c){if(!t)return 0;try{return L(await n(t,e.PAGES_AUTO_REFRESH_INTERVAL))}catch{return 0}}function R(e){if(!e)return``;let t=e.groupId;return t===`main`&&(t=`br:main`),`${t}\u0000${e.path}`}function z(e,t=[]){if(!e)return-1;let n=R(e);return t.findIndex(e=>R(e)===n)}function we(e=[]){let t=/* @__PURE__ */ new Map;return e.forEach(e=>{let n=t.get(e.groupId)||[];n.push(e),t.set(e.groupId,n)}),t}function Te(e,t){if(!t||t.hidden)return!1;let n=e.replace(/^#/,``),r=t.querySelector(`[id="${n}"]`)||t.querySelector(`a[name="${n}"]`);return r?(r.scrollIntoView({behavior:`smooth`,block:`start`}),!0):!1}function Ee(e){let t=e.detail;return t&&t.interval!==void 0?L(t.interval):null}function De(e,t){return!e||!t||!e.groupId||!e.path||e.path!==t.path?!1:e.groupId===t.groupId||N(e.groupId,t.groupId)}function Oe(e,t){let n=e.detail;return De(n,t)}function B(e,t){let n=[`data-no-nav`,`data-no-swipe`,`data-no-page-nav`,`data-prevent-nav`,`data-prevent-page-nav`,`data-isolate-input`,`data-isolate-navigation`,`data-game-controls`],r=e=>{if(!e||!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return!!(t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`)||e.closest(`[data-pages-list]`)||e.closest(`[data-pages-dropdown]`)||e.closest(`.pages__sidebar`)||e.closest(`.pages__preview-frame`)||e.closest(`iframe`)||n.some(t=>e.closest(`[${t}]`)))};if(t&&r(t))return!0;if(e){let t=typeof e.composedPath==`function`?e.composedPath():[];for(let e of t)if(e instanceof HTMLElement){let t=e.tagName.toLowerCase();if(n.some(t=>e.hasAttribute(t))||t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`))return!0}if(e.target&&r(e.target))return!0}return!1}function ke(e,t){return t||e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||e.ctrlKey||e.altKey||e.metaKey?null:e.key===`ArrowLeft`?`previous`:`next`}function Ae(e,t,n,r,i,a=300,o=Date.now()){let s=i??{lastNavigationTime:0,lastDirection:null};if(!t)return s;let c=n?.activeElement||document.activeElement,l=ke(e,B(e,e.target||null)||B(void 0,c));return!l||(e.preventDefault(),s.lastDirection===l&&o-s.lastNavigationTime<a)||(s.lastNavigationTime=o,s.lastDirection=l,r(l)),s}function je(e,t,n=Date.now()){return e.button!==0||t?{mouseStartX:0,mouseStartY:0,mouseStartTime:0,isMouseDown:!1}:{mouseStartX:e.clientX,mouseStartY:e.clientY,mouseStartTime:n,isMouseDown:!0}}function V(e,t,n,r,i,a=Date.now(),o=50,s=600){let c=n-e,l=r-t,u=a-i;return Math.abs(c)>=o&&Math.abs(c)>Math.abs(l)&&u<=s?c<0?`next`:`previous`:null}function Me(e,t,n,r,i=Date.now()){return!t.isMouseDown||n||r?null:V(t.mouseStartX,t.mouseStartY,e.clientX,e.clientY,t.mouseStartTime,i)}function Ne(e,t,n){if(t===n||t<0||t>=e.length||n<0||n>=e.length)return e;let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r}async function Pe({db:e,currentPages:t,fromIndex:n,toIndex:r,reorderStoreFn:i=(e,t)=>T.reorderPages(e,t)}){if(!e||n===r)return{reordered:!1,reorderedPages:t,movedToFirst:null};let a=Ne(t,n,r);if(a===t)return{reordered:!1,reorderedPages:t,movedToFirst:null};await i(e,a);let o=a[r]||null;return{reordered:!0,reorderedPages:a,movedToFirst:r===0?o:null}}function Fe(e,t,n,r=Date.now()){if(!t.touchStartTime||n)return null;if(e.changedTouches&&e.changedTouches.length===1){let n=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY;return V(t.touchStartX,t.touchStartY,n,i,t.touchStartTime,r)}return null}function Ie(e,t,n=Date.now()){return t?{touchStartX:0,touchStartY:0,touchStartTime:0}:e.touches&&e.touches.length===1?{touchStartX:e.touches[0].clientX,touchStartY:e.touches[0].clientY,touchStartTime:n}:null}function Le(e,t,n){return!e&&t?`render-and-timer`:e&&n?`clear-timer`:`noop`}function Re(e,t){return!e&&t}function ze(e){return/\.(html?|xhtml)$/iu.test(e)}function Be(e){return/\.(md|markdown)$/iu.test(e)}function Ve(e){if(!e||typeof e!=`object`)return null;let t=e;return t.type===`shadow-claw-broadcast-result`&&typeof t.channel==`string`?{kind:`broadcast-result`,channel:t.channel,payload:t.payload}:t.type===`shadow-claw-storage-proxy`?{kind:`storage-proxy`,requestId:String(t.requestId||``),method:String(t.method||``),args:t.args&&typeof t.args==`object`?t.args:{}}:t.type===`shadow-claw-swipe`&&typeof t.direction==`string`?{kind:`swipe`,direction:t.direction}:t.type===`shadow-claw-iframe-resize`&&typeof t.height==`number`?{kind:`iframe-resize`,height:t.height}:t.type===`shadow-claw-file-viewer-link`&&typeof t.href==`string`?{kind:`file-viewer-link`,href:t.href,target:typeof t.target==`string`?t.target:void 0}:null}var H=ne();function U(e){return{apng:`image/apng`,avif:`image/avif`,gif:`image/gif`,jpg:`image/jpeg`,jpeg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`}[e]??`image/jpeg`}async function He({db:e,groupId:t,workspacePath:n,readGroupFileBytesFn:r=S,writeGroupFileFn:a=D,fetchFn:o=typeof fetch<`u`?fetch:void 0}){if(e)try{let i=await r(e,t,n),a=U(n.split(`.`).pop()?.toLowerCase()||``),o=new Uint8Array(i.byteLength);return o.set(new Uint8Array(i)),`data:${a};base64,${H.Buffer.from(o).toString(`base64`)}`}catch{}if(!o)return null;try{let r=n.replace(/^\/+/,``),s=[i(`/files/main/${r}`),i(`/static-main/${r}`),i(`/pages/main/${r}`)];for(let r of s)try{let i=await o(typeof window<`u`&&window.location?.origin?new URL(r,window.location.origin).toString():r);if(i.ok){let r=await i.blob();if(e)try{let i=await r.arrayBuffer();await a(e,t,n,new Uint8Array(i))}catch{}if(typeof FileReader<`u`)return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e(n.result),n.onerror=t,n.readAsDataURL(r)});let o=await r.arrayBuffer(),s=H.Buffer.from(o).toString(`base64`);return`data:${r.type||U(n.split(`.`).pop()||``)};base64,${s}`}}catch{}}catch{}return null}function W(e){let t=e.querySelector(`[data-pages-iframe]`);if(t instanceof HTMLIFrameElement){t.removeAttribute(`srcdoc`);try{t.src=`about:blank`}catch{}t.remove()}}async function G(e,t=typeof document<`u`?document.querySelector(`shadow-claw`):null,n=re){return t&&typeof t.requestDialog==`function`?await t.requestDialog({mode:`confirm`,...e}):(n(e.message,4500),!1)}async function Ue(e,t,n=c){if(!e||typeof e.transaction!=`function`)return!0;try{return x(await n(e,t),!0)}catch{return!0}}function We(e,t,n=[]){if(e===t||N(e,t))return t;let r=n.find(t=>t.groupId===e);if(r)return r.groupId;let i=n.find(t=>N(e,t.groupId));return i?i.groupId:e||null}function Ge(e,n,r,i=[],a=typeof window<`u`?window.location.origin:``){let o=e.trim();if(!o||o.startsWith(`#`))return null;let s=[],c=o.split(/[?#]/,1)[0];if(/^[a-zA-Z][a-zA-Z\d+.-]*:/u.test(c)||c.startsWith(`//`)){let e;try{e=new URL(c,a||(typeof window<`u`?window.location.origin:``))}catch{return null}if(a&&e.origin!==a)return null;c=e.pathname}let l=c.replace(/^(?:\.\/)+/u,``);if(l.startsWith(`files/`)&&s.push(`/${l}`),c.startsWith(`/`)){let e=c.lastIndexOf(`/files/`);e>0&&s.push(c.slice(e)),s.push(c)}for(let e of s){let n=t(e);if(!n)continue;let a=We(n.groupId,r,i);if(a)return{groupId:a,path:n.path}}let u=P(o,n,r,a);return u?{groupId:r,path:u}:null}async function Ke({container:e,groupId:t,filePath:n,groups:r,readImageAsDataUrlFn:i}){let a=Array.from(e.querySelectorAll(`img[src]`));a.length!==0&&await Promise.all(a.map(async e=>{let a=e.getAttribute(`src`)||``;if(!a||/^(?:blob:|data:|#)/u.test(a))return;let o=Ge(a,n,t,r);if(!o)return;let s=await i(o.groupId,o.path);s&&e.setAttribute(`src`,s)}))}function K(e,t,n){return e>0&&!t&&n}function qe(e){if(!e)return;let t=typeof document<`u`&&document.documentElement.classList.contains(`dark-mode`),n={};if(typeof document<`u`&&typeof getComputedStyle<`u`){let e=getComputedStyle(document.documentElement);for(let t=0;t<e.length;t++){let r=e[t];r.startsWith(`--`)&&(n[r]=e.getPropertyValue(r))}}e.postMessage({type:`shadow-claw-theme-update`,theme:t?`dark`:`light`,customProperties:n},`*`)}function q({root:e,currentOpen:t,force:n}){if(!e)return t;let r=e.querySelector(`[data-pages-dropdown]`),i=r instanceof HTMLDetailsElement&&r.open,a;a=n===void 0?!(i||t):n;let o=e.querySelector(`.pages__sidebar`),s=e.querySelector(`.pages__content`);return o&&o.classList.toggle(`collapsed`,!a),s&&s.classList.toggle(`pages__content--sidebar-collapsed`,!a),r instanceof HTMLDetailsElement&&(a?r.setAttribute(`open`,``):r.removeAttribute(`open`)),a}const J=new CSSStyleSheet;J.replaceSync(`* {
4
4
  box-sizing: border-box;
@@ -1,4 +1,4 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{n as t,r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./getConfig-DSieAlsi.js";import{C as i,E as a,b as o}from"./custom-element-security-3_FKCXcg.js";import{$ as s,en as c,s as l,t as u,u as d}from"./orchestrator-DTzgyL23.js";import{s as f}from"./tools-DvQ_ngXn.js";import{t as p}from"./setConfig-CIdSs9rh.js";import{n as m,r as h}from"./crypto-4ETeplbS.js";import{a as g,i as _,r as v,s as y}from"./toast-CtIuHprH.js";import{t as b}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-page-header-Dd7QafUk.js";import"./shadow-claw-dialog-BVGf_c3S.js";function x(e){try{return JSON.parse(JSON.stringify(e))}catch{return null}}async function S(t,n){let r=[],i=[];for(let a of t){let t=a.key;if(t===e.STORAGE_HANDLE)continue;if(t===e.GIT_PASSWORD||t===e.API_KEY||t.startsWith(`api_key:`)||t===e.IMESSAGE_API_KEY||t===e.TELEGRAM_BOT_TOKEN){if(n&&typeof a.value==`string`){let e=await m(a.value);e&&i.push({key:t,path:[],value:e})}continue}let o=x(a.value);if(t===e.GIT_ACCOUNTS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e];if(!r||typeof r!=`object`)continue;let a=r.password;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`password`],value:n})}delete r.password}}if(t===e.INTEGRATION_CONNECTIONS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e]?.credentialRef,a=r?.encryptedSecret;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`credentialRef`,`encryptedSecret`],value:n})}delete r.encryptedSecret}}if(t===e.REMOTE_MCP_CONNECTIONS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e]?.credentialRef,a=r?.encryptedValue;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`credentialRef`,`encryptedValue`],value:n})}delete r.encryptedValue}}r.push({key:t,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 f(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 h(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!0}const A=new CSSStyleSheet;A.replaceSync(`*,
1
+ import{r as e}from"./config-071HSho8.js";import{n as t,r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./getConfig-DSieAlsi.js";import{C as i,E as a,b as o}from"./custom-element-security-Td4vrRc_.js";import{$ as s,en as c,s as l,t as u,u as d}from"./orchestrator-B7MpomoG.js";import{s as f}from"./tools-BpZh7hgB.js";import{t as p}from"./setConfig-CIdSs9rh.js";import{n as m,r as h}from"./crypto-4ETeplbS.js";import{a as g,i as _,r as v,s as y}from"./toast-CtIuHprH.js";import{t as b}from"./shadow-claw-element-DIrv3P6A.js";import"./shadow-claw-page-header-LzVgEn46.js";import"./shadow-claw-dialog-BVGf_c3S.js";function x(e){try{return JSON.parse(JSON.stringify(e))}catch{return null}}async function S(t,n){let r=[],i=[];for(let a of t){let t=a.key;if(t===e.STORAGE_HANDLE)continue;if(t===e.GIT_PASSWORD||t===e.API_KEY||t.startsWith(`api_key:`)||t===e.IMESSAGE_API_KEY||t===e.TELEGRAM_BOT_TOKEN){if(n&&typeof a.value==`string`){let e=await m(a.value);e&&i.push({key:t,path:[],value:e})}continue}let o=x(a.value);if(t===e.GIT_ACCOUNTS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e];if(!r||typeof r!=`object`)continue;let a=r.password;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`password`],value:n})}delete r.password}}if(t===e.INTEGRATION_CONNECTIONS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e]?.credentialRef,a=r?.encryptedSecret;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`credentialRef`,`encryptedSecret`],value:n})}delete r.encryptedSecret}}if(t===e.REMOTE_MCP_CONNECTIONS&&Array.isArray(o))for(let e=0;e<o.length;e+=1){let r=o[e]?.credentialRef,a=r?.encryptedValue;if(typeof a==`string`&&a){if(n){let n=await m(a);n&&i.push({key:t,path:[e,`credentialRef`,`encryptedValue`],value:n})}delete r.encryptedValue}}r.push({key:t,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 f(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 h(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!0}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{r as e}from"./config-Dqn5OMfC.js";import{n as t,r as n}from"./txPromise-D
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-CYenm-mm.js`)],environment:[()=>import(`./shadow-claw-networking-Cut76YQL.js`),()=>import(`./shadow-claw-webvm-Cnxz04Fk.js`),()=>import(`./shadow-claw-storage-CMSzQs1-.js`)],integrations:[()=>import(`./shadow-claw-git-D57bTSMF.js`),()=>import(`./shadow-claw-accounts-BMsEItB6.js`),()=>import(`./shadow-claw-mcp-remote-CJ-Ckl0j.js`),()=>import(`./shadow-claw-control-plane-CyXA8tB8.js`),()=>import(`./shadow-claw-integrations-BOwhUY-4.js`),()=>import(`./shadow-claw-task-server-CFclo7UX.js`),()=>import(`./shadow-claw-notifications-C3kYCrIa.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 b{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 n(),this.orchestrator=u.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){v(`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`),g(`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`),g(`Settings backup downloaded`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to backup settings: ${t}`,6e3)}}async confirmClear(){if(!this.db)v(`Settings database is unavailable`,5e3);else try{await this.replaceConfigEntries([]),this.closeDialog(`.settings__clear-dialog`),_(`Settings cleared. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to clear settings: ${t}`,6e3)}}async confirmRestore(){if(!this.db){v(`Settings database is unavailable`,5e3);return}let e=this.pendingRestoreFile;if(!e)v(`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`),g(`Settings restored. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to restore settings: ${t}`,6e3)}}async getAllConfigEntries(){if(!this.db)throw Error(`Database is unavailable`);if(t(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(t){if(this.db)try{await p(this.db,e.ACTIVITY_LOG_DISK_LOGGING_ENABLED,t?`true`:`false`),g(t?`Activity log disk logging enabled`:`Activity log disk logging disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving activity log disk logging setting: `+t,6e3)}}async onChatSplitViewToggle(t){if(this.db)try{await p(this.db,e.CHAT_SPLIT_VIEW_ENABLED,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`chat-split-view-change`,{detail:{enabled:t},bubbles:!0,composed:!0})),g(t?`Horizontal Chat split view enabled`:`Horizontal Chat split view disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Chat split view setting: `+t,6e3)}}async onOverridePrerenderSkeletonToggle(t){try{d(`shadow-claw-override-prerender-skeleton`,t?`true`:`false`)}catch(e){console.warn(`Unable to save setting to localStorage:`,e)}if(this.db)try{await p(this.db,e.OVERRIDE_PRERENDER_SKELETON,t?`true`:`false`),g(t?`Pre-rendered content override enabled`:`Pre-rendered content override disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving pre-rendered content override setting: `+t,6e3)}}async onPagesAutoRefreshInputChange(t){if(!this.db)return;let n=Math.max(0,Math.min(t,86400));try{await p(this.db,e.PAGES_AUTO_REFRESH_INTERVAL,String(n)),window.dispatchEvent(new CustomEvent(`shadow-claw-pages-auto-refresh-change`,{detail:{interval:n}})),g(n>0?`Pages auto refresh set to ${n}s`:`Pages auto refresh disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Pages auto refresh interval: `+t,6e3)}}async onSidebarHideChatToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_CHAT_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-chat-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Chat hidden in sidebar`:`Chat shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Chat visibility: `+t,6e3)}}async onSidebarHideFilesToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_FILES_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-files-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Files hidden in sidebar`:`Files shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Files visibility: `+t,6e3)}}async onSidebarHidePagesToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_PAGES_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-pages-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Pages hidden in sidebar`:`Pages shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Pages visibility: `+t,6e3)}}async onSidebarHideTasksToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_TASKS_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-tasks-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Tasks hidden in sidebar`:`Tasks shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Tasks visibility: `+t,6e3)}}async populateAssistantSettings(){let t=this.shadowRoot;if(!t||!this.db)return;let n=t.querySelector(`[data-setting="assistant-name-input"]`);if(n){let t=await r(this.db,e.ASSISTANT_NAME),i=this.orchestrator?.assistantName||u.orchestrator?.assistantName;n.value=typeof t==`string`&&t||i||`ShadowClaw`}let o=await r(this.db,e.ACTIVITY_LOG_DISK_LOGGING_ENABLED),s=o===!0||o===`true`||o===1||o===`1`,f=t.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`);f&&(f.checked=s);let p=await r(this.db,e.SIDEBAR_PAGES_HIDDEN),m=p===!0||p===`true`||p===1||p===`1`,h=t.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`);h&&(h.checked=m);let g=await r(this.db,e.SIDEBAR_CHAT_HIDDEN),_=g===!0||g===`true`||g===1||g===`1`,v=t.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`);v&&(v.checked=_);let y=await r(this.db,e.SIDEBAR_TASKS_HIDDEN),b=y===!0||y===`true`||y===1||y===`1`,x=t.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`);x&&(x.checked=b);let S=await r(this.db,e.SIDEBAR_FILES_HIDDEN),C=S===!0||S===`true`||S===1||S===`1`,w=t.querySelector(`[data-setting="sidebar-hide-files-toggle"]`);w&&(w.checked=C);let T=await r(this.db,e.CHAT_SPLIT_VIEW_ENABLED),E=c(T,!1),D=t.querySelector(`[data-setting="chat-split-view-toggle"]`);D&&(D.checked=E);let O=t.querySelector(`[data-setting="pages-auto-refresh-input"]`);if(O){let t=await r(this.db,e.PAGES_AUTO_REFRESH_INTERVAL);if(typeof t==`string`||typeof t==`number`){let e=parseInt(String(t),10);O.value=!isNaN(e)&&e>=0?String(e):`0`}else O.value=`0`}let A=await r(this.db,e.OVERRIDE_PRERENDER_SKELETON),j=null;try{j=l(`shadow-claw-override-prerender-skeleton`)}catch{}let M=k();if(A!=null){M=c(A);try{d(`shadow-claw-override-prerender-skeleton`,M?`true`:`false`)}catch{}}else j!==null&&(M=j===`true`);let N=t.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`);N&&(N.checked=M);let P=t.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(P){let t=await r(this.db,e.ALLOWED_IFRAME_HOST_PATTERNS);typeof t==`string`&&t.trim().length>0?(P.value=t,a(t)):P.value=i.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-Bc6tZ8kk.js`)],environment:[()=>import(`./shadow-claw-networking-B6YgtiA7.js`),()=>import(`./shadow-claw-webvm-bZj44Did.js`),()=>import(`./shadow-claw-storage-DX_4T7KR.js`)],integrations:[()=>import(`./shadow-claw-git-CxGwyxim.js`),()=>import(`./shadow-claw-accounts-BbNPiiaV.js`),()=>import(`./shadow-claw-mcp-remote-nGPpFpI-.js`),()=>import(`./shadow-claw-control-plane-BAFT06LL.js`),()=>import(`./shadow-claw-integrations-DnIr6xp-.js`),()=>import(`./shadow-claw-task-server-DTsbEs5z.js`),()=>import(`./shadow-claw-notifications-BSxifptS.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 b{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 n(),this.orchestrator=u.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){v(`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`),g(`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`),g(`Settings backup downloaded`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to backup settings: ${t}`,6e3)}}async confirmClear(){if(!this.db)v(`Settings database is unavailable`,5e3);else try{await this.replaceConfigEntries([]),this.closeDialog(`.settings__clear-dialog`),_(`Settings cleared. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to clear settings: ${t}`,6e3)}}async confirmRestore(){if(!this.db){v(`Settings database is unavailable`,5e3);return}let e=this.pendingRestoreFile;if(!e)v(`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`),g(`Settings restored. Reloading app...`,3200),setTimeout(()=>{window.location.reload()},250)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Failed to restore settings: ${t}`,6e3)}}async getAllConfigEntries(){if(!this.db)throw Error(`Database is unavailable`);if(t(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(t){if(this.db)try{await p(this.db,e.ACTIVITY_LOG_DISK_LOGGING_ENABLED,t?`true`:`false`),g(t?`Activity log disk logging enabled`:`Activity log disk logging disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving activity log disk logging setting: `+t,6e3)}}async onChatSplitViewToggle(t){if(this.db)try{await p(this.db,e.CHAT_SPLIT_VIEW_ENABLED,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`chat-split-view-change`,{detail:{enabled:t},bubbles:!0,composed:!0})),g(t?`Horizontal Chat split view enabled`:`Horizontal Chat split view disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Chat split view setting: `+t,6e3)}}async onOverridePrerenderSkeletonToggle(t){try{d(`shadow-claw-override-prerender-skeleton`,t?`true`:`false`)}catch(e){console.warn(`Unable to save setting to localStorage:`,e)}if(this.db)try{await p(this.db,e.OVERRIDE_PRERENDER_SKELETON,t?`true`:`false`),g(t?`Pre-rendered content override enabled`:`Pre-rendered content override disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving pre-rendered content override setting: `+t,6e3)}}async onPagesAutoRefreshInputChange(t){if(!this.db)return;let n=Math.max(0,Math.min(t,86400));try{await p(this.db,e.PAGES_AUTO_REFRESH_INTERVAL,String(n)),window.dispatchEvent(new CustomEvent(`shadow-claw-pages-auto-refresh-change`,{detail:{interval:n}})),g(n>0?`Pages auto refresh set to ${n}s`:`Pages auto refresh disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Pages auto refresh interval: `+t,6e3)}}async onSidebarHideChatToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_CHAT_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-chat-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Chat hidden in sidebar`:`Chat shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Chat visibility: `+t,6e3)}}async onSidebarHideFilesToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_FILES_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-files-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Files hidden in sidebar`:`Files shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Files visibility: `+t,6e3)}}async onSidebarHidePagesToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_PAGES_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-pages-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Pages hidden in sidebar`:`Pages shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Pages visibility: `+t,6e3)}}async onSidebarHideTasksToggle(t){if(this.db)try{await p(this.db,e.SIDEBAR_TASKS_HIDDEN,t?`true`:`false`),this.dispatchEvent(new CustomEvent(`sidebar-tasks-visibility-change`,{detail:{hidden:t},bubbles:!0,composed:!0})),g(t?`Tasks hidden in sidebar`:`Tasks shown in sidebar`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving sidebar Tasks visibility: `+t,6e3)}}async populateAssistantSettings(){let t=this.shadowRoot;if(!t||!this.db)return;let n=t.querySelector(`[data-setting="assistant-name-input"]`);if(n){let t=await r(this.db,e.ASSISTANT_NAME),i=this.orchestrator?.assistantName||u.orchestrator?.assistantName;n.value=typeof t==`string`&&t||i||`ShadowClaw`}let o=await r(this.db,e.ACTIVITY_LOG_DISK_LOGGING_ENABLED),s=o===!0||o===`true`||o===1||o===`1`,f=t.querySelector(`[data-setting="activity-log-disk-logging-toggle"]`);f&&(f.checked=s);let p=await r(this.db,e.SIDEBAR_PAGES_HIDDEN),m=p===!0||p===`true`||p===1||p===`1`,h=t.querySelector(`[data-setting="sidebar-hide-pages-toggle"]`);h&&(h.checked=m);let g=await r(this.db,e.SIDEBAR_CHAT_HIDDEN),_=g===!0||g===`true`||g===1||g===`1`,v=t.querySelector(`[data-setting="sidebar-hide-chat-toggle"]`);v&&(v.checked=_);let y=await r(this.db,e.SIDEBAR_TASKS_HIDDEN),b=y===!0||y===`true`||y===1||y===`1`,x=t.querySelector(`[data-setting="sidebar-hide-tasks-toggle"]`);x&&(x.checked=b);let S=await r(this.db,e.SIDEBAR_FILES_HIDDEN),C=S===!0||S===`true`||S===1||S===`1`,w=t.querySelector(`[data-setting="sidebar-hide-files-toggle"]`);w&&(w.checked=C);let T=await r(this.db,e.CHAT_SPLIT_VIEW_ENABLED),E=c(T,!1),D=t.querySelector(`[data-setting="chat-split-view-toggle"]`);D&&(D.checked=E);let O=t.querySelector(`[data-setting="pages-auto-refresh-input"]`);if(O){let t=await r(this.db,e.PAGES_AUTO_REFRESH_INTERVAL);if(typeof t==`string`||typeof t==`number`){let e=parseInt(String(t),10);O.value=!isNaN(e)&&e>=0?String(e):`0`}else O.value=`0`}let A=await r(this.db,e.OVERRIDE_PRERENDER_SKELETON),j=null;try{j=l(`shadow-claw-override-prerender-skeleton`)}catch{}let M=k();if(A!=null){M=c(A);try{d(`shadow-claw-override-prerender-skeleton`,M?`true`:`false`)}catch{}}else j!==null&&(M=j===`true`);let N=t.querySelector(`[data-setting="override-prerender-skeleton-toggle"]`);N&&(N.checked=M);let P=t.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(P){let t=await r(this.db,e.ALLOWED_IFRAME_HOST_PATTERNS);typeof t==`string`&&t.trim().length>0?(P.value=t,a(t)):P.value=i.join(`
889
889
  `)}let F=t.querySelector(`[data-setting="markdown-frontmatter-pages-toggle"]`);F&&(F.checked=c(await r(this.db,e.MARKDOWN_FRONTMATTER_PAGES),!0));let I=t.querySelector(`[data-setting="markdown-frontmatter-file-viewer-toggle"]`);I&&(I.checked=c(await r(this.db,e.MARKDOWN_FRONTMATTER_FILE_VIEWER),!0));let L=t.querySelector(`[data-setting="markdown-frontmatter-chat-toggle"]`);L&&(L.checked=c(await r(this.db,e.MARKDOWN_FRONTMATTER_CHAT),!0));let R=t.querySelector(`[data-setting="markdown-frontmatter-tasks-toggle"]`);R&&(R.checked=c(await r(this.db,e.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-${o()}.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(t(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 n=this.db;await new Promise((t,r)=>{try{let i=n.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=()=>t(),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 t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="assistant-name-input"]`);if(!n)return;let r=n.value.trim();if(!r)y(`Please enter a name`,3e3);else{d(`assistantName`,r);try{let t=this.orchestrator||u.orchestrator;t?(this.orchestrator=t,await s(t,this.db,r)):await p(this.db,e.ASSISTANT_NAME,r)}catch(e){console.warn(`Could not update orchestrator:`,e)}g(`Assistant name saved`,3e3)}}async saveDomAllowedIframeHosts(){let t=this.shadowRoot;if(!t||!this.db)return;let n=t.querySelector(`[data-setting="dom-allowed-iframe-hosts"]`);if(!n)return;let r=n.value.split(`
890
890
  `).map(e=>e.trim()).filter(e=>e.length>0),i=t.querySelector(`[data-setting="markdown-frontmatter-pages-toggle"]`),o=t.querySelector(`[data-setting="markdown-frontmatter-file-viewer-toggle"]`),s=t.querySelector(`[data-setting="markdown-frontmatter-chat-toggle"]`),c=t.querySelector(`[data-setting="markdown-frontmatter-tasks-toggle"]`);try{let t=r.join(`
891
891
  `);await p(this.db,e.ALLOWED_IFRAME_HOST_PATTERNS,t),await p(this.db,e.MARKDOWN_FRONTMATTER_PAGES,String(i?.checked??!0)),await p(this.db,e.MARKDOWN_FRONTMATTER_FILE_VIEWER,String(o?.checked??!0)),await p(this.db,e.MARKDOWN_FRONTMATTER_CHAT,String(s?.checked??!0)),await p(this.db,e.MARKDOWN_FRONTMATTER_TASKS,String(c?.checked??!0)),a(r),g(`DOM iframe embed settings saved`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`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{r as e}from"./config-Dqn5OMfC.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{m as r}from"./custom-element-security-3_FKCXcg.js";import{en as i,in as a,rn as o,t as s}from"./orchestrator-DTzgyL23.js";import{c}from"./getGroupDir-BGGIJL4Y.js";import{t as l}from"./setConfig-CIdSs9rh.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(t){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 l(t,e.STORAGE_HANDLE,n),await a(t),await o(t),!0}catch(e){if(e instanceof Error&&e.name===`AbortError`)return!1;throw e}}const y=new CSSStyleSheet;y.replaceSync(`*,
1
+ import{r as e}from"./config-071HSho8.js";import{r as t}from"./txPromise-DlzJBj9N.js";import{t as n}from"./getConfig-DSieAlsi.js";import{m as r}from"./custom-element-security-Td4vrRc_.js";import{en as i,in as a,rn as o,t as s}from"./orchestrator-B7MpomoG.js";import{c}from"./getGroupDir-Bj5XCflQ.js";import{t as l}from"./setConfig-CIdSs9rh.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(t){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 l(t,e.STORAGE_HANDLE,n),await a(t),await o(t),!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{r as e}from"./txPromise-DlzJBj9N.js";import{S as t,t as n,x as r}from"./orchestrator-DTzgyL23.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{r as e}from"./txPromise-DlzJBj9N.js";import{S as t,t as n,x as r}from"./orchestrator-B7MpomoG.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{r as e}from"./config-Dqn5OMfC.js";import{i as t}from"./app-routes-CanH2f3S.js";import{r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./getConfig-DSieAlsi.js";import{m as i,y as a}from"./custom-element-security-3_FKCXcg.js";import{en as o,t as s}from"./orchestrator-DTzgyL23.js";import{t as c}from"./push-client-CB8haOGC.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-Dd7QafUk.js";import{t as m}from"./markdown-CA0v11cd.js";import{t as h}from"./file-viewer-C92v4Ggd.js";import"./shadow-claw-dialog-BVGf_c3S.js";const g=new CSSStyleSheet;g.replaceSync(`*,
1
+ import{r as e}from"./config-071HSho8.js";import{i as t}from"./app-routes-CanH2f3S.js";import{r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./getConfig-DSieAlsi.js";import{m as i,y as a}from"./custom-element-security-Td4vrRc_.js";import{en as o,t as s}from"./orchestrator-B7MpomoG.js";import{t as c}from"./push-client-o8g5_EOe.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-LzVgEn46.js";import{t as m}from"./markdown-By6gdUvF.js";import{t as h}from"./file-viewer-QkCuknFn.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{D as e,O as t,k as n,t as r}from"./orchestrator-DTzgyL23.js";import{t as i}from"./shadow-claw-element-DIrv3P6A.js";function a(e){if(!e)return``;let t=e.split(`
1
+ import{D as e,O as t,k as n,t as r}from"./orchestrator-B7MpomoG.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-Dqn5OMfC.js";import{r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./orchestrator-DTzgyL23.js";import{t as i}from"./tools-DvQ_ngXn.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"./syncWebMcpRegistration-QwnLMAK3.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-Dd7QafUk.js";import"./shadow-claw-dialog-BVGf_c3S.js";import{t as m}from"./webmcp-CJymew4t.js";const h=new CSSStyleSheet;h.replaceSync(`*,
1
+ import{A as e,F as t}from"./config-071HSho8.js";import{r as n}from"./txPromise-DlzJBj9N.js";import{t as r}from"./orchestrator-B7MpomoG.js";import{t as i}from"./tools-BpZh7hgB.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"./syncWebMcpRegistration-XJjIlDNO.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-LzVgEn46.js";import"./shadow-claw-dialog-BVGf_c3S.js";import{t as m}from"./webmcp-CkfDZfZ0.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-Dqn5OMfC.js";import{r}from"./txPromise-DlzJBj9N.js";import{t as i}from"./getConfig-DSieAlsi.js";import{A as a,M as o,j as s,t as c,w as l}from"./orchestrator-DTzgyL23.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-071HSho8.js";import{r}from"./txPromise-DlzJBj9N.js";import{t as i}from"./getConfig-DSieAlsi.js";import{A as a,M as o,j as s,t as c,w as l}from"./orchestrator-B7MpomoG.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);
@@ -1 +1 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{Bt as t,P as n,t as r}from"./orchestrator-DTzgyL23.js";import{t as i}from"./tools-DvQ_ngXn.js";import{t as a}from"./setConfig-CIdSs9rh.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}from"./webmcp-CJymew4t.js";const f={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 p(e,a){if(typeof e.webMcpEffectCleanup==`function`&&(e.webMcpEffectCleanup(),e.webMcpEffectCleanup=null),!e.webMcpToolsEnabled){u();return}let s=l(t=>{e.events?.emit(`webmcp-tool-activated`,{toolName:t.toolName})}),p=d(t=>{e.events?.emit(`webmcp-tool-cancel`,{toolName:t.toolName})}),m=o(()=>{let o=r.activeGroupId,s=i.allTools,l=i.enabledTools;i.declarativeTools,i.declarativeToolNamesEnabled;let d=r.groups.find(e=>e.groupId===o);e.webMcpRegistrationLock=e.webMcpRegistrationLock.then(async()=>{u(),await new Promise(e=>setTimeout(e,0));let r=[];try{r=await i.refreshDeclarativeTools(a,o)}catch{}let p=r.filter(e=>i.isDeclarativeToolEnabled(e.name)),m=[...s,...r],h=d?.toolTags&&d.toolTags.length>0?m.filter(e=>d.toolTags.includes(e.name)):[...l,...p],g={skills:[]};try{g=await t(a,o)}catch{}g.skills.length>0&&!h.some(e=>e.name===f.name)&&(h=[...h,f]),await c(e.agentWorker,async t=>{await n(e,a,t)},o,h)}).catch(e=>{console.error(`WebMCP registration failed:`,e)})});e.webMcpEffectCleanup=()=>{try{s()}catch{}try{p()}catch{}typeof m==`function`&&m()}}async function m(t,n,r,i){u(),s(r),await a(n,e.WEBMCP_MODE,r),p(i.orchestrator,n)}async function h(t,n,r,i){t.webMcpToolsEnabled=!!r,await a(n,e.WEBMCP_TOOLS_ENABLED,t.webMcpToolsEnabled?`true`:`false`),p(i.orchestrator,n)}export{f as i,h as n,p as r,m as t};
1
+ import{r as e}from"./config-071HSho8.js";import{Bt as t,P as n,t as r}from"./orchestrator-B7MpomoG.js";import{t as i}from"./tools-BpZh7hgB.js";import{t as a}from"./setConfig-CIdSs9rh.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}from"./webmcp-CkfDZfZ0.js";const f={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 p(e,a){if(typeof e.webMcpEffectCleanup==`function`&&(e.webMcpEffectCleanup(),e.webMcpEffectCleanup=null),!e.webMcpToolsEnabled){u();return}let s=l(t=>{e.events?.emit(`webmcp-tool-activated`,{toolName:t.toolName})}),p=d(t=>{e.events?.emit(`webmcp-tool-cancel`,{toolName:t.toolName})}),m=o(()=>{let o=r.activeGroupId,s=i.allTools,l=i.enabledTools;i.declarativeTools,i.declarativeToolNamesEnabled;let d=r.groups.find(e=>e.groupId===o);e.webMcpRegistrationLock=e.webMcpRegistrationLock.then(async()=>{u(),await new Promise(e=>setTimeout(e,0));let r=[];try{r=await i.refreshDeclarativeTools(a,o)}catch{}let p=r.filter(e=>i.isDeclarativeToolEnabled(e.name)),m=[...s,...r],h=d?.toolTags&&d.toolTags.length>0?m.filter(e=>d.toolTags.includes(e.name)):[...l,...p],g={skills:[]};try{g=await t(a,o)}catch{}g.skills.length>0&&!h.some(e=>e.name===f.name)&&(h=[...h,f]),await c(e.agentWorker,async t=>{await n(e,a,t)},o,h)}).catch(e=>{console.error(`WebMCP registration failed:`,e)})});e.webMcpEffectCleanup=()=>{try{s()}catch{}try{p()}catch{}typeof m==`function`&&m()}}async function m(t,n,r,i){u(),s(r),await a(n,e.WEBMCP_MODE,r),p(i.orchestrator,n)}async function h(t,n,r,i){t.webMcpToolsEnabled=!!r,await a(n,e.WEBMCP_TOOLS_ENABLED,t.webMcpToolsEnabled?`true`:`false`),p(i.orchestrator,n)}export{f as i,h as n,p as r,m as t};
@@ -1,4 +1,4 @@
1
- import{i as e,n as t,t as n}from"./rolldown-runtime-DBVvNlSN.js";import{o as r,r as i}from"./config-Dqn5OMfC.js";import{t as a}from"./getConfig-DSieAlsi.js";import{_ as o,v as s}from"./custom-element-security-3_FKCXcg.js";import{t as c}from"./dist-CeFyqf9k.js";import{a as l,o as u,r as d,s as f,t as p}from"./getGroupDir-BGGIJL4Y.js";import{t as m}from"./setConfig-CIdSs9rh.js";import{t as h}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";import{t as g}from"./buffer-B98mcmH0.js";function _(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 v(e,t,n){let r=await p(e,t),{dirs:i,filename:a}=_(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 y={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."},b=/^[a-z][a-z0-9_]{0,63}$/;function x(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(!b.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`||!b.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 S(e,t=r){let n=[],i=[],a=t===`br:main`?[r]:[t,r];for(let t of a)try{let r=await p(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 r.getDirectoryHandle(`.agents`)).getDirectoryHandle(`tools`),`.agents/tools`)}catch{continue}for(let r of a.sort())try{let i=x(r,JSON.parse(await v(e,t,r)));n.some(e=>e.name===i.name)||n.push(i)}catch(e){i.push(e instanceof Error?e.message:String(e))}}catch{}return{tools:n,diagnostics:i}}async function C(e,t=r,n){try{let{tools:r}=await S(e,t),o=r.find(e=>e.name===n)||null;if(!o)return null;let s=await a(e,i.DECLARATIVE_TOOLS_ENABLED);return Array.isArray(s)&&!s.includes(n)?null:o}catch{return null}}const w=`.well-known/agent-skills/index.json`;function ee(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(w)){let e=n.slice(0,-35).replace(/\/+$/,``);return{baseUrl:e,siteUrl:e,manifestUrl:n}}return{baseUrl:n,siteUrl:n,manifestUrl:`${n}/${w}`}}function T(e,t){if(!e)return``;try{return new URL(e,t).href}catch{return e}}function te(e,t){let n=JSON.parse(JSON.stringify(e));return Array.isArray(n.tools)&&(n.tools=n.tools.map(e=>({...e,url:T(e.url,t)}))),Array.isArray(n.scripts)&&(n.scripts=n.scripts.map(e=>({...e,url:T(e.url,t)}))),Array.isArray(n.skills)&&(n.skills=n.skills.map(e=>({...e,url:T(e.url,t),tools:Array.isArray(e.tools)?e.tools.map(e=>({...e,url:e.url?T(e.url,t):void 0})):void 0,scripts:Array.isArray(e.scripts)?e.scripts.map(e=>({...e,url:e.url?T(e.url,t):void 0})):void 0}))),n}async function E(e,t){if(!t||!t.startsWith(`sha256:`))return!0;let n=t.slice(7).trim().toLowerCase();if(!n)return!0;let r=typeof e==`string`?new TextEncoder().encode(e):e;return(await s(r)).toLowerCase()===n}async function ne(e,t=globalThis.fetch){let{baseUrl:n,manifestUrl:r}=ee(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:te(a,r),siteUrl:n,manifestUrl:r}}async function D(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(k(t)),await e.close()}else if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await A(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 O(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await A(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
1
+ import{i as e,n as t,t as n}from"./rolldown-runtime-DBVvNlSN.js";import{o as r,r as i}from"./config-071HSho8.js";import{t as a}from"./getConfig-DSieAlsi.js";import{_ as o,v as s}from"./custom-element-security-Td4vrRc_.js";import{t as c}from"./dist-CeFyqf9k.js";import{a as l,o as u,r as d,s as f,t as p}from"./getGroupDir-Bj5XCflQ.js";import{t as m}from"./setConfig-CIdSs9rh.js";import{t as h}from"./tools-CHxUdGxZ.js";import"./tools-C4xNCwrc.js";import{t as g}from"./buffer-B98mcmH0.js";function _(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 v(e,t,n){let r=await p(e,t),{dirs:i,filename:a}=_(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 y={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."},b=/^[a-z][a-z0-9_]{0,63}$/;function x(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(!b.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`||!b.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 S(e,t=r){let n=[],i=[],a=t===`br:main`?[r]:[t,r];for(let t of a)try{let r=await p(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 r.getDirectoryHandle(`.agents`)).getDirectoryHandle(`tools`),`.agents/tools`)}catch{continue}for(let r of a.sort())try{let i=x(r,JSON.parse(await v(e,t,r)));n.some(e=>e.name===i.name)||n.push(i)}catch(e){i.push(e instanceof Error?e.message:String(e))}}catch{}return{tools:n,diagnostics:i}}async function C(e,t=r,n){try{let{tools:r}=await S(e,t),o=r.find(e=>e.name===n)||null;if(!o)return null;let s=await a(e,i.DECLARATIVE_TOOLS_ENABLED);return Array.isArray(s)&&!s.includes(n)?null:o}catch{return null}}const w=`.well-known/agent-skills/index.json`;function ee(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(w)){let e=n.slice(0,-35).replace(/\/+$/,``);return{baseUrl:e,siteUrl:e,manifestUrl:n}}return{baseUrl:n,siteUrl:n,manifestUrl:`${n}/${w}`}}function T(e,t){if(!e)return``;try{return new URL(e,t).href}catch{return e}}function te(e,t){let n=JSON.parse(JSON.stringify(e));return Array.isArray(n.tools)&&(n.tools=n.tools.map(e=>({...e,url:T(e.url,t)}))),Array.isArray(n.scripts)&&(n.scripts=n.scripts.map(e=>({...e,url:T(e.url,t)}))),Array.isArray(n.skills)&&(n.skills=n.skills.map(e=>({...e,url:T(e.url,t),tools:Array.isArray(e.tools)?e.tools.map(e=>({...e,url:e.url?T(e.url,t):void 0})):void 0,scripts:Array.isArray(e.scripts)?e.scripts.map(e=>({...e,url:e.url?T(e.url,t):void 0})):void 0}))),n}async function E(e,t){if(!t||!t.startsWith(`sha256:`))return!0;let n=t.slice(7).trim().toLowerCase();if(!n)return!0;let r=typeof e==`string`?new TextEncoder().encode(e):e;return(await s(r)).toLowerCase()===n}async function ne(e,t=globalThis.fetch){let{baseUrl:n,manifestUrl:r}=ee(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:te(a,r),siteUrl:n,manifestUrl:r}}async function D(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(k(t)),await e.close()}else if(typeof e.createSyncAccessHandle==`function`){let n=await e.createSyncAccessHandle();try{let e=await A(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 O(e,t){if(typeof globalThis.Worker!=`function`)throw Error(`Writable file streams are not supported by this browser/storage backend.`);let n=await A(t);return new Promise((t,r)=>{let i=``,a=null;try{let e=[`self.onmessage = async (e) => {`,` try {`,` const { pathSegments, bytes } = e.data;`,` let dir = await navigator.storage.getDirectory();`,` for (let i = 0; i < pathSegments.length - 1; i++) {`,` dir = await dir.getDirectoryHandle(pathSegments[i], { create: true });`,` }`,` const filename = pathSegments[pathSegments.length - 1];`,` const fh = await dir.getFileHandle(filename, { create: true });`,` const h = await fh.createSyncAccessHandle();`,` try {`,` h.truncate(0);`,` h.write(bytes, { at: 0 });`,` if (typeof h.flush === 'function') h.flush();`,` } finally { h.close(); }`,` self.postMessage({ ok: true });`,` } catch (err) {`,` self.postMessage({ error: err.message || String(err) });`,` }`,`};`].join(`
2
2
  `);i=URL.createObjectURL(new Blob([e],{type:`text/javascript`})),a=new Worker(o(i))}catch{i&&URL.revokeObjectURL(i),r(/* @__PURE__ */ Error(`Writable file streams are not supported by this browser/storage backend.`));return}let s=()=>{a&&a.terminate(),URL.revokeObjectURL(i)};a.onmessage=e=>{s(),e.data?.error?r(Error(e.data.error)):t()},a.onerror=e=>{s(),r(Error(e.message||`Worker file write failed`))},a.postMessage({pathSegments:e,bytes:n},[n.buffer])})}function k(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 A(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 j(e,t,n,r){let{dirs:i,filename:a}=_(n);for(let n=0;n<2;n++)try{let n=await p(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await D(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await l(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await O([d(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&f(e)){u();continue}throw e}}async function M(e,t,n){try{return await v(e,t,n),!0}catch{return!1}}var N=/* @__PURE__ */ n((()=>{})),P=/* @__PURE__ */ n(((e,t)=>{var n=Object.prototype.toString;t.exports=function(e){if(e===void 0)return`undefined`;if(e===null)return`null`;var t=typeof e;if(t===`boolean`)return`boolean`;if(t===`string`)return`string`;if(t===`number`)return`number`;if(t===`symbol`)return`symbol`;if(t===`function`)return c(e)?`generatorfunction`:`function`;if(i(e))return`array`;if(d(e))return`buffer`;if(u(e))return`arguments`;if(o(e))return`date`;if(a(e))return`error`;if(s(e))return`regexp`;switch(r(e)){case`Symbol`:return`symbol`;case`Promise`:return`promise`;case`WeakMap`:return`weakmap`;case`WeakSet`:return`weakset`;case`Map`:return`map`;case`Set`:return`set`;case`Int8Array`:return`int8array`;case`Uint8Array`:return`uint8array`;case`Uint8ClampedArray`:return`uint8clampedarray`;case`Int16Array`:return`int16array`;case`Uint16Array`:return`uint16array`;case`Int32Array`:return`int32array`;case`Uint32Array`:return`uint32array`;case`Float32Array`:return`float32array`;case`Float64Array`:return`float64array`}if(l(e))return`generator`;switch(t=n.call(e),t){case`[object Object]`:return`object`;case`[object Map Iterator]`:return`mapiterator`;case`[object Set Iterator]`:return`setiterator`;case`[object String Iterator]`:return`stringiterator`;case`[object Array Iterator]`:return`arrayiterator`}return t.slice(8,-1).toLowerCase().replace(/\s/g,``)};function r(e){return typeof e.constructor==`function`?e.constructor.name:null}function i(e){return Array.isArray?Array.isArray(e):e instanceof Array}function a(e){return e instanceof Error||typeof e.message==`string`&&e.constructor&&typeof e.constructor.stackTraceLimit==`number`}function o(e){return e instanceof Date||typeof e.toDateString==`function`&&typeof e.getDate==`function`&&typeof e.setDate==`function`}function s(e){return e instanceof RegExp||typeof e.flags==`string`&&typeof e.ignoreCase==`boolean`&&typeof e.multiline==`boolean`&&typeof e.global==`boolean`}function c(e,t){return r(e)===`GeneratorFunction`}function l(e){return typeof e.throw==`function`&&typeof e.return==`function`&&typeof e.next==`function`}function u(e){try{if(typeof e.length==`number`&&typeof e.callee==`function`)return!0}catch(e){if(e.message.indexOf(`callee`)!==-1)return!0}return!1}function d(e){return e.constructor&&typeof e.constructor.isBuffer==`function`?e.constructor.isBuffer(e):!1}})),F=/* @__PURE__ */ n(((e,t)=>{
3
3
  /*!
4
4
  * is-extendable <https://github.com/jonschlinkert/is-extendable>