shadow-claw 1.40.1 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +1 -0
  4. package/dist/cli/build/build.js +1 -1
  5. package/dist/cli/{chunk-Bfz2NYgD.js → chunk-0IeC97mU.js} +7 -7
  6. package/dist/cli/chunk-3oLxlxPn.js +1 -0
  7. package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
  8. package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
  9. package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
  10. package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
  11. package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
  12. package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
  13. package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
  14. package/dist/cli/chunk-BjOeVLb42.js +1 -0
  15. package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
  16. package/dist/cli/chunk-BqWBd_jF2.js +1 -0
  17. package/dist/cli/{chunk-Bc9nRNyN.js → chunk-BvVUnHTq.js} +12 -9
  18. package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
  19. package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
  20. package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
  21. package/dist/cli/chunk-CCx8WOwz2.js +1 -0
  22. package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
  23. package/dist/cli/chunk-CUUERioR2.js +1 -0
  24. package/dist/cli/chunk-CXAobnJd.js +1 -0
  25. package/dist/cli/chunk-CY1X0pOF2.js +1 -0
  26. package/dist/cli/chunk-CZvvgLVv.js +1 -0
  27. package/dist/cli/chunk-CbcwbfJB.js +1 -0
  28. package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
  29. package/dist/cli/chunk-Cj9wl0qx.js +1 -0
  30. package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
  31. package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
  32. package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
  33. package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
  34. package/dist/cli/chunk-DR2XtWRo.js +1 -0
  35. package/dist/cli/{chunk-DID5VvOG.js → chunk-DTES-dE6.js} +3 -3
  36. package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
  37. package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
  38. package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
  39. package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
  40. package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
  41. package/dist/cli/chunk-UcNbHaRQ.js +1 -0
  42. package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
  43. package/dist/cli/chunk-bQQkVCw-.js +94 -0
  44. package/dist/cli/{chunk-CGiXWHTi2.js → chunk-gwpxl-0W2.js} +1 -1
  45. package/dist/cli/{chunk-NH8koEis2.js → chunk-nmDhxXH_2.js} +1 -1
  46. package/dist/cli/chunk-p0n_c-I2.js +1 -0
  47. package/dist/cli/{chunk-D7xP72La.js → chunk-q7r4FosZ.js} +1 -1
  48. package/dist/cli/cli.js +1 -1
  49. package/dist/cli/prerender/dsd-shell/prerender-dsd-shell.js +1 -1
  50. package/dist/electron/main.cjs +1 -1
  51. package/dist/headless-agent.js +1 -1
  52. package/dist/lib/{app-routes-BAEMLu9g.js → app-routes-CKkiX12g.js} +7 -2
  53. package/dist/lib/app-routes-CKkiX12g.js.map +1 -0
  54. package/dist/lib/components/index.js +26 -26
  55. package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
  56. package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
  57. package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
  58. package/dist/lib/components/settings/shadow-claw-git.js +1 -1
  59. package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
  60. package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
  61. package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
  62. package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
  63. package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
  64. package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
  65. package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
  66. package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
  67. package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
  68. package/dist/lib/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.d.ts +10 -0
  69. package/dist/lib/components/shadow-claw-a2ui.js +1 -1
  70. package/dist/lib/components/shadow-claw-accounts.js +1 -1
  71. package/dist/lib/components/shadow-claw-channel-config.js +1 -1
  72. package/dist/lib/components/shadow-claw-channels.js +1 -1
  73. package/dist/lib/components/shadow-claw-chat.js +1 -1
  74. package/dist/lib/components/shadow-claw-control-plane.js +1 -1
  75. package/dist/lib/components/shadow-claw-conversations.js +1 -1
  76. package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
  77. package/dist/lib/components/shadow-claw-files.js +1 -1
  78. package/dist/lib/components/shadow-claw-git.js +1 -1
  79. package/dist/lib/components/shadow-claw-integrations.js +1 -1
  80. package/dist/lib/components/shadow-claw-llm.js +1 -1
  81. package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
  82. package/dist/lib/components/shadow-claw-networking.js +1 -1
  83. package/dist/lib/components/shadow-claw-notifications.js +1 -1
  84. package/dist/lib/components/shadow-claw-page-header.js +1 -1
  85. package/dist/lib/components/shadow-claw-pages.js +1 -1
  86. package/dist/lib/components/shadow-claw-peerjs.js +1 -1
  87. package/dist/lib/components/shadow-claw-settings.js +1 -1
  88. package/dist/lib/components/shadow-claw-storage.js +1 -1
  89. package/dist/lib/components/shadow-claw-task-server.js +1 -1
  90. package/dist/lib/components/shadow-claw-tasks.js +1 -1
  91. package/dist/lib/components/shadow-claw-terminal.js +1 -1
  92. package/dist/lib/components/shadow-claw-tools.js +1 -1
  93. package/dist/lib/components/shadow-claw-webvm.js +1 -1
  94. package/dist/lib/components/shadow-claw.js +1 -1
  95. package/dist/lib/{config-CPHDmyTx.js → config-DZkF9LiO.js} +2 -2
  96. package/dist/lib/{config-CPHDmyTx.js.map → config-DZkF9LiO.js.map} +1 -1
  97. package/dist/lib/{configurePeerJs-BsJoycQd.js → configurePeerJs-B3IE9BY2.js} +3 -3
  98. package/dist/lib/{configurePeerJs-BsJoycQd.js.map → configurePeerJs-B3IE9BY2.js.map} +1 -1
  99. package/dist/lib/{connections-BdIru7bF.js → connections-CalJGWvZ.js} +2 -2
  100. package/dist/lib/{connections-BdIru7bF.js.map → connections-CalJGWvZ.js.map} +1 -1
  101. package/dist/lib/{downloadGroupFile-Dn0KsMlV.js → downloadGroupFile-DDE1fIhJ.js} +2 -2
  102. package/dist/lib/{downloadGroupFile-Dn0KsMlV.js.map → downloadGroupFile-DDE1fIhJ.js.map} +1 -1
  103. package/dist/lib/{file-viewer-BYrXXu-X.js → file-viewer-Bll2EoGc.js} +5 -5
  104. package/dist/lib/{file-viewer-BYrXXu-X.js.map → file-viewer-Bll2EoGc.js.map} +1 -1
  105. package/dist/lib/{getGroupDir-DF-RZO8X.js → getGroupDir-MHv7Lvmp.js} +4 -4
  106. package/dist/lib/{getGroupDir-DF-RZO8X.js.map → getGroupDir-MHv7Lvmp.js.map} +1 -1
  107. package/dist/lib/{git-s_0cgKm1.js → git-Bv_M3dgw.js} +3 -3
  108. package/dist/lib/{git-s_0cgKm1.js.map → git-Bv_M3dgw.js.map} +1 -1
  109. package/dist/lib/{iframe-sanitizer-DFdda1jJ.js → iframe-sanitizer-C7ZGDjEI.js} +2 -2
  110. package/dist/lib/{iframe-sanitizer-DFdda1jJ.js.map → iframe-sanitizer-C7ZGDjEI.js.map} +1 -1
  111. package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js → iframe-storage-proxy-CR8ZYHPd.js} +2 -2
  112. package/dist/lib/{iframe-storage-proxy-qrhZmQyO.js.map → iframe-storage-proxy-CR8ZYHPd.js.map} +1 -1
  113. package/dist/lib/index.js +27 -27
  114. package/dist/lib/{initChatSplitResize-DuNlwCuI.js → initChatSplitResize-DiKTI-wk.js} +2 -2
  115. package/dist/lib/{initChatSplitResize-DuNlwCuI.js.map → initChatSplitResize-DiKTI-wk.js.map} +1 -1
  116. package/dist/lib/{initControlPlane-D4UZ4EhV.js → initControlPlane-CzjtQ4aM.js} +15 -15
  117. package/dist/lib/{initControlPlane-D4UZ4EhV.js.map → initControlPlane-CzjtQ4aM.js.map} +1 -1
  118. package/dist/lib/{markdown-CRRwbN9h.js → markdown-k8wA9LKy.js} +4 -4
  119. package/dist/lib/{markdown-CRRwbN9h.js.map → markdown-k8wA9LKy.js.map} +1 -1
  120. package/dist/lib/{mcp-reconnect-COdZ-cea.js → mcp-reconnect-CGIdfZnS.js} +2 -2
  121. package/dist/lib/{mcp-reconnect-COdZ-cea.js.map → mcp-reconnect-CGIdfZnS.js.map} +1 -1
  122. package/dist/lib/{memoryStorage-BsMe2FOQ.js → memoryStorage-DL-Bo3dh.js} +2 -2
  123. package/dist/lib/{memoryStorage-BsMe2FOQ.js.map → memoryStorage-DL-Bo3dh.js.map} +1 -1
  124. package/dist/lib/{orchestrator-D9f5fDCb.js → orchestrator-DKHCoikY.js} +11 -11
  125. package/dist/lib/{orchestrator-D9f5fDCb.js.map → orchestrator-DKHCoikY.js.map} +1 -1
  126. package/dist/lib/{orchestrator-CMN43L0F.js → orchestrator-Dn1ZOz9B.js} +12 -12
  127. package/dist/lib/{orchestrator-CMN43L0F.js.map → orchestrator-Dn1ZOz9B.js.map} +1 -1
  128. package/dist/lib/{peerjs-6u8KtenE.js → peerjs-BK41iBvP.js} +7 -7
  129. package/dist/lib/{peerjs-6u8KtenE.js.map → peerjs-BK41iBvP.js.map} +1 -1
  130. package/dist/lib/{push-client-DCnB2-OU.js → push-client-DKgVFD2Z.js} +3 -3
  131. package/dist/lib/{push-client-DCnB2-OU.js.map → push-client-DKgVFD2Z.js.map} +1 -1
  132. package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js → readGroupFileBytes-CgU_UfGv.js} +2 -2
  133. package/dist/lib/{readGroupFileBytes-nKNJ6sbl.js.map → readGroupFileBytes-CgU_UfGv.js.map} +1 -1
  134. package/dist/lib/{shadow-claw-4x3LqlII.js → shadow-claw-CtCj5Rn_.js} +121 -16
  135. package/dist/lib/shadow-claw-CtCj5Rn_.js.map +1 -0
  136. package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js → shadow-claw-a2ui-CvK5w940.js} +2 -2
  137. package/dist/lib/{shadow-claw-a2ui-Dipe8nY2.js.map → shadow-claw-a2ui-CvK5w940.js.map} +1 -1
  138. package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js → shadow-claw-accounts-Br3XdHro.js} +3 -3
  139. package/dist/lib/{shadow-claw-accounts-BgCkz3Zv.js.map → shadow-claw-accounts-Br3XdHro.js.map} +1 -1
  140. package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js → shadow-claw-channel-config-Da2dN19M.js} +3 -3
  141. package/dist/lib/{shadow-claw-channel-config-CIm_Bxd2.js.map → shadow-claw-channel-config-Da2dN19M.js.map} +1 -1
  142. package/dist/lib/{shadow-claw-channels-CaceK52s.js → shadow-claw-channels-BofYHgz8.js} +3 -3
  143. package/dist/lib/{shadow-claw-channels-CaceK52s.js.map → shadow-claw-channels-BofYHgz8.js.map} +1 -1
  144. package/dist/lib/{shadow-claw-chat-BD18-mAR.js → shadow-claw-chat-Dw32DPV2.js} +12 -12
  145. package/dist/lib/{shadow-claw-chat-BD18-mAR.js.map → shadow-claw-chat-Dw32DPV2.js.map} +1 -1
  146. package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js → shadow-claw-control-plane-CwFotFDh.js} +7 -7
  147. package/dist/lib/{shadow-claw-control-plane-U6LsfRPm.js.map → shadow-claw-control-plane-CwFotFDh.js.map} +1 -1
  148. package/dist/lib/{shadow-claw-conversations-CDsza_oB.js → shadow-claw-conversations-0UXge23k.js} +5 -5
  149. package/dist/lib/{shadow-claw-conversations-CDsza_oB.js.map → shadow-claw-conversations-0UXge23k.js.map} +1 -1
  150. package/dist/lib/{shadow-claw-file-viewer-CuDhkVcL.js → shadow-claw-file-viewer-CAsn9NxH.js} +10 -10
  151. package/dist/lib/{shadow-claw-file-viewer-CuDhkVcL.js.map → shadow-claw-file-viewer-CAsn9NxH.js.map} +1 -1
  152. package/dist/lib/{shadow-claw-files-BI0P3m8a.js → shadow-claw-files-xGGhsHNH.js} +9 -9
  153. package/dist/lib/{shadow-claw-files-BI0P3m8a.js.map → shadow-claw-files-xGGhsHNH.js.map} +1 -1
  154. package/dist/lib/{shadow-claw-git-xRApLEMN.js → shadow-claw-git-B606hcMU.js} +6 -6
  155. package/dist/lib/{shadow-claw-git-xRApLEMN.js.map → shadow-claw-git-B606hcMU.js.map} +1 -1
  156. package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js → shadow-claw-integrations-Bwq5cba1.js} +4 -4
  157. package/dist/lib/{shadow-claw-integrations-B2e1Nfg1.js.map → shadow-claw-integrations-Bwq5cba1.js.map} +1 -1
  158. package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js → shadow-claw-llm-BgpcMBIy.js} +6 -6
  159. package/dist/lib/{shadow-claw-llm-Bc2mWuGb.js.map → shadow-claw-llm-BgpcMBIy.js.map} +1 -1
  160. package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js → shadow-claw-mcp-remote-DvQCA-Bk.js} +4 -4
  161. package/dist/lib/{shadow-claw-mcp-remote-D_Bh3aeC.js.map → shadow-claw-mcp-remote-DvQCA-Bk.js.map} +1 -1
  162. package/dist/lib/{shadow-claw-networking-F5W3n5ci.js → shadow-claw-networking-Cxvf9c7E.js} +2 -2
  163. package/dist/lib/{shadow-claw-networking-F5W3n5ci.js.map → shadow-claw-networking-Cxvf9c7E.js.map} +1 -1
  164. package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js → shadow-claw-notifications-CGVcFYBy.js} +3 -3
  165. package/dist/lib/{shadow-claw-notifications-lvMt9WJ1.js.map → shadow-claw-notifications-CGVcFYBy.js.map} +1 -1
  166. package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js → shadow-claw-page-header-DAYz3I_o.js} +2 -2
  167. package/dist/lib/{shadow-claw-page-header-6gq6EMqX.js.map → shadow-claw-page-header-DAYz3I_o.js.map} +1 -1
  168. package/dist/lib/{shadow-claw-pages-Bo8_z2S-.js → shadow-claw-pages-BLeEZb9k.js} +24 -12
  169. package/dist/lib/shadow-claw-pages-BLeEZb9k.js.map +1 -0
  170. package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js → shadow-claw-peerjs-BcFnbK74.js} +3 -3
  171. package/dist/lib/{shadow-claw-peerjs-DRTLCVDQ.js.map → shadow-claw-peerjs-BcFnbK74.js.map} +1 -1
  172. package/dist/lib/{shadow-claw-settings-D00B4p4L.js → shadow-claw-settings-B7o0Z4hu.js} +9 -9
  173. package/dist/lib/{shadow-claw-settings-D00B4p4L.js.map → shadow-claw-settings-B7o0Z4hu.js.map} +1 -1
  174. package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js → shadow-claw-storage-afMVqB7E.js} +5 -5
  175. package/dist/lib/{shadow-claw-storage-DgMe7-Zo.js.map → shadow-claw-storage-afMVqB7E.js.map} +1 -1
  176. package/dist/lib/{shadow-claw-task-server-D103YOuI.js → shadow-claw-task-server-B9-MQjl6.js} +2 -2
  177. package/dist/lib/{shadow-claw-task-server-D103YOuI.js.map → shadow-claw-task-server-B9-MQjl6.js.map} +1 -1
  178. package/dist/lib/{shadow-claw-tasks-6OhALkq1.js → shadow-claw-tasks-Dc4BC-t-.js} +8 -8
  179. package/dist/lib/{shadow-claw-tasks-6OhALkq1.js.map → shadow-claw-tasks-Dc4BC-t-.js.map} +1 -1
  180. package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js → shadow-claw-terminal-BINcTdsk.js} +2 -2
  181. package/dist/lib/{shadow-claw-terminal-BGtxA1qD.js.map → shadow-claw-terminal-BINcTdsk.js.map} +1 -1
  182. package/dist/lib/{shadow-claw-tools-OeIwAnnd.js → shadow-claw-tools-BjFgXNLR.js} +7 -7
  183. package/dist/lib/{shadow-claw-tools-OeIwAnnd.js.map → shadow-claw-tools-BjFgXNLR.js.map} +1 -1
  184. package/dist/lib/{shadow-claw-webvm-gVFZ197u.js → shadow-claw-webvm-Xe3ByMDw.js} +3 -3
  185. package/dist/lib/{shadow-claw-webvm-gVFZ197u.js.map → shadow-claw-webvm-Xe3ByMDw.js.map} +1 -1
  186. package/dist/lib/subsystems/mcp/webmcp.d.ts +64 -0
  187. package/dist/lib/{syncWebMcpRegistration-Bbph0XZl.js → syncWebMcpRegistration-D7alChz0.js} +21 -6
  188. package/dist/lib/syncWebMcpRegistration-D7alChz0.js.map +1 -0
  189. package/dist/lib/{tools-D0OlSzMD.js → tools-Cmhpk3X8.js} +4 -4
  190. package/dist/lib/{tools-D0OlSzMD.js.map → tools-Cmhpk3X8.js.map} +1 -1
  191. package/dist/lib/utils/index.js +1 -1
  192. package/dist/lib/utils/namespacedStorage.js +1 -1
  193. package/dist/lib/utils/utils.js +1 -1
  194. package/dist/lib/{utils-DYdrO2KI.js → utils-CzgKe_XZ.js} +4 -4
  195. package/dist/lib/{utils-DYdrO2KI.js.map → utils-CzgKe_XZ.js.map} +1 -1
  196. package/dist/lib/{webmcp-D2bocsgh.js → webmcp-oEP9YpR2.js} +119 -3
  197. package/dist/lib/{webmcp-D2bocsgh.js.map → webmcp-oEP9YpR2.js.map} +1 -1
  198. package/dist/public/.well-known/mcp/server-card.json +1 -1
  199. package/dist/public/.well-known/mcp.json +1 -1
  200. package/dist/public/AGENTS.md +2 -1
  201. package/dist/public/README.md +1 -0
  202. package/dist/public/agent.worker.js +1 -1
  203. package/dist/public/app-routes-C6-H2zPH.js +1 -0
  204. package/dist/public/components/shadow-claw/shadow-claw.css +1 -1
  205. package/dist/public/components/shadow-claw/shadow-claw.html +1 -1
  206. package/dist/public/components/shadow-claw-pages/shadow-claw-pages.css +1 -1
  207. package/dist/public/{config-D4lVqMs8.js → config-Dewnqegf.js} +1 -1
  208. package/dist/public/{configurePeerJs-DDOAVSaH.js → configurePeerJs-CaPU2sN5.js} +1 -1
  209. package/dist/public/{connections-CiukjGiH.js → connections-CwE7jE9l.js} +1 -1
  210. package/dist/public/{custom-element-security-piU2U-Ec.js → custom-element-security-DLgHMf5R.js} +1 -1
  211. package/dist/public/docs/example/article/index.html +4 -4
  212. package/dist/public/docs/guides/publishing-to-github-pages.md +49 -6
  213. package/dist/public/docs/publishing/index.html +4 -4
  214. package/dist/public/docs/skill-creator/index.html +4 -4
  215. package/dist/public/docs/subsystems/pages.md +10 -3
  216. package/dist/public/docs/subsystems/webmcp.md +89 -1
  217. package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
  218. package/dist/public/e2e/README.md +2 -2
  219. package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
  220. package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
  221. package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
  222. package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
  223. package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
  224. package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
  225. package/dist/public/index.css +1 -1
  226. package/dist/public/index.html +4 -4
  227. package/dist/public/index.js +1 -1
  228. package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
  229. package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
  230. package/dist/public/llms.txt +1 -1
  231. package/dist/public/main/index.html +4 -4
  232. package/dist/public/main/memory/index.html +4 -4
  233. package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
  234. package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
  235. package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
  236. package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
  237. package/dist/public/{orchestrator-Dc_Q73La.js → orchestrator-CQcc7OFA.js} +2 -2
  238. package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
  239. package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
  240. package/dist/public/service-worker/fetch-proxy.js +1 -1
  241. package/dist/public/service-worker.js +1 -1
  242. package/dist/public/{shadow-claw-Dabb2AEp.js → shadow-claw-WwfOu-tu.js} +33 -3
  243. package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
  244. package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
  245. package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
  246. package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
  247. package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
  248. package/dist/public/{shadow-claw-file-viewer-CDs1QGXk.js → shadow-claw-file-viewer-DYgZjZb9.js} +1 -1
  249. package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
  250. package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
  251. package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
  252. package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
  253. package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
  254. package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
  255. package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
  256. package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
  257. package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
  258. package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
  259. package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
  260. package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
  261. package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
  262. package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
  263. package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
  264. package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
  265. package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
  266. package/dist/public/theme-init.js +1 -1
  267. package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
  268. package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
  269. package/dist/server.js +188 -188
  270. package/package.json +1 -1
  271. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
  272. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +7 -1
  273. package/src/cli/prerender/utils/insert-before-closing-head.test.ts +12 -0
  274. package/src/cli/prerender/utils/insert-before-closing-head.ts +4 -6
  275. package/src/cli/site-config/apply.test.ts +90 -0
  276. package/src/cli/site-config/apply.ts +181 -13
  277. package/src/components/shadow-claw/shadow-claw.css +26 -0
  278. package/src/components/shadow-claw/shadow-claw.html +4 -0
  279. package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
  280. package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
  281. package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
  282. package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
  283. package/src/components/shadow-claw/utils/getRoute.ts +18 -0
  284. package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
  285. package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
  286. package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
  287. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
  288. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
  289. package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
  290. package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
  291. package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +52 -0
  292. package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +28 -1
  293. package/src/server/middleware/static-files.test.ts +36 -0
  294. package/src/server/middleware/static-files.ts +14 -6
  295. package/src/storage/staticRouting.test.ts +36 -0
  296. package/src/storage/staticRouting.ts +31 -3
  297. package/src/subsystems/mcp/webmcp.test.ts +255 -0
  298. package/src/subsystems/mcp/webmcp.ts +253 -0
  299. package/dist/cli/chunk-00GAzVPl2.js +0 -1
  300. package/dist/cli/chunk-2hnFoNNC.js +0 -1
  301. package/dist/cli/chunk-BKQL4nzF2.js +0 -1
  302. package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
  303. package/dist/cli/chunk-BVCGo6uf2.js +0 -1
  304. package/dist/cli/chunk-BcTH_-FL.js +0 -1
  305. package/dist/cli/chunk-BmD_sPRt.js +0 -1
  306. package/dist/cli/chunk-BsxNqqer.js +0 -1
  307. package/dist/cli/chunk-CCcF5T-c.js +0 -1
  308. package/dist/cli/chunk-CFhvwUeL.js +0 -91
  309. package/dist/cli/chunk-CwWtvULn.js +0 -1
  310. package/dist/cli/chunk-Drf-hXIR2.js +0 -1
  311. package/dist/cli/chunk-Dt5HNYVi.js +0 -1
  312. package/dist/cli/chunk-DwZQi9Ax.js +0 -1
  313. package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
  314. package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
  315. package/dist/lib/shadow-claw-4x3LqlII.js.map +0 -1
  316. package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
  317. package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
  318. package/dist/public/app-routes-BMQ4HFaM.js +0 -1
  319. package/dist/public/syncWebMcpRegistration-4bT0YUyZ.js +0 -1
