sliccy 4.28.2 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +17 -16
  2. package/dist/node-server/bridge-security.d.ts +26 -0
  3. package/dist/node-server/bridge-security.js +41 -2
  4. package/dist/node-server/chrome-launch.d.ts +62 -1
  5. package/dist/node-server/chrome-launch.js +168 -2
  6. package/dist/node-server/electron-controller.d.ts +115 -5
  7. package/dist/node-server/electron-controller.js +167 -28
  8. package/dist/node-server/electron-main.js +37 -2
  9. package/dist/node-server/electron-runtime.d.ts +0 -2
  10. package/dist/node-server/electron-runtime.js +63 -68
  11. package/dist/node-server/fetch-proxy-headers.d.ts +25 -0
  12. package/dist/node-server/fetch-proxy-headers.js +36 -0
  13. package/dist/node-server/index.js +46 -11
  14. package/dist/node-server/routes/fetch-proxy.js +12 -12
  15. package/dist/ui/assets/account-store-lwRLg8qZ.js +38 -0
  16. package/dist/ui/assets/account-store-o8Dx0iny.js +99 -0
  17. package/dist/ui/assets/adobe-oauth-state-DJ7nvXJJ.js +1 -0
  18. package/dist/ui/assets/adobe-oauth-state-fjk_YXgL.js +1 -0
  19. package/dist/ui/assets/adobe-t0y7yh0d.js +2 -0
  20. package/dist/ui/assets/adobe-w6Q7iSKn.js +1 -0
  21. package/dist/ui/assets/{agent-message-to-chat-DQErB0Zj.js → agent-message-to-chat-yezUzugT.js} +1 -1
  22. package/dist/ui/assets/{anthropic-BaI_sJYa.js → anthropic-DwYAPtk5.js} +1 -1
  23. package/dist/ui/assets/{apps-BAXGsVHu.js → apps-D-6_Des4.js} +1 -1
  24. package/dist/ui/assets/{azure-openai-CKd81QhZ.js → azure-openai-BUQWXp4U.js} +1 -1
  25. package/dist/ui/assets/{azure-openai-DTsNmcxo.js → azure-openai-Cza179on.js} +1 -1
  26. package/dist/ui/assets/{azure-openai-responses-CMjHELHX.js → azure-openai-responses-Bnxym5u-.js} +1 -1
  27. package/dist/ui/assets/backend-local-mrUgrni5.js +9 -0
  28. package/dist/ui/assets/{bedrock-camp-DS1dgU6g.js → bedrock-camp-C1lmRgcD.js} +2 -2
  29. package/dist/ui/assets/bsh-watchdog-aV3rA0w_.js +60 -0
  30. package/dist/ui/assets/cdp-bridge-CUqQUcaF.js +1 -0
  31. package/dist/ui/assets/{cdp-D4JkCTey.js → cdp-z9uzg44m.js} +5 -5
  32. package/dist/ui/assets/composer-speech-BJF-32Qm.js +1 -0
  33. package/dist/ui/assets/{connect-surface-CyQMJFj3.js → connect-surface-v46dKJYB.js} +1 -1
  34. package/dist/ui/assets/dip-Iosy_HJh.js +1 -0
  35. package/dist/ui/assets/{dist-CVvNIY9j.js → dist-BHeXHQU_.js} +1 -1
  36. package/dist/ui/assets/{dist-Ciobg3J4.js → dist-Fdgn9mju.js} +2 -2
  37. package/dist/ui/assets/ensure-speech-assets-CILvdvdL.js +1 -0
  38. package/dist/ui/assets/{es-DjQZltrp.js → es-Z-wNZ0C3.js} +4 -4
  39. package/dist/ui/assets/esp8266-CL1TORn3.js +1 -0
  40. package/dist/ui/assets/{esptool-operations-SV6FPHJC.js → esptool-operations-CYdcX9Mk.js} +2 -2
  41. package/dist/ui/assets/extension-bridge-transport-DYOF2OYC.js +1 -0
  42. package/dist/ui/assets/fetch-body-D2PwksUW.js +1 -0
  43. package/dist/ui/assets/fetch-body-DDu_AU5I.js +1 -0
  44. package/dist/ui/assets/{fs-Bv2avR3Y.js → fs-CruOlxoS.js} +2 -2
  45. package/dist/ui/assets/{fs-B-yB8nmS.js → fs-crZm8xnS.js} +1 -1
  46. package/dist/ui/assets/github-CQtjJB1r.js +2 -0
  47. package/dist/ui/assets/github-FUziE_96.js +1 -0
  48. package/dist/ui/assets/{github-copilot--B7IUER8.js → github-copilot-DOj1kxaL.js} +1 -1
  49. package/dist/ui/assets/{github-copilot-CFeOxiAY.js → github-copilot-yTNPvKEy.js} +1 -1
  50. package/dist/ui/assets/{google-yB8wbiw4.js → google-CSaY-DQE.js} +1 -1
  51. package/dist/ui/assets/{google-shared-CeGHiQ17.js → google-shared-RiqqHuiz.js} +1 -1
  52. package/dist/ui/assets/{google-vertex-Dbruz2uo.js → google-vertex-CBHKHWKe.js} +1 -1
  53. package/dist/ui/assets/hear-COc8-jz9.js +1 -0
  54. package/dist/ui/assets/hear-Ca-dJ63I.js +1 -0
  55. package/dist/ui/assets/hid-picker-DUJBI46p.js +1 -0
  56. package/dist/ui/assets/{intercepted-oauth-tLpKagkf.js → intercepted-oauth-E9BfBX02.js} +1 -1
  57. package/dist/ui/assets/js-realm-worker-BIJifCVd.js +47 -0
  58. package/dist/ui/assets/{json-parse-BIGBjpLL.js → json-parse-CWht3lea.js} +1 -1
  59. package/dist/ui/assets/kernel-worker-CFGgP28u.js +10060 -0
  60. package/dist/ui/assets/{kokoro-IuvgZkZk.js → kokoro-B5jJ2WUJ.js} +2 -2
  61. package/dist/ui/assets/{kokoro-pZaPWf_-.js → kokoro-BdpwC7DT.js} +2 -2
  62. package/dist/ui/assets/kokoro-engine-io4cnyoV.js +1 -0
  63. package/dist/ui/assets/{lick-ws-bridge-CbVQgXpI.js → lick-ws-bridge-s5Y2i_Ua.js} +1 -1
  64. package/dist/ui/assets/{local-llm-FEU-X2iM.js → local-llm-CKo8wJkz.js} +1 -1
  65. package/dist/ui/assets/magick-wasm-oRIuPV7a.js +43 -0
  66. package/dist/ui/assets/main-CY_go8Ex.js +24 -0
  67. package/dist/ui/assets/{main-cherry-B1mI8ArD.js → main-cherry-BRV9Q0tu.js} +1 -1
  68. package/dist/ui/assets/{mistral-CJVvXrOL.js → mistral-BTNTllXI.js} +1 -1
  69. package/dist/ui/assets/mount-DlwSk_tU.js +1 -0
  70. package/dist/ui/assets/mount-bridge-client-DDnAgZEL.js +2 -0
  71. package/dist/ui/assets/mount-id-_7_PCY9F.js +1 -0
  72. package/dist/ui/assets/mount-pc-SiJqJ.js +2 -0
  73. package/dist/ui/assets/mount-picker-popup-Hrvzr69c.js +1 -0
  74. package/dist/ui/assets/{mount-table-store-CQJEV6Ij.js → mount-table-store-ggb440m4.js} +1 -1
  75. package/dist/ui/assets/new-session-CfjGoE_n.js +2 -0
  76. package/dist/ui/assets/oauth-bootstrap-Le_gIjYT.js +2 -0
  77. package/dist/ui/assets/oauth-service-D4iuqFv6.js +1 -0
  78. package/dist/ui/assets/oauth-service-YGl8VFS-.js +1 -0
  79. package/dist/ui/assets/{openai-codex-BpHxok9y.js → openai-codex-CU65yKca.js} +1 -1
  80. package/dist/ui/assets/{openai-codex-DIIqvcoZ.js → openai-codex-Dx5taSaF.js} +1 -1
  81. package/dist/ui/assets/{openai-codex-responses-CLrAtex4.js → openai-codex-responses-7JN1dUxK.js} +1 -1
  82. package/dist/ui/assets/{openai-completions-CyC3I8Ls.js → openai-completions-YNL_qr9N.js} +1 -1
  83. package/dist/ui/assets/{openai-responses-D3BggRn6.js → openai-responses-nczmKECx.js} +1 -1
  84. package/dist/ui/assets/{openai-responses-shared-GJLWYx-P.js → openai-responses-shared-9YVaeX5D.js} +1 -1
  85. package/dist/ui/assets/panel-responder-BKgfV-nl.js +1 -0
  86. package/dist/ui/assets/{panel-rpc-Ck8CVyMh.js → panel-rpc-D0J5pskz.js} +1 -1
  87. package/dist/ui/assets/panel-rpc-handlers-BFGsncpn.js +2 -0
  88. package/dist/ui/assets/{picker-approval-tzbkMw-e.js → picker-approval-Dc390nC7.js} +1 -1
  89. package/dist/ui/assets/picker-popup-CpulHQsi.js +1 -0
  90. package/dist/ui/assets/preview-vfs-responder-CSDC7Oy2.js +1 -0
  91. package/dist/ui/assets/provider-Lb9gUmQt.js +2 -0
  92. package/dist/ui/assets/provider-store-access-COfmBqcb.js +1 -0
  93. package/dist/ui/assets/provider-store-access-CjPYCH1J.js +1 -0
  94. package/dist/ui/assets/{provider-UGTRh0sb.js → provider-vMORCKxQ.js} +1 -1
  95. package/dist/ui/assets/{providers-C-thqKYx.js → providers-CkeJGhLV.js} +1 -1
  96. package/dist/ui/assets/proxied-fetch-CKDBmEMl.js +2 -0
  97. package/dist/ui/assets/proxied-fetch-CM0jk_Mr.js +1 -0
  98. package/dist/ui/assets/py-realm-worker-hOFi8vjM.js +242 -0
  99. package/dist/ui/assets/{pyodide-BvA4c-59.js → pyodide-CqQhZelL.js} +2 -2
  100. package/dist/ui/assets/{quick-llm-pCxnbK4A.js → quick-llm-CksvHcNV.js} +1 -1
  101. package/dist/ui/assets/{remote-cache-BffIqHgi.js → remote-cache-BL6NRenp.js} +1 -1
  102. package/dist/ui/assets/remote-terminal-view-Qv9yhXQm.js +5 -0
  103. package/dist/ui/assets/remote-vfs-client-Z2qM01yP.js +1 -0
  104. package/dist/ui/assets/secret-env-DncfFSea.js +1 -0
  105. package/dist/ui/assets/secret-topology-bwXIzzAK.js +1 -0
  106. package/dist/ui/assets/secrets-bridge-client-BSipj-5f.js +2 -0
  107. package/dist/ui/assets/serial-picker-B6s4NeaB.js +1 -0
  108. package/dist/ui/assets/session-freezer-1tkfzApv.js +1 -0
  109. package/dist/ui/assets/shared-Bn9ltvMZ.js +1 -0
  110. package/dist/ui/assets/speak-Bri-_DZL.js +1 -0
  111. package/dist/ui/assets/speak-D9WnbzxD.js +2 -0
  112. package/dist/ui/assets/speech-assets-bridge-B8NqCAE8.js +1 -0
  113. package/dist/ui/assets/speech-assets-bridge-BUDIvdid.js +1 -0
  114. package/dist/ui/assets/{sprinkle-bridge-DrAUCEC_.js → sprinkle-bridge-Du2dCM8G.js} +1 -1
  115. package/dist/ui/assets/{sprinkle-manager-C3_2AgeR.js → sprinkle-manager-BhhaIwAz.js} +1 -1
  116. package/dist/ui/assets/{sql-wasm-Cu5Uk_6k.js → sql-wasm-BWbkWL23.js} +1 -1
  117. package/dist/ui/assets/{store-DSwnBJEJ.js → store-iS53cbT5.js} +1 -1
  118. package/dist/ui/assets/sudo-DH2Ru5S3.js +5 -0
  119. package/dist/ui/assets/tool-ui-DfXu6quJ.js +1 -0
  120. package/dist/ui/assets/tool-ui-t6ocn6AG.js +1 -0
  121. package/dist/ui/assets/transformers-env-2Uj9Fgd2.js +1 -0
  122. package/dist/ui/assets/transformers-env-CgaV7qpU.js +1 -0
  123. package/dist/ui/assets/transformers.web-BxHOGVSB.js +45 -0
  124. package/dist/ui/assets/transformers.web-CuUo4MLm.js +39 -0
  125. package/dist/ui/assets/{tray-leave-runtime-Dk3OSbMO.js → tray-leave-runtime-ND08HLeb.js} +1 -1
  126. package/dist/ui/assets/{upgrade-detection-Dcc69AtK.js → upgrade-detection-Y3TdGYus.js} +1 -1
  127. package/dist/ui/assets/usb-picker-D_K0weAY.js +1 -0
  128. package/dist/ui/assets/{voice-reply-UcYXGV0I.js → voice-reply-DfKSbOma.js} +1 -1
  129. package/dist/ui/assets/wc-attach-BvytbCpS.js +13 -0
  130. package/dist/ui/assets/{wc-detached-CJFrvQ5w.js → wc-detached-Bw0mLsiP.js} +1 -1
  131. package/dist/ui/assets/wc-extension-DS-jtOJw.js +2 -0
  132. package/dist/ui/assets/wc-live-B3kXelNl.js +253 -0
  133. package/dist/ui/assets/wc-nav-tMI3vvSL.js +2 -0
  134. package/dist/ui/assets/wc-onboarding-Dm8BUVRJ.js +2 -0
  135. package/dist/ui/assets/wc-permissions-mVh0SOdZ.js +3 -0
  136. package/dist/ui/assets/wc-permissions-providers-BufEXbhX.js +2 -0
  137. package/dist/ui/assets/wc-permissions-registry-CR1rTd2H.js +1 -0
  138. package/dist/ui/assets/wc-permissions-registry-Dx-BRiKK.js +1 -0
  139. package/dist/ui/assets/wc-placeholder-DEo1-1V5.js +4 -0
  140. package/dist/ui/assets/wc-settings-D3QCZnur.js +24 -0
  141. package/dist/ui/assets/{wc-shell-BGaEWRGh.js → wc-shell-DgOdmKyR.js} +603 -101
  142. package/dist/ui/assets/wc-sprinkles-D5si03_4.js +2 -0
  143. package/dist/ui/assets/wc-tray-lTqtwMFb.js +5 -0
  144. package/dist/ui/assets/whisper-engine-Emfsg6Pq.js +1 -0
  145. package/dist/ui/assets/whisper-session-Dt-B3KmT.js +2 -0
  146. package/dist/ui/assets/worker-D1KsWRGg.js +1 -1
  147. package/dist/ui/assets/writable-vfs-client-BKZGifKZ.js +1 -0
  148. package/dist/ui/assets/{xai-grok-BX1SWx3y.js → xai-grok-D4a_2yZf.js} +1 -1
  149. package/dist/ui/assets/{xai-grok-CggP425A.js → xai-grok-Dpq_7ZV8.js} +1 -1
  150. package/dist/ui/electron-overlay-entry.css +37 -0
  151. package/dist/ui/electron-overlay-entry.js +5853 -222
  152. package/dist/ui/index.html +7 -3
  153. package/dist/ui/llm-proxy-sw.js +1 -1
  154. package/dist/ui/packages/webapp/index.html +7 -3
  155. package/dist/ui/preview-sw.js +1 -1
  156. package/package.json +6 -1
  157. package/dist/ui/assets/__vite-browser-external-CM3Eme-n.js +0 -1
  158. package/dist/ui/assets/account-store-Dha2nLml.js +0 -38
  159. package/dist/ui/assets/account-store-DmjUSua_.js +0 -99
  160. package/dist/ui/assets/adobe-CpNl5eLk.js +0 -2
  161. package/dist/ui/assets/adobe-CtI7bDCt.js +0 -1
  162. package/dist/ui/assets/backend-local-CMfz45hs.js +0 -9
  163. package/dist/ui/assets/biome_wasm-DEjrJMqV.js +0 -1
  164. package/dist/ui/assets/bsh-watchdog-B27e-Og-.js +0 -74
  165. package/dist/ui/assets/cdn-url-builder-Cq7LLgru.js +0 -1
  166. package/dist/ui/assets/chunk-CMxvf4Kt.js +0 -1
  167. package/dist/ui/assets/common-ewBM5he1.js +0 -1
  168. package/dist/ui/assets/composer-speech-DYshRh0w.js +0 -1
  169. package/dist/ui/assets/dip-De30SVSa.js +0 -1
  170. package/dist/ui/assets/dist-DElqKLgF.js +0 -43
  171. package/dist/ui/assets/esp32-BTVUAltJ.js +0 -1
  172. package/dist/ui/assets/esp32c2-Cvhq9547.js +0 -1
  173. package/dist/ui/assets/esp32c3-D9lOBWYZ.js +0 -1
  174. package/dist/ui/assets/esp32c5-D2poFXyG.js +0 -1
  175. package/dist/ui/assets/esp32c6-Ct3LxBMw.js +0 -1
  176. package/dist/ui/assets/esp32c61-BsudQf3e.js +0 -1
  177. package/dist/ui/assets/esp32h2-CPO25efF.js +0 -1
  178. package/dist/ui/assets/esp32p4-GHiT8voO.js +0 -1
  179. package/dist/ui/assets/esp32s2-DrH4e7iJ.js +0 -1
  180. package/dist/ui/assets/esp32s3-BHbeScNz.js +0 -1
  181. package/dist/ui/assets/esp8266-DNz2CP4r.js +0 -1
  182. package/dist/ui/assets/github-DRvbws57.js +0 -2
  183. package/dist/ui/assets/github-DcwUCUyU.js +0 -1
  184. package/dist/ui/assets/hear-20YdcW5b.js +0 -1
  185. package/dist/ui/assets/hear-BOsXTls8.js +0 -1
  186. package/dist/ui/assets/js-realm-worker-BWFis6jC.js +0 -5
  187. package/dist/ui/assets/kernel-worker-DuaByjq4.js +0 -9820
  188. package/dist/ui/assets/kokoro-engine-CHIq9iyX.js +0 -2
  189. package/dist/ui/assets/kokoro-engine-CjyxHaAM.js +0 -1
  190. package/dist/ui/assets/magick-wasm-BvNy9LFP.js +0 -1
  191. package/dist/ui/assets/main-D-3iO2Pb.js +0 -24
  192. package/dist/ui/assets/mount-B60ugIMY.js +0 -1
  193. package/dist/ui/assets/mount-TPowGzXN.js +0 -2
  194. package/dist/ui/assets/mount-id-DtHfwjbZ.js +0 -1
  195. package/dist/ui/assets/mount-picker-popup-BORxgnGu.js +0 -1
  196. package/dist/ui/assets/new-session-BjrjaQDu.js +0 -2
  197. package/dist/ui/assets/nodejs-BQ9Oov1A.js +0 -1
  198. package/dist/ui/assets/oauth-bootstrap-D15vXH8k.js +0 -2
  199. package/dist/ui/assets/oauth-service-CoJ-pYVD.js +0 -1
  200. package/dist/ui/assets/oauth-service-D49nt7eJ.js +0 -1
  201. package/dist/ui/assets/panel-rpc-handlers-Ca3yEyOL.js +0 -2
  202. package/dist/ui/assets/preview-vfs-responder-dyQBWIl5.js +0 -1
  203. package/dist/ui/assets/provider-CT4MGofi.js +0 -2
  204. package/dist/ui/assets/provider-store-access-BHHITTJF.js +0 -1
  205. package/dist/ui/assets/provider-store-access-BSS9maA7.js +0 -1
  206. package/dist/ui/assets/proxied-fetch-BBO8HwcV.js +0 -1
  207. package/dist/ui/assets/py-realm-worker-BnG_DxBd.js +0 -242
  208. package/dist/ui/assets/remote-terminal-view-CSqiig2G.js +0 -6
  209. package/dist/ui/assets/remote-vfs-client-BwJhhtIV.js +0 -1
  210. package/dist/ui/assets/secret-env-DcfTe28K.js +0 -1
  211. package/dist/ui/assets/session-freezer-NFd-CALu.js +0 -1
  212. package/dist/ui/assets/setup-sudo-KPDfIsQ7.js +0 -1
  213. package/dist/ui/assets/shared-B7TdM-Ik.js +0 -1
  214. package/dist/ui/assets/speak-D511iTBd.js +0 -1
  215. package/dist/ui/assets/speak-EKtIqp6j.js +0 -1
  216. package/dist/ui/assets/sudo-B4yfntyh.js +0 -4
  217. package/dist/ui/assets/tool-ui-N76-EdVc.js +0 -1
  218. package/dist/ui/assets/tool-ui-YOPqzMmL.js +0 -1
  219. package/dist/ui/assets/transformers-env-6vj5CcH9.js +0 -1
  220. package/dist/ui/assets/transformers-env-O5Vtz_xj.js +0 -1
  221. package/dist/ui/assets/transformers.web-C9_H_wuQ.js +0 -37
  222. package/dist/ui/assets/transformers.web-DJfCkvxA.js +0 -43
  223. package/dist/ui/assets/typescript-qBO0Z4wm.js +0 -448
  224. package/dist/ui/assets/wc-attach-B62W7N_T.js +0 -13
  225. package/dist/ui/assets/wc-extension-C1CIBnT2.js +0 -2
  226. package/dist/ui/assets/wc-live-B3Dxlxlf.js +0 -253
  227. package/dist/ui/assets/wc-nav-DWMYNnDA.js +0 -2
  228. package/dist/ui/assets/wc-onboarding-DpKk5u_V.js +0 -2
  229. package/dist/ui/assets/wc-placeholder-CGPP_IEm.js +0 -4
  230. package/dist/ui/assets/wc-settings-DjqUSzpO.js +0 -24
  231. package/dist/ui/assets/wc-sprinkles-B5_aCIM5.js +0 -2
  232. package/dist/ui/assets/wc-tray-kVPhrwG1.js +0 -5
  233. package/dist/ui/assets/web-BMWiUYJ-.js +0 -1
  234. package/dist/ui/assets/whisper-session-D89gZWHf.js +0 -2
  235. package/dist/ui/assets/writable-vfs-client-DMYsajEE.js +0 -1
