sliccy 3.5.4 → 3.6.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 (240) hide show
  1. package/README.md +1 -2
  2. package/dist/node-server/_cloud_core/src/errors.d.ts +14 -0
  3. package/dist/node-server/_cloud_core/src/errors.d.ts.map +1 -0
  4. package/dist/node-server/_cloud_core/src/errors.js +13 -0
  5. package/dist/node-server/_cloud_core/src/index.d.ts +19 -0
  6. package/dist/node-server/_cloud_core/src/index.d.ts.map +1 -0
  7. package/dist/node-server/_cloud_core/src/index.js +14 -0
  8. package/dist/node-server/_cloud_core/src/operations/kill.d.ts +18 -0
  9. package/dist/node-server/_cloud_core/src/operations/kill.d.ts.map +1 -0
  10. package/dist/node-server/_cloud_core/src/operations/kill.js +32 -0
  11. package/dist/node-server/_cloud_core/src/operations/list.d.ts +25 -0
  12. package/dist/node-server/_cloud_core/src/operations/list.d.ts.map +1 -0
  13. package/dist/node-server/_cloud_core/src/operations/list.js +145 -0
  14. package/dist/node-server/_cloud_core/src/operations/pause.d.ts +15 -0
  15. package/dist/node-server/_cloud_core/src/operations/pause.d.ts.map +1 -0
  16. package/dist/node-server/_cloud_core/src/operations/pause.js +27 -0
  17. package/dist/node-server/_cloud_core/src/operations/resume.d.ts +22 -0
  18. package/dist/node-server/_cloud_core/src/operations/resume.d.ts.map +1 -0
  19. package/dist/node-server/_cloud_core/src/operations/resume.js +86 -0
  20. package/dist/node-server/_cloud_core/src/operations/start.d.ts +67 -0
  21. package/dist/node-server/_cloud_core/src/operations/start.d.ts.map +1 -0
  22. package/dist/node-server/_cloud_core/src/operations/start.js +228 -0
  23. package/dist/node-server/_cloud_core/src/polling.d.ts +18 -0
  24. package/dist/node-server/_cloud_core/src/polling.d.ts.map +1 -0
  25. package/dist/node-server/_cloud_core/src/polling.js +79 -0
  26. package/dist/node-server/_cloud_core/src/registry.d.ts +27 -0
  27. package/dist/node-server/_cloud_core/src/registry.d.ts.map +1 -0
  28. package/dist/node-server/_cloud_core/src/registry.js +1 -0
  29. package/dist/node-server/_cloud_core/src/secrets-filter.d.ts +2 -0
  30. package/dist/node-server/_cloud_core/src/secrets-filter.d.ts.map +1 -0
  31. package/dist/node-server/_cloud_core/src/secrets-filter.js +17 -0
  32. package/dist/node-server/_cloud_core/src/substrate-factory.d.ts +3 -0
  33. package/dist/node-server/_cloud_core/src/substrate-factory.d.ts.map +1 -0
  34. package/dist/node-server/_cloud_core/src/substrate-factory.js +6 -0
  35. package/dist/node-server/_cloud_core/src/substrate.d.ts +53 -0
  36. package/dist/node-server/_cloud_core/src/substrate.d.ts.map +1 -0
  37. package/dist/node-server/_cloud_core/src/substrate.js +1 -0
  38. package/dist/node-server/_cloud_core/src/substrates/e2b.d.ts +3 -0
  39. package/dist/node-server/_cloud_core/src/substrates/e2b.d.ts.map +1 -0
  40. package/dist/node-server/_cloud_core/src/substrates/e2b.js +98 -0
  41. package/dist/node-server/_cloud_core/src/types.d.ts +94 -0
  42. package/dist/node-server/_cloud_core/src/types.d.ts.map +1 -0
  43. package/dist/node-server/_cloud_core/src/types.js +3 -0
  44. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.d.ts +39 -0
  45. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.d.ts.map +1 -0
  46. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.js +75 -0
  47. package/dist/node-server/_cloud_core/tests/fixtures/index.d.ts +4 -0
  48. package/dist/node-server/_cloud_core/tests/fixtures/index.d.ts.map +1 -0
  49. package/dist/node-server/_cloud_core/tests/fixtures/index.js +2 -0
  50. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.d.ts +10 -0
  51. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.d.ts.map +1 -0
  52. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.js +25 -0
  53. package/dist/node-server/_cloud_core/tests/kill.test.d.ts +2 -0
  54. package/dist/node-server/_cloud_core/tests/kill.test.d.ts.map +1 -0
  55. package/dist/node-server/_cloud_core/tests/kill.test.js +164 -0
  56. package/dist/node-server/_cloud_core/tests/list.test.d.ts +2 -0
  57. package/dist/node-server/_cloud_core/tests/list.test.d.ts.map +1 -0
  58. package/dist/node-server/_cloud_core/tests/list.test.js +300 -0
  59. package/dist/node-server/_cloud_core/tests/pause.test.d.ts +2 -0
  60. package/dist/node-server/_cloud_core/tests/pause.test.d.ts.map +1 -0
  61. package/dist/node-server/_cloud_core/tests/pause.test.js +167 -0
  62. package/dist/node-server/_cloud_core/tests/resume.test.d.ts +2 -0
  63. package/dist/node-server/_cloud_core/tests/resume.test.d.ts.map +1 -0
  64. package/dist/node-server/_cloud_core/tests/resume.test.js +203 -0
  65. package/dist/node-server/_cloud_core/tests/secrets-filter.test.d.ts +2 -0
  66. package/dist/node-server/_cloud_core/tests/secrets-filter.test.d.ts.map +1 -0
  67. package/dist/node-server/_cloud_core/tests/secrets-filter.test.js +30 -0
  68. package/dist/node-server/_cloud_core/tests/start.test.d.ts +2 -0
  69. package/dist/node-server/_cloud_core/tests/start.test.d.ts.map +1 -0
  70. package/dist/node-server/_cloud_core/tests/start.test.js +513 -0
  71. package/dist/node-server/chrome-launch.d.ts +1 -0
  72. package/dist/node-server/chrome-launch.js +3 -0
  73. package/dist/node-server/cloud/dispatch.d.ts +34 -0
  74. package/dist/node-server/cloud/dispatch.js +79 -0
  75. package/dist/node-server/cloud/kill.d.ts +12 -0
  76. package/dist/node-server/cloud/kill.js +11 -0
  77. package/dist/node-server/cloud/list.d.ts +6 -0
  78. package/dist/node-server/cloud/list.js +6 -0
  79. package/dist/node-server/cloud/pause.d.ts +7 -0
  80. package/dist/node-server/cloud/pause.js +6 -0
  81. package/dist/node-server/cloud/registry-file.d.ts +13 -0
  82. package/dist/node-server/cloud/registry-file.js +85 -0
  83. package/dist/node-server/cloud/resume.d.ts +11 -0
  84. package/dist/node-server/cloud/resume.js +17 -0
  85. package/dist/node-server/cloud/start.d.ts +16 -0
  86. package/dist/node-server/cloud/start.js +49 -0
  87. package/dist/node-server/cloud-status.d.ts +11 -0
  88. package/dist/node-server/cloud-status.js +49 -0
  89. package/dist/node-server/hosted-bootstrap.d.ts +21 -0
  90. package/dist/node-server/hosted-bootstrap.js +14 -0
  91. package/dist/node-server/index.js +146 -3
  92. package/dist/node-server/leader-restart.d.ts +29 -0
  93. package/dist/node-server/leader-restart.js +146 -0
  94. package/dist/node-server/runtime-flags.d.ts +1 -0
  95. package/dist/node-server/runtime-flags.js +6 -0
  96. package/dist/ui/assets/adobe-BLY_1hN7.js +1 -0
  97. package/dist/ui/assets/adobe-BZS2Kmci.js +2 -0
  98. package/dist/ui/assets/agent-bridge-BFRFxJAl.js +1 -0
  99. package/dist/ui/assets/{agent-message-to-chat-H07zq-Kv.js → agent-message-to-chat-Cd-DQATg.js} +1 -1
  100. package/dist/ui/assets/anthropic-BbwUhO9H.js +39 -0
  101. package/dist/ui/assets/{anthropic-BK3Od7MT.js → anthropic-Dg9_3G1u.js} +3 -3
  102. package/dist/ui/assets/{apps-mZJxOz_q.js → apps-BQuoIsxV.js} +1 -1
  103. package/dist/ui/assets/azure-openai-CilK3M_Q.js +1 -0
  104. package/dist/ui/assets/{azure-openai-Dch5aR9j.js → azure-openai-CleJGzBE.js} +1 -1
  105. package/dist/ui/assets/azure-openai-responses-DMLD0Ano.js +1 -0
  106. package/dist/ui/assets/azure-openai-responses-_joBD1ru.js +1 -0
  107. package/dist/ui/assets/{bsh-watchdog-i5GXbvla.js → bsh-watchdog-CpJwB685.js} +1 -1
  108. package/dist/ui/assets/{cdp-Cv6W51Ld.js → cdp-BXSNdZRM.js} +3 -3
  109. package/dist/ui/assets/cloud-CCHD45tb.js +1 -0
  110. package/dist/ui/assets/cloud-DyAca2cv.css +1 -0
  111. package/dist/ui/assets/cost-command-Bv5UQVUC.js +1 -0
  112. package/dist/ui/assets/{dist-cK1g1pHF.js → dist-ChvbMSOY.js} +1 -1
  113. package/dist/ui/assets/{dist-BTGs16AV.js → dist-CltZJzbd.js} +1 -1
  114. package/dist/ui/assets/{dist-BcBxL8nL.js → dist-cZSF0917.js} +1 -1
  115. package/dist/ui/assets/{dist-Bgcuvc8h.js → dist-ljtB3O-J.js} +1 -1
  116. package/dist/ui/assets/{dist-EkY3RL7q.js → dist-tLLu0PBg.js} +1 -1
  117. package/dist/ui/assets/{es-Crcyr8Z7.js → es-C2wm9v2H.js} +1 -1
  118. package/dist/ui/assets/follower-sprinkle-bridge-Bg1mCcnG.js +1 -0
  119. package/dist/ui/assets/{github-DKcpc18I.js → github-BDzC2pCD.js} +1 -1
  120. package/dist/ui/assets/github-BzwlgA3s.js +2 -0
  121. package/dist/ui/assets/{google-IZXg3PJn.js → google-BVxsfaV3.js} +1 -1
  122. package/dist/ui/assets/google-C0Zd1qsl.js +1 -0
  123. package/dist/ui/assets/google-shared-DcZhZ_Z7.js +11 -0
  124. package/dist/ui/assets/{google-shared-BaIigNCs.js → google-shared-KyLYJrXa.js} +1 -1
  125. package/dist/ui/assets/google-vertex-BGpbWEWq.js +1 -0
  126. package/dist/ui/assets/{google-vertex-DDwmtWoJ.js → google-vertex-BSOalca9.js} +1 -1
  127. package/dist/ui/assets/{intercepted-oauth-CEgKdcyY.js → intercepted-oauth-D6eAxYca.js} +1 -1
  128. package/dist/ui/assets/{kernel-worker-dg2bRx7X.js → kernel-worker-D1_EtuZW.js} +1016 -980
  129. package/dist/ui/assets/{lick-ws-bridge-DgWfdUlv.js → lick-ws-bridge-DXFDOui-.js} +1 -1
  130. package/dist/ui/assets/{local-llm-DuUGv7wX.js → local-llm-B3qsU55x.js} +1 -1
  131. package/dist/ui/assets/magick-wasm-CasStH-w.js +1 -0
  132. package/dist/ui/assets/main-BSfjQXCf.js +1612 -0
  133. package/dist/ui/assets/{mistral-czd8-m0c.js → mistral-BkhZQqeV.js} +1 -1
  134. package/dist/ui/assets/{mistral-BS_Gm2MH.js → mistral-D130SR-b.js} +1 -1
  135. package/dist/ui/assets/modulepreload-polyfill-wMinxHhO.js +1 -0
  136. package/dist/ui/assets/nuke-command-D_sxu_AA.js +1 -0
  137. package/dist/ui/assets/{oauth-CJxNn7hC.js → oauth-BocTO4G9.js} +1 -1
  138. package/dist/ui/assets/oauth-bootstrap-DZdd7KZS.js +2 -0
  139. package/dist/ui/assets/{oauth-service-BAnfipgD.js → oauth-service-DAWR1CpY.js} +1 -1
  140. package/dist/ui/assets/oauth-service-y04jhWb_.js +1 -0
  141. package/dist/ui/assets/offscreen-client-HCLuFFlN.js +1 -0
  142. package/dist/ui/assets/onboarding-orchestrator-qbEVluIu.js +1 -0
  143. package/dist/ui/assets/openai-codex-responses-Bmd17Jq9.js +7 -0
  144. package/dist/ui/assets/openai-codex-responses-CMOclqki.js +7 -0
  145. package/dist/ui/assets/openai-completions-DmwgEsb4.js +5 -0
  146. package/dist/ui/assets/openai-responses-BYdEOxUq.js +1 -0
  147. package/dist/ui/assets/openai-responses-C3bs8sd1.js +1 -0
  148. package/dist/ui/assets/{openai-responses-shared-DDootAUL.js → openai-responses-shared-AM04ghTC.js} +1 -1
  149. package/dist/ui/assets/{openai-responses-shared-07lPyxEg.js → openai-responses-shared-Be22tDzQ.js} +1 -1
  150. package/dist/ui/assets/openrouter-BIFqVYxG.js +1 -0
  151. package/dist/ui/assets/openrouter-Dc1D0QOS.js +1 -0
  152. package/dist/ui/assets/panel-rpc-handlers-DDaHHzWR.js +1 -0
  153. package/dist/ui/assets/{provider-rBD-3FHW.js → provider-CU5ao6kF.js} +2 -2
  154. package/dist/ui/assets/{provider-BhabAJGA.js → provider-ChUiWhH0.js} +1 -1
  155. package/dist/ui/assets/provider-store-access-Bliwcbgg.js +1 -0
  156. package/dist/ui/assets/provider-store-access-iTh_6mMO.js +1 -0
  157. package/dist/ui/assets/proxied-fetch-8v3TaZYg.js +1 -0
  158. package/dist/ui/assets/{pyodide-BC4PaR54.js → pyodide-B7x60zRI.js} +2 -2
  159. package/dist/ui/assets/{remote-terminal-view-CXbFLcuS.js → remote-terminal-view-BREvd00U.js} +1 -1
  160. package/dist/ui/assets/secret-env-Js2g2sNO.js +1 -0
  161. package/dist/ui/assets/slicc-editor-Bu07BjW4.js +12 -0
  162. package/dist/ui/assets/{spawn-qtlw6x6p.js → spawn-CQ5XACZ1.js} +1 -1
  163. package/dist/ui/assets/{sql-wasm-DeVtn0z8.js → sql-wasm-C-pXJvOw.js} +1 -1
  164. package/dist/ui/assets/{store-DLeVoNF3.js → store-DQUahHdW.js} +1 -1
  165. package/dist/ui/assets/tray-leave-runtime-BEBMIYY_.js +1 -0
  166. package/dist/ui/assets/{upgrade-detection-CKrzeeRx.js → upgrade-detection-T74KTnyb.js} +1 -1
  167. package/dist/ui/assets/{xai-grok-CNyu04Tg.js → xai-grok-CkPPMxfZ.js} +1 -1
  168. package/dist/ui/assets/{xai-grok-sanitize-BeI8rdV5.js → xai-grok-sanitize-C7TgWvwD.js} +1 -1
  169. package/dist/ui/assets/{xai-grok-sanitize-h_8XMTD9.js → xai-grok-sanitize-L5nUbDcW.js} +1 -1
  170. package/dist/ui/assets/xai-grok-u9MyUN8m.js +1 -0
  171. package/dist/ui/electron-overlay-entry.js +9 -9
  172. package/dist/ui/index.html +3 -2
  173. package/dist/ui/packages/webapp/cloud/index.html +38 -0
  174. package/dist/ui/packages/webapp/index.html +3 -2
  175. package/package.json +10 -8
  176. package/dist/ui/assets/adobe-DpCIcyEb.js +0 -2
  177. package/dist/ui/assets/adobe-NMBK1vG2.js +0 -1
  178. package/dist/ui/assets/agent-bridge-D2k69QZ-.js +0 -1
  179. package/dist/ui/assets/anthropic-ZtfIcLyL.js +0 -39
  180. package/dist/ui/assets/azure-openai-CN9QA_pv.js +0 -1
  181. package/dist/ui/assets/azure-openai-responses-Bhr0mNdj.js +0 -1
  182. package/dist/ui/assets/azure-openai-responses-D400BxTc.js +0 -1
  183. package/dist/ui/assets/cost-command-BGqK_hbH.js +0 -1
  184. package/dist/ui/assets/follower-sprinkle-bridge-BayCf20v.js +0 -1
  185. package/dist/ui/assets/github-DpDjTcq9.js +0 -2
  186. package/dist/ui/assets/google-B97zVBac.js +0 -1
  187. package/dist/ui/assets/google-shared-DwzANLbz.js +0 -11
  188. package/dist/ui/assets/google-vertex-ICKJGS1M.js +0 -1
  189. package/dist/ui/assets/index-CCGqFzR9.js +0 -1575
  190. package/dist/ui/assets/magick-wasm-Bu7zx3Ux.js +0 -1
  191. package/dist/ui/assets/nuke-command-BSkSFZ4H.js +0 -1
  192. package/dist/ui/assets/oauth-bootstrap-BeZQrd7y.js +0 -2
  193. package/dist/ui/assets/oauth-service-BX55wTV9.js +0 -1
  194. package/dist/ui/assets/offscreen-client-DSEhUCxj.js +0 -1
  195. package/dist/ui/assets/onboarding-orchestrator-DjNti83y.js +0 -1
  196. package/dist/ui/assets/openai-codex-responses-DJKJH9AX.js +0 -7
  197. package/dist/ui/assets/openai-codex-responses-jB5RkWeq.js +0 -7
  198. package/dist/ui/assets/openai-completions-BWWM3S2J.js +0 -5
  199. package/dist/ui/assets/openai-responses-C_3YpAmj.js +0 -1
  200. package/dist/ui/assets/openai-responses-tJegTQYT.js +0 -1
  201. package/dist/ui/assets/panel-rpc-handlers-B4jZTNHO.js +0 -1
  202. package/dist/ui/assets/provider-store-access-H9Lu5HRL.js +0 -1
  203. package/dist/ui/assets/provider-store-access-biaB--zG.js +0 -1
  204. package/dist/ui/assets/proxied-fetch-C6dm2Ugc.js +0 -1
  205. package/dist/ui/assets/secret-env-s_8cP7Wf.js +0 -1
  206. package/dist/ui/assets/slicc-editor-pZcWEwTm.js +0 -12
  207. package/dist/ui/assets/tray-leave-runtime-DqA9PbxV.js +0 -1
  208. package/dist/ui/assets/xai-grok-CN1nP4TF.js +0 -1
  209. /package/dist/ui/assets/{active-transport-CfU1UxY6.js → active-transport-Clj9slj7.js} +0 -0
  210. /package/dist/ui/assets/{active-transport-Dm6CWYVE.js → active-transport-DHcaBd4j.js} +0 -0
  211. /package/dist/ui/assets/{addon-fit-BDUxDgg1.js → addon-fit-CBG3Hsec.js} +0 -0
  212. /package/dist/ui/assets/{addon-fit-Dkm5m5XK.js → addon-fit-CUt9lrQO.js} +0 -0
  213. /package/dist/ui/assets/{azure-ai-foundry-BHLfY_0t.js → azure-ai-foundry-B4QrVklT.js} +0 -0
  214. /package/dist/ui/assets/{azure-ai-foundry-1pnZpxAJ.js → azure-ai-foundry-CGkSI_4f.js} +0 -0
  215. /package/dist/ui/assets/{chat-fixture-DOzffHLr.js → chat-fixture-ChGRNFda.js} +0 -0
  216. /package/dist/ui/assets/{dist-BYoCEWmq.js → dist-9RlRmGag.js} +0 -0
  217. /package/dist/ui/assets/{dist-BNe7ZIzA.js → dist-CZcDRTma.js} +0 -0
  218. /package/dist/ui/assets/{dist-BrjVVq8c.js → dist-D0kTaNET.js} +0 -0
  219. /package/dist/ui/assets/{git-config-CGMfR0WK.js → git-config-DcQbkikl.js} +0 -0
  220. /package/dist/ui/assets/{github-copilot-headers-CTUP_cqn.js → github-copilot-headers-C5CocKfn.js} +0 -0
  221. /package/dist/ui/assets/{global-db-B97_fwjD.js → global-db-DL3jdM9H.js} +0 -0
  222. /package/dist/ui/assets/{hash-B9Dtr1VK.js → hash-iitWbNjK.js} +0 -0
  223. /package/dist/ui/assets/{headers-AeYLn7L4.js → headers-qDMOQQGF.js} +0 -0
  224. /package/dist/ui/assets/{lick-manager-proxy-BnnMFbgv.js → lick-manager-proxy-1L0EGIWD.js} +0 -0
  225. /package/dist/ui/assets/{index-CvlDeETm.css → main-CvlDeETm.css} +0 -0
  226. /package/dist/ui/assets/{openai-Bf1npfRy.js → openai-BR_xAflc.js} +0 -0
  227. /package/dist/ui/assets/{page-storage-sync-CqMAh8jG.js → page-storage-sync-sv2ogNKh.js} +0 -0
  228. /package/dist/ui/assets/{pdfjs-DDDkZHZ4.js → pdfjs-CW51NNE6.js} +0 -0
  229. /package/dist/ui/assets/{rum-DCU8sePD.js → rum-z5wz4Dnj.js} +0 -0
  230. /package/dist/ui/assets/{sanitize-unicode-h0KEBmEw.js → sanitize-unicode-B1z_Y4Dq.js} +0 -0
  231. /package/dist/ui/assets/{sprinkle-bridge-channel-DojIojh7.js → sprinkle-bridge-channel-Bw5UaanD.js} +0 -0
  232. /package/dist/ui/assets/{sprinkle-bridge-channel-DJC5SGWr.js → sprinkle-bridge-channel-ChD0T07C.js} +0 -0
  233. /package/dist/ui/assets/{sprinkle-proxy-rF3NSOGq.js → sprinkle-proxy-D6wqmewK.js} +0 -0
  234. /package/dist/ui/assets/{src-BQRb5emh.js → src-DRmQ1wr-.js} +0 -0
  235. /package/dist/ui/assets/{xai-grok-errors-Bzn3oNvW.js → xai-grok-errors-BdY43UIn.js} +0 -0
  236. /package/dist/ui/assets/{xai-grok-errors-WbFsMZum.js → xai-grok-errors-C6VnD_MH.js} +0 -0
  237. /package/dist/ui/assets/{xai-grok-models-cvcIXmNM.js → xai-grok-models-BndZgIFZ.js} +0 -0
  238. /package/dist/ui/assets/{xai-grok-models-DMYWtapT.js → xai-grok-models-C9MIa-Aj.js} +0 -0
  239. /package/dist/ui/assets/{xterm-D8ldLLKi.js → xterm-DLCsxsB1.js} +0 -0
  240. /package/dist/ui/assets/{xterm-DhusGoAm.js → xterm-VndicwFp.js} +0 -0