@@ -1,4 +1,4 @@
1
- import e,{createRequire as t}from"node:module";import{Bash as n,InMemoryFs as r}from"just-bash";import i from"process";import a from"gray-matter";import{GoogleGenAI as o}from"@google/genai";import{Buffer as s}from"buffer";import{TextStreamer as c,env as l,pipeline as u}from"@huggingface/transformers";import d from"isomorphic-git";import{exec as f,spawn as p}from"node:child_process";import{access as m,mkdir as h,readFile as g,readdir as _,rm as v,rmdir as y,stat as b,unlink as x,writeFile as S}from"node:fs/promises";import C,{constants as ee,existsSync as te}from"node:fs";import w from"node:path";import{env as ne}from"node:process";import{EventEmitter as T}from"node:events";import E,{fileURLToPath as D}from"node:url";import{isIP as re}from"node:net";import{runInNewContext as O}from"node:vm";import k from"node:http";import ie from"node:https";import{tmpdir as ae}from"node:os";import*as oe from"fs";import*as se from"path";import*as ce from"stream";import{DatabaseSync as le}from"node:sqlite";var ue=Object.create,de=Object.defineProperty,fe=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyNames,me=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty,A=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},j=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),ge=(e,t)=>{let n={};for(var r in e)de(n,r,{get:e[r],enumerable:!0});return t||de(n,Symbol.toStringTag,{value:`Module`}),n},_e=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=pe(t),a=0,o=i.length,s;a<o;a++)s=i[a],!he.call(e,s)&&s!==n&&de(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=fe(t,s))||r.enumerable});return e},ve=(e,t,n)=>(n=e==null?{}:ue(me(e)),_e(t||!e||!e.__esModule?de(n,`default`,{value:e,enumerable:!0}):n,e)),ye=t(import.meta.url),be,xe,Se=A((()=>{be=class{loading=!1;models=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()}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=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=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},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}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)))}},xe=new be}));function Ce(e){return e.replace(/^\/+|\/+$/g,``)}function we(e){let t=Ce(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),Ce(t)}function Te(e){let t=Ce(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 Ee(){if(typeof document<`u`){let e=document.getElementById(Oe);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 De(e,t){let n=t||M||Ee();if(!n||!n.routes)return null;let r=we(e);if(!r)return null;for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&we(t.prettyPath)===r)return Te(e);return null}var Oe,M,N=A((()=>{Fe(),Oe=`shadow-claw-static-routing`,M=null}));function ke(){Ne=null}function Ae(){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=je();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function je(){if(Ne!==null)return Ne;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 Ne=`/`,Ne;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 Ne=`/`,Ne;if(!n)return Ne=`/`+e[0]+`/`,Ne}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+=`/`),Ne=t,Ne}catch{}}}let t=e.pathname||`/`;if(t===`/`)return Ne=`/`,Ne;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>Pe.has(e.toLowerCase()));return r>=0?r===0?(Ne=`/`,Ne):(Ne=`/`+n.slice(0,r).join(`/`)+`/`,Ne):De(t)?(Ne=`/`,Ne):n.length===1&&!t.includes(`.`)?(Ne=`/`+n[0]+`/`,Ne):(Ne=`/`,Ne)}function Me(e){let t=je();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(``)}var Ne,Pe,Fe=A((()=>{N(),Ne=null,Pe=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]),typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=ke)}));function Ie(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}function Le(e){if(!e)return Ke;let t=xe.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 qe)if(e.includes(t))return n;return Ke}function Re(){let e=Ae();return e?`shadowclaw-${e}`:Qe}function ze(e){return lt[e]||null}function Be(){return lt[Je]}function Ve(){return Object.keys(lt)}function He(e){return`api_key:${e}`}function Ue(e){return I[e]||null}function We(e,t,n=`http_api`){let r=Ue(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}var Ge,Ke,qe,Je,Ye,Xe,Ze,Qe,$e,P,et,tt,nt,rt,it,at,ot,F,st,I,ct,lt,L,ut,dt,ft,pt,R=A((()=>{Se(),Fe(),Ge=`ShadowClaw`,Ie(Ge),Ke=8192,qe=[{pattern:`claude-fable-5`,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-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-5`,maxTokens:128e3},{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}],Je=`prompt_api`,Ye=102400,Xe=1800,Ze=`wss://relay.widgetry.org/`,Qe=`shadowclaw`,Re(),$e=`shadowclaw`,P=`br:main`,et=`server:main`,tt=`http://localhost:8888/bedrock-proxy/invoke`,nt=`http://localhost:8888/bedrock-proxy/models`,rt=`http://localhost:8888/transformers-js-proxy/chat/completions`,it=`http://localhost:8888/transformers-js-proxy/models`,at=`http://localhost:8888/llamafile-proxy/chat/completions`,ot=`http://localhost:8888/llamafile-proxy/models`,F=`http://localhost:8888/ollama-proxy/chat/completions`,st=`http://localhost:8888/ollama-proxy/models`,I={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`}}},ct=Object.fromEntries(Object.values(I).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(I).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),lt={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:tt,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-4-6-v1:0`,modelsUrl:nt,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:F,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:st,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:at,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:ot,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:rt,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:it,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}},L={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_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,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`},ut=`localhost`,dt=8888,ft=`automatic`,pt=`onnx-community/Qwen3-0.6B-ONNX`}));function mt(){return _t?Promise.resolve(_t):z}function ht(e){if(!e)throw Error(`Database not initialized`);_t=e,vt&&=(vt(e),null)}function gt(){_t=null}var _t,vt,z,yt=A((()=>{_t=null,vt=null,z=new Promise(e=>{vt=e})}));function B(e){return typeof e==`object`&&!!e&&e.__brand===`ShadowClawSqliteDatabase`}function bt(e){return{__brand:`ShadowClawSqliteDatabase`,db:e}}var xt=A((()=>{}));function St(e,t){return{get(n){let r;if(t===`config`)r=e.prepare(`SELECT key, value FROM config WHERE key = ?`).get(n)??void 0;else if(t===`tasks`){let t=e.prepare(`SELECT * FROM tasks WHERE id = ?`).get(n);t&&(r={...t,enabled:!!t.enabled,tools:t.tools?JSON.parse(t.tools):void 0})}else r=t===`messages`?e.prepare(`SELECT * FROM messages WHERE id = ?`).get(n)??void 0:e.prepare(`SELECT * FROM ${t} WHERE id = ?`).get(n)??void 0;return{result:r,onsuccess:null,onerror:null}},getAll(){let n;return n=t===`config`?e.prepare(`SELECT key, value FROM config ORDER BY key`).all()??[]:t===`tasks`?(e.prepare(`SELECT * FROM tasks ORDER BY createdAt DESC`).all()??[]).map(e=>({...e,enabled:!!e.enabled,tools:e.tools?JSON.parse(e.tools):void 0})):e.prepare(`SELECT * FROM ${t}`).all()??[],{result:n,onsuccess:null,onerror:null}},put(n){if(t===`config`)e.prepare(`INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)`).run(n.key,typeof n.value==`string`?n.value:JSON.stringify(n.value));else if(t===`tasks`)e.prepare(`INSERT OR REPLACE INTO tasks
1
+ import e,{createRequire as t}from"node:module";import{Bash as n,InMemoryFs as r}from"just-bash";import i from"process";import a from"gray-matter";import{GoogleGenAI as o}from"@google/genai";import{Buffer as s}from"buffer";import{TextStreamer as c,env as l,pipeline as u}from"@huggingface/transformers";import d from"isomorphic-git";import{exec as f,spawn as p}from"node:child_process";import{access as m,mkdir as h,readFile as g,readdir as _,rm as v,rmdir as y,stat as b,unlink as x,writeFile as S}from"node:fs/promises";import C,{constants as ee,existsSync as te}from"node:fs";import w from"node:path";import{env as ne}from"node:process";import{EventEmitter as T}from"node:events";import E,{fileURLToPath as D}from"node:url";import{isIP as re}from"node:net";import{runInNewContext as O}from"node:vm";import k from"node:http";import ie from"node:https";import{tmpdir as ae}from"node:os";import*as oe from"fs";import*as se from"path";import*as ce from"stream";import{DatabaseSync as le}from"node:sqlite";var ue=Object.create,de=Object.defineProperty,fe=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyNames,me=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty,A=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},j=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),ge=(e,t)=>{let n={};for(var r in e)de(n,r,{get:e[r],enumerable:!0});return t||de(n,Symbol.toStringTag,{value:`Module`}),n},_e=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=pe(t),a=0,o=i.length,s;a<o;a++)s=i[a],!he.call(e,s)&&s!==n&&de(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=fe(t,s))||r.enumerable});return e},ve=(e,t,n)=>(n=e==null?{}:ue(me(e)),_e(t||!e||!e.__esModule?de(n,`default`,{value:e,enumerable:!0}):n,e)),ye=t(import.meta.url),be,xe,Se=A((()=>{be=class{loading=!1;models=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()}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=e.id===`openrouter/free`||this.supportedParametersInclude(e,`image`,`vision`,`audio`,`tool`,`structured`),u=this.extractReasoning(e),d=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},...u&&{reasoning:u},...l&&{routesByRequestFeatures:l},...d!==void 0&&{supportsPromptCaching:d}})}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)))}},xe=new be}));function Ce(e){return e.replace(/^\/+|\/+$/g,``)}function we(e){let t=Ce(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),Ce(t)}function Te(e){let t=Ce(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 Ee(){if(typeof document<`u`){let e=document.getElementById(Oe);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 De(e,t){let n=t||M||Ee();if(!n||!n.routes)return null;let r=we(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&we(t.prettyPath)===r)return Te(e);return null}var Oe,M,N=A((()=>{Fe(),Oe=`shadow-claw-static-routing`,M=null}));function ke(){Ne=null}function Ae(){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=je();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function je(){if(Ne!==null)return Ne;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 Ne=`/`,Ne;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 Ne=`/`,Ne;if(!n)return Ne=`/`+e[0]+`/`,Ne}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+=`/`),Ne=t,Ne}catch{}}}let t=e.pathname||`/`;if(t===`/`)return Ne=`/`,Ne;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>Pe.has(e.toLowerCase()));return r>=0?r===0?(Ne=`/`,Ne):(Ne=`/`+n.slice(0,r).join(`/`)+`/`,Ne):De(t)?(Ne=`/`,Ne):n.length===1&&!t.includes(`.`)?(Ne=`/`+n[0]+`/`,Ne):(Ne=`/`,Ne)}function Me(e){let t=je();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(``)}var Ne,Pe,Fe=A((()=>{N(),Ne=null,Pe=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]),typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=ke)}));function Ie(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}function Le(e){if(!e)return Ke;let t=xe.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 qe)if(e.includes(t))return n;return Ke}function Re(){let e=Ae();return e?`shadowclaw-${e}`:Qe}function ze(e){return lt[e]||null}function Be(){return lt[Je]}function Ve(){return Object.keys(lt)}function He(e){return`api_key:${e}`}function Ue(e){return I[e]||null}function We(e,t,n=`http_api`){let r=Ue(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}var Ge,Ke,qe,Je,Ye,Xe,Ze,Qe,$e,P,et,tt,nt,rt,it,at,ot,F,st,I,ct,lt,L,ut,dt,ft,pt,R=A((()=>{Se(),Fe(),Ge=`ShadowClaw`,Ie(Ge),Ke=8192,qe=[{pattern:`claude-fable-5`,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-4`,maxTokens:64e3},{pattern:`claude-3-5`,maxTokens:8192},{pattern:`claude-3`,maxTokens:4096},{pattern:`gpt-5`,maxTokens:128e3},{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}],Je=`prompt_api`,Ye=102400,Xe=1800,Ze=`wss://relay.widgetry.org/`,Qe=`shadowclaw`,Re(),$e=`shadowclaw`,P=`br:main`,et=`server:main`,tt=`http://localhost:8888/bedrock-proxy/invoke`,nt=`http://localhost:8888/bedrock-proxy/models`,rt=`http://localhost:8888/transformers-js-proxy/chat/completions`,it=`http://localhost:8888/transformers-js-proxy/models`,at=`http://localhost:8888/llamafile-proxy/chat/completions`,ot=`http://localhost:8888/llamafile-proxy/models`,F=`http://localhost:8888/ollama-proxy/chat/completions`,st=`http://localhost:8888/ollama-proxy/models`,I={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`}}},ct=Object.fromEntries(Object.values(I).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(I).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}])),lt={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:tt,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-4-6-v1:0`,modelsUrl:nt,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:F,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:st,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:at,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:ot,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:rt,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:it,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}},L={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_AUTO_REFRESH_INTERVAL:`pages_auto_refresh_interval`,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`},ut=`localhost`,dt=8888,ft=`automatic`,pt=`onnx-community/Qwen3-0.6B-ONNX`}));function mt(){return _t?Promise.resolve(_t):z}function ht(e){if(!e)throw Error(`Database not initialized`);_t=e,vt&&=(vt(e),null)}function gt(){_t=null}var _t,vt,z,yt=A((()=>{_t=null,vt=null,z=new Promise(e=>{vt=e})}));function B(e){return typeof e==`object`&&!!e&&e.__brand===`ShadowClawSqliteDatabase`}function bt(e){return{__brand:`ShadowClawSqliteDatabase`,db:e}}var xt=A((()=>{}));function St(e,t){return{get(n){let r;if(t===`config`)r=e.prepare(`SELECT key, value FROM config WHERE key = ?`).get(n)??void 0;else if(t===`tasks`){let t=e.prepare(`SELECT * FROM tasks WHERE id = ?`).get(n);t&&(r={...t,enabled:!!t.enabled,tools:t.tools?JSON.parse(t.tools):void 0})}else r=t===`messages`?e.prepare(`SELECT * FROM messages WHERE id = ?`).get(n)??void 0:e.prepare(`SELECT * FROM ${t} WHERE id = ?`).get(n)??void 0;return{result:r,onsuccess:null,onerror:null}},getAll(){let n;return n=t===`config`?e.prepare(`SELECT key, value FROM config ORDER BY key`).all()??[]:t===`tasks`?(e.prepare(`SELECT * FROM tasks ORDER BY createdAt DESC`).all()??[]).map(e=>({...e,enabled:!!e.enabled,tools:e.tools?JSON.parse(e.tools):void 0})):e.prepare(`SELECT * FROM ${t}`).all()??[],{result:n,onsuccess:null,onerror:null}},put(n){if(t===`config`)e.prepare(`INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)`).run(n.key,typeof n.value==`string`?n.value:JSON.stringify(n.value));else if(t===`tasks`)e.prepare(`INSERT OR REPLACE INTO tasks
2
2
  (id, groupId, enabled, schedule, prompt, tools, lastRun, createdAt, type, freshContext, subagent, name, task_order)
3
3
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(n.id,n.groupId,+!!n.enabled,n.schedule??null,n.prompt??``,n.tools?JSON.stringify(n.tools):null,n.lastRun??null,n.createdAt,n.type??null,n.freshContext?1:null,n.subagent?1:null,n.name??null,n.order??null);else if(t===`messages`)e.prepare(`INSERT OR REPLACE INTO messages
4
4
  (id, groupId, timestamp, content, sender, channel, isFromMe, isTrigger, attachments, a2uiAction, a2uiEnvelopes, freshContext, subagent)
@@ -109,7 +109,6 @@ function resolvePrettyPathToRoute(pathname, manifest) {
109
109
  const routesManifest = manifest || cachedManifest || getEmbeddedStaticRoutesManifest();
110
110
  if (!routesManifest || !routesManifest.routes) return null;
111
111
  const normalizedPath = normalizePrettyPathKey(pathname);
112
- if (!normalizedPath) return null;
113
112
  for (const [canonicalKey, routeDef] of Object.entries(routesManifest.routes)) {
114
113
  if (!routeDef || !routeDef.prettyPath) continue;
115
114
  if (normalizePrettyPathKey(routeDef.prettyPath) === normalizedPath) return parseCanonicalRouteKey(canonicalKey);
@@ -194,6 +193,9 @@ function resolveRouteToPrettyPath(route, manifest) {
194
193
  candidateKeys.push(`pages/${normalizedGroupId}/${cleanPath}`);
195
194
  candidateKeys.push(`/pages/${groupId}/${cleanPath}`);
196
195
  }
196
+ } else if (page === "pages" && !path) {
197
+ if (normalizedGroupId === "main" || !normalizedGroupId) candidateKeys.push("/pages/main/index.html", "pages/main/index.html", "/pages/br:main/index.html", "/pages/br-main/index.html", "/main/index.html", "main/index.html", "/index.html", "index.html", "/pages/main", "pages/main", "/pages", "pages");
198
+ else if (normalizedGroupId) candidateKeys.push(`/pages/${normalizedGroupId}/index.html`, `pages/${normalizedGroupId}/index.html`, `/pages/${groupId}/index.html`);
197
199
  } else if (page === "files" && path) {
198
200
  const cleanPath = trimSlashes$1(path);
199
201
  if (normalizedGroupId) {
@@ -206,6 +208,9 @@ function resolveRouteToPrettyPath(route, manifest) {
206
208
  const candidateNormalized = trimSlashes$1(candidate);
207
209
  for (const [canonicalKey, routeDef] of Object.entries(routesManifest.routes)) if (trimSlashes$1(canonicalKey) === candidateNormalized && routeDef?.prettyPath) return routeDef.prettyPath;
208
210
  }
211
+ if (page === "pages" && !path) {
212
+ for (const routeDef of Object.values(routesManifest.routes)) if (routeDef && routeDef.prettyPath === "/") return "/";
213
+ }
209
214
  return null;
210
215
  }
211
216
 
@@ -523,4 +528,4 @@ function getWorkspaceRouteRequestPath(pathname) {
523
528
 
524
529
  //#endregion
525
530
  export { getDeploymentNamespace as a, isPossibleAppRoute as c, resolveHrefAgainstRoute as d, decodePathSegment as i, parseRouteFromUrl as l, applyBasePath as n, getFileRouteDirPath as o, buildRoutePath as r, getWorkspaceRouteRequestPath as s, app_routes_exports as t, parseRouteFromUrlAsync as u };
526
- //# sourceMappingURL=app-routes-BAEMLu9g.js.map
531
+ //# sourceMappingURL=app-routes-CKkiX12g.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-routes-CKkiX12g.js","names":["trimSlashes"],"sources":["../../src/storage/staticRouting.ts","../../src/core/app-routes.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\nimport { applyBasePath, type ShadowClawAppRoute } from \"../core/app-routes.js\";\n\nexport interface StaticRouteDefinition {\n prettyPath: string;\n}\n\nexport interface StaticRoutesManifest {\n routes: Record<string, StaticRouteDefinition>;\n subRoutes?: string[] | Record<string, string>;\n}\n\nexport const STATIC_ROUTING_SCRIPT_ID = \"shadow-claw-static-routing\";\nexport const STATIC_ROUTING_MANIFEST_PATH = \"static-routing.json\";\n\nlet cachedManifest: StaticRoutesManifest | null = null;\n\nexport function resolveStaticRoutingManifestUrl(): string {\n const targetPath = applyBasePath(`/${STATIC_ROUTING_MANIFEST_PATH}`);\n\n if (typeof window !== \"undefined\" && window.location?.origin) {\n try {\n return new URL(targetPath, window.location.origin).toString();\n } catch {\n return targetPath;\n }\n }\n\n return targetPath;\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizePrettyPathKey(path: string): string {\n let clean = trimSlashes(path);\n if (clean.endsWith(\"/index.html\")) {\n clean = clean.slice(0, -\"/index.html\".length);\n } else if (clean.endsWith(\"index.html\")) {\n clean = clean.slice(0, -\"index.html\".length);\n }\n return trimSlashes(clean);\n}\n\nfunction parseCanonicalRouteKey(\n canonicalKey: string,\n): ShadowClawAppRoute | null {\n const normalizedKey = trimSlashes(canonicalKey);\n const parts = normalizedKey.split(\"/\").filter(Boolean);\n\n if (parts.length === 0) {\n return null;\n }\n\n const first = parts[0].toLowerCase();\n if (first === \"pages\") {\n if (parts.length >= 3) {\n const rawGroup = parts[1];\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"pages\",\n groupId,\n path: filePath,\n };\n }\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n if (first === \"files\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n const filePath = parts.slice(2).join(\"/\");\n return {\n page: \"files\",\n groupId,\n path: filePath || undefined,\n };\n }\n\n if (first === \"chat\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"chat\",\n groupId,\n };\n }\n\n if (first === \"tasks\") {\n const rawGroup = parts[1] || \"main\";\n const groupId =\n rawGroup === \"main\"\n ? \"br:main\"\n : rawGroup.startsWith(\"br-\")\n ? `br:${rawGroup.slice(3)}`\n : rawGroup;\n return {\n page: \"tasks\",\n groupId,\n };\n }\n\n // If format is \"posts/xyz.md\" or \"main/posts/xyz.md\"\n if (first === \"main\") {\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: parts.slice(1).join(\"/\"),\n };\n }\n\n return {\n page: \"pages\",\n groupId: \"br:main\",\n path: normalizedKey,\n };\n}\n\nexport function getEmbeddedStaticRoutesManifest(): StaticRoutesManifest | null {\n if (typeof document !== \"undefined\") {\n const scriptEl = document.getElementById(STATIC_ROUTING_SCRIPT_ID);\n if (scriptEl && scriptEl.textContent) {\n try {\n const parsed = JSON.parse(scriptEl.textContent);\n if (parsed && typeof parsed === \"object\" && parsed.routes) {\n return parsed as StaticRoutesManifest;\n }\n } catch (err) {\n console.warn(\"Failed to parse embedded static routing manifest:\", err);\n }\n }\n }\n return null;\n}\n\nexport async function getStaticRoutingManifest(): Promise<StaticRoutesManifest> {\n if (cachedManifest) {\n return cachedManifest;\n }\n\n let baseManifest = getEmbeddedStaticRoutesManifest();\n const baseUrl = resolveStaticRoutingManifestUrl();\n\n if (!baseManifest) {\n if (typeof fetch === \"function\") {\n try {\n const res = await fetch(baseUrl);\n if (res.ok) {\n const parsed = await res.json();\n if (parsed && typeof parsed === \"object\") {\n baseManifest = parsed as StaticRoutesManifest;\n }\n }\n } catch {\n // Fetch unavailable or failed\n }\n }\n }\n\n if (!baseManifest) {\n return { routes: {} };\n }\n\n if (!baseManifest.routes) {\n baseManifest.routes = {};\n }\n\n // Removed eager recursive fetch of subRoutes for CSR to support lazy loading\n // Subroutes will be fetched on demand via resolvePrettyPathToRouteAsync.\n\n cachedManifest = baseManifest;\n return cachedManifest;\n}\n\nexport function setStaticRoutesManifest(\n manifest: StaticRoutesManifest | null,\n): void {\n cachedManifest = manifest;\n}\n\nexport function clearStaticRoutesManifestCache(): void {\n cachedManifest = null;\n}\n\nexport function resolvePrettyPathToRoute(\n pathname: string,\n manifest?: StaticRoutesManifest | null,\n): ShadowClawAppRoute | null {\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (!routeDef || !routeDef.prettyPath) {\n continue;\n }\n\n const normalizedPretty = normalizePrettyPathKey(routeDef.prettyPath);\n if (normalizedPretty === normalizedPath) {\n return parseCanonicalRouteKey(canonicalKey);\n }\n }\n\n return null;\n}\n\nexport async function resolvePrettyPathToRouteAsync(\n pathname: string,\n): Promise<ShadowClawAppRoute | null> {\n const syncMatch = resolvePrettyPathToRoute(pathname);\n if (syncMatch) return syncMatch;\n\n const manifest = await getStaticRoutingManifest();\n if (!manifest || !manifest.subRoutes) return null;\n\n let currentManifest = manifest;\n let currentManifestUrl = resolveStaticRoutingManifestUrl();\n let maxDepth = 5;\n\n while (currentManifest && currentManifest.subRoutes && maxDepth > 0) {\n let matchedSubRouteUrl: string | null = null;\n const normalizedPath = normalizePrettyPathKey(pathname);\n\n if (Array.isArray(currentManifest.subRoutes)) {\n for (const sub of currentManifest.subRoutes) {\n let subDir = sub.replace(/\\/routes\\.json$/, \"\");\n if (normalizedPath.startsWith(subDir)) {\n matchedSubRouteUrl = sub;\n break;\n }\n }\n } else if (typeof currentManifest.subRoutes === \"object\") {\n let longestMatch = \"\";\n for (const [prefix, sub] of Object.entries(currentManifest.subRoutes)) {\n const normPrefix = normalizePrettyPathKey(prefix);\n if (\n normalizedPath.startsWith(normPrefix) &&\n normPrefix.length > longestMatch.length\n ) {\n longestMatch = normPrefix;\n matchedSubRouteUrl = sub;\n }\n }\n }\n\n if (!matchedSubRouteUrl || typeof fetch !== \"function\") {\n break;\n }\n\n try {\n let subUrl = matchedSubRouteUrl;\n try {\n if (\n matchedSubRouteUrl.startsWith(\"http://\") ||\n matchedSubRouteUrl.startsWith(\"https://\")\n ) {\n subUrl = matchedSubRouteUrl;\n } else if (matchedSubRouteUrl.startsWith(\"/\")) {\n const withBase = applyBasePath(matchedSubRouteUrl);\n subUrl =\n typeof window !== \"undefined\" && window.location?.origin\n ? new URL(withBase, window.location.origin).toString()\n : withBase;\n } else {\n subUrl = new URL(matchedSubRouteUrl, currentManifestUrl).toString();\n }\n } catch {\n // Ignore\n }\n\n const res = await fetch(subUrl);\n if (!res.ok) break;\n\n const parsed = await res.json();\n if (!parsed || typeof parsed !== \"object\") break;\n\n if (parsed.routes) {\n Object.assign(manifest.routes, parsed.routes);\n }\n\n const found = resolvePrettyPathToRoute(pathname, manifest);\n if (found) return found;\n\n // Continue to next level if there are subRoutes\n currentManifest = parsed;\n currentManifestUrl = subUrl;\n maxDepth--;\n } catch (e) {\n console.warn(\"Failed to lazy load subRoute:\", matchedSubRouteUrl, e);\n break;\n }\n }\n\n return null;\n}\n\nexport function resolveRouteToPrettyPath(\n route: ShadowClawAppRoute,\n manifest?: StaticRoutesManifest | null,\n): string | null {\n const routesManifest =\n manifest || cachedManifest || getEmbeddedStaticRoutesManifest();\n if (!routesManifest || !routesManifest.routes) {\n return null;\n }\n\n const { page, groupId, path } = route;\n if (!page) {\n return null;\n }\n\n const normalizedGroupId =\n groupId === \"br:main\" || groupId === \"main\"\n ? \"main\"\n : groupId?.startsWith(\"br:\")\n ? `br-${groupId.slice(3)}`\n : groupId;\n\n const candidateKeys: string[] = [];\n if (page === \"pages\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId === \"main\") {\n candidateKeys.push(`/pages/main/${cleanPath}`);\n candidateKeys.push(`pages/main/${cleanPath}`);\n candidateKeys.push(`/pages/br:main/${cleanPath}`);\n candidateKeys.push(`/pages/br-main/${cleanPath}`);\n candidateKeys.push(`/main/${cleanPath}`);\n candidateKeys.push(`main/${cleanPath}`);\n candidateKeys.push(`/${cleanPath}`);\n candidateKeys.push(cleanPath);\n } else if (normalizedGroupId) {\n candidateKeys.push(`/pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`pages/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/pages/${groupId}/${cleanPath}`);\n }\n } else if (page === \"pages\" && !path) {\n if (normalizedGroupId === \"main\" || !normalizedGroupId) {\n candidateKeys.push(\n \"/pages/main/index.html\",\n \"pages/main/index.html\",\n \"/pages/br:main/index.html\",\n \"/pages/br-main/index.html\",\n \"/main/index.html\",\n \"main/index.html\",\n \"/index.html\",\n \"index.html\",\n \"/pages/main\",\n \"pages/main\",\n \"/pages\",\n \"pages\",\n );\n } else if (normalizedGroupId) {\n candidateKeys.push(\n `/pages/${normalizedGroupId}/index.html`,\n `pages/${normalizedGroupId}/index.html`,\n `/pages/${groupId}/index.html`,\n );\n }\n } else if (page === \"files\" && path) {\n const cleanPath = trimSlashes(path);\n if (normalizedGroupId) {\n candidateKeys.push(`/files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`files/${normalizedGroupId}/${cleanPath}`);\n candidateKeys.push(`/files/${groupId}/${cleanPath}`);\n }\n }\n\n for (const candidate of candidateKeys) {\n const candidateNormalized = trimSlashes(candidate);\n for (const [canonicalKey, routeDef] of Object.entries(\n routesManifest.routes,\n )) {\n if (\n trimSlashes(canonicalKey) === candidateNormalized &&\n routeDef?.prettyPath\n ) {\n return routeDef.prettyPath;\n }\n }\n }\n\n if (page === \"pages\" && !path) {\n for (const routeDef of Object.values(routesManifest.routes)) {\n if (routeDef && routeDef.prettyPath === \"/\") {\n return \"/\";\n }\n }\n }\n\n return null;\n}\n","import {\n resolvePrettyPathToRoute,\n resolveRouteToPrettyPath,\n resolvePrettyPathToRouteAsync,\n} from \"../storage/staticRouting.js\";\n\nexport type ShadowClawPageRoute =\n | \"chat\"\n | \"files\"\n | \"tasks\"\n | \"pages\"\n | \"settings\"\n | \"tools\"\n | \"channels\";\n\nexport interface ShadowClawAppRoute {\n page: ShadowClawPageRoute;\n groupId?: string;\n path?: string;\n anchor?: string;\n}\n\nfunction encodePathSegment(value: string): string {\n if (value === \"br:main\") {\n return \"main\";\n }\n if (value.startsWith(\"br:\")) {\n return `br-${value.slice(3)}`;\n }\n\n return encodeURIComponent(value);\n}\n\nexport function decodePathSegment(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nlet cachedBasePath: string | null = null;\n\nconst VALID_PAGES = new Set([\n \"chat\",\n \"files\",\n \"tasks\",\n \"pages\",\n \"settings\",\n \"tools\",\n \"channels\",\n]);\n\nexport function resetAppBasePathCache(): void {\n cachedBasePath = null;\n}\n\nif (typeof globalThis !== \"undefined\") {\n (globalThis as any).__applyBasePathCacheReset = resetAppBasePathCache;\n}\n\nexport function getDeploymentNamespace(): string {\n const globalObj =\n typeof window !== \"undefined\"\n ? window\n : typeof self !== \"undefined\"\n ? self\n : globalThis;\n\n if (globalObj && (globalObj as any).__SHADOWCLAW_DEPLOY_ID__) {\n const customId = String((globalObj as any).__SHADOWCLAW_DEPLOY_ID__).trim();\n if (customId) {\n return customId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const proc = (globalThis as any).process;\n if (proc && proc.env && proc.env.SHADOWCLAW_DEPLOY_ID) {\n const envId = String(proc.env.SHADOWCLAW_DEPLOY_ID).trim();\n if (envId) {\n return envId.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n }\n }\n\n const basePath = getAppBasePath();\n if (!basePath || basePath === \"/\") {\n return \"\";\n }\n\n const clean = basePath.replace(/^\\/+|\\/+$/g, \"\");\n return clean.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n}\n\nexport function getAppBasePath(): string {\n if (cachedBasePath !== null) {\n return cachedBasePath;\n }\n\n // In Web Worker environment:\n const isWorker =\n typeof window === \"undefined\" ||\n (typeof (globalThis as any).WorkerGlobalScope !== \"undefined\" &&\n typeof self !== \"undefined\" &&\n self instanceof (globalThis as any).WorkerGlobalScope);\n\n if (isWorker && typeof self !== \"undefined\" && (self as any).location) {\n const workerPath = (self as any).location.pathname || \"/\";\n const parts = workerPath.split(\"/\").filter(Boolean);\n\n // In a Web Worker, the pathname is always the URL of a script file (e.g. /agent.worker.js or /shadow-claw/agent.worker.js).\n // If there is only 1 segment (e.g. [\"agent.worker.js\"]), the worker is hosted at the root domain.\n if (parts.length <= 1) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const first = parts[0].toLowerCase();\n const isRootFileOrDir =\n first === \"service-worker.js\" ||\n first === \"sw.js\" ||\n first === \"manifest.json\" ||\n first === \"sitemap.xml\" ||\n first === \"favicon.ico\" ||\n first === \"index.html\" ||\n first === \"service-worker\" ||\n first === \"assets\" ||\n first === \"dist\" ||\n first === \"public\";\n\n // If there are 2 segments and the first is an internal asset/service-worker folder (e.g. /service-worker/init.js),\n // it's hosted at the root domain.\n if (isRootFileOrDir && parts.length === 2) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n if (!isRootFileOrDir) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n }\n\n const loc =\n typeof window !== \"undefined\" && window.location\n ? window.location\n : typeof self !== \"undefined\" && self.location\n ? self.location\n : null;\n\n if (!loc) {\n return \"/\";\n }\n\n // 1. Check for explicit <base href=\"...\"> element in the DOM\n if (\n typeof document !== \"undefined\" &&\n typeof document.querySelector === \"function\"\n ) {\n const baseEl = document.querySelector(\"base[href]\");\n if (baseEl) {\n const href = baseEl.getAttribute(\"href\");\n if (href) {\n try {\n const baseUriPath = new URL(href, loc.origin).pathname;\n let base = baseUriPath;\n if (!base.endsWith(\"/\")) {\n base += \"/\";\n }\n cachedBasePath = base;\n\n return cachedBasePath;\n } catch {\n // ignore parsing error, fall through\n }\n }\n }\n }\n\n const pathname = loc.pathname || \"/\";\n if (pathname === \"/\") {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n const parts = pathname.split(\"/\").filter(Boolean);\n const pageIndex = parts.findIndex((part) =>\n VALID_PAGES.has(part.toLowerCase()),\n );\n\n if (pageIndex >= 0) {\n if (pageIndex === 0) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n cachedBasePath = \"/\" + parts.slice(0, pageIndex).join(\"/\") + \"/\";\n\n return cachedBasePath;\n }\n\n // 2. Check if the current pathname is a known pretty route\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n }\n\n // 3. Check for single-segment subpath deployments (e.g. /shadow-claw/ or /my-app/)\n if (parts.length === 1 && !pathname.includes(\".\")) {\n cachedBasePath = \"/\" + parts[0] + \"/\";\n\n return cachedBasePath;\n }\n\n // 4. Default to root base path for unhandled multi-segment paths\n cachedBasePath = \"/\";\n\n return cachedBasePath;\n}\n\nexport function applyBasePath(path: string): string {\n const base = getAppBasePath();\n if (base === \"/\") {\n return path;\n }\n\n const [pathPart, ...rest] = path.split(/(?=[?#])/);\n\n // If the path already starts with the base, don't double-prefix.\n if (pathPart === base || pathPart.startsWith(base)) {\n return path;\n }\n\n const relative = pathPart.startsWith(\"/\") ? pathPart.slice(1) : pathPart;\n\n let combined = base + relative;\n combined = combined.replace(/\\/{2,}/g, \"/\");\n\n return combined + rest.join(\"\");\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeRouteGroupId(\n groupId: string | undefined,\n): string | undefined {\n if (!groupId) {\n return groupId;\n }\n\n if (groupId === \"main\") {\n return \"br:main\";\n }\n\n // Accept browser-safe \"br-...\" route IDs and normalize to canonical \"br:...\".\n if (groupId.startsWith(\"br-\")) {\n return `br:${groupId.slice(3)}`;\n }\n\n return groupId;\n}\n\nfunction sanitizeWorkspacePath(path: string | undefined): string | undefined {\n if (!path) {\n return undefined;\n }\n\n const normalized = trimSlashes(path.replace(/\\\\/g, \"/\"));\n if (!normalized) {\n return undefined;\n }\n\n const parts = normalized\n .split(\"/\")\n .filter(Boolean)\n .filter((part) => part !== \".\" && part !== \"..\");\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.join(\"/\");\n}\n\nexport function buildRoutePath(route: ShadowClawAppRoute): string {\n const anchor = route.anchor ? `#${route.anchor.replace(/^#/, \"\")}` : \"\";\n\n const prettyPath = resolveRouteToPrettyPath(route);\n if (prettyPath) {\n let clean = prettyPath;\n if (!clean.startsWith(\"/\")) {\n clean = `/${clean}`;\n }\n\n return `${clean}${anchor}`;\n }\n\n switch (route.page) {\n case \"chat\": {\n const path = route.groupId\n ? `/chat/${encodePathSegment(route.groupId)}/`\n : \"/chat\";\n\n return `${path}${anchor}`;\n }\n\n case \"tasks\": {\n const path = route.groupId\n ? `/tasks/${encodePathSegment(route.groupId)}/`\n : \"/tasks\";\n\n return `${path}${anchor}`;\n }\n\n case \"files\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!route.groupId) {\n return `/files${anchor}`;\n }\n\n if (!workspacePath) {\n return `/files/${encodePathSegment(route.groupId)}/${anchor}`;\n }\n\n return `/files/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n case \"pages\": {\n const workspacePath = sanitizeWorkspacePath(route.path);\n if (!workspacePath) {\n return `/pages${anchor}`;\n }\n\n if (route.groupId) {\n return `/pages/${encodePathSegment(route.groupId)}/${workspacePath}${anchor}`;\n }\n\n return `/pages/${workspacePath}${anchor}`;\n }\n\n case \"tools\":\n return `/settings/tool-configuration${anchor}`;\n\n case \"channels\":\n return `/settings/channel-configuration${anchor}`;\n\n case \"settings\":\n default:\n return `/settings${anchor}`;\n }\n}\n\nexport function parseRouteFromUrl(\n url: URL,\n fallbackGroupId?: string,\n): ShadowClawAppRoute | null {\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = resolvePrettyPathToRoute(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n const parts = pathname\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n\n if (parts.length === 0) {\n return null;\n }\n\n const page = parts[0].toLowerCase();\n\n if (page === \"chat\") {\n return {\n page: \"chat\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"tasks\") {\n return {\n page: \"tasks\",\n groupId: normalizeRouteGroupId(parts[1] || fallbackGroupId),\n anchor,\n };\n }\n\n if (page === \"files\") {\n const groupId = normalizeRouteGroupId(parts[1] || fallbackGroupId);\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n\n return {\n page: \"files\",\n groupId,\n path,\n anchor,\n };\n }\n\n if (page === \"pages\") {\n if (parts.length >= 3) {\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(parts[1]),\n path: sanitizeWorkspacePath(parts.slice(2).join(\"/\")),\n anchor,\n };\n }\n\n return {\n page: \"pages\",\n groupId: normalizeRouteGroupId(fallbackGroupId),\n path: sanitizeWorkspacePath(parts.slice(1).join(\"/\")),\n anchor,\n };\n }\n\n if (page === \"settings\") {\n const section = (parts[1] || \"\").toLowerCase();\n if (section === \"tool-configuration\") {\n return { page: \"tools\", anchor };\n }\n\n if (section === \"channel-configuration\") {\n return { page: \"channels\", anchor };\n }\n\n return { page: \"settings\", anchor };\n }\n\n if (page === \"tools\") {\n return { page: \"tools\", anchor };\n }\n\n if (page === \"channels\") {\n return { page: \"channels\", anchor };\n }\n\n return null;\n}\n\nexport function isPossibleAppRoute(pathname: string): boolean {\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n } else if (basePath !== \"/\" && !relativePath.startsWith(basePath)) {\n return false;\n }\n\n const parts = relativePath.split(\"/\").filter(Boolean);\n if (parts.length === 0) return true; // root\n\n const page = parts[0].toLowerCase();\n if (VALID_PAGES.has(page)) return true;\n\n if (resolvePrettyPathToRoute(relativePath)) return true;\n\n return false;\n}\n\nexport async function parseRouteFromUrlAsync(\n url: URL,\n fallbackGroupId?: string,\n): Promise<ShadowClawAppRoute | null> {\n const syncRoute = parseRouteFromUrl(url, fallbackGroupId);\n if (syncRoute) return syncRoute;\n\n let pathname = url.pathname;\n const basePath = getAppBasePath();\n if (basePath !== \"/\" && pathname.startsWith(basePath)) {\n pathname = \"/\" + pathname.slice(basePath.length);\n }\n\n const prettyRoute = await resolvePrettyPathToRouteAsync(pathname);\n if (prettyRoute) {\n const anchor = url.hash ? url.hash.replace(/^#/, \"\") : undefined;\n return {\n ...prettyRoute,\n anchor: anchor || prettyRoute.anchor,\n };\n }\n\n return null;\n}\n\nexport function resolveHrefAgainstRoute(\n href: string,\n routePath: string,\n origin: string,\n): URL | null {\n const trimmed = href.trim();\n if (!trimmed || trimmed.startsWith(\"javascript:\")) {\n return null;\n }\n\n if (trimmed.startsWith(\"/\")) {\n try {\n const resolvedPath = applyBasePath(trimmed);\n\n return new URL(resolvedPath, origin);\n } catch {\n return null;\n }\n }\n\n const base = new URL(routePath, origin);\n try {\n return new URL(trimmed, base);\n } catch {\n return null;\n }\n}\n\nexport function getFileRouteDirPath(groupId: string, filePath: string): string {\n const normalized = sanitizeWorkspacePath(filePath);\n if (!normalized) {\n return buildRoutePath({ page: \"files\", groupId });\n }\n\n const parts = normalized.split(\"/\");\n parts.pop();\n const prefix = parts.length > 0 ? `${parts.join(\"/\")}/` : \"\";\n\n return `/files/${encodePathSegment(groupId)}/${prefix}`;\n}\n\nexport function getWorkspaceRouteRequestPath(\n pathname: string,\n): { groupId: string; path: string } | null {\n let relativePath = pathname;\n const basePath = getAppBasePath();\n\n if (basePath !== \"/\" && relativePath.startsWith(basePath)) {\n relativePath = \"/\" + relativePath.slice(basePath.length);\n }\n\n const parts = relativePath\n .split(\"/\")\n .filter(Boolean)\n .map((part) => decodePathSegment(part));\n\n if (parts.length < 3) {\n return null;\n }\n\n if (parts[0] !== \"files\") {\n return null;\n }\n\n const groupId = normalizeRouteGroupId(parts[1]) || parts[1];\n const path = sanitizeWorkspacePath(parts.slice(2).join(\"/\"));\n if (!groupId || !path) {\n return null;\n }\n\n return { groupId, path };\n}\n"],"mappings":"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"}
@@ -1,40 +1,40 @@
1
1
  import ShadowClawElement from "./shadow-claw-element.js";
2
2
  import { a as showSuccess, i as showInfo, l as toastStore, o as showToast, r as showError, s as showWarning } from "../toast-DZ6r7_YI.js";
3
- import { t as ShadowClaw } from "../shadow-claw-4x3LqlII.js";
4
- import { t as ShadowClawChat } from "../shadow-claw-chat-BD18-mAR.js";
5
- import { t as ShadowClawA2UI } from "../shadow-claw-a2ui-Dipe8nY2.js";
3
+ import { t as ShadowClaw } from "../shadow-claw-CtCj5Rn_.js";
4
+ import { t as ShadowClawChat } from "../shadow-claw-chat-Dw32DPV2.js";
5
+ import { t as ShadowClawA2UI } from "../shadow-claw-a2ui-CvK5w940.js";
6
6
  import { t as ShadowClawPageHeaderActionButton } from "../shadow-claw-page-header-action-button-BXXm5b5N.js";
7
7
  import { ShadowClawA2UIInterceptor } from "./shadow-claw-a2ui-interceptor.js";
8
8
  import { ShadowClawDialog } from "./shadow-claw-dialog.js";
9
- import { t as ShadowClawPageHeader } from "../shadow-claw-page-header-6gq6EMqX.js";
10
- import { t as ShadowClawFiles } from "../shadow-claw-files-BI0P3m8a.js";
9
+ import { t as ShadowClawPageHeader } from "../shadow-claw-page-header-DAYz3I_o.js";
10
+ import { t as ShadowClawFiles } from "../shadow-claw-files-xGGhsHNH.js";
11
11
  import { t as ShadowClawEmptyState } from "../shadow-claw-empty-state-D9bnqWMF.js";
12
- import { t as ShadowClawFileViewer } from "../shadow-claw-file-viewer-CuDhkVcL.js";
12
+ import { t as ShadowClawFileViewer } from "../shadow-claw-file-viewer-CAsn9NxH.js";
13
13
  import { t as ShadowClawPdfViewer } from "../shadow-claw-pdf-viewer-D3leDhRq.js";
14
- import { t as ShadowClawTasks } from "../shadow-claw-tasks-6OhALkq1.js";
15
- import { n as ShadowClawTerminal } from "../shadow-claw-terminal-BGtxA1qD.js";
16
- import { t as ShadowClawPages } from "../shadow-claw-pages-Bo8_z2S-.js";
17
- import { t as ShadowClawSettings } from "../shadow-claw-settings-D00B4p4L.js";
18
- import { t as ShadowClawPeerJs } from "../shadow-claw-peerjs-DRTLCVDQ.js";
19
- import { t as ShadowClawChannelConfig } from "../shadow-claw-channel-config-CIm_Bxd2.js";
20
- import { t as ShadowClawChannels } from "../shadow-claw-channels-CaceK52s.js";
14
+ import { t as ShadowClawTasks } from "../shadow-claw-tasks-Dc4BC-t-.js";
15
+ import { n as ShadowClawTerminal } from "../shadow-claw-terminal-BINcTdsk.js";
16
+ import { t as ShadowClawPages } from "../shadow-claw-pages-BLeEZb9k.js";
17
+ import { t as ShadowClawSettings } from "../shadow-claw-settings-B7o0Z4hu.js";
18
+ import { t as ShadowClawPeerJs } from "../shadow-claw-peerjs-BcFnbK74.js";
19
+ import { t as ShadowClawChannelConfig } from "../shadow-claw-channel-config-Da2dN19M.js";
20
+ import { t as ShadowClawChannels } from "../shadow-claw-channels-BofYHgz8.js";
21
21
  import { t as ShadowClawProviderModelPicker } from "../shadow-claw-provider-model-picker-CsA-507a.js";
22
22
  import { t as ShadowClawProviderModuleSettings } from "../shadow-claw-provider-module-settings-3sCTnCSp.js";
23
- import { t as ShadowClawConversations } from "../shadow-claw-conversations-CDsza_oB.js";
23
+ import { t as ShadowClawConversations } from "../shadow-claw-conversations-0UXge23k.js";
24
24
  import { t as ShadowClawToast } from "../shadow-claw-toast-aRLHKnSl.js";
25
- import { t as ShadowClawTools } from "../shadow-claw-tools-OeIwAnnd.js";
25
+ import { t as ShadowClawTools } from "../shadow-claw-tools-BjFgXNLR.js";
26
26
  import { t as ShadowClawActions } from "../shadow-claw-actions-G99P9oxr.js";
27
27
  import { t as ShadowClawCard } from "../shadow-claw-card-D9azfSMu.js";
28
- import { t as ShadowClawAccounts } from "../shadow-claw-accounts-BgCkz3Zv.js";
29
- import { t as ShadowClawControlPlane } from "../shadow-claw-control-plane-U6LsfRPm.js";
30
- import { t as ShadowClawGit } from "../shadow-claw-git-xRApLEMN.js";
31
- import { t as ShadowClawIntegrations } from "../shadow-claw-integrations-B2e1Nfg1.js";
32
- import { t as ShadowClawLlm } from "../shadow-claw-llm-Bc2mWuGb.js";
33
- import { t as ShadowClawMcpRemote } from "../shadow-claw-mcp-remote-D_Bh3aeC.js";
34
- import { t as ShadowClawNetworking } from "../shadow-claw-networking-F5W3n5ci.js";
35
- import { t as ShadowClawNotifications } from "../shadow-claw-notifications-lvMt9WJ1.js";
36
- import { t as ShadowClawStorage } from "../shadow-claw-storage-DgMe7-Zo.js";
37
- import { t as ShadowClawTaskServer } from "../shadow-claw-task-server-D103YOuI.js";
38
- import { t as ShadowClawWebvm } from "../shadow-claw-webvm-gVFZ197u.js";
28
+ import { t as ShadowClawAccounts } from "../shadow-claw-accounts-Br3XdHro.js";
29
+ import { t as ShadowClawControlPlane } from "../shadow-claw-control-plane-CwFotFDh.js";
30
+ import { t as ShadowClawGit } from "../shadow-claw-git-B606hcMU.js";
31
+ import { t as ShadowClawIntegrations } from "../shadow-claw-integrations-Bwq5cba1.js";
32
+ import { t as ShadowClawLlm } from "../shadow-claw-llm-BgpcMBIy.js";
33
+ import { t as ShadowClawMcpRemote } from "../shadow-claw-mcp-remote-DvQCA-Bk.js";
34
+ import { t as ShadowClawNetworking } from "../shadow-claw-networking-Cxvf9c7E.js";
35
+ import { t as ShadowClawNotifications } from "../shadow-claw-notifications-CGVcFYBy.js";
36
+ import { t as ShadowClawStorage } from "../shadow-claw-storage-afMVqB7E.js";
37
+ import { t as ShadowClawTaskServer } from "../shadow-claw-task-server-B9-MQjl6.js";
38
+ import { t as ShadowClawWebvm } from "../shadow-claw-webvm-Xe3ByMDw.js";
39
39
 
40
40
  export { ShadowClaw, ShadowClawA2UI, ShadowClawA2UIInterceptor, ShadowClawAccounts, ShadowClawActions, ShadowClawCard, ShadowClawChannelConfig, ShadowClawChannels, ShadowClawChat, ShadowClawControlPlane, ShadowClawConversations, ShadowClawDialog, ShadowClawElement, ShadowClawEmptyState, ShadowClawFileViewer, ShadowClawFiles, ShadowClawGit, ShadowClawIntegrations, ShadowClawLlm, ShadowClawMcpRemote, ShadowClawNetworking, ShadowClawNotifications, ShadowClawPageHeader, ShadowClawPageHeaderActionButton, ShadowClawPages, ShadowClawPdfViewer, ShadowClawPeerJs, ShadowClawProviderModelPicker, ShadowClawProviderModuleSettings, ShadowClawSettings, ShadowClawStorage, ShadowClawTaskServer, ShadowClawTasks, ShadowClawTerminal, ShadowClawToast, ShadowClawTools, ShadowClawWebvm, showError, showInfo, showSuccess, showToast, showWarning, toastStore };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawAccounts } from "../../shadow-claw-accounts-BgCkz3Zv.js";
1
+ import { t as ShadowClawAccounts } from "../../shadow-claw-accounts-Br3XdHro.js";
2
2
 
3
3
  export { ShadowClawAccounts };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawChannelConfig } from "../../shadow-claw-channel-config-CIm_Bxd2.js";
1
+ import { t as ShadowClawChannelConfig } from "../../shadow-claw-channel-config-Da2dN19M.js";
2
2
 
3
3
  export { ShadowClawChannelConfig };
@@ -1,3 +1,3 @@
1
- import { n as getControlPlaneTargetAddressSpace, t as ShadowClawControlPlane } from "../../shadow-claw-control-plane-U6LsfRPm.js";
1
+ import { n as getControlPlaneTargetAddressSpace, t as ShadowClawControlPlane } from "../../shadow-claw-control-plane-CwFotFDh.js";
2
2
 
3
3
  export { ShadowClawControlPlane, getControlPlaneTargetAddressSpace };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawGit } from "../../shadow-claw-git-xRApLEMN.js";
