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
@@ -141,7 +141,7 @@ Markdown and HTML preview work should preserve the Settings-backed iframe host a
141
141
  ### Static Main Site, Routing & Page Suppression
142
142
 
143
143
  - **Page Seeding & Suppression:** Static main site pages are seeded from the `pages/main/` directory via `seedStaticMainSite` (`src/storage/staticMainSite.ts`). When removing pages from the Pages sidebar, ensure suppression is recorded via `suppressPage` (`src/storage/suppressedPages.ts`) so they are not automatically re-seeded on app launch. Re-adding a page calls `unsuppressPage` to clear suppression.
144
- - **Static Pretty Paths & Routing:** When `pages/routes.json` is present, `src/cli/prerender/pretty-paths/prerender-pretty-paths.ts` generates physical `index.html` files with DSD shells for pretty paths and injects the routing manifest into `#shadow-claw-static-routing` and `static-routing.json` (`src/storage/staticRouting.ts`). Keep routing resolution environment-agnostic (Node.js, Electron, GitHub Pages). Pages containing the `--purge-pages` slug are excluded from pre-rendered static site manifests and DSD output to prevent accidental publication. Client-side route matching uses `isPossibleAppRoute` to validate path compatibility (stripping base path, matching valid top-level pages and pretty paths), ensuring same-origin links to non-app routes (like external demo subpaths) fall back gracefully to native browser navigation.
144
+ - **Static Pretty Paths & Routing:** When `pages/routes.json` is present, `src/cli/prerender/pretty-paths/prerender-pretty-paths.ts` generates physical `index.html` files with DSD shells for pretty paths and injects the routing manifest into `#shadow-claw-static-routing` and `static-routing.json` (`src/storage/staticRouting.ts`). Keep routing resolution environment-agnostic (Node.js, Electron, GitHub Pages). Pages containing the `--purge-pages` slug are excluded from pre-rendered static site manifests and DSD output to prevent accidental publication. Client-side route matching uses `isPossibleAppRoute` to validate path compatibility (stripping base path, matching valid top-level pages and pretty paths), ensuring same-origin links to non-app routes (like external demo subpaths) fall back gracefully to native browser navigation. Static routing supports root pretty path resolution (mapping `/` and `/index.html` to `{ page: "pages", groupId: "br:main", path: "index.html" }` and resolving `{ page: "pages" }` back to `/`). In-feed scroll and scroll-spy `replaceState` navigations (`inFeedScroll`, `scrollSpy`, `suppressRouter` in navigation or history state) are guarded against re-triggering SPA route transitions in `getRoute` and `popstateListener`.
145
145
  - **Pre-rendered DSD Shell Override:** `OVERRIDE_PRERENDER_SKELETON` (`override_prerender_skeleton`) allows suppressing Declarative Shadow DOM (DSD) shell content on initial load to prevent visual flash before full hydration. Handled during bootstrap in `src/core/theme-init.ts` and `src/components/shadow-claw/shadow-claw.ts`.
146
146
  - **Markdown Frontmatter Visibility:** Markdown preview surfaces can optionally render YAML frontmatter as visible metadata/details blocks. Keep the four frontmatter toggles (`pages`, `file_viewer`, `chat`, `tasks`) and their config keys in sync with the rendering behavior when touching markdown UX.
147
147
  - **Page Navigation & Sanitization:** Ensure `title` strings passed to headers (like `shadow-claw-page-header`) are sanitized (HTML stripped/escaped). Keyboard navigation (`ArrowLeft`/`ArrowRight`) and swipe gestures must include strict focus guards to prevent interfering with active inputs or selections.
@@ -177,6 +177,7 @@ Markdown and HTML preview work should preserve the Settings-backed iframe host a
177
177
  - **Declarative Configuration (`shadow-claw.config.json`):** Template repositories configure metadata, branding, tool defaults (`defaultToolsProfile`, `enabledTools`), custom element allowlists, navigation visibility, and server/cache storage (`cacheDir`, `server.cacheDir`) via `shadow-claw.config.json` (a superset format with backward compatibility for legacy `site-config.json`), which is patched into production artifacts at build time via `src/cli/site-config/apply.ts` and seeded into IndexedDB at runtime via `applySiteConfigDefaults()`.
178
178
  - **Per-Deployment Storage Namespacing:** Use `namespacedStorage` for `localStorage` keys and `getDbName()` / `getOpfsRootName()` for IndexedDB/OPFS namespacing per deployment namespace (`getDeploymentNamespace()`) to prevent state leakage across subpath deployments. Legacy database stores are automatically migrated via `migrateLegacyDatabase.ts`.
179
179
  - **Dynamic Sidebar Navigation:** Sidebar navigation items (Pages, Chat, Tasks, Files) support runtime toggling and build-time DSD hiding. Ensure navigation fallback logic (`getDefaultSidebarPage`) resolves to the next visible item when active pages are hidden.
180
+ - **Slotted Sidebar & Custom Navigation:** `<shadow-claw>` exposes named slots for sidebar customization: `sidebar-nav`, `sidebar`, `sidebar-content`, and `sidebar-footer`. `shadow-claw.config.json` supports declarative sidebar configuration via `sidebar.slotHtml`, `sidebar.slotPath`, `sidebar.sections` (with nested items/links), or automatic discovery of `pages/main/sidebar.html` (or `sidebar.html`). Slotted navigation links automatically sync active state and `aria-current="page"` via `syncSlottedSidebarActiveLinks` on route and navigation changes, and automatically collapse the mobile sidebar drawer upon click.
180
181
 
181
182
  ### CLI, Headless Agent Participant & Dual-Root Build Pipeline
182
183
 
@@ -116,6 +116,7 @@ npm install && npm run dev # Dev server → http://localhost:8888
116
116
  - **Dual-Dispatch Sandboxing & Storage:** Client-side compute via sandboxed JavaScript and `just-bash` (or WebVM Alpine Linux) backed by Origin Private File System (OPFS) and IndexedDB; paired with host-native Node filesystem handles and SQLite database persistence on the server side.
117
117
  - **PWA & Electron Desktop Parity:** Deployable as a progressive web app with Service Worker and Web Push, or as a native desktop application with full feature parity.
118
118
  - **Modular Package Library Exports & Standardized Utilities:** Exposes modular ESM exports declared in `package.json` under `.`, `./cli`, `./cli/*`, `./components`, `./components/*`, `./utils`, and `./utils/*`, compiled via Rolldown with dynamic entry point discovery for reusable components and standardized cross-cutting utilities (`base64`, `coerce`, `delay`, `filename`, `isBinary`, `mime`, `normalizeStringList`, `normalizeWorkspacePath`, `parseBooleanConfig`, `parseStoredStringList`, `ulid`).
119
+ - **Static Publishing & Slotted Navigation:** Publish documentation portals and knowledge hubs with Declarative Shadow DOM (DSD) SSR, root and sub-route pretty paths, customizable slotted sidebar navigation (`sidebar-nav`, `sidebar`, `sidebar-content`, `sidebar-footer`), and declarative sections.
119
120
  - **Control Plane, CLI & Native MCP Server:** Backed by a Node.js service layer and CLI (`shadow-claw`) that provides background cron scheduling, remote backups, direct WebRTC DataChannel connectivity, and a Stateless MCP server featuring both native server management tools and dynamic browser tool relaying to external agent hosts (Claude Desktop, Cursor, Goose).
120
121
 
121
122
  ---
