sliccy 3.32.2 → 3.34.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 (117) hide show
  1. package/dist/ui/assets/adobe-BkTvvNWq.js +1 -0
  2. package/dist/ui/assets/{adobe-0hBB-cvI.js → adobe-C_KbKd0n.js} +2 -2
  3. package/dist/ui/assets/{agent-bridge-B4fMRTq4.js → agent-bridge-FF6kv2fb.js} +1 -1
  4. package/dist/ui/assets/{agent-message-to-chat-BtGucQZb.js → agent-message-to-chat-DkR9NV9t.js} +1 -1
  5. package/dist/ui/assets/anthropic-DfZXQaUp.js +39 -0
  6. package/dist/ui/assets/{anthropic-BtADBMTr.js → anthropic-HYC-Omg5.js} +1 -1
  7. package/dist/ui/assets/{apps-JmnZT0_d.js → apps-BxS_QnGn.js} +1 -1
  8. package/dist/ui/assets/azure-openai-CLWQP72f.js +1 -0
  9. package/dist/ui/assets/{azure-openai-BF07BSkG.js → azure-openai-Vm01DpT_.js} +1 -1
  10. package/dist/ui/assets/azure-openai-responses-33r3NvaZ.js +1 -0
  11. package/dist/ui/assets/{azure-openai-responses-DAwt8x-O.js → azure-openai-responses-DUgZZ6eN.js} +1 -1
  12. package/dist/ui/assets/{biome_wasm-CwT46YkP.js → biome_wasm-CvSAK_uf.js} +1 -1
  13. package/dist/ui/assets/{bsh-watchdog-DOS3grX1.js → bsh-watchdog-Du7KRjWw.js} +1 -1
  14. package/dist/ui/assets/{cdp-B0CbWj0b.js → cdp-BMZH9kfw.js} +3 -3
  15. package/dist/ui/assets/{cdp-ws-page-bridge-BaREToXn.js → cdp-ws-page-bridge-DYY56Jqj.js} +1 -1
  16. package/dist/ui/assets/{common-DPijqIuN.js → common-BG1B2pGi.js} +1 -1
  17. package/dist/ui/assets/{connect-surface-B8X2BxSx.js → connect-surface-0lxpf-5t.js} +1 -1
  18. package/dist/ui/assets/cost-command-DNDC9f5s.js +1 -0
  19. package/dist/ui/assets/dist-BanEKbJr.js +18 -0
  20. package/dist/ui/assets/dist-CfHbsibs.js +2 -0
  21. package/dist/ui/assets/dist-JjJ6duRw.js +12 -0
  22. package/dist/ui/assets/dist-Yxhff45Z.js +2 -0
  23. package/dist/ui/assets/{es-BvNkEnLt.js → es-CMFNtJSL.js} +5 -5
  24. package/dist/ui/assets/{follower-sprinkle-bridge-i8o45Iz0.js → follower-sprinkle-bridge-CszKWKEN.js} +1 -1
  25. package/dist/ui/assets/{github-BHPt4SGX.js → github-D5chbBco.js} +1 -1
  26. package/dist/ui/assets/github-copilot-DB_-fjnz.js +1 -0
  27. package/dist/ui/assets/{github-copilot-C1p7G_lc.js → github-copilot-Hxxj6MFv.js} +2 -2
  28. package/dist/ui/assets/{github-D3FUw7Ft.js → github-lQAdGX0Z.js} +2 -2
  29. package/dist/ui/assets/{google-vnvvxTni.js → google-6xMZvOez.js} +1 -1
  30. package/dist/ui/assets/google-CbHlbByo.js +1 -0
  31. package/dist/ui/assets/{google-shared-DNHwaM2i.js → google-shared-CR-aIyZa.js} +1 -1
  32. package/dist/ui/assets/{google-shared-Ck5bpSOw.js → google-shared-DX0yj3UK.js} +3 -3
  33. package/dist/ui/assets/{google-vertex-CkktMzxu.js → google-vertex-BHOYutHi.js} +1 -1
  34. package/dist/ui/assets/{google-vertex-CwyKiWDF.js → google-vertex-Dpr6tNZD.js} +1 -1
  35. package/dist/ui/assets/{hosted-config-apply-CAtsa6WM.js → hosted-config-apply-LNWPnWio.js} +1 -1
  36. package/dist/ui/assets/{intercepted-oauth-CGJydQlU.js → intercepted-oauth-D41iguEu.js} +1 -1
  37. package/dist/ui/assets/{kernel-worker-Cjl8fjr8.js → kernel-worker-ApBe2nsN.js} +1089 -1062
  38. package/dist/ui/assets/{lick-ws-bridge-Ca7uAWlQ.js → lick-ws-bridge-DLkh-q6E.js} +1 -1
  39. package/dist/ui/assets/{local-llm-YcdPZyUH.js → local-llm-BUHqKQIs.js} +1 -1
  40. package/dist/ui/assets/{magick-wasm-C8lW0-35.js → magick-wasm-WfPf-mzW.js} +1 -1
  41. package/dist/ui/assets/main-CiPLuc4Y.js +1683 -0
  42. package/dist/ui/assets/{main-cherry-CfIm_qBH.js → main-cherry-CvuKVZgJ.js} +1 -1
  43. package/dist/ui/assets/migration-run-CjK_K6H_.js +1 -0
  44. package/dist/ui/assets/migration-splash-D-cAt2r9.js +1 -0
  45. package/dist/ui/assets/{mistral-Dgd8b7W0.js → mistral-3BOt-kpO.js} +2 -2
  46. package/dist/ui/assets/{mistral-DeuCdnLs.js → mistral-7zIzaf30.js} +1 -1
  47. package/dist/ui/assets/nodejs-BOWNwnaN.js +1 -0
  48. package/dist/ui/assets/{nuke-command-alibr6is.js → nuke-command-D8Fh0gbL.js} +1 -1
  49. package/dist/ui/assets/{oauth-BvQKYNNy.js → oauth-DLszIWW7.js} +1 -1
  50. package/dist/ui/assets/{oauth-bootstrap-BAnHB1H5.js → oauth-bootstrap-Bkf6-I68.js} +2 -2
  51. package/dist/ui/assets/{oauth-service-2Bm2tu9h.js → oauth-service-DclCNOyC.js} +1 -1
  52. package/dist/ui/assets/{oauth-service-HBkDeXXf.js → oauth-service-IRbgSoZf.js} +1 -1
  53. package/dist/ui/assets/offscreen-client-WfjjyTww.js +1 -0
  54. package/dist/ui/assets/{onboarding-orchestrator-VipPxQM9.js → onboarding-orchestrator-Cj4wwL1r.js} +1 -1
  55. package/dist/ui/assets/{openai-codex-BOCOi8v3.js → openai-codex-DQpjVOFB.js} +1 -1
  56. package/dist/ui/assets/openai-codex-o1t-m8rL.js +1 -0
  57. package/dist/ui/assets/{openai-codex-responses-2_MR5Im1.js → openai-codex-responses-DGMmjslY.js} +1 -1
  58. package/dist/ui/assets/{openai-codex-responses-XAgywVT2.js → openai-codex-responses-DhoTOdH3.js} +4 -4
  59. package/dist/ui/assets/{openai-completions-aOEJoPfR.js → openai-completions-CTH4LB2F.js} +1 -1
  60. package/dist/ui/assets/openai-responses-D68JIQf1.js +1 -0
  61. package/dist/ui/assets/{openai-responses-DV7QYgXj.js → openai-responses-Hs-gRUiN.js} +1 -1
  62. package/dist/ui/assets/{openai-responses-shared-BK_I3ssh.js → openai-responses-shared-S3zguGjk.js} +1 -1
  63. package/dist/ui/assets/{openai-responses-shared-CU6P3yaz.js → openai-responses-shared-yJFA8VNU.js} +5 -5
  64. package/dist/ui/assets/{openrouter-C8oMEs0J.js → openrouter-B2BsIHza.js} +1 -1
  65. package/dist/ui/assets/openrouter-UArPIjqO.js +1 -0
  66. package/dist/ui/assets/opfs-leader-election-BJDtxHPr.js +1 -0
  67. package/dist/ui/assets/opfs-readonly-banner-BwveszbN.js +1 -0
  68. package/dist/ui/assets/{panel-rpc-handlers-DHlnRnNz.js → panel-rpc-handlers-CkCiX7Tp.js} +1 -1
  69. package/dist/ui/assets/panel-vfs-guard-1E455_lR.js +1 -0
  70. package/dist/ui/assets/provider-BYq4p5If.js +1 -0
  71. package/dist/ui/assets/{provider-DB2BpoXt.js → provider-Cs2-iVKM.js} +2 -2
  72. package/dist/ui/assets/provider-store-access-G9HYvkSk.js +1 -0
  73. package/dist/ui/assets/provider-store-access-Mcnc2eQL.js +1 -0
  74. package/dist/ui/assets/{proxied-fetch-ChX8PtVt.js → proxied-fetch-B31wB0pw.js} +1 -1
  75. package/dist/ui/assets/py-realm-worker-DhXHapes.js +23 -0
  76. package/dist/ui/assets/pyodide-BXKIZesR.js +3 -0
  77. package/dist/ui/assets/{remote-terminal-view-BYUBsOyw.js → remote-terminal-view-D8Lym4ke.js} +1 -1
  78. package/dist/ui/assets/remote-vfs-client-CX-U7Vpk.js +1 -0
  79. package/dist/ui/assets/{secret-env-yupQt_od.js → secret-env-We7YhnkP.js} +1 -1
  80. package/dist/ui/assets/{slicc-editor-Bdty0qFW.js → slicc-editor-D1shQp3f.js} +1 -1
  81. package/dist/ui/assets/spawn-BROIpDuE.js +1 -0
  82. package/dist/ui/assets/{sql-wasm-D0KJBRcf.js → sql-wasm-BKOzFTaN.js} +2 -2
  83. package/dist/ui/assets/src-LhD223BJ.js +3 -0
  84. package/dist/ui/assets/{store-CoqxzWD_.js → store-DcwzvMDt.js} +1 -1
  85. package/dist/ui/assets/{tray-leave-runtime-DgzvG0cq.js → tray-leave-runtime-D0wlJrCA.js} +1 -1
  86. package/dist/ui/assets/{typescript-D8obSBRU.js → typescript-BegR4udl.js} +9 -9
  87. package/dist/ui/assets/{upgrade-detection-SLtjojQ6.js → upgrade-detection-fcwNs12W.js} +1 -1
  88. package/dist/ui/assets/{web-2nwzshjs.js → web-VQMyUYjU.js} +1 -1
  89. package/dist/ui/assets/writable-vfs-client-C-OKNpFf.js +1 -0
  90. package/dist/ui/assets/{ws-subscribers-D0P6rQ_C.js → ws-subscribers-CWuwl3YA.js} +1 -1
  91. package/dist/ui/assets/{xai-grok-CGuHGhwm.js → xai-grok-DEMNJsqQ.js} +1 -1
  92. package/dist/ui/assets/xai-grok-g5ns0DU5.js +1 -0
  93. package/dist/ui/electron-overlay-entry.js +10 -10
  94. package/dist/ui/index.html +1 -1
  95. package/dist/ui/packages/webapp/index.html +1 -1
  96. package/dist/ui/preview-sw.js +1 -4
  97. package/package.json +1 -1
  98. package/dist/ui/assets/adobe-Siq458HU.js +0 -1
  99. package/dist/ui/assets/anthropic-ClPBBm6O.js +0 -39
  100. package/dist/ui/assets/azure-openai-BadnFKYq.js +0 -1
  101. package/dist/ui/assets/azure-openai-responses-PyfCX2VE.js +0 -1
  102. package/dist/ui/assets/cost-command-CEPNh0VO.js +0 -1
  103. package/dist/ui/assets/github-copilot-C7jxXCHT.js +0 -1
  104. package/dist/ui/assets/google-DS3rVZP1.js +0 -1
  105. package/dist/ui/assets/main-BccCPfVs.js +0 -1685
  106. package/dist/ui/assets/nodejs-D_wR4YhI.js +0 -1
  107. package/dist/ui/assets/offscreen-client-ijhP4Z8j.js +0 -1
  108. package/dist/ui/assets/openai-codex-BquojmIo.js +0 -1
  109. package/dist/ui/assets/openai-responses-CSMuG2OA.js +0 -1
  110. package/dist/ui/assets/openrouter-ybLvFVQF.js +0 -1
  111. package/dist/ui/assets/provider-CuDhBMAi.js +0 -1
  112. package/dist/ui/assets/provider-store-access-C_cZs2wy.js +0 -1
  113. package/dist/ui/assets/provider-store-access-DGBFQqC5.js +0 -1
  114. package/dist/ui/assets/py-realm-worker-BDTXsbRf.js +0 -23
  115. package/dist/ui/assets/pyodide-CjGywQ7Z.js +0 -3
  116. package/dist/ui/assets/spawn-BQL7p7C6.js +0 -1
  117. package/dist/ui/assets/xai-grok-24FXuNvx.js +0 -1