1
+ import { t as ShadowClawGit } from "../../shadow-claw-git-B606hcMU.js";
2
2
 
3
3
  export { ShadowClawGit };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawIntegrations } from "../../shadow-claw-integrations-B2e1Nfg1.js";
1
+ import { t as ShadowClawIntegrations } from "../../shadow-claw-integrations-Bwq5cba1.js";
2
2
 
3
3
  export { ShadowClawIntegrations };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawLlm } from "../../shadow-claw-llm-Bc2mWuGb.js";
1
+ import { t as ShadowClawLlm } from "../../shadow-claw-llm-BgpcMBIy.js";
2
2
 
3
3
  export { ShadowClawLlm };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawMcpRemote } from "../../shadow-claw-mcp-remote-D_Bh3aeC.js";
1
+ import { t as ShadowClawMcpRemote } from "../../shadow-claw-mcp-remote-DvQCA-Bk.js";
2
2
 
3
3
  export { ShadowClawMcpRemote };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawNetworking } from "../../shadow-claw-networking-F5W3n5ci.js";
1
+ import { t as ShadowClawNetworking } from "../../shadow-claw-networking-Cxvf9c7E.js";
2
2
 
3
3
  export { ShadowClawNetworking };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawNotifications } from "../../shadow-claw-notifications-lvMt9WJ1.js";