@@ -1,4 +1,4 @@
1
- import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-aKtaBQYM.js";import{i,n as a,r as o,t as s}from"./txPromise-C2iYogHX.js";import{t as c}from"./getConfig-4saf0Tkq.js";const l=new 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)))}};function u(e){return e.replace(/^\/+|\/+$/g,``)}function d(e){let t=u(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),u(t)}function f(e){let t=u(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 p(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function m(e,t){let n=t||p();if(!n||!n.routes)return null;let r=d(e);if(!r)return null;for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&d(t.prettyPath)===r)return f(e);return null}let h=null;const g=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function _(){h=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=_);function v(){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=y();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function y(){if(h!==null)return h;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 h=`/`,h;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 h=`/`,h;if(!n)return h=`/`+e[0]+`/`,h}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+=`/`),h=t,h}catch{}}}let t=e.pathname||`/`;if(t===`/`)return h=`/`,h;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>g.has(e.toLowerCase()));return r>=0?r===0?(h=`/`,h):(h=`/`+n.slice(0,r).join(`/`)+`/`,h):m(t)?(h=`/`,h):n.length===1&&!t.includes(`.`)?(h=`/`+n[0]+`/`,h):(h=`/`,h)}function b(e){let t=y();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function x(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}x(`ShadowClaw`);const S=8192,C=[{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}];function w(e){if(!e)return S;let t=l.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 C)if(e.includes(t))return n;return S}const T=1800,E=`shadowclaw`;function D(){let e=v();return e?`shadowclaw-${e}`:E}D();const O=`shadowclaw`,k=`br:main`,A={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`}}},j=Object.fromEntries(Object.values(A).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(A).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}]));const M={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:`http://localhost:8888/bedrock-proxy/invoke`,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-4-6-v1:0`,modelsUrl:`http://localhost:8888/bedrock-proxy/models`,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:`http://localhost:8888/ollama-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:`http://localhost:8888/ollama-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:`http://localhost:8888/llamafile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:`http://localhost:8888/llamafile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:`http://localhost:8888/transformers-js-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`http://localhost:8888/transformers-js-proxy/models`,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}};function ee(e){return M[e]||null}function te(e){return`api_key:${e}`}function ne(e){return A[e]||null}function N(e,t,n=`http_api`){let r=ne(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}const P={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`},re=`localhost`,F=8888,ie=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`send_notification`,`show_toast`,`spawn_subagent`]);function ae(e){return e.filter(e=>!ie.has(e.name))}function oe(){return!1}async function se(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}var ce=t({MemoryDirectoryHandle:()=>me,MemoryFileHandle:()=>pe,MemorySyncAccessHandle:()=>de,MemoryWritableStream:()=>fe,getMemoryOpfsRoot:()=>ge});function le(e,t){if(typeof DOMException<`u`)try{return new DOMException(e,t)}catch{}let n=Error(e);return n.name=t,n}function ue(e){let t=e();return t[Symbol.asyncDispose??Symbol.for(`Symbol.asyncDispose`)]=async()=>{},t}var de=class{_file;_closed=!1;constructor(e){this._file=e}close(){this._closed=!0}flush(){}getSize(){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);return this._file.getRawData().byteLength}read(e,t){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let n=this._file.getRawData(),r=t?.at??0;if(r>=n.byteLength)return 0;let i=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),a=n.subarray(r,r+i.byteLength);return i.set(a),a.byteLength}write(e,t){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=t?.at??0,i=this._file.getRawData(),a=r+n.byteLength,o;return a>i.byteLength?(o=new Uint8Array(a),o.set(i)):o=new Uint8Array(i),o.set(n,r),this._file.setRawData(o),n.byteLength}truncate(e){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let t=this._file.getRawData(),n=new Uint8Array(e);n.set(t.subarray(0,Math.min(t.byteLength,e))),this._file.setRawData(n)}},fe=class{_file;_buffer;_position=0;_length=0;_closed=!1;constructor(e,t=!1){this._file=e;let n=e.getRawData();t?(this._buffer=new Uint8Array(n),this._length=n.byteLength):(this._buffer=new Uint8Array(1024),this._length=0)}async write(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);let t;if(typeof e==`string`)t=new TextEncoder().encode(e);else if(e instanceof Uint8Array)t=e;else if(e instanceof ArrayBuffer)t=new Uint8Array(e);else if(typeof Blob<`u`&&e instanceof Blob)t=typeof e.arrayBuffer==`function`?new Uint8Array(await e.arrayBuffer()):typeof e.text==`function`?new TextEncoder().encode(await e.text()):typeof FileReader<`u`?await new Promise(t=>{let n=new FileReader;n.onload=()=>{t(new Uint8Array(n.result))},n.onerror=()=>t(new Uint8Array),n.readAsArrayBuffer(e)}):new Uint8Array;else if(e&&typeof e==`object`&&`type`in e)if(e.type===`write`){typeof e.position==`number`&&(this._position=e.position);let n=e.data;t=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):typeof Blob<`u`&&n instanceof Blob&&typeof n.arrayBuffer==`function`?new Uint8Array(await n.arrayBuffer()):new Uint8Array}else if(e.type===`seek`){this._position=e.position??0;return}else if(e.type===`truncate`){this._truncate(e.size??0);return}else t=new Uint8Array;else t=new Uint8Array;let n=this._position+t.length;if(n>this._buffer.length){let e=Math.max(this._buffer.length*2,n,1024),t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._buffer.set(t,this._position),this._position+=t.length,this._position>this._length&&(this._length=this._position)}_truncate(e){if(e<this._length)this._length=e;else if(e>this._length){if(e>this._buffer.length){let t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._length=e}this._position>e&&(this._position=e)}async seek(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);this._position=e}async truncate(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);this._truncate(e)}async close(){if(this._closed)return;this._closed=!0;let e=this._buffer.slice(0,this._length);this._file.setRawData(e)}async abort(){this._closed=!0}},pe=class{kind=`file`;name;_data;_lastModified;constructor(e,t=new Uint8Array){this.name=e,this._data=t,this._lastModified=Date.now()}getRawData(){return this._data}setRawData(e){this._data=e,this._lastModified=Date.now()}_getArrayBuffer(){let e=new ArrayBuffer(this._data.byteLength);return new Uint8Array(e).set(this._data),e}async getFile(){let e=this._getArrayBuffer(),t=this._data,n=this.name,r=this._lastModified,i={name:n,size:t.byteLength,type:``,lastModified:r,async text(){return new TextDecoder().decode(t)},async arrayBuffer(){return e},slice(n=0,r=t.byteLength){return new Blob([e.slice(n,r)])}};if(typeof File<`u`)try{let t=new File([e],this.name,{lastModified:this._lastModified});return typeof t.text!=`function`&&(t.text=i.text),typeof t.arrayBuffer!=`function`&&(t.arrayBuffer=i.arrayBuffer),t}catch{}return i}async createWritable(e){return new fe(this,e?.keepExistingData??!1)}async createSyncAccessHandle(){return new de(this)}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}},me=class e{kind=`directory`;name;_entries=new Map;constructor(e){this.name=e}_setEntry(e,t){this._entries.set(e,t)}async getDirectoryHandle(t,n){if(t===`.`||t===``)return this;if(t===`..`)throw le(`Cannot navigate to parent directory with '..'`,`SecurityError`);let r=this._entries.get(t);if(r){if(r.kind===`directory`)return r;throw le(`"${t}" is a file, not a directory`,`TypeMismatchError`)}if(n?.create){let n=new e(t);return this._entries.set(t,n),n}throw le(`A requested file or directory could not be found at "${t}"`,`NotFoundError`)}async getFileHandle(e,t){if(e===`.`||e===`..`||e===``)throw le(`Invalid file name "${e}"`,`TypeMismatchError`);let n=this._entries.get(e);if(n){if(n.kind===`file`)return n;throw le(`"${e}" is a directory, not a file`,`TypeMismatchError`)}if(t?.create){let t=new pe(e);return this._entries.set(e,t),t}throw le(`A requested file could not be found at "${e}"`,`NotFoundError`)}async removeEntry(e,t){let n=this._entries.get(e);if(!n)throw le(`Entry "${e}" not found`,`NotFoundError`);if(n.kind===`directory`&&n._entries.size>0&&!t?.recursive)throw le(`Directory "${e}" is not empty`,`InvalidModificationError`);this._entries.delete(e)}async resolve(e){if(this===e)return[];for(let[t,n]of this._entries.entries()){if(n===e)return[t];if(n.kind===`directory`){let r=await n.resolve(e);if(r)return[t,...r]}}return null}entries(){let e=this;return ue(async function*(){for(let[t,n]of e._entries.entries())yield[t,n]})}values(){let e=this;return ue(async function*(){for(let t of e._entries.values())yield t})}keys(){let e=this;return ue(async function*(){for(let t of e._entries.keys())yield t})}[Symbol.asyncIterator](){return this.entries()}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}};let he=null;function ge(){if(!he){let e=new me(`memory-root`),t=new me(O);e._setEntry(O,t),he=t}return he}let I=null;async function _e(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function ve(){let e=v();return e?`${O}-${e}`:O}async function ye(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=ve();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return ge()}function be(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function xe(e){if(I)return I;try{let t=await c(e,P.STORAGE_HANDLE);if(be(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return ye()}function L(e){I=e}function Se(){I=null}function R(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function z(e){if(I)try{let e=await I.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await _e(I,e),name:I.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await c(e,P.STORAGE_HANDLE);if(be(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await _e(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function Ce(e,t){let n=await xe(e);return oe()?n:se(n,`groups`,t.replace(/:/g,`-`))}function we(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function Te(e,t,n){let r=await Ce(e,t),{dirs:i,filename:a}=we(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.createSyncAccessHandle(),t=e.getSize(),n=new Uint8Array(t);return e.read(n,{at:0}),e.close(),new TextDecoder(`utf-8`).decode(n)}catch{return(await s.getFile()).text()}}var Ee=r(((e,t)=>{var n=t.exports={},r,i;function a(){throw Error(`setTimeout has not been defined`)}function o(){throw Error(`clearTimeout has not been defined`)}(function(){try{r=typeof setTimeout==`function`?setTimeout:a}catch{r=a}try{i=typeof clearTimeout==`function`?clearTimeout:o}catch{i=o}})();function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}function c(e){if(i===clearTimeout)return clearTimeout(e);if((i===o||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{return i(e)}catch{try{return i.call(null,e)}catch{return i.call(this,e)}}}var l=[],u=!1,d,f=-1;function p(){!u||!d||(u=!1,d.length?l=d.concat(l):f=-1,l.length&&m())}function m(){if(!u){var e=s(p);u=!0;for(var t=l.length;t;){for(d=l,l=[];++f<t;)d&&d[f].run();f=-1,t=l.length}d=null,u=!1,c(e)}}n.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new h(e,t)),l.length===1&&!u&&s(m)};function h(e,t){this.fun=e,this.array=t}h.prototype.run=function(){this.fun.apply(null,this.array)},n.title=`browser`,n.browser=!0,n.env={},n.argv=[],n.version=``,n.versions={};function g(){}n.on=g,n.addListener=g,n.once=g,n.off=g,n.removeListener=g,n.removeAllListeners=g,n.emit=g,n.prependListener=g,n.prependOnceListener=g,n.listeners=function(e){return[]},n.binding=function(e){throw Error(`process.binding is not supported`)},n.cwd=function(){return`/`},n.chdir=function(e){throw Error(`process.chdir is not supported`)},n.umask=function(){return 0}})),B=e(Ee(),1);
1
+ import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-aKtaBQYM.js";import{i,n as a,r as o,t as s}from"./txPromise-C2iYogHX.js";import{t as c}from"./getConfig-4saf0Tkq.js";const l=new 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)))}};function u(e){return e.replace(/^\/+|\/+$/g,``)}function d(e){let t=u(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),u(t)}function f(e){let t=u(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 p(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}function m(e,t){let n=t||p();if(!n||!n.routes)return null;let r=d(e);for(let[e,t]of Object.entries(n.routes))if(!(!t||!t.prettyPath)&&d(t.prettyPath)===r)return f(e);return null}let h=null;const g=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function _(){h=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=_);function v(){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=y();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function y(){if(h!==null)return h;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 h=`/`,h;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 h=`/`,h;if(!n)return h=`/`+e[0]+`/`,h}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+=`/`),h=t,h}catch{}}}let t=e.pathname||`/`;if(t===`/`)return h=`/`,h;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>g.has(e.toLowerCase()));return r>=0?r===0?(h=`/`,h):(h=`/`+n.slice(0,r).join(`/`)+`/`,h):m(t)?(h=`/`,h):n.length===1&&!t.includes(`.`)?(h=`/`+n[0]+`/`,h):(h=`/`,h)}function b(e){let t=y();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function x(e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|\\s)@${t}\\b`,`i`)}x(`ShadowClaw`);const S=8192,C=[{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}];function w(e){if(!e)return S;let t=l.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 C)if(e.includes(t))return n;return S}const T=1800,E=`shadowclaw`;function D(){let e=v();return e?`shadowclaw-${e}`:E}D();const O=`shadowclaw`,k=`br:main`,A={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`}}},j=Object.fromEntries(Object.values(A).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(A).map(e=>[e.providerId,{providerId:e.providerId,modes:e.modes,defaultMode:e.defaultMode}]));const M={openrouter:{id:`openrouter`,name:`OpenRouter`,baseUrl:`https://openrouter.ai/api/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{"HTTP-Referer":`https://xt-ml.github.io/shadow-claw/`,"X-OpenRouter-Title":`ShadowClaw`},defaultModel:`openrouter/free`,modelsUrl:`https://openrouter.ai/api/v1/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`reasoning`},huggingface:{id:`huggingface`,name:`HuggingFace`,baseUrl:`https://router.huggingface.co/v1/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,apiKeyHeaderFormat:`Bearer {key}`,headers:{},defaultModel:`meta-llama/Llama-3.1-8B-Instruct`,modelsUrl:`https://router.huggingface.co/v1/models`,requiresApiKey:!0,supportsStreaming:!0},bedrock_proxy:{id:`bedrock_proxy`,name:`AWS Bedrock (Local Proxy)`,baseUrl:`http://localhost:8888/bedrock-proxy/invoke`,format:`anthropic`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`anthropic.claude-sonnet-4-6-v1:0`,modelsUrl:`http://localhost:8888/bedrock-proxy/models`,requiresApiKey:!1,supportsStreaming:!0,reasoningParam:`thinking`},gemini_proxy:{id:`gemini_proxy`,name:`Gemini (Local Proxy)`,baseUrl:`http://localhost:8888/gemini-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-goog-api-key`,headers:{},defaultModel:`gemini-2.0-flash`,modelsUrl:`http://localhost:8888/gemini-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},vertex_ai:{id:`vertex_ai`,name:`Vertex AI (Local Proxy)`,baseUrl:`http://localhost:8888/vertex-ai-proxy/chat/completions`,format:`openai`,apiKeyHeader:`x-vertex-project`,headers:{},defaultModel:`gemini-2.5-flash`,modelsUrl:`http://localhost:8888/vertex-ai-proxy/models`,requiresApiKey:!0,supportsStreaming:!0,reasoningParam:`thinkingConfig`},"mesh-llm":{id:`mesh-llm`,name:`Mesh LLM (Local Proxy)`,baseUrl:`http://localhost:8888/mesh-llm-proxy/chat/completions`,format:`mesh-llm`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`mesh`,modelsUrl:`http://localhost:8888/mesh-llm-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},ollama:{id:`ollama`,name:`Ollama (Local Proxy)`,baseUrl:`http://localhost:8888/ollama-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`qwen3:8b`,modelsUrl:`http://localhost:8888/ollama-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},llamafile:{id:`llamafile`,name:`Llamafile (Local Proxy)`,baseUrl:`http://localhost:8888/llamafile-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`Qwen3.5-9B-Q5_K_S`,modelsUrl:`http://localhost:8888/llamafile-proxy/models`,requiresApiKey:!1,supportsStreaming:!0},transformers_js_local:{id:`transformers_js_local`,name:`Transformers.js (Local Proxy)`,baseUrl:`http://localhost:8888/transformers-js-proxy/chat/completions`,format:`openai`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`http://localhost:8888/transformers-js-proxy/models`,models:[`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`webgpu/Qwen3-4B-ONNX`],requiresApiKey:!1,supportsStreaming:!0},transformers_js_browser:{id:`transformers_js_browser`,name:`Transformers.js (Browser)`,baseUrl:`local://transformers-js`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`onnx-community/Qwen3-0.6B-ONNX`,modelsUrl:`https://huggingface.co/api/models?author=onnx-community`,models:[`onnx-community/Qwen3-0.6B-ONNX`,`onnx-community/gemma-3-1b-it-ONNX`,`onnx-community/gemma-3-1b-it-ONNX-GQA`,`onnx-community/gemma-4-E2B-it-ONNX`,`onnx-community/gemma-4-E4B-it-ONNX`,`onnx-community/gemma-4-E9B-it-ONNX`,`onnx-community/gemma-4-E27B-it-ONNX`,`onnx-community/gemma-4-12B-it-ONNX`,`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,`onnx-community/Phi-3.5-mini-instruct-onnx-web`,`onnx-community/Phi-4-mini-instruct-ONNX`,`onnx-community/Llama-3.2-1B-Instruct-ONNX`,`onnx-community/Llama-3.2-3B-Instruct-ONNX`,`webgpu/Qwen3-4B-ONNX`,`onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX`,`onnx-community/gpt-oss-20b-ONNX`,`onnx-community/LFM2-1.2B-ONNX`,`LiquidAI/LFM2.5-1.2B-Thinking-ONNX`,`HuggingFaceTB/SmolLM3-3B-ONNX`,`onnx-community/Qwen3.5-0.8B-ONNX-OPT`,`onnx-community/Qwen3.5-4B-ONNX-OPT`],requiresApiKey:!1,supportsStreaming:!1},litert_lm_browser:{id:`litert_lm_browser`,name:`LiteRT-LM (Browser)`,baseUrl:`local://litert-lm`,format:`transformers_js`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`litert-community/gemma-4-E2B-it-litert-lm`,models:[`litert-community/gemma-4-E2B-it-litert-lm`,`litert-community/gemma-4-E4B-it-litert-lm`],requiresApiKey:!1,supportsStreaming:!1},prompt_api:{id:`prompt_api`,name:`Prompt API (Browser)`,baseUrl:`builtin://language-model`,format:`prompt_api`,apiKeyHeader:`Authorization`,headers:{},defaultModel:`browser-built-in`,models:[`browser-built-in`],requiresApiKey:!1,supportsStreaming:!1}};function ee(e){return M[e]||null}function te(e){return`api_key:${e}`}function ne(e){return A[e]||null}function N(e,t,n=`http_api`){let r=ne(e);return r&&(r.tokenAuthByServiceType?.[n]?.[t]||r.tokenAuth[t])||null}const P={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`},re=`localhost`,F=8888,ie=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`send_notification`,`show_toast`,`spawn_subagent`]);function ae(e){return e.filter(e=>!ie.has(e.name))}function oe(){return!1}async function se(e,...t){let n=e;for(let e of t){let t=await n.getDirectoryHandle(e,{create:!0});if(typeof n.isSameEntry==`function`&&await n.isSameEntry(t))throw Error(`Directory navigation failed: "${e}" resolved to the same directory as its parent. The stored directory handle may be stale — try re-selecting the storage folder.`);n=t}return n}var ce=t({MemoryDirectoryHandle:()=>me,MemoryFileHandle:()=>pe,MemorySyncAccessHandle:()=>de,MemoryWritableStream:()=>fe,getMemoryOpfsRoot:()=>ge});function le(e,t){if(typeof DOMException<`u`)try{return new DOMException(e,t)}catch{}let n=Error(e);return n.name=t,n}function ue(e){let t=e();return t[Symbol.asyncDispose??Symbol.for(`Symbol.asyncDispose`)]=async()=>{},t}var de=class{_file;_closed=!1;constructor(e){this._file=e}close(){this._closed=!0}flush(){}getSize(){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);return this._file.getRawData().byteLength}read(e,t){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let n=this._file.getRawData(),r=t?.at??0;if(r>=n.byteLength)return 0;let i=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),a=n.subarray(r,r+i.byteLength);return i.set(a),a.byteLength}write(e,t){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=t?.at??0,i=this._file.getRawData(),a=r+n.byteLength,o;return a>i.byteLength?(o=new Uint8Array(a),o.set(i)):o=new Uint8Array(i),o.set(n,r),this._file.setRawData(o),n.byteLength}truncate(e){if(this._closed)throw le(`SyncAccessHandle is closed`,`InvalidStateError`);let t=this._file.getRawData(),n=new Uint8Array(e);n.set(t.subarray(0,Math.min(t.byteLength,e))),this._file.setRawData(n)}},fe=class{_file;_buffer;_position=0;_length=0;_closed=!1;constructor(e,t=!1){this._file=e;let n=e.getRawData();t?(this._buffer=new Uint8Array(n),this._length=n.byteLength):(this._buffer=new Uint8Array(1024),this._length=0)}async write(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);let t;if(typeof e==`string`)t=new TextEncoder().encode(e);else if(e instanceof Uint8Array)t=e;else if(e instanceof ArrayBuffer)t=new Uint8Array(e);else if(typeof Blob<`u`&&e instanceof Blob)t=typeof e.arrayBuffer==`function`?new Uint8Array(await e.arrayBuffer()):typeof e.text==`function`?new TextEncoder().encode(await e.text()):typeof FileReader<`u`?await new Promise(t=>{let n=new FileReader;n.onload=()=>{t(new Uint8Array(n.result))},n.onerror=()=>t(new Uint8Array),n.readAsArrayBuffer(e)}):new Uint8Array;else if(e&&typeof e==`object`&&`type`in e)if(e.type===`write`){typeof e.position==`number`&&(this._position=e.position);let n=e.data;t=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):typeof Blob<`u`&&n instanceof Blob&&typeof n.arrayBuffer==`function`?new Uint8Array(await n.arrayBuffer()):new Uint8Array}else if(e.type===`seek`){this._position=e.position??0;return}else if(e.type===`truncate`){this._truncate(e.size??0);return}else t=new Uint8Array;else t=new Uint8Array;let n=this._position+t.length;if(n>this._buffer.length){let e=Math.max(this._buffer.length*2,n,1024),t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._buffer.set(t,this._position),this._position+=t.length,this._position>this._length&&(this._length=this._position)}_truncate(e){if(e<this._length)this._length=e;else if(e>this._length){if(e>this._buffer.length){let t=new Uint8Array(e);t.set(this._buffer),this._buffer=t}this._length=e}this._position>e&&(this._position=e)}async seek(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);this._position=e}async truncate(e){if(this._closed)throw le(`WritableStream is closed`,`InvalidStateError`);this._truncate(e)}async close(){if(this._closed)return;this._closed=!0;let e=this._buffer.slice(0,this._length);this._file.setRawData(e)}async abort(){this._closed=!0}},pe=class{kind=`file`;name;_data;_lastModified;constructor(e,t=new Uint8Array){this.name=e,this._data=t,this._lastModified=Date.now()}getRawData(){return this._data}setRawData(e){this._data=e,this._lastModified=Date.now()}_getArrayBuffer(){let e=new ArrayBuffer(this._data.byteLength);return new Uint8Array(e).set(this._data),e}async getFile(){let e=this._getArrayBuffer(),t=this._data,n=this.name,r=this._lastModified,i={name:n,size:t.byteLength,type:``,lastModified:r,async text(){return new TextDecoder().decode(t)},async arrayBuffer(){return e},slice(n=0,r=t.byteLength){return new Blob([e.slice(n,r)])}};if(typeof File<`u`)try{let t=new File([e],this.name,{lastModified:this._lastModified});return typeof t.text!=`function`&&(t.text=i.text),typeof t.arrayBuffer!=`function`&&(t.arrayBuffer=i.arrayBuffer),t}catch{}return i}async createWritable(e){return new fe(this,e?.keepExistingData??!1)}async createSyncAccessHandle(){return new de(this)}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}},me=class e{kind=`directory`;name;_entries=new Map;constructor(e){this.name=e}_setEntry(e,t){this._entries.set(e,t)}async getDirectoryHandle(t,n){if(t===`.`||t===``)return this;if(t===`..`)throw le(`Cannot navigate to parent directory with '..'`,`SecurityError`);let r=this._entries.get(t);if(r){if(r.kind===`directory`)return r;throw le(`"${t}" is a file, not a directory`,`TypeMismatchError`)}if(n?.create){let n=new e(t);return this._entries.set(t,n),n}throw le(`A requested file or directory could not be found at "${t}"`,`NotFoundError`)}async getFileHandle(e,t){if(e===`.`||e===`..`||e===``)throw le(`Invalid file name "${e}"`,`TypeMismatchError`);let n=this._entries.get(e);if(n){if(n.kind===`file`)return n;throw le(`"${e}" is a directory, not a file`,`TypeMismatchError`)}if(t?.create){let t=new pe(e);return this._entries.set(e,t),t}throw le(`A requested file could not be found at "${e}"`,`NotFoundError`)}async removeEntry(e,t){let n=this._entries.get(e);if(!n)throw le(`Entry "${e}" not found`,`NotFoundError`);if(n.kind===`directory`&&n._entries.size>0&&!t?.recursive)throw le(`Directory "${e}" is not empty`,`InvalidModificationError`);this._entries.delete(e)}async resolve(e){if(this===e)return[];for(let[t,n]of this._entries.entries()){if(n===e)return[t];if(n.kind===`directory`){let r=await n.resolve(e);if(r)return[t,...r]}}return null}entries(){let e=this;return ue(async function*(){for(let[t,n]of e._entries.entries())yield[t,n]})}values(){let e=this;return ue(async function*(){for(let t of e._entries.values())yield t})}keys(){let e=this;return ue(async function*(){for(let t of e._entries.keys())yield t})}[Symbol.asyncIterator](){return this.entries()}async isSameEntry(e){return this===e}async queryPermission(){return`granted`}async requestPermission(){return`granted`}};let he=null;function ge(){if(!he){let e=new me(`memory-root`),t=new me(O);e._setEntry(O,t),he=t}return he}let I=null;async function _e(e,t){try{return await e.entries().next(),`granted`}catch{return t}}function ve(){let e=v();return e?`${O}-${e}`:O}async function ye(){try{if(typeof navigator<`u`&&navigator.storage&&typeof navigator.storage.getDirectory==`function`){let e=await navigator.storage.getDirectory(),t=ve();return await e.getDirectoryHandle(t,{create:!0})}}catch(e){console.warn(`OPFS is unavailable (e.g. Firefox Private Browsing). Using in-memory storage fallback:`,e)}return ge()}function be(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`}async function xe(e){if(I)return I;try{let t=await c(e,P.STORAGE_HANDLE);if(be(t)){let e=t;if(typeof e.queryPermission==`function`&&await e.queryPermission({mode:`readwrite`})!==`granted`&&typeof e.requestPermission==`function`)try{await e.requestPermission({mode:`readwrite`})}catch{}return e}}catch(e){console.warn(`Failed to retrieve local storage handle from DB:`,e)}return ye()}function L(e){I=e}function Se(){I=null}function R(e){return e instanceof DOMException&&e.name===`InvalidStateError`}async function z(e){if(I)try{let e=await I.queryPermission({mode:`readwrite`});return{type:`local`,permission:e===`granted`?`granted`:await _e(I,e),name:I.name}}catch{console.warn(`Getting storage status failed for explicit storage root.`)}try{let t=await c(e,P.STORAGE_HANDLE);if(be(t)){let e=t,n=await e.queryPermission({mode:`readwrite`});return{type:`local`,permission:n===`granted`?`granted`:await _e(e,n),name:e.name}}}catch(e){console.warn(`Failed to check storage status:`,e)}return{type:`opfs`,permission:`granted`,name:`OPFS`}}async function Ce(e,t){let n=await xe(e);return oe()?n:se(n,`groups`,t.replace(/:/g,`-`))}function we(e){let t=e.replace(/\\/g,`/`).replace(/^\/home\/user\//,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean);if(t.length===0)throw Error(`Empty file path`);let n=t.pop();if(t.some(e=>e===`..`||e===`.`)||n===`..`||n===`.`){let t=Error(`SecurityError: Path traversal is not allowed: "${e}"`);throw t.name=`SecurityError`,t}return{dirs:t,filename:n||``}}async function Te(e,t,n){let r=await Ce(e,t),{dirs:i,filename:a}=we(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.createSyncAccessHandle(),t=e.getSize(),n=new Uint8Array(t);return e.read(n,{at:0}),e.close(),new TextDecoder(`utf-8`).decode(n)}catch{return(await s.getFile()).text()}}var Ee=r(((e,t)=>{var n=t.exports={},r,i;function a(){throw Error(`setTimeout has not been defined`)}function o(){throw Error(`clearTimeout has not been defined`)}(function(){try{r=typeof setTimeout==`function`?setTimeout:a}catch{r=a}try{i=typeof clearTimeout==`function`?clearTimeout:o}catch{i=o}})();function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch{try{return r.call(null,e,0)}catch{return r.call(this,e,0)}}}function c(e){if(i===clearTimeout)return clearTimeout(e);if((i===o||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{return i(e)}catch{try{return i.call(null,e)}catch{return i.call(this,e)}}}var l=[],u=!1,d,f=-1;function p(){!u||!d||(u=!1,d.length?l=d.concat(l):f=-1,l.length&&m())}function m(){if(!u){var e=s(p);u=!0;for(var t=l.length;t;){for(d=l,l=[];++f<t;)d&&d[f].run();f=-1,t=l.length}d=null,u=!1,c(e)}}n.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new h(e,t)),l.length===1&&!u&&s(m)};function h(e,t){this.fun=e,this.array=t}h.prototype.run=function(){this.fun.apply(null,this.array)},n.title=`browser`,n.browser=!0,n.env={},n.argv=[],n.version=``,n.versions={};function g(){}n.on=g,n.addListener=g,n.once=g,n.off=g,n.removeListener=g,n.removeAllListeners=g,n.emit=g,n.prependListener=g,n.prependOnceListener=g,n.listeners=function(e){return[]},n.binding=function(e){throw Error(`process.binding is not supported`)},n.cwd=function(){return`/`},n.chdir=function(e){throw Error(`process.chdir is not supported`)},n.umask=function(){return 0}})),B=e(Ee(),1);
2
2
  /*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */
