shadow-claw 1.40.1 → 1.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/.well-known/mcp/server-card.json +1 -1
  2. package/.well-known/mcp.json +1 -1
  3. package/README.md +2 -1
  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-63s8NnIS.js +93 -0
  8. package/dist/cli/{chunk-BXg4-9Rq2.js → chunk-8CrZyP1b2.js} +1 -1
  9. package/dist/cli/{chunk-BP5Hg6CM.js → chunk-B--ueArB.js} +1 -1
  10. package/dist/cli/chunk-BATVgkFY.js +17 -0
  11. package/dist/cli/chunk-BIh7rXlJ2.js +1 -0
  12. package/dist/cli/{chunk-Drr0VSGA2.js → chunk-BKnTOLLS2.js} +1 -1
  13. package/dist/cli/{chunk-C5PuRV08.js → chunk-BLMC1Bxv.js} +1 -1
  14. package/dist/cli/{chunk-B2tNSlFy2.js → chunk-BOigzz2U2.js} +1 -1
  15. package/dist/cli/{chunk-DOf3DZdR.js → chunk-BOzn335y.js} +1 -1
  16. package/dist/cli/chunk-BjOeVLb42.js +1 -0
  17. package/dist/cli/{chunk-DqTx0rRp2.js → chunk-Bjqh5_SU2.js} +1 -1
  18. package/dist/cli/chunk-BqWBd_jF2.js +1 -0
  19. package/dist/cli/{chunk-DIbSoQmd2.js → chunk-C6FFByBU2.js} +2 -2
  20. package/dist/cli/{chunk-Drq18VZe.js → chunk-C9-aL3rF.js} +1 -1
  21. package/dist/cli/{chunk-BUhqHeEA2.js → chunk-C9czddEh2.js} +2 -2
  22. package/dist/cli/chunk-CCx8WOwz2.js +1 -0
  23. package/dist/cli/{chunk-BkMSjVJb.js → chunk-CK6ejMig.js} +1 -1
  24. package/dist/cli/chunk-CUUERioR2.js +1 -0
  25. package/dist/cli/chunk-CXAobnJd.js +1 -0
  26. package/dist/cli/chunk-CY1X0pOF2.js +1 -0
  27. package/dist/cli/chunk-CZvvgLVv.js +1 -0
  28. package/dist/cli/chunk-CbcwbfJB.js +1 -0
  29. package/dist/cli/{chunk-quilB3TV2.js → chunk-Ci9OJGcd2.js} +1 -1
  30. package/dist/cli/chunk-Cj9wl0qx.js +1 -0
  31. package/dist/cli/{chunk-3gRhOmGo2.js → chunk-CjJsVrKI2.js} +1 -1
  32. package/dist/cli/{chunk-CmEfzm-_.js → chunk-ClPZ4Rea.js} +1 -1
  33. package/dist/cli/chunk-Cmdxoq9q.js +13 -0
  34. package/dist/cli/{chunk-WMPAfIvV2.js → chunk-DHJCGRuG2.js} +1 -1
  35. package/dist/cli/{chunk-C7Y2xIk4.js → chunk-DKVkYTV9.js} +1 -1
  36. package/dist/cli/chunk-DR2XtWRo.js +1 -0
  37. package/dist/cli/{chunk-BiVJVh_S.js → chunk-DUlIqkaX.js} +7 -7
  38. package/dist/cli/{chunk-CkpueGaZ2.js → chunk-DjWle8FF2.js} +1 -1
  39. package/dist/cli/{chunk-CSvHmNOk.js → chunk-DmRXVLfy.js} +1 -1
  40. package/dist/cli/{chunk-BT1xXZn72.js → chunk-HlSiTC-u2.js} +1 -1
  41. package/dist/cli/{chunk-da0bsiOn.js → chunk-P4JSeFBI.js} +1 -1
  42. package/dist/cli/chunk-UcNbHaRQ.js +1 -0
  43. package/dist/cli/{chunk-BXFHFbEd.js → chunk-UweLmfQS.js} +1 -1
  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 +8 -2
  201. package/dist/public/README.md +2 -1
  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/README.md +1 -0
  212. package/dist/public/docs/example/article/index.html +4 -4
  213. package/dist/public/docs/guides/publishing-to-github-pages.md +95 -6
  214. package/dist/public/docs/publishing/index.html +4 -4
  215. package/dist/public/docs/skill-creator/index.html +4 -4
  216. package/dist/public/docs/subsystems/pages.md +10 -3
  217. package/dist/public/docs/subsystems/theming.md +242 -0
  218. package/dist/public/docs/subsystems/webmcp.md +89 -1
  219. package/dist/public/{downloadGroupFile-BiZQYY-O.js → downloadGroupFile-ChWHuap_.js} +1 -1
  220. package/dist/public/e2e/README.md +3 -2
  221. package/dist/public/{e2e-bridge-CybB810Q.js → e2e-bridge-BkaldjV2.js} +1 -1
  222. package/dist/public/{file-viewer-DLUBvOVD.js → file-viewer-Df4qUJCn.js} +1 -1
  223. package/dist/public/{getGroupDir-CLz5c8cg.js → getGroupDir-CeSr4fzS.js} +1 -1
  224. package/dist/public/{git-Ba8AeviI.js → git-Bscc1tK-.js} +2 -2
  225. package/dist/public/{iframe-sanitizer-CKOO7cxp.js → iframe-sanitizer-BVdkQsor.js} +1 -1
  226. package/dist/public/{iframe-storage-proxy-BvRiccH0.js → iframe-storage-proxy-Cg8aFw7o.js} +1 -1
  227. package/dist/public/index.css +1 -1
  228. package/dist/public/index.html +4 -4
  229. package/dist/public/index.js +1 -1
  230. package/dist/public/{initChatSplitResize-osJXM2gu.js → initChatSplitResize-C3Rp1LeZ.js} +1 -1
  231. package/dist/public/{initControlPlane-CNggzsRw.js → initControlPlane-C1pnzG16.js} +1 -1
  232. package/dist/public/llms.txt +2 -2
  233. package/dist/public/main/index.html +4 -4
  234. package/dist/public/main/memory/index.html +4 -4
  235. package/dist/public/{markdown-CZA-Ye2Q.js → markdown-D3A902nT.js} +1 -1
  236. package/dist/public/{mcp-reconnect-BK1bYBdC.js → mcp-reconnect-BJWxQBm_.js} +1 -1
  237. package/dist/public/{memoryStorage-Bew1X8Uy.js → memoryStorage-ykv-Ri-y.js} +1 -1
  238. package/dist/public/{orchestrator-D6tel2Zp.js → orchestrator-BVnC4Vtt.js} +2 -2
  239. package/dist/public/{orchestrator-Dc_Q73La.js → orchestrator-CQcc7OFA.js} +2 -2
  240. package/dist/public/{peerjs-CYs1F7sq.js → peerjs-CYC2cI1Y.js} +1 -1
  241. package/dist/public/{push-client-_HUyJlFJ.js → push-client-BJrnOULM.js} +1 -1
  242. package/dist/public/service-worker/fetch-proxy.js +1 -1
  243. package/dist/public/service-worker.js +1 -1
  244. package/dist/public/{shadow-claw-Dabb2AEp.js → shadow-claw-WwfOu-tu.js} +33 -3
  245. package/dist/public/{shadow-claw-accounts-BqGrm47Z.js → shadow-claw-accounts-BFZxrPsH.js} +1 -1
  246. package/dist/public/{shadow-claw-channels-Ci2UPaaA.js → shadow-claw-channels-C0w0c1EF.js} +1 -1
  247. package/dist/public/{shadow-claw-chat-BxR6cBYQ.js → shadow-claw-chat-DIJ0A-QN.js} +1 -1
  248. package/dist/public/{shadow-claw-control-plane-C1A-CZ9H.js → shadow-claw-control-plane-DZoxUd-1.js} +2 -2
  249. package/dist/public/{shadow-claw-conversations-DcwG05-H.js → shadow-claw-conversations-DMyG_5zj.js} +1 -1
  250. package/dist/public/{shadow-claw-file-viewer-CDs1QGXk.js → shadow-claw-file-viewer-DYgZjZb9.js} +1 -1
  251. package/dist/public/{shadow-claw-files-B774Xz1d.js → shadow-claw-files-DIOUdKJr.js} +1 -1
  252. package/dist/public/{shadow-claw-git-CTIPP0vs.js → shadow-claw-git-if5S0QJr.js} +2 -2
  253. package/dist/public/{shadow-claw-integrations-CjtkA6l0.js → shadow-claw-integrations-BQt4hcWe.js} +1 -1
  254. package/dist/public/{shadow-claw-llm-DfmITHde.js → shadow-claw-llm-9uf1KFA0.js} +2 -2
  255. package/dist/public/{shadow-claw-mcp-remote-BPuV22So.js → shadow-claw-mcp-remote-COpNIzJd.js} +1 -1
  256. package/dist/public/{shadow-claw-networking-DEMMygy0.js → shadow-claw-networking-AOVRUn6B.js} +1 -1
  257. package/dist/public/{shadow-claw-notifications-B9Xhcj1P.js → shadow-claw-notifications-CKB-W1TA.js} +1 -1
  258. package/dist/public/{shadow-claw-page-header-CAXokjQy.js → shadow-claw-page-header-D4LmUigA.js} +1 -1
  259. package/dist/public/{shadow-claw-pages-BRQw8bTm.js → shadow-claw-pages-BpHRY4vH.js} +12 -3
  260. package/dist/public/{shadow-claw-settings-BGrDNyqh.js → shadow-claw-settings-CE-aUo_J.js} +3 -3
  261. package/dist/public/{shadow-claw-storage-DK3pf11w.js → shadow-claw-storage-CFKC-Y3V.js} +1 -1
  262. package/dist/public/{shadow-claw-task-server-CMp5Vjza.js → shadow-claw-task-server-B_ZjqK4B.js} +1 -1
  263. package/dist/public/{shadow-claw-tasks-BO8aXM2B.js → shadow-claw-tasks-CGsEv48K.js} +1 -1
  264. package/dist/public/{shadow-claw-terminal-BSeTuyDa.js → shadow-claw-terminal-DcaS7cPH.js} +1 -1
  265. package/dist/public/{shadow-claw-tools-Bj6DLZ-2.js → shadow-claw-tools-Cnu9hKy0.js} +1 -1
  266. package/dist/public/{shadow-claw-webvm-M7d5RH8H.js → shadow-claw-webvm-BB8SFvJ8.js} +1 -1
  267. package/dist/public/syncWebMcpRegistration-D2Zx4oA1.js +1 -0
  268. package/dist/public/theme-init.js +1 -1
  269. package/dist/public/{tools-nysPKnGT.js → tools-sOLCHTj8.js} +1 -1
  270. package/dist/public/{webmcp-Bo3KTgRb.js → webmcp-YFt6vM1_.js} +1 -1
  271. package/dist/server.js +188 -188
  272. package/package.json +1 -1
  273. package/src/cli/build/build.ts +18 -11
  274. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.test.ts +4 -1
  275. package/src/cli/prerender/dsd-shell/prerender-dsd-shell.ts +13 -1
  276. package/src/cli/prerender/pretty-paths/prerender-pretty-paths.ts +22 -0
  277. package/src/cli/prerender/utils/insert-before-closing-head.test.ts +34 -1
  278. package/src/cli/prerender/utils/insert-before-closing-head.ts +20 -6
  279. package/src/cli/site-config/apply.test.ts +90 -0
  280. package/src/cli/site-config/apply.ts +189 -22
  281. package/src/components/shadow-claw/shadow-claw.css +26 -0
  282. package/src/components/shadow-claw/shadow-claw.html +4 -0
  283. package/src/components/shadow-claw/utils/applyRoute.ts +3 -0
  284. package/src/components/shadow-claw/utils/bindEventListeners.test.ts +6 -0
  285. package/src/components/shadow-claw/utils/bindEventListeners.ts +30 -1
  286. package/src/components/shadow-claw/utils/getRoute.test.ts +52 -0
  287. package/src/components/shadow-claw/utils/getRoute.ts +18 -0
  288. package/src/components/shadow-claw/utils/navigateToRoute.test.ts +21 -0
  289. package/src/components/shadow-claw/utils/navigateToRoute.ts +10 -0
  290. package/src/components/shadow-claw/utils/sidebarVisibility.ts +12 -4
  291. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.test.ts +93 -0
  292. package/src/components/shadow-claw/utils/syncSlottedSidebarActiveLinks.ts +100 -0
  293. package/src/components/shadow-claw-pages/shadow-claw-pages.css +10 -1
  294. package/src/components/shadow-claw-pages/utils/removePreviewIframe.ts +3 -0
  295. package/src/core/orchestrator/utils/syncWebMcpRegistration.test.ts +52 -0
  296. package/src/core/orchestrator/utils/syncWebMcpRegistration.ts +28 -1
  297. package/src/server/middleware/static-files.test.ts +36 -0
  298. package/src/server/middleware/static-files.ts +14 -6
  299. package/src/storage/staticRouting.test.ts +36 -0
  300. package/src/storage/staticRouting.ts +31 -3
  301. package/src/subsystems/mcp/webmcp.test.ts +255 -0
  302. package/src/subsystems/mcp/webmcp.ts +253 -0
  303. package/dist/cli/chunk-00GAzVPl2.js +0 -1
  304. package/dist/cli/chunk-2hnFoNNC.js +0 -1
  305. package/dist/cli/chunk-BKQL4nzF2.js +0 -1
  306. package/dist/cli/chunk-BQ4K3fqj2.js +0 -1
  307. package/dist/cli/chunk-BVCGo6uf2.js +0 -1
  308. package/dist/cli/chunk-Bc9nRNyN.js +0 -11
  309. package/dist/cli/chunk-BcTH_-FL.js +0 -1
  310. package/dist/cli/chunk-BmD_sPRt.js +0 -1
  311. package/dist/cli/chunk-BsxNqqer.js +0 -1
  312. package/dist/cli/chunk-CCcF5T-c.js +0 -1
  313. package/dist/cli/chunk-CFhvwUeL.js +0 -91
  314. package/dist/cli/chunk-CwWtvULn.js +0 -1
  315. package/dist/cli/chunk-DID5VvOG.js +0 -17
  316. package/dist/cli/chunk-Drf-hXIR2.js +0 -1
  317. package/dist/cli/chunk-Dt5HNYVi.js +0 -1
  318. package/dist/cli/chunk-DwZQi9Ax.js +0 -1
  319. package/dist/cli/chunk-m9ZX7TyF2.js +0 -1
  320. package/dist/lib/app-routes-BAEMLu9g.js.map +0 -1
  321. package/dist/lib/shadow-claw-4x3LqlII.js.map +0 -1
  322. package/dist/lib/shadow-claw-pages-Bo8_z2S-.js.map +0 -1
  323. package/dist/lib/syncWebMcpRegistration-Bbph0XZl.js.map +0 -1
  324. package/dist/public/app-routes-BMQ4HFaM.js +0 -1
  325. package/dist/public/syncWebMcpRegistration-4bT0YUyZ.js +0 -1