@@ -1 +1 @@
1
- import{G as e,I as t,N as n,R as r,p as i,v as a}from"./kernel-worker-dg2bRx7X.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-WbFsMZum.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-cvcIXmNM.js";import{sanitizePayload as u}from"./xai-grok-sanitize-BeI8rdV5.js";const d=`xai-grok`,f=`https://auth.x.ai`,p=`${f}/oauth2/authorize`,m=`${f}/oauth2/token`,h=`b1a00492-073a-47ea-816f-4c329264a828`,g=`http://127.0.0.1:56121/callback`,_=`https://api.x.ai/v1`,v=`openai-responses`,y=`${d}-openai`;function b(){return typeof process>`u`?null:{}?.PI_XAI_OAUTH_MODELS??null}const x=c(b());function S(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function C(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}function w(){return S(C(32))}async function T(e){let t=new TextEncoder().encode(e);return S(new Uint8Array(await crypto.subtle.digest(`SHA-256`,t)))}function E(){return S(C(16))}async function D(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:g,client_id:h,code_verifier:t}),r=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new s(`xAI token exchange failed: ${r.status} ${await r.text()}`,o.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new s(`xAI token exchange did not return access_token.`,o.TOKEN_EXCHANGE_INVALID);return i}async function O(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:h}),n=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function k(){return i().find(e=>e.providerId===d)}async function A(){let e=k();if(!e?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let t=e.tokenExpiresAt??0;if(t&&Date.now()+6e4<t)return e.accessToken;if(e.refreshToken){let t=await O(e.refreshToken);if(t?.access_token)return await a({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function j(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:y,provider:d,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function M(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function N(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}const P=(e,t,i={})=>{let a=r();return(async()=>{try{let r=await A(),o=i.sessionId,s=n({...e,baseUrl:_,api:v},t,{...i,apiKey:r,headers:N(i.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},F=(e,n,i)=>{let a=r();return(async()=>{try{let r=await A(),o=i?.sessionId,s=t({...e,baseUrl:_,api:v},n,{...i,apiKey:r,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=w(),i=await T(r),c=E(),l=E(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,g),u.searchParams.set(`scope`,n?.scopes??`openid profile email offline_access grok-cli:access api:access`),u.searchParams.set(`code_challenge`,i),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),v=m.searchParams.get(`code`),y=m.searchParams.get(`state`);if(!v)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(y!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let b=await D(v,r);await a({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),t()},onOAuthLogout:async()=>{await a({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=k();if(!e?.refreshToken)return null;let t=await O(e.refreshToken);return t?.access_token?(await a({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function L(){e({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
1
+ import{G as e,I as t,N as n,R as r,p as i,v as a}from"./kernel-worker-D1_EtuZW.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-C6VnD_MH.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-BndZgIFZ.js";import{sanitizePayload as u}from"./xai-grok-sanitize-L5nUbDcW.js";const d=`xai-grok`,f=`https://auth.x.ai`,p=`${f}/oauth2/authorize`,m=`${f}/oauth2/token`,h=`b1a00492-073a-47ea-816f-4c329264a828`,g=`http://127.0.0.1:56121/callback`,_=`https://api.x.ai/v1`,v=`openai-responses`,y=`${d}-openai`;function b(){return typeof process>`u`?null:{}?.PI_XAI_OAUTH_MODELS??null}const x=c(b());function S(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function C(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}function w(){return S(C(32))}async function T(e){let t=new TextEncoder().encode(e);return S(new Uint8Array(await crypto.subtle.digest(`SHA-256`,t)))}function E(){return S(C(16))}async function D(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:g,client_id:h,code_verifier:t}),r=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new s(`xAI token exchange failed: ${r.status} ${await r.text()}`,o.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new s(`xAI token exchange did not return access_token.`,o.TOKEN_EXCHANGE_INVALID);return i}async function O(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:h}),n=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function k(){return i().find(e=>e.providerId===d)}async function A(){let e=k();if(!e?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let t=e.tokenExpiresAt??0;if(t&&Date.now()+6e4<t)return e.accessToken;if(e.refreshToken){let t=await O(e.refreshToken);if(t?.access_token)return await a({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function j(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:y,provider:d,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function M(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function N(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}const P=(e,t,i={})=>{let a=r();return(async()=>{try{let r=await A(),o=i.sessionId,s=n({...e,baseUrl:_,api:v},t,{...i,apiKey:r,headers:N(i.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},F=(e,n,i)=>{let a=r();return(async()=>{try{let r=await A(),o=i?.sessionId,s=t({...e,baseUrl:_,api:v},n,{...i,apiKey:r,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=w(),i=await T(r),c=E(),l=E(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,g),u.searchParams.set(`scope`,n?.scopes??`openid profile email offline_access grok-cli:access api:access`),u.searchParams.set(`code_challenge`,i),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),v=m.searchParams.get(`code`),y=m.searchParams.get(`state`);if(!v)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(y!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let b=await D(v,r);await a({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),t()},onOAuthLogout:async()=>{await a({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=k();if(!e?.refreshToken)return null;let t=await O(e.refreshToken);return t?.access_token?(await a({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function L(){e({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
@@ -1,4 +1,4 @@
1
- import{supportsReasoningEffort as e}from"./xai-grok-models-cvcIXmNM.js";function t(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return``;let t=e,n=typeof t.type==`string`?t.type:``;return[`text`,`input_text`,`output_text`].includes(n)&&typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
1
+ import{supportsReasoningEffort as e}from"./xai-grok-models-C9MIa-Aj.js";function t(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return``;let t=e,n=typeof t.type==`string`?t.type:``;return[`text`,`input_text`,`output_text`].includes(n)&&typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
2
2
  `):``}function n(e){let t=e.trim();return t.length>=2&&(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))?t.slice(1,-1):t}function r(e){if(typeof e!=`string`||!e.trim())return;let t=n(e);if(/^https?:\/\//i.test(t)||/^data:image\//i.test(t))return t;console.warn(`[xai-grok] Dropping non-http/data image reference (slicc cannot resolve local paths in the browser):`,t)}function i(e){return!!e&&typeof e==`object`&&e.type===`input_image`}function a(e){if(Array.isArray(e))return e.map(a).filter(e=>e!==null);if(!e||typeof e!=`object`)return e;let t={...e};if(t.type===`image`&&typeof t.data==`string`&&typeof t.mimeType==`string`)return{type:`input_image`,image_url:`data:${t.mimeType};base64,${t.data}`,detail:typeof t.detail==`string`&&t.detail?t.detail:`auto`};if(t.type===`image_url`){let e=typeof t.image_url==`object`&&t.image_url?t.image_url.url:t.image_url,n=typeof t.image_url==`object`&&t.image_url?t.image_url.detail:t.detail;t.type=`input_image`,t.image_url=e,typeof n==`string`&&n&&(t.detail=n)}if(t.type===`input_image`){let e=typeof t.image_url==`object`&&t.image_url?t.image_url.url:t.image_url,n=typeof t.image_url==`object`&&t.image_url?t.image_url.detail:t.detail,i=r(e);if(i)t.image_url=i;else return null;typeof n==`string`&&n&&(t.detail=n),(typeof t.detail!=`string`||!t.detail)&&(t.detail=`auto`)}return Array.isArray(t.content)&&(t.content=a(t.content)),Array.isArray(t.output)&&(t.output=a(t.output)),t}function o(e){let t=[];for(let n of e){if(!n||typeof n!=`object`||n.type!==`function_call_output`||!Array.isArray(n.output)){t.push(n);continue}let e=n.output,r=e.filter(i),a=e.filter(e=>!i(e)),o=[];for(let e of a)if(typeof e==`string`)o.push(e);else if(e&&typeof e==`object`){let t=e;typeof t.text==`string`&&o.push(t.text)}let s=o.join(`
3
3
  `)||`(tool returned no text output)`;if(t.push({...n,output:s}),r.length>0){let e=`The previous tool result${n.call_id?` (${String(n.call_id)})`:``} included ${r.length} image${r.length===1?``:`s`}. Use the attached image${r.length===1?``:`s`} as the visual output from that tool.`;t.push({role:`user`,content:[{type:`input_text`,text:e},...r]})}}return t}function s(n,r,i){let s=n;if(Array.isArray(s.input)){let e=s.input.map(e=>{if(!e||typeof e!=`object`)return e;let t=e;return t.type===`reasoning`||typeof t.content==`string`&&t.content.length===0?null:t}).filter(Boolean),n=[];for(;e.length>0;){let r=e[0];if(!r||typeof r!=`object`)break;let i=r.role;if(i!==`developer`&&i!==`system`)break;let a=t(r.content).trim();a&&n.push(a),e.shift()}n.length>0&&(s.instructions=[typeof s.instructions==`string`&&s.instructions?s.instructions:``,...n].filter(e=>e.length>0).join(`
4
4
 
@@ -1,4 +1,4 @@
1
- import{supportsReasoningEffort as e}from"./xai-grok-models-DMYWtapT.js";function t(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return``;let t=e,n=typeof t.type==`string`?t.type:``;return[`text`,`input_text`,`output_text`].includes(n)&&typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
1
+ import{supportsReasoningEffort as e}from"./xai-grok-models-BndZgIFZ.js";function t(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return``;let t=e,n=typeof t.type==`string`?t.type:``;return[`text`,`input_text`,`output_text`].includes(n)&&typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
2
2
  `):``}function n(e){let t=e.trim();return t.length>=2&&(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))?t.slice(1,-1):t}function r(e){if(typeof e!=`string`||!e.trim())return;let t=n(e);if(/^https?:\/\//i.test(t)||/^data:image\//i.test(t))return t;console.warn(`[xai-grok] Dropping non-http/data image reference (slicc cannot resolve local paths in the browser):`,t)}function i(e){return!!e&&typeof e==`object`&&e.type===`input_image`}function a(e){if(Array.isArray(e))return e.map(a).filter(e=>e!==null);if(!e||typeof e!=`object`)return e;let t={...e};if(t.type===`image`&&typeof t.data==`string`&&typeof t.mimeType==`string`)return{type:`input_image`,image_url:`data:${t.mimeType};base64,${t.data}`,detail:typeof t.detail==`string`&&t.detail?t.detail:`auto`};if(t.type===`image_url`){let e=typeof t.image_url==`object`&&t.image_url?t.image_url.url:t.image_url,n=typeof t.image_url==`object`&&t.image_url?t.image_url.detail:t.detail;t.type=`input_image`,t.image_url=e,typeof n==`string`&&n&&(t.detail=n)}if(t.type===`input_image`){let e=typeof t.image_url==`object`&&t.image_url?t.image_url.url:t.image_url,n=typeof t.image_url==`object`&&t.image_url?t.image_url.detail:t.detail,i=r(e);if(i)t.image_url=i;else return null;typeof n==`string`&&n&&(t.detail=n),(typeof t.detail!=`string`||!t.detail)&&(t.detail=`auto`)}return Array.isArray(t.content)&&(t.content=a(t.content)),Array.isArray(t.output)&&(t.output=a(t.output)),t}function o(e){let t=[];for(let n of e){if(!n||typeof n!=`object`||n.type!==`function_call_output`||!Array.isArray(n.output)){t.push(n);continue}let e=n.output,r=e.filter(i),a=e.filter(e=>!i(e)),o=[];for(let e of a)if(typeof e==`string`)o.push(e);else if(e&&typeof e==`object`){let t=e;typeof t.text==`string`&&o.push(t.text)}let s=o.join(`
3
3
  `)||`(tool returned no text output)`;if(t.push({...n,output:s}),r.length>0){let e=`The previous tool result${n.call_id?` (${String(n.call_id)})`:``} included ${r.length} image${r.length===1?``:`s`}. Use the attached image${r.length===1?``:`s`} as the visual output from that tool.`;t.push({role:`user`,content:[{type:`input_text`,text:e},...r]})}}return t}function s(n,r,i){let s=n;if(Array.isArray(s.input)){let e=s.input.map(e=>{if(!e||typeof e!=`object`)return e;let t=e;return t.type===`reasoning`||typeof t.content==`string`&&t.content.length===0?null:t}).filter(Boolean),n=[];for(;e.length>0;){let r=e[0];if(!r||typeof r!=`object`)break;let i=r.role;if(i!==`developer`&&i!==`system`)break;let a=t(r.content).trim();a&&n.push(a),e.shift()}n.length>0&&(s.instructions=[typeof s.instructions==`string`&&s.instructions?s.instructions:``,...n].filter(e=>e.length>0).join(`
4
4
 
@@ -0,0 +1 @@
1
+ import{B as e,F as t,K as n,R as r,h as i,l as a}from"./main-BSfjQXCf.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-BdY43UIn.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-C9MIa-Aj.js";import{sanitizePayload as u}from"./xai-grok-sanitize-C7TgWvwD.js";var d=`xai-grok`,f=`https://auth.x.ai`,p=`${f}/oauth2/authorize`,m=`${f}/oauth2/token`,h=`b1a00492-073a-47ea-816f-4c329264a828`,g=`openid profile email offline_access grok-cli:access api:access`,_=`http://127.0.0.1:56121/callback`,v=`http://127.0.0.1:56121/*`,y=`https://api.x.ai/v1`,b=`openai-responses`,x=`${d}-openai`;function S(){return typeof process>`u`?null:{}?.PI_XAI_OAUTH_MODELS??null}var C=c(S());function w(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function T(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}function E(){return w(T(32))}async function D(e){let t=new TextEncoder().encode(e);return w(new Uint8Array(await crypto.subtle.digest(`SHA-256`,t)))}function O(){return w(T(16))}async function k(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:_,client_id:h,code_verifier:t}),r=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new s(`xAI token exchange failed: ${r.status} ${await r.text()}`,o.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new s(`xAI token exchange did not return access_token.`,o.TOKEN_EXCHANGE_INVALID);return i}async function A(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:h}),n=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function j(){return a().find(e=>e.providerId===d)}async function M(){let e=j();if(!e?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let t=e.tokenExpiresAt??0;if(t&&Date.now()+6e4<t)return e.accessToken;if(e.refreshToken){let t=await A(e.refreshToken);if(t?.access_token)return await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function N(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:x,provider:d,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function P(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function F(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}var I=(n,r,i={})=>{let a=e();return(async()=>{try{let e=await M(),o=i.sessionId,s=t({...n,baseUrl:y,api:b},r,{...i,apiKey:e,headers:F(i.headers,o),onPayload:P(n.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(n,e)),a.end()}})(),a},L=(t,n,i)=>{let a=e();return(async()=>{try{let e=await M(),o=i?.sessionId,s=r({...t,baseUrl:y,api:b},n,{...i,apiKey:e,headers:F(i?.headers,o),onPayload:P(t.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(t,e)),a.end()}})(),a},R={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>C.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=E(),a=await D(r),c=O(),l=O(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,_),u.searchParams.set(`scope`,n?.scopes??g),u.searchParams.set(`code_challenge`,a),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:v,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),b=m.searchParams.get(`code`),x=m.searchParams.get(`state`);if(!b)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(x!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let S=await k(b,r);await i({providerId:d,accessToken:S.access_token,refreshToken:S.refresh_token,tokenExpiresAt:Date.now()+(S.expires_in??21600)*1e3,baseUrl:y}),t()},onOAuthLogout:async()=>{await i({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=j();if(!e?.refreshToken)return null;let t=await A(e.refreshToken);return t?.access_token?(await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function z(){n({api:x,stream:I,streamSimple:L})}export{o as XaiErrorCode,s as XaiOAuthError,R as config,z as register};
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var B=[{id:"chat",label:"Chat"},{id:"terminal",label:"Terminal"},{id:"files",label:"Files"},{id:"memory",label:"Memory"}],F=B,M="chat",ue=new Set(B.map(r=>r.id));function u(r,e=M){return r&&r.length>0?r:e}var te=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],re="top-right",oe=6,ne=12,ae=.6;function m(r,e=re){return te.includes(r)?r:e}function T(r={}){return{open:r.open??!1,activeTab:u(r.activeTab,M),corner:m(r.corner)}}function j(r){return{...r,open:!r.open}}function C(r,e){return r.open===e?r:{...r,open:e}}function A(r,e){let t=u(e,r.activeTab);return r.activeTab===t?r:{...r,activeTab:t}}function O(r,e){let t=m(e,r.corner);return r.corner===t?r:{...r,corner:t}}function R(r,e){return r>=oe||r>=ne&&e>=ae}function q({clientX:r,clientY:e,viewportWidth:t,viewportHeight:o,velocityXPxPerMs:n=0,velocityYPxPerMs:a=0,flickProjectionMs:s=180}){let l=H(r+n*s,0,t),p=H(e+a*s,0,o),i=l/t,c=p/o,d=i>1/3&&i<2/3,h=c>1/3&&c<2/3;if(d&&h){let f=c,b=1-c,S=i,g=1-i,w=Math.min(f,b,S,g);return w===f?"top":w===b?"bottom":w===S?"left":"right"}if(d)return c<.5?"top":"bottom";if(h)return i<.5?"left":"right";let E=i<.5?"left":"right";return`${c<.5?"top":"bottom"}-${E}`}function H(r,e,t){return Math.min(Math.max(r,e),t)}var Z="slicc-electron-overlay:set-tab";var $=`<?xml version="1.0" encoding="UTF-8"?>
1
+ "use strict";(()=>{var B=[{id:"chat",label:"Chat"},{id:"terminal",label:"Terminal"},{id:"files",label:"Files"},{id:"memory",label:"Memory"}],H=B,M="chat",ue=new Set(B.map(r=>r.id));function u(r,e=M){return r&&r.length>0?r:e}var te=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],re="top-right",oe=6,ne=12,ae=.6;function m(r,e=re){return te.includes(r)?r:e}function T(r={}){return{open:r.open??!1,activeTab:u(r.activeTab,M),corner:m(r.corner)}}function j(r){return{...r,open:!r.open}}function C(r,e){return r.open===e?r:{...r,open:e}}function A(r,e){let t=u(e,r.activeTab);return r.activeTab===t?r:{...r,activeTab:t}}function R(r,e){let t=m(e,r.corner);return r.corner===t?r:{...r,corner:t}}function O(r,e){return r>=oe||r>=ne&&e>=ae}function q({clientX:r,clientY:e,viewportWidth:t,viewportHeight:o,velocityXPxPerMs:n=0,velocityYPxPerMs:a=0,flickProjectionMs:s=180}){let l=F(r+n*s,0,t),p=F(e+a*s,0,o),i=l/t,c=p/o,d=i>1/3&&i<2/3,h=c>1/3&&c<2/3;if(d&&h){let f=c,b=1-c,S=i,g=1-i,w=Math.min(f,b,S,g);return w===f?"top":w===b?"bottom":w===S?"left":"right"}if(d)return c<.5?"top":"bottom";if(h)return i<.5?"left":"right";let E=i<.5?"left":"right";return`${c<.5?"top":"bottom"}-${E}`}function F(r,e,t){return Math.min(Math.max(r,e),t)}var Z="slicc-electron-overlay:set-tab";var $=`<?xml version="1.0" encoding="UTF-8"?>
2
2
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><g transform="translate(191.47118749999993, 12.583024999999978) scale(1.1115000000000002)"><g transform="translate(0, 0)"><g id="Cone">
3
3
  <path id="Cone_Bottom" data-name="Cone Bottom" d="M108.22,414.88l189.84,460.03c1.36,3.3,6.09,3.16,7.25-.22l159.34-463.34c.87-2.53-1.03-5.16-3.7-5.13l-349.18,3.32c-2.74.03-4.59,2.82-3.55,5.35Z" style="fill: rgb(34, 34, 34); stroke: rgb(255, 255, 255); stroke-linejoin: round; stroke-width: 20px;"/>
4
4
  <g id="Waffle_Cross-Hatch" data-name="Waffle Cross-Hatch">
@@ -50,7 +50,7 @@
50
50
  </g><g id="Left_Eye" data-name="Left Eye">
51
51
  <circle id="Right_Eye_Outline" data-name="Right Eye Outline" cx="175.1" cy="250.34" r="64.78" style="fill: #fff; stroke: #000; stroke-miterlimit: 10; stroke-width: 6px;"/>
52
52
  <path id="Left_Pupil" data-name="Left Pupil" d="M213.74,233.23c-.13,1.98-.7,3.97-1.76,5.81-3.71,6.43-11.93,8.63-18.36,4.92-6.43-3.71-8.63-11.93-4.92-18.36,2.32-4.02,6.4-6.38,10.7-6.69-3.8-1.78-8.03-2.8-12.51-2.8-16.37,0-29.64,13.27-29.64,29.64s13.27,29.64,29.64,29.64,29.64-13.27,29.64-29.64c0-4.48-1.02-8.72-2.81-12.53Z" style="fill: rgb(0, 0, 0);"/>
53
- </g></g></g></svg>`;var U="slicc-electron-overlay-root",N="slicc-electron-overlay",pe="Semicolon",K=";",de="slicc-electron-overlay:toggle",L="slicc-electron-launcher",k="slicc-electron-sidebar",v="",y=18,J="slicc-electron-overlay-launcher-corner";function X(r,e){let t=r.createElement("style");return t.textContent=e,t}function z(r){return r.replace(/<\?xml[^?]*\?>\s*/i,"")}var V=`
53
+ </g></g></g></svg>`;var U="slicc-electron-overlay-root",N="slicc-electron-overlay",pe="Semicolon",K=";",de="slicc-electron-overlay:toggle",L="slicc-electron-launcher",k="slicc-electron-sidebar",v="",y=18,J="slicc-electron-overlay-launcher-corner";function V(r,e){let t=r.createElement("style");return t.textContent=e,t}function z(r){return r.replace(/<\?xml[^?]*\?>\s*/i,"")}var X=`
54
54
  :host {
55
55
  color-scheme: dark light;
56
56
  --s2-gray-25: #1a1a1a;
@@ -99,8 +99,8 @@
99
99
  --s2-shadow-elevated: 0 10px 32px rgba(0, 0, 0, 0.14), 0 2px 10px rgba(0, 0, 0, 0.08);
100
100
  }
101
101
  }
102
- `;function ge(r,e){try{let t=new URL(r,window.location.href);return t.searchParams.set("tab",e),t.toString()}catch{return r}}var P=class extends HTMLElement{static observedAttributes=["open","corner"];button=null;pointerState=null;suppressClick=!1;connectedCallback(){this.shadowRoot||this.render(),this.sync()}attributeChangedCallback(){this.sync()}render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument,o=y;e.appendChild(X(t,`
103
- ${V}
102
+ `;function ge(r,e){try{let t=new URL(r,window.location.href);return t.searchParams.set("tab",e),t.toString()}catch{return r}}var P=class extends HTMLElement{static observedAttributes=["open","corner"];button=null;pointerState=null;suppressClick=!1;connectedCallback(){this.shadowRoot||this.render(),this.sync()}attributeChangedCallback(){this.sync()}render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument,o=y;e.appendChild(V(t,`
103
+ ${X}
104
104
  :host {
105
105
  all: initial;
106
106
  position: fixed;
@@ -203,8 +203,8 @@
203
203
  .logo-for-dark { display: none; }
204
204
  .logo-for-light { display: block; }
205
205
  }
206
- `));let n=t.createElement("button");n.type="button";let s=`${navigator.platform?.startsWith("Mac")||navigator.userAgent?.includes("Mac")?"\u2318":"Ctrl+"}${K}`;n.setAttribute("aria-label","Toggle SLICC overlay"),n.title=`Toggle SLICC (${s})`;let l=t.createElement("div");l.className="logo-icon logo-for-dark",l.innerHTML=z($),l.setAttribute("aria-hidden","true");let p=t.createElement("div");p.className="logo-icon logo-for-light",p.innerHTML=z(W),p.setAttribute("aria-hidden","true");let i=t.createElement("span");i.className="tab-label",i.textContent="SLICC",n.appendChild(l),n.appendChild(p),n.appendChild(i),e.appendChild(n),this.button=n,this.button?.addEventListener("click",c=>{if(this.suppressClick){this.suppressClick=!1,c.preventDefault(),c.stopImmediatePropagation();return}this.dispatchEvent(new CustomEvent("slicc-overlay-toggle",{bubbles:!0,composed:!0}))}),this.button?.addEventListener("pointerdown",this.onPointerDown),this.button?.addEventListener("pointermove",this.onPointerMove),this.button?.addEventListener("pointerup",this.onPointerUp),this.button?.addEventListener("pointercancel",this.onPointerCancel)}sync(){this.button?.setAttribute("aria-pressed",String(this.hasAttribute("open")))}onPointerDown=e=>{if(!e.isPrimary||e.button!==0||!this.button)return;let t=this.getBoundingClientRect();this.pointerState={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startLeft:t.left,startTop:t.top,width:t.width,height:t.height,lastX:e.clientX,lastY:e.clientY,lastTimestamp:e.timeStamp,velocityX:0,velocityY:0,dragging:!1},this.suppressClick=!1,this.button.setPointerCapture(e.pointerId),e.preventDefault()};onPointerMove=e=>{let t=this.pointerState;if(!t||e.pointerId!==t.pointerId)return;let o=e.clientX-t.startX,n=e.clientY-t.startY,a=Math.hypot(o,n);!t.dragging&&R(a,0)&&(t.dragging=!0,this.setAttribute("dragging",""));let s=Math.max(e.timeStamp-t.lastTimestamp,1),l=(e.clientX-t.lastX)/s,p=(e.clientY-t.lastY)/s;if(t.velocityX=t.velocityX===0?l:t.velocityX*.35+l*.65,t.velocityY=t.velocityY===0?p:t.velocityY*.35+p*.65,t.lastX=e.clientX,t.lastY=e.clientY,t.lastTimestamp=e.timeStamp,!t.dragging)return;let i=Math.max(y,window.innerWidth-t.width-y),c=Math.max(y,window.innerHeight-t.height-y),d=G(t.startLeft+o,y,i),h=G(t.startTop+n,y,c);this.style.left=`${d}px`,this.style.top=`${h}px`,this.style.right="auto",this.style.bottom="auto",e.preventDefault()};onPointerUp=e=>{this.finishPointerInteraction(e)};onPointerCancel=e=>{this.finishPointerInteraction(e,!1)};finishPointerInteraction(e,t=!0){let o=this.pointerState;if(!o||e.pointerId!==o.pointerId||!this.button)return;let n=Math.hypot(e.clientX-o.startX,e.clientY-o.startY),a=Math.hypot(o.velocityX,o.velocityY);if(t&&(o.dragging||R(n,a))){let l=q({clientX:e.clientX,clientY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,velocityXPxPerMs:o.velocityX,velocityYPxPerMs:o.velocityY});this.dispatchEvent(new CustomEvent("slicc-overlay-move",{bubbles:!0,composed:!0,detail:{corner:l}})),this.suppressClick=!0,e.preventDefault()}this.button.hasPointerCapture(e.pointerId)&&this.button.releasePointerCapture(e.pointerId),this.pointerState=null,this.removeAttribute("dragging"),this.resetDragStyles()}resetDragStyles(){this.style.left="",this.style.top="",this.style.right="",this.style.bottom=""}},Y=class extends HTMLElement{static observedAttributes=["open","active-tab","app-url","corner"];tabButtons=new Map;iframe=null;emptyState=null;currentAppUrl=v;frameLoaded=!1;lastPostedTab=null;connectedCallback(){this.shadowRoot||this.render(),this.sync()}attributeChangedCallback(){this.sync()}render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument,o=u(this.getAttribute("active-tab"));e.appendChild(X(t,`
207
- ${V}
206
+ `));let n=t.createElement("button");n.type="button";let s=`${navigator.platform?.startsWith("Mac")||navigator.userAgent?.includes("Mac")?"\u2318":"Ctrl+"}${K}`;n.setAttribute("aria-label","Toggle SLICC overlay"),n.title=`Toggle SLICC (${s})`;let l=t.createElement("div");l.className="logo-icon logo-for-dark",l.innerHTML=z($),l.setAttribute("aria-hidden","true");let p=t.createElement("div");p.className="logo-icon logo-for-light",p.innerHTML=z(W),p.setAttribute("aria-hidden","true");let i=t.createElement("span");i.className="tab-label",i.textContent="SLICC",n.appendChild(l),n.appendChild(p),n.appendChild(i),e.appendChild(n),this.button=n,this.button?.addEventListener("click",c=>{if(this.suppressClick){this.suppressClick=!1,c.preventDefault(),c.stopImmediatePropagation();return}this.dispatchEvent(new CustomEvent("slicc-overlay-toggle",{bubbles:!0,composed:!0}))}),this.button?.addEventListener("pointerdown",this.onPointerDown),this.button?.addEventListener("pointermove",this.onPointerMove),this.button?.addEventListener("pointerup",this.onPointerUp),this.button?.addEventListener("pointercancel",this.onPointerCancel)}sync(){this.button?.setAttribute("aria-pressed",String(this.hasAttribute("open")))}onPointerDown=e=>{if(!e.isPrimary||e.button!==0||!this.button)return;let t=this.getBoundingClientRect();this.pointerState={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startLeft:t.left,startTop:t.top,width:t.width,height:t.height,lastX:e.clientX,lastY:e.clientY,lastTimestamp:e.timeStamp,velocityX:0,velocityY:0,dragging:!1},this.suppressClick=!1,this.button.setPointerCapture(e.pointerId),e.preventDefault()};onPointerMove=e=>{let t=this.pointerState;if(!t||e.pointerId!==t.pointerId)return;let o=e.clientX-t.startX,n=e.clientY-t.startY,a=Math.hypot(o,n);!t.dragging&&O(a,0)&&(t.dragging=!0,this.setAttribute("dragging",""));let s=Math.max(e.timeStamp-t.lastTimestamp,1),l=(e.clientX-t.lastX)/s,p=(e.clientY-t.lastY)/s;if(t.velocityX=t.velocityX===0?l:t.velocityX*.35+l*.65,t.velocityY=t.velocityY===0?p:t.velocityY*.35+p*.65,t.lastX=e.clientX,t.lastY=e.clientY,t.lastTimestamp=e.timeStamp,!t.dragging)return;let i=Math.max(y,window.innerWidth-t.width-y),c=Math.max(y,window.innerHeight-t.height-y),d=G(t.startLeft+o,y,i),h=G(t.startTop+n,y,c);this.style.left=`${d}px`,this.style.top=`${h}px`,this.style.right="auto",this.style.bottom="auto",e.preventDefault()};onPointerUp=e=>{this.finishPointerInteraction(e)};onPointerCancel=e=>{this.finishPointerInteraction(e,!1)};finishPointerInteraction(e,t=!0){let o=this.pointerState;if(!o||e.pointerId!==o.pointerId||!this.button)return;let n=Math.hypot(e.clientX-o.startX,e.clientY-o.startY),a=Math.hypot(o.velocityX,o.velocityY);if(t&&(o.dragging||O(n,a))){let l=q({clientX:e.clientX,clientY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,velocityXPxPerMs:o.velocityX,velocityYPxPerMs:o.velocityY});this.dispatchEvent(new CustomEvent("slicc-overlay-move",{bubbles:!0,composed:!0,detail:{corner:l}})),this.suppressClick=!0,e.preventDefault()}this.button.hasPointerCapture(e.pointerId)&&this.button.releasePointerCapture(e.pointerId),this.pointerState=null,this.removeAttribute("dragging"),this.resetDragStyles()}resetDragStyles(){this.style.left="",this.style.top="",this.style.right="",this.style.bottom=""}},Y=class extends HTMLElement{static observedAttributes=["open","active-tab","app-url","corner"];tabButtons=new Map;iframe=null;emptyState=null;currentAppUrl=v;frameLoaded=!1;lastPostedTab=null;connectedCallback(){this.shadowRoot||this.render(),this.sync()}attributeChangedCallback(){this.sync()}render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument,o=u(this.getAttribute("active-tab"));e.appendChild(V(t,`
207
+ ${X}
208
208
  :host { all: initial; position: fixed; inset: 0; display: block; pointer-events: none; font-family: var(--s2-font-family); }
209
209
  :host([open]) { pointer-events: auto; }
210
210
  *, *::before, *::after { box-sizing: border-box; }
@@ -255,8 +255,8 @@
255
255
  iframe { border: 0; width: 100%; height: 100%; display: block; background: var(--s2-bg-base); }
256
256
  .empty-state { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 24px; text-align: center; color: var(--s2-content-secondary); font-size: 13px; line-height: 1.5; }
257
257
  .empty-state[hidden] { display: none; }
258
- `));let n=t.createElement("div");n.className="backdrop",n.setAttribute("part","backdrop"),n.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-close",{bubbles:!0,composed:!0}))}),e.appendChild(n);let a=t.createElement("aside");a.className="sidebar",a.setAttribute("part","sidebar"),a.setAttribute("aria-label","SLICC overlay sidebar");let s=t.createElement("header");s.className="header";let l=t.createElement("div");l.className="header__brand";let p=t.createElement("div"),i=t.createElement("div");i.className="header__title",i.textContent="slicc";let c=t.createElement("div");c.className="header__subtitle",c.textContent="electron float",p.appendChild(i),p.appendChild(c),l.appendChild(p),s.appendChild(l);let d=t.createElement("button");d.type="button",d.className="header__close",d.setAttribute("aria-label","Close SLICC overlay"),d.textContent="\xD7",d.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-close",{bubbles:!0,composed:!0}))}),s.appendChild(d),a.appendChild(s);let h=t.createElement("div");h.className="tab-bar",h.setAttribute("role","tablist"),h.setAttribute("aria-label","SLICC overlay tabs");for(let{id:b,label:S}of F){let g=t.createElement("button");g.type="button",g.className="tab-bar__tab"+(b===o?" tab-bar__tab--active":""),g.setAttribute("role","tab"),g.setAttribute("aria-selected",String(b===o)),g.dataset.tab=b,g.textContent=S,this.tabButtons.set(b,g),g.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-select-tab",{bubbles:!0,composed:!0,detail:{tab:b}}))}),h.appendChild(g)}a.appendChild(h);let E=t.createElement("div");E.className="viewport";let x=t.createElement("iframe");x.title="SLICC electron float",this.iframe=x,x.addEventListener("load",()=>{this.frameLoaded=!0,this.postActiveTab()}),E.appendChild(x);let f=t.createElement("div");f.className="empty-state",f.textContent="Starting the local SLICC runtime\u2026",this.emptyState=f,E.appendChild(f),a.appendChild(E),e.appendChild(a),this.iframe?.addEventListener("load",()=>{this.frameLoaded=!0,this.postActiveTab()})}sync(){let e=u(this.getAttribute("active-tab")),t=this.getAttribute("app-url")?.trim()??v;for(let[o,n]of this.tabButtons){let a=o===e;n.classList.toggle("tab-bar__tab--active",a),n.setAttribute("aria-selected",String(a))}this.emptyState?.toggleAttribute("hidden",!!t),this.syncFrameUrl(t,e),this.postActiveTab()}syncFrameUrl(e,t){if(this.iframe){if(!e){this.currentAppUrl&&(this.currentAppUrl=v,this.frameLoaded=!1,this.lastPostedTab=null,this.iframe.removeAttribute("src"));return}e!==this.currentAppUrl&&(this.currentAppUrl=e,this.frameLoaded=!1,this.lastPostedTab=null,this.iframe.src=ge(e,t))}}postActiveTab(){if(!this.frameLoaded||!this.iframe?.contentWindow)return;let e=u(this.getAttribute("active-tab"));this.lastPostedTab!==e&&(this.iframe.contentWindow.postMessage({type:Z,tab:e},"*"),this.lastPostedTab=e)}},_=class extends HTMLElement{static observedAttributes=["open","active-tab","app-url","corner"];state=T();appUrlValue=v;syncingAttributes=!1;connectedCallback(){this.state=T({open:this.hasAttribute("open"),activeTab:u(this.getAttribute("active-tab")),corner:m(this.getAttribute("corner")??D(this.ownerDocument.defaultView))}),this.appUrlValue=this.getAttribute("app-url")?.trim()??v,this.shadowRoot||this.render(),this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner),this.ownerDocument.addEventListener("keydown",this.onKeyDown,!0),this.ownerDocument.defaultView?.addEventListener("message",this.onMessage)}disconnectedCallback(){this.ownerDocument.removeEventListener("keydown",this.onKeyDown,!0),this.ownerDocument.defaultView?.removeEventListener("message",this.onMessage)}attributeChangedCallback(){this.syncingAttributes||(this.state=T({open:this.hasAttribute("open"),activeTab:u(this.getAttribute("active-tab")),corner:m(this.getAttribute("corner")??D(this.ownerDocument.defaultView))}),this.appUrlValue=this.getAttribute("app-url")?.trim()??v,this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner))}get open(){return this.state.open}set open(e){this.applyState(C(this.state,e))}get activeTab(){return this.state.activeTab}set activeTab(e){this.applyState(A(this.state,e))}get corner(){return this.state.corner}set corner(e){this.applyState(O(this.state,e))}get appUrl(){return this.appUrlValue}set appUrl(e){let t=e.trim();t!==this.appUrlValue&&(this.appUrlValue=t,this.syncingAttributes=!0,t?this.setAttribute("app-url",t):this.removeAttribute("app-url"),this.syncingAttributes=!1,this.syncChildren())}toggle(){this.applyState(j(this.state))}showSidebar(){this.applyState(C(this.state,!0))}hideSidebar(){this.applyState(C(this.state,!1))}applyState(e){e.open===this.state.open&&e.activeTab===this.state.activeTab&&e.corner===this.state.corner||(this.state=e,this.syncingAttributes=!0,this.toggleAttribute("open",e.open),this.setAttribute("active-tab",e.activeTab),this.setAttribute("corner",e.corner),this.syncingAttributes=!1,this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner))}onKeyDown=e=>{if((e.key===K||e.code===pe)&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat){e.preventDefault(),e.stopPropagation(),this.toggle();return}e.key!=="Escape"||!this.state.open||this.hideSidebar()};onMessage=e=>{e.data&&typeof e.data=="object"&&"type"in e.data&&e.data.type===de&&this.toggle()};render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument;e.appendChild(X(t,`
259
- ${V}
258
+ `));let n=t.createElement("div");n.className="backdrop",n.setAttribute("part","backdrop"),n.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-close",{bubbles:!0,composed:!0}))}),e.appendChild(n);let a=t.createElement("aside");a.className="sidebar",a.setAttribute("part","sidebar"),a.setAttribute("aria-label","SLICC overlay sidebar");let s=t.createElement("header");s.className="header";let l=t.createElement("div");l.className="header__brand";let p=t.createElement("div"),i=t.createElement("div");i.className="header__title",i.textContent="slicc";let c=t.createElement("div");c.className="header__subtitle",c.textContent="electron float",p.appendChild(i),p.appendChild(c),l.appendChild(p),s.appendChild(l);let d=t.createElement("button");d.type="button",d.className="header__close",d.setAttribute("aria-label","Close SLICC overlay"),d.textContent="\xD7",d.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-close",{bubbles:!0,composed:!0}))}),s.appendChild(d),a.appendChild(s);let h=t.createElement("div");h.className="tab-bar",h.setAttribute("role","tablist"),h.setAttribute("aria-label","SLICC overlay tabs");for(let{id:b,label:S}of H){let g=t.createElement("button");g.type="button",g.className="tab-bar__tab"+(b===o?" tab-bar__tab--active":""),g.setAttribute("role","tab"),g.setAttribute("aria-selected",String(b===o)),g.dataset.tab=b,g.textContent=S,this.tabButtons.set(b,g),g.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-select-tab",{bubbles:!0,composed:!0,detail:{tab:b}}))}),h.appendChild(g)}a.appendChild(h);let E=t.createElement("div");E.className="viewport";let x=t.createElement("iframe");x.title="SLICC electron float",this.iframe=x,x.addEventListener("load",()=>{this.frameLoaded=!0,this.postActiveTab()}),E.appendChild(x);let f=t.createElement("div");f.className="empty-state",f.textContent="Starting the local SLICC runtime\u2026",this.emptyState=f,E.appendChild(f),a.appendChild(E),e.appendChild(a),this.iframe?.addEventListener("load",()=>{this.frameLoaded=!0,this.postActiveTab()})}sync(){let e=u(this.getAttribute("active-tab")),t=this.getAttribute("app-url")?.trim()??v;for(let[o,n]of this.tabButtons){let a=o===e;n.classList.toggle("tab-bar__tab--active",a),n.setAttribute("aria-selected",String(a))}this.emptyState?.toggleAttribute("hidden",!!t),this.syncFrameUrl(t,e),this.postActiveTab()}syncFrameUrl(e,t){if(this.iframe){if(!e){this.currentAppUrl&&(this.currentAppUrl=v,this.frameLoaded=!1,this.lastPostedTab=null,this.iframe.removeAttribute("src"));return}e!==this.currentAppUrl&&(this.currentAppUrl=e,this.frameLoaded=!1,this.lastPostedTab=null,this.iframe.src=ge(e,t))}}postActiveTab(){if(!this.frameLoaded||!this.iframe?.contentWindow)return;let e=u(this.getAttribute("active-tab"));this.lastPostedTab!==e&&(this.iframe.contentWindow.postMessage({type:Z,tab:e},"*"),this.lastPostedTab=e)}},_=class extends HTMLElement{static observedAttributes=["open","active-tab","app-url","corner"];state=T();appUrlValue=v;syncingAttributes=!1;connectedCallback(){this.state=T({open:this.hasAttribute("open"),activeTab:u(this.getAttribute("active-tab")),corner:m(this.getAttribute("corner")??D(this.ownerDocument.defaultView))}),this.appUrlValue=this.getAttribute("app-url")?.trim()??v,this.shadowRoot||this.render(),this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner),this.ownerDocument.addEventListener("keydown",this.onKeyDown,!0),this.ownerDocument.defaultView?.addEventListener("message",this.onMessage)}disconnectedCallback(){this.ownerDocument.removeEventListener("keydown",this.onKeyDown,!0),this.ownerDocument.defaultView?.removeEventListener("message",this.onMessage)}attributeChangedCallback(){this.syncingAttributes||(this.state=T({open:this.hasAttribute("open"),activeTab:u(this.getAttribute("active-tab")),corner:m(this.getAttribute("corner")??D(this.ownerDocument.defaultView))}),this.appUrlValue=this.getAttribute("app-url")?.trim()??v,this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner))}get open(){return this.state.open}set open(e){this.applyState(C(this.state,e))}get activeTab(){return this.state.activeTab}set activeTab(e){this.applyState(A(this.state,e))}get corner(){return this.state.corner}set corner(e){this.applyState(R(this.state,e))}get appUrl(){return this.appUrlValue}set appUrl(e){let t=e.trim();t!==this.appUrlValue&&(this.appUrlValue=t,this.syncingAttributes=!0,t?this.setAttribute("app-url",t):this.removeAttribute("app-url"),this.syncingAttributes=!1,this.syncChildren())}toggle(){this.applyState(j(this.state))}showSidebar(){this.applyState(C(this.state,!0))}hideSidebar(){this.applyState(C(this.state,!1))}applyState(e){e.open===this.state.open&&e.activeTab===this.state.activeTab&&e.corner===this.state.corner||(this.state=e,this.syncingAttributes=!0,this.toggleAttribute("open",e.open),this.setAttribute("active-tab",e.activeTab),this.setAttribute("corner",e.corner),this.syncingAttributes=!1,this.syncChildren(),I(this.ownerDocument.defaultView,this.state.corner))}onKeyDown=e=>{if((e.key===K||e.code===pe)&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat){e.preventDefault(),e.stopPropagation(),this.toggle();return}e.key!=="Escape"||!this.state.open||this.hideSidebar()};onMessage=e=>{e.data&&typeof e.data=="object"&&"type"in e.data&&e.data.type===de&&this.toggle()};render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument;e.appendChild(V(t,`
259
+ ${X}
260
260
  :host {
261
261
  all: initial;
262
262
  position: fixed;
@@ -266,4 +266,4 @@
266
266
  z-index: 2147483647;
267
267
  contain: layout style paint;
268
268
  }
269
- `));let o=t.createElement(L);o.addEventListener("slicc-overlay-toggle",()=>this.toggle()),o.addEventListener("slicc-overlay-move",a=>{let s=a.detail?.corner;this.applyState(O(this.state,s))}),e.appendChild(o);let n=t.createElement(k);n.addEventListener("slicc-overlay-close",()=>this.hideSidebar()),n.addEventListener("slicc-overlay-select-tab",a=>{let s=a.detail?.tab;this.applyState(A(this.state,s))}),e.appendChild(n)}syncChildren(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(L),o=e.querySelector(k);!t||!o||(t.toggleAttribute("open",this.state.open),t.setAttribute("corner",this.state.corner),o.toggleAttribute("open",this.state.open),o.setAttribute("corner",this.state.corner),o.setAttribute("active-tab",this.state.activeTab),this.appUrlValue?o.setAttribute("app-url",this.appUrlValue):o.removeAttribute("app-url"))}};function he(r=customElements){r.get(L)||r.define(L,P),r.get(k)||r.define(k,Y),r.get(N)||r.define(N,_)}function Q(r=document,e={}){he(r.defaultView?.customElements??customElements);let t=r.getElementById(U),o;return t instanceof _?o=t:(t?.remove(),o=r.createElement(N)),o.id=U,o.isConnected||(r.body??r.documentElement).appendChild(o),typeof e.open=="boolean"&&(o.open=e.open),e.activeTab!==void 0&&(o.activeTab=u(e.activeTab)),e.appUrl!==void 0&&(o.appUrl=e.appUrl??v),e.corner!==void 0&&(o.corner=e.corner??D(r.defaultView)),o}function ee(r=document){r.getElementById(U)?.remove()}function D(r){try{return m(r?.localStorage.getItem(J))}catch{return m(null)}}function I(r,e){try{r?.localStorage.setItem(J,e)}catch{}}function G(r,e,t){return Math.min(Math.max(r,e),t)}window.__SLICC_ELECTRON_OVERLAY__={inject(r={}){try{Q(document,r)}catch(e){console.error("[slicc-overlay] Injection failed:",e)}},remove(){try{ee(document)}catch(r){console.error("[slicc-overlay] Removal failed:",r)}}};})();
269
+ `));let o=t.createElement(L);o.addEventListener("slicc-overlay-toggle",()=>this.toggle()),o.addEventListener("slicc-overlay-move",a=>{let s=a.detail?.corner;this.applyState(R(this.state,s))}),e.appendChild(o);let n=t.createElement(k);n.addEventListener("slicc-overlay-close",()=>this.hideSidebar()),n.addEventListener("slicc-overlay-select-tab",a=>{let s=a.detail?.tab;this.applyState(A(this.state,s))}),e.appendChild(n)}syncChildren(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(L),o=e.querySelector(k);!t||!o||(t.toggleAttribute("open",this.state.open),t.setAttribute("corner",this.state.corner),o.toggleAttribute("open",this.state.open),o.setAttribute("corner",this.state.corner),o.setAttribute("active-tab",this.state.activeTab),this.appUrlValue?o.setAttribute("app-url",this.appUrlValue):o.removeAttribute("app-url"))}};function he(r=customElements){r.get(L)||r.define(L,P),r.get(k)||r.define(k,Y),r.get(N)||r.define(N,_)}function Q(r=document,e={}){he(r.defaultView?.customElements??customElements);let t=r.getElementById(U),o;return t instanceof _?o=t:(t?.remove(),o=r.createElement(N)),o.id=U,o.isConnected||(r.body??r.documentElement).appendChild(o),typeof e.open=="boolean"&&(o.open=e.open),e.activeTab!==void 0&&(o.activeTab=u(e.activeTab)),e.appUrl!==void 0&&(o.appUrl=e.appUrl??v),e.corner!==void 0&&(o.corner=e.corner??D(r.defaultView)),o}function ee(r=document){r.getElementById(U)?.remove()}function D(r){try{return m(r?.localStorage.getItem(J))}catch{return m(null)}}function I(r,e){try{r?.localStorage.setItem(J,e)}catch{}}function G(r,e,t){return Math.min(Math.max(r,e),t)}window.__SLICC_ELECTRON_OVERLAY__={inject(r={}){try{Q(document,r)}catch(e){console.error("[slicc-overlay] Injection failed:",e)}},remove(){try{ee(document)}catch(r){console.error("[slicc-overlay] Removal failed:",r)}}};})();
@@ -5,8 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/index-CCGqFzR9.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CvlDeETm.css">
8
+ <script type="module" crossorigin src="/assets/main-BSfjQXCf.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-wMinxHhO.js">
10
+ <link rel="stylesheet" crossorigin href="/assets/main-CvlDeETm.css">
10
11
  </head>
11
12
  <body>
12
13
  <div id="app"></div>
@@ -0,0 +1,38 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>SLICC cloud cones</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <script type="module" crossorigin src="/assets/cloud-CCHD45tb.js"></script>
8
+ <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-wMinxHhO.js">
9
+ <link rel="stylesheet" crossorigin href="/assets/cloud-DyAca2cv.css">
10
+ </head>
11
+ <body>
12
+ <header>
13
+ <h1>Cloud cones</h1>
14
+ <div id="user-box" class="hidden">
15
+ <span id="user-label"></span>
16
+ <button id="sign-out-btn">Sign out</button>
17
+ </div>
18
+ </header>
19
+
20
+ <main id="signed-out" class="hidden">
21
+ <button id="sign-in-btn">Sign in with Adobe</button>
22
+ </main>
23
+
24
+ <main id="signed-in" class="hidden">
25
+ <section class="create-row">
26
+ <input id="cone-name" placeholder="name (optional)" autocomplete="off" />
27
+ <button id="create-btn">+ New cone</button>
28
+ <span id="create-status" class="status"></span>
29
+ </section>
30
+ <section class="list">
31
+ <ul id="cone-list"></ul>
32
+ <div id="cap-info" class="cap-info"></div>
33
+ </section>
34
+ </main>
35
+
36
+ <div id="toast" class="toast hidden" role="status" aria-live="polite"></div>
37
+ </body>
38
+ </html>
@@ -5,8 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/index-CCGqFzR9.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CvlDeETm.css">
8
+ <script type="module" crossorigin src="/assets/main-BSfjQXCf.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-wMinxHhO.js">
10
+ <link rel="stylesheet" crossorigin href="/assets/main-CvlDeETm.css">
10
11
  </head>
11
12
  <body>
12
13
  <div id="app"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "3.5.4",
3
+ "version": "3.6.0",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -25,6 +25,7 @@
25
25
  },
26
26
  "workspaces": [
27
27
  "packages/shared-ts",
28
+ "packages/cloud-core",
28
29
  "packages/webapp",
29
30
  "packages/node-server",
30
31
  "packages/chrome-extension",
@@ -35,12 +36,12 @@
35
36
  "scripts": {
36
37
  "dev": "tsx packages/node-server/src/index.ts --dev",
37
38
  "dev:electron": "tsx packages/node-server/src/index.ts --dev --electron",
38
- "build": "npm run build -w @slicc/shared-ts && npm run build -w @slicc/webapp && npm run build -w @slicc/node-server && npm run build -w @slicc/chrome-extension && npm run build -w @slicc/cloudflare-worker && npm run build -w @slicc/swift-server && npm run build -w @slicc/swift-launcher",
39
+ "build": "npm run build -w @slicc/shared-ts && npm run build -w @slicc/cloud-core && npm run build -w @slicc/webapp && npm run build -w @slicc/node-server && npm run build -w @slicc/chrome-extension && npm run build -w @slicc/cloudflare-worker && npm run build -w @slicc/swift-server && npm run build -w @slicc/swift-launcher",
39
40
  "start": "node dist/node-server/index.js",
40
41
  "start:electron": "node dist/node-server/index.js --electron",
41
42
  "preflight": "node packages/dev-tools/tools/preflight-deps.mjs",
42
43
  "pretypecheck": "npm run preflight",
43
- "typecheck": "tsc --noEmit -p tsconfig.cli.json && tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.worker.json && tsc --noEmit -p tsconfig.webapp-worker.json",
44
+ "typecheck": "tsc --noEmit -p tsconfig.cli.json && tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.worker.json && tsc --noEmit -p tsconfig.webapp-worker.json && tsc --noEmit -p packages/cloud-core/tsconfig.json",
44
45
  "pretest": "npm run preflight",
45
46
  "test": "vitest run",
46
47
  "test:coverage": "vitest run --coverage",
@@ -59,11 +60,12 @@
59
60
  "deadcode:swift": "npm run deadcode -w @slicc/swift-server && npm run deadcode -w @slicc/swift-launcher",
60
61
  "package:release": "node dist/node-server/release-package.js",
61
62
  "publish:chrome": "node dist/node-server/publish-chrome-web-store.js",
62
- "publish:worker": "echo \"$CLOUDFLARE_TURN_API_TOKEN\" | npx wrangler secret put CLOUDFLARE_TURN_API_TOKEN --config packages/cloudflare-worker/wrangler.jsonc && echo \"$GITHUB_CLIENT_SECRET\" | npx wrangler secret put GITHUB_CLIENT_SECRET --config packages/cloudflare-worker/wrangler.jsonc && npx wrangler deploy --config packages/cloudflare-worker/wrangler.jsonc && MAX_ATTEMPTS=6; for attempt in $(seq 1 \"$MAX_ATTEMPTS\"); do if npx vitest run --project cloudflare-worker packages/cloudflare-worker/tests/deployed.test.ts; then exit 0; fi; if [ \"$attempt\" -eq \"$MAX_ATTEMPTS\" ]; then echo \"Deployed smoke test failed after $MAX_ATTEMPTS attempts\"; exit 1; fi; echo \"Deployed smoke test failed on attempt $attempt; waiting for edge propagation before retrying...\"; sleep 15; done",
63
- "postinstall": "if [ -d packages/shared-ts ]; then npm run build -w @slicc/shared-ts; fi",
63
+ "publish:worker": "bash packages/cloudflare-worker/scripts/publish-worker.sh",
64
+ "postinstall": "if [ -d packages/shared-ts ]; then npm run build -w @slicc/shared-ts; fi && if [ -d packages/cloud-core ]; then npm run build -w @slicc/cloud-core; fi",
64
65
  "prepare": "husky"
65
66
  },
66
67
  "dependencies": {
68
+ "e2b": "^2.23.0",
67
69
  "express": "^5.0.0",
68
70
  "pyodide": "0.29.4",
69
71
  "ws": "^8.18.0"
@@ -84,11 +86,11 @@
84
86
  "lint-staged": "17.0.5",
85
87
  "prettier": "3.8.3",
86
88
  "semantic-release": "25.0.3",
87
- "tsx": "4.22.1",
89
+ "tsx": "4.22.3",
88
90
  "typescript": "^6.0.0",
89
- "typescript-eslint": "8.59.3",
91
+ "typescript-eslint": "8.59.4",
90
92
  "vite": "8.0.13",
91
- "vitest": "4.1.6"
93
+ "vitest": "4.1.7"
92
94
  },
93
95
  "lint-staged": {
94
96
  "**/*.{ts,js,mjs}": [
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-BX55wTV9.js","assets/index-CCGqFzR9.js","assets/index-CvlDeETm.css"])))=>i.map(i=>d[i]);
2
- import{B as e,I as t,K as n,L as r,N as i,P as a,U as o,W as s,Y as c,c as l,f as u,h as d,l as f}from"./index-CCGqFzR9.js";import{getOAuthPageOrigin as p}from"./oauth-service-BX55wTV9.js";var m=Object.assign({"/packages/webapp/providers/adobe-config.json":{proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`}})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function h(){let e=u(`adobe`);if(e)return e.replace(/\/$/,``);if(m.proxyEndpoint)return m.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}var g=new Map,_=new Map;async function v(e){let t=g.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`,{headers:{[N]:`3.5.4`}});if(t.ok){let n=await t.json();return g.set(e,n),n}console.warn(`[adobe] Proxy /v1/config returned ${t.status}, falling back to build-time config`)}catch(e){console.warn(`[adobe] Failed to fetch proxy config:`,e instanceof Error?e.message:String(e))}let n={};return g.set(e,n),n}function y(e){let t=e.clientId||m.clientId;if(!t)throw Error(`Could not determine IMS client ID — proxy /v1/config did not return one and adobe-config.json is empty`);return t}function b(e){return e.scopes||m.scopes}function x(e){return e.imsEnvironment||m.imsEnvironment||`prod`}var S={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function C(e){return S[e??m.imsEnvironment??`prod`]??S.prod}var w=typeof chrome<`u`&&!!chrome?.runtime?.id;function T(){return f().find(e=>e.providerId===`adobe`)}async function E(e,t){try{let n=await fetch(`${C(t)}/ims/userinfo/v2`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();return{name:e.displayName||e.name||e.email,avatar:e.picture||e.avatar_url}}console.warn(`[adobe] User profile fetch returned ${n.status}, account will have no display name`)}catch(e){console.warn(`[adobe] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function D(e){let t=e.indexOf(`#`);if(t<0)return null;let n=new URLSearchParams(e.slice(t+1)),r=n.get(`access_token`);return r?{accessToken:r,expiresIn:parseInt(n.get(`expires_in`)??`86400`,10)}:null}var O={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!m.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,oauthTokenDomains:[`ims-na1.adobelogin.com`,`ims-na1-stg1.adobelogin.com`,`*.adobelogin.com`,`*.adobe.io`,`firefall.adobe.io`],getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=_.get(e.id);return n?.api&&(t.api=n.api),n?.context_window!==void 0&&(t.context_window=n.context_window),n?.max_tokens!==void 0&&(t.max_tokens=n.max_tokens),n?.reasoning!==void 0&&(t.reasoning=n.reasoning),n?.input&&(t.input=n.input),/haiku/i.test(e.id)&&(t.compat={supportsEagerToolInputStreaming:!1}),t};for(let t of U.values())if(t.length){let n=t.map(t=>e({id:t.id,name:t.name??t.id}));try{localStorage.setItem(`slicc-adobe-models`,JSON.stringify(n))}catch{}return n}for(let t of g.values())if(t.models?.length)return t.models.map(e);try{let e=localStorage.getItem(`slicc-adobe-models`);if(e){let t=JSON.parse(e);if(t.length)return t}}catch{}return[{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`}]},onOAuthLogin:async(e,t)=>{let n=h(),r=await v(n),i=y(r),a=b(r),o=x(r),s=w?null:await p(),c=w?m.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:m.redirectUri??`${s.origin}/auth/callback`,l=w?void 0:btoa(JSON.stringify({port:parseInt(new URL(s.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),u=l?JSON.parse(atob(l)).nonce:null,f=new URLSearchParams({client_id:i,scope:a,response_type:`token`,redirect_uri:c});l&&f.set(`state`,l);let g=await e(`${C(o)}/ims/authorize/v2?${f}`);if(!g)return;if(u&&g)try{if(new URL(g).searchParams.get(`nonce`)!==u){console.error(`[adobe] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let _=D(g);if(!_){console.error(`[adobe] Could not extract token from redirect URL`);return}let S=await E(_.accessToken,o);await d({providerId:`adobe`,accessToken:_.accessToken,tokenExpiresAt:Date.now()+_.expiresIn*1e3,userName:S.name,userAvatar:S.avatar,baseUrl:m.proxyEndpoint?void 0:n}),await W().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=T();if(e?.accessToken)try{let t=g.values().next().value??{},n=t.clientId||m.clientId,r=x(t);if(n){let t=await fetch(`${C(r)}/ims/revoke`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({token:e.accessToken,token_type_hint:`access_token`,client_id:n})});t.ok||console.warn(`[adobe] Token revocation returned ${t.status}, token may still be valid server-side`)}}catch(e){console.warn(`[adobe] Failed to revoke token:`,e instanceof Error?e.message:String(e))}await d({providerId:`adobe`,accessToken:``})},onSilentRenew:async()=>T()?.accessToken?M():null},k=null;async function A(){let e=T();if(!e?.accessToken)throw Error(`Not logged in to Adobe — please log in first`);if((e.tokenExpiresAt??0)-Date.now()>6e4)return e.accessToken;console.log(`[adobe] Token expired or expiring soon, attempting silent renewal...`);try{let e=await M();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=T();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function j(){let e=T();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function M(){return typeof window>`u`?null:k||(k=(async()=>{try{let e=h(),t=await v(e),n=y(t),r=b(t),i=x(t),a=w?m.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:m.redirectUri??`${window.location.origin}/auth/callback`,o=w?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),s=o?JSON.parse(atob(o)).nonce:null,l=new URLSearchParams({client_id:n,scope:r,response_type:`token`,redirect_uri:a,prompt:`none`});o&&l.set(`state`,o);let u=`${C(i)}/ims/authorize/v2?${l}`,{createOAuthLauncher:f}=await c(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BX55wTV9.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2])),p=await f()(u);if(!p)return null;if(s&&p)try{if(new URL(p).searchParams.get(`nonce`)!==s)return console.error(`[adobe] OAuth nonce mismatch — possible CSRF`),null}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let g=D(p);if(!g)return null;let _=T();return await d({providerId:`adobe`,accessToken:g.accessToken,tokenExpiresAt:Date.now()+g.expiresIn*1e3,userName:_?.userName,userAvatar:_?.userAvatar,baseUrl:m.proxyEndpoint?void 0:e}),console.log(`[adobe] Token renewed silently`),await W().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),g.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{k=null}})(),k)}var N=`X-Slicc-Version`;function P(e){let t={},n=N.toLowerCase();if(e.headers)for(let[r,i]of Object.entries(e.headers))r.toLowerCase()!==n&&(t[r]=i);return t[N]=`3.5.4`,{...e,headers:t}}var F=`adobe-provider-fallback`,I=new Set;function L(e,t){if(e.headers){for(let t of Object.keys(e.headers))if(t.toLowerCase()===`x-session-id`)return e}return I.has(t)||(I.add(t),console.warn(`[adobe] Missing X-Session-Id from ${t} — using daily fallback. Attach an X-Session-Id header at the call site (see scoop-context.ts streamWithSessionId or docs/pitfalls.md).`)),{...e,headers:{...e.headers??{},"X-Session-Id":l(F)}}}function R(){I.clear()}function z(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:`adobe-anthropic`,provider:`adobe`,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}var B=(t,n,r={})=>{let o=e();return(async()=>{try{let e=await A();if(String(t.api).includes(`openai`)){let i=a({...t,baseUrl:`${h()}/v1`,api:`openai-completions`,compat:{...t.compat,supportsStore:!1,supportsDeveloperRole:!1}},n,P(L({...r,apiKey:e},`streamAdobe[openai]`)));for await(let e of i)o.push(e)}else{let a=i({...t,baseUrl:h(),api:`anthropic-messages`},n,P(L({...r,apiKey:e},`streamAdobe[anthropic]`)));for await(let e of a)o.push(e)}o.end()}catch(e){console.error(`[adobe] Stream error:`,e instanceof Error?e.message:String(e)),o.push(z(t,e)),o.end()}})(),o},V=(n,i,a)=>{let o=e();return(async()=>{try{let e=await A();if(String(n.api).includes(`openai`)){let t=r({...n,baseUrl:`${h()}/v1`,api:`openai-completions`,compat:{...n.compat,supportsStore:!1,supportsDeveloperRole:!1}},i,P(L({...a,apiKey:e},`streamSimpleAdobe[openai]`)));for await(let e of t)o.push(e)}else{let r=t({...n,baseUrl:h(),api:`anthropic-messages`},i,P(L({...a,apiKey:e},`streamSimpleAdobe[anthropic]`)));for await(let e of r)o.push(e)}o.end()}catch(e){console.error(`[adobe] Stream error:`,e instanceof Error?e.message:String(e)),o.push(z(n,e)),o.end()}})(),o};async function H(){try{let e=await A(),t=h(),n=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`,[N]:`3.5.4`}});if(n.ok){let e=await n.json();if(e.data?.length){for(let t of e.data){let e={id:t.id,name:t.name};t.api!==void 0&&(e.api=t.api),t.context_window!==void 0&&(e.context_window=t.context_window),t.max_tokens!==void 0&&(e.max_tokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),_.set(t.id,e)}let n=new Map;for(let e of s())try{for(let t of o(e))n.set(t.id,t)}catch{}return e.data.map(e=>{let r=n.get(e.id),i=`adobe-${e.api===`openai`?`openai`:`anthropic`}`;return r?{...r,provider:`adobe`,api:i}:{id:e.id,name:e.name??e.id,provider:`adobe`,api:i,baseUrl:t,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0}})}}else console.warn(`[adobe] Proxy /v1/models returned ${n.status}, falling back to Anthropic models`)}catch(e){console.warn(`[adobe] Failed to fetch proxy models:`,e instanceof Error?e.message:String(e))}return o(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}var U=new Map;async function W(){let e=h(),t=U.get(e);if(t)return t;let n=await H();return U.set(e,n),n}function G(){n({api:`adobe-anthropic`,stream:B,streamSimple:V}),n({api:`adobe-openai`,stream:B,streamSimple:V})}export{R as __resetAdobeSessionIdWarningCacheForTests,O as config,W as getAdobeModels,A as getValidAccessToken,j as isTokenExpired,G as register};
@@ -1 +0,0 @@
1
- import{F as e,G as t,H as n,M as r,P as i,R as a,V as o,h as s,j as c,p as l,t as u,v as d}from"./kernel-worker-dg2bRx7X.js";import{getOAuthPageOrigin as f}from"./oauth-service-BAnfipgD.js";const p=Object.assign({"/packages/webapp/providers/adobe-config.json":{proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`}})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function m(){let e=s(`adobe`);if(e)return e.replace(/\/$/,``);if(p.proxyEndpoint)return p.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}const h=new Map,g=new Map;async function _(e){let t=h.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`,{headers:{[M]:`3.5.4`}});if(t.ok){let n=await t.json();return h.set(e,n),n}console.warn(`[adobe] Proxy /v1/config returned ${t.status}, falling back to build-time config`)}catch(e){console.warn(`[adobe] Failed to fetch proxy config:`,e instanceof Error?e.message:String(e))}let n={};return h.set(e,n),n}function v(e){let t=e.clientId||p.clientId;if(!t)throw Error(`Could not determine IMS client ID — proxy /v1/config did not return one and adobe-config.json is empty`);return t}function y(e){return e.scopes||p.scopes}function b(e){return e.imsEnvironment||p.imsEnvironment||`prod`}const x={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function S(e){return x[e??p.imsEnvironment??`prod`]??x.prod}const C=typeof chrome<`u`&&!!chrome?.runtime?.id;function w(){return l().find(e=>e.providerId===`adobe`)}async function T(e,t){try{let n=await fetch(`${S(t)}/ims/userinfo/v2`,{headers:{Authorization:`Bearer ${e}`}});if(n.ok){let e=await n.json();return{name:e.displayName||e.name||e.email,avatar:e.picture||e.avatar_url}}console.warn(`[adobe] User profile fetch returned ${n.status}, account will have no display name`)}catch(e){console.warn(`[adobe] Failed to fetch user profile:`,e instanceof Error?e.message:String(e))}return{}}function E(e){let t=e.indexOf(`#`);if(t<0)return null;let n=new URLSearchParams(e.slice(t+1)),r=n.get(`access_token`);return r?{accessToken:r,expiresIn:parseInt(n.get(`expires_in`)??`86400`,10)}:null}const D={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!p.proxyEndpoint,baseUrlPlaceholder:`https://your-proxy.example.com`,baseUrlDescription:`Anthropic-compatible proxy endpoint`,isOAuth:!0,defaultModelId:`sonnet`,oauthTokenDomains:[`ims-na1.adobelogin.com`,`ims-na1-stg1.adobelogin.com`,`*.adobelogin.com`,`*.adobe.io`,`firefall.adobe.io`],getModelIds:()=>{let e=e=>{let t={id:e.id,name:e.name??e.id},n=g.get(e.id);return n?.api&&(t.api=n.api),n?.context_window!==void 0&&(t.context_window=n.context_window),n?.max_tokens!==void 0&&(t.max_tokens=n.max_tokens),n?.reasoning!==void 0&&(t.reasoning=n.reasoning),n?.input&&(t.input=n.input),/haiku/i.test(e.id)&&(t.compat={supportsEagerToolInputStreaming:!1}),t};for(let t of V.values())if(t.length){let n=t.map(t=>e({id:t.id,name:t.name??t.id}));try{localStorage.setItem(`slicc-adobe-models`,JSON.stringify(n))}catch{}return n}for(let t of h.values())if(t.models?.length)return t.models.map(e);try{let e=localStorage.getItem(`slicc-adobe-models`);if(e){let t=JSON.parse(e);if(t.length)return t}}catch{}return[{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`}]},onOAuthLogin:async(e,t)=>{let n=m(),r=await _(n),i=v(r),a=y(r),o=b(r),s=C?null:await f(),c=C?p.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:p.redirectUri??`${s.origin}/auth/callback`,l=C?void 0:btoa(JSON.stringify({port:parseInt(new URL(s.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),u=l?JSON.parse(atob(l)).nonce:null,h=new URLSearchParams({client_id:i,scope:a,response_type:`token`,redirect_uri:c});l&&h.set(`state`,l);let g=await e(`${S(o)}/ims/authorize/v2?${h}`);if(!g)return;if(u&&g)try{if(new URL(g).searchParams.get(`nonce`)!==u){console.error(`[adobe] OAuth nonce mismatch — possible CSRF`);return}}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let x=E(g);if(!x){console.error(`[adobe] Could not extract token from redirect URL`);return}let w=await T(x.accessToken,o);await d({providerId:`adobe`,accessToken:x.accessToken,tokenExpiresAt:Date.now()+x.expiresIn*1e3,userName:w.name,userAvatar:w.avatar,baseUrl:p.proxyEndpoint?void 0:n}),await H().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=w();if(e?.accessToken)try{let t=h.values().next().value??{},n=t.clientId||p.clientId,r=b(t);if(n){let t=await fetch(`${S(r)}/ims/revoke`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({token:e.accessToken,token_type_hint:`access_token`,client_id:n})});t.ok||console.warn(`[adobe] Token revocation returned ${t.status}, token may still be valid server-side`)}}catch(e){console.warn(`[adobe] Failed to revoke token:`,e instanceof Error?e.message:String(e))}await d({providerId:`adobe`,accessToken:``})},onSilentRenew:async()=>w()?.accessToken?j():null};let O=null;async function k(){let e=w();if(!e?.accessToken)throw Error(`Not logged in to Adobe — please log in first`);if((e.tokenExpiresAt??0)-Date.now()>6e4)return e.accessToken;console.log(`[adobe] Token expired or expiring soon, attempting silent renewal...`);try{let e=await j();if(e)return e}catch(e){console.warn(`[adobe] Silent renewal failed:`,e instanceof Error?e.message:String(e))}let t=w();if((t?.tokenExpiresAt??0)-Date.now()>0&&t?.accessToken)return t.accessToken;throw Error(`Adobe session expired — please log in again`)}function A(){let e=w();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function j(){return typeof window>`u`?null:O||(O=(async()=>{try{let e=m(),t=await _(e),n=v(t),r=y(t),i=b(t),a=C?p.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:p.redirectUri??`${window.location.origin}/auth/callback`,o=C?void 0:btoa(JSON.stringify({port:parseInt(new URL(window.location.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),s=o?JSON.parse(atob(o)).nonce:null,c=new URLSearchParams({client_id:n,scope:r,response_type:`token`,redirect_uri:a,prompt:`none`});o&&c.set(`state`,o);let l=`${S(i)}/ims/authorize/v2?${c}`,{createOAuthLauncher:u}=await import(`./oauth-service-BAnfipgD.js`),f=await u()(l);if(!f)return null;if(s&&f)try{if(new URL(f).searchParams.get(`nonce`)!==s)return console.error(`[adobe] OAuth nonce mismatch — possible CSRF`),null}catch(e){console.warn(`[adobe] Nonce check skipped (URL parse failed):`,e instanceof Error?e.message:String(e))}let h=E(f);if(!h)return null;let g=w();return await d({providerId:`adobe`,accessToken:h.accessToken,tokenExpiresAt:Date.now()+h.expiresIn*1e3,userName:g?.userName,userAvatar:g?.userAvatar,baseUrl:p.proxyEndpoint?void 0:e}),console.log(`[adobe] Token renewed silently`),await H().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),h.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{O=null}})(),O)}const M=`X-Slicc-Version`;function N(e){let t={};if(e.headers)for(let[n,r]of Object.entries(e.headers))n.toLowerCase()!==`x-slicc-version`&&(t[n]=r);return t[M]=`3.5.4`,{...e,headers:t}}const P=new Set;function F(e,t){if(e.headers){for(let t of Object.keys(e.headers))if(t.toLowerCase()===`x-session-id`)return e}return P.has(t)||(P.add(t),console.warn(`[adobe] Missing X-Session-Id from ${t} — using daily fallback. Attach an X-Session-Id header at the call site (see scoop-context.ts streamWithSessionId or docs/pitfalls.md).`)),{...e,headers:{...e.headers??{},"X-Session-Id":u(`adobe-provider-fallback`)}}}function I(){P.clear()}function L(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:`adobe-anthropic`,provider:`adobe`,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}const R=(e,t,n={})=>{let i=a();return(async()=>{try{let a=await k();if(String(e.api).includes(`openai`)){let o=r({...e,baseUrl:`${m()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,N(F({...n,apiKey:a},`streamAdobe[openai]`)));for await(let e of o)i.push(e)}else{let r=c({...e,baseUrl:m(),api:`anthropic-messages`},t,N(F({...n,apiKey:a},`streamAdobe[anthropic]`)));for await(let e of r)i.push(e)}i.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),i.push(L(e,t)),i.end()}})(),i},z=(t,n,r)=>{let o=a();return(async()=>{try{let a=await k();if(String(t.api).includes(`openai`)){let i=e({...t,baseUrl:`${m()}/v1`,api:`openai-completions`,compat:{...t.compat,supportsStore:!1,supportsDeveloperRole:!1}},n,N(F({...r,apiKey:a},`streamSimpleAdobe[openai]`)));for await(let e of i)o.push(e)}else{let e=i({...t,baseUrl:m(),api:`anthropic-messages`},n,N(F({...r,apiKey:a},`streamSimpleAdobe[anthropic]`)));for await(let t of e)o.push(t)}o.end()}catch(e){console.error(`[adobe] Stream error:`,e instanceof Error?e.message:String(e)),o.push(L(t,e)),o.end()}})(),o};async function B(){try{let e=await k(),t=m(),r=await fetch(`${t}/v1/models`,{headers:{Authorization:`Bearer ${e}`,[M]:`3.5.4`}});if(r.ok){let e=await r.json();if(e.data?.length){for(let t of e.data){let e={id:t.id,name:t.name};t.api!==void 0&&(e.api=t.api),t.context_window!==void 0&&(e.context_window=t.context_window),t.max_tokens!==void 0&&(e.max_tokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),g.set(t.id,e)}let r=new Map;for(let e of n())try{for(let t of o(e))r.set(t.id,t)}catch{}return e.data.map(e=>{let n=r.get(e.id),i=`adobe-${e.api===`openai`?`openai`:`anthropic`}`;return n?{...n,provider:`adobe`,api:i}:{id:e.id,name:e.name??e.id,provider:`adobe`,api:i,baseUrl:t,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},inputCost:0,outputCost:0,cacheReadCost:0,cacheWriteCost:0,reasoning:!0}})}}else console.warn(`[adobe] Proxy /v1/models returned ${r.status}, falling back to Anthropic models`)}catch(e){console.warn(`[adobe] Failed to fetch proxy models:`,e instanceof Error?e.message:String(e))}return o(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}const V=new Map;async function H(){let e=m(),t=V.get(e);if(t)return t;let n=await B();return V.set(e,n),n}function U(){t({api:`adobe-anthropic`,stream:R,streamSimple:z}),t({api:`adobe-openai`,stream:R,streamSimple:z})}export{I as __resetAdobeSessionIdWarningCacheForTests,D as config,H as getAdobeModels,k as getValidAccessToken,A as isTokenExpired,U as register};
@@ -1 +0,0 @@
1
- import{X as e}from"./index-CCGqFzR9.js";var t=e(`agent-bridge`),n=`__slicc_agent`,r=`agent-spawn-request`;function i(){let e={spawn(e){return new Promise((t,n)=>{let i=globalThis.chrome?.runtime;if(!i||typeof i.sendMessage!=`function`){n(Error(`agent: chrome.runtime.sendMessage not available`));return}let a=e=>{let r=i.lastError;if(r){n(Error(r.message??`chrome.runtime error`));return}if(e==null){n(Error(`agent: empty response from offscreen bridge`));return}let a=e;if(!a.ok){n(Error(a.error??`agent: offscreen bridge error`));return}if(!a.result){n(Error(`agent: offscreen bridge returned no result`));return}t(a.result)};try{i.sendMessage({source:`panel`,payload:{type:r,options:e}},a)}catch(e){n(e instanceof Error?e:Error(String(e)))}})}};return globalThis[n]=e,t.info(`agent bridge proxy published on globalThis.__slicc_agent`),e}export{i as publishAgentBridgeProxy};