3
3
  function De(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Oe(e){if(Array.isArray(e))return e}function ke(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function Ae(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
4
4
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function je(e,t){return Oe(e)||ke(e,t)||Me(e,t)||Ae()}function Me(e,t){if(e){if(typeof e==`string`)return De(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?De(e,t):void 0}}const Ne=Object.entries,Pe=Object.setPrototypeOf,Fe=Object.isFrozen,Ie=Object.getPrototypeOf,Le=Object.getOwnPropertyDescriptor;let Re=Object.freeze,ze=Object.seal,Be=Object.create,Ve=typeof Reflect<`u`&&Reflect,He=Ve.apply,V=Ve.construct;Re||=function(e){return e},ze||=function(e){return e},He||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},V||=function(e){return new e(...[...arguments].slice(1))};const Ue=st(Array.prototype.forEach),We=st(Array.prototype.lastIndexOf),H=st(Array.prototype.pop),Ge=st(Array.prototype.push),Ke=st(Array.prototype.splice),qe=Array.isArray,Je=st(String.prototype.toLowerCase),Ye=st(String.prototype.toString),Xe=st(String.prototype.match),Ze=st(String.prototype.replace),Qe=st(String.prototype.indexOf),$e=st(String.prototype.trim),U=st(Number.prototype.toString),et=st(Boolean.prototype.toString),tt=typeof BigInt>`u`?null:st(BigInt.prototype.toString),nt=typeof Symbol>`u`?null:st(Symbol.prototype.toString),rt=st(Object.prototype.hasOwnProperty),it=st(Object.prototype.toString),at=st(RegExp.prototype.test),ot=ct(TypeError);function st(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return He(e,t,n)}}function ct(e){return function(){return V(e,[...arguments])}}function lt(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Je;if(Pe&&Pe(e,null),!qe(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Fe(t)||(t[r]=e),i=e)}e[i]=!0}return e}function ut(e){for(let t=0;t<e.length;t++)rt(e,t)||(e[t]=null);return e}function dt(e){let t=Be(null);for(let r of Ne(e)){var n=je(r,2);let i=n[0],a=n[1];rt(e,i)&&(qe(a)?t[i]=ut(a):a&&typeof a==`object`&&a.constructor===Object?t[i]=dt(a):t[i]=a)}return t}function ft(e){switch(typeof e){case`string`:return e;case`number`:return U(e);case`boolean`:return et(e);case`bigint`:return tt?tt(e):`0`;case`symbol`:return nt?nt(e):`Symbol()`;case`undefined`:return it(e);case`function`:case`object`:{if(e===null)return it(e);let t=e,n=pt(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:it(e)}return it(e)}default:return it(e)}}function pt(e,t){for(;e!==null;){let n=Le(e,t);if(n){if(n.get)return st(n.get);if(typeof n.value==`function`)return st(n.value)}e=Ie(e)}function n(){return null}return n}function mt(e){try{return at(e,``),!0}catch{return!1}}const ht=Re(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),gt=Re(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),_t=Re([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),vt=Re([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),yt=Re(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),bt=Re([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),xt=Re([`#text`]),St=Re(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Ct=Re(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),wt=Re(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Tt=Re([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Et=ze(/{{[\w\W]*|^[\w\W]*}}/g),Dt=ze(/<%[\w\W]*|^[\w\W]*%>/g),Ot=ze(/\${[\w\W]*/g),kt=ze(/^data-[\-\w.\u00B7-\uFFFF]+$/),At=ze(/^aria-[\-\w]+$/),jt=ze(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Mt=ze(/^(?:\w+script|data):/i),Nt=ze(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Pt=ze(/^html$/i),Ft=ze(/^[a-z][.\w]*(-[.\w]+)+$/i),It=ze(/<[/\w!]/g),Lt=ze(/<[/\w]/g),Rt=ze(/<\/no(script|embed|frames)/i),zt=ze(/\/>/i),Bt={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Vt=function(){return typeof window>`u`?null:window},Ht=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Ut=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Wt=function(e,t,n,r){return rt(e,t)&&qe(e[t])?lt(r.base?dt(r.base):{},e[t],r.transform):n};function Gt(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Vt(),t=e=>Gt(e);if(t.version=`3.4.13`,t.removed=[],!e||!e.document||e.document.nodeType!==Bt.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=pt(d,`cloneNode`),p=pt(d,`remove`),m=pt(d,`nextSibling`),h=pt(d,`childNodes`),g=pt(d,`parentNode`),_=pt(d,`shadowRoot`),v=pt(d,`attributes`),y=o&&o.prototype?pt(o.prototype,`nodeType`):null,b=o&&o.prototype?pt(o.prototype,`nodeName`):null,x=o&&o.prototype?pt(o.prototype,`ownerDocument`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let S,C=``,w,T=!1,E=0,D=function(){if(E>0)throw ot(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},O=function(e){D(),E++;try{return S.createHTML(e)}finally{E--}},k=function(e){D(),E++;try{return S.createScriptURL(e)}finally{E--}},A=function(){return T||=(w=Ht(u,i),!0),w},j=n,M=j.implementation,ee=j.createNodeIterator,te=j.createDocumentFragment,ne=j.getElementsByTagName,N=r.importNode,P=Ut();t.isSupported=typeof Ne==`function`&&typeof g==`function`&&M&&M.createHTMLDocument!==void 0;let re=Et,F=Dt,ie=Ot,ae=kt,oe=At,se=Mt,ce=Nt,le=Ft,ue=jt,de=null,fe=lt({},[...ht,...gt,..._t,...yt,...xt]),pe=null,me=lt({},[...St,...Ct,...wt,...Tt]),he=Object.seal(Be(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ge=null,I=null,_e=Object.seal(Be(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),ve=!0,ye=!0,be=!1,xe=!0,L=!1,Se=!0,R=!1,z=!1,Ce=null,we=null,Te=!1,Ee=!1,B=!1,De=!1,Oe=!0,ke=!1,Ae=`user-content-`,je=!0,Me=!1,Pe={},Fe=null,Ie=lt({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),Le=null,Ve=lt({},[`audio`,`video`,`img`,`source`,`image`,`track`]),He=null,V=lt({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),U=`http://www.w3.org/1998/Math/MathML`,et=`http://www.w3.org/2000/svg`,tt=`http://www.w3.org/1999/xhtml`,nt=tt,it=!1,st=null,ct=lt({},[U,et,tt],Ye),ut=Re([`mi`,`mo`,`mn`,`ms`,`mtext`]),Kt=lt({},ut),qt=Re([`annotation-xml`]),Jt=lt({},qt),Yt=lt({},[`title`,`style`,`font`,`a`,`script`]),Xt=null,Zt=[`application/xhtml+xml`,`text/html`],Qt=null,$t=null,en=n.createElement(`form`),tn=function(e){return e instanceof RegExp||e instanceof Function},nn=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if($t&&$t===e)return;(!e||typeof e!=`object`)&&(e={}),e=dt(e),Xt=Zt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,Qt=Xt===`application/xhtml+xml`?Ye:Je,de=Wt(e,`ALLOWED_TAGS`,fe,{transform:Qt}),pe=Wt(e,`ALLOWED_ATTR`,me,{transform:Qt}),st=Wt(e,`ALLOWED_NAMESPACES`,ct,{transform:Ye}),He=Wt(e,`ADD_URI_SAFE_ATTR`,V,{transform:Qt,base:V}),Le=Wt(e,`ADD_DATA_URI_TAGS`,Ve,{transform:Qt,base:Ve}),Fe=Wt(e,`FORBID_CONTENTS`,Ie,{transform:Qt}),ge=Wt(e,`FORBID_TAGS`,dt({}),{transform:Qt}),I=Wt(e,`FORBID_ATTR`,dt({}),{transform:Qt}),Pe=rt(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?dt(e.USE_PROFILES):e.USE_PROFILES:!1,ve=e.ALLOW_ARIA_ATTR!==!1,ye=e.ALLOW_DATA_ATTR!==!1,be=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xe=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,L=e.SAFE_FOR_TEMPLATES||!1,Se=e.SAFE_FOR_XML!==!1,R=e.WHOLE_DOCUMENT||!1,Ee=e.RETURN_DOM||!1,B=e.RETURN_DOM_FRAGMENT||!1,De=e.RETURN_TRUSTED_TYPE||!1,Te=e.FORCE_BODY||!1,Oe=e.SANITIZE_DOM!==!1,ke=e.SANITIZE_NAMED_PROPS||!1,je=e.KEEP_CONTENT!==!1,Me=e.IN_PLACE||!1,ue=mt(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:jt,nt=typeof e.NAMESPACE==`string`?e.NAMESPACE:tt,Kt=rt(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?dt(e.MATHML_TEXT_INTEGRATION_POINTS):lt({},ut),Jt=rt(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?dt(e.HTML_INTEGRATION_POINTS):lt({},qt);let t=rt(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?dt(e.CUSTOM_ELEMENT_HANDLING):Be(null);if(he=Be(null),rt(t,`tagNameCheck`)&&tn(t.tagNameCheck)&&(he.tagNameCheck=t.tagNameCheck),rt(t,`attributeNameCheck`)&&tn(t.attributeNameCheck)&&(he.attributeNameCheck=t.attributeNameCheck),rt(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(he.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),ze(he),L&&(ye=!1),B&&(Ee=!0),Pe&&(de=lt({},xt),pe=Be(null),Pe.html===!0&&(lt(de,ht),lt(pe,St)),Pe.svg===!0&&(lt(de,gt),lt(pe,Ct),lt(pe,Tt)),Pe.svgFilters===!0&&(lt(de,_t),lt(pe,Ct),lt(pe,Tt)),Pe.mathMl===!0&&(lt(de,yt),lt(pe,wt),lt(pe,Tt))),_e.tagCheck=null,_e.attributeCheck=null,rt(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?_e.tagCheck=e.ADD_TAGS:qe(e.ADD_TAGS)&&(de===fe&&(de=dt(de)),lt(de,e.ADD_TAGS,Qt))),rt(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?_e.attributeCheck=e.ADD_ATTR:qe(e.ADD_ATTR)&&(pe===me&&(pe=dt(pe)),lt(pe,e.ADD_ATTR,Qt))),rt(e,`ADD_URI_SAFE_ATTR`)&&qe(e.ADD_URI_SAFE_ATTR)&&lt(He,e.ADD_URI_SAFE_ATTR,Qt),rt(e,`FORBID_CONTENTS`)&&qe(e.FORBID_CONTENTS)&&(Fe===Ie&&(Fe=dt(Fe)),lt(Fe,e.FORBID_CONTENTS,Qt)),rt(e,`ADD_FORBID_CONTENTS`)&&qe(e.ADD_FORBID_CONTENTS)&&(Fe===Ie&&(Fe=dt(Fe)),lt(Fe,e.ADD_FORBID_CONTENTS,Qt)),je&&(de[`#text`]=!0),R&&lt(de,[`html`,`head`,`body`]),de.table&&(lt(de,[`tbody`]),delete ge.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw ot(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw ot(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=S;S=e.TRUSTED_TYPES_POLICY;try{C=O(``)}catch(e){throw S=t,e}}else e.TRUSTED_TYPES_POLICY===null?(S=void 0,C=``):(S===void 0&&(S=A()),S&&typeof C==`string`&&(C=O(``)));Re&&Re(e),$t=e},rn=lt({},[...gt,..._t,...vt]),an=lt({},[...yt,...bt]),on=function(e,t,n){return t.namespaceURI===tt?e===`svg`:t.namespaceURI===U?e===`svg`&&(n===`annotation-xml`||Kt[n]):!!rn[e]},sn=function(e,t,n){return t.namespaceURI===tt?e===`math`:t.namespaceURI===et?e===`math`&&Jt[n]:!!an[e]},cn=function(e,t,n){return t.namespaceURI===et&&!Jt[n]||t.namespaceURI===U&&!Kt[n]?!1:!an[e]&&(Yt[e]||!rn[e])},ln=function(e){let t=g(e);(!t||!t.tagName)&&(t={namespaceURI:nt,tagName:`template`});let n=Je(e.tagName),r=Je(t.tagName);return st[e.namespaceURI]?e.namespaceURI===et?on(n,t,r):e.namespaceURI===U?sn(n,t,r):e.namespaceURI===tt?cn(n,t,r):!!(Xt===`application/xhtml+xml`&&st[e.namespaceURI]):!1},un=function(e){Ge(t.removed,{element:e});try{g(e).removeChild(e)}catch{if(p(e),!g(e))throw ot(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},dn=function(e){mn(e);let t=h(e);if(t){let e=[];Ue(t,t=>{Ge(e,t)}),Ue(e,e=>{try{p(e)}catch{}})}let n=v(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;if(typeof i==`string`)try{e.removeAttribute(i)}catch{}}},fn=function(e,n){try{Ge(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{Ge(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(Ee||B)try{un(n)}catch{}else try{n.setAttribute(e,``)}catch{}},pn=function(e){let t=v(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;if(!(typeof i!=`string`||pe[Qt(i)]))try{e.removeAttribute(i)}catch{}}},mn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();(y?y(e):e.nodeType)===Bt.element&&pn(e);let n=h(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},hn=function(e){if(!Se)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=y?y(e):e.nodeType;if(n===Bt.processingInstruction||n===Bt.comment&&at(Lt,e.data)){try{p(e)}catch{}continue}if(n===Bt.element){let t=e,n=Qt(b?b(e):e.nodeName);try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&n!==`label`&&n!==`output`&&t.removeAttribute(`for`)}catch{}}let r=h(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},gn=function(e){let t=null,r=null;if(Te)e=`<remove></remove>`+e;else{let t=Xe(e,/^[\r\n\t ]+/);r=t&&t[0]}Xt===`application/xhtml+xml`&&nt===tt&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=S?O(e):e;if(nt===tt)try{t=new l().parseFromString(i,Xt)}catch{}if(!t||!t.documentElement){t=M.createDocument(nt,`template`,null);try{t.documentElement.innerHTML=it?C:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),nt===tt?ne.call(t,R?`html`:`body`)[0]:R?t.documentElement:a},_n=function(e){let t=x?x(e):e.ownerDocument;return ee.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},vn=function(e){return e=Ze(e,re,` `),e=Ze(e,F,` `),e=Ze(e,ie,` `),e},yn=function(e){e.normalize();let t=x?x(e):e.ownerDocument,n=ee.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=vn(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&Ue(i,e=>{xn(e.content)&&yn(e.content)})},bn=function(e){let t=b?b(e):null;return typeof t!=`string`||Qt(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==v(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==y(e)||e.childNodes!==h(e)},xn=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return y(e)===Bt.documentFragment}catch{return!1}},Sn=function(e){if(!y||typeof e!=`object`||!e)return!1;try{return typeof y(e)==`number`}catch{return!1}};function Cn(e,n,r){e.length!==0&&Ue(e,e=>{e.call(t,n,r,$t)})}let wn=function(e,t){return!!(Se&&e.hasChildNodes()&&!Sn(e.firstElementChild)&&at(It,e.textContent)&&at(It,e.innerHTML)||Se&&e.namespaceURI===tt&&t===`style`&&Sn(e.firstElementChild)||e.nodeType===Bt.processingInstruction||Se&&e.nodeType===Bt.comment&&at(Lt,e.data))},Tn=function(e,t,n){if(!ge[t]&&An(t)&&(he.tagNameCheck instanceof RegExp&&at(he.tagNameCheck,t)||he.tagNameCheck instanceof Function&&he.tagNameCheck(t)))return!1;if(je&&!Fe[t]){let t=g(e),r=h(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?f(r[a],!0):r[a];t.insertBefore(i,m(e))}}}return un(e),!0},En=function(e,t,n,r){return e.length===0?t:t===n||t===r?dt(t):t},Dn=function(e,n){if(Cn(P.beforeSanitizeElements,e,null),e!==n&&g(e)===null)return Me&&mn(e),!0;if(bn(e))return un(e),!0;let r=Qt(b?b(e):e.nodeName);if(de=En(P.uponSanitizeElement,de,fe,Ce),Cn(P.uponSanitizeElement,e,{tagName:r,allowedTags:de}),e!==n&&g(e)===null)return Me&&mn(e),!0;if(wn(e,r))return un(e),!0;if(ge[r]||!(_e.tagCheck instanceof Function&&_e.tagCheck(r))&&!de[r]){let t=Tn(e,r,n);return t===!1&&Cn(P.afterSanitizeElements,e,null),t}if((y?y(e):e.nodeType)===Bt.element&&!ln(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&at(Rt,e.innerHTML))return un(e),!0;if(L&&e.nodeType===Bt.text){let n=vn(e.textContent);e.textContent!==n&&(Ge(t.removed,{element:e.cloneNode()}),e.textContent=n)}return Cn(P.afterSanitizeElements,e,null),!1},On=function(e,t,r){if(I[t]||Se&&t===`patchsrc`||Se&&t===`for`&&e!==`label`&&e!==`output`||Oe&&(t===`id`||t===`name`)&&(r in n||r in en))return!1;let i=pe[t]||_e.attributeCheck instanceof Function&&_e.attributeCheck(t,e);if(!(ye&&at(ae,t))&&!(ve&&at(oe,t))){if(!i){if(!(An(e)&&(he.tagNameCheck instanceof RegExp&&at(he.tagNameCheck,e)||he.tagNameCheck instanceof Function&&he.tagNameCheck(e))&&(he.attributeNameCheck instanceof RegExp&&at(he.attributeNameCheck,t)||he.attributeNameCheck instanceof Function&&he.attributeNameCheck(t,e))||t===`is`&&he.allowCustomizedBuiltInElements&&(he.tagNameCheck instanceof RegExp&&at(he.tagNameCheck,r)||he.tagNameCheck instanceof Function&&he.tagNameCheck(r))))return!1}else if(!He[t]&&!at(ue,Ze(r,ce,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&Qe(r,`data:`)===0&&Le[e])&&!(be&&!at(se,Ze(r,ce,``)))&&r)return!1}return!0},kn=lt({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),An=function(e){return!kn[Je(e)]&&at(le,e)},jn=function(e,t,n,r){if(S&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return O(r);case`TrustedScriptURL`:return k(r)}return r},Mn=function(e,n,r,i){try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i),bn(e)?un(e):H(t.removed)}catch{fn(n,e)}},Nn=function(e){Cn(P.beforeSanitizeAttributes,e,null);let t=e.attributes;if(!t||bn(e))return;pe=En(P.uponSanitizeAttribute,pe,me,we);let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:pe,forceKeepAttr:void 0},r=t.length,i=Qt(e.nodeName);for(;r--;){let a=t[r],o=a.name,s=a.namespaceURI,c=a.value,l=Qt(o),u=c,d=o===`value`?u:$e(u);if(n.attrName=l,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,Cn(P.uponSanitizeAttribute,e,n),d=n.attrValue,ke&&(l===`id`||l===`name`)&&Qe(d,Ae)!==0&&(fn(o,e),d=Ae+d),Se&&at(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,d)){fn(o,e);continue}if(l===`attributename`&&Xe(d,`href`)){fn(o,e);continue}if(!n.forceKeepAttr){if(!n.keepAttr){fn(o,e);continue}if(!xe&&at(zt,d)){fn(o,e);continue}if(L&&(d=vn(d)),!On(i,l,d)){fn(o,e);continue}d=jn(i,l,s,d),d!==u&&Mn(e,o,s,d)}}Cn(P.afterSanitizeAttributes,e,null)},W=function(e){let t=null,n=_n(e);for(Cn(P.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(Cn(P.uponSanitizeShadowNode,t,null),Dn(t,e),Nn(t),xn(t.content)&&W(t.content),(y?y(t):t.nodeType)===Bt.element){let e=_(t);xn(e)&&(Pn(e),W(e))}Cn(P.afterSanitizeShadowDOM,e,null)},Pn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){W(e.shadow);continue}let n=e.node,r=(y?y(n):n.nodeType)===Bt.element,i=h(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=b?b(n):null;if(typeof e==`string`&&Qt(e)===`template`){let e=n.content;xn(e)&&t.push({node:e,shadow:null})}}if(r){let e=_(n);xn(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(it=!e,it&&(e=`<!-->`),typeof e!=`string`&&!Sn(e)&&(e=ft(e),typeof e!=`string`))throw ot(`dirty is not a string, aborting`);if(!t.isSupported)return e;z?(de=Ce,pe=we):nn(n),(P.uponSanitizeElement.length>0||P.uponSanitizeAttribute.length>0)&&(de=dt(de)),P.uponSanitizeAttribute.length>0&&(pe=dt(pe)),t.removed=[];let c=Me&&typeof e!=`string`&&Sn(e);if(c){hn(e);let t=b?b(e):e.nodeName;if(typeof t==`string`){let n=Qt(t);if(!de[n]||ge[n])throw dn(e),ot(`root node is forbidden and cannot be sanitized in-place`)}if(bn(e))throw dn(e),ot(`root node is clobbered and cannot be sanitized in-place`);try{Pn(e)}catch(t){throw dn(e),t}}else if(Sn(e))i=gn(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===Bt.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Pn(a);else{if(!Ee&&!L&&!R&&e.indexOf(`<`)===-1)return S&&De?O(e):e;if(i=gn(e),!i)return Ee?null:De?C:``}i&&Te&&un(i.firstChild);let l=c?e:i;try{let e=_n(l);for(;o=e.nextNode();)Dn(o,l),Nn(o),xn(o.content)&&W(o.content)}catch(n){throw c&&(dn(e),Ue(t.removed,e=>{e.element&&mn(e.element)})),n}if(c)return Ue(t.removed,e=>{e.element&&mn(e.element)}),L&&yn(e),e;if(Ee){if(L&&yn(i),B)for(s=te.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(pe.shadowroot||pe.shadowrootmode)&&(s=N.call(r,s,!0)),s}let u=R?i.outerHTML:i.innerHTML;return R&&de[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&at(Pt,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";let t=null;function n(){let e=y(`/static-routing.json`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}function r(e){return e.replace(/^\/+|\/+$/g,``)}function i(e){let t=r(e);return t.endsWith(`/index.html`)?t=t.slice(0,-11):t.endsWith(`index.html`)&&(t=t.slice(0,-10)),r(t)}function a(e){let t=r(e),n=t.split(`/`).filter(Boolean);if(n.length===0)return null;let i=n[0].toLowerCase();if(i===`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(i===`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(i===`chat`){let e=n[1]||`main`;return{page:`chat`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}if(i===`tasks`){let e=n[1]||`main`;return{page:`tasks`,groupId:e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e}}return i===`main`?{page:`pages`,groupId:`br:main`,path:n.slice(1).join(`/`)}:{page:`pages`,groupId:`br:main`,path:t}}function o(){if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-routing`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&typeof t==`object`&&t.routes)return t}catch(e){console.warn(`Failed to parse embedded static routing manifest:`,e)}}return null}async function s(){if(t)return t;let e=o(),r=n();if(!e&&typeof fetch==`function`)try{let t=await fetch(r);if(t.ok){let n=await t.json();n&&typeof n==`object`&&(e=n)}}catch{}return e?(e.routes||={},t=e,t):{routes:{}}}function c(e,n){let r=n||t||o();if(!r||!r.routes)return null;let s=i(e);for(let[e,t]of Object.entries(r.routes))if(!(!t||!t.prettyPath)&&i(t.prettyPath)===s)return a(e);return null}async function l(e){let t=c(e);if(t)return t;let r=await s();if(!r||!r.subRoutes)return null;let a=r,o=n(),l=5;for(;a&&a.subRoutes&&l>0;){let t=null,n=i(e);if(Array.isArray(a.subRoutes))for(let e of a.subRoutes){let r=e.replace(/\/routes\.json$/,``);if(n.startsWith(r)){t=e;break}}else if(typeof a.subRoutes==`object`){let e=``;for(let[r,o]of Object.entries(a.subRoutes)){let a=i(r);n.startsWith(a)&&a.length>e.length&&(e=a,t=o)}}if(!t||typeof fetch!=`function`)break;try{let n=t;try{if(t.startsWith(`http://`)||t.startsWith(`https://`))n=t;else if(t.startsWith(`/`)){let e=y(t);n=typeof window<`u`&&window.location?.origin?new URL(e,window.location.origin).toString():e}else n=new URL(t,o).toString()}catch{}let i=await fetch(n);if(!i.ok)break;let s=await i.json();if(!s||typeof s!=`object`)break;s.routes&&Object.assign(r.routes,s.routes);let u=c(e,r);if(u)return u;a=s,o=n,l--}catch(e){console.warn(`Failed to lazy load subRoute:`,t,e);break}}return null}function u(e,n){let i=n||t||o();if(!i||!i.routes)return null;let{page:a,groupId:s,path:c}=e;if(!a)return null;let l=s===`br:main`||s===`main`?`main`:s?.startsWith(`br:`)?`br-${s.slice(3)}`:s,u=[];if(a===`pages`&&c){let e=r(c);l===`main`?(u.push(`/pages/main/${e}`),u.push(`pages/main/${e}`),u.push(`/pages/br:main/${e}`),u.push(`/pages/br-main/${e}`),u.push(`/main/${e}`),u.push(`main/${e}`),u.push(`/${e}`),u.push(e)):l&&(u.push(`/pages/${l}/${e}`),u.push(`pages/${l}/${e}`),u.push(`/pages/${s}/${e}`))}else if(a===`pages`&&!c)l===`main`||!l?u.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`):l&&u.push(`/pages/${l}/index.html`,`pages/${l}/index.html`,`/pages/${s}/index.html`);else if(a===`files`&&c){let e=r(c);l&&(u.push(`/files/${l}/${e}`),u.push(`files/${l}/${e}`),u.push(`/files/${s}/${e}`))}for(let e of u){let t=r(e);for(let[e,n]of Object.entries(i.routes))if(r(e)===t&&n?.prettyPath)return n.prettyPath}if(a===`pages`&&!c){for(let e of Object.values(i.routes))if(e&&e.prettyPath===`/`)return`/`}return null}var d=e({applyBasePath:()=>y,buildRoutePath:()=>C,decodePathSegment:()=>p,getAppBasePath:()=>v,getDeploymentNamespace:()=>_,getFileRouteDirPath:()=>O,getWorkspaceRouteRequestPath:()=>k,isPossibleAppRoute:()=>T,parseRouteFromUrl:()=>w,parseRouteFromUrlAsync:()=>E,resetAppBasePathCache:()=>g,resolveHrefAgainstRoute:()=>D});function f(e){return e===`br:main`?`main`:e.startsWith(`br:`)?`br-${e.slice(3)}`:encodeURIComponent(e)}function p(e){try{return decodeURIComponent(e)}catch{return e}}let m=null;const h=new Set([`chat`,`files`,`tasks`,`pages`,`settings`,`tools`,`channels`]);function g(){m=null}typeof globalThis<`u`&&(globalThis.__applyBasePathCacheReset=g);function _(){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=v();return!n||n===`/`?``:n.replace(/^\/+|\/+$/g,``).replace(/[^a-zA-Z0-9_-]/g,`-`)}function v(){if(m!==null)return m;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 m=`/`,m;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 m=`/`,m;if(!n)return m=`/`+e[0]+`/`,m}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+=`/`),m=t,m}catch{}}}let t=e.pathname||`/`;if(t===`/`)return m=`/`,m;let n=t.split(`/`).filter(Boolean),r=n.findIndex(e=>h.has(e.toLowerCase()));return r>=0?r===0?(m=`/`,m):(m=`/`+n.slice(0,r).join(`/`)+`/`,m):c(t)?(m=`/`,m):n.length===1&&!t.includes(`.`)?(m=`/`+n[0]+`/`,m):(m=`/`,m)}function y(e){let t=v();if(t===`/`)return e;let[n,...r]=e.split(/(?=[?#])/);if(n===t||n.startsWith(t))return e;let i=t+(n.startsWith(`/`)?n.slice(1):n);return i=i.replace(/\/{2,}/g,`/`),i+r.join(``)}function b(e){return e.replace(/^\/+|\/+$/g,``)}function x(e){return e&&(e===`main`?`br:main`:e.startsWith(`br-`)?`br:${e.slice(3)}`:e)}function S(e){if(!e)return;let t=b(e.replace(/\\/g,`/`));if(!t)return;let n=t.split(`/`).filter(Boolean).filter(e=>e!==`.`&&e!==`..`);if(n.length!==0)return n.join(`/`)}function C(e){let t=e.anchor?`#${e.anchor.replace(/^#/,``)}`:``,n=u(e);if(n){let e=n;return e.startsWith(`/`)||(e=`/${e}`),`${e}${t}`}switch(e.page){case`chat`:return`${e.groupId?`/chat/${f(e.groupId)}/`:`/chat`}${t}`;case`tasks`:return`${e.groupId?`/tasks/${f(e.groupId)}/`:`/tasks`}${t}`;case`files`:{let n=S(e.path);return e.groupId?n?`/files/${f(e.groupId)}/${n}${t}`:`/files/${f(e.groupId)}/${t}`:`/files${t}`}case`pages`:{let n=S(e.path);return n?e.groupId?`/pages/${f(e.groupId)}/${n}${t}`:`/pages/${n}${t}`:`/pages${t}`}case`tools`:return`/settings/tool-configuration${t}`;case`channels`:return`/settings/channel-configuration${t}`;default:return`/settings${t}`}}function w(e,t){let n=e.pathname,r=v();r!==`/`&&n.startsWith(r)&&(n=`/`+n.slice(r.length));let i=c(n);if(i){let t=e.hash?e.hash.replace(/^#/,``):void 0;return{...i,anchor:t||i.anchor}}let a=n.split(`/`).filter(Boolean).map(e=>p(e)),o=e.hash?e.hash.replace(/^#/,``):void 0;if(a.length===0)return null;let s=a[0].toLowerCase();if(s===`chat`)return{page:`chat`,groupId:x(a[1]||t),anchor:o};if(s===`tasks`)return{page:`tasks`,groupId:x(a[1]||t),anchor:o};if(s===`files`)return{page:`files`,groupId:x(a[1]||t),path:S(a.slice(2).join(`/`)),anchor:o};if(s===`pages`)return a.length>=3?{page:`pages`,groupId:x(a[1]),path:S(a.slice(2).join(`/`)),anchor:o}:{page:`pages`,groupId:x(t),path:S(a.slice(1).join(`/`)),anchor:o};if(s===`settings`){let e=(a[1]||``).toLowerCase();return e===`tool-configuration`?{page:`tools`,anchor:o}:e===`channel-configuration`?{page:`channels`,anchor:o}:{page:`settings`,anchor:o}}return s===`tools`?{page:`tools`,anchor:o}:s===`channels`?{page:`channels`,anchor:o}:null}function T(e){let t=e,n=v();if(n!==`/`&&t.startsWith(n))t=`/`+t.slice(n.length);else if(n!==`/`&&!t.startsWith(n))return!1;let r=t.split(`/`).filter(Boolean);if(r.length===0)return!0;let i=r[0].toLowerCase();return!!(h.has(i)||c(t))}async function E(e,t){let n=w(e,t);if(n)return n;let r=e.pathname,i=v();i!==`/`&&r.startsWith(i)&&(r=`/`+r.slice(i.length));let a=await l(r);if(a){let t=e.hash?e.hash.replace(/^#/,``):void 0;return{...a,anchor:t||a.anchor}}return null}function D(e,t,n){let r=e.trim();if(!r||r.startsWith(`javascript:`))return null;if(r.startsWith(`/`))try{let e=y(r);return new URL(e,n)}catch{return null}let i=new URL(t,n);try{return new URL(r,i)}catch{return null}}function O(e,t){let n=S(t);if(!n)return C({page:`files`,groupId:e});let r=n.split(`/`);r.pop();let i=r.length>0?`${r.join(`/`)}/`:``;return`/files/${f(e)}/${i}`}function k(e){let t=e,n=v();n!==`/`&&t.startsWith(n)&&(t=`/`+t.slice(n.length));let r=t.split(`/`).filter(Boolean).map(e=>p(e));if(r.length<3||r[0]!==`files`)return null;let i=x(r[1])||r[1],a=S(r.slice(2).join(`/`));return!i||!a?null:{groupId:i,path:a}}export{_ as a,T as c,D as d,p as i,w as l,y as n,O as o,C as r,k as s,d as t,E as u};
@@ -1 +1 @@
1
- *,:after,:before{box-sizing:border-box}.hidden,[hidden]{display:none!important}a{color:var(--shadow-claw-link);text-decoration:underline;text-underline-offset:.125rem}a:hover{color:var(--shadow-claw-link-hover)}.header{background-color:var(--shadow-claw-bg-secondary);border-bottom:.0625rem solid var(--shadow-claw-border-color);gap:.5rem;height:4rem;justify-content:start;max-height:4rem;padding:.5rem 1rem}.header,.header h1{align-items:center;display:flex;width:100%}.header h1{color:var(--shadow-claw-text-primary);flex-direction:row;margin:0}#menu-button{align-items:center;background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;justify-content:center;padding:.5rem}#menu-button:hover,.theme-toggle:hover{background-color:var(--shadow-claw-bg-tertiary);color:var(--shadow-claw-text-primary)}.header-actions{gap:.5rem;margin-left:auto}.header-actions,.theme-toggle{align-items:center;display:flex}.theme-toggle{background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;justify-content:center;padding:.5rem}.theme-mode-toggle .sun-icon{display:none}.theme-mode-toggle .moon-icon{display:block}.theme-toggle svg{transition:transform .2s ease}.activity-log-toggle[aria-pressed=true],.header-main-toggle[aria-pressed=true]{box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-warning-color,#d97706) 50%,transparent);color:var(--shadow-claw-warning-color,#d97706)}.activity-log-toggle[aria-pressed=true] svg,.header-main-toggle[aria-pressed=true] svg{transform:rotate(180deg)}.webvm-toggle--booting,.webvm-toggle--ready,.webvm-toggle--visible{color:var(--shadow-claw-success-color)}.webvm-toggle--error{color:var(--shadow-claw-error-color)}.app{background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;font-family:var(--shadow-claw-font-sans);visibility:visible;width:100%}.app-body{--sidebar-width:15.625rem;display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.sidebar{background-color:var(--shadow-claw-bg-secondary);border-right:.0625rem solid var(--shadow-claw-bg-tertiary);display:flex;flex:none;flex-direction:column;overflow-y:auto;position:relative;width:var(--sidebar-width)}.sidebar-resize-handle{background:transparent;cursor:col-resize;flex:none;outline:none;position:relative;touch-action:none;user-select:none;width:.75rem}.sidebar-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:4.25rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:.5625rem}.sidebar-resize-handle:after,.sidebar-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.sidebar-resize-handle:after{background:var(--shadow-claw-border-color);height:2.75rem;transition:background-color .15s;width:.1875rem}.sidebar-resize-handle.active:before,.sidebar-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle.active:after,.sidebar-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle:focus-visible:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}@media (max-width:55.9375rem){.sidebar{display:none}.sidebar.open{border-radius:0 var(--shadow-claw-radius-m) var(--shadow-claw-radius-m) 0;box-shadow:var(--shadow-claw-shadow-lg);display:flex;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);position:absolute;width:min(85vw,20rem);z-index:100}.sidebar-resize-handle{display:none}}@media (min-width:56rem){#menu-button{display:none}}.nav-menu{flex:none;list-style:none;margin:0;padding:.5rem}.sidebar-spacer{flex:1}shadow-claw-conversations{display:flex;flex:none;flex-direction:column;min-height:0;overflow:hidden}.nav-item{border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:var(--shadow-claw-font-size-sm);font-weight:500;margin-bottom:.5rem;padding:.625rem .75rem;transition:background-color .15s,color .15s}.nav-item:hover{background-color:var(--shadow-claw-text-secondary)}.nav-item.active,.nav-item:hover{color:var(--shadow-claw-on-primary)}.nav-item.active{background-color:var(--shadow-claw-accent-primary)}.sidebar-footer{border-top:.0625rem solid var(--shadow-claw-border-color);flex:none;margin-bottom:.5rem;padding:.75rem}.settings-btn{background-color:transparent;border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-pill);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:.8125rem;padding:.625rem .75rem;transition:all var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.settings-btn:hover{border-color:var(--shadow-claw-text-primary);box-shadow:var(--shadow-claw-shadow-md);color:var(--shadow-claw-text-primary)}.main-content{--chat-split-height:20rem;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);overflow:hidden;position:relative}.main-content,.page{display:flex;flex:1;flex-direction:column;min-height:0}.page{display:none;overflow:auto}.page.active{display:flex}.chat-split-resize-handle{background:transparent;cursor:row-resize;display:none;flex:none;height:.75rem;outline:none;position:relative;touch-action:none;user-select:none;width:100%}.main-content.split-chat-active .page.active{order:1}.main-content.split-chat-active .chat-split-resize-handle{display:flex;margin-bottom:-.375rem;margin-top:-.375rem;order:2;z-index:10}.chat-split-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:.5625rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:4.25rem}.chat-split-resize-handle:after,.chat-split-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.chat-split-resize-handle:after{background:var(--shadow-claw-border-color);height:.1875rem;transition:background-color .15s;width:2.75rem}.chat-split-resize-handle.active:before,.chat-split-resize-handle:focus-visible:before,.chat-split-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.chat-split-resize-handle.active:after,.chat-split-resize-handle:focus-visible:after,.chat-split-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.chat-split-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}.main-content.split-chat-active .chat-page:not(.active){border-top:.0625rem solid var(--shadow-claw-border-color);display:flex;flex:none;height:var(--chat-split-height);max-height:calc(100% - 6.25rem);min-height:9.375rem;order:3}@media (max-width:55.9375rem){.chat-split-resize-handle,.main-content.split-chat-active .chat-page:not(.active){display:none!important}}.app-dialog{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);max-width:min(90vw,28rem);padding:0}.app-dialog::backdrop{background:color-mix(in srgb,#000 50%,transparent)}.app-confirm-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-dialog__title{font-size:1rem;margin:0}.app-dialog__details,.app-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-dialog__details{display:flex;flex-direction:column;gap:.25rem;padding-left:1rem}.app-dialog__links{display:flex;flex-wrap:wrap;gap:.5rem}.app-dialog__link{color:var(--shadow-claw-accent-primary);font-size:.9375rem;text-decoration:none}.app-dialog__link:focus-visible,.app-dialog__link:hover{text-decoration:underline}.app-dialog__countdown{color:var(--shadow-claw-text-secondary);font-size:.875rem;margin:0}.app-confirm-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end}.app-dialog__btn{border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);cursor:pointer;font:inherit;padding:.5rem .75rem}.app-dialog__btn--cancel{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary)}.app-dialog__btn--confirm{background:var(--shadow-claw-accent-primary);border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-on-primary)}.app-prompt-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-prompt-dialog__title{font-size:1rem;margin:0}.app-prompt-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-prompt-dialog__input-area{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.app-prompt-dialog__input{background:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-s);color:var(--shadow-claw-text-primary);font:inherit;padding:.5rem;width:100%}.app-prompt-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.chat-page{flex-direction:column}:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{opacity:1;transform:translateY(0);transition:opacity var(--shadow-claw-duration-min) var(--shadow-claw-ease-out),transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-toast,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-toast{opacity:0;pointer-events:none;transform:translateY(.25rem)}@media (prefers-reduced-motion:reduce){:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{transform:none;transition:none}}.sidebar-boot-skeleton{background-color:var(--shadow-claw-bg-secondary);bottom:0;display:flex;flex-direction:column;left:0;opacity:0;padding:1rem .75rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-hydration-pending=true]) .sidebar-boot-skeleton,:host([data-js-boot-pending=true]) .sidebar-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.skeleton-nav-wrapper{display:none;flex-direction:column;gap:.5rem;margin-bottom:.5rem}:host([data-prerender-no-seed=true]) .skeleton-nav-wrapper{display:flex}.skeleton-divider{border-top:.0625rem solid var(--shadow-claw-border-color);display:none;margin:.75rem 0}:host([data-prerender-no-seed=true]) .skeleton-divider{display:block}.skeleton-convo-wrapper{display:flex;flex-direction:column;gap:.75rem;margin-top:.5rem}.skeleton-item{animation:skeleton-pulse 1.8s ease-in-out infinite;background:linear-gradient(90deg,var(--shadow-claw-bg-secondary) 25%,var(--shadow-claw-bg-tertiary) 50%,var(--shadow-claw-bg-secondary) 75%);background-size:200% 100%}.skeleton-nav{border-radius:var(--shadow-claw-radius-m);height:2.25rem;width:100%}.skeleton-nav:first-child{width:85%}.skeleton-nav:nth-child(2){width:90%}.skeleton-nav:nth-child(3){width:75%}.skeleton-nav:nth-child(4){width:80%}.skeleton-convo{border-radius:var(--shadow-claw-radius-m);height:3.5rem;width:100%}.main-content-boot-skeleton{align-items:center;background-color:var(--shadow-claw-bg-primary);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;opacity:0;padding:2rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .main-content-boot-skeleton,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .main-content-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.boot-loading-svg{height:4.5rem;opacity:.85;transition:color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:4.5rem}.boot-loading-svg,.boot-loading-text{color:var(--shadow-claw-text-secondary)}.boot-loading-text{font-size:var(--shadow-claw-font-size-sm);font-weight:600;letter-spacing:.075em;margin-top:1.25rem;text-transform:uppercase}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}
1
+ *,:after,:before{box-sizing:border-box}.hidden,[hidden]{display:none!important}a{color:var(--shadow-claw-link);text-decoration:underline;text-underline-offset:.125rem}a:hover{color:var(--shadow-claw-link-hover)}.header{background-color:var(--shadow-claw-bg-secondary);border-bottom:.0625rem solid var(--shadow-claw-border-color);gap:.5rem;height:4rem;justify-content:start;max-height:4rem;padding:.5rem 1rem}.header,.header h1{align-items:center;display:flex;width:100%}.header h1{color:var(--shadow-claw-text-primary);flex-direction:row;margin:0}#menu-button{align-items:center;background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;justify-content:center;padding:.5rem}#menu-button:hover,.theme-toggle:hover{background-color:var(--shadow-claw-bg-tertiary);color:var(--shadow-claw-text-primary)}.header-actions{gap:.5rem;margin-left:auto}.header-actions,.theme-toggle{align-items:center;display:flex}.theme-toggle{background:transparent;border:none;border-radius:.25rem;color:var(--shadow-claw-text-secondary);cursor:pointer;justify-content:center;padding:.5rem}.theme-mode-toggle .sun-icon{display:none}.theme-mode-toggle .moon-icon{display:block}.theme-toggle svg{transition:transform .2s ease}.header-main-toggle{display:var(--shadow-claw-header-main-toggle-display,block)}.activity-log-toggle[aria-pressed=true],.header-main-toggle[aria-pressed=true]{box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-warning-color,#d97706) 50%,transparent);color:var(--shadow-claw-warning-color,#d97706)}.activity-log-toggle[aria-pressed=true] svg,.header-main-toggle[aria-pressed=true] svg{transform:rotate(180deg)}.webvm-toggle--booting,.webvm-toggle--ready,.webvm-toggle--visible{color:var(--shadow-claw-success-color)}.webvm-toggle--error{color:var(--shadow-claw-error-color)}.app{background-color:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);display:flex;flex-direction:column;font-family:var(--shadow-claw-font-sans);visibility:visible;width:100%}.app-body{--sidebar-width:15.625rem;display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.sidebar{background-color:var(--shadow-claw-bg-secondary);border-right:.0625rem solid var(--shadow-claw-bg-tertiary);display:flex;flex:none;flex-direction:column;overflow-y:auto;position:relative;width:var(--sidebar-width)}.sidebar-resize-handle{background:transparent;cursor:col-resize;flex:none;outline:none;position:relative;touch-action:none;user-select:none;width:.75rem}.sidebar-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:4.25rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:.5625rem}.sidebar-resize-handle:after,.sidebar-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.sidebar-resize-handle:after{background:var(--shadow-claw-border-color);height:2.75rem;transition:background-color .15s;width:.1875rem}.sidebar-resize-handle.active:before,.sidebar-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle.active:after,.sidebar-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.sidebar-resize-handle:focus-visible:after{background:var(--shadow-claw-accent-primary)}.sidebar-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}@media (max-width:55.9375rem){.sidebar{display:none}.sidebar.open{border-radius:0 var(--shadow-claw-radius-m) var(--shadow-claw-radius-m) 0;box-shadow:var(--shadow-claw-shadow-lg);display:flex;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);position:absolute;width:min(85vw,20rem);z-index:100}.sidebar-resize-handle{display:none}}@media (min-width:56rem){#menu-button{display:none}}.nav-menu{flex:none;list-style:none;margin:0;padding:.5rem}.nav-menu:not(:has(.nav-item:not([hidden]))){display:none}slot[name=sidebar-content],slot[name=sidebar-footer],slot[name=sidebar-nav],slot[name=sidebar]{display:block}::slotted([slot=sidebar-content]),::slotted([slot=sidebar-footer]),::slotted([slot=sidebar-nav]),::slotted([slot=sidebar]){display:block}.sidebar-footer{display:var(--shadow-claw-sidebar-footer-display,block)}.sidebar-spacer{flex:1}shadow-claw-conversations{display:flex;flex:none;flex-direction:column;min-height:0;overflow:hidden}.nav-item{border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:var(--shadow-claw-font-size-sm);font-weight:500;margin-bottom:.5rem;padding:.625rem .75rem;transition:background-color .15s,color .15s}.nav-item:hover{background-color:var(--shadow-claw-text-secondary)}.nav-item.active,.nav-item:hover{color:var(--shadow-claw-on-primary)}.nav-item.active{background-color:var(--shadow-claw-accent-primary)}.sidebar-footer{border-top:.0625rem solid var(--shadow-claw-border-color);flex:none;margin-bottom:.5rem;padding:.75rem}.settings-btn{background-color:transparent;border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-pill);color:var(--shadow-claw-text-secondary);cursor:pointer;font-size:.8125rem;padding:.625rem .75rem;transition:all var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.settings-btn:hover{border-color:var(--shadow-claw-text-primary);box-shadow:var(--shadow-claw-shadow-md);color:var(--shadow-claw-text-primary)}.main-content{--chat-split-height:20rem;height:calc(100vh - 4rem);height:calc(100dvh - 4rem);overflow:hidden;position:relative}.main-content,.page{display:flex;flex:1;flex-direction:column;min-height:0}.page{display:none;overflow:auto}.page.active{display:flex}.chat-split-resize-handle{background:transparent;cursor:row-resize;display:none;flex:none;height:.75rem;outline:none;position:relative;touch-action:none;user-select:none;width:100%}.main-content.split-chat-active .page.active{order:1}.main-content.split-chat-active .chat-split-resize-handle{display:flex;margin-bottom:-.375rem;margin-top:-.375rem;order:2;z-index:10}.chat-split-resize-handle:before{background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 72%,var(--shadow-claw-border-color));border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 80%,transparent);height:.5625rem;transition:background-color .15s,border-color .15s,box-shadow .15s;width:4.25rem}.chat-split-resize-handle:after,.chat-split-resize-handle:before{border-radius:var(--shadow-claw-radius-pill);content:"";left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.chat-split-resize-handle:after{background:var(--shadow-claw-border-color);height:.1875rem;transition:background-color .15s;width:2.75rem}.chat-split-resize-handle.active:before,.chat-split-resize-handle:focus-visible:before,.chat-split-resize-handle:hover:before{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:color-mix(in srgb,var(--shadow-claw-accent-primary) 45%,transparent);box-shadow:0 0 .5rem color-mix(in srgb,var(--shadow-claw-accent-primary) 18%,transparent)}.chat-split-resize-handle.active:after,.chat-split-resize-handle:focus-visible:after,.chat-split-resize-handle:hover:after{background:var(--shadow-claw-accent-primary)}.chat-split-resize-handle:focus-visible{outline:.125rem solid color-mix(in srgb,var(--shadow-claw-accent-primary) 60%,transparent);outline-offset:.0625rem}.main-content.split-chat-active .chat-page:not(.active){border-top:.0625rem solid var(--shadow-claw-border-color);display:flex;flex:none;height:var(--chat-split-height);max-height:calc(100% - 6.25rem);min-height:9.375rem;order:3}@media (max-width:55.9375rem){.chat-split-resize-handle,.main-content.split-chat-active .chat-page:not(.active){display:none!important}}.app-dialog{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-l);box-shadow:var(--shadow-claw-shadow-lg);color:var(--shadow-claw-text-primary);max-width:min(90vw,28rem);padding:0}.app-dialog::backdrop{background:color-mix(in srgb,#000 50%,transparent)}.app-confirm-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-dialog__title{font-size:1rem;margin:0}.app-dialog__details,.app-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-dialog__details{display:flex;flex-direction:column;gap:.25rem;padding-left:1rem}.app-dialog__links{display:flex;flex-wrap:wrap;gap:.5rem}.app-dialog__link{color:var(--shadow-claw-accent-primary);font-size:.9375rem;text-decoration:none}.app-dialog__link:focus-visible,.app-dialog__link:hover{text-decoration:underline}.app-dialog__countdown{color:var(--shadow-claw-text-secondary);font-size:.875rem;margin:0}.app-confirm-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end}.app-dialog__btn{border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);cursor:pointer;font:inherit;padding:.5rem .75rem}.app-dialog__btn--cancel{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary)}.app-dialog__btn--confirm{background:var(--shadow-claw-accent-primary);border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-on-primary)}.app-prompt-dialog__form{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:1rem}.app-prompt-dialog__title{font-size:1rem;margin:0}.app-prompt-dialog__message{color:var(--shadow-claw-text-secondary);margin:0}.app-prompt-dialog__input-area{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.app-prompt-dialog__input{background:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-s);color:var(--shadow-claw-text-primary);font:inherit;padding:.5rem;width:100%}.app-prompt-dialog__actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.chat-page{flex-direction:column}:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{opacity:1;transform:translateY(0);transition:opacity var(--shadow-claw-duration-min) var(--shadow-claw-ease-out),transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-hydration-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-hydration-pending=true]) shadow-claw-toast,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .nav-item,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .page.active,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .sidebar-footer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) shadow-claw-toast{opacity:0;pointer-events:none;transform:translateY(.25rem)}@media (prefers-reduced-motion:reduce){:host([data-prerender-no-seed=true]) .nav-item,:host([data-prerender-no-seed=true]) .page.active,:host([data-prerender-no-seed=true]) .sidebar-footer,:host([data-prerender-no-seed=true]) shadow-claw-conversations,:host([data-prerender-no-seed=true]) shadow-claw-file-viewer,:host([data-prerender-no-seed=true]) shadow-claw-toast{transform:none;transition:none}}.sidebar-boot-skeleton{background-color:var(--shadow-claw-bg-secondary);bottom:0;display:flex;flex-direction:column;left:0;opacity:0;padding:1rem .75rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-hydration-pending=true]) .sidebar-boot-skeleton,:host([data-js-boot-pending=true]) .sidebar-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.skeleton-nav-wrapper{display:none;flex-direction:column;gap:.5rem;margin-bottom:.5rem}:host([data-prerender-no-seed=true]) .skeleton-nav-wrapper{display:flex}.skeleton-divider{border-top:.0625rem solid var(--shadow-claw-border-color);display:none;margin:.75rem 0}:host([data-prerender-no-seed=true]) .skeleton-divider{display:block}.skeleton-convo-wrapper{display:flex;flex-direction:column;gap:.75rem;margin-top:.5rem}.skeleton-item{animation:skeleton-pulse 1.8s ease-in-out infinite;background:linear-gradient(90deg,var(--shadow-claw-bg-secondary) 25%,var(--shadow-claw-bg-tertiary) 50%,var(--shadow-claw-bg-secondary) 75%);background-size:200% 100%}.skeleton-nav{border-radius:var(--shadow-claw-radius-m);height:2.25rem;width:100%}.skeleton-nav:first-child{width:85%}.skeleton-nav:nth-child(2){width:90%}.skeleton-nav:nth-child(3){width:75%}.skeleton-nav:nth-child(4){width:80%}.skeleton-convo{border-radius:var(--shadow-claw-radius-m);height:3.5rem;width:100%}.main-content-boot-skeleton{align-items:center;background-color:var(--shadow-claw-bg-primary);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;opacity:0;padding:2rem;pointer-events:none;position:absolute;right:0;top:0;transition:opacity var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out),visibility var(--shadow-claw-duration-regular) var(--shadow-claw-ease-out);visibility:hidden;z-index:10}:host([data-prerender-no-seed=true][data-hydration-pending=true]) .main-content-boot-skeleton,:host([data-prerender-no-seed=true][data-js-boot-pending=true]) .main-content-boot-skeleton{opacity:1;pointer-events:auto;visibility:visible}.boot-loading-svg{height:4.5rem;opacity:.85;transition:color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:4.5rem}.boot-loading-svg,.boot-loading-text{color:var(--shadow-claw-text-secondary)}.boot-loading-text{font-size:var(--shadow-claw-font-size-sm);font-weight:600;letter-spacing:.075em;margin-top:1.25rem;text-transform:uppercase}@keyframes skeleton-pulse{0%{background-position:200% 0}to{background-position:-200% 0}}
@@ -1 +1 @@
1
- <template><div class="app"> <header class="header"> <button aria-label="Open menu" title="Open menu" id="menu-button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M120-680v-80h720v80zm0 480v-80h720v80zm0-240v-80h720v80z"/></svg> </button> <h1> <slot name="header-title-link"></slot> <div class="header-actions"> <button aria-label="Toggle theme" title="Toggle theme" class="theme-mode-toggle theme-toggle"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="sun-icon" viewBox="0 -960 960 960"><path d="M480-360q50 0 85-35t35-85-35-85-85-35-85 35-35 85 35 85 85 35m0 80q-83 0-141.5-58.5T280-480t58.5-141.5T480-680t141.5 58.5T680-480t-58.5 141.5T480-280M200-440H40v-80h160zm720 0H760v-80h160zM440-760v-160h80v160zm0 720v-160h80v160zM256-650l-101-97 57-59 96 100zm492 496-97-101 53-55 101 97zm-98-550 97-101 59 57-101 97zM158-190l97-101 55 53-101 97z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="moon-icon" viewBox="0 -960 960 960"><path d="M480-120q-150 0-255-105T120-480t105-255 255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q52 0 99-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120m0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-74 30-122.5 100T204-480q0 116 82 198t194 82m-12-274"/></svg> </button> <button aria-label="Hide action header" title="Hide action header" aria-pressed="false" class="header-main-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M280-200h400v-80H280zm200-200L280-600l56-56 104 104v-328h80v328l104-104 56 56z"/></svg> </button> <button aria-label="Hide activity log" title="Hide activity log" aria-pressed="false" class="activity-log-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 -960 960 960"><path d="M80-600v-160q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v160h-80v-160H160v160zm80 360q-33 0-56.5-23.5T80-320v-200h80v200h640v-200h80v200q0 33-23.5 56.5T800-240zM40-120v-80h880v80zm40-400v-80h240q11 0 21 6t15 16l47 93 123-215q5-9 14-14.5t20-5.5 21 5.5 15 16.5l49 98h235v80H620q-11 0-21-5.5T584-542l-26-53-123 215q-5 10-15 15t-21 5-20.5-6-14.5-16l-69-138z"/></svg> </button> <button aria-label="Hide WebVM terminal" title="Hide WebVM terminal" aria-pressed="true" class="theme-toggle webvm-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M320-280 120-480l200-200 56 56-104 104h568v80H272l104 104zm320 0-56-56 104-104H120v-80h568L584-624l56-56 200 200z"/></svg> </button> <slot name="header-actions-logo"></slot> </div> </h1> </header> <div class="app-body"> <aside class="sidebar"> <div class="sidebar-boot-skeleton" aria-hidden="true"> <div class="skeleton-nav-wrapper"> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> </div> <div class="skeleton-divider"></div> <div class="skeleton-convo-wrapper"> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> </div> </div> <nav> <ul class="nav-menu"> <li class="active nav-item" data-page="pages">📚 Pages</li> <li class="nav-item" data-page="chat">💬 Chat</li> <li class="nav-item" data-page="tasks">&nbsp;✓&nbsp;Tasks</li> <li class="nav-item" data-page="files">📁 Files</li> </ul> </nav> <div class="sidebar-spacer"></div> <shadow-claw-conversations></shadow-claw-conversations> <div class="sidebar-footer"> <button class="settings-btn" data-action="show-settings"> ⚙️ Settings </button> </div> </aside> <div class="sidebar-resize-handle" title="Drag to resize sidebar"></div> <main class="main-content"> <div class="main-content-boot-skeleton" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" class="boot-loading-svg" viewBox="0 0 44 44"><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2"><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle></g></svg> <div class="boot-loading-text">Preparing workspace...</div> </div> <div class="chat-page page" data-page-id="chat"></div> <div class="page" data-page-id="tasks"></div> <div class="page" data-page-id="files"></div> <div class="active page" data-page-id="pages"> <shadow-claw-pages></shadow-claw-pages> </div> <div class="page" data-page-id="settings"></div> <div class="page" data-page-id="tools"></div> <div class="page" data-page-id="channels"></div> <div class="chat-split-resize-handle" title="Drag to resize chat panel" hidden></div> <shadow-claw-toast></shadow-claw-toast> </main> </div> <shadow-claw-dialog dialog-class="app-dialog" dialog-aria-labelledby="appDialogTitle"> <form method="dialog" class="app-confirm-dialog__form"> <h2 id="appDialogTitle" class="app-dialog__title">Confirm</h2> <p class="app-dialog__message"></p> <ul class="app-dialog__details" hidden></ul> <div class="app-dialog__links" hidden></div> <p class="app-dialog__countdown" hidden role="status" aria-live="polite" aria-atomic="true"></p> <div class="app-confirm-dialog__actions"> <button type="submit" value="cancel" class="app-dialog__btn app-dialog__btn--cancel"> Cancel </button> <button type="submit" value="confirm" class="app-dialog__btn app-dialog__btn--confirm"> Confirm </button> </div> </form> </shadow-claw-dialog> <shadow-claw-dialog dialog-class="app-dialog app-prompt-dialog" dialog-aria-labelledby="appPromptTitle"> <form method="dialog" class="app-prompt-dialog__form"> <h2 id="appPromptTitle" class="app-prompt-dialog__title"> Agent Question </h2> <p class="app-prompt-dialog__message"></p> <div class="app-prompt-dialog__input-area"> </div> <div class="app-prompt-dialog__actions"> <button type="submit" value="submit" class="app-dialog__btn app-dialog__btn--confirm app-prompt-dialog__submit"> Submit </button> </div> </form> </shadow-claw-dialog> </div></template>
1
+ <template><div class="app"> <header class="header"> <button aria-label="Open menu" title="Open menu" id="menu-button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M120-680v-80h720v80zm0 480v-80h720v80zm0-240v-80h720v80z"/></svg> </button> <h1> <slot name="header-title-link"></slot> <div class="header-actions"> <button aria-label="Toggle theme" title="Toggle theme" class="theme-mode-toggle theme-toggle"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="sun-icon" viewBox="0 -960 960 960"><path d="M480-360q50 0 85-35t35-85-35-85-85-35-85 35-35 85 35 85 85 35m0 80q-83 0-141.5-58.5T280-480t58.5-141.5T480-680t141.5 58.5T680-480t-58.5 141.5T480-280M200-440H40v-80h160zm720 0H760v-80h160zM440-760v-160h80v160zm0 720v-160h80v160zM256-650l-101-97 57-59 96 100zm492 496-97-101 53-55 101 97zm-98-550 97-101 59 57-101 97zM158-190l97-101 55 53-101 97z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" class="moon-icon" viewBox="0 -960 960 960"><path d="M480-120q-150 0-255-105T120-480t105-255 255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q52 0 99-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120m0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-74 30-122.5 100T204-480q0 116 82 198t194 82m-12-274"/></svg> </button> <button aria-label="Hide action header" title="Hide action header" aria-pressed="false" class="header-main-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M280-200h400v-80H280zm200-200L280-600l56-56 104 104v-328h80v328l104-104 56 56z"/></svg> </button> <button aria-label="Hide activity log" title="Hide activity log" aria-pressed="false" class="activity-log-toggle theme-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 -960 960 960"><path d="M80-600v-160q0-33 23.5-56.5T160-840h640q33 0 56.5 23.5T880-760v160h-80v-160H160v160zm80 360q-33 0-56.5-23.5T80-320v-200h80v200h640v-200h80v200q0 33-23.5 56.5T800-240zM40-120v-80h880v80zm40-400v-80h240q11 0 21 6t15 16l47 93 123-215q5-9 14-14.5t20-5.5 21 5.5 15 16.5l49 98h235v80H620q-11 0-21-5.5T584-542l-26-53-123 215q-5 10-15 15t-21 5-20.5-6-14.5-16l-69-138z"/></svg> </button> <button aria-label="Hide WebVM terminal" title="Hide WebVM terminal" aria-pressed="true" class="theme-toggle webvm-toggle" type="button"> <svg xmlns="http://www.w3.org/2000/svg" width="1.5rem" height="1.5rem" fill="currentColor" viewBox="0 -960 960 960"><path d="M320-280 120-480l200-200 56 56-104 104h568v80H272l104 104zm320 0-56-56 104-104H120v-80h568L584-624l56-56 200 200z"/></svg> </button> <slot name="header-actions-logo"></slot> </div> </h1> </header> <div class="app-body"> <aside class="sidebar"> <div class="sidebar-boot-skeleton" aria-hidden="true"> <div class="skeleton-nav-wrapper"> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> <div class="skeleton-item skeleton-nav"></div> </div> <div class="skeleton-divider"></div> <div class="skeleton-convo-wrapper"> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> <div class="skeleton-convo skeleton-item"></div> </div> </div> <nav> <ul class="nav-menu"> <li class="active nav-item" data-page="pages">📚 Pages</li> <li class="nav-item" data-page="chat">💬 Chat</li> <li class="nav-item" data-page="tasks">&nbsp;✓&nbsp;Tasks</li> <li class="nav-item" data-page="files">📁 Files</li> </ul> </nav> <slot name="sidebar-nav"></slot> <slot name="sidebar"></slot> <slot name="sidebar-content"></slot> <div class="sidebar-spacer"></div> <shadow-claw-conversations></shadow-claw-conversations> <slot name="sidebar-footer"></slot> <div class="sidebar-footer"> <button class="settings-btn" data-action="show-settings"> ⚙️ Settings </button> </div> </aside> <div class="sidebar-resize-handle" title="Drag to resize sidebar"></div> <main class="main-content"> <div class="main-content-boot-skeleton" aria-hidden="true"> <svg xmlns="http://www.w3.org/2000/svg" class="boot-loading-svg" viewBox="0 0 44 44"><g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2"><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="0s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.165, 0.84, 0.44, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 20"/><animate attributeName="stroke-opacity" begin="-0.9s" calcMode="spline" dur="1.8s" keySplines="0.3, 0.61, 0.355, 1" keyTimes="0; 1" repeatCount="indefinite" values="1; 0"/></circle></g></svg> <div class="boot-loading-text">Preparing workspace...</div> </div> <div class="chat-page page" data-page-id="chat"></div> <div class="page" data-page-id="tasks"></div> <div class="page" data-page-id="files"></div> <div class="active page" data-page-id="pages"> <shadow-claw-pages></shadow-claw-pages> </div> <div class="page" data-page-id="settings"></div> <div class="page" data-page-id="tools"></div> <div class="page" data-page-id="channels"></div> <div class="chat-split-resize-handle" title="Drag to resize chat panel" hidden></div> <shadow-claw-toast></shadow-claw-toast> </main> </div> <shadow-claw-dialog dialog-class="app-dialog" dialog-aria-labelledby="appDialogTitle"> <form method="dialog" class="app-confirm-dialog__form"> <h2 id="appDialogTitle" class="app-dialog__title">Confirm</h2> <p class="app-dialog__message"></p> <ul class="app-dialog__details" hidden></ul> <div class="app-dialog__links" hidden></div> <p class="app-dialog__countdown" hidden role="status" aria-live="polite" aria-atomic="true"></p> <div class="app-confirm-dialog__actions"> <button type="submit" value="cancel" class="app-dialog__btn app-dialog__btn--cancel"> Cancel </button> <button type="submit" value="confirm" class="app-dialog__btn app-dialog__btn--confirm"> Confirm </button> </div> </form> </shadow-claw-dialog> <shadow-claw-dialog dialog-class="app-dialog app-prompt-dialog" dialog-aria-labelledby="appPromptTitle"> <form method="dialog" class="app-prompt-dialog__form"> <h2 id="appPromptTitle" class="app-prompt-dialog__title"> Agent Question </h2> <p class="app-prompt-dialog__message"></p> <div class="app-prompt-dialog__input-area"> </div> <div class="app-prompt-dialog__actions"> <button type="submit" value="submit" class="app-dialog__btn app-dialog__btn--confirm app-prompt-dialog__submit"> Submit </button> </div> </form> </shadow-claw-dialog> </div></template>
@@ -1 +1 @@
1
- *{box-sizing:border-box}:host{display:block;height:calc(100dvh + 4rem);line-height:1.5}.pages{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);flex-direction:column}.pages,.pages__content{display:flex;min-height:0;min-width:0}.pages__content{flex:1;flex-direction:column}.pages__sidebar{display:none}.pages__list{padding:.625rem}.pages__group-details,.pages__list{display:flex;flex-direction:column;gap:.375rem}.pages__group-label{align-items:center;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;font-size:.75rem;font-weight:700;justify-content:space-between;list-style:none;margin:.25rem 0 0;padding:.125rem .25rem;text-transform:uppercase;user-select:none}.pages__group-label::-webkit-details-marker{display:none}.pages__group-icon{font-size:.625rem;transform:rotate(-90deg);transition:transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}.pages__group-details[open] .pages__group-icon{transform:rotate(0deg)}.pages__group-pages{display:flex;flex-direction:column;gap:.375rem}.pages__list-item{align-items:center;background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-primary);display:flex;font-size:var(--shadow-claw-font-size-sm);gap:.375rem;justify-content:space-between;line-height:1.35;padding:.375rem;width:100%}.pages__list-item:hover{border-color:var(--shadow-claw-accent-primary)}.pages__select{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;min-width:0;padding:.125rem .25rem;text-align:left}.pages__list-item.active{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:var(--shadow-claw-accent-primary)}.pages__list-path{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.pages__remove{background:transparent;border:none;color:var(--shadow-claw-text-secondary);cursor:pointer;flex:none;font-size:1rem;line-height:1;padding:.125rem .25rem}.pages__remove:hover{color:var(--shadow-claw-error-color)}.pages__viewer{display:flex;flex:1;flex-direction:row;min-height:calc(100vh - 11rem);min-height:calc(100dvh - 11rem);min-width:0;overflow:hidden;position:relative}.pages__viewer-scroll{display:flex;flex:1;flex-direction:column;height:calc(100% + 1.5rem);min-width:0;padding:.75rem 1rem}.pages__rendered{max-width:72rem;padding:1rem 1.5rem 1rem 1rem}.pages__rendered :is(pre){overflow:auto}.pages__rendered img{max-height:100%;max-width:100%}.pages__rendered a{color:var(--shadow-claw-accent-primary)}.pages__rendered>h1,.pages__rendered>h2,article>h1,article>h2{margin-top:0}.pages__iframe{background:transparent;border-width:0;display:block;height:auto;min-height:20rem;overflow:hidden;width:100%}.pages__empty,.pages__status{color:var(--shadow-claw-text-secondary);font-size:var(--shadow-claw-font-size-sm)}.pages:has(.pages__sidebar.collapsed) .pages__remove-all-btn{display:none}.pages:has(.pages__sidebar.collapsed) shadow-claw-page-header::part(actions-disclosure){display:none}.pages__dropdown-container{align-items:center;display:flex;gap:.5rem;margin-bottom:1rem;position:relative;width:100%}.pages__nav-btn{align-items:center;backdrop-filter:blur(6px);background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 80%,transparent);border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 60%,transparent);border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;flex:none;height:8rem;justify-content:center;max-height:8rem;min-height:8rem;opacity:0;padding:.75rem .5rem;pointer-events:none;position:fixed;top:50dvh;transform:translateY(-50%);transition:opacity .4s var(--shadow-claw-ease-out),color .15s var(--shadow-claw-ease-out),border-color .15s var(--shadow-claw-ease-out),background .15s var(--shadow-claw-ease-out);z-index:100}.pages__nav-btn--prev{left:.5rem}.pages__nav-btn--next{right:.5rem}.pages__content:focus-within .pages__nav-btn:not(:disabled):not([hidden]),.pages__content:has(.pages__viewer--nav-visible) .pages__nav-btn:not(:disabled):not([hidden]),.pages__nav-btn:hover:not(:disabled):not([hidden]),.pages__viewer.pages__viewer--nav-visible~.pages__nav-btn:not(:disabled):not([hidden]),.pages__viewer:focus-within~.pages__nav-btn:not(:disabled):not([hidden]){opacity:1;pointer-events:auto}.pages__nav-btn:disabled,.pages__nav-btn[hidden]{display:none!important;opacity:0!important;pointer-events:none!important}.pages__nav-btn:hover:not(:disabled){background:color-mix(in srgb,var(--shadow-claw-accent-primary) 15%,var(--shadow-claw-bg-secondary));border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-accent-primary);opacity:1}.pages__nav-btn:disabled{cursor:not-allowed}.pages__dropdown{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);box-shadow:var(--shadow-claw-shadow-sm);color:var(--shadow-claw-text-primary);display:block;transition:border-color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.pages__dropdown:hover{border-color:var(--shadow-claw-accent-primary)}.pages__dropdown-summary{align-items:center;cursor:pointer;display:flex;font-size:var(--shadow-claw-font-size-sm);font-weight:600;gap:.5rem;justify-content:space-between;list-style:none;padding:.625rem 1rem;user-select:none}.pages__dropdown-summary::-webkit-details-marker{display:none}.pages__dropdown-selected{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pages__dropdown-arrow{color:var(--shadow-claw-text-secondary);font-size:.75rem;transition:transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}.pages__dropdown[open] .pages__dropdown-arrow{transform:rotate(180deg)}.pages__dropdown-menu{backdrop-filter:blur(10px);background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);box-shadow:var(--shadow-claw-shadow-lg);left:0;margin-top:.375rem;max-height:20rem;overflow-y:auto;position:absolute;right:0;z-index:100}.pages__dropdown-menu .pages__list{padding:.375rem}.pages__breadcrumbs{align-items:center;display:flex;font-size:.8125rem}.pages__sidebar-toggle-btn{background-color:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:.1875rem;color:var(--shadow-claw-accent-primary);cursor:pointer;padding:.25rem .5rem;transition:all .1s}.pages__sidebar-toggle-btn:focus-visible,.pages__sidebar-toggle-btn:hover{background-color:var(--shadow-claw-bg-tertiary);border-color:var(--shadow-claw-accent-primary);outline:none}.pages__drag-handle{color:var(--shadow-claw-text-tertiary);cursor:grab;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem;user-select:none}.pages__drag-handle:hover{color:var(--shadow-claw-text-secondary)}.pages__drag-handle:active,.pages__list-item.dragging .pages__drag-handle{cursor:grabbing}.pages__list-item.drag-over{border-color:var(--shadow-claw-accent-primary);box-shadow:0 0 0 .125rem var(--shadow-claw-accent-primary)}.pages__default-btn{background:transparent;border:none;color:var(--shadow-claw-text-tertiary);cursor:pointer;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem}.pages__default-btn.is-default,.pages__default-btn:hover{color:var(--shadow-claw-accent-primary)}.pages__edit{background:transparent;border:none;color:var(--shadow-claw-text-secondary);cursor:pointer;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem}.pages__edit:hover{color:var(--shadow-claw-text-primary)}@media (min-width:75rem){.pages__content{display:grid;grid-template-columns:minmax(14rem,20rem) minmax(0,1fr);grid-template-rows:minmax(0,1fr)}.pages__content.pages__content--sidebar-collapsed{grid-template-columns:1fr!important}.pages__sidebar{border-right:.0625rem solid var(--shadow-claw-border-color);display:block;min-height:0;overflow:auto}.pages__sidebar.collapsed{display:none!important}.pages__dropdown{display:none}.pages__nav-btn--prev{left:20.5rem}.pages__content.pages__content--sidebar-collapsed .pages__nav-btn--prev{left:.5rem}}ul{line-height:1.5}.pages__announcer{border:0;clip:rect(0,0,0,0);height:.0625rem;margin:-.0625rem;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:.0625rem}
1
+ *{box-sizing:border-box}:host{display:block;height:calc(100dvh + 4rem);line-height:1.5}.pages{background:var(--shadow-claw-bg-primary);color:var(--shadow-claw-text-primary);flex-direction:column}.pages,.pages__content{display:flex;min-height:0;min-width:0}.pages__content{flex:1;flex-direction:column}.pages__sidebar{display:none}.pages__list{padding:.625rem}.pages__group-details,.pages__list{display:flex;flex-direction:column;gap:.375rem}.pages__group-label{align-items:center;color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;font-size:.75rem;font-weight:700;justify-content:space-between;list-style:none;margin:.25rem 0 0;padding:.125rem .25rem;text-transform:uppercase;user-select:none}.pages__group-label::-webkit-details-marker{display:none}.pages__group-icon{font-size:.625rem;transform:rotate(-90deg);transition:transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}.pages__group-details[open] .pages__group-icon{transform:rotate(0deg)}.pages__group-pages{display:flex;flex-direction:column;gap:.375rem}.pages__list-item{align-items:center;background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-primary);display:flex;font-size:var(--shadow-claw-font-size-sm);gap:.375rem;justify-content:space-between;line-height:1.35;padding:.375rem;width:100%}.pages__list-item:hover{border-color:var(--shadow-claw-accent-primary)}.pages__select{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;min-width:0;padding:.125rem .25rem;text-align:left}.pages__list-item.active{background:color-mix(in srgb,var(--shadow-claw-accent-primary) 20%,var(--shadow-claw-bg-secondary));border-color:var(--shadow-claw-accent-primary)}.pages__list-path{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.pages__remove{background:transparent;border:none;color:var(--shadow-claw-text-secondary);cursor:pointer;flex:none;font-size:1rem;line-height:1;padding:.125rem .25rem}.pages__remove:hover{color:var(--shadow-claw-error-color)}.pages__viewer{display:flex;flex:1;flex-direction:row;min-height:calc(100vh - 11rem);min-height:calc(100dvh - 11rem);min-width:0;overflow:hidden;position:relative}.pages__viewer-scroll{display:flex;flex:1;flex-direction:column;height:calc(100% + 1.5rem);min-width:0;padding:.75rem 1rem}.pages__rendered{max-width:72rem;padding:1rem 1.5rem 1rem 1rem}.pages__rendered :is(pre){overflow:auto}.pages__rendered img{max-height:100%;max-width:100%}.pages__rendered a{color:var(--shadow-claw-accent-primary)}.pages__rendered>h1,.pages__rendered>h2,article>h1,article>h2{margin-bottom:var(--shadow-claw-article-header-margin-bottom,1.5rem);margin-top:0}.pages__rendered :is(h1,h2,h3,h4){clear:both}.pages__iframe{background:transparent;border-width:0;display:block;height:auto;min-height:20rem;overflow:hidden;width:100%}.pages__empty,.pages__status{color:var(--shadow-claw-text-secondary);font-size:var(--shadow-claw-font-size-sm)}.pages:has(.pages__sidebar.collapsed) .pages__remove-all-btn{display:none}.pages:has(.pages__sidebar.collapsed) shadow-claw-page-header::part(actions-disclosure){display:none}.pages__dropdown-container{align-items:center;display:var(--shadow-claw-pages-dropdown-container-display,flex);gap:.5rem;margin-bottom:1rem;position:relative;width:100%}.pages__nav-btn{align-items:center;backdrop-filter:blur(6px);background:color-mix(in srgb,var(--shadow-claw-bg-secondary) 80%,transparent);border:.0625rem solid color-mix(in srgb,var(--shadow-claw-border-color) 60%,transparent);border-radius:var(--shadow-claw-radius-m);color:var(--shadow-claw-text-secondary);cursor:pointer;display:flex;flex:none;height:8rem;justify-content:center;max-height:8rem;min-height:8rem;opacity:0;padding:.75rem .5rem;pointer-events:none;position:fixed;top:50dvh;transform:translateY(-50%);transition:opacity .4s var(--shadow-claw-ease-out),color .15s var(--shadow-claw-ease-out),border-color .15s var(--shadow-claw-ease-out),background .15s var(--shadow-claw-ease-out);z-index:100}.pages__nav-btn--prev{left:.5rem}.pages__nav-btn--next{right:.5rem}.pages__content:focus-within .pages__nav-btn:not(:disabled):not([hidden]),.pages__content:has(.pages__viewer--nav-visible) .pages__nav-btn:not(:disabled):not([hidden]),.pages__nav-btn:hover:not(:disabled):not([hidden]),.pages__viewer.pages__viewer--nav-visible~.pages__nav-btn:not(:disabled):not([hidden]),.pages__viewer:focus-within~.pages__nav-btn:not(:disabled):not([hidden]){opacity:1;pointer-events:auto}.pages__nav-btn:disabled,.pages__nav-btn[hidden]{display:none!important;opacity:0!important;pointer-events:none!important}.pages__nav-btn:hover:not(:disabled){background:color-mix(in srgb,var(--shadow-claw-accent-primary) 15%,var(--shadow-claw-bg-secondary));border-color:var(--shadow-claw-accent-primary);color:var(--shadow-claw-accent-primary);opacity:1}.pages__nav-btn:disabled{cursor:not-allowed}.pages__dropdown{background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);box-shadow:var(--shadow-claw-shadow-sm);color:var(--shadow-claw-text-primary);display:block;transition:border-color var(--shadow-claw-duration-min) var(--shadow-claw-ease-out);width:100%}.pages__dropdown:hover{border-color:var(--shadow-claw-accent-primary)}.pages__dropdown-summary{align-items:center;cursor:pointer;display:flex;font-size:var(--shadow-claw-font-size-sm);font-weight:600;gap:.5rem;justify-content:space-between;list-style:none;padding:.625rem 1rem;user-select:none}.pages__dropdown-summary::-webkit-details-marker{display:none}.pages__dropdown-selected{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pages__dropdown-arrow{color:var(--shadow-claw-text-secondary);font-size:.75rem;transition:transform var(--shadow-claw-duration-min) var(--shadow-claw-ease-out)}.pages__dropdown[open] .pages__dropdown-arrow{transform:rotate(180deg)}.pages__dropdown-menu{backdrop-filter:blur(10px);background:var(--shadow-claw-bg-secondary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:var(--shadow-claw-radius-m);box-shadow:var(--shadow-claw-shadow-lg);left:0;margin-top:.375rem;max-height:20rem;overflow-y:auto;position:absolute;right:0;z-index:100}.pages__dropdown-menu .pages__list{padding:.375rem}.pages__breadcrumbs{align-items:center;display:flex;font-size:.8125rem}.pages__sidebar-toggle-btn{background-color:var(--shadow-claw-bg-primary);border:.0625rem solid var(--shadow-claw-border-color);border-radius:.1875rem;color:var(--shadow-claw-accent-primary);cursor:pointer;padding:.25rem .5rem;transition:all .1s}.pages__sidebar-toggle-btn:focus-visible,.pages__sidebar-toggle-btn:hover{background-color:var(--shadow-claw-bg-tertiary);border-color:var(--shadow-claw-accent-primary);outline:none}.pages__drag-handle{color:var(--shadow-claw-text-tertiary);cursor:grab;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem;user-select:none}.pages__drag-handle:hover{color:var(--shadow-claw-text-secondary)}.pages__drag-handle:active,.pages__list-item.dragging .pages__drag-handle{cursor:grabbing}.pages__list-item.drag-over{border-color:var(--shadow-claw-accent-primary);box-shadow:0 0 0 .125rem var(--shadow-claw-accent-primary)}.pages__default-btn{background:transparent;border:none;color:var(--shadow-claw-text-tertiary);cursor:pointer;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem}.pages__default-btn.is-default,.pages__default-btn:hover{color:var(--shadow-claw-accent-primary)}.pages__edit{background:transparent;border:none;color:var(--shadow-claw-text-secondary);cursor:pointer;flex:none;font-size:.875rem;line-height:1;padding:.125rem .25rem}.pages__edit:hover{color:var(--shadow-claw-text-primary)}@media (min-width:75rem){.pages__content{display:grid;grid-template-columns:minmax(14rem,20rem) minmax(0,1fr);grid-template-rows:minmax(0,1fr)}.pages__content.pages__content--sidebar-collapsed{grid-template-columns:1fr!important}.pages__sidebar{border-right:.0625rem solid var(--shadow-claw-border-color);display:block;min-height:0;overflow:auto}.pages__sidebar.collapsed{display:none!important}.pages__dropdown{display:none}.pages__nav-btn--prev{left:20.5rem}.pages__content.pages__content--sidebar-collapsed .pages__nav-btn--prev{left:.5rem}}shadow-claw-page-header{display:var(--shadow-claw-page-header-display,block)}ul{line-height:1.5}.pages__announcer{border:0;clip:rect(0,0,0,0);height:.0625rem;margin:-.0625rem;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:.0625rem}