@@ -51,6 +51,7 @@ ShadowClaw has been significantly deduplicated. Instead of a massive `AGENTS.md`
51
51
  | Control Plane & Client Bridge | [docs/subsystems/control-plane.md](docs/subsystems/control-plane.md) |
52
52
  | Stateless MCP Server | [docs/subsystems/mcp-server.md](docs/subsystems/mcp-server.md) |
53
53
  | File Backup Subsystem | [docs/subsystems/backup.md](docs/subsystems/backup.md) |
54
+ | Theming & Stylesheets | [docs/subsystems/theming.md](docs/subsystems/theming.md) |
54
55
  | OpenAPI & Discoverability | [docs/subsystems/openapi.md](docs/subsystems/openapi.md) |
55
56
  | Server A2A Protocol (HTTP) | [docs/decisions/server-a2a-http-binding.md](docs/decisions/server-a2a-http-binding.md) |
56
57
 
@@ -141,7 +142,7 @@ Markdown and HTML preview work should preserve the Settings-backed iframe host a
141
142
  ### Static Main Site, Routing & Page Suppression
142
143
 
143
144
  - **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.
145
+ - **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
146
  - **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
147
  - **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
148
  - **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.
@@ -174,9 +175,14 @@ Markdown and HTML preview work should preserve the Settings-backed iframe host a
174
175
 