1
+ import { t as ShadowClawNotifications } from "../../shadow-claw-notifications-CGVcFYBy.js";
2
2
 
3
3
  export { ShadowClawNotifications };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawPeerJs } from "../../shadow-claw-peerjs-DRTLCVDQ.js";
1
+ import { t as ShadowClawPeerJs } from "../../shadow-claw-peerjs-BcFnbK74.js";
2
2
 
3
3
  export { ShadowClawPeerJs };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawStorage } from "../../shadow-claw-storage-DgMe7-Zo.js";
1
+ import { t as ShadowClawStorage } from "../../shadow-claw-storage-afMVqB7E.js";
2
2
 
3
3
  export { ShadowClawStorage };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawTaskServer } from "../../shadow-claw-task-server-D103YOuI.js";
1
+ import { t as ShadowClawTaskServer } from "../../shadow-claw-task-server-B9-MQjl6.js";
2
2
 
3
3
  export { ShadowClawTaskServer };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawWebvm } from "../../shadow-claw-webvm-gVFZ197u.js";
1
+ import { t as ShadowClawWebvm } from "../../shadow-claw-webvm-Xe3ByMDw.js";
2
2
 
3
3
  export { ShadowClawWebvm };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Sync active state on slotted sidebar navigation links.
3
+ */
4
+ export declare function syncSlottedSidebarActiveLinks(host: HTMLElement | null, currentUrl?: URL): void;
5
+ /**
6
+ * Sets up listeners so slotted sidebar active links stay in sync whenever
7
+ * the URL changes (popstate, Navigation API navigate, or iframe replaceState).
8
+ * Returns a cleanup function to remove the listeners.
9
+ */
10
+ export declare function setupSlottedSidebarActiveLinks(host: HTMLElement | null): () => void;
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawA2UI } from "../shadow-claw-a2ui-Dipe8nY2.js";
1
+ import { t as ShadowClawA2UI } from "../shadow-claw-a2ui-CvK5w940.js";
2
2
 
