shadow-claw 1.51.0 → 1.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +10 -10
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/{chunk-Dtse8rAn.js → chunk-5ryVpyup.js} +1 -1
  6. package/dist/cli/chunk-Aq3057Xo.js +1 -0
  7. package/dist/cli/{chunk-4CZJpLqA.js → chunk-BV9JBYpl.js} +2 -2
  8. package/dist/cli/{chunk-mbFAP9Ev.js → chunk-BZI3bWDA.js} +1 -1
  9. package/dist/cli/chunk-BaUCHRPD.js +1 -0
  10. package/dist/cli/{chunk-vzUrhBN5.js → chunk-BdbEt6gM.js} +1 -1
  11. package/dist/cli/{chunk-DYq-orHK.js → chunk-BgTv9w0K.js} +1 -1
  12. package/dist/cli/{chunk-BU8UG4L_.js → chunk-BiWLawPV.js} +1 -1
  13. package/dist/cli/chunk-BkLnHJeo.js +1 -0
  14. package/dist/cli/{chunk-BqfPWIBf.js → chunk-BzWY1sKE.js} +1 -1
  15. package/dist/cli/{chunk-DajM7Kro.js → chunk-C79eIU-4.js} +1 -1
  16. package/dist/cli/{chunk-CI9r1AM5.js → chunk-CDw214Zi.js} +1 -1
  17. package/dist/cli/chunk-CNqc7LLn.js +1 -0
  18. package/dist/cli/{chunk-CEhU-Ah-.js → chunk-CWW7dqIv.js} +1 -1
  19. package/dist/cli/{chunk-BT_C3OlA.js → chunk-CcSTYHtR.js} +1 -1
  20. package/dist/cli/chunk-ClOfk6Ga.js +1 -0
  21. package/dist/cli/chunk-ComXUwW0.js +1 -0
  22. package/dist/cli/{chunk-lL1BhHVe.js → chunk-CooeO4UQ.js} +1 -1
  23. package/dist/cli/{chunk-khr7--yI.js → chunk-CtfWY4G6.js} +1 -1
  24. package/dist/cli/{chunk-C4iW1XuQ.js → chunk-DFgSiYMW.js} +1 -1
  25. package/dist/cli/chunk-DGBnjngK.js +1 -0
  26. package/dist/cli/{chunk-D7bFIUK3.js → chunk-DGu1OhJs.js} +1 -1
  27. package/dist/cli/{chunk-CzfOerQR.js → chunk-DIjCY0Wf.js} +1 -1
  28. package/dist/cli/{chunk-D-iqEY5G.js → chunk-DJ_LeQtz.js} +1 -1
  29. package/dist/cli/{chunk-BmEsDkRK.js → chunk-DQRu-9wO.js} +1 -1
  30. package/dist/cli/{chunk-DojiYody.js → chunk-DToVgO9a.js} +1 -1
  31. package/dist/cli/{chunk-De5a_Rlp.js → chunk-DVbNkQRL.js} +1 -1
  32. package/dist/cli/{chunk-c8MIYB2y.js → chunk-Ddtzaj43.js} +1 -1
  33. package/dist/cli/{chunk-aJ6fufe-.js → chunk-DiqS56rD.js} +1 -1
  34. package/dist/cli/{chunk-CeUEmZNt.js → chunk-DnRcu9b4.js} +1 -1
  35. package/dist/cli/chunk-DtgZDsJA.js +1 -0
  36. package/dist/cli/{chunk-DVMcK7g6.js → chunk-Du4qvxo_.js} +2 -2
  37. package/dist/cli/{chunk-CegcvNc9.js → chunk-Dz5_hgvL.js} +8 -8
  38. package/dist/cli/{chunk-Cd4Dv5Eq.js → chunk-I3mxEelq.js} +1 -1
  39. package/dist/cli/{chunk-Do3VICh1.js → chunk-IU2SH_ti.js} +1 -1
  40. package/dist/cli/{chunk-BQveaAaD.js → chunk-NC8XsSSA.js} +1 -1
  41. package/dist/cli/{chunk-D702W_Ry.js → chunk-Q4BZ9QN9.js} +1 -1
  42. package/dist/cli/chunk-WTlDd4Ou.js +1 -0
  43. package/dist/cli/chunk-XGzq5joC.js +1 -0
  44. package/dist/cli/{chunk-ar7eAlxK.js → chunk-aJfaGe2s.js} +8 -8
  45. package/dist/cli/chunk-bPVrFlmk.js +1 -0
  46. package/dist/cli/{chunk-C6jii2Fl.js → chunk-d5hIhj8t.js} +1 -1
  47. package/dist/cli/chunk-jXJHKxdR.js +1 -0
  48. package/dist/cli/{chunk-C3dTAmV_.js → chunk-rstVU7U0.js} +1 -1
  49. package/dist/cli/{chunk-DGfTzQui.js → chunk-t72uObQ7.js} +1 -1
  50. package/dist/cli/{chunk-DDgfljzN.js → chunk-vq8xlroY.js} +1 -1
  51. package/dist/cli/cli.js +1 -1
  52. package/dist/headless-agent.js +1 -1
  53. package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
  54. package/dist/lib/components/index.js +27 -27
  55. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  57. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  58. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  59. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  60. package/dist/lib/components/settings/shadow-claw-llm/model-ranking.d.ts +12 -0
  61. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  63. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  64. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  65. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  66. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  67. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  68. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  69. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  70. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  71. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  72. package/dist/lib/components/shadow-claw-channels.js +1 -1
  73. package/dist/lib/components/shadow-claw-chat/shadow-claw-chat.d.ts +1 -0
  74. package/dist/lib/components/shadow-claw-chat.js +1 -1
  75. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  76. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  77. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  78. package/dist/lib/components/shadow-claw-files.js +1 -1
  79. package/dist/lib/components/shadow-claw-git.js +1 -1
  80. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  81. package/dist/lib/components/shadow-claw-llm.js +1 -1
  82. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  83. package/dist/lib/components/shadow-claw-networking.js +1 -1
  84. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  85. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  86. package/dist/lib/components/shadow-claw-pages.js +1 -1
  87. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  88. package/dist/lib/components/shadow-claw-provider-model-picker.js +1 -1
  89. package/dist/lib/components/shadow-claw-settings.js +1 -1
  90. package/dist/lib/components/shadow-claw-storage.js +1 -1
  91. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  92. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  93. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  94. package/dist/lib/components/shadow-claw-tools.js +1 -1
  95. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  96. package/dist/lib/components/shadow-claw.js +1 -1
  97. package/dist/lib/config/config.d.ts +2 -1
  98. package/dist/lib/{config-DxDaVDTn.js → config-DFLs7eoC.js} +3 -2
  99. package/dist/lib/config-DFLs7eoC.js.map +1 -0
  100. package/dist/lib/{configurePeerJs-ScwZiGbF.js → configurePeerJs-DJ0H6e6s.js} +3 -3
  101. package/dist/lib/{configurePeerJs-ScwZiGbF.js.map → configurePeerJs-DJ0H6e6s.js.map} +1 -1
  102. package/dist/lib/{connections-D82zele0.js → connections-DT3nPylw.js} +2 -2
  103. package/dist/lib/{connections-D82zele0.js.map → connections-DT3nPylw.js.map} +1 -1
  104. package/dist/lib/{downloadGroupFile-D7-5y6NI.js → downloadGroupFile-DMnAiPj4.js} +2 -2
  105. package/dist/lib/{downloadGroupFile-D7-5y6NI.js.map → downloadGroupFile-DMnAiPj4.js.map} +1 -1
  106. package/dist/lib/{file-viewer-BMvvndPQ.js → file-viewer-OHmGC_l7.js} +5 -5
  107. package/dist/lib/{file-viewer-BMvvndPQ.js.map → file-viewer-OHmGC_l7.js.map} +1 -1
  108. package/dist/lib/{getGroupDir-BidwYPfP.js → getGroupDir-mTV2Iz2b.js} +3 -3
  109. package/dist/lib/{getGroupDir-BidwYPfP.js.map → getGroupDir-mTV2Iz2b.js.map} +1 -1
  110. package/dist/lib/{git-CXmWufWS.js → git-CGdKghMC.js} +3 -3
  111. package/dist/lib/{git-CXmWufWS.js.map → git-CGdKghMC.js.map} +1 -1
  112. package/dist/lib/index.js +28 -28
  113. package/dist/lib/{initChatSplitResize-tvUZ-wsp.js → initChatSplitResize-B8zHHQdm.js} +2 -2
  114. package/dist/lib/{initChatSplitResize-tvUZ-wsp.js.map → initChatSplitResize-B8zHHQdm.js.map} +1 -1
  115. package/dist/lib/{initControlPlane-Dnjkb-6J.js → initControlPlane-BczrlTf3.js} +14 -14
  116. package/dist/lib/{initControlPlane-Dnjkb-6J.js.map → initControlPlane-BczrlTf3.js.map} +1 -1
  117. package/dist/lib/{markdown-WCXar9C8.js → markdown-D-7Cjyye.js} +3 -3
  118. package/dist/lib/{markdown-WCXar9C8.js.map → markdown-D-7Cjyye.js.map} +1 -1
  119. package/dist/lib/{mcp-reconnect-WTOQONHZ.js → mcp-reconnect-Czf7QCCv.js} +2 -2
  120. package/dist/lib/{mcp-reconnect-WTOQONHZ.js.map → mcp-reconnect-Czf7QCCv.js.map} +1 -1
  121. package/dist/lib/{memoryStorage-Bo2Wpfmg.js → memoryStorage-CXyKsKMo.js} +2 -2
  122. package/dist/lib/{memoryStorage-Bo2Wpfmg.js.map → memoryStorage-CXyKsKMo.js.map} +1 -1
  123. package/dist/lib/model-ranking-Bo8CpGH1.js +116 -0
  124. package/dist/lib/model-ranking-Bo8CpGH1.js.map +1 -0
  125. package/dist/lib/{orchestrator-Crw4btGn.js → orchestrator-BK138MkV.js} +10 -10
  126. package/dist/lib/{orchestrator-Crw4btGn.js.map → orchestrator-BK138MkV.js.map} +1 -1
  127. package/dist/lib/{orchestrator-Dro541iH.js → orchestrator-BtbxiPQB.js} +17 -16
  128. package/dist/lib/{orchestrator-Dro541iH.js.map → orchestrator-BtbxiPQB.js.map} +1 -1
  129. package/dist/lib/{peerjs-D741bHrf.js → peerjs-QJr03K9F.js} +7 -7
  130. package/dist/lib/{peerjs-D741bHrf.js.map → peerjs-QJr03K9F.js.map} +1 -1
  131. package/dist/lib/{prompt-api-D9XdrCep.js → prompt-api-vf351sf2.js} +2 -19
  132. package/dist/lib/{prompt-api-D9XdrCep.js.map → prompt-api-vf351sf2.js.map} +1 -1
  133. package/dist/lib/{push-client-DKFUY_Ti.js → push-client-BOHgqHbk.js} +4 -4
  134. package/dist/lib/{push-client-DKFUY_Ti.js.map → push-client-BOHgqHbk.js.map} +1 -1
  135. package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js → readGroupFileBytes-CRA6dmgT.js} +2 -2
  136. package/dist/lib/{readGroupFileBytes-C8Xqlb8l.js.map → readGroupFileBytes-CRA6dmgT.js.map} +1 -1
  137. package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js → shadow-claw-a2ui-DbZa4Gxp.js} +2 -2
  138. package/dist/lib/{shadow-claw-a2ui-CPydWVdW.js.map → shadow-claw-a2ui-DbZa4Gxp.js.map} +1 -1
  139. package/dist/lib/{shadow-claw-accounts-CUypXc3I.js → shadow-claw-accounts-B6OW2NVD.js} +3 -3
  140. package/dist/lib/{shadow-claw-accounts-CUypXc3I.js.map → shadow-claw-accounts-B6OW2NVD.js.map} +1 -1
  141. package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js → shadow-claw-channel-config-F_EJ-uK2.js} +3 -3
  142. package/dist/lib/{shadow-claw-channel-config-D_Vb2ous.js.map → shadow-claw-channel-config-F_EJ-uK2.js.map} +1 -1
  143. package/dist/lib/{shadow-claw-channels-hgjjzvRr.js → shadow-claw-channels-XYylMpjg.js} +3 -3
  144. package/dist/lib/{shadow-claw-channels-hgjjzvRr.js.map → shadow-claw-channels-XYylMpjg.js.map} +1 -1
  145. package/dist/lib/{shadow-claw-chat-D69IiLXd.js → shadow-claw-chat-dbK_DGO_.js} +124 -38
  146. package/dist/lib/shadow-claw-chat-dbK_DGO_.js.map +1 -0
  147. package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js → shadow-claw-control-plane-BJKkmahQ.js} +7 -7
  148. package/dist/lib/{shadow-claw-control-plane-zBYlFvzQ.js.map → shadow-claw-control-plane-BJKkmahQ.js.map} +1 -1
  149. package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js → shadow-claw-conversations-BKSsMYTc.js} +6 -6
  150. package/dist/lib/{shadow-claw-conversations-1GW8_e8o.js.map → shadow-claw-conversations-BKSsMYTc.js.map} +1 -1
  151. package/dist/lib/{shadow-claw-D3z3tFyE.js → shadow-claw-eBB2dbpd.js} +11 -11
  152. package/dist/lib/{shadow-claw-D3z3tFyE.js.map → shadow-claw-eBB2dbpd.js.map} +1 -1
  153. package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js → shadow-claw-file-viewer-BqChtTvM.js} +8 -8
  154. package/dist/lib/{shadow-claw-file-viewer-DI4r7Th9.js.map → shadow-claw-file-viewer-BqChtTvM.js.map} +1 -1
  155. package/dist/lib/{shadow-claw-files-BM7qW3TW.js → shadow-claw-files-Bu7VCQw6.js} +9 -9
  156. package/dist/lib/{shadow-claw-files-BM7qW3TW.js.map → shadow-claw-files-Bu7VCQw6.js.map} +1 -1
  157. package/dist/lib/{shadow-claw-git-BBTiTYIn.js → shadow-claw-git-CdPPN6Qb.js} +6 -6
  158. package/dist/lib/{shadow-claw-git-BBTiTYIn.js.map → shadow-claw-git-CdPPN6Qb.js.map} +1 -1
  159. package/dist/lib/{shadow-claw-integrations-DTY3E545.js → shadow-claw-integrations-DehqBSRe.js} +4 -4
  160. package/dist/lib/{shadow-claw-integrations-DTY3E545.js.map → shadow-claw-integrations-DehqBSRe.js.map} +1 -1
  161. package/dist/lib/{shadow-claw-llm-AJwzkOGo.js → shadow-claw-llm-COZkufA8.js} +13 -11
  162. package/dist/lib/shadow-claw-llm-COZkufA8.js.map +1 -0
  163. package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js → shadow-claw-mcp-remote-axF50-le.js} +4 -4
  164. package/dist/lib/{shadow-claw-mcp-remote-n7YXKxmv.js.map → shadow-claw-mcp-remote-axF50-le.js.map} +1 -1
  165. package/dist/lib/{shadow-claw-networking-B3leDgZ4.js → shadow-claw-networking-BT_Rxj36.js} +2 -2
  166. package/dist/lib/{shadow-claw-networking-B3leDgZ4.js.map → shadow-claw-networking-BT_Rxj36.js.map} +1 -1
  167. package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js → shadow-claw-notifications-ClqAXDDN.js} +3 -3
  168. package/dist/lib/{shadow-claw-notifications-Bm2aHQ0U.js.map → shadow-claw-notifications-ClqAXDDN.js.map} +1 -1
  169. package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js → shadow-claw-page-header-bigC_h6U.js} +2 -2
  170. package/dist/lib/{shadow-claw-page-header-BBqSWlhP.js.map → shadow-claw-page-header-bigC_h6U.js.map} +1 -1
  171. package/dist/lib/{shadow-claw-pages-BFOcluFY.js → shadow-claw-pages-CjHS50HN.js} +10 -10
  172. package/dist/lib/{shadow-claw-pages-BFOcluFY.js.map → shadow-claw-pages-CjHS50HN.js.map} +1 -1
  173. package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js → shadow-claw-peerjs-CvcH2DkA.js} +3 -3
  174. package/dist/lib/{shadow-claw-peerjs-BvD_MH_l.js.map → shadow-claw-peerjs-CvcH2DkA.js.map} +1 -1
  175. package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js → shadow-claw-provider-model-picker-fcVQdDtQ.js} +2 -2
  176. package/dist/lib/{shadow-claw-provider-model-picker-CsA-507a.js.map → shadow-claw-provider-model-picker-fcVQdDtQ.js.map} +1 -1
  177. package/dist/lib/{shadow-claw-settings-CZgGMz0a.js → shadow-claw-settings-CkO6JjA4.js} +6 -6
  178. package/dist/lib/{shadow-claw-settings-CZgGMz0a.js.map → shadow-claw-settings-CkO6JjA4.js.map} +1 -1
  179. package/dist/lib/{shadow-claw-storage-BTUpEKO0.js → shadow-claw-storage-10w-y8vL.js} +5 -5
  180. package/dist/lib/{shadow-claw-storage-BTUpEKO0.js.map → shadow-claw-storage-10w-y8vL.js.map} +1 -1
  181. package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js → shadow-claw-task-server-U98sZxPu.js} +2 -2
  182. package/dist/lib/{shadow-claw-task-server-B1X2AYyZ.js.map → shadow-claw-task-server-U98sZxPu.js.map} +1 -1
  183. package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js → shadow-claw-tasks-DrSVUOsP.js} +8 -8
  184. package/dist/lib/{shadow-claw-tasks-BYtaRUAd.js.map → shadow-claw-tasks-DrSVUOsP.js.map} +1 -1
  185. package/dist/lib/{shadow-claw-terminal-LGuXKu77.js → shadow-claw-terminal-B7HYLuce.js} +2 -2
  186. package/dist/lib/{shadow-claw-terminal-LGuXKu77.js.map → shadow-claw-terminal-B7HYLuce.js.map} +1 -1
  187. package/dist/lib/{shadow-claw-tools-C_S-xXVG.js → shadow-claw-tools-BKrXzZfF.js} +7 -7
  188. package/dist/lib/{shadow-claw-tools-C_S-xXVG.js.map → shadow-claw-tools-BKrXzZfF.js.map} +1 -1
  189. package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js → shadow-claw-webvm-Duwa5oiW.js} +3 -3
  190. package/dist/lib/{shadow-claw-webvm-Cab1n1bu.js.map → shadow-claw-webvm-Duwa5oiW.js.map} +1 -1
  191. package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js → syncWebMcpRegistration-BOx-0F6_.js} +5 -5
  192. package/dist/lib/{syncWebMcpRegistration-Dy5NS_4G.js.map → syncWebMcpRegistration-BOx-0F6_.js.map} +1 -1
  193. package/dist/lib/{tools-B7gC1eb_.js → tools-BEuBatUs.js} +4 -4
  194. package/dist/lib/{tools-B7gC1eb_.js.map → tools-BEuBatUs.js.map} +1 -1
  195. package/dist/lib/utils/index.js +1 -1
  196. package/dist/lib/utils/utils.js +1 -1
  197. package/dist/lib/{utils-D_ylqOY-.js → utils-D8AxCH6m.js} +2 -2
  198. package/dist/lib/{utils-D_ylqOY-.js.map → utils-D8AxCH6m.js.map} +1 -1
  199. package/dist/lib/{webmcp-CkYINKJj.js → webmcp-BjfVWX1K.js} +2 -2
  200. package/dist/lib/{webmcp-CkYINKJj.js.map → webmcp-BjfVWX1K.js.map} +1 -1
  201. package/dist/public/.well-known/mcp/server-card.json +1 -1
  202. package/dist/public/.well-known/mcp.json +1 -1
  203. package/dist/public/AGENTS.md +1 -1
  204. package/dist/public/README.md +10 -10
  205. package/dist/public/agent.worker.js +1 -1
  206. package/dist/public/components/shadow-claw-chat/shadow-claw-chat.html +1 -1
  207. package/dist/public/config-071HSho8.js +1 -0
  208. package/dist/public/{configurePeerJs-DQQ6YL-5.js → configurePeerJs-DL-LurJY.js} +1 -1
  209. package/dist/public/{connections-CRNk2FxF.js → connections-Bb0rBpV-.js} +1 -1
  210. package/dist/public/{custom-element-security-3_FKCXcg.js → custom-element-security-Td4vrRc_.js} +1 -1
  211. package/dist/public/docs/README.md +1 -1
  212. package/dist/public/docs/architecture/orchestrator.md +2 -2
  213. package/dist/public/docs/architecture/overview.md +3 -3
  214. package/dist/public/docs/architecture/worker-protocol.md +29 -29
  215. package/dist/public/docs/example/article/index.html +1 -1
  216. package/dist/public/docs/example/article.html +1 -1
  217. package/dist/public/docs/publishing/index.html +1 -1
  218. package/dist/public/docs/publishing.html +1 -1
  219. package/dist/public/docs/skill-creator/index.html +1 -1
  220. package/dist/public/docs/skill-creator.html +1 -1
  221. package/dist/public/docs/subsystems/local-models.md +1 -1
  222. package/dist/public/docs/subsystems/providers.md +12 -5
  223. package/dist/public/{downloadGroupFile-wkdhVgrZ.js → downloadGroupFile-Unq8_7D9.js} +1 -1
  224. package/dist/public/e2e/README.md +2 -2
  225. package/dist/public/{e2e-bridge-DnFHPuwg.js → e2e-bridge-Dbc9fCDq.js} +1 -1
  226. package/dist/public/{file-viewer-C92v4Ggd.js → file-viewer-QkCuknFn.js} +1 -1
  227. package/dist/public/{getGroupDir-BGGIJL4Y.js → getGroupDir-Bj5XCflQ.js} +1 -1
  228. package/dist/public/{git-BH6qyToB.js → git-Bhz4YHc8.js} +2 -2
  229. package/dist/public/index.html +1 -1
  230. package/dist/public/index.js +1 -1
  231. package/dist/public/{initChatSplitResize--RH5kzVF.js → initChatSplitResize-KNL9Oh7s.js} +1 -1
  232. package/dist/public/{initControlPlane-yPJ3ajkj.js → initControlPlane-D2fVhRFC.js} +1 -1
  233. package/dist/public/llms.txt +1 -1
  234. package/dist/public/main/index.html +1 -1
  235. package/dist/public/main/memory/index.html +1 -1
  236. package/dist/public/main/memory.html +1 -1
  237. package/dist/public/main.html +1 -1
  238. package/dist/public/{markdown-CA0v11cd.js → markdown-By6gdUvF.js} +1 -1
  239. package/dist/public/{mcp-reconnect-uyNSigzu.js → mcp-reconnect-CDRJPuoN.js} +1 -1
  240. package/dist/public/{memoryStorage-DjPNAT5t.js → memoryStorage-C-ao9y-j.js} +1 -1
  241. package/dist/public/model-ranking-DUdrFOcC.js +1 -0
  242. package/dist/public/{orchestrator-DTzgyL23.js → orchestrator-B7MpomoG.js} +2 -2
  243. package/dist/public/{orchestrator-Cmr69pMC.js → orchestrator-C8aIHbDy.js} +2 -2
  244. package/dist/public/{peerjs-Br38mUFC.js → peerjs-DwGjY5VX.js} +1 -1
  245. package/dist/public/prompt-api-BWe_j3Wg.js +1 -0
  246. package/dist/public/{push-client-CB8haOGC.js → push-client-o8g5_EOe.js} +1 -1
  247. package/dist/public/service-worker.js +1 -1
  248. package/dist/public/{shadow-claw-RuFQ2Ej5.js → shadow-claw-T9oPpqxT.js} +2 -2
  249. package/dist/public/{shadow-claw-accounts-BMsEItB6.js → shadow-claw-accounts-BbNPiiaV.js} +1 -1
  250. package/dist/public/{shadow-claw-channels-Q_AXuEaI.js → shadow-claw-channels-CHGtPkfY.js} +1 -1
  251. package/dist/public/{shadow-claw-chat-DZQ3OaH7.js → shadow-claw-chat-3TmjJA6-.js} +90 -23
  252. package/dist/public/{shadow-claw-control-plane-CyXA8tB8.js → shadow-claw-control-plane-BAFT06LL.js} +2 -2
  253. package/dist/public/{shadow-claw-conversations-BLKtlvHe.js → shadow-claw-conversations-DsQ_kxWm.js} +1 -1
  254. package/dist/public/{shadow-claw-file-viewer-CVLDfpZe.js → shadow-claw-file-viewer-hBxTknL2.js} +1 -1
  255. package/dist/public/{shadow-claw-files-DB6VVjir.js → shadow-claw-files-Daw6IIrJ.js} +1 -1
  256. package/dist/public/{shadow-claw-git-D57bTSMF.js → shadow-claw-git-CxGwyxim.js} +2 -2
  257. package/dist/public/{shadow-claw-integrations-BOwhUY-4.js → shadow-claw-integrations-DnIr6xp-.js} +1 -1
  258. package/dist/public/{shadow-claw-llm-CYenm-mm.js → shadow-claw-llm-Bc6tZ8kk.js} +3 -3
  259. package/dist/public/{shadow-claw-mcp-remote-CJ-Ckl0j.js → shadow-claw-mcp-remote-nGPpFpI-.js} +1 -1
  260. package/dist/public/{shadow-claw-networking-Cut76YQL.js → shadow-claw-networking-B6YgtiA7.js} +1 -1
  261. package/dist/public/{shadow-claw-notifications-C3kYCrIa.js → shadow-claw-notifications-BSxifptS.js} +1 -1
  262. package/dist/public/{shadow-claw-page-header-Dd7QafUk.js → shadow-claw-page-header-LzVgEn46.js} +1 -1
  263. package/dist/public/{shadow-claw-pages-BWtVtwTG.js → shadow-claw-pages-IW_LNEL_.js} +2 -2
  264. package/dist/public/{shadow-claw-settings-Bj7jnngO.js → shadow-claw-settings-DGkwt1ge.js} +2 -2
  265. package/dist/public/{shadow-claw-storage-CMSzQs1-.js → shadow-claw-storage-DX_4T7KR.js} +1 -1
  266. package/dist/public/{shadow-claw-task-server-CFclo7UX.js → shadow-claw-task-server-DTsbEs5z.js} +1 -1
  267. package/dist/public/{shadow-claw-tasks-ClDdeB6Z.js → shadow-claw-tasks-rr6fMxAM.js} +1 -1
  268. package/dist/public/{shadow-claw-terminal-3ysWZJix.js → shadow-claw-terminal-C7DhrrX6.js} +1 -1
  269. package/dist/public/{shadow-claw-tools-DQVwpTcZ.js → shadow-claw-tools-DcQroojH.js} +1 -1
  270. package/dist/public/{shadow-claw-webvm-Cnxz04Fk.js → shadow-claw-webvm-bZj44Did.js} +1 -1
  271. package/dist/public/{syncWebMcpRegistration-QwnLMAK3.js → syncWebMcpRegistration-XJjIlDNO.js} +1 -1
  272. package/dist/public/{tools-DvQ_ngXn.js → tools-BpZh7hgB.js} +1 -1
  273. package/dist/public/{webmcp-CJymew4t.js → webmcp-CkfDZfZ0.js} +1 -1
  274. package/dist/server.js +1 -1
  275. package/package.json +1 -1
  276. package/src/cli/build/build.test.ts +95 -0
  277. package/src/cli/build/build.ts +5 -1
  278. package/src/cli/commands/agent.test.ts +134 -0
  279. package/src/cli/commands/backup.test.ts +85 -0
  280. package/src/cli/commands/clients.test.ts +32 -0
  281. package/src/cli/commands/mcp.test.ts +260 -1
  282. package/src/cli/commands/send-file.test.ts +73 -0
  283. package/src/cli/commands/send.test.ts +58 -0
  284. package/src/cli/commands/tasks.test.ts +78 -0
  285. package/src/cli/commands/webrtc-listen.test.ts +74 -0
  286. package/src/cli/tools/assert-version-bump.test.ts +30 -1
  287. package/src/cli/tools/file-search-replace.test.ts +33 -1
  288. package/src/cli/tools/patch-service-worker-trusted-types.test.ts +24 -1
  289. package/src/cli/tools/touch-nojekyll.test.ts +12 -0
  290. package/src/cli/tools/version.test.ts +109 -5
  291. package/src/cli/utils/agent-core.test.ts +40 -0
  292. package/src/cli/utils/control-client.test.ts +239 -2
  293. package/src/cli/utils/load-workspace-config.test.ts +63 -0
  294. package/src/cli/utils/local-models.test.ts +98 -0
  295. package/src/cli/utils/progress-bar.test.ts +41 -2
  296. package/src/cli/utils/resolve-cache-dir.test.ts +61 -0
  297. package/src/cli/utils/resolve-project-root.test.ts +17 -0
  298. package/src/cli/utils/stdin.test.ts +38 -0
  299. package/src/cli/utils/stdio.test.ts +51 -1
  300. package/src/cli/utils/suppress-warnings.test.ts +9 -0
  301. package/src/cli/utils/webrtc-control-client.test.ts +569 -0
  302. package/src/common/utils/frontmatter.test.ts +117 -0
  303. package/src/components/common/help/providers.test.ts +67 -0
  304. package/src/components/common/shadow-claw-provider-model-picker/shadow-claw-provider-model-picker.test.ts +121 -0
  305. package/src/components/settings/shadow-claw-accounts/shadow-claw-accounts.test.ts +131 -0
  306. package/src/components/settings/shadow-claw-git/shadow-claw-git.test.ts +130 -0
  307. package/src/components/settings/shadow-claw-integrations/connection-test-auth.test.ts +12 -0
  308. package/src/components/settings/shadow-claw-integrations/shadow-claw-integrations.test.ts +328 -0
  309. package/src/components/settings/shadow-claw-llm/model-ranking.test.ts +121 -7
  310. package/src/components/settings/shadow-claw-llm/model-ranking.ts +97 -0
  311. package/src/components/settings/shadow-claw-llm/shadow-claw-llm.test.ts +565 -8
  312. package/src/components/settings/shadow-claw-llm/shadow-claw-llm.ts +15 -5
  313. package/src/components/settings/shadow-claw-mcp-remote/shadow-claw-mcp-remote.test.ts +459 -0
  314. package/src/components/settings/shadow-claw-networking/shadow-claw-networking.test.ts +88 -0
  315. package/src/components/settings/shadow-claw-notifications/shadow-claw-notifications.test.ts +92 -0
  316. package/src/components/settings/shadow-claw-peerjs/shadow-claw-peerjs.test.ts +127 -0
  317. package/src/components/settings/shadow-claw-storage/shadow-claw-storage.test.ts +173 -0
  318. package/src/components/settings/shadow-claw-task-server/shadow-claw-task-server.test.ts +62 -0
  319. package/src/components/settings/shadow-claw-webvm/shadow-claw-webvm.test.ts +104 -0
  320. package/src/components/shadow-claw/shadow-claw.test.ts +112 -0
  321. package/src/components/shadow-claw-a2ui/shadow-claw-a2ui.test.ts +109 -0
  322. package/src/components/shadow-claw-chat/shadow-claw-chat.html +81 -14
  323. package/src/components/shadow-claw-chat/shadow-claw-chat.test.ts +73 -0
  324. package/src/components/shadow-claw-chat/shadow-claw-chat.trusted-types.test.ts +3 -0
  325. package/src/components/shadow-claw-chat/shadow-claw-chat.ts +79 -32
  326. package/src/components/shadow-claw-conversations/shadow-claw-conversations.test.ts +361 -0
  327. package/src/components/shadow-claw-dialog/shadow-claw-dialog.test.ts +76 -0
  328. package/src/components/shadow-claw-file-viewer/shadow-claw-file-viewer.test.ts +307 -0
  329. package/src/components/shadow-claw-files/shadow-claw-files.test.ts +398 -1
  330. package/src/components/shadow-claw-pages/shadow-claw-pages.test.ts +85 -0
  331. package/src/components/shadow-claw-pages/shadow-claw-pages.ts +2 -1
  332. package/src/components/shadow-claw-pdf-viewer/shadow-claw-pdf-viewer.test.ts +229 -0
  333. package/src/components/shadow-claw-settings/shadow-claw-settings.test.ts +233 -0
  334. package/src/components/shadow-claw-tasks/shadow-claw-tasks.test.ts +223 -1
  335. package/src/components/shadow-claw-toast/shadow-claw-toast.test.ts +79 -0
  336. package/src/components/shadow-claw-tools/shadow-claw-tools.test.ts +229 -1
  337. package/src/config/config.test.ts +4 -4
  338. package/src/config/config.ts +2 -1
  339. package/src/core/orchestrator/orchestrator.test.ts +2 -1
  340. package/src/core/orchestrator/utils/initTasks.ts +5 -4
  341. package/src/server/logger.test.ts +57 -0
  342. package/src/server/peer.test.ts +47 -0
  343. package/src/server/routes/gemini.test.ts +244 -0
  344. package/src/server/server-peer.test.ts +245 -11
  345. package/src/server/services/llamafile-manager.test.ts +668 -0
  346. package/src/share-target/pending-shares.test.ts +90 -0
  347. package/src/shell/fs.test.ts +125 -0
  348. package/src/shell/shell.test.ts +8 -0
  349. package/src/subsystems/git/credentials.test.ts +260 -0
  350. package/src/subsystems/git/git.test.ts +64 -0
  351. package/src/subsystems/providers/executeNativeAiTask.test.ts +78 -0
  352. package/src/subsystems/providers/utils/parseLocalModelToolCall.test.ts +57 -0
  353. package/src/worker/tools/builtin-ai/builtin-ai.test.ts +88 -0
  354. package/src/worker/tools/email/email.test.ts +358 -0
  355. package/src/worker/tools/email/utils/resolveIntegrationEmailAuth.test.ts +120 -0
  356. package/src/worker/tools/email/utils/resolveUniqueAttachmentPath.test.ts +80 -0
  357. package/src/worker/tools/fetch-file/fetch-file.test.ts +111 -0
  358. package/src/worker/tools/fetch-url/fetch-url.test.ts +295 -0
  359. package/dist/cli/chunk-B3S061IE.js +0 -1
  360. package/dist/cli/chunk-BUJdF9o3.js +0 -1
  361. package/dist/cli/chunk-BX0R2gIY.js +0 -1
  362. package/dist/cli/chunk-BoiPfhwJ.js +0 -1
  363. package/dist/cli/chunk-BtJYj7vB.js +0 -1
  364. package/dist/cli/chunk-BwXrZVeU.js +0 -1
  365. package/dist/cli/chunk-CaWh9Pru.js +0 -1
  366. package/dist/cli/chunk-Ck4ePI8z.js +0 -1
  367. package/dist/cli/chunk-Ctg-SXcP.js +0 -1
  368. package/dist/cli/chunk-DTKv1-tk.js +0 -1
  369. package/dist/cli/chunk-DdYpd9Nu.js +0 -1
  370. package/dist/cli/chunk-DflhmBY2.js +0 -1
  371. package/dist/lib/config-DxDaVDTn.js.map +0 -1
  372. package/dist/lib/model-ranking-CDXs7hkK.js +0 -57
  373. package/dist/lib/model-ranking-CDXs7hkK.js.map +0 -1
  374. package/dist/lib/shadow-claw-chat-D69IiLXd.js.map +0 -1
  375. package/dist/lib/shadow-claw-llm-AJwzkOGo.js.map +0 -1
  376. package/dist/public/config-Dqn5OMfC.js +0 -1
  377. package/dist/public/model-ranking-DLIC9IDU.js +0 -1
  378. package/dist/public/prompt-api-B-8N-MRY.js +0 -11
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
3
3
  "name": "shadow-claw",