@@ -10,10 +10,10 @@ import { homedir } from 'os';
10
10
  import { basename, dirname, join, resolve } from 'path';
11
11
  import { fileURLToPath } from 'url';
12
12
  import { WebSocket, WebSocketServer } from 'ws';
13
- import { BRIDGE_TOKEN_HEADER, buildCorsHeaders, buildPnaPreflightHeaders, isLoopbackBridgeOrigin, mintBridgeToken, selectBridgeSubprotocol, validateBridgeToken, validateBridgeUpgrade, } from './bridge-security.js';
13
+ import { BRIDGE_TOKEN_HEADER, buildCorsHeaders, buildPnaPreflightHeaders, isLoopbackBridgeOrigin, resolveServerBridgeToken, selectBridgeSubprotocol, shouldMountThinBridgeCors, validateBridgeToken, validateBridgeUpgrade, } from './bridge-security.js';
14
14
  import { applyCdpUnmask } from './cdp-proxy/cdp-unmask.js';
15
15
  import { createCdpSessionUrlTracker } from './cdp-proxy/session-url-tracker.js';
16
- import { buildChromeLaunchArgs, clearStaleDevToolsActivePort, ensureQaProfileScaffold, findChromeExecutable, legacyChromeCandidates, migrateLegacyDefaultChromeProfile, planChromeSpawn, resolveChromeLaunchProfile, waitForCdpPort, } from './chrome-launch.js';
16
+ import { buildChromeLaunchArgs, clearChromeRestoreState, clearChromeSessionRestore, clearStaleDevToolsActivePort, ensureQaProfileScaffold, findChromeExecutable, legacyChromeCandidates, migrateLegacyDefaultChromeProfile, planChromeSpawn, resolveChromeLaunchProfile, terminateExistingProfileChrome, waitForCdpPort, } from './chrome-launch.js';
17
17
  import { CliLogDedup } from './cli-log-dedup.js';