3
3
  export { ShadowClawA2UI };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawAccounts } from "../shadow-claw-accounts-BgCkz3Zv.js";
1
+ import { t as ShadowClawAccounts } from "../shadow-claw-accounts-Br3XdHro.js";
2
2
 
3
3
  export { ShadowClawAccounts };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawChannelConfig } from "../shadow-claw-channel-config-CIm_Bxd2.js";
1
+ import { t as ShadowClawChannelConfig } from "../shadow-claw-channel-config-Da2dN19M.js";
2
2
 
3
3
  export { ShadowClawChannelConfig };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawChannels } from "../shadow-claw-channels-CaceK52s.js";
1
+ import { t as ShadowClawChannels } from "../shadow-claw-channels-BofYHgz8.js";
2
2
 
3
3
  export { ShadowClawChannels };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawChat } from "../shadow-claw-chat-BD18-mAR.js";
1
+ import { t as ShadowClawChat } from "../shadow-claw-chat-Dw32DPV2.js";
2
2
 
3
3
  export { ShadowClawChat };
@@ -1,3 +1,3 @@
1
- import { n as getControlPlaneTargetAddressSpace, t as ShadowClawControlPlane } from "../shadow-claw-control-plane-U6LsfRPm.js";
1
+ import { n as getControlPlaneTargetAddressSpace, t as ShadowClawControlPlane } from "../shadow-claw-control-plane-CwFotFDh.js";
2
2
 