4
- "version": "1.51.0",
4
+ "version": "1.52.1",
5
5
  "description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
6
6
  "title": "ShadowClaw MCP Server",
7
7
  "websiteUrl": "https://xt-ml.github.io/shadow-claw/",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1.json",
3
3
  "name": "shadow-claw",
4
- "version": "1.51.0",
4
+ "version": "1.52.1",
5
5
  "description": "Multi-runtime AI assistant with local and remote LLM orchestration, Web Workers, OPFS storage, and agentic tool execution.",
6
6
  "title": "ShadowClaw MCP Server",
7
7
  "websiteUrl": "https://xt-ml.github.io/shadow-claw/",
@@ -139,7 +139,7 @@ Markdown and HTML preview work should preserve the Settings-backed iframe host a
139
139
  - **Chat Templates**: Local providers use dynamic Jinja templating (`chat_template.jinja`) fetched with the tokenizer via the Hugging Face API. Do not hardcode chat templates.
140
140
  - **Unified Local Model Tool Calling**: Tool call formatting and extraction across local models (both the server proxy route in `src/server/routes/transformers-js.ts` and in-process Node execution in `src/worker/tools/node-transformers-executor.ts`) are unified via `parseLocalModelToolCalls` (`src/subsystems/providers/utils/parseLocalModelToolCall.ts`), supporting multi-tool calls, Gemma 4 `call:` syntax, and defensive schema sanitization. Token streaming suppresses raw tool call syntax via `createToolCallStreamFilter`. In headless mode, `handleInvoke` preserves and forwards formatted messages with the system prompt to in-process local executors (`node-transformers-executor.ts` and `node-llamafile-executor.ts`), and `normalizeMessagesForChatTemplate` preserves tool call IDs and names on tool turns.
141
141
  - **Local Binary Driver Architecture & Tool Calling**: `LocalBinaryDriver` in `src/server/services/llamafile-manager.ts` manages local `.llamafile` and `.agentfile` binaries. Instruction-tuned Llamafile models (`supportsTools: true`) support tool calling in server mode (`/v1/chat/completions`), CLI prompt injection mode, and upstream proxy routes (`/llamafile-proxy/tools`). Autonomous Agentfile binaries (`agentfile`) execute internal tool loops with diagnostics on `stderr` and answers on `stdout`. On non-Windows platforms, processes are spawned via `/bin/sh` to avoid Linux `binfmt_misc`/`run-detectors` execution issues with APE binaries.
142
- - **Prompt API Degradation Ladder**: When native browser Prompt API (`window.LanguageModel`) is unavailable or reports `"no"` / `"unavailable"`, ShadowClaw degrades transparently to the local `transformers_js_local` model via `prompt-api-polyfill`, updating onboarding dialogs and chat cards accordingly.
142
+ - **In-Browser Default & Prompt API Degradation Ladder**: ShadowClaw defaults out-of-the-box in the browser client to Transformers.js (`transformers_js_browser` with default model `onnx-community/Qwen3-0.6B-ONNX`) and guided onboarding. When the Prompt API (`prompt_api`) is manually selected and native browser Prompt API (`window.LanguageModel`) is unavailable or reports `"no"` / `"unavailable"`, ShadowClaw degrades transparently to local ONNX execution via `prompt-api-polyfill` and `built-in-ai-task-apis-polyfills`, updating onboarding dialogs and chat cards accordingly.
143
143
 
144
144
  ### Static Main Site, Routing & Page Suppression
145
145
 
@@ -38,7 +38,7 @@ For external AI hosts, ShadowClaw provides multiple ways to interact with the br
38
38
  npx shadow-claw dev --open