@@ -1 +1 @@
1
- import{ct as e,lt as t}from"./kernel-worker-Cjl8fjr8.js";const n=`slicc:last-seen-version`;function r(){return{version:`3.32.2`,releasedAt:`2026-06-05T13:20:30Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};
1
+ import{ft as e,pt as t}from"./kernel-worker-ApBe2nsN.js";const n=`slicc:last-seen-version`;function r(){return{version:`3.34.0`,releasedAt:`2026-06-05T14:57:12Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};
@@ -1 +1 @@
1
- import{_t as e,pt as t}from"./kernel-worker-Cjl8fjr8.js";import{t as n}from"./common-DPijqIuN.js";import{n as r,t as i}from"./biome_wasm-CwT46YkP.js";var a=t((t=>{var a=t&&t.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),o=t&&t.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),s=t&&t.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!==`default`&&a(n,t,r[i]);return o(n,t),n}})();Object.defineProperty(t,"__esModule",{value:!0}),t.Biome=void 0;let c=s((r(),e(i))),l=n();t.Biome=class extends l.BiomeCommon{constructor(){super(c)}}}));export default a();
1
+ import{_t as e,xt as t}from"./kernel-worker-ApBe2nsN.js";import{t as n}from"./common-BG1B2pGi.js";import{n as r,t as i}from"./biome_wasm-CvSAK_uf.js";var a=e((e=>{var a=e&&e.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||(`get`in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),o=e&&e.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),s=e&&e.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!==`default`&&a(n,t,r[i]);return o(n,t),n}})();Object.defineProperty(e,"__esModule",{value:!0}),e.Biome=void 0;let c=s((r(),t(i))),l=n();e.Biome=class extends l.BiomeCommon{constructor(){super(c)}}}));export default a();
@@ -0,0 +1 @@
1
+ import{P as e}from"./main-CiPLuc4Y.js";function t(e){return new n(e)}var n=class{transport;log;genId;pending=new Map;unsubscribe=null;counter=0;constructor(e){this.transport=e.transport,this.log=e.logger??console,this.genId=e.generateRequestId??(()=>{this.counter=this.counter+1>>>0;let e=Math.random().toString(36).slice(2,8);return`vfs-w-${this.counter.toString(36)}-${e}`}),this.unsubscribe=this.transport.onMessage(e=>{if(!r(e)||e.source!==`offscreen`)return;let t=e.payload;i(t)&&this.handleResult(t)})}readDir(e){let t=this.genId(),n={type:`vfs-read-dir`,requestId:t,path:e};return this.request(t,`vfs-read-dir-result`,e,n)}readFile(e,t){let n=this.genId(),r={type:`vfs-read-file`,requestId:n,path:e,encoding:t?.encoding??`utf-8`};return this.request(n,`vfs-read-file-result`,e,r)}stat(e){let t=this.genId(),n={type:`vfs-stat`,requestId:t,path:e};return this.request(t,`vfs-stat-result`,e,n)}writeFile(t,n,r){let i=this.genId(),a=r?.recursive;if(n instanceof Uint8Array){let e={type:`vfs-write-file`,requestId:i,path:t,encoding:`binary`,data:n,...a===void 0?{}:{recursive:a}},r=n.buffer,o=typeof ArrayBuffer<`u`&&r instanceof ArrayBuffer?[r]:void 0;return this.request(i,`vfs-write-file-result`,t,e,o)}if(typeof n!=`string`)return Promise.reject(new e(`EINVAL`,`writeFile content must be string or Uint8Array`,t));let o={type:`vfs-write-file`,requestId:i,path:t,encoding:`utf-8`,data:n,...a===void 0?{}:{recursive:a}};return this.request(i,`vfs-write-file-result`,t,o)}mkdir(e,t){let n=this.genId(),r=t?.recursive,i={type:`vfs-mkdir`,requestId:n,path:e,...r===void 0?{}:{recursive:r}};return this.request(n,`vfs-mkdir-result`,e,i)}rm(e,t){let n=this.genId(),r=t?.recursive,i={type:`vfs-rm`,requestId:n,path:e,...r===void 0?{}:{recursive:r}};return this.request(n,`vfs-rm-result`,e,i)}flush(){let e=this.genId(),t={type:`vfs-flush`,requestId:e};return this.request(e,`vfs-flush-result`,``,t)}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,t]of this.pending)t.reject(new e(`EBADF`,`RemoteWritableVfsClient disposed`,t.path));this.pending.clear()}request(e,t,n,r,i){return new Promise((a,o)=>{this.pending.set(e,{resolve:a,reject:o,expect:t,path:n});try{this.transport.send(r,i)}catch(t){this.pending.delete(e),o(t)}})}handleResult(t){let n=this.pending.get(t.requestId);if(!n){this.log.debug?.(`[remote-writable-vfs-client] drop unmatched response`,{type:t.type,requestId:t.requestId});return}if(n.expect!==t.type){this.pending.delete(t.requestId),n.reject(new e(`EIO`,`vfs-rpc response type mismatch (got ${t.type})`,n.path));return}if(this.pending.delete(t.requestId),t.ok===!1){n.reject(a(t.error.code,t.error.message,t.error.path??n.path));return}switch(t.type){case`vfs-read-dir-result`:n.resolve(t.entries);return;case`vfs-read-file-result`:n.resolve(t.data);return;case`vfs-stat-result`:n.resolve(t.stats);return;case`vfs-write-file-result`:case`vfs-mkdir-result`:case`vfs-rm-result`:case`vfs-flush-result`:n.resolve(void 0);return}}};function r(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function i(e){if(typeof e.requestId!=`string`)return!1;let t=e.type;return t===`vfs-read-dir-result`||t===`vfs-read-file-result`||t===`vfs-stat-result`||t===`vfs-write-file-result`||t===`vfs-mkdir-result`||t===`vfs-rm-result`||t===`vfs-flush-result`}function a(t,n,r){return new e([`ENOENT`,`EEXIST`,`ENOTDIR`,`EISDIR`,`ENOTEMPTY`,`EINVAL`,`EACCES`,`ELOOP`,`EBUSY`,`EFBIG`,`EBADF`,`EIO`].includes(t)?t:`EIO`,n,r)}export{t as createRemoteWritableVfsClient};
@@ -1 +1 @@
1
- import{et as e,ft as t}from"./kernel-worker-Cjl8fjr8.js";const n=t(`ws-subscribers`);var r=class{subs=new Map;tabRefs=new Map;bridge;webhooks;dispatcher;unsubscribeBridge;seq=1;constructor(e){this.bridge=e.bridge,this.webhooks=e.webhooks,this.dispatcher=e.dispatcher,this.unsubscribeBridge=this.bridge.onMatchedFrame((e,t)=>{this.handleFrame(e,t)})}async observe(e){this.validateSink(e);let t=`wssub-${this.seq++}-${Date.now().toString(36)}`,n={id:t,targetId:e.targetId,urlMatch:e.urlMatch,filter:e.filter,forward:e.forward,scoopJid:e.scoopJid,createdAt:new Date().toISOString()},r=this.tabRefs.get(e.targetId)??0;r===0&&await this.bridge.installRouter(e.targetId),this.tabRefs.set(e.targetId,r+1);try{await this.bridge.registerSelector(e.targetId,t,e.urlMatch,e.filter)}catch(t){throw this.releaseTab(e.targetId),t}return this.subs.set(t,n),this.toInfo(n)}async update(e,t){let n=this.subs.get(e);if(!n)throw Error(`browser.websocket: subscriber not found: ${e}`);let r=t.urlMatch,i=t.filter;return await this.bridge.updateSelector(n.targetId,e,r,i),t.urlMatch===null?delete n.urlMatch:t.urlMatch!==void 0&&(n.urlMatch=t.urlMatch),t.filter===null?delete n.filter:t.filter!==void 0&&(n.filter=t.filter),this.toInfo(n)}async close(e){let t=this.subs.get(e);if(!t)return!1;this.subs.delete(e);try{await this.bridge.unregisterSelector(t.targetId,e)}catch(t){n.warn(`unregisterSelector failed during close`,{id:e,error:t instanceof Error?t.message:String(t)})}return this.releaseTab(t.targetId),!0}list(){return Array.from(this.subs.values(),e=>this.toInfo(e))}async dropForScoop(e){let t=Array.from(this.subs.values()).filter(t=>t.scoopJid===e);for(let e of t)await this.close(e.id);return t.length}dispose(){this.unsubscribeBridge(),this.subs.clear(),this.tabRefs.clear()}validateSink(t){let n=t.forward;if(!n||typeof n!=`object`)throw Error(`browser.websocket: forward.sink is required`);switch(n.sink){case`webhook`:if(typeof n.webhookId!=`string`||!n.webhookId.trim())throw Error(`browser.websocket: webhook sink requires a webhookId`);if(!this.webhooks.has(n.webhookId))throw Error(`browser.websocket: webhookId "${n.webhookId}" is not registered; create it with \`webhook create\` first`);return;case`scoop`:if(typeof n.scoopJid!=`string`||!n.scoopJid.trim())throw Error(`browser.websocket: scoop sink requires a scoopJid`);return;case`vfs`:{if(typeof n.path!=`string`||!n.path.startsWith(`/workspace/`))throw Error(`browser.websocket: vfs sink path must be an absolute /workspace/... path`);let t=e(n.path);if(!t.startsWith(`/workspace/`)&&t!==`/workspace`)throw Error(`browser.websocket: vfs sink path escapes /workspace/ after normalization (got "${n.path}" → "${t}")`);return}case`log`:return;default:throw Error(`browser.websocket: unknown sink "${n.sink??``}"`)}}releaseTab(e){let t=(this.tabRefs.get(e)??1)-1;t<=0?this.tabRefs.delete(e):this.tabRefs.set(e,t)}toInfo(e){let t={id:e.id,targetId:e.targetId,forward:e.forward,createdAt:e.createdAt};return e.urlMatch!==void 0&&(t.urlMatch=e.urlMatch),e.filter!==void 0&&(t.filter=e.filter),e.scoopJid!==void 0&&(t.scoopJid=e.scoopJid),t}async handleFrame(e,t){let r=this.subs.get(e);if(!r)return;let i=r.forward;try{switch(i.sink){case`webhook`:await this.dispatcher.webhook(i.webhookId,t);return;case`scoop`:await this.dispatcher.scoop(i.scoopJid,t);return;case`vfs`:await this.dispatcher.vfs(i.path,t);return;case`log`:this.dispatcher.log(t);return}}catch(t){n.warn(`sink dispatch failed`,{subId:e,sink:i.sink,error:t instanceof Error?t.message:String(t)})}}};export{r as WsSubscriberRegistry};
1
+ import{gt as e,it as t}from"./kernel-worker-ApBe2nsN.js";const n=e(`ws-subscribers`);var r=class{subs=new Map;tabRefs=new Map;bridge;webhooks;dispatcher;unsubscribeBridge;seq=1;constructor(e){this.bridge=e.bridge,this.webhooks=e.webhooks,this.dispatcher=e.dispatcher,this.unsubscribeBridge=this.bridge.onMatchedFrame((e,t)=>{this.handleFrame(e,t)})}async observe(e){this.validateSink(e);let t=`wssub-${this.seq++}-${Date.now().toString(36)}`,n={id:t,targetId:e.targetId,urlMatch:e.urlMatch,filter:e.filter,forward:e.forward,scoopJid:e.scoopJid,createdAt:new Date().toISOString()},r=this.tabRefs.get(e.targetId)??0;r===0&&await this.bridge.installRouter(e.targetId),this.tabRefs.set(e.targetId,r+1);try{await this.bridge.registerSelector(e.targetId,t,e.urlMatch,e.filter)}catch(t){throw this.releaseTab(e.targetId),t}return this.subs.set(t,n),this.toInfo(n)}async update(e,t){let n=this.subs.get(e);if(!n)throw Error(`browser.websocket: subscriber not found: ${e}`);let r=t.urlMatch,i=t.filter;return await this.bridge.updateSelector(n.targetId,e,r,i),t.urlMatch===null?delete n.urlMatch:t.urlMatch!==void 0&&(n.urlMatch=t.urlMatch),t.filter===null?delete n.filter:t.filter!==void 0&&(n.filter=t.filter),this.toInfo(n)}async close(e){let t=this.subs.get(e);if(!t)return!1;this.subs.delete(e);try{await this.bridge.unregisterSelector(t.targetId,e)}catch(t){n.warn(`unregisterSelector failed during close`,{id:e,error:t instanceof Error?t.message:String(t)})}return this.releaseTab(t.targetId),!0}list(){return Array.from(this.subs.values(),e=>this.toInfo(e))}async dropForScoop(e){let t=Array.from(this.subs.values()).filter(t=>t.scoopJid===e);for(let e of t)await this.close(e.id);return t.length}dispose(){this.unsubscribeBridge(),this.subs.clear(),this.tabRefs.clear()}validateSink(e){let n=e.forward;if(!n||typeof n!=`object`)throw Error(`browser.websocket: forward.sink is required`);switch(n.sink){case`webhook`:if(typeof n.webhookId!=`string`||!n.webhookId.trim())throw Error(`browser.websocket: webhook sink requires a webhookId`);if(!this.webhooks.has(n.webhookId))throw Error(`browser.websocket: webhookId "${n.webhookId}" is not registered; create it with \`webhook create\` first`);return;case`scoop`:if(typeof n.scoopJid!=`string`||!n.scoopJid.trim())throw Error(`browser.websocket: scoop sink requires a scoopJid`);return;case`vfs`:{if(typeof n.path!=`string`||!n.path.startsWith(`/workspace/`))throw Error(`browser.websocket: vfs sink path must be an absolute /workspace/... path`);let e=t(n.path);if(!e.startsWith(`/workspace/`)&&e!==`/workspace`)throw Error(`browser.websocket: vfs sink path escapes /workspace/ after normalization (got "${n.path}" → "${e}")`);return}case`log`:return;default:throw Error(`browser.websocket: unknown sink "${n.sink??``}"`)}}releaseTab(e){let t=(this.tabRefs.get(e)??1)-1;t<=0?this.tabRefs.delete(e):this.tabRefs.set(e,t)}toInfo(e){let t={id:e.id,targetId:e.targetId,forward:e.forward,createdAt:e.createdAt};return e.urlMatch!==void 0&&(t.urlMatch=e.urlMatch),e.filter!==void 0&&(t.filter=e.filter),e.scoopJid!==void 0&&(t.scoopJid=e.scoopJid),t}async handleFrame(e,t){let r=this.subs.get(e);if(!r)return;let i=r.forward;try{switch(i.sink){case`webhook`:await this.dispatcher.webhook(i.webhookId,t);return;case`scoop`:await this.dispatcher.scoop(i.scoopJid,t);return;case`vfs`:await this.dispatcher.vfs(i.path,t);return;case`log`:this.dispatcher.log(t);return}}catch(t){n.warn(`sink dispatch failed`,{subId:e,sink:i.sink,error:t instanceof Error?t.message:String(t)})}}};export{r as WsSubscriberRegistry};
@@ -1 +1 @@
1
- import{K as e,Q as t,X as n,f as r,ot as i,r as a}from"./main-BccCPfVs.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-bnlIBeu-.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-CeEBaUMC.js";import{sanitizePayload as u}from"./xai-grok-sanitize-CR2JoOJd.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 r({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=t();return(async()=>{try{let t=await M(),o=i.sessionId,s=e({...n,baseUrl:y,api:b},r,{...i,apiKey:t,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=(e,r,i)=>{let a=t();return(async()=>{try{let t=await M(),o=i?.sessionId,s=n({...e,baseUrl:y,api:b},r,{...i,apiKey:t,headers:F(i?.headers,o),onPayload:P(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(N(e,t)),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 i=E(),a=await D(i),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,i);await r({providerId:d,accessToken:S.access_token,refreshToken:S.refresh_token,tokenExpiresAt:Date.now()+(S.expires_in??21600)*1e3,baseUrl:y}),t()},onOAuthLogout:async()=>{await r({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=j();if(!e?.refreshToken)return null;let t=await A(e.refreshToken);return t?.access_token?(await r({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(){i({api:x,stream:I,streamSimple:L})}export{o as XaiErrorCode,s as XaiOAuthError,R as config,z as register};
1
+ import{K as e,Q as t,X as n,f as r,ot as i,r as a}from"./main-CiPLuc4Y.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-bnlIBeu-.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-CeEBaUMC.js";import{sanitizePayload as u}from"./xai-grok-sanitize-CR2JoOJd.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 r({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=t();return(async()=>{try{let t=await M(),o=i.sessionId,s=e({...n,baseUrl:y,api:b},r,{...i,apiKey:t,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=(e,r,i)=>{let a=t();return(async()=>{try{let t=await M(),o=i?.sessionId,s=n({...e,baseUrl:y,api:b},r,{...i,apiKey:t,headers:F(i?.headers,o),onPayload:P(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(N(e,t)),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 i=E(),a=await D(i),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,i);await r({providerId:d,accessToken:S.access_token,refreshToken:S.refresh_token,tokenExpiresAt:Date.now()+(S.expires_in??21600)*1e3,baseUrl:y}),t()},onOAuthLogout:async()=>{await r({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=j();if(!e?.refreshToken)return null;let t=await A(e.refreshToken);return t?.access_token?(await r({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(){i({api:x,stream:I,streamSimple:L})}export{o as XaiErrorCode,s as XaiOAuthError,R as config,z as register};
@@ -0,0 +1 @@
1
+ import{C as e,O as t,U as n,Y as r,q as i,rt as a}from"./kernel-worker-ApBe2nsN.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-ByEMMSoz.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-B0Tf--xf.js";import{sanitizePayload as u}from"./xai-grok-sanitize-CV6qvaEF.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 e().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 n=e.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return e.accessToken;if(e.refreshToken){let n=await O(e.refreshToken);if(n?.access_token)return await t({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.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,t,n)=>{let a=r();return(async()=>{try{let r=await A(),o=n?.sessionId,s=i({...e,baseUrl:_,api:v},t,{...n,apiKey:r,headers:N(n?.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,n,r)=>{let i=w(),a=await T(i),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`,r?.scopes??`openid profile email offline_access grok-cli:access api:access`),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:`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,i);await t({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),n()},onOAuthLogout:async()=>{await t({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=k();if(!e?.refreshToken)return null;let n=await O(e.refreshToken);return n?.access_token?(await t({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.access_token):null}};function L(){a({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var X=`<?xml version="1.0" encoding="UTF-8"?>
1
+ "use strict";(()=>{var F=`<?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">
@@ -24,7 +24,7 @@
24
24
  </g><g id="Left_Eye" data-name="Left Eye">
25
25
  <circle id="Right_Eye_Outline" data-name="Right Eye Outline" cx="175.1" cy="250.34" r="64.78" style="fill: rgb(0, 0, 0); stroke: rgb(255, 255, 255); stroke-miterlimit: 10; stroke-width: 6px;"/>
26
26
  <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(255, 255, 255);"/>
27
- </g></g></g></svg>`;var B=`<?xml version="1.0" encoding="UTF-8"?>
27
+ </g></g></g></svg>`;var X=`<?xml version="1.0" encoding="UTF-8"?>
28
28
  <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">
29
29
  <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: #fff; stroke: #000; stroke-linejoin: round; stroke-width: 20px;"/>
30
30
  <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 H=[{id:"chat",label:"Chat"},{id:"terminal",label:"Terminal"},{id:"files",label:"Files"},{id:"memory",label:"Memory"}],q=H,M="chat",me=new Set(H.map(r=>r.id));function u(r,e=M){return r&&r.length>0?r:e}var ne=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],ae="top-right",se=6,ie=12,le=.6;function m(r,e=ae){return ne.includes(r)?r:e}function T(r={}){return{open:r.open??!1,activeTab:u(r.activeTab,M),corner:m(r.corner)}}function Z(r){return{...r,open:!r.open}}function k(r,e){return r.open===e?r:{...r,open:e}}function R(r,e){let t=u(e,r.activeTab);return r.activeTab===t?r:{...r,activeTab:t}}function A(r,e){let t=m(e,r.corner);return r.corner===t?r:{...r,corner:t}}function O(r,e){return r>=se||r>=ie&&e>=le}function $({clientX:r,clientY:e,viewportWidth:t,viewportHeight:o,velocityXPxPerMs:n=0,velocityYPxPerMs:a=0,flickProjectionMs:s=180}){let l=j(r+n*s,0,t),p=j(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,_=Math.min(f,b,S,g);return _===f?"top":_===b?"bottom":_===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 j(r,e,t){return Math.min(Math.max(r,e),t)}var W="slicc-electron-overlay:set-tab";var U="slicc-electron-overlay-root",N="slicc-electron-overlay",de="Semicolon",K=";",ge="slicc-electron-overlay:toggle",C="slicc-electron-launcher",L="slicc-electron-sidebar",v="",y=18,Q="slicc-electron-overlay-launcher-corner";function F(r,e){let t=r.createElement("style");return t.textContent=e,t}function z(r){return r.replace(/<\?xml[^?]*\?>\s*/i,"")}function G(r,e){let o=new DOMParser().parseFromString(e,"image/svg+xml").documentElement;return r.importNode(o,!0)}var V=`
53
+ </g></g></g></svg>`;var B=[{id:"chat",label:"Chat"},{id:"terminal",label:"Terminal"},{id:"files",label:"Files"},{id:"memory",label:"Memory"}],H=B,S="chat",ye=new Set(B.map(r=>r.id));function h(r,e=S){return r&&r.length>0?r:e}var se=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],ne="top-right",ae=6,ie=12,le=.6;function y(r,e=ne){return se.includes(r)?r:e}function k(r={}){return{open:r.open??!1,activeTab:h(r.activeTab,S),corner:y(r.corner)}}function W(r){return{...r,open:!r.open}}function T(r,e){return r.open===e?r:{...r,open:e}}function _(r,e){let t=h(e,r.activeTab);return r.activeTab===t?r:{...r,activeTab:t}}function A(r,e){let t=y(e,r.corner);return r.corner===t?r:{...r,corner:t}}function O(r,e){return r>=ae||r>=ie&&e>=le}function Z({clientX:r,clientY:e,viewportWidth:t,viewportHeight:o,velocityXPxPerMs:s=0,velocityYPxPerMs:n=0,flickProjectionMs:a=180}){let l=j(r+s*a,0,t),p=j(e+n*a,0,o),i=l/t,c=p/o,d=i>1/3&&i<2/3,u=c>1/3&&c<2/3;if(d&&u){let b=c,f=1-c,M=i,g=1-i,w=Math.min(b,f,M,g);return w===b?"top":w===f?"bottom":w===M?"left":"right"}if(d)return c<.5?"top":"bottom";if(u)return i<.5?"left":"right";let E=i<.5?"left":"right";return`${c<.5?"top":"bottom"}-${E}`}function j(r,e,t){return Math.min(Math.max(r,e),t)}var $="slicc-electron-overlay:set-tab";var U="slicc-electron-overlay-root",V="slicc-electron-overlay",de="Semicolon",K=";",ge="slicc-electron-overlay:toggle",C="slicc-electron-launcher",L="slicc-electron-sidebar",v="",m=18,Q="slicc-electron-overlay-launcher-corner";function D(r,e){let t=r.createElement("style");return t.textContent=e,t}function z(r){return r.replace(/<\?xml[^?]*\?>\s*/i,"")}function G(r,e){let o=new DOMParser().parseFromString(e,"image/svg+xml").documentElement;return r.importNode(o,!0)}var Y=`
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 he(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(F(t,`
103
- ${V}
102
+ `;function ue(r,e){try{let t=new URL(r,window.location.href);return t.searchParams.set("tab",e),t.toString()}catch{return r}}var N=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=m;e.appendChild(D(t,`
103
+ ${Y}
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.appendChild(G(t,z(X))),l.setAttribute("aria-hidden","true");let p=t.createElement("div");p.className="logo-icon logo-for-light",p.appendChild(G(t,z(B))),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=J(t.startLeft+o,y,i),h=J(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=$({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(F(t,`
207
- ${V}
206
+ `));let s=t.createElement("button");s.type="button";let a=`${navigator.platform?.startsWith("Mac")||navigator.userAgent?.includes("Mac")?"\u2318":"Ctrl+"}${K}`;s.setAttribute("aria-label","Toggle SLICC overlay"),s.title=`Toggle SLICC (${a})`;let l=t.createElement("div");l.className="logo-icon logo-for-dark",l.appendChild(G(t,z(F))),l.setAttribute("aria-hidden","true");let p=t.createElement("div");p.className="logo-icon logo-for-light",p.appendChild(G(t,z(X))),p.setAttribute("aria-hidden","true");let i=t.createElement("span");i.className="tab-label",i.textContent="SLICC",s.appendChild(l),s.appendChild(p),s.appendChild(i),e.appendChild(s),this.button=s,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,s=e.clientY-t.startY,n=Math.hypot(o,s);!t.dragging&&O(n,0)&&(t.dragging=!0,this.setAttribute("dragging",""));let a=Math.max(e.timeStamp-t.lastTimestamp,1),l=(e.clientX-t.lastX)/a,p=(e.clientY-t.lastY)/a;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(m,window.innerWidth-t.width-m),c=Math.max(m,window.innerHeight-t.height-m),d=J(t.startLeft+o,m,i),u=J(t.startTop+s,m,c);this.style.left=`${d}px`,this.style.top=`${u}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 s=Math.hypot(e.clientX-o.startX,e.clientY-o.startY),n=Math.hypot(o.velocityX,o.velocityY);if(t&&(o.dragging||O(s,n))){let l=Z({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=""}},P=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=h(this.getAttribute("active-tab"));e.appendChild(D(t,`
207
+ ${Y}
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 q){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=he(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:W,tab:e},"*"),this.lastPostedTab=e)}},w=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(k(this.state,e))}get activeTab(){return this.state.activeTab}set activeTab(e){this.applyState(R(this.state,e))}get corner(){return this.state.corner}set corner(e){this.applyState(A(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(Z(this.state))}showSidebar(){this.applyState(k(this.state,!0))}hideSidebar(){this.applyState(k(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===de)&&(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===ge&&this.toggle()};render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument;e.appendChild(F(t,`
259
- ${V}
258
+ `));let s=t.createElement("div");s.className="backdrop",s.setAttribute("part","backdrop"),s.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-close",{bubbles:!0,composed:!0}))}),e.appendChild(s);let n=t.createElement("aside");n.className="sidebar",n.setAttribute("part","sidebar"),n.setAttribute("aria-label","SLICC overlay sidebar");let a=t.createElement("header");a.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),a.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}))}),a.appendChild(d),n.appendChild(a);let u=t.createElement("div");u.className="tab-bar",u.setAttribute("role","tablist"),u.setAttribute("aria-label","SLICC overlay tabs");for(let{id:f,label:M}of H){let g=t.createElement("button");g.type="button",g.className="tab-bar__tab"+(f===o?" tab-bar__tab--active":""),g.setAttribute("role","tab"),g.setAttribute("aria-selected",String(f===o)),g.dataset.tab=f,g.textContent=M,this.tabButtons.set(f,g),g.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("slicc-overlay-select-tab",{bubbles:!0,composed:!0,detail:{tab:f}}))}),u.appendChild(g)}n.appendChild(u);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 b=t.createElement("div");b.className="empty-state",b.textContent="Starting the local SLICC runtime\u2026",this.emptyState=b,E.appendChild(b),n.appendChild(E),e.appendChild(n),this.iframe?.addEventListener("load",()=>{this.frameLoaded=!0,this.postActiveTab()})}sync(){let e=h(this.getAttribute("active-tab")),t=this.getAttribute("app-url")?.trim()??v;for(let[o,s]of this.tabButtons){let n=o===e;s.classList.toggle("tab-bar__tab--active",n),s.setAttribute("aria-selected",String(n))}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=ue(e,t))}}postActiveTab(){if(!this.frameLoaded||!this.iframe?.contentWindow)return;let e=h(this.getAttribute("active-tab"));this.lastPostedTab!==e&&(this.iframe.contentWindow.postMessage({type:$,tab:e},"*"),this.lastPostedTab=e)}},R=class extends HTMLElement{static observedAttributes=["open","active-tab","app-url","corner"];state=k();appUrlValue=v;syncingAttributes=!1;connectedCallback(){this.state=k({open:this.hasAttribute("open"),activeTab:h(this.getAttribute("active-tab")),corner:y(this.getAttribute("corner")??q(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=k({open:this.hasAttribute("open"),activeTab:h(this.getAttribute("active-tab")),corner:y(this.getAttribute("corner")??q(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(T(this.state,e))}get activeTab(){return this.state.activeTab}set activeTab(e){this.applyState(_(this.state,e))}get corner(){return this.state.corner}set corner(e){this.applyState(A(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(W(this.state))}showSidebar(){this.applyState(T(this.state,!0))}hideSidebar(){this.applyState(T(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===de)&&(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===ge&&this.toggle()};render(){let e=this.attachShadow({mode:"open"}),t=this.ownerDocument;e.appendChild(D(t,`
259
+ ${Y}
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(C);o.addEventListener("slicc-overlay-toggle",()=>this.toggle()),o.addEventListener("slicc-overlay-move",a=>{let s=a.detail?.corner;this.applyState(A(this.state,s))}),e.appendChild(o);let n=t.createElement(L);n.addEventListener("slicc-overlay-close",()=>this.hideSidebar()),n.addEventListener("slicc-overlay-select-tab",a=>{let s=a.detail?.tab;this.applyState(R(this.state,s))}),e.appendChild(n)}syncChildren(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(C),o=e.querySelector(L);!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 ue(r=customElements){r.get(C)||r.define(C,P),r.get(L)||r.define(L,Y),r.get(N)||r.define(N,w)}function ee(r=document,e={}){ue(r.defaultView?.customElements??customElements);let t=r.getElementById(U),o;return t instanceof w?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 te(r=document){r.getElementById(U)?.remove()}function D(r){try{return m(r?.localStorage.getItem(Q))}catch{return m(null)}}function I(r,e){try{r?.localStorage.setItem(Q,e)}catch{}}function J(r,e,t){return Math.min(Math.max(r,e),t)}window.__SLICC_ELECTRON_OVERLAY__={inject(r={}){try{ee(document,r)}catch(e){console.error("[slicc-overlay] Injection failed:",e)}},remove(){try{te(document)}catch(r){console.error("[slicc-overlay] Removal failed:",r)}}};})();
269
+ `));let o=t.createElement(C);o.addEventListener("slicc-overlay-toggle",()=>this.toggle()),o.addEventListener("slicc-overlay-move",n=>{let a=n.detail?.corner;this.applyState(A(this.state,a))}),e.appendChild(o);let s=t.createElement(L);s.addEventListener("slicc-overlay-close",()=>this.hideSidebar()),s.addEventListener("slicc-overlay-select-tab",n=>{let a=n.detail?.tab;this.applyState(_(this.state,a))}),e.appendChild(s)}syncChildren(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(C),o=e.querySelector(L);!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(C)||r.define(C,N),r.get(L)||r.define(L,P),r.get(V)||r.define(V,R)}function ee(r=document,e={}){he(r.defaultView?.customElements??customElements);let t=r.getElementById(U),o;return t instanceof R?o=t:(t?.remove(),o=r.createElement(V)),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=h(e.activeTab)),e.appUrl!==void 0&&(o.appUrl=e.appUrl??v),e.corner!==void 0&&(o.corner=e.corner??q(r.defaultView)),o}function te(r=document){r.getElementById(U)?.remove()}function q(r){try{return y(r?.localStorage.getItem(Q))}catch{return y(null)}}function I(r,e){try{r?.localStorage.setItem(Q,e)}catch{}}function J(r,e,t){return Math.min(Math.max(r,e),t)}window.__SLICC_ELECTRON_OVERLAY__={inject(r={}){try{ee(document,r)}catch(e){console.error("[slicc-overlay] Injection failed:",e)}},remove(){try{te(document)}catch(r){console.error("[slicc-overlay] Removal failed:",r)}}};})();
@@ -5,7 +5,7 @@
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/main-BccCPfVs.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-CiPLuc4Y.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/main-D683Koa8.css">
11
11
  </head>
@@ -5,7 +5,7 @@
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/main-BccCPfVs.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-CiPLuc4Y.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/main-D683Koa8.css">
11
11
  </head>
@@ -1,4 +1 @@
1
- "use strict";(()=>{var Nt=Object.create;var J=Object.defineProperty;var Ut=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Ct=Object.getPrototypeOf,Lt=Object.prototype.hasOwnProperty;var w=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports);var At=(s,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of zt(t))!Lt.call(s,r)&&r!==e&&J(s,r,{get:()=>t[r],enumerable:!(i=Ut(t,r))||i.enumerable});return s};var Wt=(s,t,e)=>(e=s!=null?Nt(Ct(s)):{},At(t||!s||!s.__esModule?J(e,"default",{value:s,enumerable:!0}):e,s));var Z=w((Oe,Q)=>{Q.exports=$t;function $t(s){var t,e;if(typeof s!="function")throw new Error("expected a function but got "+s);return function(){return t||(t=!0,e=s.apply(this,arguments)),e}}});var et=w(tt=>{(function(s){"use strict";function t(o,l){var h;return o instanceof Buffer?h=o:h=Buffer.from(o.buffer,o.byteOffset,o.byteLength),h.toString(l)}var e=function(o){return Buffer.from(o)};function i(o){for(var l=0,h=Math.min(256*256,o.length+1),f=new Uint16Array(h),x=[],u=0;;){var m=l<o.length;if(!m||u>=h-1){var q=f.subarray(0,u),N=q;if(x.push(String.fromCharCode.apply(null,N)),!m)return x.join("");o=o.subarray(l),l=0,u=0}var T=o[l++];if((T&128)===0)f[u++]=T;else if((T&224)===192){var R=o[l++]&63;f[u++]=(T&31)<<6|R}else if((T&240)===224){var R=o[l++]&63,A=o[l++]&63;f[u++]=(T&31)<<12|R<<6|A}else if((T&248)===240){var R=o[l++]&63,A=o[l++]&63,qt=o[l++]&63,M=(T&7)<<18|R<<12|A<<6|qt;M>65535&&(M-=65536,f[u++]=M>>>10&1023|55296,M=56320|M&1023),f[u++]=M}}}function r(o){for(var l=0,h=o.length,f=0,x=Math.max(32,h+(h>>>1)+7),u=new Uint8Array(x>>>3<<3);l<h;){var m=o.charCodeAt(l++);if(m>=55296&&m<=56319){if(l<h){var q=o.charCodeAt(l);(q&64512)===56320&&(++l,m=((m&1023)<<10)+(q&1023)+65536)}if(m>=55296&&m<=56319)continue}if(f+4>u.length){x+=8,x*=1+l/o.length*2,x=x>>>3<<3;var N=new Uint8Array(x);N.set(u),u=N}if((m&4294967168)===0){u[f++]=m;continue}else if((m&4294965248)===0)u[f++]=m>>>6&31|192;else if((m&4294901760)===0)u[f++]=m>>>12&15|224,u[f++]=m>>>6&63|128;else if((m&4292870144)===0)u[f++]=m>>>18&7|240,u[f++]=m>>>12&63|128,u[f++]=m>>>6&63|128;else continue;u[f++]=m&63|128}return u.slice?u.slice(0,f):u.subarray(0,f)}var n="Failed to ",a=function(o,l,h){if(o)throw new Error("".concat(n).concat(l,": the '").concat(h,"' option is unsupported."))},c=typeof Buffer=="function"&&Buffer.from,_=c?e:r;function d(){this.encoding="utf-8"}d.prototype.encode=function(o,l){return a(l&&l.stream,"encode","stream"),_(o)};function E(o){var l;try{var h=new Blob([o],{type:"text/plain;charset=UTF-8"});l=URL.createObjectURL(h);var f=new XMLHttpRequest;return f.open("GET",l,!1),f.send(),f.responseText}finally{l&&URL.revokeObjectURL(l)}}var S=!c&&typeof Blob=="function"&&typeof URL=="function"&&typeof URL.createObjectURL=="function",b=["utf-8","utf8","unicode-1-1-utf-8"],O=i;c?O=t:S&&(O=function(o){try{return E(o)}catch{return i(o)}});var V="construct 'TextDecoder'",Ot="".concat(n," ").concat(V,": the ");function K(o,l){a(l&&l.fatal,V,"fatal"),o=o||"utf-8";var h;if(c?h=Buffer.isEncoding(o):h=b.indexOf(o.toLowerCase())!==-1,!h)throw new RangeError("".concat(Ot," encoding label provided ('").concat(o,"') is invalid."));this.encoding=o,this.fatal=!1,this.ignoreBOM=!1}K.prototype.decode=function(o,l){a(l&&l.stream,"decode","stream");var h;return o instanceof Uint8Array?h=o:o.buffer instanceof ArrayBuffer?h=new Uint8Array(o.buffer):h=new Uint8Array(o),O(h,this.encoding)},s.TextEncoder=s.TextEncoder||d,s.TextDecoder=s.TextDecoder||K})(typeof window<"u"?window:typeof globalThis<"u"?globalThis:tt)});var st=w((Ne,it)=>{et();it.exports={encode:s=>new TextEncoder().encode(s),decode:s=>new TextDecoder().decode(s)}});var nt=w((Ue,rt)=>{rt.exports=Ht;function Ht(s,t,e){var i;return function(){if(!t)return s.apply(this,arguments);var r=this,n=arguments,a=e&&!i;if(clearTimeout(i),i=setTimeout(function(){if(i=null,!a)return s.apply(r,n)},t),a)return s.apply(this,arguments)}}});var U=w((ze,lt)=>{function at(s){if(s.length===0)return".";let t=ot(s);return t=t.reduce(Vt,[]),W(...t)}function Xt(...s){let t="";for(let e of s)e.startsWith("/")?t=e:t=at(W(t,e));return t}function W(...s){if(s.length===0)return"";let t=s.join("/");return t=t.replace(/\/{2,}/g,"/"),t}function ot(s){if(s.length===0)return[];if(s==="/")return["/"];let t=s.split("/");return t[t.length-1]===""&&t.pop(),s[0]==="/"?t[0]="/":t[0]!=="."&&t.unshift("."),t}function Yt(s){let t=s.lastIndexOf("/");if(t===-1)throw new Error(`Cannot get dirname of "${s}"`);return t===0?"/":s.slice(0,t)}function Gt(s){if(s==="/")throw new Error(`Cannot get basename of "${s}"`);let t=s.lastIndexOf("/");return t===-1?s:s.slice(t+1)}function Vt(s,t){if(s.length===0)return s.push(t),s;if(t===".")return s;if(t===".."){if(s.length===1){if(s[0]==="/")throw new Error("Unable to normalize path - traverses above root directory");if(s[0]===".")return s.push(t),s}return s[s.length-1]===".."?(s.push(".."),s):(s.pop(),s)}return s.push(t),s}lt.exports={join:W,normalize:at,split:ot,basename:Gt,dirname:Yt,resolve:Xt}});var $=w((Ce,ct)=>{function D(s){return class extends Error{constructor(...t){super(...t),this.code=s,this.message?this.message=s+": "+this.message:this.message=s}}}var Kt=D("EEXIST"),Jt=D("ENOENT"),Qt=D("ENOTDIR"),Zt=D("ENOTEMPTY"),te=D("ETIMEDOUT"),ee=D("EISDIR");ct.exports={EEXIST:Kt,ENOENT:Jt,ENOTDIR:Qt,ENOTEMPTY:Zt,ETIMEDOUT:te,EISDIR:ee}});var ft=w((We,dt)=>{var y=U(),{EEXIST:ht,ENOENT:ie,ENOTDIR:ut,ENOTEMPTY:se,EISDIR:re}=$(),p=0;dt.exports=class{constructor(){}_makeRoot(t=new Map){return t.set(p,{mode:511,type:"dir",size:0,ino:0,mtimeMs:Date.now()}),t}activate(t=null){t===null?this._root=new Map([["/",this._makeRoot()]]):typeof t=="string"?this._root=new Map([["/",this._makeRoot(this.parse(t))]]):this._root=t}get activated(){return!!this._root}deactivate(){this._root=void 0}size(){return this._countInodes(this._root.get("/"))-1}_countInodes(t){let e=1;for(let[i,r]of t)i!==p&&(e+=this._countInodes(r));return e}autoinc(){return this._maxInode(this._root.get("/"))+1}_maxInode(t){let e=t.get(p).ino;for(let[i,r]of t)i!==p&&(e=Math.max(e,this._maxInode(r)));return e}print(t=this._root.get("/")){let e="",i=(r,n)=>{for(let[a,c]of r){if(a===0)continue;let _=c.get(p),d=_.mode.toString(8);e+=`${" ".repeat(n)}${a} ${d}`,_.type==="file"?e+=` ${_.size} ${_.mtimeMs}
2
- `:(e+=`
3
- `,i(c,n+1))}};return i(t,0),e}parse(t){let e=0;function i(c){let _=++e,d=c.length===1?"dir":"file",[E,S,b]=c;return E=parseInt(E,8),S=S?parseInt(S):0,b=b?parseInt(b):Date.now(),new Map([[p,{mode:E,type:d,size:S,mtimeMs:b,ino:_}]])}let r=t.trim().split(`
4
- `),n=this._makeRoot(),a=[{indent:-1,node:n},{indent:0,node:null}];for(let c of r){let d=c.match(/^\t*/)[0].length;c=c.slice(d);let[E,...S]=c.split(" "),b=i(S);if(d<=a[a.length-1].indent)for(;d<=a[a.length-1].indent;)a.pop();a.push({indent:d,node:b}),a[a.length-2].node.set(E,b)}return n}_lookup(t,e=!0){let i=this._root,r="/",n=y.split(t);for(let a=0;a<n.length;++a){let c=n[a];if(i=i.get(c),!i)throw new ie(t);if(e||a<n.length-1){let _=i.get(p);if(_.type==="symlink"){let d=y.resolve(r,_.target);i=this._lookup(d)}r?r=y.join(r,c):r=c}}return i}mkdir(t,{mode:e}){if(t==="/")throw new ht;let i=this._lookup(y.dirname(t)),r=y.basename(t);if(i.has(r))throw new ht;let n=new Map,a={mode:e,type:"dir",size:0,mtimeMs:Date.now(),ino:this.autoinc()};n.set(p,a),i.set(r,n)}rmdir(t){let e=this._lookup(t);if(e.get(p).type!=="dir")throw new ut;if(e.size>1)throw new se;let i=this._lookup(y.dirname(t)),r=y.basename(t);i.delete(r)}readdir(t){let e=this._lookup(t);if(e.get(p).type!=="dir")throw new ut;return[...e.keys()].filter(i=>typeof i=="string")}writeStat(t,e,{mode:i}){let r,n;try{n=this.stat(t)}catch{}if(n!==void 0){if(n.type==="dir")throw new re;i==null&&(i=n.mode),r=n.ino}i==null&&(i=438),r==null&&(r=this.autoinc());let a=this._lookup(y.dirname(t)),c=y.basename(t),_={mode:i,type:"file",size:e,mtimeMs:Date.now(),ino:r},d=new Map;return d.set(p,_),a.set(c,d),_}unlink(t){let e=this._lookup(y.dirname(t)),i=y.basename(t);e.delete(i)}rename(t,e){let i=y.basename(e),r=this._lookup(t);this._lookup(y.dirname(e)).set(i,r),this.unlink(t)}stat(t){return this._lookup(t).get(p)}lstat(t){return this._lookup(t,!1).get(p)}readlink(t){return this._lookup(t,!1).get(p).target}symlink(t,e){let i,r;try{let d=this.stat(e);r===null&&(r=d.mode),i=d.ino}catch{}r==null&&(r=40960),i==null&&(i=this.autoinc());let n=this._lookup(y.dirname(e)),a=y.basename(e),c={mode:r,type:"symlink",target:t,size:0,mtimeMs:Date.now(),ino:i},_=new Map;return _.set(p,c),n.set(a,_),c}_du(t){let e=0;for(let[i,r]of t.entries())i===p?e+=r.size:e+=this._du(r);return e}du(t){let e=this._lookup(t);return this._du(e)}}});var X=w(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});var z=class{constructor(t="keyval-store",e="keyval"){this.storeName=e,this._dbName=t,this._storeName=e,this._init()}_init(){this._dbp||(this._dbp=new Promise((t,e)=>{let i=indexedDB.open(this._dbName);i.onerror=()=>e(i.error),i.onsuccess=()=>t(i.result),i.onupgradeneeded=()=>{i.result.createObjectStore(this._storeName)}}))}_withIDBStore(t,e){return this._init(),this._dbp.then(i=>new Promise((r,n)=>{let a=i.transaction(this.storeName,t);a.oncomplete=()=>r(),a.onabort=a.onerror=()=>n(a.error),e(a.objectStore(this.storeName))}))}_close(){return this._init(),this._dbp.then(t=>{t.close(),this._dbp=void 0})}},H;function P(){return H||(H=new z),H}function ne(s,t=P()){let e;return t._withIDBStore("readwrite",i=>{e=i.get(s)}).then(()=>e.result)}function ae(s,t,e=P()){return e._withIDBStore("readwrite",i=>{i.put(t,s)})}function oe(s,t,e=P()){return e._withIDBStore("readwrite",i=>{let r=i.get(s);r.onsuccess=()=>{i.put(t(r.result),s)}})}function le(s,t=P()){return t._withIDBStore("readwrite",e=>{e.delete(s)})}function ce(s=P()){return s._withIDBStore("readwrite",t=>{t.clear()})}function he(s=P()){let t=[];return s._withIDBStore("readwrite",e=>{(e.openKeyCursor||e.openCursor).call(e).onsuccess=function(){this.result&&(t.push(this.result.key),this.result.continue())}}).then(()=>t)}function ue(s=P()){return s._close()}g.Store=z;g.get=ne;g.set=ae;g.update=oe;g.del=le;g.clear=ce;g.keys=he;g.close=ue});var _t=w((Xe,mt)=>{var F=X();mt.exports=class{constructor(t,e){this._database=t,this._storename=e,this._store=new F.Store(this._database,this._storename)}saveSuperblock(t){return F.set("!root",t,this._store)}loadSuperblock(){return F.get("!root",this._store)}readFile(t){return F.get(t,this._store)}writeFile(t,e){return F.set(t,e,this._store)}unlink(t){return F.del(t,this._store)}wipe(){return F.clear(this._store)}close(){return F.close(this._store)}}});var pt=w((Ge,wt)=>{wt.exports=class{constructor(t){this._url=t}loadSuperblock(){return fetch(this._url+"/.superblock.txt").then(t=>t.ok?t.text():null)}async readFile(t){let e=await fetch(this._url+t);if(e.status===200)return e.arrayBuffer();throw new Error("ENOENT")}async sizeFile(t){let e=await fetch(this._url+t,{method:"HEAD"});if(e.status===200)return e.headers.get("content-length");throw new Error("ENOENT")}}});var kt=w((Ke,yt)=>{var I=X(),de=s=>new Promise(t=>setTimeout(t,s));yt.exports=class{constructor(t,e){this._id=Math.random(),this._database=t,this._storename=e,this._store=new I.Store(this._database,this._storename),this._lock=null}async has({margin:t=2e3}={}){if(this._lock&&this._lock.holder===this._id){let e=Date.now();return this._lock.expires>e+t?!0:await this.renew()}else return!1}async renew({ttl:t=5e3}={}){let e;return await I.update("lock",i=>{let n=Date.now()+t;return e=i&&i.holder===this._id,this._lock=e?{holder:this._id,expires:n}:i,this._lock},this._store),e}async acquire({ttl:t=5e3}={}){let e,i,r;if(await I.update("lock",n=>{let a=Date.now(),c=a+t;return i=n&&n.expires<a,e=n===void 0||i,r=n&&n.holder===this._id,this._lock=e?{holder:this._id,expires:c}:n,this._lock},this._store),r)throw new Error("Mutex double-locked");return e}async wait({interval:t=100,limit:e=6e3,ttl:i}={}){for(;e--;){if(await this.acquire({ttl:i}))return!0;await de(t)}throw new Error("Mutex timeout")}async release({force:t=!1}={}){let e,i,r;if(await I.update("lock",n=>(e=t||n&&n.holder===this._id,i=n===void 0,r=n&&n.holder!==this._id,this._lock=e?void 0:n,this._lock),this._store),await I.close(this._store),!e&&!t){if(i)throw new Error("Mutex double-freed");if(r)throw new Error("Mutex lost ownership")}return e}}});var vt=w((Qe,gt)=>{gt.exports=class{constructor(t){this._id=Math.random(),this._database=t,this._has=!1,this._release=null}async has(){return this._has}async acquire(){return new Promise(t=>{navigator.locks.request(this._database+"_lock",{ifAvailable:!0},e=>(this._has=!!e,t(!!e),new Promise(i=>{this._release=i})))})}async wait({timeout:t=6e5}={}){return new Promise((e,i)=>{let r=new AbortController;setTimeout(()=>{r.abort(),i(new Error("Mutex timeout"))},t),navigator.locks.request(this._database+"_lock",{signal:r.signal},n=>(this._has=!!n,e(!!n),new Promise(a=>{this._release=a})))})}async release({force:t=!1}={}){this._has=!1,this._release?this._release():t&&navigator.locks.request(this._database+"_lock",{steal:!0},e=>!0)}}});var Et=w((ti,xt)=>{var{encode:fe,decode:bt}=st(),me=nt(),_e=ft(),{ENOENT:we,ENOTEMPTY:pe,ETIMEDOUT:ye}=$(),ke=_t(),ge=pt(),ve=kt(),be=vt(),B=U();xt.exports=class{constructor(){this.saveSuperblock=me(()=>{this.flush()},500)}async init(t,{wipe:e,url:i,urlauto:r,fileDbName:n=t,db:a=null,fileStoreName:c=t+"_files",lockDbName:_=t+"_lock",lockStoreName:d=t+"_lock"}={}){this._name=t,this._idb=a||new ke(n,c),this._mutex=navigator.locks?new be(t):new ve(_,d),this._cache=new _e(t),this._opts={wipe:e,url:i},this._needsWipe=!!e,i&&(this._http=new ge(i),this._urlauto=!!r)}async activate(){if(this._cache.activated)return;this._needsWipe&&(this._needsWipe=!1,await this._idb.wipe(),await this._mutex.release({force:!0})),await this._mutex.has()||await this._mutex.wait();let t=await this._idb.loadSuperblock();if(t)this._cache.activate(t);else if(this._http){let e=await this._http.loadSuperblock();this._cache.activate(e),await this._saveSuperblock()}else this._cache.activate();if(!await this._mutex.has())throw new ye}async deactivate(){await this._mutex.has()&&await this._saveSuperblock(),this._cache.deactivate();try{await this._mutex.release()}catch(t){console.log(t)}await this._idb.close()}async _saveSuperblock(){this._cache.activated&&(this._lastSavedAt=Date.now(),await this._idb.saveSuperblock(this._cache._root))}_writeStat(t,e,i){let r=B.split(B.dirname(t)),n=r.shift();for(let a of r){n=B.join(n,a);try{this._cache.mkdir(n,{mode:511})}catch{}}return this._cache.writeStat(t,e,i)}async readFile(t,e){let i=typeof e=="string"?e:e&&e.encoding;if(i&&i!=="utf8")throw new Error('Only "utf8" encoding is supported in readFile');let r=null,n=null;try{n=this._cache.stat(t),r=await this._idb.readFile(n.ino)}catch(a){if(!this._urlauto)throw a}if(!r&&this._http){let a=this._cache.lstat(t);for(;a.type==="symlink";)t=B.resolve(B.dirname(t),a.target),a=this._cache.lstat(t);r=await this._http.readFile(t)}if(r&&((!n||n.size!=r.byteLength)&&(n=await this._writeStat(t,r.byteLength,{mode:n?n.mode:438}),this.saveSuperblock()),i==="utf8"?r=bt(r):r.toString=()=>bt(r)),!n)throw new we(t);return r}async writeFile(t,e,i){let{mode:r,encoding:n="utf8"}=i;if(typeof e=="string"){if(n!=="utf8")throw new Error('Only "utf8" encoding is supported in writeFile');e=fe(e)}let a=await this._cache.writeStat(t,e.byteLength,{mode:r});await this._idb.writeFile(a.ino,e)}async unlink(t,e){let i=this._cache.lstat(t);this._cache.unlink(t),i.type!=="symlink"&&await this._idb.unlink(i.ino)}readdir(t,e){return this._cache.readdir(t)}mkdir(t,e){let{mode:i=511}=e;this._cache.mkdir(t,{mode:i})}rmdir(t,e){if(t==="/")throw new pe;this._cache.rmdir(t)}rename(t,e){this._cache.rename(t,e)}stat(t,e){return this._cache.stat(t)}lstat(t,e){return this._cache.lstat(t)}readlink(t,e){return this._cache.readlink(t)}symlink(t,e){this._cache.symlink(t,e)}async backFile(t,e){let i=await this._http.sizeFile(t);await this._writeStat(t,i,e)}du(t){return this._cache.du(t)}flush(){return this._saveSuperblock()}}});var Tt=w((ii,St)=>{St.exports=class{constructor(t){this.type=t.type,this.mode=t.mode,this.size=t.size,this.ino=t.ino,this.mtimeMs=t.mtimeMs,this.ctimeMs=t.ctimeMs||t.mtimeMs,this.uid=1,this.gid=1,this.dev=1}isFile(){return this.type==="file"}isDirectory(){return this.type==="dir"}isSymbolicLink(){return this.type==="symlink"}}});var Dt=w((ri,Mt)=>{var xe=Et(),Ft=Tt(),C=U();function v(s,t,...e){return s=C.normalize(s),(typeof t>"u"||typeof t=="function")&&(t={}),typeof t=="string"&&(t={encoding:t}),[s,t,...e]}function Ee(s,t,e,...i){return s=C.normalize(s),(typeof e>"u"||typeof e=="function")&&(e={}),typeof e=="string"&&(e={encoding:e}),[s,t,e,...i]}function Pt(s,t,...e){return[C.normalize(s),C.normalize(t),...e]}Mt.exports=class{constructor(t,e={}){this.init=this.init.bind(this),this.readFile=this._wrap(this.readFile,v,!1),this.writeFile=this._wrap(this.writeFile,Ee,!0),this.unlink=this._wrap(this.unlink,v,!0),this.readdir=this._wrap(this.readdir,v,!1),this.mkdir=this._wrap(this.mkdir,v,!0),this.rmdir=this._wrap(this.rmdir,v,!0),this.rename=this._wrap(this.rename,Pt,!0),this.stat=this._wrap(this.stat,v,!1),this.lstat=this._wrap(this.lstat,v,!1),this.readlink=this._wrap(this.readlink,v,!1),this.symlink=this._wrap(this.symlink,Pt,!0),this.backFile=this._wrap(this.backFile,v,!0),this.du=this._wrap(this.du,v,!1),this._deactivationPromise=null,this._deactivationTimeout=null,this._activationPromise=null,this._operations=new Set,t&&this.init(t,e)}async init(...t){return this._initPromiseResolve&&await this._initPromise,this._initPromise=this._init(...t),this._initPromise}async _init(t,e={}){await this._gracefulShutdown(),this._activationPromise&&await this._deactivate(),this._backend&&this._backend.destroy&&await this._backend.destroy(),this._backend=e.backend||new xe,this._backend.init&&await this._backend.init(t,e),this._initPromiseResolve&&(this._initPromiseResolve(),this._initPromiseResolve=null),e.defer||this.stat("/")}async _gracefulShutdown(){this._operations.size>0&&(this._isShuttingDown=!0,await new Promise(t=>this._gracefulShutdownResolve=t),this._isShuttingDown=!1,this._gracefulShutdownResolve=null)}_wrap(t,e,i){return async(...r)=>{r=e(...r);let n={name:t.name,args:r};this._operations.add(n);try{return await this._activate(),await t.apply(this,r)}finally{this._operations.delete(n),i&&this._backend.saveSuperblock(),this._operations.size===0&&(this._deactivationTimeout||clearTimeout(this._deactivationTimeout),this._deactivationTimeout=setTimeout(this._deactivate.bind(this),500))}}}async _activate(){this._initPromise||console.warn(new Error(`Attempted to use LightningFS ${this._name} before it was initialized.`)),await this._initPromise,this._deactivationTimeout&&(clearTimeout(this._deactivationTimeout),this._deactivationTimeout=null),this._deactivationPromise&&await this._deactivationPromise,this._deactivationPromise=null,this._activationPromise||(this._activationPromise=this._backend.activate?this._backend.activate():Promise.resolve()),await this._activationPromise}async _deactivate(){return this._activationPromise&&await this._activationPromise,this._deactivationPromise||(this._deactivationPromise=this._backend.deactivate?this._backend.deactivate():Promise.resolve()),this._activationPromise=null,this._gracefulShutdownResolve&&this._gracefulShutdownResolve(),this._deactivationPromise}async readFile(t,e){return this._backend.readFile(t,e)}async writeFile(t,e,i){return await this._backend.writeFile(t,e,i),null}async unlink(t,e){return await this._backend.unlink(t,e),null}async readdir(t,e){return this._backend.readdir(t,e)}async mkdir(t,e){return await this._backend.mkdir(t,e),null}async rmdir(t,e){return await this._backend.rmdir(t,e),null}async rename(t,e){return await this._backend.rename(t,e),null}async stat(t,e){let i=await this._backend.stat(t,e);return new Ft(i)}async lstat(t,e){let i=await this._backend.lstat(t,e);return new Ft(i)}async readlink(t,e){return this._backend.readlink(t,e)}async symlink(t,e){return await this._backend.symlink(t,e),null}async backFile(t,e){return await this._backend.backFile(t,e),null}async du(t){return this._backend.du(t)}async flush(){return this._backend.flush()}}});var Rt=w((ai,jt)=>{var Se=Z(),Te=Dt();function k(s,t){return typeof s=="function"&&(t=s),t=Se(t),[(...i)=>t(null,...i),t]}jt.exports=class{constructor(...t){this.promises=new Te(...t),this.init=this.init.bind(this),this.readFile=this.readFile.bind(this),this.writeFile=this.writeFile.bind(this),this.unlink=this.unlink.bind(this),this.readdir=this.readdir.bind(this),this.mkdir=this.mkdir.bind(this),this.rmdir=this.rmdir.bind(this),this.rename=this.rename.bind(this),this.stat=this.stat.bind(this),this.lstat=this.lstat.bind(this),this.readlink=this.readlink.bind(this),this.symlink=this.symlink.bind(this),this.backFile=this.backFile.bind(this),this.du=this.du.bind(this),this.flush=this.flush.bind(this)}init(t,e){return this.promises.init(t,e)}readFile(t,e,i){let[r,n]=k(e,i);this.promises.readFile(t,e).then(r).catch(n)}writeFile(t,e,i,r){let[n,a]=k(i,r);this.promises.writeFile(t,e,i).then(n).catch(a)}unlink(t,e,i){let[r,n]=k(e,i);this.promises.unlink(t,e).then(r).catch(n)}readdir(t,e,i){let[r,n]=k(e,i);this.promises.readdir(t,e).then(r).catch(n)}mkdir(t,e,i){let[r,n]=k(e,i);this.promises.mkdir(t,e).then(r).catch(n)}rmdir(t,e,i){let[r,n]=k(e,i);this.promises.rmdir(t,e).then(r).catch(n)}rename(t,e,i){let[r,n]=k(i);this.promises.rename(t,e).then(r).catch(n)}stat(t,e,i){let[r,n]=k(e,i);this.promises.stat(t).then(r).catch(n)}lstat(t,e,i){let[r,n]=k(e,i);this.promises.lstat(t).then(r).catch(n)}readlink(t,e,i){let[r,n]=k(e,i);this.promises.readlink(t).then(r).catch(n)}symlink(t,e,i){let[r,n]=k(i);this.promises.symlink(t,e).then(r).catch(n)}backFile(t,e,i){let[r,n]=k(e,i);this.promises.backFile(t,e).then(r).catch(n)}du(t,e){let[i,r]=k(e);this.promises.du(t).then(i).catch(r)}flush(t){let[e,i]=k(t);this.promises.flush().then(e).catch(i)}}});var Bt=Wt(Rt(),1),Fe="slicc-fs",Y=null,L=null;function Pe(){return Y||(Y=new Bt.default(Fe).promises),Y}function Me(s){let t=s.split(".").pop()?.toLowerCase()??"";return{html:"text/html",htm:"text/html",css:"text/css",js:"application/javascript",mjs:"application/javascript",json:"application/json",svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",ico:"image/x-icon",avif:"image/avif",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",mp3:"audio/mpeg",mp4:"video/mp4",webm:"video/webm",pdf:"application/pdf",txt:"text/plain",xml:"application/xml",wasm:"application/wasm"}[t]??"application/octet-stream"}var De=new Set(["text/html","text/css","text/plain","application/javascript","application/json","image/svg+xml","application/xml"]),j=self,G=null;function je(){return G||(G=new BroadcastChannel("preview-vfs")),G}async function Re(s,t){let e=je(),i=`pvfs-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise(r=>{let n=setTimeout(()=>{e.removeEventListener("message",a),r(null)},5e3);function a(c){if(!(c.data?.type!=="preview-vfs-response"||c.data.id!==i)){if(e.removeEventListener("message",a),clearTimeout(n),c.data.error){r(null);return}r(c.data.content??null)}}e.addEventListener("message",a),e.postMessage({type:"preview-vfs-read",id:i,path:s,asText:t})})}async function It(s){let t=Me(s),e=De.has(t);try{let r=Pe();try{(await r.stat(s)).isDirectory()&&(s=s.endsWith("/")?s+"index.html":s+"/index.html")}catch{}let n=e?await r.readFile(s,{encoding:"utf8"}):new Uint8Array(await r.readFile(s));return new Response(n,{status:200,headers:{"Content-Type":t,"Cache-Control":"no-cache"}})}catch(r){let n=r instanceof Error?r.message:String(r);if(!n.includes("ENOENT"))return console.error("[preview-sw] Error serving",s,n),new Response(`Preview error: ${n}`,{status:500,headers:{"Content-Type":"text/plain"}})}let i=await Re(s,e);if(i!==null){let r=typeof i=="string"?i:new Uint8Array(i);return new Response(r,{status:200,headers:{"Content-Type":t,"Cache-Control":"no-cache"}})}return new Response("Not found",{status:404,headers:{"Content-Type":"text/plain"}})}j.addEventListener("install",()=>{j.skipWaiting()});j.addEventListener("activate",s=>{s.waitUntil(j.clients.claim())});function Ie(s){return s.startsWith("/@")||s.startsWith("/__")||s.startsWith("/api/")||s.startsWith("/packages/webapp/src/")||s.startsWith("/node_modules/")||s==="/"||s==="/index.html"}j.addEventListener("fetch",s=>{let t=new URL(s.request.url);if(t.origin===j.location.origin){if(t.pathname.startsWith("/preview/")){let e=t.searchParams.get("projectRoot");e&&(L=e,console.log("[preview-sw] Project root:",L));let i=t.pathname.slice(8);s.respondWith(It(i));return}if(L&&!Ie(t.pathname)){let e=L+t.pathname;s.respondWith(It(e))}}});})();
1
+ "use strict";(()=>{function g(e){let n=e.split(".").pop()?.toLowerCase()??"";return{html:"text/html",htm:"text/html",css:"text/css",js:"application/javascript",mjs:"application/javascript",json:"application/json",svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",ico:"image/x-icon",avif:"image/avif",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",mp3:"audio/mpeg",mp4:"video/mp4",webm:"video/webm",pdf:"application/pdf",txt:"text/plain",xml:"application/xml",wasm:"application/wasm"}[n]??"application/octet-stream"}var f=new Set(["text/html","text/css","text/plain","application/javascript","application/json","image/svg+xml","application/xml"]),v=5e3;async function u(e,n,i,r=v){let s=`pvfs-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise(t=>{let c=setTimeout(()=>{e.removeEventListener("message",l),t({ok:!1,error:null})},r);function l(x){let o=x.data;if(!(o?.type!=="preview-vfs-response"||o.id!==s)){if(e.removeEventListener("message",l),clearTimeout(c),typeof o.error=="string"){t({ok:!1,error:o.error});return}if(o.content!==void 0){t({ok:!0,content:o.content});return}t({ok:!1,error:"empty response"})}}e.addEventListener("message",l),e.postMessage({type:"preview-vfs-read",id:s,path:n,asText:i})})}async function d(e,n,i=v){let r=n,s=g(r),t=await u(e,r,f.has(s),i);if(!t.ok&&t.error&&t.error.includes("EISDIR")&&(r=r.endsWith("/")?r+"index.html":r+"/index.html",s=g(r),t=await u(e,r,f.has(s),i)),t.ok){let c=typeof t.content=="string"?t.content:new Uint8Array(t.content);return new Response(c,{status:200,headers:{"Content-Type":s,"Cache-Control":"no-cache"}})}return t.error&&!t.error.includes("ENOENT")?(console.error("[preview-sw] Error serving",n,t.error),new Response(`Preview error: ${t.error}`,{status:500,headers:{"Content-Type":"text/plain"}})):new Response("Not found",{status:404,headers:{"Content-Type":"text/plain"}})}function w(e){return e.startsWith("/@")||e.startsWith("/__")||e.startsWith("/api/")||e.startsWith("/packages/webapp/src/")||e.startsWith("/node_modules/")||e==="/"||e==="/index.html"}var p=null,a=self,m=null;function h(){return m||(m=new BroadcastChannel("preview-vfs")),m}a.addEventListener("install",()=>{a.skipWaiting()});a.addEventListener("activate",e=>{e.waitUntil(a.clients.claim())});a.addEventListener("fetch",e=>{let n=new URL(e.request.url);if(n.origin===a.location.origin){if(n.pathname.startsWith("/preview/")){let i=n.searchParams.get("projectRoot");i&&(p=i,console.log("[preview-sw] Project root:",p));let r=n.pathname.slice(8);e.respondWith(d(h(),r));return}if(p&&!w(n.pathname)){let i=p+n.pathname;e.respondWith(d(h(),i))}}});})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "3.32.2",
3
+ "version": "3.34.0",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- import{$ as e,B as t,E as n,G as r,H as i,I as a,R as o,X as s,Y as c,t as l,w as u,x as d,y as f}from"./kernel-worker-Cjl8fjr8.js";import{getOAuthPageOrigin as p}from"./oauth-service-2Bm2tu9h.js";var m={proxyEndpoint:`https://adobe-llm-proxy.paolo-moz.workers.dev`,redirectUri:`https://www.sliccy.ai/auth/callback`,extensionRedirectUri:`https://akjjllgokmbgpbdbmafpiefnhidlmbgf.chromiumapp.org/adobe`};const h=[`claude-opus-4-8`,`opus-4-8`];function g(e,t){return(t?[e,t]:[e]).flatMap(e=>{let t=e.toLowerCase();return[t,t.replace(/[\s_.:]+/g,`-`)]})}function _(e,t){return g(e,t).some(e=>h.some(t=>e.includes(t)))}function v(e,t){let n=e?t?.[e]:void 0;if(typeof n==`string`)return n;switch(e){case`minimal`:case`low`:return`low`;case`medium`:return`medium`;case`xhigh`:return`xhigh`;default:return`high`}}function y(e,t){return async(n,r)=>{let i=t?await t(n,r)??n:n,a=i.thinking;return a&&a.type===`enabled`&&(i.thinking={type:`adaptive`,...a.display===void 0?{}:{display:a.display}},i.output_config={...i.output_config??{},effort:e}),i}}function b(e,t){if(!_(e.id,e.name))return t;let n=t,r=n.effort??v(n.reasoning,e.thinkingLevelMap);return{...t,onPayload:y(r,n.onPayload)}}function x(e,t){let n={id:e.id,name:e.name??e.id},r=t?.api??e.api,i=t?.context_window??e.context_window,a=t?.max_tokens??e.max_tokens,o=t?.reasoning??e.reasoning,s=t?.input??e.input;return r&&(n.api=r),i!==void 0&&(n.context_window=i),a!==void 0&&(n.max_tokens=a),o!==void 0&&(n.reasoning=o),s&&(n.input=s),/haiku/i.test(e.id)&&(n.compat={supportsEagerToolInputStreaming:!1}),n}function ee(e=3e5){let t=0;return{async run(n,r=Date.now()){if(r<t)return null;let i=null;try{i=await n()}catch(e){console.debug(`[silent-renew-backoff] renew threw:`,e instanceof Error?e.message:String(e)),i=null}return t=i?0:r+e,i},inCooldown(e=Date.now()){return e<t}}}const S=Object.assign({"/packages/webapp/providers/adobe-config.json":m})[`/packages/webapp/providers/adobe-config.json`]??{clientId:``,proxyEndpoint:``,scopes:`openid,profile,email`};function C(){let e=d(`adobe`);if(e)return e.replace(/\/$/,``);if(S.proxyEndpoint)return S.proxyEndpoint.replace(/\/$/,``);throw Error(`Adobe proxy endpoint not configured — set it in Settings or adobe-config.json`)}const w=new Map,T=new Map,E=`slicc-adobe-models`;function D(e){try{localStorage.setItem(E,JSON.stringify(e))}catch{}}async function O(e){let t=w.get(e);if(t)return t;try{let t=await fetch(`${e}/v1/config`,{headers:{[W]:`3.32.2`}});if(t.ok){let n=await t.json();return w.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 w.set(e,n),n}function k(e){let t=e.clientId||S.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 A(e){return e.scopes||S.scopes}function j(e){return e.imsEnvironment||S.imsEnvironment||`prod`}const M={prod:`https://ims-na1.adobelogin.com`,stg1:`https://ims-na1-stg1.adobelogin.com`};function N(e){return M[e??S.imsEnvironment??`prod`]??M.prod}const P=typeof chrome<`u`&&!!chrome?.runtime?.id;function F(){return f().find(e=>e.providerId===`adobe`)}async function I(e,t){try{let n=await fetch(`${N(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 L(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 R={id:`adobe`,name:`Adobe`,description:`Claude via Adobe — login with your Adobe ID`,requiresApiKey:!1,requiresBaseUrl:!S.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`,`admin.hlx.page`,`admin.hlx.live`,`admin.aem.page`,`admin.aem.live`],getModelIds:()=>{let e=e=>x(e,T.get(e.id));for(let t of Q.values())if(t.length){let n=t.map(t=>e({id:t.id,name:t.name??t.id}));return D(n),n}for(let t of w.values())if(t.models?.length)return t.models.map(t=>e(t));try{let e=localStorage.getItem(E);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,n)=>{let r=C(),i=await O(r),a=k(i),o=A(i),s=j(i),c=P?null:await p(),l=P?S.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:S.redirectUri??`${c.origin}/auth/callback`,d=P?void 0:btoa(JSON.stringify({port:parseInt(new URL(c.href).port||`5710`,10),path:`/auth/callback`,nonce:crypto.randomUUID()})),f=d?JSON.parse(atob(d)).nonce:null,m=new URLSearchParams({client_id:a,scope:o,response_type:`token`,redirect_uri:l});d&&m.set(`state`,d),n?.forceReauth&&m.set(`prompt`,`login`);let h=await e(`${N(s)}/ims/authorize/v2?${m}`);if(!h)return;if(f&&h)try{if(new URL(h).searchParams.get(`nonce`)!==f){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 g=L(h);if(!g){console.error(`[adobe] Could not extract token from redirect URL`);return}let _=await I(g.accessToken,s);await u({providerId:`adobe`,accessToken:g.accessToken,tokenExpiresAt:Date.now()+g.expiresIn*1e3,userName:_.name,userAvatar:_.avatar,baseUrl:S.proxyEndpoint?void 0:r}),await $().catch(e=>console.warn(`[adobe] Failed to fetch models after login:`,e instanceof Error?e.message:String(e))),t()},onOAuthLogout:async()=>{let e=F();if(e?.accessToken)try{let t=w.values().next().value??{},n=t.clientId||S.clientId,r=j(t);if(n){let t=await fetch(`${N(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 u({providerId:`adobe`,accessToken:``})},onSilentRenew:async()=>F()?.accessToken?U():null,refreshModels:async e=>{await $(e);let t=R.getModelIds?.();t?.length&&D(t)}};let z=null;const B=ee();async function V(){let e=F();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...`);let t=await B.run(()=>U());if(t)return t;let n=F();if((n?.tokenExpiresAt??0)-Date.now()>0&&n?.accessToken)return n.accessToken;throw Error(`Adobe session expired — please log in again`)}function H(){let e=F();return e?.tokenExpiresAt?Date.now()>e.tokenExpiresAt-6e4:!0}async function U(){return typeof window>`u`?null:z||(z=(async()=>{try{let e=C(),t=await O(e),n=k(t),r=A(t),i=j(t),a=P?S.extensionRedirectUri??`https://${chrome.runtime.id}.chromiumapp.org/`:S.redirectUri??`${window.location.origin}/auth/callback`,o=P?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=`${N(i)}/ims/authorize/v2?${c}`,{createOAuthLauncher:d}=await import(`./oauth-service-2Bm2tu9h.js`),f=await d()(l,{interactive:!1});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 p=L(f);if(!p)return null;let m=F();return await u({providerId:`adobe`,accessToken:p.accessToken,tokenExpiresAt:Date.now()+p.expiresIn*1e3,userName:m?.userName,userAvatar:m?.userAvatar,baseUrl:S.proxyEndpoint?void 0:e}),console.log(`[adobe] Token renewed silently`),await $().catch(e=>console.warn(`[adobe] Failed to refresh models after silent renewal:`,e instanceof Error?e.message:String(e))),p.accessToken}catch(e){return console.warn(`[adobe] Silent renewal error:`,e instanceof Error?e.message:String(e)),null}finally{z=null}})(),z)}const W=`X-Slicc-Version`;function G(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[W]=`3.32.2`,{...e,headers:t}}const K=new Set;function q(e,t){if(e.headers){for(let t of Object.keys(e.headers))if(t.toLowerCase()===`x-session-id`)return e}return K.has(t)||(K.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(`adobe-provider-fallback`)}}}function J(){K.clear()}function Y(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 X=(e,t,i={})=>{let s=r();return(async()=>{try{let r=await V();if(String(e.api).includes(`openai`)){let n=o({...e,baseUrl:`${C()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},t,G(q({...i,apiKey:r},`streamAdobe[openai]`)));for await(let e of n)s.push(e)}else{let o=a({...e,baseUrl:C(),api:`anthropic-messages`},t,G(q(b(e,n(e.id,e.name,{...i,apiKey:r})),`streamAdobe[anthropic]`)));for await(let e of o)s.push(e)}s.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),s.push(Y(e,t)),s.end()}})(),s},Z=(e,a,o)=>{let s=r();return(async()=>{try{let r=await V();if(String(e.api).includes(`openai`)){let t=i({...e,baseUrl:`${C()}/v1`,api:`openai-completions`,compat:{...e.compat,supportsStore:!1,supportsDeveloperRole:!1}},a,G(q({...o,apiKey:r},`streamSimpleAdobe[openai]`)));for await(let e of t)s.push(e)}else{let i=t({...e,baseUrl:C(),api:`anthropic-messages`},a,G(q(b(e,n(e.id,e.name,{...o,apiKey:r})),`streamSimpleAdobe[anthropic]`)));for await(let e of i)s.push(e)}s.end()}catch(t){console.error(`[adobe] Stream error:`,t instanceof Error?t.message:String(t)),s.push(Y(e,t)),s.end()}})(),s};async function te(e){try{let t=e??await V(),n=C(),r=await fetch(`${n}/v1/models`,{headers:{Authorization:`Bearer ${t}`,[W]:`3.32.2`}});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),T.set(t.id,e)}let t=new Map;for(let e of s())try{for(let n of c(e))t.set(n.id,n)}catch{}return e.data.map(e=>{let r=t.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:n,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 null}const Q=new Map;function ne(){return c(`anthropic`).map(e=>({...e,provider:`adobe`,api:`adobe-anthropic`}))}async function $(e){let t=C(),n=Q.get(t);if(n)return n;let r=await te(e);return r?(Q.set(t,r),r):ne()}function re(){e({api:`adobe-anthropic`,stream:X,streamSimple:Z}),e({api:`adobe-openai`,stream:X,streamSimple:Z})}export{J as __resetAdobeSessionIdWarningCacheForTests,R as config,$ as getAdobeModels,V as getValidAccessToken,H as isTokenExpired,re as register};