3
3
  export { ShadowClawControlPlane, getControlPlaneTargetAddressSpace };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawConversations } from "../shadow-claw-conversations-CDsza_oB.js";
1
+ import { t as ShadowClawConversations } from "../shadow-claw-conversations-0UXge23k.js";
2
2
 
3
3
  export { ShadowClawConversations };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawFileViewer } from "../shadow-claw-file-viewer-CuDhkVcL.js";
1
+ import { t as ShadowClawFileViewer } from "../shadow-claw-file-viewer-CAsn9NxH.js";
2
2
 
3
3
  export { ShadowClawFileViewer };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawFiles } from "../shadow-claw-files-BI0P3m8a.js";
1
+ import { t as ShadowClawFiles } from "../shadow-claw-files-xGGhsHNH.js";
2
2
 
3
3
  export { ShadowClawFiles };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawGit } from "../shadow-claw-git-xRApLEMN.js";
1
+ import { t as ShadowClawGit } from "../shadow-claw-git-B606hcMU.js";
2
2
 
3
3
  export { ShadowClawGit };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawIntegrations } from "../shadow-claw-integrations-B2e1Nfg1.js";
1
+ import { t as ShadowClawIntegrations } from "../shadow-claw-integrations-Bwq5cba1.js";
2
2
 