39
39
  ```
40
40
 
41
- Open Settings, configure your preferred provider (or run with the default OpenRouter or Prompt API), and start chatting.
41
+ Open Settings, configure your preferred provider (or run with the default Transformers.js or OpenRouter), and start chatting.
42
42
 
43
43
  ### 2. Run Headless Server-Side Agent directly from Terminal
44
44
 
@@ -119,7 +119,7 @@ npm install && npm run dev # Dev server → http://localhost:8888
119
119
  ## Core Capabilities
120
120
 
121
121
  - **Client-Side Worker Orchestration:** The frontend agent decision loop, system prompt building, and tool execution run off the main thread in a dedicated Web Worker to keep the UI smooth and responsive.
122
- - **In-Browser Inference by Default:** Uses the Prompt API (`window.LanguageModel`) by default in the browser client (`DEFAULT_PROVIDER = "prompt_api"`) with guided onboarding. When native support is not present, integrated polyfills (`prompt-api-polyfill` and `built-in-ai-task-apis-polyfills` backed by Transformers.js / ONNX) enable cross-browser execution.
122
+ - **In-Browser Inference by Default:** Uses Transformers.js by default in the browser client (`DEFAULT_PROVIDER = "transformers_js_browser"`) with guided onboarding. Prompt API (`window.LanguageModel`) and integrated polyfills (`prompt-api-polyfill` and `built-in-ai-task-apis-polyfills`) remain fully supported when manually selected.
123
123
  - **Headless Server-Side Agent Client:** Execute the same tool-use loop, prompt assembly, and declarative skill tool chains directly from the terminal or CI/CD pipelines via `shadow-claw agent` (`init`, `model`, `skills`, `tools`, `tool`, `skill`, `import`, `run`), with native host OS shell access (`node:child_process`), SQLite persistence (`node:sqlite`), real filesystem access (`NodeFsDirectoryHandle`), and in-process offline model execution via Transformers.js ONNX and Llamafile (featuring visual download progress bars and streaming) or cloud providers.
124
124
  - **Configurable Multi-Model Routing:** Route queries to Cloud providers (OpenRouter, Anthropic, Gemini, OpenAI, AWS Bedrock), local engines (Ollama, Llamafile, Transformers.js with on-demand Hugging Face model downloading and disk caching), or in-browser WebGPU models (LiteRT-LM).
125
125
  - **Dual-Dispatch Sandboxing & Storage:** Client-side compute via sandboxed JavaScript and `just-bash` (or WebVM Alpine Linux) backed by Origin Private File System (OPFS) and IndexedDB; paired with host-native Node filesystem handles and SQLite database persistence on the server side.
@@ -201,11 +201,11 @@ Last-active conversation persists across reloads. On first launch, a default "Ma
201
201
 
202
202
  ShadowClaw supports multiple LLM providers with a unified adapter pattern and configurable defaults:
203
203
 
204
- | Category | Examples | Notes |
205
- | :---------- | :------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- |
206
- | **Cloud** | OpenRouter, OpenAI, Anthropic, Google Gemini, AWS Bedrock, Vertex AI | Defaults out-of-the-box to OpenRouter (`openrouter/free`); API key required |
207
- | **Local** | Ollama, Llamafile, Agentfile, Mesh LLM, Transformers.js | Runs on local server or in-process; automatic Hugging Face model downloading & LocalBinaryDriver execution |
208
- | **Browser** | Prompt API (`window.LanguageModel`), LiteRT | WebGPU in-browser inference with transparent CPU/WASM polyfills |
204
+ | Category | Examples | Notes |
205
+ | :---------- | :--------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
206
+ | **Cloud** | OpenRouter, OpenAI, Anthropic, Google Gemini, AWS Bedrock, Vertex AI | Defaults out-of-the-box to OpenRouter (`openrouter/free`); API key required |
207
+ | **Local** | Ollama, Llamafile, Agentfile, Mesh LLM, Transformers.js | Runs on local server or in-process; automatic Hugging Face model downloading & LocalBinaryDriver execution |
208
+ | **Browser** | Transformers.js (Browser), Prompt API (`window.LanguageModel`), LiteRT | Defaults out-of-the-box to Transformers.js (`onnx-community/Qwen3-0.6B-ONNX`); in-browser WebGPU inference with transparent CPU/WASM fallback |
209
209
 
210
210
  **Provider & Model Hierarchy:**
211
211
 
@@ -215,14 +215,14 @@ ShadowClaw resolves default LLM providers and models via a strict precedence cas
215
215
  2. **Environment Variable:** `SHADOW_CLAW_PROVIDER` / `SHADOW_CLAW_MODEL` (or provider-specific keys like `OPENROUTER_API_KEY`, `HUGGINGFACE_API_KEY`, `GEMINI_API_KEY`, `ANTHROPIC_API_KEY`)
216
216
  3. **Database Configuration:** `CONFIG_KEYS.PROVIDER` / `CONFIG_KEYS.MODEL`
217
217
  4. **Declarative Workspace Config:** `settings.defaultProvider` and `settings.defaultModel` in `shadow-claw.config.json`
218
- 5. **Default Fallback:** Defaults to Prompt API (`prompt_api`) in browser contexts (with onboarding dialog and task API polyfills), and OpenRouter (`openrouter` with model `openrouter/free`) for headless CLI agent execution.
218
+ 5. **Default Fallback:** Defaults to Transformers.js (`transformers_js_browser` with model `onnx-community/Qwen3-0.6B-ONNX`) in browser contexts (with guided onboarding), and OpenRouter (`openrouter` with model `openrouter/free`) for headless CLI agent execution.
219
219
 
220
220
  **Provider Highlights:**
221
221
 
222
- - **In-Browser Inference Default:** Defaults to Prompt API (`prompt_api`) with guided onboarding and task API polyfills, enabling local, private, and zero-configuration browser execution.
222
+ - **In-Browser Inference Default:** Defaults to Transformers.js (`transformers_js_browser`) with model `onnx-community/Qwen3-0.6B-ONNX` and guided onboarding, enabling private, local, zero-configuration in-browser execution with WebGPU acceleration and transparent CPU/WASM fallback.
223
223
  - **OpenRouter Default for Headless CLI:** Headless execution via `shadow-claw agent` defaults out-of-the-box to `openrouter` with `openrouter/free`.
224
224
  - **Local Models & Hugging Face Hub:** Automatic on-demand downloading from Hugging Face Hub, disk caching under `assets/cache/transformers.js` (and `assets/cache/llamafile` for Llamafile/Agentfile binaries), interactive paginated and searchable model browsing during `agent init`, and pre-warming endpoints (`POST /transformers-js-proxy/prewarm`). Unified local model tool calling (`parseLocalModelToolCalls`) supports multi-tool calling, Gemma 4 syntax, streaming tool-call suppression, and defensive schema sanitization across in-process Node executors and server proxy routes using OpenAI function schemas formatted directly for tokenizer chat templates. The `LocalBinaryDriver` architecture supports `.llamafile` and `.agentfile` execution with built-in tool schema catalogs and proxy forwarding. See [Local Models Guide](docs/subsystems/local-models.md).
225
- - **Prompt API & Polyfill Fallbacks:** In the browser client, uses native `window.LanguageModel` when available, with automatic degradation to local Transformers.js via `prompt-api-polyfill` and `built-in-ai-task-apis-polyfills` when the native Prompt API is unavailable.
225
+ - **Prompt API & Polyfill Fallbacks:** When Prompt API (`prompt_api`) is manually selected in the browser client, uses native `window.LanguageModel` when available, with automatic degradation to local Transformers.js via `prompt-api-polyfill` and `built-in-ai-task-apis-polyfills` when the native Prompt API is unavailable.
226
226
  - **Hardware Feature Probing & Fallbacks:** Probes WebGPU adapter capabilities (`shader-f16`), retries during downloads, and dynamically falls back to WebAssembly CPU (`device: "wasm"`, `dtype: "q4"`) if WebGPU initialization fails or software emulation is detected.
227
227
  - **Streaming & Resilience:** Streaming responses across OpenAI and Anthropic formats; adaptive rate limiting with `retry-after` handling and 30-second auto-closing, ARIA-accessible countdown dialogs for fatal errors and throttling.
228
228
 
@@ -1,4 +1,4 @@
1
- import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-DBVvNlSN.js";import{i,n as a,r as o,t as s}from"./txPromise-DlzJBj9N.js";import{t as c}from"./getConfig-DSieAlsi.js";const l=[{id:`claude-fable-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable-5.1`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-sonnet-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-4.8`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-haiku-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsPromptCaching:!0},{id:`claude-mythos-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-mythos`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`gpt-6-astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-sol`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-luna`,provider:`openai`,contextWindow:1e6,maxOutput:64e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-5`,provider:`openai`,contextWindow:4e5,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-pro`,provider:`google`,contextWindow:2097152,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.8-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-pro`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1}];let u;function d(e){u=e}function f(e){let t=e||u;if(t)for(let e of l)t.registerModelInfo(e.id,{contextWindow:e.contextWindow,maxOutput:e.maxOutput,supportsImageInput:e.supportsImages,supportsDocumentInput:e.supportsDocuments,...e.supportsAudio!==void 0&&{supportsAudioInput:e.supportsAudio},...e.supportsVideo!==void 0&&{supportsVideoInput:e.supportsVideo},...e.supportsPromptCaching!==void 0&&{supportsPromptCaching:e.supportsPromptCaching}})}const p=new class{loading=!1;models=/* @__PURE__ */ new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}seedStaticCatalog(){f(this)}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=this.modalitiesInclude(i,`document`,`pdf`,`file`)||(typeof e.supports_document_input==`boolean`?e.supports_document_input:typeof e.supportsDocumentInput==`boolean`?e.supportsDocumentInput:void 0),u=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),d=this.extractReasoning(e),f=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...l!==void 0&&{supportsDocumentInput:l},...d&&{reasoning:d},...u&&{routesByRequestFeatures:u},...f!==void 0&&{supportsPromptCaching:f}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(n.length!==0||r!==void 0||i!==void 0||a!==void 0||o!==void 0)return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};d(p);const m=`br:main`;function h(e){return e.replace(/^\/+|\/+$/g,``)}function g(e){let t=h(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),h(t)}function _(e){let t=h(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function v(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function y(e,t){let n=t||v();if(!n||!n.routes)return null;let r=g(e);for(let[e,t]of Object.entries(n.routes))if(t&&t.prettyPath&&g(t.prettyPath)===r)return _(e);return null}function b(e){if(!e)return null;if(typeof e==`object`)return typeof e.path==`string`&&e.path.trim().length>0?{groupId:e.groupId||m,path:e.path.trim()}:null;if(typeof e==`string`){let t=e.trim();if(!t)return null;try{let e=JSON.parse(t);if(e&&typeof e.path==`string`&&e.path.trim().length>0)return{groupId:e.groupId||m,path:e.path.trim()}}catch{}let n=_(t);if(n&&n.path)return{groupId:n.groupId||m,path:n.path};let r=h(t);if(r)return{groupId:m,path:r}}return null}let x=null;const S=/* @__PURE__ */ new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function C(){x=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=C);function w(){let e=typeof window<`u`?window:typeof self<`u`?self:globalThis;if(e&&e.__SHADOWCLAW_DEPLOY_ID__){let t=String(e.__SHADOWCLAW_DEPLOY_ID__).trim();if(t)return t.replace(/[^a-zA-Z0-9_-]/g,`-`)}let t=globalThis.process;if(t&&t.env&&t.env.SHADOWCLAW_DEPLOY_ID){let e=String(t.env.SHADOWCLAW_DEPLOY_ID).trim();if(e)return e.replace(/[^a-zA-Z0-9_-]/g,`-`)}let n=T();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function T(){if(x!==null)return x;if((typeof window>`u`||globalThis.WorkerGlobalScope!==void 0&&typeof self<`u`&&self instanceof globalThis.WorkerGlobalScope)&&typeof self<`u`&&self.location){let e=(self.location.pathname||`/`).split(`/`).filter(Boolean);if(e.length<=1)return x=`/`,x;let t=e[0].toLowerCase(),n=t===`service-worker.js`||t===`sw.js`||t===`manifest.json`||t===`sitemap.xml`||t===`favicon.ico`||t===`index.html`||t===`service-worker`||t===`assets`||t===`dist`||t===`public`;if(n&&e.length===2)return x=`/`,x;if(!n)return x=`/`+e[0]+`/`,x}let e=typeof window<`u`&&window.location?window.location:typeof self<`u`&&self.location?self.location:null;if(!e)return`/`;if(typeof document<`u`&&typeof document.querySelector==`function`){let t=document.querySelector(`base[href]`);if(t){let n=t.getAttribute(`href`);if(n)try{let t=new URL(n,e.origin).pathname;return t.endsWith(`/`)||(t+=`/`),x=t,x}catch{}}}let t=e.pathname||`/`;if(t===`/`)return x=`/`,x;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>S.has(e.toLowerCase()));return r>=0?r===0?(x=`/`,x):(x=`/`+n.slice(0,r).join(`/`)+`/`,x):y(t)?(x=`/`,x):n.length===1&&!t.includes(`.`)?(x=`/`+n[0]+`/`,x):(x=`/`,x)}function E(e){let t=T();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function D(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}D(`ShadowClaw`);const O=8192,ee=[{pattern:`claude-fable-5`,maxTokens:128e3},{pattern:`claude-fable`,maxTokens:128e3},{pattern:`claude-mythos-5`,maxTokens:128e3},{pattern:`claude-mythos`,maxTokens:128e3},{pattern:`claude-sonnet-5`,maxTokens:128e3},{pattern:`claude-opus-5`,maxTokens:128e3},{pattern:`claude-opus-4-8`,maxTokens:128e3},{pattern:`claude-opus-4`,maxTokens:128e3},{pattern:`claude-sonnet-4`,maxTokens:64e3},{pattern:`claude-haiku-5`,maxTokens:128e3},{pattern:`claude-haiku-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-6-luna`,maxTokens:64e3},{pattern:`gpt-6-sol`,maxTokens:128e3},{pattern:`gpt-6-astra`,maxTokens:128e3},{pattern:`astra`,maxTokens:128e3},{pattern:`gpt-6`,maxTokens:128e3},{pattern:`gpt-5`,maxTokens:128e3},{pattern:`gemini-3`,maxTokens:65536},{pattern:`gemini-2.5`,maxTokens:65536},{pattern:`gemini-2.0`,maxTokens:65536},{pattern:`gpt-4o`,maxTokens:16384},{pattern:`gpt-4.1`,maxTokens:32768},{pattern:`gpt-4-turbo`,maxTokens:4096},{pattern:`gpt-4`,maxTokens:8192},{pattern:`gpt-3.5`,maxTokens:4096},{pattern:`qwen-2.5`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`qwen3.5`,maxTokens:32768},{pattern:`Qwen3`,maxTokens:32768},{pattern:`qwen3`,maxTokens:32768},{pattern:`gemma-4`,maxTokens:16384},{pattern:`gemini-nano`,maxTokens:4096},{pattern:`phi-mini`,maxTokens:9216},{pattern:`aion`,maxTokens:9216},{pattern:`gemma-3-1b-it-ONNX-GQA`,maxTokens:32768},{pattern:`gemma-3-1b-it-ONNX`,maxTokens:32768},{pattern:`gemma-3`,maxTokens:32768},{pattern:`Qwen3-0.6B-ONNX`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`Llama-3.2`,maxTokens:32768},{pattern:`SmolLM`,maxTokens:8192},{pattern:`DeepSeek-R1`,maxTokens:32768},{pattern:`Phi-4`,maxTokens:16384},{pattern:`Phi-3.5`,maxTokens:16384},{pattern:`LFM2`,maxTokens:16384},{pattern:`gpt-oss`,maxTokens:32768},{pattern:`browser-built-in`,maxTokens:4096},{pattern:`mesh`,maxTokens:32768},{pattern:`openrouter/free`,maxTokens:32768},{pattern:`qwen3:8b`,maxTokens:4096},{pattern:`llama3:8b`,maxTokens:8192}];function k(e){if(!e)return O;let t=p.getModelInfo(e);if(t){if(typeof t.maxOutput==`number`){let e=t.contextWindow?Math.max(8192,Math.floor(t.contextWindow/2)):32768;return Math.min(t.maxOutput,e)}if(t.contextWindow){let e;return e=t.contextWindow>=2e5?131072:t.contextWindow>=1e5?65536:32768,Math.min(e,Math.floor(t.contextWindow/2))}}for(let{pattern:t,maxTokens:n}of ee)if(e.includes(t))return n;return O}const A=1800,j=`shadowclaw`;function te(){let e=w();return e?`shadowclaw-${e}`:j}te();const ne=`shadowclaw`,M=`br:main`,N={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}},re=Object.fromEntries(Object.values(N).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]}));Object.fromEntries(Object.values(N).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}]));const ie={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:`http://localhost:8888/bedrock-proxy/invoke`,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-5-v1:0`,modelsUrl:`http://localhost:8888/bedrock-proxy/models`,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:`http://localhost:8888/ollama-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:`http://localhost:8888/ollama-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:`http://localhost:8888/llamafile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:`http://localhost:8888/llamafile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},agentfile:{id:`agentfile`,name:`Agentfile (Local Binary)`,baseUrl:`http://localhost:8888/agentfile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`default.agentfile`,modelsUrl:`http://localhost:8888/agentfile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:`http://localhost:8888/transformers-js-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`http://localhost:8888/transformers-js-proxy/models`,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}};function P(e){return ie[e]||null}function ae(e){return`api_key:${e}`}function oe(e){return N[e]||null}function se(e,t,n=`http_api`){let r=oe(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}const F={ACTIVE_TOOL_PROFILE:`active_tool_profile`,ACTIVITY_LOG_DISK_LOGGING_ENABLED:`activity_log_disk_logging_enabled`,ALLOWED_CUSTOM_ELEMENTS:`allowed_custom_elements`,ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS:`allowed_custom_element_host_patterns`,ALLOWED_IFRAME_HOST_PATTERNS:`allowed_iframe_host_patterns`,API_KEY:`api_key`,ASSISTANT_NAME:`assistant_name`,BEDROCK_AUTH_MODE:`bedrock_auth_mode`,BEDROCK_PROFILE_FALLBACK:`bedrock_profile_fallback`,BEDROCK_REGION_FALLBACK:`bedrock_region_fallback`,BUILTIN_AI_SUBAGENT_ROUTING:`builtin_ai_subagent_routing`,BUILTIN_AI_TOOLS_BACKEND:`builtin_ai_tools_backend`,CHANNEL_ENABLED_PREFIX:`channel_enabled:`,CHAT_INPUT_AREA_HEIGHT:`chat_input_area_height`,CHAT_SPLIT_VIEW_ENABLED:`chat_split_view_enabled`,CHAT_SPLIT_VIEW_HEIGHT:`chat_split_view_height`,COMPACTION_ENGINE_PREFERENCE:`compaction_engine_preference`,CONTEXT_COMPRESSION_ENABLED:`context_compression_enabled`,CONTROL_PLANE_CLIENT_ID:`control_plane_client_id`,CONTROL_PLANE_ENABLED:`control_plane_enabled`,CONTROL_PLANE_TRANSPORT:`control_plane_transport`,CONTROL_PLANE_URL:`control_plane_url`,CONVERSATIONS_HEIGHT:`conversations_height`,CUSTOM_TOOLS:`custom_tools`,DB_MIGRATED_FROM_LEGACY:`db_migrated_from_legacy`,DECLARATIVE_TOOLS_ENABLED:`declarative_tools_enabled`,DEFAULT_PINNED_PAGE:`default_pinned_page`,DIRECT_TOOL_COMMAND_POLICY:`direct_tool_command_policy`,ENABLED_TOOLS:`enabled_tools`,FILES_UPLOAD_APPEND_ULID:`files_upload_append_ulid`,GIT_ACCOUNTS:`git_accounts`,GIT_AUTHOR_EMAIL:`git_author_email`,GIT_AUTHOR_NAME:`git_author_name`,GIT_CORS_PROXY:`git_cors_proxy`,GIT_DEFAULT_ACCOUNT:`git_default_account`,GIT_PASSWORD:`git_password`,GIT_PROXY_URL:`git_proxy_url`,GIT_TOKEN:`git_token`,GIT_USERNAME:`git_username`,IMESSAGE_API_KEY:`imessage_api_key`,IMESSAGE_CHAT_IDS:`imessage_chat_ids`,IMESSAGE_SERVER_URL:`imessage_server_url`,INTEGRATION_CONNECTIONS:`integration_connections`,MARKDOWN_FRONTMATTER_CHAT:`markdown_frontmatter_chat`,MARKDOWN_FRONTMATTER_FILE_VIEWER:`markdown_frontmatter_file_viewer`,MARKDOWN_FRONTMATTER_PAGES:`markdown_frontmatter_pages`,MARKDOWN_FRONTMATTER_TASKS:`markdown_frontmatter_tasks`,LAST_ACTIVE_GROUP:`last_active_group`,LAST_ACTIVE_PAGE:`last_active_page`,LAST_SELECTED_PINNED_PAGE:`last_selected_pinned_page`,LLAMAFILE_HOST:`llamafile_host`,LLAMAFILE_MODE:`llamafile_mode`,LLAMAFILE_OFFLINE:`llamafile_offline`,LLAMAFILE_PORT:`llamafile_port`,MAIN_GROUP_INDEX_SUPPRESSED:`main_group_index_suppressed`,MAIN_GROUP_README_SUPPRESSED:`main_group_readme_suppressed`,MAX_ITERATIONS:`max_iterations`,MAX_TOKENS:`max_tokens`,MESH_LLM_HOST:`mesh_llm_host`,MODEL:`model`,OAUTH_PROVIDER_DEFINITIONS:`oauth_provider_definitions`,OPFS_MIGRATED_FROM_LEGACY:`opfs_migrated_from_legacy`,OVERRIDE_PRERENDER_SKELETON:`override_prerender_skeleton`,PAGES_ALLOW_LIST:`pages_allow_list`,PAGES_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,PAGES_DENY_LIST:`pages_deny_list`,PAGES_LIST:`pages_list`,PASSPHRASE_SALT:`passphrase_salt`,PASSPHRASE_VERIFY:`passphrase_verify`,PROMPT_API_BACKEND:`prompt_api_backend`,PROMPT_API_DTYPE_STRATEGY:`prompt_api_dtype_strategy`,PROMPT_API_FALLBACK_MODEL:`prompt_api_fallback_model`,PROMPT_API_ONBOARDING_SEEN:`prompt_api_onboarding_seen`,PEERJS_MY_ALIAS:`peerjs_my_alias`,PEERJS_MY_PEER_ID:`peerjs_my_peer_id`,PEERJS_PEER_ALIASES:`peerjs_peer_aliases`,PEERJS_SERVER_HOST:`peerjs_server_host`,PEERJS_SERVER_PATH:`peerjs_server_path`,PEERJS_SERVER_PORT:`peerjs_server_port`,PEERJS_SERVER_SECURE:`peerjs_server_secure`,PEERJS_TRUSTED_PEER_IDS:`peerjs_trusted_peer_ids`,PROVIDER:`provider`,PROXY_URL:`proxy_url`,PUSH_PROXY_URL:`push_proxy_url`,RATE_LIMIT_AUTO_ADAPT:`rate_limit_auto_adapt`,RATE_LIMIT_CALLS_PER_MINUTE:`rate_limit_calls_per_minute`,REASONING_EFFORT:`reasoning_effort`,REMOTE_MCP_CONNECTIONS:`remote_mcp_connections`,SERVICE_ACCOUNTS:`service_accounts`,SERVICE_DEFAULT_ACCOUNT:`service_default_account`,SIDEBAR_CHAT_HIDDEN:`sidebar_chat_hidden`,SIDEBAR_DEFAULT_PAGE:`sidebar_default_page`,SIDEBAR_FILES_HIDDEN:`sidebar_files_hidden`,SIDEBAR_PAGES_HIDDEN:`sidebar_pages_hidden`,SIDEBAR_TASKS_HIDDEN:`sidebar_tasks_hidden`,SIDEBAR_WIDTH:`sidebar_width`,SITE_CONFIG_SEEDED:`site_config_seeded`,STATIC_MAIN_SITE_SEEDED:`static_main_site_seeded`,STORAGE_HANDLE:`storage_handle`,SUBSCRIBER_ID:`subscriber_id`,STREAMING_ENABLED:`streaming_enabled`,SUBAGENT_MAX_PARALLEL:`subagent_max_parallel`,SUBAGENT_WORKSPACE_MODE:`subagent_workspace_mode`,SUPPRESSED_PAGES_LIST:`suppressed_pages_list`,SYSTEM_PROMPT_OVERRIDE:`system_prompt_override`,TASK_SERVER_ENABLED:`task_server_enabled`,TASK_SERVER_URL:`task_server_url`,TASK_SYNC_OUTBOX:`task_sync_outbox`,TELEGRAM_BOT_TOKEN:`telegram_bot_token`,TELEGRAM_CHAT_IDS:`telegram_chat_ids`,TELEGRAM_USE_PROXY:`telegram_use_proxy`,TOOL_PROFILES:`tool_profiles`,TRANSFORMERS_JS_BACKEND:`transformers_js_backend`,TRANSFORMERS_JS_DTYPE_STRATEGY:`transformers_js_dtype_strategy`,TRIGGER_PATTERN:`trigger_pattern`,USE_PROXY:`use_proxy`,VAPID_SUBJECT:`vapid_subject`,VM_BASH_FULL_INTERNET_ACCESS:`vm_bash_full_internet_access`,VM_BASH_TIMEOUT_SEC:`vm_bash_timeout_sec`,VM_BOOT_HOST:`vm_boot_host`,VM_BOOT_MODE:`vm_boot_mode`,VM_NETWORK_RELAY_URL:`vm_network_relay_url`,WEBMCP_MODE:`webmcp_mode`,WEBMCP_TOOLS_ENABLED:`webmcp_tools_enabled`,WEB_SEARCH_PROXY_URL:`web_search_proxy_url`,WEB_SEARCH_URL:`web_search_url`,WEB_SEARCH_USE_PROXY:`web_search_use_proxy`,SEARCH_FILES_MAX_FILE_BYTES:`search_files_max_file_bytes`,SEARCH_FILES_MAX_FILES_VISITED:`search_files_max_files_visited`,SEARCH_FILES_SKIP_DIRS:`search_files_skip_dirs`},ce=`localhost`,le=8888,ue=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`send_notification`,`show_toast`,`spawn_subagent`]);function de(e){return e.filter(e=>!ue.has(e.name))}function fe(){return!1}async function pe(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}var me=/* @__PURE__ */ t({MemoryDirectoryHandle:()=>ye,MemoryFileHandle:()=>ve,MemorySyncAccessHandle:()=>I,MemoryWritableStream:()=>_e,getMemoryOpfsRoot:()=>xe});function he(e,t){if(typeof DOMException<`u`)try{return new DOMException(e,t)}catch{}let n=Error(e);return n.name=t,n}function ge(e){let t=e();return t[Symbol.asyncDispose??Symbol.for(`Symbol.asyncDispose`)]=async()=>{},t}var I=class{_file;_closed=!1;constructor(e){this._file=e}close(){this._closed=!0}flush(){}getSize(){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);return this._file.getRawData().byteLength}read(e,t){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let n=this._file.getRawData(),r=t?.at??0;if(r>=n.byteLength)return 0;let i=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),a=n.subarray(r,r+i.byteLength);return i.set(a),a.byteLength}write(e,t){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=t?.at??0,i=this._file.getRawData(),a=r+n.byteLength,o;return a>i.byteLength?(o=new Uint8Array(a),o.set(i)):o=new Uint8Array(i),o.set(n,r),this._file.setRawData(o),n.byteLength}truncate(e){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let t=this._file.getRawData(),n=new Uint8Array(e);n.set(t.subarray(0,Math.min(t.byteLength,e))),this._file.setRawData(n)}},_e=class{_file;_buffer;_position=0;_length=0;_closed=!1;constructor(e,t=!1){this._file=e;let n=e.getRawData();t?(this._buffer=new Uint8Array(n),this._length=n.byteLength):(this._buffer=/* @__PURE__ */ new Uint8Array(1024),this._length=0)}async write(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);let t;if(typeof e==`string`)t=new TextEncoder().encode(e);else if(e instanceof Uint8Array)t=e;else if(e instanceof ArrayBuffer)t=new Uint8Array(e);else if(typeof Blob<`u`&&e instanceof Blob)t=typeof e.arrayBuffer==`function`?new Uint8Array(await e.arrayBuffer()):typeof e.text==`function`?new TextEncoder().encode(await e.text()):typeof FileReader<`u`?await new Promise(t=>{let n=new FileReader;n.onload=()=>{t(new Uint8Array(n.result))},n.onerror=()=>t(/* @__PURE__ */ new Uint8Array),n.readAsArrayBuffer(e)}):/* @__PURE__ */ new Uint8Array;else if(e&&typeof e==`object`&&`type`in e){if(e.type===`write`){typeof e.position==`number`&&(this._position=e.position);let n=e.data;t=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):typeof Blob<`u`&&n instanceof Blob&&typeof n.arrayBuffer==`function`?new Uint8Array(await n.arrayBuffer()):/* @__PURE__ */ new Uint8Array}else if(e.type===`seek`){this._position=e.position??0;return}else if(e.type===`truncate`){this._truncate(e.size??0);return}else t=/* @__PURE__ */ new Uint8Array}else t=/* @__PURE__ */ new Uint8Array;let n=this._position+t.length;if(n>this._buffer.length){let e=Math.max(this._buffer.length*2,n,1024),t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._buffer.set(t,this._position),this._position+=t.length,this._position>this._length&&(this._length=this._position)}_truncate(e){if(e<this._length)this._length=e;else if(e>this._length){if(e>this._buffer.length){let t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._length=e}this._position>e&&(this._position=e)}async seek(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);this._position=e}async truncate(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);this._truncate(e)}async close(){if(this._closed)return;this._closed=!0;let e=this._buffer.slice(0,this._length);this._file.setRawData(e)}async abort(){this._closed=!0}},ve=class{kind=`file`;name;_data;_lastModified;constructor(e,t=/* @__PURE__ */ new Uint8Array){this.name=e,this._data=t,this._lastModified=Date.now()}getRawData(){return this._data}setRawData(e){this._data=e,this._lastModified=Date.now()}_getArrayBuffer(){let e=new ArrayBuffer(this._data.byteLength);return new Uint8Array(e).set(this._data),e}async getFile(){let e=this._getArrayBuffer(),t=this._data,n=this.name,r=this._lastModified,i={name:n,size:t.byteLength,type:``,lastModified:r,async text(){return new TextDecoder().decode(t)},async arrayBuffer(){return e},slice(n=0,r=t.byteLength){return new Blob([e.slice(n,r)])}};if(typeof File<`u`)try{let t=new File([e],this.name,{lastModified:this._lastModified});return typeof t.text!=`function`&&(t.text=i.text),typeof t.arrayBuffer!=`function`&&(t.arrayBuffer=i.arrayBuffer),t}catch{}return i}async createWritable(e){return new _e(this,e?.keepExistingData??!1)}async createSyncAccessHandle(){return new I(this)}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}},ye=class e{kind=`directory`;name;_entries=/* @__PURE__ */ new Map;constructor(e){this.name=e}_setEntry(e,t){this._entries.set(e,t)}async getDirectoryHandle(t,n){if(t===`.`||t===``)return this;if(t===`..`)throw he(`Cannot navigate to parent directory with '..'`,`SecurityError`);let r=this._entries.get(t);if(r){if(r.kind===`directory`)return r;throw he(`"${t}" is a file, not a directory`,`TypeMismatchError`)}if(n?.create){let n=new e(t);return this._entries.set(t,n),n}throw he(`A requested file or directory could not be found at "${t}"`,`NotFoundError`)}async getFileHandle(e,t){if(e===`.`||e===`..`||e===``)throw he(`Invalid file name "${e}"`,`TypeMismatchError`);let n=this._entries.get(e);if(n){if(n.kind===`file`)return n;throw he(`"${e}" is a directory, not a file`,`TypeMismatchError`)}if(t?.create){let t=new ve(e);return this._entries.set(e,t),t}throw he(`A requested file could not be found at "${e}"`,`NotFoundError`)}async removeEntry(e,t){let n=this._entries.get(e);if(!n)throw he(`Entry "${e}" not found`,`NotFoundError`);if(n.kind===`directory`&&n._entries.size>0&&!t?.recursive)throw he(`Directory "${e}" is not empty`,`InvalidModificationError`);this._entries.delete(e)}async resolve(e){if(this===e)return[];for(let[t,n]of this._entries.entries()){if(n===e)return[t];if(n.kind===`directory`){let r=await n.resolve(e);if(r)return[t,...r]}}return null}entries(){let e=this;return ge(async function*(){for(let[t,n]of e._entries.entries())yield[t,n]})}values(){let e=this;return ge(async function*(){for(let t of e._entries.values())yield t})}keys(){let e=this;return ge(async function*(){for(let t of e._entries.keys())yield t})}[Symbol.asyncIterator](){return this.entries()}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}};let be=null;function xe(){if(!be){let e=new ye(`memory-root`),t=new ye(ne);e._setEntry(ne,t),be=t}return be}let L=null;async function Se(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function R(){let e=w();return e?`${ne}-${e}`:ne}async function z(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=R();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return xe()}function Ce(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function we(e){if(L)return L;try{let t=await c(e,F.STORAGE_HANDLE);if(Ce(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return z()}function Te(e){L=e}function Ee(){L=null}function De(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function Oe(e){if(L)try{let e=await L.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await Se(L,e),name:L.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await c(e,F.STORAGE_HANDLE);if(Ce(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await Se(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function ke(e,t){let n=await we(e);return fe()?n:pe(n,`groups`,t.replace(/:/g,`-`))}function Ae(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 je(e,t,n){let r=await ke(e,t),{dirs:i,filename:a}=Ae(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()}}var Me=/* @__PURE__ */ r(((e,t)=>{var n=t.exports={},r,i;function a(){throw Error(`setTimeout has not been defined`)}function o(){throw Error(`clearTimeout has not been defined`)}(function(){try{r=typeof setTimeout==`function`?setTimeout:a}catch{r=a}try{i=typeof clearTimeout==`function`?clearTimeout:o}catch{i=o}})();function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}function c(e){if(i===clearTimeout)return clearTimeout(e);if((i===o||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{return i(e)}catch{try{return i.call(null,e)}catch{return i.call(this,e)}}}var l=[],u=!1,d,f=-1;function p(){u&&d&&(u=!1,d.length?l=d.concat(l):f=-1,l.length&&m())}function m(){if(!u){var e=s(p);u=!0;for(var t=l.length;t;){for(d=l,l=[];++f<t;)d&&d[f].run();f=-1,t=l.length}d=null,u=!1,c(e)}}n.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new h(e,t)),l.length===1&&!u&&s(m)};function h(e,t){this.fun=e,this.array=t}h.prototype.run=function(){this.fun.apply(null,this.array)},n.title=`browser`,n.browser=!0,n.env={},n.argv=[],n.version=``,n.versions={};function g(){}n.on=g,n.addListener=g,n.once=g,n.off=g,n.removeListener=g,n.removeAllListeners=g,n.emit=g,n.prependListener=g,n.prependOnceListener=g,n.listeners=function(e){return[]},n.binding=function(e){throw Error(`process.binding is not supported`)},n.cwd=function(){return`/`},n.chdir=function(e){throw Error(`process.chdir is not supported`)},n.umask=function(){return 0}})),B=/* @__PURE__ */ e(Me(),1);
1
+ import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-DBVvNlSN.js";import{i,n as a,r as o,t as s}from"./txPromise-DlzJBj9N.js";import{t as c}from"./getConfig-DSieAlsi.js";const l=[{id:`claude-fable-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable-5.1`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-sonnet-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-4.8`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-haiku-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsPromptCaching:!0},{id:`claude-mythos-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-mythos`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`gpt-6-astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-sol`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-luna`,provider:`openai`,contextWindow:1e6,maxOutput:64e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-5`,provider:`openai`,contextWindow:4e5,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-pro`,provider:`google`,contextWindow:2097152,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.8-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-pro`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1}];let u;function d(e){u=e}function f(e){let t=e||u;if(t)for(let e of l)t.registerModelInfo(e.id,{contextWindow:e.contextWindow,maxOutput:e.maxOutput,supportsImageInput:e.supportsImages,supportsDocumentInput:e.supportsDocuments,...e.supportsAudio!==void 0&&{supportsAudioInput:e.supportsAudio},...e.supportsVideo!==void 0&&{supportsVideoInput:e.supportsVideo},...e.supportsPromptCaching!==void 0&&{supportsPromptCaching:e.supportsPromptCaching}})}const p=new class{loading=!1;models=/* @__PURE__ */ new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}seedStaticCatalog(){f(this)}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=this.modalitiesInclude(i,`document`,`pdf`,`file`)||(typeof e.supports_document_input==`boolean`?e.supports_document_input:typeof e.supportsDocumentInput==`boolean`?e.supportsDocumentInput:void 0),u=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),d=this.extractReasoning(e),f=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...l!==void 0&&{supportsDocumentInput:l},...d&&{reasoning:d},...u&&{routesByRequestFeatures:u},...f!==void 0&&{supportsPromptCaching:f}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(n.length!==0||r!==void 0||i!==void 0||a!==void 0||o!==void 0)return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};d(p);const m=`br:main`;function h(e){return e.replace(/^\/+|\/+$/g,``)}function g(e){let t=h(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),h(t)}function _(e){let t=h(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let r=n[0].toLowerCase();if(r===`pages`){if(n.length>=3){let e=n[1];return{page:`pages`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)}}return{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}}if(r===`files`){let e=n[1]||`main`;return{page:`files`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e,path:n.slice(2).join(`/`)||void 0}}if(r===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(r===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return r===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function v(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function y(e,t){let n=t||v();if(!n||!n.routes)return null;let r=g(e);for(let[e,t]of Object.entries(n.routes))if(t&&t.prettyPath&&g(t.prettyPath)===r)return _(e);return null}function b(e){if(!e)return null;if(typeof e==`object`)return typeof e.path==`string`&&e.path.trim().length>0?{groupId:e.groupId||m,path:e.path.trim()}:null;if(typeof e==`string`){let t=e.trim();if(!t)return null;try{let e=JSON.parse(t);if(e&&typeof e.path==`string`&&e.path.trim().length>0)return{groupId:e.groupId||m,path:e.path.trim()}}catch{}let n=_(t);if(n&&n.path)return{groupId:n.groupId||m,path:n.path};let r=h(t);if(r)return{groupId:m,path:r}}return null}let x=null;const S=/* @__PURE__ */ new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function C(){x=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=C);function w(){let e=typeof window<`u`?window:typeof self<`u`?self:globalThis;if(e&&e.__SHADOWCLAW_DEPLOY_ID__){let t=String(e.__SHADOWCLAW_DEPLOY_ID__).trim();if(t)return t.replace(/[^a-zA-Z0-9_-]/g,`-`)}let t=globalThis.process;if(t&&t.env&&t.env.SHADOWCLAW_DEPLOY_ID){let e=String(t.env.SHADOWCLAW_DEPLOY_ID).trim();if(e)return e.replace(/[^a-zA-Z0-9_-]/g,`-`)}let n=T();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function T(){if(x!==null)return x;if((typeof window>`u`||globalThis.WorkerGlobalScope!==void 0&&typeof self<`u`&&self instanceof globalThis.WorkerGlobalScope)&&typeof self<`u`&&self.location){let e=(self.location.pathname||`/`).split(`/`).filter(Boolean);if(e.length<=1)return x=`/`,x;let t=e[0].toLowerCase(),n=t===`service-worker.js`||t===`sw.js`||t===`manifest.json`||t===`sitemap.xml`||t===`favicon.ico`||t===`index.html`||t===`service-worker`||t===`assets`||t===`dist`||t===`public`;if(n&&e.length===2)return x=`/`,x;if(!n)return x=`/`+e[0]+`/`,x}let e=typeof window<`u`&&window.location?window.location:typeof self<`u`&&self.location?self.location:null;if(!e)return`/`;if(typeof document<`u`&&typeof document.querySelector==`function`){let t=document.querySelector(`base[href]`);if(t){let n=t.getAttribute(`href`);if(n)try{let t=new URL(n,e.origin).pathname;return t.endsWith(`/`)||(t+=`/`),x=t,x}catch{}}}let t=e.pathname||`/`;if(t===`/`)return x=`/`,x;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>S.has(e.toLowerCase()));return r>=0?r===0?(x=`/`,x):(x=`/`+n.slice(0,r).join(`/`)+`/`,x):y(t)?(x=`/`,x):n.length===1&&!t.includes(`.`)?(x=`/`+n[0]+`/`,x):(x=`/`,x)}function E(e){let t=T();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function D(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}D(`ShadowClaw`);const O=8192,ee=[{pattern:`claude-fable-5`,maxTokens:128e3},{pattern:`claude-fable`,maxTokens:128e3},{pattern:`claude-mythos-5`,maxTokens:128e3},{pattern:`claude-mythos`,maxTokens:128e3},{pattern:`claude-sonnet-5`,maxTokens:128e3},{pattern:`claude-opus-5`,maxTokens:128e3},{pattern:`claude-opus-4-8`,maxTokens:128e3},{pattern:`claude-opus-4`,maxTokens:128e3},{pattern:`claude-sonnet-4`,maxTokens:64e3},{pattern:`claude-haiku-5`,maxTokens:128e3},{pattern:`claude-haiku-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-6-luna`,maxTokens:64e3},{pattern:`gpt-6-sol`,maxTokens:128e3},{pattern:`gpt-6-astra`,maxTokens:128e3},{pattern:`astra`,maxTokens:128e3},{pattern:`gpt-6`,maxTokens:128e3},{pattern:`gpt-5`,maxTokens:128e3},{pattern:`gemini-3`,maxTokens:65536},{pattern:`gemini-2.5`,maxTokens:65536},{pattern:`gemini-2.0`,maxTokens:65536},{pattern:`gpt-4o`,maxTokens:16384},{pattern:`gpt-4.1`,maxTokens:32768},{pattern:`gpt-4-turbo`,maxTokens:4096},{pattern:`gpt-4`,maxTokens:8192},{pattern:`gpt-3.5`,maxTokens:4096},{pattern:`qwen-2.5`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`qwen3.5`,maxTokens:32768},{pattern:`Qwen3`,maxTokens:32768},{pattern:`qwen3`,maxTokens:32768},{pattern:`gemma-4`,maxTokens:16384},{pattern:`gemini-nano`,maxTokens:4096},{pattern:`phi-mini`,maxTokens:9216},{pattern:`aion`,maxTokens:9216},{pattern:`gemma-3-1b-it-ONNX-GQA`,maxTokens:32768},{pattern:`gemma-3-1b-it-ONNX`,maxTokens:32768},{pattern:`gemma-3`,maxTokens:32768},{pattern:`Qwen3-0.6B-ONNX`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`Llama-3.2`,maxTokens:32768},{pattern:`SmolLM`,maxTokens:8192},{pattern:`DeepSeek-R1`,maxTokens:32768},{pattern:`Phi-4`,maxTokens:16384},{pattern:`Phi-3.5`,maxTokens:16384},{pattern:`LFM2`,maxTokens:16384},{pattern:`gpt-oss`,maxTokens:32768},{pattern:`browser-built-in`,maxTokens:4096},{pattern:`mesh`,maxTokens:32768},{pattern:`openrouter/free`,maxTokens:32768},{pattern:`qwen3:8b`,maxTokens:4096},{pattern:`llama3:8b`,maxTokens:8192}];function k(e){if(!e)return O;let t=p.getModelInfo(e);if(t){if(typeof t.maxOutput==`number`){let e=t.contextWindow?Math.max(8192,Math.floor(t.contextWindow/2)):32768;return Math.min(t.maxOutput,e)}if(t.contextWindow){let e;return e=t.contextWindow>=2e5?131072:t.contextWindow>=1e5?65536:32768,Math.min(e,Math.floor(t.contextWindow/2))}}for(let{pattern:t,maxTokens:n}of ee)if(e.includes(t))return n;return O}const A=1800,j=`shadowclaw`;function te(){let e=w();return e?`shadowclaw-${e}`:j}te();const ne=`shadowclaw`,M=`br:main`,N={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}},re=Object.fromEntries(Object.values(N).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]}));Object.fromEntries(Object.values(N).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}]));const ie={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:`http://localhost:8888/bedrock-proxy/invoke`,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-5-v1:0`,modelsUrl:`http://localhost:8888/bedrock-proxy/models`,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:`http://localhost:8888/ollama-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:`http://localhost:8888/ollama-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:`http://localhost:8888/llamafile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:`http://localhost:8888/llamafile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},agentfile:{id:`agentfile`,name:`Agentfile (Local Binary)`,baseUrl:`http://localhost:8888/agentfile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`default.agentfile`,modelsUrl:`http://localhost:8888/agentfile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:`http://localhost:8888/transformers-js-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`http://localhost:8888/transformers-js-proxy/models`,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}};function P(e){return ie[e]||null}function ae(e){return`api_key:${e}`}function oe(e){return N[e]||null}function se(e,t,n=`http_api`){let r=oe(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}const F={ACTIVE_TOOL_PROFILE:`active_tool_profile`,ACTIVITY_LOG_DISK_LOGGING_ENABLED:`activity_log_disk_logging_enabled`,ALLOWED_CUSTOM_ELEMENTS:`allowed_custom_elements`,ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS:`allowed_custom_element_host_patterns`,ALLOWED_IFRAME_HOST_PATTERNS:`allowed_iframe_host_patterns`,API_KEY:`api_key`,ASSISTANT_NAME:`assistant_name`,BEDROCK_AUTH_MODE:`bedrock_auth_mode`,BEDROCK_PROFILE_FALLBACK:`bedrock_profile_fallback`,BEDROCK_REGION_FALLBACK:`bedrock_region_fallback`,BUILTIN_AI_SUBAGENT_ROUTING:`builtin_ai_subagent_routing`,BUILTIN_AI_TOOLS_BACKEND:`builtin_ai_tools_backend`,CHANNEL_ENABLED_PREFIX:`channel_enabled:`,CHAT_INPUT_AREA_HEIGHT:`chat_input_area_height`,CHAT_SPLIT_VIEW_ENABLED:`chat_split_view_enabled`,CHAT_SPLIT_VIEW_HEIGHT:`chat_split_view_height`,COMPACTION_ENGINE_PREFERENCE:`compaction_engine_preference`,CONTEXT_COMPRESSION_ENABLED:`context_compression_enabled`,CONTROL_PLANE_CLIENT_ID:`control_plane_client_id`,CONTROL_PLANE_ENABLED:`control_plane_enabled`,CONTROL_PLANE_TRANSPORT:`control_plane_transport`,CONTROL_PLANE_URL:`control_plane_url`,CONVERSATIONS_HEIGHT:`conversations_height`,CUSTOM_TOOLS:`custom_tools`,DB_MIGRATED_FROM_LEGACY:`db_migrated_from_legacy`,DECLARATIVE_TOOLS_ENABLED:`declarative_tools_enabled`,DEFAULT_PINNED_PAGE:`default_pinned_page`,DIRECT_TOOL_COMMAND_POLICY:`direct_tool_command_policy`,ENABLED_TOOLS:`enabled_tools`,FILES_UPLOAD_APPEND_ULID:`files_upload_append_ulid`,GIT_ACCOUNTS:`git_accounts`,GIT_AUTHOR_EMAIL:`git_author_email`,GIT_AUTHOR_NAME:`git_author_name`,GIT_CORS_PROXY:`git_cors_proxy`,GIT_DEFAULT_ACCOUNT:`git_default_account`,GIT_PASSWORD:`git_password`,GIT_PROXY_URL:`git_proxy_url`,GIT_TOKEN:`git_token`,GIT_USERNAME:`git_username`,IMESSAGE_API_KEY:`imessage_api_key`,IMESSAGE_CHAT_IDS:`imessage_chat_ids`,IMESSAGE_SERVER_URL:`imessage_server_url`,INTEGRATION_CONNECTIONS:`integration_connections`,MARKDOWN_FRONTMATTER_CHAT:`markdown_frontmatter_chat`,MARKDOWN_FRONTMATTER_FILE_VIEWER:`markdown_frontmatter_file_viewer`,MARKDOWN_FRONTMATTER_PAGES:`markdown_frontmatter_pages`,MARKDOWN_FRONTMATTER_TASKS:`markdown_frontmatter_tasks`,LAST_ACTIVE_GROUP:`last_active_group`,LAST_ACTIVE_PAGE:`last_active_page`,LAST_SELECTED_PINNED_PAGE:`last_selected_pinned_page`,LLAMAFILE_HOST:`llamafile_host`,LLAMAFILE_MODE:`llamafile_mode`,LLAMAFILE_OFFLINE:`llamafile_offline`,LLAMAFILE_PORT:`llamafile_port`,MAIN_GROUP_INDEX_SUPPRESSED:`main_group_index_suppressed`,MAIN_GROUP_README_SUPPRESSED:`main_group_readme_suppressed`,MAX_ITERATIONS:`max_iterations`,MAX_TOKENS:`max_tokens`,MESH_LLM_HOST:`mesh_llm_host`,MODEL:`model`,OAUTH_PROVIDER_DEFINITIONS:`oauth_provider_definitions`,OPFS_MIGRATED_FROM_LEGACY:`opfs_migrated_from_legacy`,OVERRIDE_PRERENDER_SKELETON:`override_prerender_skeleton`,PAGES_ALLOW_LIST:`pages_allow_list`,PAGES_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,PAGES_DENY_LIST:`pages_deny_list`,PAGES_LIST:`pages_list`,PASSPHRASE_SALT:`passphrase_salt`,PASSPHRASE_VERIFY:`passphrase_verify`,PROMPT_API_BACKEND:`prompt_api_backend`,PROMPT_API_DTYPE_STRATEGY:`prompt_api_dtype_strategy`,PROMPT_API_FALLBACK_MODEL:`prompt_api_fallback_model`,PROMPT_API_ONBOARDING_SEEN:`prompt_api_onboarding_seen`,TRANSFORMERS_JS_ONBOARDING_SEEN:`transformers_js_onboarding_seen`,PEERJS_MY_ALIAS:`peerjs_my_alias`,PEERJS_MY_PEER_ID:`peerjs_my_peer_id`,PEERJS_PEER_ALIASES:`peerjs_peer_aliases`,PEERJS_SERVER_HOST:`peerjs_server_host`,PEERJS_SERVER_PATH:`peerjs_server_path`,PEERJS_SERVER_PORT:`peerjs_server_port`,PEERJS_SERVER_SECURE:`peerjs_server_secure`,PEERJS_TRUSTED_PEER_IDS:`peerjs_trusted_peer_ids`,PROVIDER:`provider`,PROXY_URL:`proxy_url`,PUSH_PROXY_URL:`push_proxy_url`,RATE_LIMIT_AUTO_ADAPT:`rate_limit_auto_adapt`,RATE_LIMIT_CALLS_PER_MINUTE:`rate_limit_calls_per_minute`,REASONING_EFFORT:`reasoning_effort`,REMOTE_MCP_CONNECTIONS:`remote_mcp_connections`,SERVICE_ACCOUNTS:`service_accounts`,SERVICE_DEFAULT_ACCOUNT:`service_default_account`,SIDEBAR_CHAT_HIDDEN:`sidebar_chat_hidden`,SIDEBAR_DEFAULT_PAGE:`sidebar_default_page`,SIDEBAR_FILES_HIDDEN:`sidebar_files_hidden`,SIDEBAR_PAGES_HIDDEN:`sidebar_pages_hidden`,SIDEBAR_TASKS_HIDDEN:`sidebar_tasks_hidden`,SIDEBAR_WIDTH:`sidebar_width`,SITE_CONFIG_SEEDED:`site_config_seeded`,STATIC_MAIN_SITE_SEEDED:`static_main_site_seeded`,STORAGE_HANDLE:`storage_handle`,SUBSCRIBER_ID:`subscriber_id`,STREAMING_ENABLED:`streaming_enabled`,SUBAGENT_MAX_PARALLEL:`subagent_max_parallel`,SUBAGENT_WORKSPACE_MODE:`subagent_workspace_mode`,SUPPRESSED_PAGES_LIST:`suppressed_pages_list`,SYSTEM_PROMPT_OVERRIDE:`system_prompt_override`,TASK_SERVER_ENABLED:`task_server_enabled`,TASK_SERVER_URL:`task_server_url`,TASK_SYNC_OUTBOX:`task_sync_outbox`,TELEGRAM_BOT_TOKEN:`telegram_bot_token`,TELEGRAM_CHAT_IDS:`telegram_chat_ids`,TELEGRAM_USE_PROXY:`telegram_use_proxy`,TOOL_PROFILES:`tool_profiles`,TRANSFORMERS_JS_BACKEND:`transformers_js_backend`,TRANSFORMERS_JS_DTYPE_STRATEGY:`transformers_js_dtype_strategy`,TRIGGER_PATTERN:`trigger_pattern`,USE_PROXY:`use_proxy`,VAPID_SUBJECT:`vapid_subject`,VM_BASH_FULL_INTERNET_ACCESS:`vm_bash_full_internet_access`,VM_BASH_TIMEOUT_SEC:`vm_bash_timeout_sec`,VM_BOOT_HOST:`vm_boot_host`,VM_BOOT_MODE:`vm_boot_mode`,VM_NETWORK_RELAY_URL:`vm_network_relay_url`,WEBMCP_MODE:`webmcp_mode`,WEBMCP_TOOLS_ENABLED:`webmcp_tools_enabled`,WEB_SEARCH_PROXY_URL:`web_search_proxy_url`,WEB_SEARCH_URL:`web_search_url`,WEB_SEARCH_USE_PROXY:`web_search_use_proxy`,SEARCH_FILES_MAX_FILE_BYTES:`search_files_max_file_bytes`,SEARCH_FILES_MAX_FILES_VISITED:`search_files_max_files_visited`,SEARCH_FILES_SKIP_DIRS:`search_files_skip_dirs`},ce=`localhost`,le=8888,ue=/* @__PURE__ */ new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`send_notification`,`show_toast`,`spawn_subagent`]);function de(e){return e.filter(e=>!ue.has(e.name))}function fe(){return!1}async function pe(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}var me=/* @__PURE__ */ t({MemoryDirectoryHandle:()=>ye,MemoryFileHandle:()=>ve,MemorySyncAccessHandle:()=>I,MemoryWritableStream:()=>_e,getMemoryOpfsRoot:()=>xe});function he(e,t){if(typeof DOMException<`u`)try{return new DOMException(e,t)}catch{}let n=Error(e);return n.name=t,n}function ge(e){let t=e();return t[Symbol.asyncDispose??Symbol.for(`Symbol.asyncDispose`)]=async()=>{},t}var I=class{_file;_closed=!1;constructor(e){this._file=e}close(){this._closed=!0}flush(){}getSize(){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);return this._file.getRawData().byteLength}read(e,t){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let n=this._file.getRawData(),r=t?.at??0;if(r>=n.byteLength)return 0;let i=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),a=n.subarray(r,r+i.byteLength);return i.set(a),a.byteLength}write(e,t){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=t?.at??0,i=this._file.getRawData(),a=r+n.byteLength,o;return a>i.byteLength?(o=new Uint8Array(a),o.set(i)):o=new Uint8Array(i),o.set(n,r),this._file.setRawData(o),n.byteLength}truncate(e){if(this._closed)throw he(`SyncAccessHandle is closed`,`InvalidStateError`);let t=this._file.getRawData(),n=new Uint8Array(e);n.set(t.subarray(0,Math.min(t.byteLength,e))),this._file.setRawData(n)}},_e=class{_file;_buffer;_position=0;_length=0;_closed=!1;constructor(e,t=!1){this._file=e;let n=e.getRawData();t?(this._buffer=new Uint8Array(n),this._length=n.byteLength):(this._buffer=/* @__PURE__ */ new Uint8Array(1024),this._length=0)}async write(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);let t;if(typeof e==`string`)t=new TextEncoder().encode(e);else if(e instanceof Uint8Array)t=e;else if(e instanceof ArrayBuffer)t=new Uint8Array(e);else if(typeof Blob<`u`&&e instanceof Blob)t=typeof e.arrayBuffer==`function`?new Uint8Array(await e.arrayBuffer()):typeof e.text==`function`?new TextEncoder().encode(await e.text()):typeof FileReader<`u`?await new Promise(t=>{let n=new FileReader;n.onload=()=>{t(new Uint8Array(n.result))},n.onerror=()=>t(/* @__PURE__ */ new Uint8Array),n.readAsArrayBuffer(e)}):/* @__PURE__ */ new Uint8Array;else if(e&&typeof e==`object`&&`type`in e){if(e.type===`write`){typeof e.position==`number`&&(this._position=e.position);let n=e.data;t=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):typeof Blob<`u`&&n instanceof Blob&&typeof n.arrayBuffer==`function`?new Uint8Array(await n.arrayBuffer()):/* @__PURE__ */ new Uint8Array}else if(e.type===`seek`){this._position=e.position??0;return}else if(e.type===`truncate`){this._truncate(e.size??0);return}else t=/* @__PURE__ */ new Uint8Array}else t=/* @__PURE__ */ new Uint8Array;let n=this._position+t.length;if(n>this._buffer.length){let e=Math.max(this._buffer.length*2,n,1024),t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._buffer.set(t,this._position),this._position+=t.length,this._position>this._length&&(this._length=this._position)}_truncate(e){if(e<this._length)this._length=e;else if(e>this._length){if(e>this._buffer.length){let t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._length=e}this._position>e&&(this._position=e)}async seek(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);this._position=e}async truncate(e){if(this._closed)throw he(`WritableStream is closed`,`InvalidStateError`);this._truncate(e)}async close(){if(this._closed)return;this._closed=!0;let e=this._buffer.slice(0,this._length);this._file.setRawData(e)}async abort(){this._closed=!0}},ve=class{kind=`file`;name;_data;_lastModified;constructor(e,t=/* @__PURE__ */ new Uint8Array){this.name=e,this._data=t,this._lastModified=Date.now()}getRawData(){return this._data}setRawData(e){this._data=e,this._lastModified=Date.now()}_getArrayBuffer(){let e=new ArrayBuffer(this._data.byteLength);return new Uint8Array(e).set(this._data),e}async getFile(){let e=this._getArrayBuffer(),t=this._data,n=this.name,r=this._lastModified,i={name:n,size:t.byteLength,type:``,lastModified:r,async text(){return new TextDecoder().decode(t)},async arrayBuffer(){return e},slice(n=0,r=t.byteLength){return new Blob([e.slice(n,r)])}};if(typeof File<`u`)try{let t=new File([e],this.name,{lastModified:this._lastModified});return typeof t.text!=`function`&&(t.text=i.text),typeof t.arrayBuffer!=`function`&&(t.arrayBuffer=i.arrayBuffer),t}catch{}return i}async createWritable(e){return new _e(this,e?.keepExistingData??!1)}async createSyncAccessHandle(){return new I(this)}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}},ye=class e{kind=`directory`;name;_entries=/* @__PURE__ */ new Map;constructor(e){this.name=e}_setEntry(e,t){this._entries.set(e,t)}async getDirectoryHandle(t,n){if(t===`.`||t===``)return this;if(t===`..`)throw he(`Cannot navigate to parent directory with '..'`,`SecurityError`);let r=this._entries.get(t);if(r){if(r.kind===`directory`)return r;throw he(`"${t}" is a file, not a directory`,`TypeMismatchError`)}if(n?.create){let n=new e(t);return this._entries.set(t,n),n}throw he(`A requested file or directory could not be found at "${t}"`,`NotFoundError`)}async getFileHandle(e,t){if(e===`.`||e===`..`||e===``)throw he(`Invalid file name "${e}"`,`TypeMismatchError`);let n=this._entries.get(e);if(n){if(n.kind===`file`)return n;throw he(`"${e}" is a directory, not a file`,`TypeMismatchError`)}if(t?.create){let t=new ve(e);return this._entries.set(e,t),t}throw he(`A requested file could not be found at "${e}"`,`NotFoundError`)}async removeEntry(e,t){let n=this._entries.get(e);if(!n)throw he(`Entry "${e}" not found`,`NotFoundError`);if(n.kind===`directory`&&n._entries.size>0&&!t?.recursive)throw he(`Directory "${e}" is not empty`,`InvalidModificationError`);this._entries.delete(e)}async resolve(e){if(this===e)return[];for(let[t,n]of this._entries.entries()){if(n===e)return[t];if(n.kind===`directory`){let r=await n.resolve(e);if(r)return[t,...r]}}return null}entries(){let e=this;return ge(async function*(){for(let[t,n]of e._entries.entries())yield[t,n]})}values(){let e=this;return ge(async function*(){for(let t of e._entries.values())yield t})}keys(){let e=this;return ge(async function*(){for(let t of e._entries.keys())yield t})}[Symbol.asyncIterator](){return this.entries()}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}};let be=null;function xe(){if(!be){let e=new ye(`memory-root`),t=new ye(ne);e._setEntry(ne,t),be=t}return be}let L=null;async function Se(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function R(){let e=w();return e?`${ne}-${e}`:ne}async function z(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=R();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return xe()}function Ce(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function we(e){if(L)return L;try{let t=await c(e,F.STORAGE_HANDLE);if(Ce(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return z()}function Te(e){L=e}function Ee(){L=null}function De(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function Oe(e){if(L)try{let e=await L.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await Se(L,e),name:L.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await c(e,F.STORAGE_HANDLE);if(Ce(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await Se(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function ke(e,t){let n=await we(e);return fe()?n:pe(n,`groups`,t.replace(/:/g,`-`))}function Ae(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 je(e,t,n){let r=await ke(e,t),{dirs:i,filename:a}=Ae(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()}}var Me=/* @__PURE__ */ r(((e,t)=>{var n=t.exports={},r,i;function a(){throw Error(`setTimeout has not been defined`)}function o(){throw Error(`clearTimeout has not been defined`)}(function(){try{r=typeof setTimeout==`function`?setTimeout:a}catch{r=a}try{i=typeof clearTimeout==`function`?clearTimeout:o}catch{i=o}})();function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}function c(e){if(i===clearTimeout)return clearTimeout(e);if((i===o||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{return i(e)}catch{try{return i.call(null,e)}catch{return i.call(this,e)}}}var l=[],u=!1,d,f=-1;function p(){u&&d&&(u=!1,d.length?l=d.concat(l):f=-1,l.length&&m())}function m(){if(!u){var e=s(p);u=!0;for(var t=l.length;t;){for(d=l,l=[];++f<t;)d&&d[f].run();f=-1,t=l.length}d=null,u=!1,c(e)}}n.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new h(e,t)),l.length===1&&!u&&s(m)};function h(e,t){this.fun=e,this.array=t}h.prototype.run=function(){this.fun.apply(null,this.array)},n.title=`browser`,n.browser=!0,n.env={},n.argv=[],n.version=``,n.versions={};function g(){}n.on=g,n.addListener=g,n.once=g,n.off=g,n.removeListener=g,n.removeAllListeners=g,n.emit=g,n.prependListener=g,n.prependOnceListener=g,n.listeners=function(e){return[]},n.binding=function(e){throw Error(`process.binding is not supported`)},n.cwd=function(){return`/`},n.chdir=function(e){throw Error(`process.chdir is not supported`)},n.umask=function(){return 0}})),B=/* @__PURE__ */ e(Me(),1);
2
2
  /*! @license DOMPurify 3.4.16 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.16/LICENSE */
3
3
  function Ne(e,t){this.v=e,this.k=t}function Pe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Fe(e){if(Array.isArray(e))return e}function Ie(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function Le(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
4
4
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}
@@ -1 +1 @@
1
- <template><section class="chat" aria-label="Chat"> <shadow-claw-page-header icon="💬" title="Chat"> <div slot="status" class="chat__status" aria-live="polite"> <span class="chat__status-indicator" aria-hidden="true">●</span> <span class="chat__status-text">Ready</span> <span class="chat__typing-indicator" aria-label="Remote agent typing" hidden> <span class="chat__typing-dot"></span><span class="chat__typing-dot"></span><span class="chat__typing-dot"></span> </span> </div> <shadow-claw-page-header-action-button slot="actions" data-action="download-chat" title="Backup chat history"> 💾 Backup </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="restore-chat" title="Restore chat from backup"> ♻️ Restore </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="compact-chat" title="Compact conversation history to save context"> 📦 Compact </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="stop-chat" title="Stop the current response" variant="danger" disabled> ⏹️ Stop Chat </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="clear-chat" title="Clear all chat messages" variant="danger"> 🗑️ Clear Chat </shadow-claw-page-header-action-button> </shadow-claw-page-header> <div class="chat__body"> <div class="chat__terminal-slot" data-terminal-slot hidden></div> <div class="chat__tool-activity" aria-live="polite"> ⚙️ Working... </div> <div class="chat__model-progress" aria-live="polite" aria-label="Model download progress"> <span class="chat__model-progress-label"> Preparing Prompt API model... </span> <div class="chat__model-progress-track"> <div class="chat__model-progress-bar"></div> </div> </div> <div class="chat__transfer-progress" aria-live="polite" aria-label="File transfer progress"> <span class="chat__transfer-progress-label"> Receiving file... </span> <div class="chat__transfer-progress-track"> <div class="chat__transfer-progress-bar"></div> </div> </div> <div class="chat__activity-log" aria-live="polite"></div> <details class="chat__shared-state" hidden> <summary>Shared State</summary> <pre><code class="chat__shared-state-code"></code></pre> </details> <div class="chat__messages" role="log" aria-live="polite" aria-label="Conversation messages"></div> <div class="chat__usage-metrics"> <div class="chat__token-usage" aria-live="polite"></div> <div class="chat__context-usage" aria-live="polite"></div> </div> <div class="chat__attachment-capabilities" aria-live="polite"></div> <div class="chat__input-area"> <div class="chat__input-resize-handle" title="Drag to resize input area"></div> <div class="chat__pending-attachments" aria-live="polite" hidden></div> <div class="chat__input-wrapper"> <button class="chat__attach-btn" data-action="attach-files" type="button" aria-label="Attach files"> <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" aria-hidden="true" viewBox="0 0 24 24"><line x1="12" x2="12" y1="5" y2="19"/><line x1="5" x2="19" y1="12" y2="12"/></svg> </button> <textarea class="chat__input" placeholder="Type a message... (Shift+Enter for newline)" rows="1" aria-label="Message input"></textarea> <button class="chat__send-btn" data-action="send-message" type="button" aria-label="Send message"> <svg fill="currentColor" aria-hidden="true" viewBox="0 0 24 24"><path d="M2.01 21 23 12 2.01 3 2 10l15 2-15 2z"/></svg> </button> </div> </div> <div class="chat__drop-overlay" data-drop-overlay hidden> <div class="chat__drop-overlay-card"> <div class="chat__drop-overlay-title">Drop to attach</div> <div class="chat__drop-overlay-subtitle"> Files and plain text will be added to this message. </div> </div> </div> </div> <shadow-claw-dialog dialog-class="chat__prompt-api-dialog" dialog-aria-label="Prompt API Onboarding"> <form class="chat__prompt-api-form" method="dialog"> <div class="chat__prompt-api-header"> <div class="chat__prompt-api-icon" aria-hidden="true">✨</div> <div> <h3 class="chat__prompt-api-title"> Welcome to Local AI (Prompt API) </h3> <p class="chat__prompt-api-subtitle"> On-device intelligence built directly into your browser. </p> </div> </div> <div class="chat__prompt-api-body"> <section class="chat__prompt-api-card"> <h4>🔒 100% On-Device</h4> <p> ShadowClaw defaults to the browser-native <strong>Prompt API</strong>. Models execute directly on your hardware with no API keys and no subscription costs. </p> </section> <section class="chat__prompt-api-card chat__prompt-api-status-card"> <h4>🌐 Browser Capabilities</h4> <div class="chat__prompt-api-status-content" data-info="prompt-api-status"> </div> </section> <section class="chat__prompt-api-card"> <h4>📥 Local Model Download</h4> <p> Running AI locally requires downloading the model weights into your browser's local cache on first use. A progress bar will show download status in the chat. Once loaded, the model runs completely offline. </p> </section> <section class="chat__prompt-api-card chat__prompt-api-fallback-card"> <h4>⚙️ Default Prompt API Model</h4> <p class="chat__prompt-api-model-desc"> Choose your default Prompt API fallback model. If native browser Prompt API is not enabled, ShadowClaw will run this local model directly in the browser: </p> <div class="chat__prompt-api-select-group"> <label class="form-label" for="prompt-api-fallback-model-select">Model Choice</label> <select id="prompt-api-fallback-model-select" class="chat__prompt-api-select form-select" data-setting="prompt-api-onboarding-fallback-model"> <option value="onnx-community/Qwen3-0.6B-ONNX" selected> onnx-community/Qwen3-0.6B-ONNX — Recommended (Fast, Compact & Tool Calling) </option> <option value="onnx-community/gemma-3-1b-it-ONNX-GQA"> onnx-community/gemma-3-1b-it-ONNX-GQA — Alternative (1B Parameters) </option> <option value="onnx-community/gemma-4-E2B-it-ONNX"> onnx-community/gemma-4-E2B-it-ONNX — Alternative (2B Parameters, 128k Context) </option> <option value="onnx-community/gemma-4-E4B-it-ONNX"> onnx-community/gemma-4-E4B-it-ONNX — Alternative (4B Parameters, 128k Context) </option> </select> </div> </section> <section class="chat__prompt-api-card"> <h4>🌐 Prefer Cloud AI or Another Provider?</h4> <p> Local AI with Prompt API is free and private, but not your only option. ShadowClaw also supports OpenRouter, Anthropic, OpenAI, Google Gemini, and AWS Bedrock. You can configure any provider at any time in Settings. </p> </section> </div> <div class="chat__prompt-api-actions"> <button type="button" class="chat__prompt-api-secondary-btn" data-action="configure-other-provider"> ⚙️ Configure Other Provider in Settings </button> <button type="submit" class="chat__prompt-api-confirm-btn" data-action="confirm-prompt-api-onboarding"> Continue with Prompt API </button> </div> </form> </shadow-claw-dialog> <input class="chat__restore-input" type="file" accept=".zip,application/zip"> <input class="chat__attachment-input" type="file" multiple> </section></template>
1
+ <template><section class="chat" aria-label="Chat"> <shadow-claw-page-header icon="💬" title="Chat"> <div slot="status" class="chat__status" aria-live="polite"> <span class="chat__status-indicator" aria-hidden="true">●</span> <span class="chat__status-text">Ready</span> <span class="chat__typing-indicator" aria-label="Remote agent typing" hidden> <span class="chat__typing-dot"></span><span class="chat__typing-dot"></span><span class="chat__typing-dot"></span> </span> </div> <shadow-claw-page-header-action-button slot="actions" data-action="download-chat" title="Backup chat history"> 💾 Backup </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="restore-chat" title="Restore chat from backup"> ♻️ Restore </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="compact-chat" title="Compact conversation history to save context"> 📦 Compact </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="stop-chat" title="Stop the current response" variant="danger" disabled> ⏹️ Stop Chat </shadow-claw-page-header-action-button> <shadow-claw-page-header-action-button slot="actions" data-action="clear-chat" title="Clear all chat messages" variant="danger"> 🗑️ Clear Chat </shadow-claw-page-header-action-button> </shadow-claw-page-header> <div class="chat__body"> <div class="chat__terminal-slot" data-terminal-slot hidden></div> <div class="chat__tool-activity" aria-live="polite"> ⚙️ Working... </div> <div class="chat__model-progress" aria-live="polite" aria-label="Model download progress"> <span class="chat__model-progress-label"> Preparing Prompt API model... </span> <div class="chat__model-progress-track"> <div class="chat__model-progress-bar"></div> </div> </div> <div class="chat__transfer-progress" aria-live="polite" aria-label="File transfer progress"> <span class="chat__transfer-progress-label"> Receiving file... </span> <div class="chat__transfer-progress-track"> <div class="chat__transfer-progress-bar"></div> </div> </div> <div class="chat__activity-log" aria-live="polite"></div> <details class="chat__shared-state" hidden> <summary>Shared State</summary> <pre><code class="chat__shared-state-code"></code></pre> </details> <div class="chat__messages" role="log" aria-live="polite" aria-label="Conversation messages"></div> <div class="chat__usage-metrics"> <div class="chat__token-usage" aria-live="polite"></div> <div class="chat__context-usage" aria-live="polite"></div> </div> <div class="chat__attachment-capabilities" aria-live="polite"></div> <div class="chat__input-area"> <div class="chat__input-resize-handle" title="Drag to resize input area"></div> <div class="chat__pending-attachments" aria-live="polite" hidden></div> <div class="chat__input-wrapper"> <button class="chat__attach-btn" data-action="attach-files" type="button" aria-label="Attach files"> <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" aria-hidden="true" viewBox="0 0 24 24"><line x1="12" x2="12" y1="5" y2="19"/><line x1="5" x2="19" y1="12" y2="12"/></svg> </button> <textarea class="chat__input" placeholder="Type a message... (Shift+Enter for newline)" rows="1" aria-label="Message input"></textarea> <button class="chat__send-btn" data-action="send-message" type="button" aria-label="Send message"> <svg fill="currentColor" aria-hidden="true" viewBox="0 0 24 24"><path d="M2.01 21 23 12 2.01 3 2 10l15 2-15 2z"/></svg> </button> </div> </div> <div class="chat__drop-overlay" data-drop-overlay hidden> <div class="chat__drop-overlay-card"> <div class="chat__drop-overlay-title">Drop to attach</div> <div class="chat__drop-overlay-subtitle"> Files and plain text will be added to this message. </div> </div> </div> </div> <shadow-claw-dialog dialog-class="chat__prompt-api-dialog" dialog-aria-label="Local AI Onboarding"> <form class="chat__prompt-api-form" method="dialog"> <div class="chat__prompt-api-header"> <div class="chat__prompt-api-icon" aria-hidden="true">✨</div> <div> <h3 class="chat__prompt-api-title"> Welcome to Local AI (Transformers.js) </h3> <p class="chat__prompt-api-subtitle"> On-device intelligence built directly into your browser. </p> </div> </div> <div class="chat__prompt-api-body"> <section class="chat__prompt-api-card"> <h4>🔒 100% On-Device</h4> <p> ShadowClaw defaults to <strong>Transformers.js</strong>. Models execute directly on your hardware with no API keys and no subscription costs. </p> </section> <section class="chat__prompt-api-card chat__prompt-api-status-card" hidden> <h4>🌐 Browser Capabilities</h4> <div class="chat__prompt-api-status-content" data-info="prompt-api-status"> </div> </section> <section class="chat__prompt-api-card"> <h4>📥 Local Model Download</h4> <p> Running AI locally requires downloading the model weights into your browser's local cache on first use. A progress bar will show download status in the chat. Once loaded, the model runs completely offline. </p> </section> <section class="chat__prompt-api-card chat__prompt-api-fallback-card"> <h4>⚙️ Default Transformers.js Model</h4> <p class="chat__prompt-api-model-desc"> Choose your default Transformers.js model. ShadowClaw will run this local model directly in the browser: </p> <div class="chat__prompt-api-select-group"> <label class="form-label" for="prompt-api-fallback-model-select">Model Choice</label> <select id="prompt-api-fallback-model-select" class="chat__prompt-api-select form-select" data-setting="prompt-api-onboarding-fallback-model"> <option value="onnx-community/Qwen3-0.6B-ONNX" selected> onnx-community/Qwen3-0.6B-ONNX — Recommended (Fast, Compact & Tool Calling) </option> <option value="onnx-community/gemma-3-1b-it-ONNX-GQA"> onnx-community/gemma-3-1b-it-ONNX-GQA — Alternative (1B Parameters) </option> <option value="onnx-community/gemma-4-E2B-it-ONNX"> onnx-community/gemma-4-E2B-it-ONNX — Alternative (2B Parameters, 128k Context) </option> <option value="onnx-community/gemma-4-E4B-it-ONNX"> onnx-community/gemma-4-E4B-it-ONNX — Alternative (4B Parameters, 128k Context) </option> <hr> <option value="HuggingFaceTB/SmolLM3-3B-ONNX"> HuggingFaceTB/SmolLM3-3B-ONNX </option> <option value="LiquidAI/LFM2.5-1.2B-Thinking-ONNX"> LiquidAI/LFM2.5-1.2B-Thinking-ONNX 🛠️ </option> <option value="onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX"> onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX 🛠️ </option> <option value="onnx-community/LFM2-1.2B-ONNX"> onnx-community/LFM2-1.2B-ONNX </option> <option value="onnx-community/Llama-3.2-1B-Instruct-ONNX"> onnx-community/Llama-3.2-1B-Instruct-ONNX 🛠️ </option> <option value="onnx-community/Llama-3.2-3B-Instruct-ONNX"> onnx-community/Llama-3.2-3B-Instruct-ONNX 🛠️ </option> <option value="onnx-community/Phi-3.5-mini-instruct-onnx-web"> onnx-community/Phi-3.5-mini-instruct-onnx-web 🛠️ </option> <option value="onnx-community/Phi-4-mini-instruct-ONNX"> onnx-community/Phi-4-mini-instruct-ONNX 🛠️ </option> <option value="onnx-community/Qwen3.5-0.8B-ONNX-OPT"> onnx-community/Qwen3.5-0.8B-ONNX-OPT </option> <option value="onnx-community/Qwen3.5-4B-ONNX-OPT"> onnx-community/Qwen3.5-4B-ONNX-OPT </option> <option value="onnx-community/gemma-3-1b-it-ONNX"> onnx-community/gemma-3-1b-it-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-12B-it-ONNX"> onnx-community/gemma-4-12B-it-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-12B-it-qat-mobile-ONNX"> onnx-community/gemma-4-12B-it-qat-mobile-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-E27B-it-ONNX"> onnx-community/gemma-4-E27B-it-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-E2B-it-qat-mobile-ONNX"> onnx-community/gemma-4-E2B-it-qat-mobile-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-E4B-it-qat-mobile-ONNX"> onnx-community/gemma-4-E4B-it-qat-mobile-ONNX 🛠️ </option> <option value="onnx-community/gemma-4-E9B-it-ONNX"> onnx-community/gemma-4-E9B-it-ONNX 🛠️ </option> <option value="onnx-community/gpt-oss-20b-ONNX"> onnx-community/gpt-oss-20b-ONNX </option> <option value="webgpu/Qwen3-4B-ONNX"> webgpu/Qwen3-4B-ONNX </option> </select> </div> </section> <section class="chat__prompt-api-card"> <h4>🌐 Prefer Cloud AI or Another Provider?</h4> <p> Local AI with Transformers.js is free and private, but not your only option. ShadowClaw also supports OpenRouter, Anthropic, OpenAI, Google Gemini, and AWS Bedrock. You can configure any provider at any time in Settings. </p> </section> </div> <div class="chat__prompt-api-actions"> <button type="button" class="chat__prompt-api-secondary-btn" data-action="configure-other-provider"> ⚙️ Configure Other Provider in Settings </button> <button type="submit" class="chat__prompt-api-confirm-btn" data-action="confirm-prompt-api-onboarding"> Continue with Transformers.js </button> </div> </form> </shadow-claw-dialog> <input class="chat__restore-input" type="file" accept=".zip,application/zip"> <input class="chat__attachment-input" type="file" multiple> </section></template>
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{o as t}from"./app-routes-CanH2f3S.js";const n=[{id:`claude-fable-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable-5.1`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-fable`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-sonnet-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-opus-4.8`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-haiku-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsPromptCaching:!0},{id:`claude-mythos-5`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`claude-mythos`,provider:`anthropic`,contextWindow:1e6,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!0,supportsPromptCaching:!0},{id:`gpt-6-astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-sol`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6-luna`,provider:`openai`,contextWindow:1e6,maxOutput:64e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-6`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`astra`,provider:`openai`,contextWindow:105e4,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gpt-5`,provider:`openai`,contextWindow:4e5,maxOutput:128e3,supportsImages:!0,supportsDocuments:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-pro`,provider:`google`,contextWindow:2097152,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-3.8-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-pro`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1},{id:`gemini-2.5-flash`,provider:`google`,contextWindow:1048576,maxOutput:65536,supportsImages:!0,supportsDocuments:!0,supportsAudio:!0,supportsVideo:!0,supportsThinking:!1,supportsPromptCaching:!1}];let r;function i(e){r=e}function a(e){let t=e||r;if(t)for(let e of n)t.registerModelInfo(e.id,{contextWindow:e.contextWindow,maxOutput:e.maxOutput,supportsImageInput:e.supportsImages,supportsDocumentInput:e.supportsDocuments,...e.supportsAudio!==void 0&&{supportsAudioInput:e.supportsAudio},...e.supportsVideo!==void 0&&{supportsVideoInput:e.supportsVideo},...e.supportsPromptCaching!==void 0&&{supportsPromptCaching:e.supportsPromptCaching}})}const o=new class{loading=!1;models=/* @__PURE__ */ new Map;getModelInfo(e){if(!e||typeof e!=`string`)return null;let t=e.toLowerCase().trim(),n=this.models.get(t);if(n)return n;if(t.includes(`/`)){let e=t.split(`/`).pop();if(e&&this.models.has(e))return this.models.get(e)}else for(let[e,n]of this.models.entries())if(e.endsWith(`/${t}`))return n;if(t.includes(`:`)){let e=t.split(`:`)[0],n=this.getModelInfo(e);if(n)return n}return null}registerModelInfo(e,t){this.models.set(e.toLowerCase(),t)}clear(){this.models.clear()}seedStaticCatalog(){a(this)}async fetchModelInfo(e,t,n){if(e.modelsUrl){this.loading=!0;try{let r=new Headers;if(r.set(`Content-Type`,`application/json`),e.headers)for(let[t,n]of Object.entries(e.headers))r.set(t,n);if(n)for(let[e,t]of Object.entries(n))r.set(e,t);if(t&&e.apiKeyHeader){let n=e.apiKeyHeaderFormat;r.set(e.apiKeyHeader,n?n.replace(`{key}`,t):t)}let i=await fetch(e.modelsUrl,{headers:r});if(!i.ok)throw Error(`HTTP ${i.status} ${i.statusText}`);let a=await i.json(),o=Array.isArray(a.data)?a.data:Array.isArray(a.models)?a.models:[];for(let e of o){if(!e.id)continue;let t=e.context_length??e.context_window??0,n=e.max_completion_tokens||e.per_request_limits?.completion_tokens||e.top_provider?.max_completion_tokens||null,r=typeof e.supports_tools==`boolean`?e.supports_tools:typeof e.supportsTools==`boolean`?e.supportsTools:void 0,i=this.extractModalities(e,`input`),a=this.extractModalities(e,`output`),o=this.modalitiesInclude(i,`image`,`vision`),s=this.modalitiesInclude(i,`audio`,`voice`,`hearing`),c=this.modalitiesInclude(i,`video`),l=this.modalitiesInclude(i,`document`,`pdf`,`file`)||(typeof e.supports_document_input==`boolean`?e.supports_document_input:typeof e.supportsDocumentInput==`boolean`?e.supportsDocumentInput:void 0),u=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),d=this.extractReasoning(e),f=typeof e.supports_prompt_caching==`boolean`?e.supports_prompt_caching:typeof e.supportsPromptCaching==`boolean`?e.supportsPromptCaching:this.supportedParametersInclude(e,`cache_control`,`prompt_caching`)?!0:void 0;!t&&Array.isArray(e.providers)&&e.providers.length>0&&(t=e.providers[0]?.context_length||0),this.registerModelInfo(e.id,{contextWindow:t,maxOutput:n,...r!==void 0&&{supportsTools:r},...i.length>0&&{inputModalities:i},...a.length>0&&{outputModalities:a},...o!==void 0&&{supportsImageInput:o},...s!==void 0&&{supportsAudioInput:s},...c!==void 0&&{supportsVideoInput:c},...l!==void 0&&{supportsDocumentInput:l},...d&&{reasoning:d},...u&&{routesByRequestFeatures:u},...f!==void 0&&{supportsPromptCaching:f}})}o.length>0&&console.log(`[ModelRegistry] Registered ${o.length} models for provider "${e.id}"`)}catch(t){console.error(`[ModelRegistry] Error fetching models for ${e.id}:`,t)}finally{this.loading=!1}}}extractModalities(e,t){let n=t===`input`?e.input_modalities||e.inputModalities:e.output_modalities||e.outputModalities,r=e.architecture||{},i=t===`input`?r.input_modalities||r.inputModalities:r.output_modalities||r.outputModalities,a=typeof r.modality==`string`?r.modality:``,o=this.parseArchitectureModality(a,t),s=[...this.normalizeStringArray(n),...this.normalizeStringArray(i),...o];return Array.from(new Set(s))}extractReasoning(e){let t=e?.reasoning;if(!t||typeof t!=`object`)return;let n=this.normalizeStringArray(t.supported_efforts),r=typeof t.default_effort==`string`?t.default_effort.toLowerCase():void 0,i=typeof t.default_enabled==`boolean`?t.default_enabled:void 0,a=typeof t.supports_max_tokens==`boolean`?t.supports_max_tokens:void 0,o=typeof t.mandatory==`boolean`?t.mandatory:void 0;if(n.length!==0||r!==void 0||i!==void 0||a!==void 0||o!==void 0)return{...n.length>0&&{supportedEfforts:n},...r!==void 0&&{defaultEffort:r},...i!==void 0&&{defaultEnabled:i},...a!==void 0&&{supportsMaxTokens:a},...o!==void 0&&{mandatory:o}}}modalitiesInclude(e,...t){if(e.length!==0)return t.some(t=>e.some(e=>e.includes(t)))}normalizeStringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).map(e=>e.toLowerCase()):[]}parseArchitectureModality(e,t){if(!e)return[];let[n=``,r=``]=e.toLowerCase().split(`->`).map(e=>e.trim());return(t===`input`?n:r).split(/[+,/\s]+/).map(e=>e.trim()).filter(Boolean)}supportedParametersInclude(e,...t){let n=this.normalizeStringArray(e.supported_parameters||e.supportedParameters);return t.some(e=>n.some(t=>t.includes(e)))}};i(o);var s=/* @__PURE__ */ e({AGENTFILE_PROXY_MODELS_URL:()=>I,AGENTFILE_PROXY_TOOLS_URL:()=>AGENTFILE_PROXY_TOOLS_URL,AGENTFILE_PROXY_URL:()=>F,ASSISTANT_NAME:()=>c,BASH_DEFAULT_TIMEOUT_SEC:()=>900,BASH_MAX_TIMEOUT_SEC:()=>g,BEDROCK_PROXY_MODELS_URL:()=>A,BEDROCK_PROXY_URL:()=>k,CONFIG_KEYS:()=>J,CONTEXT_WINDOW_SIZE:()=>50,DB_VERSION:()=>2,DEFAULT_CONTROL_PLANE_ENABLED:()=>!1,DEFAULT_CONTROL_PLANE_TRANSPORT:()=>`sse`,DEFAULT_DEV_HOST:()=>Y,DEFAULT_DEV_IP:()=>DEFAULT_DEV_IP,DEFAULT_DEV_PORT:()=>X,DEFAULT_FILES_UPLOAD_APPEND_ULID:()=>!1,DEFAULT_GROUP_ID:()=>C,DEFAULT_MAX_ITERATIONS:()=>50,DEFAULT_MAX_TOKENS:()=>u,DEFAULT_PROMPT_API_BACKEND:()=>DEFAULT_PROMPT_API_BACKEND,DEFAULT_PROMPT_API_DTYPE_STRATEGY:()=>DEFAULT_PROMPT_API_DTYPE_STRATEGY,DEFAULT_PROMPT_API_FALLBACK_MODEL:()=>Q,DEFAULT_PROVIDER:()=>p,DEFAULT_SERVER_GROUP_ID:()=>DEFAULT_SERVER_GROUP_ID,DEFAULT_SUBAGENT_MAX_PARALLEL:()=>5,DEFAULT_SUBAGENT_WORKSPACE_MODE:()=>Z,DEFAULT_TASK_SERVER_ENABLED:()=>!1,DEFAULT_TASK_SERVER_URL:()=>$,DEFAULT_TRANSFORMERS_JS_BACKEND:()=>DEFAULT_TRANSFORMERS_JS_BACKEND,DEFAULT_TRANSFORMERS_JS_DTYPE_STRATEGY:()=>DEFAULT_TRANSFORMERS_JS_DTYPE_STRATEGY,DEFAULT_TRANSFORMERS_JS_MODEL:()=>DEFAULT_TRANSFORMERS_JS_MODEL,DEFAULT_VM_BOOT_HOST:()=>v,DEFAULT_VM_NETWORK_RELAY_URL:()=>_,FETCH_MAX_RESPONSE:()=>h,GENERAL_ACCOUNT_PROVIDER_CAPABILITIES:()=>z,IMESSAGE_POLL_TIMEOUT:()=>25,IMESSAGE_REQUEST_TIMEOUT_MS:()=>D,LEGACY_DB_NAME:()=>y,LEGACY_OPFS_ROOT:()=>x,LLAMAFILE_PROXY_MODELS_URL:()=>P,LLAMAFILE_PROXY_TOOLS_URL:()=>LLAMAFILE_PROXY_TOOLS_URL,LLAMAFILE_PROXY_URL:()=>N,MODEL_OUTPUT_LIMITS:()=>d,OAUTH_PROVIDER_DEFINITIONS:()=>B,OLLAMA_PROXY_MODELS_URL:()=>R,OLLAMA_PROXY_URL:()=>L,OPFS_ROOT:()=>S,PEERJS_DEFAULT_HOST:()=>O,PEERJS_DEFAULT_PATH:()=>`/`,PEERJS_DEFAULT_PORT:()=>443,PEERJS_DEFAULT_SECURE:()=>!0,PROCESS_LOOP_INTERVAL:()=>100,PROVIDERS:()=>V,SCHEDULER_INTERVAL:()=>m,TELEGRAM_API_BASE:()=>w,TELEGRAM_MAX_LENGTH:()=>E,TELEGRAM_POLL_TIMEOUT:()=>30,TELEGRAM_PROXY_BASE:()=>T,TRANSFORMERS_JS_PROXY_MODELS_URL:()=>M,TRANSFORMERS_JS_PROXY_URL:()=>j,buildTriggerPattern:()=>l,getAvailableProviders:()=>W,getDbName:()=>b,getDefaultProvider:()=>U,getGeneralAccountProviderCapabilities:()=>K,getModelMaxTokens:()=>f,getProvider:()=>H,getProviderApiKeyConfigKey:()=>G,getProviderTokenAuthScheme:()=>q});const c=`ShadowClaw`;function l(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}l(c);const u=8192,d=[{pattern:`claude-fable-5`,maxTokens:128e3},{pattern:`claude-fable`,maxTokens:128e3},{pattern:`claude-mythos-5`,maxTokens:128e3},{pattern:`claude-mythos`,maxTokens:128e3},{pattern:`claude-sonnet-5`,maxTokens:128e3},{pattern:`claude-opus-5`,maxTokens:128e3},{pattern:`claude-opus-4-8`,maxTokens:128e3},{pattern:`claude-opus-4`,maxTokens:128e3},{pattern:`claude-sonnet-4`,maxTokens:64e3},{pattern:`claude-haiku-5`,maxTokens:128e3},{pattern:`claude-haiku-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-6-luna`,maxTokens:64e3},{pattern:`gpt-6-sol`,maxTokens:128e3},{pattern:`gpt-6-astra`,maxTokens:128e3},{pattern:`astra`,maxTokens:128e3},{pattern:`gpt-6`,maxTokens:128e3},{pattern:`gpt-5`,maxTokens:128e3},{pattern:`gemini-3`,maxTokens:65536},{pattern:`gemini-2.5`,maxTokens:65536},{pattern:`gemini-2.0`,maxTokens:65536},{pattern:`gpt-4o`,maxTokens:16384},{pattern:`gpt-4.1`,maxTokens:32768},{pattern:`gpt-4-turbo`,maxTokens:4096},{pattern:`gpt-4`,maxTokens:8192},{pattern:`gpt-3.5`,maxTokens:4096},{pattern:`qwen-2.5`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`qwen3.5`,maxTokens:32768},{pattern:`Qwen3`,maxTokens:32768},{pattern:`qwen3`,maxTokens:32768},{pattern:`gemma-4`,maxTokens:16384},{pattern:`gemini-nano`,maxTokens:4096},{pattern:`phi-mini`,maxTokens:9216},{pattern:`aion`,maxTokens:9216},{pattern:`gemma-3-1b-it-ONNX-GQA`,maxTokens:32768},{pattern:`gemma-3-1b-it-ONNX`,maxTokens:32768},{pattern:`gemma-3`,maxTokens:32768},{pattern:`Qwen3-0.6B-ONNX`,maxTokens:32768},{pattern:`Qwen3.5`,maxTokens:32768},{pattern:`Llama-3.2`,maxTokens:32768},{pattern:`SmolLM`,maxTokens:8192},{pattern:`DeepSeek-R1`,maxTokens:32768},{pattern:`Phi-4`,maxTokens:16384},{pattern:`Phi-3.5`,maxTokens:16384},{pattern:`LFM2`,maxTokens:16384},{pattern:`gpt-oss`,maxTokens:32768},{pattern:`browser-built-in`,maxTokens:4096},{pattern:`mesh`,maxTokens:32768},{pattern:`openrouter/free`,maxTokens:32768},{pattern:`qwen3:8b`,maxTokens:4096},{pattern:`llama3:8b`,maxTokens:8192}];function f(e){if(!e)return u;let t=o.getModelInfo(e);if(t){if(typeof t.maxOutput==`number`){let e=t.contextWindow?Math.max(8192,Math.floor(t.contextWindow/2)):32768;return Math.min(t.maxOutput,e)}if(t.contextWindow){let e;return e=t.contextWindow>=2e5?131072:t.contextWindow>=1e5?65536:32768,Math.min(e,Math.floor(t.contextWindow/2))}}for(let{pattern:t,maxTokens:n}of d)if(e.includes(t))return n;return u}const p=`transformers_js_browser`,m=6e4,h=102400,g=1800,_=`wss://relay.widgetry.org/`,v=`http://localhost:8888`,y=`shadowclaw`;function b(){let e=t();return e?`shadowclaw-${e}`:y}b();const x=`shadowclaw`,S=`shadowclaw`,C=`br:main`,w=`https://api.telegram.org/bot`,T=`/telegram/bot`,E=4096,D=15e3,O=`0.peerjs.com`,k=`http://localhost:8888/bedrock-proxy/invoke`,A=`http://localhost:8888/bedrock-proxy/models`,j=`http://localhost:8888/transformers-js-proxy/chat/completions`,M=`http://localhost:8888/transformers-js-proxy/models`,N=`http://localhost:8888/llamafile-proxy/chat/completions`,P=`http://localhost:8888/llamafile-proxy/models`,F=`http://localhost:8888/agentfile-proxy/chat/completions`,I=`http://localhost:8888/agentfile-proxy/models`,L=`http://localhost:8888/ollama-proxy/chat/completions`,R=`http://localhost:8888/ollama-proxy/models`,z={github:{providerId:`github`,name:`GitHub`,aliases:[`github`,`api.github.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`token `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://github.com/login/oauth/authorize`,tokenUrl:`https://github.com/login/oauth/access_token`,defaultScopes:[`repo`,`read:user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},gitlab:{providerId:`gitlab`,name:`GitLab`,aliases:[`gitlab`,`gitlab.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`PRIVATE-TOKEN`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}}},oauth:{authorizeUrl:`https://gitlab.com/oauth/authorize`,tokenUrl:`https://gitlab.com/oauth/token`,defaultScopes:[`read_api`,`read_user`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},figma:{providerId:`figma`,name:`Figma`,aliases:[`figma`,`api.figma.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`X-Figma-Token`,headerPrefix:``},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://www.figma.com/oauth`,tokenUrl:`https://api.figma.com/v1/oauth/token`,refreshUrl:`https://api.figma.com/v1/oauth/refresh`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},notion:{providerId:`notion`,name:`Notion`,aliases:[`notion`,`api.notion.com`,`notion.so`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.notion.com/v1/oauth/authorize`,tokenUrl:`https://api.notion.com/v1/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`basic_header`,scopeSeparator:`space`}},microsoft_graph:{providerId:`microsoft_graph`,name:`Microsoft Graph`,aliases:[`microsoft`,`graph.microsoft.com`,`microsoft_graph`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/authorize`,tokenUrl:`https://login.microsoftonline.com/common/oauth2/v2.0/token`,defaultScopes:[`openid`,`profile`,`offline_access`,`User.Read`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},yahoo_mail:{providerId:`yahoo_mail`,name:`Yahoo Mail`,aliases:[`yahoo`,`yahoo_mail`,`mail.yahoo.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://api.login.yahoo.com/oauth2/request_auth`,tokenUrl:`https://api.login.yahoo.com/oauth2/get_token`,defaultScopes:[`mail-r`,`mail-w`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},google:{providerId:`google`,name:`Google`,aliases:[`google`,`googleapis.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://accounts.google.com/o/oauth2/v2/auth`,tokenUrl:`https://oauth2.googleapis.com/token`,defaultScopes:[`openid`,`profile`,`email`],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},atlassian:{providerId:`atlassian`,name:`Atlassian`,aliases:[`atlassian`,`api.atlassian.com`],modes:[`oauth`,`token`,`basic`],defaultMode:`basic`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `},basic:{headerName:`Authorization`,headerPrefix:`Basic `}},oauth:{authorizeUrl:`https://auth.atlassian.com/authorize`,tokenUrl:`https://auth.atlassian.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},slack:{providerId:`slack`,name:`Slack`,aliases:[`slack`,`slack.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://slack.com/oauth/v2/authorize`,tokenUrl:`https://slack.com/api/oauth.v2.access`,defaultScopes:[],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`comma`}},linear:{providerId:`linear`,name:`Linear`,aliases:[`linear`,`api.linear.app`,`linear.app`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`],authTypes:[`token`,`oauth`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://linear.app/oauth/authorize`,tokenUrl:`https://api.linear.app/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}},azure_devops:{providerId:`azure_devops`,name:`Azure DevOps`,aliases:[`azure_devops`,`dev.azure.com`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`http_api`,`git_remote`],authTypes:[`token`,`oauth`,`basic_userpass`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},tokenAuthByServiceType:{git_remote:{token:{headerName:`Authorization`,headerPrefix:`Basic `},oauth:{headerName:`Authorization`,headerPrefix:`Basic `}}},oauth:{authorizeUrl:`https://app.vssps.visualstudio.com/oauth2/authorize`,tokenUrl:`https://app.vssps.visualstudio.com/oauth2/token`,defaultScopes:[`vso.code`,`vso.profile`,`offline_access`],usePkce:!1,clientAuthMethod:`request_body`,scopeSeparator:`space`}},custom_mcp:{providerId:`custom_mcp`,name:`Custom MCP`,aliases:[`custom_mcp`],modes:[`oauth`,`token`],defaultMode:`oauth`,serviceTypes:[`mcp_remote`,`webmcp_local`],authTypes:[`none`,`token`,`oauth`,`custom_header`,`ssh_key`],tokenAuth:{token:{headerName:`Authorization`,headerPrefix:`Bearer `},oauth:{headerName:`Authorization`,headerPrefix:`Bearer `}},oauth:{authorizeUrl:`https://example.com/oauth/authorize`,tokenUrl:`https://example.com/oauth/token`,defaultScopes:[],usePkce:!0,clientAuthMethod:`request_body`,scopeSeparator:`space`}}},B=Object.fromEntries(Object.values(z).filter(e=>!!e.oauth).map(e=>{let t=e.oauth;return[e.providerId,{id:e.providerId,name:e.name,authorizeUrl:t.authorizeUrl,tokenUrl:t.tokenUrl,redirectUri:t.redirectUri,defaultScopes:t.defaultScopes,usePkce:t.usePkce,clientAuthMethod:t.clientAuthMethod,scopeSeparator:t.scopeSeparator}]}));Object.fromEntries(Object.values(z).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}]));const V={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:k,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-5-v1:0`,modelsUrl:A,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:L,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:R,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:N,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:P,requiresApiKey:!1,supportsStreaming:!0},agentfile:{id:`agentfile`,name:`Agentfile (Local Binary)`,baseUrl:F,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`default.agentfile`,modelsUrl:I,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:j,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:M,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}};function H(e){return V[e]||null}function U(){return V[p]}function W(){return Object.keys(V)}function G(e){return`api_key:${e}`}function K(e){return z[e]||null}function q(e,t,n=`http_api`){let r=K(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}const J={ACTIVE_TOOL_PROFILE:`active_tool_profile`,ACTIVITY_LOG_DISK_LOGGING_ENABLED:`activity_log_disk_logging_enabled`,ALLOWED_CUSTOM_ELEMENTS:`allowed_custom_elements`,ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS:`allowed_custom_element_host_patterns`,ALLOWED_IFRAME_HOST_PATTERNS:`allowed_iframe_host_patterns`,API_KEY:`api_key`,ASSISTANT_NAME:`assistant_name`,BEDROCK_AUTH_MODE:`bedrock_auth_mode`,BEDROCK_PROFILE_FALLBACK:`bedrock_profile_fallback`,BEDROCK_REGION_FALLBACK:`bedrock_region_fallback`,BUILTIN_AI_SUBAGENT_ROUTING:`builtin_ai_subagent_routing`,BUILTIN_AI_TOOLS_BACKEND:`builtin_ai_tools_backend`,CHANNEL_ENABLED_PREFIX:`channel_enabled:`,CHAT_INPUT_AREA_HEIGHT:`chat_input_area_height`,CHAT_SPLIT_VIEW_ENABLED:`chat_split_view_enabled`,CHAT_SPLIT_VIEW_HEIGHT:`chat_split_view_height`,COMPACTION_ENGINE_PREFERENCE:`compaction_engine_preference`,CONTEXT_COMPRESSION_ENABLED:`context_compression_enabled`,CONTROL_PLANE_CLIENT_ID:`control_plane_client_id`,CONTROL_PLANE_ENABLED:`control_plane_enabled`,CONTROL_PLANE_TRANSPORT:`control_plane_transport`,CONTROL_PLANE_URL:`control_plane_url`,CONVERSATIONS_HEIGHT:`conversations_height`,CUSTOM_TOOLS:`custom_tools`,DB_MIGRATED_FROM_LEGACY:`db_migrated_from_legacy`,DECLARATIVE_TOOLS_ENABLED:`declarative_tools_enabled`,DEFAULT_PINNED_PAGE:`default_pinned_page`,DIRECT_TOOL_COMMAND_POLICY:`direct_tool_command_policy`,ENABLED_TOOLS:`enabled_tools`,FILES_UPLOAD_APPEND_ULID:`files_upload_append_ulid`,GIT_ACCOUNTS:`git_accounts`,GIT_AUTHOR_EMAIL:`git_author_email`,GIT_AUTHOR_NAME:`git_author_name`,GIT_CORS_PROXY:`git_cors_proxy`,GIT_DEFAULT_ACCOUNT:`git_default_account`,GIT_PASSWORD:`git_password`,GIT_PROXY_URL:`git_proxy_url`,GIT_TOKEN:`git_token`,GIT_USERNAME:`git_username`,IMESSAGE_API_KEY:`imessage_api_key`,IMESSAGE_CHAT_IDS:`imessage_chat_ids`,IMESSAGE_SERVER_URL:`imessage_server_url`,INTEGRATION_CONNECTIONS:`integration_connections`,MARKDOWN_FRONTMATTER_CHAT:`markdown_frontmatter_chat`,MARKDOWN_FRONTMATTER_FILE_VIEWER:`markdown_frontmatter_file_viewer`,MARKDOWN_FRONTMATTER_PAGES:`markdown_frontmatter_pages`,MARKDOWN_FRONTMATTER_TASKS:`markdown_frontmatter_tasks`,LAST_ACTIVE_GROUP:`last_active_group`,LAST_ACTIVE_PAGE:`last_active_page`,LAST_SELECTED_PINNED_PAGE:`last_selected_pinned_page`,LLAMAFILE_HOST:`llamafile_host`,LLAMAFILE_MODE:`llamafile_mode`,LLAMAFILE_OFFLINE:`llamafile_offline`,LLAMAFILE_PORT:`llamafile_port`,MAIN_GROUP_INDEX_SUPPRESSED:`main_group_index_suppressed`,MAIN_GROUP_README_SUPPRESSED:`main_group_readme_suppressed`,MAX_ITERATIONS:`max_iterations`,MAX_TOKENS:`max_tokens`,MESH_LLM_HOST:`mesh_llm_host`,MODEL:`model`,OAUTH_PROVIDER_DEFINITIONS:`oauth_provider_definitions`,OPFS_MIGRATED_FROM_LEGACY:`opfs_migrated_from_legacy`,OVERRIDE_PRERENDER_SKELETON:`override_prerender_skeleton`,PAGES_ALLOW_LIST:`pages_allow_list`,PAGES_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,PAGES_DENY_LIST:`pages_deny_list`,PAGES_LIST:`pages_list`,PASSPHRASE_SALT:`passphrase_salt`,PASSPHRASE_VERIFY:`passphrase_verify`,PROMPT_API_BACKEND:`prompt_api_backend`,PROMPT_API_DTYPE_STRATEGY:`prompt_api_dtype_strategy`,PROMPT_API_FALLBACK_MODEL:`prompt_api_fallback_model`,PROMPT_API_ONBOARDING_SEEN:`prompt_api_onboarding_seen`,TRANSFORMERS_JS_ONBOARDING_SEEN:`transformers_js_onboarding_seen`,PEERJS_MY_ALIAS:`peerjs_my_alias`,PEERJS_MY_PEER_ID:`peerjs_my_peer_id`,PEERJS_PEER_ALIASES:`peerjs_peer_aliases`,PEERJS_SERVER_HOST:`peerjs_server_host`,PEERJS_SERVER_PATH:`peerjs_server_path`,PEERJS_SERVER_PORT:`peerjs_server_port`,PEERJS_SERVER_SECURE:`peerjs_server_secure`,PEERJS_TRUSTED_PEER_IDS:`peerjs_trusted_peer_ids`,PROVIDER:`provider`,PROXY_URL:`proxy_url`,PUSH_PROXY_URL:`push_proxy_url`,RATE_LIMIT_AUTO_ADAPT:`rate_limit_auto_adapt`,RATE_LIMIT_CALLS_PER_MINUTE:`rate_limit_calls_per_minute`,REASONING_EFFORT:`reasoning_effort`,REMOTE_MCP_CONNECTIONS:`remote_mcp_connections`,SERVICE_ACCOUNTS:`service_accounts`,SERVICE_DEFAULT_ACCOUNT:`service_default_account`,SIDEBAR_CHAT_HIDDEN:`sidebar_chat_hidden`,SIDEBAR_DEFAULT_PAGE:`sidebar_default_page`,SIDEBAR_FILES_HIDDEN:`sidebar_files_hidden`,SIDEBAR_PAGES_HIDDEN:`sidebar_pages_hidden`,SIDEBAR_TASKS_HIDDEN:`sidebar_tasks_hidden`,SIDEBAR_WIDTH:`sidebar_width`,SITE_CONFIG_SEEDED:`site_config_seeded`,STATIC_MAIN_SITE_SEEDED:`static_main_site_seeded`,STORAGE_HANDLE:`storage_handle`,SUBSCRIBER_ID:`subscriber_id`,STREAMING_ENABLED:`streaming_enabled`,SUBAGENT_MAX_PARALLEL:`subagent_max_parallel`,SUBAGENT_WORKSPACE_MODE:`subagent_workspace_mode`,SUPPRESSED_PAGES_LIST:`suppressed_pages_list`,SYSTEM_PROMPT_OVERRIDE:`system_prompt_override`,TASK_SERVER_ENABLED:`task_server_enabled`,TASK_SERVER_URL:`task_server_url`,TASK_SYNC_OUTBOX:`task_sync_outbox`,TELEGRAM_BOT_TOKEN:`telegram_bot_token`,TELEGRAM_CHAT_IDS:`telegram_chat_ids`,TELEGRAM_USE_PROXY:`telegram_use_proxy`,TOOL_PROFILES:`tool_profiles`,TRANSFORMERS_JS_BACKEND:`transformers_js_backend`,TRANSFORMERS_JS_DTYPE_STRATEGY:`transformers_js_dtype_strategy`,TRIGGER_PATTERN:`trigger_pattern`,USE_PROXY:`use_proxy`,VAPID_SUBJECT:`vapid_subject`,VM_BASH_FULL_INTERNET_ACCESS:`vm_bash_full_internet_access`,VM_BASH_TIMEOUT_SEC:`vm_bash_timeout_sec`,VM_BOOT_HOST:`vm_boot_host`,VM_BOOT_MODE:`vm_boot_mode`,VM_NETWORK_RELAY_URL:`vm_network_relay_url`,WEBMCP_MODE:`webmcp_mode`,WEBMCP_TOOLS_ENABLED:`webmcp_tools_enabled`,WEB_SEARCH_PROXY_URL:`web_search_proxy_url`,WEB_SEARCH_URL:`web_search_url`,WEB_SEARCH_USE_PROXY:`web_search_use_proxy`,SEARCH_FILES_MAX_FILE_BYTES:`search_files_max_file_bytes`,SEARCH_FILES_MAX_FILES_VISITED:`search_files_max_files_visited`,SEARCH_FILES_SKIP_DIRS:`search_files_skip_dirs`},Y=`localhost`,X=8888,Z=`automatic`,Q=`onnx-community/Qwen3-0.6B-ONNX`,$=`http://localhost:8888/schedule`;export{W as A,V as C,T as D,E,H as F,G as I,q as L,U as M,K as N,l as O,f as P,o as R,O as S,w as T,y as _,X as a,B as b,Q as c,$ as d,v as f,D as g,z as h,Y as i,b as j,s as k,p as l,h as m,g as n,C as o,_ as p,J as r,u as s,c as t,Z as u,x as v,m as w,S as x,N as y};
@@ -1 +1 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{Tt as t,_t as n}from"./orchestrator-DTzgyL23.js";import{t as r}from"./setConfig-CIdSs9rh.js";async function i(i,a,o,s,c=``,l=0,u=``,d=!0){let f=o.trim(),p=t(s),m=c.trim(),h=Number.isFinite(l)?Math.max(0,Math.floor(l)):0,g=u.trim(),_=!!d;i.peerjsMyPeerId=f,i.peerjsTrustedPeerIds=p,i.peerjsServerHost=m,i.peerjsServerPort=h,i.peerjsServerPath=g,i.peerjsServerSecure=_,await r(a,e.PEERJS_MY_PEER_ID,f),await r(a,e.PEERJS_TRUSTED_PEER_IDS,JSON.stringify(p)),await r(a,e.PEERJS_SERVER_HOST,m),await r(a,e.PEERJS_SERVER_PORT,h?String(h):``),await r(a,e.PEERJS_SERVER_PATH,g),await r(a,e.PEERJS_SERVER_SECURE,_?`true`:`false`);let v=m?{host:m,path:g||void 0,port:h||void 0,secure:_}:{};i.peerjs.stop(),i.peerjs.configure(f,p,v),f&&n(i,`peerjs`)&&i.peerjs.start()}export{i as t};
1
+ import{r as e}from"./config-071HSho8.js";import{Tt as t,_t as n}from"./orchestrator-B7MpomoG.js";import{t as r}from"./setConfig-CIdSs9rh.js";async function i(i,a,o,s,c=``,l=0,u=``,d=!0){let f=o.trim(),p=t(s),m=c.trim(),h=Number.isFinite(l)?Math.max(0,Math.floor(l)):0,g=u.trim(),_=!!d;i.peerjsMyPeerId=f,i.peerjsTrustedPeerIds=p,i.peerjsServerHost=m,i.peerjsServerPort=h,i.peerjsServerPath=g,i.peerjsServerSecure=_,await r(a,e.PEERJS_MY_PEER_ID,f),await r(a,e.PEERJS_TRUSTED_PEER_IDS,JSON.stringify(p)),await r(a,e.PEERJS_SERVER_HOST,m),await r(a,e.PEERJS_SERVER_PORT,h?String(h):``),await r(a,e.PEERJS_SERVER_PATH,g),await r(a,e.PEERJS_SERVER_SECURE,_?`true`:`false`);let v=m?{host:m,path:g||void 0,port:h||void 0,secure:_}:{};i.peerjs.stop(),i.peerjs.configure(f,p,v),f&&n(i,`peerjs`)&&i.peerjs.start()}export{i as t};
@@ -1 +1 @@
1
- import{r as e}from"./config-Dqn5OMfC.js";import{t}from"./getConfig-DSieAlsi.js";import{t as n}from"./setConfig-CIdSs9rh.js";import{t as r}from"./ulid-BSJxYh6W.js";const i=[{id:`imap`,name:`IMAP Mail`,protocol:`imap`,description:`Read mailboxes and fetch message metadata/content.`,version:`0.1.0`,actions:[`messages.read`,`messages.send`],authTypes:[`basic_userpass`,`oauth`],serviceTypes:[`http_api`],configurableFields:[`host`,`port`,`secure`,`mailboxPath`,`smtpHost`,`smtpPort`,`smtpSecure`,`fromAddress`,`executionMode`,`pollIntervalSec`]}];function a(){return[...i].sort((e,t)=>e.id.localeCompare(t.id))}function o(e){return e&&i.find(t=>t.id===e)||null}function s(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.serviceType||!t.authType?null:{serviceType:t.serviceType,authType:t.authType,providerId:t.providerId||void 0,accountId:t.accountId||void 0,username:t.username||void 0,headerName:t.headerName||void 0,encryptedSecret:t.encryptedSecret||void 0}}function c(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.pluginId||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!o(t.pluginId)?null:{id:t.id,label:t.label,pluginId:t.pluginId,enabled:t.enabled,config:t.config&&typeof t.config==`object`?{...t.config}:{},credentialRef:s(t.credentialRef),createdAt:t.createdAt,updatedAt:t.updatedAt}}async function l(n){let r=await t(n,e.INTEGRATION_CONNECTIONS);if(!Array.isArray(r))return[];let i=[];for(let e of r){let t=c(e);t&&i.push(t)}return i}async function u(t,r){await n(t,e.INTEGRATION_CONNECTIONS,r)}async function d(e){return l(e)}async function f(e,t){if(!t)return null;let n=await l(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}async function p(e,t){if(!t.label?.trim())throw Error(`Email connection label is required`);let n=o(t.pluginId);if(!n)throw Error(`Unknown email plugin: ${t.pluginId}`);let i=await l(e),a=Date.now();if(t.id){let r=i.findIndex(e=>e.id===t.id);if(r!==-1){let o=i[r],s={...o,label:t.label.trim(),pluginId:n.id,enabled:t.enabled??o.enabled,config:t.config?{...t.config}:o.config,updatedAt:a};return i[r]=s,await u(e,i),s}}let s={id:t.id||r(),label:t.label.trim(),pluginId:n.id,enabled:t.enabled??!0,config:t.config?{...t.config}:{},credentialRef:null,createdAt:a,updatedAt:a};return i.push(s),await u(e,i),s}async function m(e,t,n){if(!t)return null;let r=await l(e),i=r.findIndex(e=>e.id===t);if(i===-1)return null;let a={...r[i],credentialRef:n?s(n):null,updatedAt:Date.now()};return r[i]=a,await u(e,r),a}async function h(e,t){if(!t)return!1;let n=await l(e),r=n.filter(e=>e.id!==t);return r.length!==n.length&&(await u(e,r),!0)}export{p as a,d as i,h as n,o,f as r,a as s,m as t};
1
+ import{r as e}from"./config-071HSho8.js";import{t}from"./getConfig-DSieAlsi.js";import{t as n}from"./setConfig-CIdSs9rh.js";import{t as r}from"./ulid-BSJxYh6W.js";const i=[{id:`imap`,name:`IMAP Mail`,protocol:`imap`,description:`Read mailboxes and fetch message metadata/content.`,version:`0.1.0`,actions:[`messages.read`,`messages.send`],authTypes:[`basic_userpass`,`oauth`],serviceTypes:[`http_api`],configurableFields:[`host`,`port`,`secure`,`mailboxPath`,`smtpHost`,`smtpPort`,`smtpSecure`,`fromAddress`,`executionMode`,`pollIntervalSec`]}];function a(){return[...i].sort((e,t)=>e.id.localeCompare(t.id))}function o(e){return e&&i.find(t=>t.id===e)||null}function s(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.serviceType||!t.authType?null:{serviceType:t.serviceType,authType:t.authType,providerId:t.providerId||void 0,accountId:t.accountId||void 0,username:t.username||void 0,headerName:t.headerName||void 0,encryptedSecret:t.encryptedSecret||void 0}}function c(e){if(!e||typeof e!=`object`)return null;let t=e;return!t.id||!t.label||!t.pluginId||typeof t.enabled!=`boolean`||typeof t.createdAt!=`number`||typeof t.updatedAt!=`number`||!o(t.pluginId)?null:{id:t.id,label:t.label,pluginId:t.pluginId,enabled:t.enabled,config:t.config&&typeof t.config==`object`?{...t.config}:{},credentialRef:s(t.credentialRef),createdAt:t.createdAt,updatedAt:t.updatedAt}}async function l(n){let r=await t(n,e.INTEGRATION_CONNECTIONS);if(!Array.isArray(r))return[];let i=[];for(let e of r){let t=c(e);t&&i.push(t)}return i}async function u(t,r){await n(t,e.INTEGRATION_CONNECTIONS,r)}async function d(e){return l(e)}async function f(e,t){if(!t)return null;let n=await l(e);return n.find(e=>e.id===t)||n.find(e=>e.label.toLowerCase()===t.toLowerCase())||null}async function p(e,t){if(!t.label?.trim())throw Error(`Email connection label is required`);let n=o(t.pluginId);if(!n)throw Error(`Unknown email plugin: ${t.pluginId}`);let i=await l(e),a=Date.now();if(t.id){let r=i.findIndex(e=>e.id===t.id);if(r!==-1){let o=i[r],s={...o,label:t.label.trim(),pluginId:n.id,enabled:t.enabled??o.enabled,config:t.config?{...t.config}:o.config,updatedAt:a};return i[r]=s,await u(e,i),s}}let s={id:t.id||r(),label:t.label.trim(),pluginId:n.id,enabled:t.enabled??!0,config:t.config?{...t.config}:{},credentialRef:null,createdAt:a,updatedAt:a};return i.push(s),await u(e,i),s}async function m(e,t,n){if(!t)return null;let r=await l(e),i=r.findIndex(e=>e.id===t);if(i===-1)return null;let a={...r[i],credentialRef:n?s(n):null,updatedAt:Date.now()};return r[i]=a,await u(e,r),a}async function h(e,t){if(!t)return!1;let n=await l(e),r=n.filter(e=>e.id!==t);return r.length!==n.length&&(await u(e,r),!0)}export{p as a,d as i,h as n,o,f as r,a as s,m as t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./rolldown-runtime-DBVvNlSN.js";import{r as t}from"./config-Dqn5OMfC.js";import{u as n}from"./app-routes-CanH2f3S.js";import{r}from"./txPromise-DlzJBj9N.js";import{t as i}from"./getConfig-DSieAlsi.js";import{t as a}from"./browser-B1SoUj6D.js";
1
+ import{i as e}from"./rolldown-runtime-DBVvNlSN.js";import{r as t}from"./config-071HSho8.js";import{u as n}from"./app-routes-CanH2f3S.js";import{r}from"./txPromise-DlzJBj9N.js";import{t as i}from"./getConfig-DSieAlsi.js";import{t as a}from"./browser-B1SoUj6D.js";
2
2
  /*! @license DOMPurify 3.4.16 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.16/LICENSE */
3
3
  function o(e,t){this.v=e,this.k=t}function s(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e){if(Array.isArray(e))return e}function l(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function u(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
4
4
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}
@@ -33,7 +33,7 @@ Detailed docs for each major subsystem.
33
33
  | [Tools & Profiles](subsystems/tools.md) | Tool definitions, execution dispatch, declarative tool executor, centralized guards, profiles, tool configuration panel, adding new tools |
34
34
  | [Agent Skills](subsystems/skills.md) | Workspace-local skill discovery, slash-command routing, declarative tool execution pipelines, output/toast suppression, discovery index generation (.well-known/agent-skills/index.json), resources, and static publishing |
35
35
  | [Notifications & Scheduling](subsystems/notifications.md) | Web Push, VAPID, server-side SQLite scheduler, recursion guards |
36
- | [Providers & Model Registry](subsystems/providers.md) | LLM provider registry, adapter pattern, Prompt API (default with polyfills), LiteRT-LM WebGPU, dynamic CPU/WASM fallback, model registry & capability detection, CacheStorage model downloads, and 30s auto-closing dialogs |
36
+ | [Providers & Model Registry](subsystems/providers.md) | LLM provider registry, adapter pattern, Transformers.js (in-browser default with guided onboarding), Prompt API with polyfills, LiteRT-LM WebGPU, dynamic CPU/WASM fallback, model registry & capability detection, CacheStorage model downloads, and 30s auto-closing dialogs |
37
37
  | [Electron Desktop](subsystems/electron.md) | Desktop app architecture, in-process server, power management |
38
38
  | [Reactive UI & Component Library](subsystems/reactive-ui.md) | Signals, `ShadowClawElement`, `reconcileList`, Web Components, stores, modular ESM package exports (`./components`, `./utils`), dynamic Rolldown library discovery, and Storybook workbench |
39
39
  | [Attachment Capabilities](subsystems/attachment-capabilities.md) | MIME-aware attachment handling and native vs fallback delivery |
@@ -143,7 +143,7 @@ The orchestrator dispatches all worker messages through `handleWorkerMessage(db,
143
143
  | `token-usage` | Emit for UI stats |
144
144
  | `thinking-log` | Emit for debug sidebar |
145
145
  | `compact-done` | Clear messages, save summary, set state `idle` |
146
- | `model-download-progress` | Emit for Prompt API download UI |
146
+ | `model-download-progress` | Emit for Transformers.js / Prompt API model download UI |
147
147
  | `vm-status` | Update `vmStatus`, emit event |
148
148
  | `vm-terminal-*` | Forward to terminal component via events |
149
149
  | `vm-workspace-synced` | Emit `file-change` event |
@@ -169,7 +169,7 @@ Simple event emitter for orchestrator-to-UI communication:
169
169
  | `file-change` | Workspace file system changed |
170
170
  | `context-compacted` | Context summarized |
171
171
  | `task-change` | Task created/updated/deleted |
172
- | `model-download-progress` | Prompt API model downloading |
172
+ | `model-download-progress` | In-browser model downloading (Transformers.js / Prompt API) |
173
173
  | `provider-help` | Provider-specific setup/help dialog hint (e.g., local runtimes) |
174
174
 
175
175
  ## Conversation Isolation
@@ -11,7 +11,7 @@ ShadowClaw is a **dual-runtime AI assistant** combining a rich, interactive fron
11
11
  1. **Interactive Frontend Client (Browser & Electron)**: Runs the complete orchestration state machine, context management, and tool-use loop off the main thread in a dedicated Web Worker, with UI reactivity powered by native Web Components and TC39 Signals, and sandboxed storage across OPFS and IndexedDB.
12
12
  2. **Headless Server-Side Client (`shadow-claw agent`)**: Runs the exact same reasoning loop, declarative skills, and tool chain pipelines natively on Node.js—backed by SQLite (`node:sqlite`), native filesystem handles (`NodeFsDirectoryHandle`), and direct host OS shell execution (`node:child_process`).
13
13
 
14
- Inference routes across in-browser models (Prompt API with polyfill fallbacks, LiteRT WebGPU), local servers (Ollama, Llamafile, Transformers.js with automatic Hugging Face downloading), and cloud providers (defaulting to OpenRouter with `openrouter/free`).
14
+ Inference routes across in-browser models (Transformers.js defaulting out-of-the-box to `onnx-community/Qwen3-0.6B-ONNX`, Prompt API with polyfill fallbacks, LiteRT WebGPU), local servers (Ollama, Llamafile, Transformers.js with automatic Hugging Face downloading), and cloud providers (defaulting to OpenRouter with `openrouter/free`).
15
15
 
16
16
  **Stack at a glance:**
17
17
 
@@ -47,7 +47,7 @@ graph TD
47
47
  Worker --> CoreEngine["Shared Tool & Reasoning Core<br>handleInvoke · executeTool · executeToolChain"]
48
48
  HeadlessAgent --> CoreEngine
49
49
 
50
- CoreEngine --> Providers["☁️ Providers & Local Engines<br>OpenRouter · Hugging Face · Ollama · Bedrock · Prompt API"]
50
+ CoreEngine --> Providers["☁️ Providers & Local Engines<br>Transformers.js · OpenRouter · Hugging Face · Ollama · Bedrock · Prompt API"]
51
51
  CoreEngine --> Tools["Tool Execution Matrix<br>Files · Git · Bash · Tasks · Fetch · MCP"]
52
52
 
53
53
  Worker --> BrowserStorage["Browser Storage: IndexedDB + OPFS<br>br:main"]
@@ -77,7 +77,7 @@ In production builds (`npm run build:prod`), critical assets (`index.css`, `them
77
77
  The LLM tool-use loop runs in a dedicated Web Worker. This means:
78
78
 
79
79
  - The UI thread never blocks during LLM calls or tool execution
80
- - Default provider (`prompt_api`) executes browser-native inference with transparent CPU/WASM fallback
80
+ - Default browser provider (`transformers_js_browser`) executes in-browser inference with transparent CPU/WASM fallback
81
81
  - The VM (v86) runs in the worker, fully isolated from the UI
82
82
  - Cancellation is clean — abort the worker's `AbortController`
83
83