175
176
  ### Declarative Configuration, Storage Namespacing & Dynamic Navigation
176
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
+ - **Declarative Configuration (`shadow-claw.config.json`):** Template repositories configure metadata, branding, tool defaults (`defaultToolsProfile`, `enabledTools`), custom element allowlists, navigation visibility, custom stylesheets (`theme.stylesheet`), 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()`.
179
+ - **Custom Stylesheet Injection & Theming:** Custom stylesheets declared under `theme.stylesheet` (e.g. `pages/main/theme.css`) are copied into `dist/public` and injected before `</head>` into `dist/public/index.html` and pre-rendered pretty path files. Tag injection uses `findClosingHeadIndex` (`src/cli/prerender/utils/insert-before-closing-head.ts`) to avoid falsely matching `</head>` literals inside inlined `<script>`, `<style>`, `<template>`, or comment blocks.
180
+ - **Layout Tokens & Shell Visibility Overrides:** Built-in web components reflect CSS Custom Properties. Sites can selectively hide default shell chrome by defining layout override variables in their custom stylesheet: `--shadow-claw-sidebar-footer-display: none;` (hides Settings footer), `--shadow-claw-header-main-toggle-display: none;` (hides header menu toggle), and `--shadow-claw-page-header-display: none;` (hides page header).
181
+ - **Light DOM vs. Shadow DOM Styling Boundaries:** Slotted elements (`[slot="sidebar"]`, `.sidebar-custom-sections`, `[slot="header-actions-logo"]`) live in the Light DOM and must be styled with standard CSS rules in `theme.stylesheet`. Set `.sidebar-custom-sections { max-height: calc(100dvh - 4rem); overflow-y: auto; }` and `html:has(shadow-claw), body:has(shadow-claw) { height: 100dvh; overflow: hidden; }` to ensure scrolling sidebars never produce dual window scrollbars.
182
+ - **Preview Iframe Theme Synchronization:** Sandboxed preview iframes automatically load `theme.stylesheet` via `getIframeThemeStylesheetLink()` and mirror computed CSS custom properties via `getIframeThemeStyleHtml()` (`src/ui/iframe-theme.ts`), preserving consistent colors, typography, and dark/light modes.
178
183
  - **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
184
  - **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.
185
+ - **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
186
 
181
187
  ### CLI, Headless Agent Participant & Dual-Root Build Pipeline
182
188
 
@@ -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, Theming & Slotted Navigation:** Publish documentation portals and knowledge hubs with Declarative Shadow DOM (DSD) SSR, root and sub-route pretty paths, custom stylesheets (`theme.stylesheet`), CSS custom property layout/shell tokens, customizable slotted navigation (`sidebar-nav`, `sidebar`, `sidebar-content`, `sidebar-footer`), and declarative sections. See [Theming Subsystem](docs/subsystems/theming.md).
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
  ---
@@ -286,7 +287,7 @@ Each channel creates isolated conversations with their own message history and w
286
287
  Comprehensive architectural specifications, subsystem deep-dives, step-by-step guides, and ADRs live in [`docs/`](docs/README.md):
287
288
 
288
289
  - **[Architecture](docs/README.md#architecture):** [System Overview](docs/architecture/overview.md) · [Orchestrator & State Machine](docs/architecture/orchestrator.md) · [Worker Protocol](docs/architecture/worker-protocol.md) · [Storage System](docs/architecture/storage.md) · [Context Management](docs/architecture/context-management.md) · [Streaming](docs/architecture/streaming.md)
289
- - **[Subsystems](docs/README.md#subsystems):** [Headless Agent & CLI](docs/subsystems/cli.md) · [Local Models & Hugging Face](docs/subsystems/local-models.md) · [Shell Emulator](docs/subsystems/shell.md) · [WebVM](docs/subsystems/vm.md) · [Git Integration](docs/subsystems/git.md) · [Channels](docs/subsystems/channels.md) · [Tools & Profiles](docs/subsystems/tools.md) · [Providers & Model Registry](docs/subsystems/providers.md) · [Notifications & Scheduling](docs/subsystems/notifications.md) · [Electron Desktop](docs/subsystems/electron.md) · [Reactive UI & Web Components](docs/subsystems/reactive-ui.md) · [Remote MCP](docs/subsystems/remote-mcp.md) · [Stateless MCP Server](docs/subsystems/mcp-server.md) · [WebMCP](docs/subsystems/webmcp.md) · [Crypto & Secrets](docs/subsystems/crypto.md) · [Control Plane](docs/subsystems/control-plane.md) · [Pages System](docs/subsystems/pages.md) · [Agent Skills](docs/subsystems/skills.md) · [Security Hardening](docs/subsystems/custom-element-security.md) · [File Backup](docs/subsystems/backup.md) · [Web Share Target](docs/subsystems/share-target.md) · [OpenAPI](docs/subsystems/openapi.md)
290
+ - **[Subsystems](docs/README.md#subsystems):** [Headless Agent & CLI](docs/subsystems/cli.md) · [Local Models & Hugging Face](docs/subsystems/local-models.md) · [Shell Emulator](docs/subsystems/shell.md) · [WebVM](docs/subsystems/vm.md) · [Git Integration](docs/subsystems/git.md) · [Channels](docs/subsystems/channels.md) · [Tools & Profiles](docs/subsystems/tools.md) · [Providers & Model Registry](docs/subsystems/providers.md) · [Notifications & Scheduling](docs/subsystems/notifications.md) · [Electron Desktop](docs/subsystems/electron.md) · [Reactive UI & Web Components](docs/subsystems/reactive-ui.md) · [Remote MCP](docs/subsystems/remote-mcp.md) · [Stateless MCP Server](docs/subsystems/mcp-server.md) · [WebMCP](docs/subsystems/webmcp.md) · [Crypto & Secrets](docs/subsystems/crypto.md) · [Control Plane](docs/subsystems/control-plane.md) · [Pages System](docs/subsystems/pages.md) · [Theming & Stylesheets](docs/subsystems/theming.md) · [Agent Skills](docs/subsystems/skills.md) · [Security Hardening](docs/subsystems/custom-element-security.md) · [File Backup](docs/subsystems/backup.md) · [Web Share Target](docs/subsystems/share-target.md) · [OpenAPI](docs/subsystems/openapi.md)
290
291
  - **[Guides](docs/README.md#guides):** [Adding a Provider](docs/guides/adding-a-provider.md) · [Adding a Tool](docs/guides/adding-a-tool.md) · [Adding a Shell Command](docs/guides/adding-a-shell-command.md) · [Adding a UI Page](docs/guides/adding-a-page.md) · [Adding a Channel](docs/guides/adding-a-channel.md) · [Protocol-Agnostic Integrations](docs/guides/protocol-agnostic-integrations.md) · [Service Accounts & Credentials](docs/guides/adding-service-accounts.md) · [Configuring Messaging Channels](docs/guides/configuring-messaging-channels.md) · [Server Development Configuration](docs/guides/server-development-configuration.md) · [Publishing to GitHub Pages](docs/guides/publishing-to-github-pages.md)
291
292
  - **[Decisions](docs/README.md#decisions):** ADRs on [Headless CLI Agent Participant](docs/decisions/headless-cli-agent-participant.md), [Bundled TypeScript Architecture](docs/decisions/bundled-typescript-architecture.md), [Native Web Components and Signals](docs/decisions/native-web-components-and-signals.md), [Worker-Isolated Agent Runtime](docs/decisions/worker-isolated-agent-runtime.md), [IndexedDB and OPFS Storage](docs/decisions/indexeddb-and-opfs-storage.md), and [Peer-to-Peer Protocol (A2A via AGUI)](docs/decisions/peer-protocol-a2a-agui.md)
292
293
  - **[Agent Conventions](AGENTS.md):** Architectural guardrails and conventions for AI coding agents
@@ -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}