3
3
  export { ShadowClawIntegrations };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawLlm } from "../shadow-claw-llm-Bc2mWuGb.js";
1
+ import { t as ShadowClawLlm } from "../shadow-claw-llm-BgpcMBIy.js";
2
2
 
3
3
  export { ShadowClawLlm };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawMcpRemote } from "../shadow-claw-mcp-remote-D_Bh3aeC.js";
1
+ import { t as ShadowClawMcpRemote } from "../shadow-claw-mcp-remote-DvQCA-Bk.js";
2
2
 
3
3
  export { ShadowClawMcpRemote };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawNetworking } from "../shadow-claw-networking-F5W3n5ci.js";
1
+ import { t as ShadowClawNetworking } from "../shadow-claw-networking-Cxvf9c7E.js";
2
2
 
3
3
  export { ShadowClawNetworking };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawNotifications } from "../shadow-claw-notifications-lvMt9WJ1.js";
1
+ import { t as ShadowClawNotifications } from "../shadow-claw-notifications-CGVcFYBy.js";
2
2
 
3
3
  export { ShadowClawNotifications };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawPageHeader } from "../shadow-claw-page-header-6gq6EMqX.js";
1
+ import { t as ShadowClawPageHeader } from "../shadow-claw-page-header-DAYz3I_o.js";
2
2
 
3
3
  export { ShadowClawPageHeader };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawPages } from "../shadow-claw-pages-Bo8_z2S-.js";
1
+ import { t as ShadowClawPages } from "../shadow-claw-pages-BLeEZb9k.js";
2
2
 
3
3
  export { ShadowClawPages };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawPeerJs } from "../shadow-claw-peerjs-DRTLCVDQ.js";
1
+ import { t as ShadowClawPeerJs } from "../shadow-claw-peerjs-BcFnbK74.js";
2
2
 
3
3
  export { ShadowClawPeerJs };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawSettings } from "../shadow-claw-settings-D00B4p4L.js";
1
+ import { t as ShadowClawSettings } from "../shadow-claw-settings-B7o0Z4hu.js";
2
2
 
3
3
  export { ShadowClawSettings };
@@ -1,3 +1,3 @@
1
- import { t as ShadowClawStorage } from "../shadow-claw-storage-DgMe7-Zo.js";
1
+ import { t as ShadowClawStorage } from "../shadow-claw-storage-afMVqB7E.js";
2
2
 
3
3
  export { ShadowClawStorage };