18
18
  import { parseCloudArgs } from './cloud/dispatch.js';
19
19
  import { runKill } from './cloud/kill.js';
@@ -23,7 +23,7 @@ import { FileRegistry } from './cloud/registry-file.js';
23
23
  import { runResume } from './cloud/resume.js';
24
24
  import { runStart } from './cloud/start.js';
25
25
  import { registerCloudStatusEndpoint } from './cloud-status.js';
26
- import { ElectronAppAlreadyRunningError, ElectronOverlayInjector, launchElectronApp, } from './electron-controller.js';
26
+ import { ElectronAppAlreadyRunningError, ElectronOverlayInjector, launchElectronApp, resolveOverlayThinBridge, } from './electron-controller.js';
27
27
  import { getElectronAppPorts } from './electron-runtime.js';
28
28
  import { FileLogger } from './file-logger.js';
29
29
  import { registerHostedBootstrapEndpoint } from './hosted-bootstrap.js';
@@ -308,7 +308,7 @@ function createServerState() {
308
308
  overlayInjector: null,
309
309
  shuttingDown: false,
310
310
  discoveredTrayJoinUrl: RUNTIME_FLAGS.joinUrl ?? null,
311
- bridgeToken: THIN_BRIDGE_MODE ? mintBridgeToken() : null,
311
+ bridgeToken: resolveServerBridgeToken(process.env, { thinBridgeMode: THIN_BRIDGE_MODE }),
312
312
  cdpUrl: null,
313
313
  chromeWs: null,
314
314
  activeClientWs: null,
@@ -578,6 +578,19 @@ async function launchChromeTarget(state) {
578
578
  // prior crash/SIGKILL would let our active-port poller win the race with the
579
579
  // wrong port. Clear it before spawn.
580
580
  await clearStaleDevToolsActivePort(chromeProfile.userDataDir);
581
+ // A Chrome from a prior run can still hold this profile: Ctrl-C doesn't reap
582
+ // the LaunchServices-owned process, so the profile stays locked and a second
583
+ // `open -n` either exits non-zero ("before reporting CDP port") or just adds
584
+ // a tab to the lingering instance. Terminate it first so this launch is clean.
585
+ await terminateExistingProfileChrome(chromeProfile.userDataDir);
586
+ // Drop the session-restore snapshot so Chrome opens ONLY the command-line
587
+ // tab. Otherwise it reopens the previous window's tabs too — a duplicate
588
+ // webapp tab that fights the fresh one over the single-client CDP proxy slot.
589
+ await clearChromeSessionRestore(chromeProfile.userDataDir);
590
+ // Belt-and-suspenders for genuine crashes: reset the `exit_type: "Crashed"`
591
+ // flag so Chrome doesn't show the crash-restore bubble. (The tab-restore
592
+ // itself is handled by clearChromeSessionRestore above, not this.)
593
+ await clearChromeRestoreState(chromeProfile.userDataDir);
581
594
  // On macOS, route through `/usr/bin/open` so LaunchServices owns the new Chrome
582
595
  // process — otherwise the launching terminal stays in Chrome's TCC responsibility
583
596
  // chain and silently breaks getUserMedia() camera/mic grants.
@@ -834,12 +847,22 @@ async function waitForServerCdpPort(state, timeoutMs = 30_000) {
834
847
  }
835
848
  return state.cdpPort;
836
849
  }
850
+ /**
851
+ * WebSocket close code sent to a CDP client that is evicted because a newer
852
+ * client took the single proxy slot. The page-side `CDPClient` recognises it
853
+ * and stops auto-reconnecting (otherwise two webapp tabs on one instance evict
854
+ * each other forever). Application-range code; MUST stay in sync with
855
+ * `CDP_SUPERSEDED_CLOSE_CODE` in `packages/webapp/src/cdp/cdp-client.ts`.
856
+ */
857
+ const CDP_SUPERSEDED_CLOSE_CODE = 4001;
837
858
  async function handleCdpClient(state, clientWs, ctx, cdpPort) {
838
859
  try {
839
- // Only one client active at a time — close the previous one.
860
+ // Only one client active at a time — close the previous one. Use the
861
+ // "superseded" close code so the evicted page knows it lost the slot to a
862
+ // sibling tab and must not re-dial (see CDP_SUPERSEDED_CLOSE_CODE).
840
863
  if (state.activeClientWs && state.activeClientWs.readyState === WebSocket.OPEN) {
841
- console.log('[cdp-proxy] Closing previous client connection');
842
- state.activeClientWs.close();
864
+ console.log('[cdp-proxy] Closing previous client connection (superseded by new client)');
865
+ state.activeClientWs.close(CDP_SUPERSEDED_CLOSE_CODE, 'superseded-by-new-cdp-client');
843
866
  }
844
867
  state.activeClientWs = clientWs;
845
868
  console.log('[cdp-proxy] New client connected');
@@ -961,14 +984,24 @@ async function preconnectCdp(state, ctx, app, servePort) {
961
984
  }
962
985
  async function startOverlayInjector(state, cdpPort, servePort) {
963
986
  try {
987
+ const thinBridge = resolveOverlayThinBridge(process.env, state.bridgeToken, servePort);
988
+ if (!thinBridge) {
989
+ // Thin-bridge is the only overlay path — there is no bundled-UI
990
+ // fallback. Without a per-process bridge token the hosted overlay
991
+ // cannot dial back to /cdp, so fail fast instead of silently
992
+ // serving nothing.
993
+ throw new Error('Cannot start Electron overlay injector: no bridge token resolved. ' +
994
+ 'The thin-bridge overlay requires a per-process bridge token (set SLICC_BRIDGE_TOKEN).');
995
+ }
964
996
  state.overlayInjector = await ElectronOverlayInjector.create({
965
997
  cdpPort,
966
998
  servePort,
967
999
  dev: DEV_MODE,
968
1000
  projectRoot: PROJECT_ROOT,
1001
+ thinBridge,
969
1002
  });
970
1003
  await state.overlayInjector.start();
971
- console.log('[electron-float] Overlay injector is watching Electron page targets');
1004
+ console.log(`[electron-float] Overlay injector is watching Electron page targets (thin bridge → ${thinBridge.hostedLeaderOrigin})`);
972
1005
  }
973
1006
  catch (error) {
974
1007
  const message = error instanceof Error ? error.message : String(error);
@@ -1145,7 +1178,7 @@ async function main() {
1145
1178
  app.use(requestLogger);
1146
1179
  // Append SLICC's standard RFC 8288 Link header set on every /api/* response.
1147
1180
  app.use(sliccLinksMiddleware());
1148
- if (THIN_BRIDGE_MODE) {
1181
+ if (shouldMountThinBridgeCors(THIN_BRIDGE_MODE, state.bridgeToken)) {
1149
1182
  app.use(createThinBridgeCorsMiddleware(state.bridgeToken));
1150
1183
  }
1151
1184
  // ---------------------------------------------------------------------------
@@ -1167,8 +1200,10 @@ async function main() {
1167
1200
  app.get('/api/runtime-config', (_req, res) => {
1168
1201
  res.json({
1169
1202
  trayWorkerBaseUrl:
1170
- // Hosted mode source: env var injected at sandbox-create time.
1171
- (RUNTIME_FLAGS.hosted ? process.env['SLICC_TRAY_WORKER_BASE_URL']?.trim() : null) ??
1203
+ // Explicit override: env var injected at sandbox-create time (hosted
1204
+ // mode) or by the dev harness to decouple the tray-worker relay from
1205
+ // the UI origin (e.g. wrangler on :8787 + staging relay for OAuth).
1206
+ (process.env['SLICC_TRAY_WORKER_BASE_URL']?.trim() || null) ??
1172
1207
  RUNTIME_FLAGS.leadWorkerBaseUrl ??
1173
1208
  (process.env['WORKER_BASE_URL']?.trim() || null) ??
1174
1209
  (DEV_MODE
@@ -1,6 +1,6 @@
1
1
  import { Readable, Transform } from 'node:stream';
2
2
  import { StringDecoder } from 'node:string_decoder';
3
- import { FETCH_PROXY_SKIP_HEADERS } from '../fetch-proxy-headers.js';
3
+ import { FETCH_PROXY_SKIP_HEADERS, FETCH_PROXY_SKIP_RESPONSE_HEADERS, FETCH_PROXY_SKIP_RESPONSE_PREFIXES, } from '../fetch-proxy-headers.js';
4
4
  /** Pick the first value of a possibly-multi-valued request header. */
5
5
  function firstHeaderValue(value) {
6
6
  if (value === undefined)
@@ -137,8 +137,11 @@ function unmaskRequestBody(secretProxy, headers, rawBody, targetHostname) {
137
137
  /**
138
138
  * Forward the upstream status + response headers, stripping hop-by-hop and
139
139
  * www-authenticate (so the browser shows no native Basic Auth dialog) and
140
- * relaying Set-Cookie out-of-band as X-Proxy-Set-Cookie. All header values are
141
- * secret-scrubbed.
140
+ * relaying Set-Cookie out-of-band as X-Proxy-Set-Cookie. Upstream
141
+ * `access-control-*` headers are also dropped so the bridge's CORS
142
+ * middleware remains the sole authority on the browser→bridge hop —
143
+ * see `FETCH_PROXY_SKIP_RESPONSE_HEADERS` / `..._PREFIXES`. All header
144
+ * values are secret-scrubbed.
142
145
  */
143
146
  function forwardUpstreamHeaders(res, upstream, secretProxy) {
144
147
  res.status(upstream.status);
@@ -146,15 +149,12 @@ function forwardUpstreamHeaders(res, upstream, secretProxy) {
146
149
  const setCookieValues = upstream.headers.getSetCookie();
147
150
  upstream.headers.forEach((v, k) => {
148
151
  const lower = k.toLowerCase();
149
- if (lower !== 'transfer-encoding' &&
150
- lower !== 'content-encoding' &&
151
- lower !== 'content-length' &&
152
- lower !== 'www-authenticate' &&
153
- lower !== 'set-cookie' &&
154
- !lower.startsWith('x-proxy-')) {
155
- // Headers are small — one-shot scrub, no per-chunk semantics.
156
- res.setHeader(k, secretProxy.scrubResponse(v));
157
- }
152
+ if (FETCH_PROXY_SKIP_RESPONSE_HEADERS.has(lower))
153
+ return;
154
+ if (FETCH_PROXY_SKIP_RESPONSE_PREFIXES.some((p) => lower.startsWith(p)))
155
+ return;
156
+ // Headers are small — one-shot scrub, no per-chunk semantics.
157
+ res.setHeader(k, secretProxy.scrubResponse(v));
158
158
  });
159
159
  if (setCookieValues.length > 0) {
160
160
  res.setHeader('X-Proxy-Set-Cookie', secretProxy.scrubResponse(JSON.stringify(setCookieValues)));
@@ -0,0 +1,38 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-Cza179on.js","assets/dist-BmWy99kl.js","assets/preload-helper-zJ_50EbN.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/chunk-aKtaBQYM.js","assets/__vite-browser-external-C7iut881.js","assets/transform-messages-DzB_lMo-.js","assets/openai-Cn5LRPCm.js","assets/main-CY_go8Ex.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/clipboard-DgFtRQbq.js","assets/bedrock-camp-9-QEmC9Z.js","assets/local-llm-CKo8wJkz.js","assets/openai-completions-DLI0t_lj.js","assets/github-copilot-headers-DZtWWv8W.js","assets/openai-prompt-cache-DXo9f3w5.js","assets/headers-DO1UzNKu.js","assets/sanitize-unicode-DmIE6hZJ.js","assets/adobe-t0y7yh0d.js","assets/adobe-oauth-state-DJ7nvXJJ.js","assets/oauth-service-YGl8VFS-.js","assets/panel-rpc-DqT2FG7c.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/llm-session-id-DVmZ9C2t.js","assets/github-copilot-yTNPvKEy.js","assets/github-CQtjJB1r.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-Dx5taSaF.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-D4a_2yZf.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,t}from"./chunk-aKtaBQYM.js";import"./dist-BmWy99kl.js";import{t as n}from"./preload-helper-zJ_50EbN.js";import{a as r,o as i,s as a}from"./event-stream-BJI_nGaK.js";import"./context-compaction-CFWyOzX1.js";import{t as o}from"./logger-DDBAeTLF.js";import{a as s,t as c}from"./proxied-fetch-CKDBmEMl.js";import{t as l}from"./secret-topology-bwXIzzAK.js";import{t as u}from"./secrets-bridge-client-BSipj-5f.js";import"./tool-ui-DfXu6quJ.js";import{n as d,t as f}from"./src-DlEHAkLd.js";import{n as p,t as m}from"./panel-rpc-DqT2FG7c.js";import{r as h,t as g}from"./bedrock-camp-9-QEmC9Z.js";var _=Symbol.for(`yaml.alias`),v=Symbol.for(`yaml.document`),y=Symbol.for(`yaml.map`),b=Symbol.for(`yaml.pair`),x=Symbol.for(`yaml.scalar`),S=Symbol.for(`yaml.seq`),C=Symbol.for(`yaml.node.type`),w=e=>!!e&&typeof e==`object`&&e[C]===_,T=e=>!!e&&typeof e==`object`&&e[C]===v,ee=e=>!!e&&typeof e==`object`&&e[C]===y,E=e=>!!e&&typeof e==`object`&&e[C]===b,D=e=>!!e&&typeof e==`object`&&e[C]===x,te=e=>!!e&&typeof e==`object`&&e[C]===S;function O(e){if(e&&typeof e==`object`)switch(e[C]){case y:case S:return!0}return!1}function k(e){if(e&&typeof e==`object`)switch(e[C]){case _:case y:case x:case S:return!0}return!1}var ne=e=>(D(e)||O(e))&&!!e.anchor,A=Symbol(`break visit`),re=Symbol(`skip children`),j=Symbol(`remove node`);function M(e,t){let n=ie(t);T(e)?N(null,e.contents,n,Object.freeze([e]))===j&&(e.contents=null):N(null,e,n,Object.freeze([]))}M.BREAK=A,M.SKIP=re,M.REMOVE=j;function N(e,t,n,r){let i=ae(e,t,n,r);if(k(i)||E(i))return oe(e,r,i),N(e,i,n,r);if(typeof i!=`symbol`){if(O(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=N(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===A)return A;else i===j&&(t.items.splice(e,1),--e)}}else if(E(t)){r=Object.freeze(r.concat(t));let e=N(`key`,t.key,n,r);if(e===A)return A;e===j&&(t.key=null);let i=N(`value`,t.value,n,r);if(i===A)return A;i===j&&(t.value=null)}}return i}async function P(e,t){let n=ie(t);T(e)?await F(null,e.contents,n,Object.freeze([e]))===j&&(e.contents=null):await F(null,e,n,Object.freeze([]))}P.BREAK=A,P.SKIP=re,P.REMOVE=j;async function F(e,t,n,r){let i=await ae(e,t,n,r);if(k(i)||E(i))return oe(e,r,i),F(e,i,n,r);if(typeof i!=`symbol`){if(O(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await F(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===A)return A;else i===j&&(t.items.splice(e,1),--e)}}else if(E(t)){r=Object.freeze(r.concat(t));let e=await F(`key`,t.key,n,r);if(e===A)return A;e===j&&(t.key=null);let i=await F(`value`,t.value,n,r);if(i===A)return A;i===j&&(t.value=null)}}return i}function ie(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function ae(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(ee(t))return n.Map?.(e,t,r);if(te(t))return n.Seq?.(e,t,r);if(E(t))return n.Pair?.(e,t,r);if(D(t))return n.Scalar?.(e,t,r);if(w(t))return n.Alias?.(e,t,r)}function oe(e,t,n){let r=t[t.length-1];if(O(r))r.items[e]=n;else if(E(r))e===`key`?r.key=n:r.value=n;else if(T(r))r.contents=n;else{let e=w(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}var se={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},ce=e=>e.replace(/[!,[\]{}]/g,e=>se[e]),le=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+ce(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],n=Object.entries(this.tags),r;if(e&&n.length>0&&k(e.contents)){let t={};M(e.contents,(e,n)=>{k(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(let[i,a]of n)i===`!!`&&a===`tag:yaml.org,2002:`||(!e||r.some(e=>e.startsWith(a)))&&t.push(`%TAG ${i} ${a}`);return t.join(`
3
+ `)}};le.defaultYaml={explicit:!1,version:`1.2`},le.defaultTags={"!!":`tag:yaml.org,2002:`};function ue(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function de(e,t,n,r){if(r&&typeof r==`object`)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){let n=r[t],i=de(e,r,String(t),n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(let t of Array.from(r.keys())){let n=r.get(t),i=de(e,r,t,n);i===void 0?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(let t of Array.from(r)){let n=de(e,r,t,t);n===void 0?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(let[t,n]of Object.entries(r)){let i=de(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function I(e,t,n){if(Array.isArray(e))return e.map((e,t)=>I(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!ne(e))return e.toJSON(t,n);let r={aliasCount:0,count:1,res:void 0};n.anchors.set(e,r),n.onCreate=e=>{r.res=e,delete n.onCreate};let i=e.toJSON(t,n);return n.onCreate&&n.onCreate(i),i}return typeof e==`bigint`&&!n?.keep?Number(e):e}var fe=class{constructor(e){Object.defineProperty(this,C,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!T(e))throw TypeError(`A document argument is required`);let a={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n==`number`?n:100},o=I(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?de(i,{"":o},``,o):o}},pe=class extends fe{constructor(e){super(_),this.source=e,Object.defineProperty(this,"tag",{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],M(e,{Node:(e,t)=>{(w(t)||ne(t))&&n.push(t)}}),t&&(t.aliasResolveCache=n));let r;for(let e of n){if(e===this)break;e.anchor===this.source&&(r=e)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,a=this.resolve(r,t);if(!a){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let o=n.get(a);if(o||=(I(a,null,t),n.get(a)),o?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(o.count+=1,o.aliasCount===0&&(o.aliasCount=me(r,a,n)),o.count*o.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return o.res}toString(e,t,n){let r=`*${this.source}`;if(e){if(ue(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${r} `}return r}};function me(e,t,n){if(w(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(O(t)){let r=0;for(let i of t.items){let t=me(e,i,n);t>r&&(r=t)}return r}else if(E(t)){let r=me(e,t.key,n),i=me(e,t.value,n);return Math.max(r,i)}return 1}var he=e=>!e||typeof e!=`function`&&typeof e!=`object`,L=class extends fe{constructor(e){super(x),this.value=e}toJSON(e,t){return t?.keep?this.value:I(this.value,e,t)}toString(){return String(this.value)}};L.BLOCK_FOLDED=`BLOCK_FOLDED`,L.BLOCK_LITERAL=`BLOCK_LITERAL`,L.PLAIN=`PLAIN`,L.QUOTE_DOUBLE=`QUOTE_DOUBLE`,L.QUOTE_SINGLE=`QUOTE_SINGLE`;var ge=`tag:yaml.org,2002:`;function _e(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function ve(e,t,n){if(T(e)&&(e=e.contents),k(e))return e;if(E(e)){let t=n.schema[y].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:r,onAnchor:i,onTagObj:a,schema:o,sourceObjects:s}=n,c;if(r&&e&&typeof e==`object`){if(c=s.get(e),c)return c.anchor??=i(e),new pe(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=ge+t.slice(2));let l=_e(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new L(e);return c&&(c.node=t),t}l=e instanceof Map?o[y]:Symbol.iterator in Object(e)?o[S]:o[y]}a&&(a(l),delete n.onTagObj);let u=l?.createNode?l.createNode(n.schema,e,n):typeof l?.nodeClass?.from==`function`?l.nodeClass.from(n.schema,e,n):new L(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function ye(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){let n=t[e];if(typeof n==`number`&&Number.isInteger(n)&&n>=0){let e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return ve(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}var be=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done,xe=class extends fe{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>k(t)||E(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(be(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(O(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,ye(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){let[t,...n]=e;if(n.length===0)return this.delete(t);let r=this.get(t,!0);if(O(r))return r.deleteIn(n);throw Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){let[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&D(i)?i.value:i:O(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!E(t))return!1;let n=t.value;return n==null||e&&D(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[t,...n]=e;if(n.length===0)return this.has(t);let r=this.get(t,!0);return O(r)?r.hasIn(n):!1}setIn(e,t){let[n,...r]=e;if(r.length===0)this.set(n,t);else{let e=this.get(n,!0);if(O(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,ye(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}},Se=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function Ce(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var R=(e,t,n)=>e.endsWith(`
4
+ `)?Ce(n,t):n.includes(`
5
+ `)?`
6
+ `+Ce(n,t):(e.endsWith(` `)?``:` `)+n,we=`flow`,Te=`block`,Ee=`quoted`;function De(e,t,n=`flow`,{indentAtStart:r,lineWidth:i=80,minContentWidth:a=20,onFold:o,onOverflow:s}={}){if(!i||i<0)return e;i<a&&(a=0);let c=Math.max(1+a,1+i-t.length);if(e.length<=c)return e;let l=[],u={},d=i-t.length;typeof r==`number`&&(r>i-Math.max(2,a)?l.push(0):d=i-r);let f,p,m=!1,h=-1,g=-1,_=-1;n===`block`&&(h=Oe(e,h,t.length),h!==-1&&(d=h+c));for(let r;r=e[h+=1];){if(n===`quoted`&&r===`\\`){switch(g=h,e[h+1]){case`x`:h+=3;break;case`u`:h+=5;break;case`U`:h+=9;break;default:h+=1}_=h}if(r===`
7
+ `)n===`block`&&(h=Oe(e,h,t.length)),d=h+t.length+c,f=void 0;else{if(r===` `&&p&&p!==` `&&p!==`
8
+ `&&p!==` `){let t=e[h+1];t&&t!==` `&&t!==`
9
+ `&&t!==` `&&(f=h)}if(h>=d)if(f)l.push(f),d=f+c,f=void 0;else if(n===`quoted`){for(;p===` `||p===` `;)p=r,r=e[h+=1],m=!0;let t=h>_+1?h-2:g-1;if(u[t])return e;l.push(t),u[t]=!0,d=t+c,f=void 0}else m=!0}p=r}if(m&&s&&s(),l.length===0)return e;o&&o();let v=e.slice(0,l[0]);for(let r=0;r<l.length;++r){let i=l[r],a=l[r+1]||e.length;i===0?v=`\n${t}${e.slice(0,a)}`:(n===`quoted`&&u[i]&&(v+=`${e[i]}\\`),v+=`\n${t}${e.slice(i+1,a)}`)}return v}function Oe(e,t,n){let r=t,i=t+1,a=e[i];for(;a===` `||a===` `;)if(t<i+n)a=e[++t];else{do a=e[++t];while(a&&a!==`
10
+ `);r=t,i=t+1,a=e[i]}return r}var ke=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),Ae=e=>/^(%|---|\.\.\.)/m.test(e);function je(e,t,n){if(!t||t<0)return!1;let r=t-n,i=e.length;if(i<=r)return!1;for(let t=0,n=0;t<i;++t)if(e[t]===`
11
+ `){if(t-n>r)return!0;if(n=t+1,i-n<=r)return!1}return!0}function Me(e,t){let n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;let{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,a=t.indent||(Ae(e)?` `:``),o=``,s=0;for(let e=0,t=n[e];t;t=n[++e])if(t===` `&&n[e+1]===`\\`&&n[e+2]===`n`&&(o+=n.slice(s,e)+`\\ `,e+=1,s=e,t=`\\`),t===`\\`)switch(n[e+1]){case`u`:{o+=n.slice(s,e);let t=n.substr(e+2,4);switch(t){case`0000`:o+=`\\0`;break;case`0007`:o+=`\\a`;break;case`000b`:o+=`\\v`;break;case`001b`:o+=`\\e`;break;case`0085`:o+=`\\N`;break;case`00a0`:o+=`\\_`;break;case`2028`:o+=`\\L`;break;case`2029`:o+=`\\P`;break;default:t.substr(0,2)===`00`?o+=`\\x`+t.substr(2):o+=n.substr(e,6)}e+=5,s=e+1}break;case`n`:if(r||n[e+2]===`"`||n.length<i)e+=1;else{for(o+=n.slice(s,e)+`
12
+
13
+ `;n[e+2]===`\\`&&n[e+3]===`n`&&n[e+4]!==`"`;)o+=`
14
+ `,e+=2;o+=a,n[e+2]===` `&&(o+=`\\`),e+=1,s=e+1}break;default:e+=1}return o=s?o+n.slice(s):n,r?o:De(o,a,Ee,ke(t,!1))}function Ne(e,t){if(t.options.singleQuote===!1||t.implicitKey&&e.includes(`
15
+ `)||/[ \t]\n|\n[ \t]/.test(e))return Me(e,t);let n=t.indent||(Ae(e)?` `:``),r=`'`+e.replace(/'/g,`''`).replace(/\n+/g,`$&\n${n}`)+`'`;return t.implicitKey?r:De(r,n,we,ke(t,!1))}function z(e,t){let{singleQuote:n}=t.options,r;if(n===!1)r=Me;else{let t=e.includes(`"`),i=e.includes(`'`);r=t&&!i?Ne:i&&!t?Me:n?Ne:Me}return r(e,t)}var Pe;try{Pe=RegExp(`(^|(?<!
16
+ ))
17
+ +(?!
18
+ |$)`,`g`)}catch{Pe=/\n+(?!\n|$)/g}function Fe({comment:e,type:t,value:n},r,i,a){let{blockQuote:o,commentString:s,lineWidth:c}=r.options;if(!o||/\n[\t ]+$/.test(n))return z(n,r);let l=r.indent||(r.forceBlockIndent||Ae(n)?` `:``),u=o===`literal`?!0:o===`folded`||t===L.BLOCK_FOLDED?!1:t===L.BLOCK_LITERAL?!0:!je(n,c,l.length);if(!n)return u?`|
19
+ `:`>
20
+ `;let d,f;for(f=n.length;f>0;--f){let e=n[f-1];if(e!==`
21
+ `&&e!==` `&&e!==` `)break}let p=n.substring(f),m=p.indexOf(`
22
+ `);m===-1?d=`-`:n===p||m!==p.length-1?(d=`+`,a&&a()):d=``,p&&=(n=n.slice(0,-p.length),p[p.length-1]===`
23
+ `&&(p=p.slice(0,-1)),p.replace(Pe,`$&${l}`));let h=!1,g,_=-1;for(g=0;g<n.length;++g){let e=n[g];if(e===` `)h=!0;else if(e===`
24
+ `)_=g;else break}let v=n.substring(0,_<g?_+1:g);v&&=(n=n.substring(v.length),v.replace(/\n+/g,`$&${l}`));let y=(h?l?`2`:`1`:``)+d;if(e&&(y+=` `+s(e.replace(/ ?[\r\n]+/g,` `)),i&&i()),!u){let e=n.replace(/\n+/g,`
25
+ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\n+/g,`$&${l}`),i=!1,a=ke(r,!0);o!==`folded`&&t!==L.BLOCK_FOLDED&&(a.onOverflow=()=>{i=!0});let s=De(`${v}${e}${p}`,l,Te,a);if(!i)return`>${y}\n${l}${s}`}return n=n.replace(/\n+/g,`$&${l}`),`|${y}\n${l}${v}${n}${p}`}function Ie(e,t,n,r){let{type:i,value:a}=e,{actualString:o,implicitKey:s,indent:c,indentStep:l,inFlow:u}=t;if(s&&a.includes(`
26
+ `)||u&&/[[\]{},]/.test(a))return z(a,t);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(a))return s||u||!a.includes(`
27
+ `)?z(a,t):Fe(e,t,n,r);if(!s&&!u&&i!==L.PLAIN&&a.includes(`
28
+ `))return Fe(e,t,n,r);if(Ae(a)){if(c===``)return t.forceBlockIndent=!0,Fe(e,t,n,r);if(s&&c===l)return z(a,t)}let d=a.replace(/\n+/g,`$&\n${c}`);if(o){let e=e=>e.default&&e.tag!==`tag:yaml.org,2002:str`&&e.test?.test(d),{compat:n,tags:r}=t.doc.schema;if(r.some(e)||n?.some(e))return z(a,t)}return s?d:De(d,c,we,ke(t,!1))}function Le(e,t,n,r){let{implicitKey:i,inFlow:a}=t,o=typeof e.value==`string`?e:Object.assign({},e,{value:String(e.value)}),{type:s}=e;s!==L.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(s=L.QUOTE_DOUBLE);let c=e=>{switch(e){case L.BLOCK_FOLDED:case L.BLOCK_LITERAL:return i||a?z(o.value,t):Fe(o,t,n,r);case L.QUOTE_DOUBLE:return Me(o.value,t);case L.QUOTE_SINGLE:return Ne(o.value,t);case L.PLAIN:return Ie(o,t,n,r);default:return null}},l=c(s);if(l===null){let{defaultKeyType:e,defaultStringType:n}=t.options,r=i&&e||n;if(l=c(r),l===null)throw Error(`Unsupported default string type ${r}`)}return l}function Re(e,t){let n=Object.assign({blockQuote:!0,commentString:Se,defaultKeyType:null,defaultStringType:`PLAIN`,directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:`false`,flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:`null`,simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:`true`,verifyAliasOrder:!0},e.schema.toStringOptions,t),r;switch(n.collectionStyle){case`block`:r=!1;break;case`flow`:r=!0;break;default:r=null}return{anchors:new Set,doc:e,flowCollectionPadding:n.flowCollectionPadding?` `:``,indent:``,indentStep:typeof n.indent==`number`?` `.repeat(n.indent):` `,inFlow:r,options:n}}function ze(e,t){if(t.tag){let n=e.filter(e=>e.tag===t.tag);if(n.length>0)return n.find(e=>e.format===t.format)??n[0]}let n,r;if(D(t)){r=t.value;let i=e.filter(e=>e.identify?.(r));if(i.length>1){let e=i.filter(e=>e.test);e.length>0&&(i=e)}n=i.find(e=>e.format===t.format)??i.find(e=>!e.format)}else r=t,n=e.find(e=>e.nodeClass&&r instanceof e.nodeClass);if(!n){let e=r?.constructor?.name??(r===null?`null`:typeof r);throw Error(`Tag not resolved for ${e} value`)}return n}function Be(e,t,{anchors:n,doc:r}){if(!r.directives)return``;let i=[],a=(D(e)||O(e))&&e.anchor;a&&ue(a)&&(n.add(a),i.push(`&${a}`));let o=e.tag??(t.default?null:t.tag);return o&&i.push(r.directives.tagString(o)),i.join(` `)}function Ve(e,t,n,r){if(E(e))return e.toString(t,n,r);if(w(e)){if(t.doc.directives)return e.toString(t);if(t.resolvedAliases?.has(e))throw TypeError(`Cannot stringify circular structure without alias nodes`);t.resolvedAliases?t.resolvedAliases.add(e):t.resolvedAliases=new Set([e]),e=e.resolve(t.doc)}let i,a=k(e)?e:t.doc.createNode(e,{onTagObj:e=>i=e});i??=ze(t.doc.schema.tags,a);let o=Be(a,i,t);o.length>0&&(t.indentAtStart=(t.indentAtStart??0)+o.length+1);let s=typeof i.stringify==`function`?i.stringify(a,t,n,r):D(a)?Le(a,t,n,r):a.toString(t,n,r);return o?D(a)||s[0]===`{`||s[0]===`[`?`${o} ${s}`:`${o}\n${t.indent}${s}`:s}function He({key:e,value:t},n,r,i){let{allNullValues:a,doc:o,indent:s,indentStep:c,options:{commentString:l,indentSeq:u,simpleKeys:d}}=n,f=k(e)&&e.comment||null;if(d){if(f)throw Error(`With simple keys, key nodes cannot have comments`);if(O(e)||!k(e)&&typeof e==`object`)throw Error(`With simple keys, collection cannot be used as a key value`)}let p=!d&&(!e||f&&t==null&&!n.inFlow||O(e)||(D(e)?e.type===L.BLOCK_FOLDED||e.type===L.BLOCK_LITERAL:typeof e==`object`));n=Object.assign({},n,{allNullValues:!1,implicitKey:!p&&(d||!a),indent:s+c});let m=!1,h=!1,g=Ve(e,n,()=>m=!0,()=>h=!0);if(!p&&!n.inFlow&&g.length>1024){if(d)throw Error(`With simple keys, single line scalar must not span more than 1024 characters`);p=!0}if(n.inFlow){if(a||t==null)return m&&r&&r(),g===``?`?`:p?`? ${g}`:g}else if(a&&!d||t==null&&p)return g=`? ${g}`,f&&!m?g+=R(g,n.indent,l(f)):h&&i&&i(),g;m&&(f=null),p?(f&&(g+=R(g,n.indent,l(f))),g=`? ${g}\n${s}:`):(g=`${g}:`,f&&(g+=R(g,n.indent,l(f))));let _,v,y;k(t)?(_=!!t.spaceBefore,v=t.commentBefore,y=t.comment):(_=!1,v=null,y=null,t&&typeof t==`object`&&(t=o.createNode(t))),n.implicitKey=!1,!p&&!f&&D(t)&&(n.indentAtStart=g.length+1),h=!1,!u&&c.length>=2&&!n.inFlow&&!p&&te(t)&&!t.flow&&!t.tag&&!t.anchor&&(n.indent=n.indent.substring(2));let b=!1,x=Ve(t,n,()=>b=!0,()=>h=!0),S=` `;if(f||_||v){if(S=_?`
29
+ `:``,v){let e=l(v);S+=`\n${Ce(e,n.indent)}`}x===``&&!n.inFlow?S===`
30
+ `&&y&&(S=`
31
+
32
+ `):S+=`\n${n.indent}`}else if(!p&&O(t)){let e=x[0],r=x.indexOf(`
33
+ `),i=r!==-1,a=n.inFlow??t.flow??t.items.length===0;if(i||!a){let t=!1;if(i&&(e===`&`||e===`!`)){let n=x.indexOf(` `);e===`&`&&n!==-1&&n<r&&x[n+1]===`!`&&(n=x.indexOf(` `,n+1)),(n===-1||r<n)&&(t=!0)}t||(S=`\n${n.indent}`)}}else (x===``||x[0]===`
34
+ `)&&(S=``);return g+=S+x,n.inFlow?b&&r&&r():y&&!b?g+=R(g,n.indent,l(y)):h&&i&&i(),g}function Ue(e,t){(e===`debug`||e===`warn`)&&console.warn(t)}var We=`<<`,Ge={identify:e=>e===We||typeof e==`symbol`&&e.description===We,default:`key`,tag:`tag:yaml.org,2002:merge`,test:/^<<$/,resolve:()=>Object.assign(new L(Symbol(We)),{addToJSMap:qe}),stringify:()=>We},Ke=(e,t)=>(Ge.identify(t)||D(t)&&(!t.type||t.type===L.PLAIN)&&Ge.identify(t.value))&&e?.doc.schema.tags.some(e=>e.tag===Ge.tag&&e.default);function qe(e,t,n){let r=Ye(e,n);if(te(r))for(let n of r.items)Je(e,t,n);else if(Array.isArray(r))for(let n of r)Je(e,t,n);else Je(e,t,r)}function Je(e,t,n){let r=Ye(e,n);if(!ee(r))throw Error(`Merge sources must be maps or map aliases`);let i=r.toJSON(null,e,Map);for(let[e,n]of i)t instanceof Map?t.has(e)||t.set(e,n):t instanceof Set?t.add(e):Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return t}function Ye(e,t){return e&&w(t)?t.resolve(e.doc,e):t}function Xe(e,t,{key:n,value:r}){if(k(n)&&n.addToJSMap)n.addToJSMap(e,t,r);else if(Ke(e,n))qe(e,t,r);else{let i=I(n,``,e);if(t instanceof Map)t.set(i,I(r,i,e));else if(t instanceof Set)t.add(i);else{let a=Ze(n,i,e),o=I(r,a,e);a in t?Object.defineProperty(t,a,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[a]=o}}return t}function Ze(e,t,n){if(t===null)return``;if(typeof t!=`object`)return String(t);if(k(e)&&n?.doc){let t=Re(n.doc,{});t.anchors=new Set;for(let e of n.anchors.keys())t.anchors.add(e.anchor);t.inFlow=!0,t.inStringifyKey=!0;let r=e.toString(t);if(!n.mapKeyWarned){let e=JSON.stringify(r);e.length>40&&(e=e.substring(0,36)+`..."`),Ue(n.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${e}. Set mapAsMap: true to use object keys.`),n.mapKeyWarned=!0}return r}return JSON.stringify(t)}function Qe(e,t,n){return new B(ve(e,void 0,n),ve(t,void 0,n))}var B=class e{constructor(e,t=null){Object.defineProperty(this,C,{value:b}),this.key=e,this.value=t}clone(t){let{key:n,value:r}=this;return k(n)&&(n=n.clone(t)),k(r)&&(r=r.clone(t)),new e(n,r)}toJSON(e,t){return Xe(t,t?.mapAsMap?new Map:{},this)}toString(e,t,n){return e?.doc?He(this,e,t,n):JSON.stringify(this)}};function $e(e,t,n){return(t.inFlow??e.flow?tt:et)(e,t,n)}function et({comment:e,items:t},n,{blockItemPrefix:r,flowChars:i,itemIndent:a,onChompKeep:o,onComment:s}){let{indent:c,options:{commentString:l}}=n,u=Object.assign({},n,{indent:a,type:null}),d=!1,f=[];for(let e=0;e<t.length;++e){let i=t[e],o=null;if(k(i))!d&&i.spaceBefore&&f.push(``),nt(n,f,i.commentBefore,d),i.comment&&(o=i.comment);else if(E(i)){let e=k(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&f.push(``),nt(n,f,e.commentBefore,d))}d=!1;let s=Ve(i,u,()=>o=null,()=>d=!0);o&&(s+=R(s,a,l(o))),d&&o&&(d=!1),f.push(r+s)}let p;if(f.length===0)p=i.start+i.end;else{p=f[0];for(let e=1;e<f.length;++e){let t=f[e];p+=t?`\n${c}${t}`:`
35
+ `}}return e?(p+=`
36
+ `+Ce(l(e),c),s&&s()):d&&o&&o(),p}function tt({items:e},t,{flowChars:n,itemIndent:r}){let{indent:i,indentStep:a,flowCollectionPadding:o,options:{commentString:s}}=t;r+=a;let c=Object.assign({},t,{indent:r,inFlow:!0,type:null}),l=!1,u=0,d=[];for(let n=0;n<e.length;++n){let i=e[n],a=null;if(k(i))i.spaceBefore&&d.push(``),nt(t,d,i.commentBefore,!1),i.comment&&(a=i.comment);else if(E(i)){let e=k(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(``),nt(t,d,e.commentBefore,!1),e.comment&&(l=!0));let n=k(i.value)?i.value:null;n?(n.comment&&(a=n.comment),n.commentBefore&&(l=!0)):i.value==null&&e?.comment&&(a=e.comment)}a&&(l=!0);let o=Ve(i,c,()=>a=null);l||=d.length>u||o.includes(`
37
+ `),n<e.length-1?o+=`,`:t.options.trailingComma&&(t.options.lineWidth>0&&(l||=d.reduce((e,t)=>e+t.length+2,2)+(o.length+2)>t.options.lineWidth),l&&(o+=`,`)),a&&(o+=R(o,r,s(a))),d.push(o),u=d.length}let{start:f,end:p}=n;if(d.length===0)return f+p;if(!l){let e=d.reduce((e,t)=>e+t.length+2,2);l=t.options.lineWidth>0&&e>t.options.lineWidth}if(l){let e=f;for(let t of d)e+=t?`\n${a}${i}${t}`:`
38
+ `;return`${e}\n${i}${p}`}else return`${f}${o}${d.join(` `)}${o}${p}`}function nt({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,``)),r){let i=Ce(t(r),e);n.push(i.trimStart())}}function V(e,t){let n=D(t)?t.value:t;for(let r of e)if(E(r)&&(r.key===t||r.key===n||D(r.key)&&r.key.value===n))return r}var H=class extends xe{static get tagName(){return`tag:yaml.org,2002:map`}constructor(e){super(y,e),this.items=[]}static from(e,t,n){let{keepUndefined:r,replacer:i}=n,a=new this(e),o=(e,o)=>{if(typeof i==`function`)o=i.call(t,e,o);else if(Array.isArray(i)&&!i.includes(e))return;(o!==void 0||r)&&a.items.push(Qe(e,o,n))};if(t instanceof Map)for(let[e,n]of t)o(e,n);else if(t&&typeof t==`object`)for(let e of Object.keys(t))o(e,t[e]);return typeof e.sortMapEntries==`function`&&a.items.sort(e.sortMapEntries),a}add(e,t){let n;n=E(e)?e:!e||typeof e!=`object`||!(`key`in e)?new B(e,e?.value):new B(e.key,e.value);let r=V(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw Error(`Key ${n.key} already set`);D(r.value)&&he(n.value)?r.value.value=n.value:r.value=n.value}else if(i){let e=this.items.findIndex(e=>i(n,e)<0);e===-1?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){let t=V(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=V(this.items,e)?.value;return(!t&&D(n)?n.value:n)??void 0}has(e){return!!V(this.items,e)}set(e,t){this.add(new B(e,t),!0)}toJSON(e,t,n){let r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let e of this.items)Xe(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(let e of this.items)if(!E(e))throw Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),$e(this,e,{blockItemPrefix:``,flowChars:{start:`{`,end:`}`},itemIndent:e.indent||``,onChompKeep:n,onComment:t})}},rt={collection:`map`,default:!0,nodeClass:H,tag:`tag:yaml.org,2002:map`,resolve(e,t){return ee(e)||t(`Expected a mapping for this tag`),e},createNode:(e,t,n)=>H.from(e,t,n)},it=class extends xe{static get tagName(){return`tag:yaml.org,2002:seq`}constructor(e){super(S,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=at(e);return typeof t==`number`?this.items.splice(t,1).length>0:!1}get(e,t){let n=at(e);if(typeof n!=`number`)return;let r=this.items[n];return!t&&D(r)?r.value:r}has(e){let t=at(e);return typeof t==`number`&&t<this.items.length}set(e,t){let n=at(e);if(typeof n!=`number`)throw Error(`Expected a valid index, not ${e}.`);let r=this.items[n];D(r)&&he(t)?r.value=t:this.items[n]=t}toJSON(e,t){let n=[];t?.onCreate&&t.onCreate(n);let r=0;for(let e of this.items)n.push(I(e,String(r++),t));return n}toString(e,t,n){return e?$e(this,e,{blockItemPrefix:`- `,flowChars:{start:`[`,end:`]`},itemIndent:(e.indent||``)+` `,onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let a of t){if(typeof r==`function`){let n=t instanceof Set?a:String(e++);a=r.call(t,n,a)}i.items.push(ve(a,void 0,n))}}return i}};function at(e){let t=D(e)?e.value:e;return t&&typeof t==`string`&&(t=Number(t)),typeof t==`number`&&Number.isInteger(t)&&t>=0?t:null}var ot={collection:`seq`,default:!0,nodeClass:it,tag:`tag:yaml.org,2002:seq`,resolve(e,t){return te(e)||t(`Expected a sequence for this tag`),e},createNode:(e,t,n)=>it.from(e,t,n)};function st(e){return typeof e==`bigint`||Number.isInteger(e)}var ct=({value:e})=>JSON.stringify(e),lt=[{identify:e=>typeof e==`string`,default:!0,tag:`tag:yaml.org,2002:str`,resolve:e=>e,stringify:ct},{identify:e=>e==null,createNode:()=>new L(null),default:!0,tag:`tag:yaml.org,2002:null`,test:/^null$/,resolve:()=>null,stringify:ct},{identify:e=>typeof e==`boolean`,default:!0,tag:`tag:yaml.org,2002:bool`,test:/^true$|^false$/,resolve:e=>e===`true`,stringify:ct},{identify:st,default:!0,tag:`tag:yaml.org,2002:int`,test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>st(e)?e.toString():JSON.stringify(e)},{identify:e=>typeof e==`number`,default:!0,tag:`tag:yaml.org,2002:float`,test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:ct}];[rt,ot].concat(lt,{default:!0,tag:``,test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}});function ut(e,t,n){let{replacer:r}=n,i=new it(e);i.tag=`tag:yaml.org,2002:pairs`;let a=0;if(t&&Symbol.iterator in Object(t))for(let e of t){typeof r==`function`&&(e=r.call(t,String(a++),e));let o,s;if(Array.isArray(e))if(e.length===2)o=e[0],s=e[1];else throw TypeError(`Expected [key, value] tuple: ${e}`);else if(e&&e instanceof Object){let t=Object.keys(e);if(t.length===1)o=t[0],s=e[o];else throw TypeError(`Expected tuple with one key, not ${t.length} keys`)}else o=e;i.items.push(Qe(o,s,n))}return i}var dt=class e extends it{constructor(){super(),this.add=H.prototype.add.bind(this),this.delete=H.prototype.delete.bind(this),this.get=H.prototype.get.bind(this),this.has=H.prototype.has.bind(this),this.set=H.prototype.set.bind(this),this.tag=e.tag}toJSON(e,t){if(!t)return super.toJSON(e);let n=new Map;t?.onCreate&&t.onCreate(n);for(let e of this.items){let r,i;if(E(e)?(r=I(e.key,``,t),i=I(e.value,r,t)):r=I(e,``,t),n.has(r))throw Error(`Ordered maps must not include duplicate keys`);n.set(r,i)}return n}static from(e,t,n){let r=ut(e,t,n),i=new this;return i.items=r.items,i}};dt.tag=`tag:yaml.org,2002:omap`;var ft=class e extends H{constructor(t){super(t),this.tag=e.tag}add(e){let t;t=E(e)?e:e&&typeof e==`object`&&`key`in e&&`value`in e&&e.value===null?new B(e.key,null):new B(e,null),V(this.items,t.key)||this.items.push(t)}get(e,t){let n=V(this.items,e);return!t&&E(n)?D(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!=`boolean`)throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let n=V(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new B(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw Error(`Set items must all have null values`)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let e of t)typeof r==`function`&&(e=r.call(t,e,e)),i.items.push(Qe(e,null,n));return i}};ft.tag=`tag:yaml.org,2002:set`;var pt=Symbol(`break visit`),mt=Symbol(`skip children`),ht=Symbol(`remove item`);function U(e,t){`type`in e&&e.type===`document`&&(e={start:e.start,value:e.value}),gt(Object.freeze([]),e,t)}U.BREAK=pt,U.SKIP=mt,U.REMOVE=ht,U.itemAtPath=(e,t)=>{let n=e;for(let[e,r]of t){let t=n?.[e];if(t&&`items`in t)n=t.items[r];else return}return n},U.parentCollection=(e,t)=>{let n=U.itemAtPath(e,t.slice(0,-1)),r=t[t.length-1][0],i=n?.[r];if(i&&`items`in i)return i;throw Error(`Parent collection not found`)};function gt(e,t,n){let r=n(t,e);if(typeof r==`symbol`)return r;for(let i of[`key`,`value`]){let a=t[i];if(a&&`items`in a){for(let t=0;t<a.items.length;++t){let r=gt(Object.freeze(e.concat([[i,t]])),a.items[t],n);if(typeof r==`number`)t=r-1;else if(r===pt)return pt;else r===ht&&(a.items.splice(t,1),--t)}typeof r==`function`&&i===`key`&&(r=r(t,e))}}return typeof r==`function`?r(t,e):r}t(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}var r=void 0,i=``,a=` `,o=`\\`,s=/^\s+$/,c=/(?:[^\\]|^)\\$/,l=/^\\!/,u=/^\\#/,d=/\r?\n/g,f=/^\.{0,2}\/|^\.{1,2}$/,p=/\/$/,m=`/`,h=`node-ignore`;typeof Symbol<`u`&&(h=Symbol.for(`node-ignore`));var g=h,_=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),v=/([0-z])-([0-z])/g,y=()=>!1,b=e=>e.replace(v,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:i),x=e=>{let{length:t}=e;return e.slice(0,t-t%2)},S=[[/^\uFEFF/,()=>i],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?a:i)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+a}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*\\\*\\\*\\\//,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>o],[/\\\\/g,()=>o],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===o?`\\[${n}${x(r)}${i}`:i===`]`&&r.length%2==0?`[${b(n)}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],C=/(^|\\\/)?\\\*$/,w=`regex`,T=`checkRegex`,ee={[w](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[T](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},E=e=>S.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),D=e=>typeof e==`string`,te=e=>e&&D(e)&&!s.test(e)&&!c.test(e)&&e.indexOf(`#`)!==0,O=e=>e.split(d).filter(Boolean),k=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,_(this,`body`,n),_(this,`ignoreCase`,r),_(this,`regexPrefix`,a)}get regex(){let e=`_regex`;return this[e]?this[e]:this._make(w,e)}get checkRegex(){let e=`_checkRegex`;return this[e]?this[e]:this._make(T,e)}_make(e,t){let n=this.regexPrefix.replace(C,ee[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return _(this,t,r)}},ne=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(l,`!`).replace(u,`#`);let a=E(i);return new k(e,t,i,n,r,a)},A=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[g]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(D(e)&&(e={pattern:e}),te(e.pattern)){let t=ne(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(D(e)?O(e):e).forEach(this._add,this),this._added}test(e,t,n){let i=!1,a=!1,o;this._rules.forEach(s=>{let{negative:c}=s;a===c&&i!==a||c&&!i&&!a&&!t||s[n].test(e)&&(i=!c,a=c,o=c?r:s)});let s={ignored:i,unignored:a};return o&&(s.rule=o),s}},re=(e,t)=>{throw new t(e)},j=(e,t,n)=>D(e)?e?j.isNotRelative(e)?n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),M=e=>f.test(e);j.isNotRelative=M,j.convert=e=>e;var N=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){_(this,g,!0),this._rules=new A(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&j.convert(e);return j(i,e,this._strictPathCheck?re:y),this._t(i,t,n,r)}checkIgnore(e){if(!p.test(e))return this.test(e);let t=e.split(m).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(m)+m,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,T)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(m).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,w);let i=this._t(r.join(m)+m,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,w)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},P=e=>new N(e),F=e=>j(e&&j.convert(e),e,y),ie=()=>{j.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;j.isNotRelative=t=>e.test(t)||M(t)};typeof process<`u`&&process.platform===`win32`&&ie(),t.exports=P,P.default=P,t.exports.isPathValid=F,_(t.exports,Symbol.for(`setupWindows`),ie)}))(),globalThis.Buffer,o(`secret-scrub`),o(`image-processor`),o(`tool-adapter`);var _t=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function vt(e){let{include:t,exclude:n}=_t;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var yt=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-Cza179on.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-9-QEmC9Z.js`).then(e=>e.n),__vite__mapDeps([15,5,1,2,3,4,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-CKo8wJkz.js`),__vite__mapDeps([16,1,2,3,4,5,6,17,18,19,7,20,21,8,11]))}),bt=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-t0y7yh0d.js`),__vite__mapDeps([22,2,1,3,4,5,6,9,10,11,12,13,14,23,15,7,24,25,26,27])),"/packages/webapp/providers/github-copilot.ts":()=>n(()=>import(`./github-copilot-yTNPvKEy.js`),__vite__mapDeps([28,2,1,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-CQtjJB1r.js`),__vite__mapDeps([29,2,9,5,10,11,12,13,14,30,23,24,25,26])),"/packages/webapp/providers/openai-codex.ts":()=>n(()=>import(`./openai-codex-Dx5taSaF.js`),__vite__mapDeps([31,1,2,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/xai-grok-errors.ts":()=>n(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok-models.ts":()=>n(()=>import(`./xai-grok-models-CeEBaUMC.js`),[]),"/packages/webapp/providers/xai-grok-sanitize.ts":()=>n(()=>import(`./xai-grok-sanitize-CR2JoOJd.js`),__vite__mapDeps([32,33])),"/packages/webapp/providers/xai-grok.ts":()=>n(()=>import(`./xai-grok-D4a_2yZf.js`),__vite__mapDeps([34,1,2,3,4,5,6,9,10,11,12,13,14,35,33,32]))}),xt=new Map,St=null;function Ct(){return St||(St=(async()=>{for(let[e,t]of Object.entries(yt)){let e=await t();e.config&&vt(e.config.id)&&(xt.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(bt)){let e=await t();e.config&&(xt.set(e.config.id,e.config),e.register?.())}})(),St)}function wt(e){return xt.get(e)}function Tt(){return[...xt.keys()]}function Et(e){xt.set(e.id,e)}var Dt=e({ACCOUNTS_KEY:()=>W,__test__:()=>Lt,addAccount:()=>en,applyProviderDefaults:()=>Wt,clearAllSettings:()=>wn,clearApiKey:()=>yn,clearBaseUrl:()=>Sn,clearSelectedProvider:()=>gn,exportProviders:()=>Cn,getAccounts:()=>Y,getAllAvailableModels:()=>Jt,getAllExtraOAuthDomains:()=>Qt,getApiKey:()=>_n,getApiKeyForProvider:()=>un,getApiVersionForProvider:()=>fn,getAvailableProviders:()=>Rt,getBaseUrl:()=>bn,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>dn,getExtraOAuthDomains:()=>Yt,getOAuthAccountInfo:()=>Ht,getProviderConfig:()=>K,getProviderModels:()=>q,getRawApiKeyForProvider:()=>ln,getSelectedModelId:()=>Q,getSelectedProvider:()=>$,isModelHiddenFromPicker:()=>Kt,logoutOAuthAccount:()=>rn,maskOAuthTokenWithRetry:()=>an,migrateLegacyAuthOnlySelection:()=>Ft,persistOAuthMaskViaServiceWorker:()=>on,providerOffersLlmModels:()=>zt,removeAccount:()=>nn,resolveCurrentModel:()=>kn,resolveModelById:()=>On,resolveModelByShorthand:()=>An,saveOAuthAccount:()=>sn,setApiKey:()=>vn,setBaseUrl:()=>xn,setExtraOAuthDomains:()=>Xt,setExtraOAuthDomainsAsync:()=>Zt,setSelectedModelId:()=>pn,setSelectedProvider:()=>hn}),Ot=r,kt=i,W=`slicc_accounts`,G=`selected-model`,At=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],jt=new Set([`github`]);function Mt(e){let t;try{t=a()}catch{return!1}return t.includes(e)&&!vt(e)}var Nt=!1;function Pt(){if(!Nt){Nt=!0;for(let e of At)try{localStorage.removeItem(e)}catch{}Ft()}}function Ft(){try{let e=localStorage.getItem(G);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(jt.has(n)||Mt(n))&&localStorage.removeItem(G)}}}catch{}try{let e=localStorage.getItem(W);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Mt(e.providerId)));n.length!==t.length&&localStorage.setItem(W,JSON.stringify(n))}catch{}}function It(){Nt=!1}var Lt={_resetLegacyCleanup:It};function Rt(){let e=a().filter(vt),t=Tt();return[...new Set([...e,...t])].filter(e=>!wt(e)?.hidden)}function zt(e){try{if(q(e).length>0)return!0}catch{}try{if(i(e).length>0)return!0}catch{}let t=wt(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Bt(e,t){try{if(q(e).some(e=>e.id===t))return!0}catch{}try{if(i(e).some(e=>e.id===t))return!0}catch{}let n=wt(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function K(e){return wt(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Vt(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function q(e){try{if(e===`bedrock-camp`){let e=g(Z(`bedrock-camp`));return kt(`amazon-bedrock`).filter(t=>h(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=K(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return J.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of a())try{for(let t of kt(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=En(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&Vt(o,s),Vt(o,n),o})}if(t.isOAuth){let n=kt(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Vt(i,a),i})}return kt(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return J.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Ht(e){let t=Y().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var Ut=Object.assign({})[`/packages/webapp/providers.json`]??[],J=o(`provider-settings`);function Wt(e=Ut){if(e.length===0||Y().length>0)return;let t=new Set(Rt());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){J.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}en(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(G)&&localStorage.setItem(G,`${n.providerId}:${n.model}`)}var Gt=[/haiku/i];function Kt(e){return Gt.some(t=>t.test(e))}function qt(e){return e.filter(e=>!Kt(e.id))}function Jt(){let e=Y();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=K(n.providerId);if(e.hidden||Mt(n.providerId))continue;let r=qt(q(n.providerId));if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function Y(){Pt();let e=localStorage.getItem(W);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yt(e){return f(localStorage)[e]??[]}function Xt(e,t){let n=f(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,d(localStorage,n)}async function Zt(e,t){if(p()){Xt(e,t);return}let n=m();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:r}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{d(localStorage,r)}catch(t){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function Qt(){return f(localStorage)}function $t(e){localStorage.setItem(W,JSON.stringify(e))}async function X(e){if(p()){$t(e);return}let t=m();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(W,r)}catch(e){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function en(e,t,n,r,i){let a=Y().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),$t(a)}async function tn(e){let t=l();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&J.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&J.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await u(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&J.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(s(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:c()});!t.ok&&t.status!==404&&J.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){J.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function nn(e){let t=Y().find(t=>t.providerId===e),n=K(e);t&&n?.isOAuth&&await rn(e),await tn(e),await X(Y().filter(t=>t.providerId!==e));let r=localStorage.getItem(G)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(G)}async function rn(e){let t=Y().find(t=>t.providerId===e);if(!t)return;let r=K(e);if(r?.isOAuth){if(r.onOAuthLogout)try{await r.onOAuthLogout()}catch(t){J.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(r.getOAuthLogoutUrl){let i=r.getOAuthLogoutUrl(t);if(i){let{openIdpLogoutUrl:t}=await n(async()=>{let{openIdpLogoutUrl:e}=await import(`./oauth-service-YGl8VFS-.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([24,2,12,5,13,25,26]));await t(i).catch(t=>{J.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await X(Y().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await tn(e)}}async function an(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function on(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await an(()=>t.sendMaskRequest(r),n);if(!i){J.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function sn(e){let t=Y().find(t=>t.providerId===e.providerId),n=Y().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await X(n);let r=K(e.providerId)?.oauthTokenDomains??[],i=Yt(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let d=l();try{if(d===`extension-direct`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&J.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&J.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:Y,saveAccounts:X});else if(d===`extension-delegate`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>u(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&J.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(J.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:Y,saveAccounts:X});else if(d!==`connect`){let t=await fetch(s(`/api/secrets/oauth-update`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=Y(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await X(t))}else J.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else J.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){J.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:d,error:t instanceof Error?t.message:String(t)})}}var cn=`local`;function ln(e){let t=Y().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function un(e){let t=Y().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(K(e).optionalApiKey?cn:null):null}function Z(e){return Y().find(t=>t.providerId===e)?.baseUrl??null}function dn(e){return Y().find(t=>t.providerId===e)?.deployment??null}function fn(e){return Y().find(t=>t.providerId===e)?.apiVersion??null}function Q(){let e=localStorage.getItem(G)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function pn(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...Tt(),...Rt()]),i=n.includes(`.`);if(r.has(n)||!i){localStorage.setItem(G,e);return}}let n=$();localStorage.setItem(G,`${n}:${e}`)}function mn(){return localStorage.getItem(G)||``}function $(){let e=mn(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=Y(),r=Q();if(r){let e=n.find(e=>zt(e.providerId)&&Bt(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>zt(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function hn(e){let t=Q();localStorage.setItem(G,`${e}:${t}`)}function gn(){let e=Q();localStorage.setItem(G,e)}function _n(){return un($())}function vn(e){let t=$();en(t,e,Z(t)??void 0)}async function yn(){await nn($())}function bn(){return Z($())}function xn(e){let t=$(),n=ln(t);n&&en(t,n,e||void 0)}function Sn(){let e=$(),t=ln(e);t&&en(e,t)}function Cn(){let e=Y(),t=$(),n=Q();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}async function wn(){let e=Y();await Promise.allSettled(e.map(e=>nn(e.providerId))),localStorage.removeItem(W),localStorage.removeItem(G);for(let e of At)localStorage.removeItem(e)}function Tn(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function En(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Tn(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Dn(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function On(e){if(!e)return kn();let t=$(),n=Z(t),r=K(t);try{let i=Ot(Dn(t,r),e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=q(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(J.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=q(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:En(t,e,n)}return kn()}}function kn(){let e=$(),t=Q(),n=Z(e),r=q(e),i=K(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=Dn(e,i),a=Ot(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){J.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?En(e,o,n):Ot(`anthropic`,`claude-sonnet-4-0`)}}function An(e){let t=e.toLowerCase();if(!t)return null;let n=null,r=-1;for(let e of Y())for(let i of q(e.providerId)){let e=i.id.toLowerCase(),a=(i.name??``).toLowerCase();if(!e.includes(t)&&!a.includes(t))continue;let o=i.contextWindow??0;(o>r||o===r&&jn(i.id,n??``)>0)&&(r=o,n=i.id)}return n}function jn(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{an as A,xn as B,K as C,$ as D,Q as E,kn as F,wt as G,Zt as H,On as I,Et as K,An as L,on as M,zt as N,Kt as O,nn as P,sn as R,Ht as S,ln as T,pn as U,Xt as V,hn as W,Rt as _,Wt as a,dn as b,Sn as c,Y as d,Jt as f,fn as g,un as h,en as i,Ft as j,rn as k,gn as l,_n as m,Lt as n,wn as o,Qt as p,Ct as q,Dt as r,yn as s,W as t,Cn as u,bn as v,q as w,Yt as x,Z as y,vn as z};