sliccy 5.40.1 → 5.42.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 (80) hide show
  1. package/dist/ui/assets/{account-store-DnfeinGB.js → account-store-BQKctIy7.js} +1 -1
  2. package/dist/ui/assets/{account-store-GtFnwH-H.js → account-store-DIWSNjw7.js} +2 -2
  3. package/dist/ui/assets/{adobe-Czhfxi0p.js → adobe-B9PBzqDR.js} +1 -1
  4. package/dist/ui/assets/{adobe-DMK4xEaO.js → adobe-gpmOMGxQ.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-DyQZzetd.js → adobe-oauth-state-BrRXTcjc.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-Cxc2ezE3.js → agent-message-to-chat-DCqCoKKF.js} +1 -1
  7. package/dist/ui/assets/{apps-ClA05CCZ.js → apps-DBBpEzmH.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-BvCVBwdH.js → azure-openai-CHRT4eyH.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BLtYWDqq.js → azure-openai-DKnHJF9-.js} +1 -1
  10. package/dist/ui/assets/{cerebras-DFlg7DL9.js → cerebras-CaeLRKDA.js} +1 -1
  11. package/dist/ui/assets/{cerebras-CGfTW8cv.js → cerebras-uV-73BLt.js} +1 -1
  12. package/dist/ui/assets/{connect-surface-DxFQNDWS.js → connect-surface-B9pnuNGy.js} +1 -1
  13. package/dist/ui/assets/dip-I6O2Tk5S.js +1 -0
  14. package/dist/ui/assets/{dist-C4FoRFNu.js → dist-78uwOJuw.js} +1 -1
  15. package/dist/ui/assets/{dist-xJPdMGJR.js → dist-FZA45E-7.js} +1 -1
  16. package/dist/ui/assets/{ensure-speech-assets-DN2tBkA3.js → ensure-speech-assets-BlIqiaiz.js} +1 -1
  17. package/dist/ui/assets/esp8266-BFNIeAYK.js +1 -0
  18. package/dist/ui/assets/{esptool-operations-CSixDQRB.js → esptool-operations-C7XTHRbX.js} +2 -2
  19. package/dist/ui/assets/{fs-CLbTXqU7.js → fs-B405gsX9.js} +2 -2
  20. package/dist/ui/assets/fs-_1uCKASI.js +1 -0
  21. package/dist/ui/assets/{github-CDGV9LOr.js → github-Bzpex-L1.js} +1 -1
  22. package/dist/ui/assets/{github-CF0ypnjs.js → github-C5zYDYTF.js} +2 -2
  23. package/dist/ui/assets/{github-copilot-CKMgyVP3.js → github-copilot-BISsKYOk.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-1jO5YhBA.js → github-copilot-DO1pAeUP.js} +1 -1
  25. package/dist/ui/assets/{hear-BA7LmzBZ.js → hear-Dx-zxQj1.js} +1 -1
  26. package/dist/ui/assets/{kernel-worker-BFPqa_y4.js → kernel-worker-DJCbDJ9c.js} +1171 -1121
  27. package/dist/ui/assets/{kokoro-engine-DmKFV5gN.js → kokoro-engine-BYsKFKH6.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-BWokgV-S.js → lick-ws-bridge-C9Q_jdCd.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-Dvo0A29q.js → lick-ws-bridge-qC_jb-k1.js} +1 -1
  30. package/dist/ui/assets/{local-llm-CHb97cbD.js → local-llm-Bnbgs8iY.js} +1 -1
  31. package/dist/ui/assets/main-2WgZ1xzm.js +24 -0
  32. package/dist/ui/assets/{mount-B7EzmUC0.js → mount-DFgbtU7J.js} +2 -2
  33. package/dist/ui/assets/{mount-BvBmQ0-0.js → mount-DW5sWCdT.js} +1 -1
  34. package/dist/ui/assets/{new-session-DGwIj1BV.js → new-session-DVdd6re1.js} +2 -2
  35. package/dist/ui/assets/{oauth-bootstrap-2pqa5H30.js → oauth-bootstrap-D8RMd814.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-CN1uYxxv.js → openai-codex-BpPUQYIy.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-PE2VxSOv.js → openai-codex-CvedPbFY.js} +1 -1
  38. package/dist/ui/assets/{page-follower-tray-fj4kD6LU.js → page-follower-tray-dM7O7vPl.js} +1 -1
  39. package/dist/ui/assets/{panel-rpc-handlers-BvcCKs0_.js → panel-rpc-handlers-DCpyekXs.js} +2 -2
  40. package/dist/ui/assets/{provider-C5S_5LXL.js → provider-D9am5pNq.js} +1 -1
  41. package/dist/ui/assets/{provider-CjYJAk12.js → provider-q8nzrsTw.js} +2 -2
  42. package/dist/ui/assets/provider-store-access-BCOQYcGc.js +1 -0
  43. package/dist/ui/assets/provider-store-access-D1Rnclw5.js +1 -0
  44. package/dist/ui/assets/{providers-BLSeI6gZ.js → providers-D7Dxdw4X.js} +1 -1
  45. package/dist/ui/assets/{providers-EOfV9vdZ.js → providers-DeOkLcXk.js} +2 -2
  46. package/dist/ui/assets/{quick-llm-CvbElujR.js → quick-llm-CbrSHLx4.js} +1 -1
  47. package/dist/ui/assets/session-freezer-B0qQhB_o.js +1 -0
  48. package/dist/ui/assets/{speak-CeaHsGEi.js → speak-B9LH5GRH.js} +1 -1
  49. package/dist/ui/assets/{sprinkle-manager-D17pd_PU.js → sprinkle-manager-D4TntcFY.js} +1 -1
  50. package/dist/ui/assets/{store-C1dmcd_Z.js → store-DyKFSH-l.js} +1 -1
  51. package/dist/ui/assets/{sudo-BaZeZrKO.js → sudo-0NjRrrjj.js} +1 -1
  52. package/dist/ui/assets/{transformers-env-BtZiU9Zy.js → transformers-env-D8OLxjSb.js} +1 -1
  53. package/dist/ui/assets/{tray-leader-DySjWLR-.js → tray-leader-BWPVY8Cy.js} +1 -1
  54. package/dist/ui/assets/{tray-leave-runtime-BTy8ZdNr.js → tray-leave-runtime-DQWq8f78.js} +1 -1
  55. package/dist/ui/assets/{upgrade-detection-D1RzsLJG.js → upgrade-detection-BECviNHx.js} +1 -1
  56. package/dist/ui/assets/{voice-reply-DLFM5K98.js → voice-reply-Cg6s4jsf.js} +1 -1
  57. package/dist/ui/assets/{wc-attach-COndISMH.js → wc-attach-SACP-d3J.js} +2 -2
  58. package/dist/ui/assets/{wc-extension-DqsWFOzt.js → wc-extension-CJK7gszV.js} +2 -2
  59. package/dist/ui/assets/{wc-follower-8V6fEQ4R.js → wc-follower-DvUGaShj.js} +3 -3
  60. package/dist/ui/assets/{wc-live-CWjluHxO.js → wc-live-CQpax27Z.js} +23 -23
  61. package/dist/ui/assets/{wc-nav-CXUL4V4Y.js → wc-nav-DUsRM2OA.js} +2 -2
  62. package/dist/ui/assets/{wc-onboarding-D9584JBU.js → wc-onboarding-gwkRTSAa.js} +2 -2
  63. package/dist/ui/assets/{wc-placeholder-WEW27YLe.js → wc-placeholder-DOh8tTjB.js} +3 -3
  64. package/dist/ui/assets/{wc-settings-DuuwHWSv.js → wc-settings-DM_M-pvD.js} +3 -3
  65. package/dist/ui/assets/{wc-shell-BRXA9i_k.js → wc-shell-DIQbgbgf.js} +3 -3
  66. package/dist/ui/assets/{wc-sprinkles-C14qdDwd.js → wc-sprinkles-DfGOPlst.js} +2 -2
  67. package/dist/ui/assets/{wc-tray-C9VyD3aS.js → wc-tray-BM03LmTw.js} +2 -2
  68. package/dist/ui/assets/{whisper-engine-DT9tB6ou.js → whisper-engine-Cl1v3kZv.js} +1 -1
  69. package/dist/ui/assets/{xai-grok-iwV6WbVP.js → xai-grok-DYTZviCC.js} +1 -1
  70. package/dist/ui/assets/{xai-grok-B2ak-_nc.js → xai-grok-qsgYPQu-.js} +1 -1
  71. package/dist/ui/index.html +3 -3
  72. package/dist/ui/packages/webapp/index.html +3 -3
  73. package/package.json +1 -1
  74. package/dist/ui/assets/dip-BjEsG-Hy.js +0 -1
  75. package/dist/ui/assets/esp8266-X1cHLEke.js +0 -1
  76. package/dist/ui/assets/fs-B80Ome53.js +0 -1
  77. package/dist/ui/assets/main-CMLc_YHL.js +0 -24
  78. package/dist/ui/assets/provider-store-access-DbX-7uoI.js +0 -1
  79. package/dist/ui/assets/provider-store-access-vQAeypVR.js +0 -1
  80. package/dist/ui/assets/session-freezer-CKE1FQU0.js +0 -1
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,o as r,r as i}from"./transformers-env-BtZiU9Zy.js";const a=e(`speech:whisper`),o=`onnx-community/whisper-tiny`;let s=null,c=`idle`,l=null;const u=new Set;function d(){return c}function f(){return l}function p(e){return e&&u.add(e),s||=(c=`loading`,h().then(e=>(c=`ready`,m(),e),e=>{throw c=`failed`,s=null,a.error(`whisper load failed`,e),e})),s}function m(){import(`./speak-CeaHsGEi.js`).then(({kokoroWarmup:e})=>e()).catch(e=>a.warn(`kokoro warmup (chained after whisper) failed`,e))}async function h(){let{pipeline:e,env:s}=await import(`./transformers.web-C6PlPLR-.js`);n(s),await i(o),await t();let c=r(),d=e=>{if(e?.file){if(e.status===`progress`)c.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)c.complete(e.file);else return;l=c.snapshot();for(let e of u)e(l)}},f=async t=>await e(`automatic-speech-recognition`,o,{device:t,dtype:t===`webgpu`?`fp32`:`q8`,progress_callback:d}),p=typeof navigator<`u`&&`gpu`in navigator,m;if(p)try{m=await f(`webgpu`)}catch(e){a.warn(`whisper webgpu init failed; retrying on wasm`,e),m=await f(`wasm`)}else m=await f(`wasm`);return a.info(`whisper ready`,{model:o,device:p?`webgpu`:`wasm`}),{async transcribe(e,t){let n=await m(e,{chunk_length_s:30,task:`transcribe`,...t?.language?{language:t.language}:{}});return(Array.isArray(n)?n.map(e=>e.text??``).join(` `):n.text??``).trim()}}}export{d as i,p as n,f as r,o as t};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,o as r,r as i}from"./transformers-env-D8OLxjSb.js";const a=e(`speech:whisper`),o=`onnx-community/whisper-tiny`;let s=null,c=`idle`,l=null;const u=new Set;function d(){return c}function f(){return l}function p(e){return e&&u.add(e),s||=(c=`loading`,h().then(e=>(c=`ready`,m(),e),e=>{throw c=`failed`,s=null,a.error(`whisper load failed`,e),e})),s}function m(){import(`./speak-B9LH5GRH.js`).then(({kokoroWarmup:e})=>e()).catch(e=>a.warn(`kokoro warmup (chained after whisper) failed`,e))}async function h(){let{pipeline:e,env:s}=await import(`./transformers.web-C6PlPLR-.js`);n(s),await i(o),await t();let c=r(),d=e=>{if(e?.file){if(e.status===`progress`)c.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)c.complete(e.file);else return;l=c.snapshot();for(let e of u)e(l)}},f=async t=>await e(`automatic-speech-recognition`,o,{device:t,dtype:t===`webgpu`?`fp32`:`q8`,progress_callback:d}),p=typeof navigator<`u`&&`gpu`in navigator,m;if(p)try{m=await f(`webgpu`)}catch(e){a.warn(`whisper webgpu init failed; retrying on wasm`,e),m=await f(`wasm`)}else m=await f(`wasm`);return a.info(`whisper ready`,{model:o,device:p?`webgpu`:`wasm`}),{async transcribe(e,t){let n=await m(e,{chunk_length_s:30,task:`transcribe`,...t?.language?{language:t.language}:{}});return(Array.isArray(n)?n.map(e=>e.text??``).join(` `):n.text??``).trim()}}}export{d as i,p as n,f as r,o as t};
@@ -1 +1 @@
1
- import{O as e,i as t}from"./account-store-GtFnwH-H.js";import{p as n}from"./transform-messages-ZX8cvJiJ.js";import{S as r,p as i,v as a}from"./bedrock-camp-Czep_VHL.js";import"./kernel-worker-BFPqa_y4.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 t().find(e=>e.providerId===d)}async function A(){let t=k();if(!t?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await O(t.refreshToken);if(n?.access_token)return await e({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.access_token}return t.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,r={})=>{let i=n();return(async()=>{try{let n=await A(),o=r.sessionId,s=a({...e,baseUrl:_,api:v},t,{...r,apiKey:n,headers:N(r.headers,o),onPayload:M(e.id,o)});for await(let e of s)i.push(e);i.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),i.push(j(e,t)),i.end()}})(),i},F=(e,t,i)=>{let a=n();return(async()=>{try{let n=await A(),o=i?.sessionId,s=r({...e,baseUrl:_,api:v},t,{...i,apiKey:n,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(t,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 t({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 e({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),n()},onOAuthLogout:async()=>{await e({providerId:d,accessToken:``})},onSilentRenew:async()=>{let t=k();if(!t?.refreshToken)return null;let n=await O(t.refreshToken);return n?.access_token?(await e({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.access_token):null}};function L(){i({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
1
+ import{O as e,i as t}from"./account-store-DIWSNjw7.js";import{p as n}from"./transform-messages-ZX8cvJiJ.js";import{S as r,p as i,v as a}from"./bedrock-camp-Czep_VHL.js";import"./kernel-worker-DJCbDJ9c.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 t().find(e=>e.providerId===d)}async function A(){let t=k();if(!t?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await O(t.refreshToken);if(n?.access_token)return await e({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.access_token}return t.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,r={})=>{let i=n();return(async()=>{try{let n=await A(),o=r.sessionId,s=a({...e,baseUrl:_,api:v},t,{...r,apiKey:n,headers:N(r.headers,o),onPayload:M(e.id,o)});for await(let e of s)i.push(e);i.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),i.push(j(e,t)),i.end()}})(),i},F=(e,t,i)=>{let a=n();return(async()=>{try{let n=await A(),o=i?.sessionId,s=r({...e,baseUrl:_,api:v},t,{...i,apiKey:n,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(t,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 t({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 e({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),n()},onOAuthLogout:async()=>{await e({providerId:d,accessToken:``})},onSilentRenew:async()=>{let t=k();if(!t?.refreshToken)return null;let n=await O(t.refreshToken);return n?.access_token?(await e({providerId:d,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3}),n.access_token):null}};function L(){i({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
@@ -1 +1 @@
1
- import{s as e}from"./models-ByRUWfA-.js";import{a as t,l as n,p as r}from"./compat-FrhC6T45.js";import{R as i,d as a}from"./account-store-DnfeinGB.js";import"./main-CMLc_YHL.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 i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function N(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:x,provider:d,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function P(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function F(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}var I=(t,r,i={})=>{let a=e();return(async()=>{try{let e=await M(),o=i.sessionId,s=n({...t,baseUrl:y,api:b},r,{...i,apiKey:e,headers:F(i.headers,o),onPayload:P(t.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(t,e)),a.end()}})(),a},L=(t,n,i)=>{let a=e();return(async()=>{try{let e=await M(),o=i?.sessionId,s=r({...t,baseUrl:y,api:b},n,{...i,apiKey:e,headers:F(i?.headers,o),onPayload:P(t.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(t,e)),a.end()}})(),a},R={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>C.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=E(),a=await D(r),c=O(),l=O(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,_),u.searchParams.set(`scope`,n?.scopes??g),u.searchParams.set(`code_challenge`,a),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:v,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),b=m.searchParams.get(`code`),x=m.searchParams.get(`state`);if(!b)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(x!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let S=await k(b,r);await i({providerId:d,accessToken:S.access_token,refreshToken:S.refresh_token,tokenExpiresAt:Date.now()+(S.expires_in??21600)*1e3,baseUrl:y}),t()},onOAuthLogout:async()=>{await i({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=j();if(!e?.refreshToken)return null;let t=await A(e.refreshToken);return t?.access_token?(await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function z(){t({api:x,stream:I,streamSimple:L})}export{o as XaiErrorCode,s as XaiOAuthError,R as config,z as register};
1
+ import{s as e}from"./models-ByRUWfA-.js";import{a as t,l as n,p as r}from"./compat-FrhC6T45.js";import{R as i,d as a}from"./account-store-BQKctIy7.js";import"./main-2WgZ1xzm.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 i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function N(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:x,provider:d,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function P(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function F(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}var I=(t,r,i={})=>{let a=e();return(async()=>{try{let e=await M(),o=i.sessionId,s=n({...t,baseUrl:y,api:b},r,{...i,apiKey:e,headers:F(i.headers,o),onPayload:P(t.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(t,e)),a.end()}})(),a},L=(t,n,i)=>{let a=e();return(async()=>{try{let e=await M(),o=i?.sessionId,s=r({...t,baseUrl:y,api:b},n,{...i,apiKey:e,headers:F(i?.headers,o),onPayload:P(t.id,o)});for await(let e of s)a.push(e);a.end()}catch(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e)),a.push(N(t,e)),a.end()}})(),a},R={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>C.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=E(),a=await D(r),c=O(),l=O(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,_),u.searchParams.set(`scope`,n?.scopes??g),u.searchParams.set(`code_challenge`,a),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:v,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),b=m.searchParams.get(`code`),x=m.searchParams.get(`state`);if(!b)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(x!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let S=await k(b,r);await i({providerId:d,accessToken:S.access_token,refreshToken:S.refresh_token,tokenExpiresAt:Date.now()+(S.expires_in??21600)*1e3,baseUrl:y}),t()},onOAuthLogout:async()=>{await i({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=j();if(!e?.refreshToken)return null;let t=await A(e.refreshToken);return t?.access_token?(await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function z(){t({api:x,stream:I,streamSimple:L})}export{o as XaiErrorCode,s as XaiOAuthError,R as config,z as register};
@@ -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-CMLc_YHL.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-2WgZ1xzm.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CZgWQFsJ.js">
@@ -23,11 +23,11 @@
23
23
  <link rel="modulepreload" crossorigin href="/assets/port-bridge-client-BnzDL5Fz.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-Br74C9hX.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
26
- <link rel="modulepreload" crossorigin href="/assets/providers-EOfV9vdZ.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/providers-DeOkLcXk.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/panel-rpc-DmJSNs0I.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DwI5R8if.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-CZFsedRI.js">
30
- <link rel="modulepreload" crossorigin href="/assets/account-store-DnfeinGB.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/account-store-BQKctIy7.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
32
32
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DuHpK59o.js">
33
33
  </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-CMLc_YHL.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-2WgZ1xzm.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CZgWQFsJ.js">
@@ -23,11 +23,11 @@
23
23
  <link rel="modulepreload" crossorigin href="/assets/port-bridge-client-BnzDL5Fz.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-Br74C9hX.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
26
- <link rel="modulepreload" crossorigin href="/assets/providers-EOfV9vdZ.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/providers-DeOkLcXk.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/panel-rpc-DmJSNs0I.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DwI5R8if.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-CZFsedRI.js">
30
- <link rel="modulepreload" crossorigin href="/assets/account-store-DnfeinGB.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/account-store-BQKctIy7.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
32
32
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DuHpK59o.js">
33
33
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "5.40.1",
3
+ "version": "5.42.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{m as e}from"./wc-live-CWjluHxO.js";export{e as setDipExecHandler};
@@ -1 +0,0 @@
1
- import{t as e}from"./esptool-operations-CSixDQRB.js";export{e as ESP8266ROM};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./backend-local-Xd3x-KgI.js";import{t as r}from"./types-idfTVsM8.js";import{a as i,i as a,n as o,t as s}from"./mount-table-store-s20mtVA3.js";import{i as c,n as l,r as u,t as d}from"./path-utils-DU6QhF_k.js";const f=t(`fs-watcher`);let p=0;function m(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var h=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++p}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),f.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),f.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>m(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){f.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),f.debug(`All watchers disposed`)}get size(){return this.registrations.size}};const g=t(`mount-index`);var _=class extends Error{cause;constructor(e,t){super(e),this.name=`MountIndexAbortError`,this.cause=t}};function v(e){let t=e.map(([e,t])=>`${e}\u0000${t.kind}`).sort(),n=t.length>256?t.slice(0,256):t;return`${t.length}\u0001${n.join(``)}`}async function y(e,t){let n=e.isSameEntry;if(typeof n!=`function`)return!1;try{return await n.call(e,t)}catch{return!1}}function b(e,t){return e instanceof Map?e.get(t):e[t]}function x(e){let t=e.trim();if(t===``)return;let n=Number(t);if(!(!Number.isInteger(n)||n<=0))return n}function S(e,t,n){let r=b(e,t);if(r===void 0||r.trim()===``)return n;let i=x(r);return i===void 0?(g.warn(`Ignoring invalid ${t}; expected a positive integer, using default`,{value:r,fallback:n}),n):i}function C(e){return{maxDepth:S(e,`SLICC_MOUNT_INDEX_MAX_DEPTH`,400),maxEntries:S(e,`SLICC_MOUNT_INDEX_MAX_ENTRIES`,2e6)}}var w=class{mounts=new Map;listeners=new Set;registerMount(e,t,n=C({})){this.mounts.get(e)?.abortController?.abort();let r=new AbortController,i={handle:t,state:{status:`pending`,indexed:0},files:new Set,directories:new Set,abortController:r,limits:n};this.mounts.set(e,i),this.notifyListeners(),this.indexMount(e,i,r.signal)}unregisterMount(e){let t=this.mounts.get(e);t&&(t.abortController?.abort(),this.mounts.delete(e),this.notifyListeners())}async refreshMount(e,t){let n=this.mounts.get(e);if(!n)throw Error(`No mount at ${e}`);n.abortController?.abort();let r=new AbortController;n.abortController=r,n.state={status:`pending`,indexed:0},n.files.clear(),n.directories.clear(),t&&(n.limits=t),this.notifyListeners(),await this.indexMount(e,n,r.signal)}isReady(e){return this.mounts.get(e)?.state.status===`ready`}isAnyIndexing(){for(let e of this.mounts.values())if(e.state.status===`indexing`||e.state.status===`pending`)return!0;return!1}dispose(){for(let e of this.mounts.values())e.abortController?.abort();this.mounts.clear(),this.listeners.clear()}getState(e){return this.mounts.get(e)?.state}getFiles(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;if(!t)return[...n.files];let r=[];for(let e of n.files)t(e)&&r.push(e);return r}getDirectoryEntries(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;let r=t===`/`?`/`:t+`/`,i=new Map;for(let e of n.files){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`file`)}for(let e of n.directories){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`directory`)}return[...i.entries()].map(([e,t])=>({name:e,type:t}))}hasPath(e,t){let n=this.mounts.get(e);if(n?.state.status===`ready`)return n.files.has(t)||n.directories.has(t)}notifyWrite(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.add(e);let r=e;for(;r!==t;){let e=r.lastIndexOf(`/`);if(e<=0)break;r=r.slice(0,e)||`/`,r.length>=t.length&&n.directories.add(r)}}notifyDelete(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.delete(e),n.directories.delete(e);let r=e+`/`;for(let e of n.files)e.startsWith(r)&&n.files.delete(e);for(let e of n.directories)e.startsWith(r)&&n.directories.delete(e)}notifyRename(e,t){let n=this.findMountForPath(e);if(!n)return;let r=this.mounts.get(n);if(r?.state.status===`ready`){if(r.files.has(e)){r.files.delete(e),r.files.add(t);return}if(r.directories.has(e)){r.directories.delete(e),r.directories.add(t);let n=e+`/`,i=t+`/`;for(let e of[...r.files])e.startsWith(n)&&(r.files.delete(e),r.files.add(i+e.slice(n.length)));for(let e of[...r.directories])e.startsWith(n)&&(r.directories.delete(e),r.directories.add(i+e.slice(n.length)))}}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}findMountForPath(e){let t;for(let n of this.mounts.keys())(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.length)&&(t=n);return t}notifyListeners(){for(let e of this.listeners)try{e()}catch{}}async indexMount(e,t,n){t.state={status:`indexing`,indexed:0},this.notifyListeners();try{if(await this.walkHandle(e,t.handle,t,n),n.aborted)return;t.state={status:`ready`,indexed:t.files.size+t.directories.size,total:t.files.size+t.directories.size},t.abortController=null,g.info(`Mount indexed`,{path:e,files:t.files.size,directories:t.directories.size})}catch(r){if(n.aborted)return;let i=r instanceof Error?r.message:String(r),a=r instanceof _?r.cause:`indexing-error`;t.state={status:`error`,indexed:0,error:i,abortCause:a},g.error(`Mount indexing failed`,{path:e,error:i,abortCause:a})}this.notifyListeners()}async walkHandle(e,t,n,r,i=0,a=new Map){if(r.aborted)return;this.enforceWalkBounds(i,n),n.directories.add(e);let o=await this.readChildren(t,r,n);if(r.aborted)return;let s=await this.confirmNoCycle(e,t,o,a),c=this.pushAncestor(a,s,e,t);try{await this.walkChildren(e,o,n,r,i,a)}finally{this.popAncestor(a,s,c)}}enforceWalkBounds(e,t){if(e>t.limits.maxDepth)throw new _(`mount indexing aborted: directory nesting exceeded ${t.limits.maxDepth} levels`,`depth-exceeded`);if(t.directories.size+t.files.size>=t.limits.maxEntries)throw new _(`mount indexing aborted: exceeded ${t.limits.maxEntries} entries`,`entries-exceeded`)}async readChildren(e,t,n){let r=e,i=[];for await(let e of r){if(t.aborted)break;if(n.directories.size+n.files.size+i.length>=n.limits.maxEntries)throw new _(`mount indexing aborted: exceeded ${n.limits.maxEntries} entries`,`entries-exceeded`);i.push(e)}return i}async confirmNoCycle(e,t,n,r){let i=v(n),a=r.get(i);if(a){for(let n of a)if(await y(n.handle,t))throw new _(`mount indexing aborted: self-referential mount cycle detected at ${e} (re-exposes ${n.path})`,`cycle-detected`)}return i}pushAncestor(e,t,n,r){let i=e.get(t);return i||(i=[],e.set(t,i)),i.push({path:n,handle:r,signature:t}),i}popAncestor(e,t,n){n.pop(),n.length===0&&e.delete(t)}async walkChildren(e,t,n,r,i,a){for(let[o,s]of t){if(r.aborted)return;let t=e===`/`?`/${o}`:`${e}/${o}`;s.kind===`file`?(n.files.add(t),n.state.indexed++):s.kind===`directory`&&await this.walkHandle(t,s,n,r,i+1,a),n.state.indexed%500==0&&(this.notifyListeners(),await new Promise(e=>setTimeout(e,0)))}}};const T={"/dev/null":{stat:()=>({type:`file`,size:0,mtime:0,ctime:0}),read:e=>(e?.encoding??`utf-8`)===`utf-8`?``:new Uint8Array,readText:()=>``,write:()=>{}}};var E=class{vfs;allowedPrefixes;readOnlyPrefixes;writeEnforcement;constructor(e,t,n=[],r=`hard`){this.vfs=e;let i=e=>{let t=l(e);return t.endsWith(`/`)?t:t+`/`};this.allowedPrefixes=t.map(i),this.readOnlyPrefixes=n.map(i),this.writeEnforcement=r}getAllPrefixes(){let e=this.vfs.listMounts().map(e=>e.endsWith(`/`)?e:e+`/`);return[...this.allowedPrefixes,...this.readOnlyPrefixes,...e]}isAllowed(e){let t=l(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e)||t===`/`||e.startsWith(t+`/`))}isAllowedStrict(e){let t=l(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e))}isWritable(e){let t=l(e);return this.allowedPrefixes.some(e=>t===e.slice(0,-1)||t.startsWith(e))}canWrite(e){return this.isWritable(e)}checkWrite(e){if(this.writeEnforcement!==`sudo-delegated`&&!this.isWritable(e))throw new r(`EACCES`,`permission denied`,l(e))}async resolveAndCheckRead(e){try{let t=await this.vfs.realpath(e);if(!this.isAllowedStrict(t))throw new r(`ENOENT`,`no such file or directory`,l(e));return t}catch(t){throw t instanceof r?t:new r(`ENOENT`,`no such file or directory`,l(e))}}async resolveAndCheckWrite(e){try{let t=await this.vfs.realpath(e);if(!this.isWritable(t)&&!this.isSymlinkEscapeAllowed(t))throw new r(`EACCES`,`permission denied`,l(e));return t}catch(t){throw t instanceof r?t:new r(`EACCES`,`permission denied`,l(e))}}isSymlinkEscapeAllowed(e){return!1}async checkParentRealpathEscape(e){let t=this.vfs.dirname(e),n=this.vfs.basename(e),i;try{i=await this.vfs.realpath(t)}catch(e){if(e instanceof r&&e.code===`EACCES`)throw e;return}let a=i+`/`+n;if(this.isWritable(a))return;let o=l(i)!==l(t);if(!(this.writeEnforcement===`sudo-delegated`&&!o))throw new r(`EACCES`,`permission denied`,l(e))}getUnderlyingFS(){return this.vfs}invalidatePaths(e){this.vfs.invalidatePaths(e)}isPathUnderMount(e){return this.vfs.isPathUnderMount(e)}async readFile(e,t){let n=T[l(e)];if(n)return n.read(t);if(!this.isAllowedStrict(e))throw new r(`ENOENT`,`no such file or directory`,l(e));let i=await this.resolveAndCheckRead(e);return this.vfs.readFile(i,t)}async readDir(e){if(!this.isAllowed(e))return[];let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return[]}let n=await this.vfs.readDir(t);if(!this.isAllowedStrict(e)){let t=l(e);return n.filter(e=>{let n=t===`/`?`/${e.name}`:`${t}/${e.name}`;return this.isAllowed(n)})}return n}async stat(e){let t=T[l(e)];if(t)return t.stat();if(!this.isAllowed(e))throw new r(`ENOENT`,`no such file or directory`,l(e));if(this.isAllowedStrict(e)){let t=await this.resolveAndCheckRead(e);return this.vfs.stat(t)}return this.vfs.stat(e)}scanPathForSymlinks(e,t){let n=l(e);if(n===`/`)return!1;let r=n.slice(1).split(`/`),i=t?r.length:r.length-1,a=``;for(let e=0;e<i;e++){a=a+`/`+r[e];let t=this.vfs.lstatSync(a);if(t===null)return null;if(t.type===`symlink`)return!0}return!1}statSync(e){let t=T[l(e)];return t?t.stat():!this.isAllowedStrict(e)||this.scanPathForSymlinks(e,!0)!==!1?null:this.vfs.statSync(e)}lstatSync(e){let t=T[l(e)];return t?t.stat():!this.isAllowed(e)||this.scanPathForSymlinks(e,!1)!==!1?null:this.vfs.lstatSync(e)}readDirSync(e){if(!this.isAllowed(e)||this.scanPathForSymlinks(e,!0)!==!1)return null;let t=this.vfs.readDirSync(e);if(t===null)return null;if(this.isAllowedStrict(e))return t;let n=l(e);return t.filter(e=>{let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;return this.isAllowed(t)})}async realpath(e){let t;try{t=await this.vfs.realpath(e)}catch(t){throw t instanceof r?t:new r(`ENOENT`,`no such file or directory`,l(e))}if(!this.isAllowedStrict(t))throw new r(`ENOENT`,`no such file or directory`,l(e));return t}async exists(e){if(T[l(e)])return!0;if(!this.isAllowed(e))return!1;if(this.isAllowedStrict(e))try{await this.resolveAndCheckRead(e)}catch{return!1}return this.vfs.exists(e)}async readTextFile(e){let t=T[l(e)];if(t)return t.readText();if(!this.isAllowedStrict(e))throw new r(`ENOENT`,`no such file or directory`,l(e));let n=await this.resolveAndCheckRead(e);return this.vfs.readTextFile(n)}async*walk(e){if(!this.isAllowed(e))return;let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return}for await(let e of this.vfs.walk(t))this.isAllowed(e)&&(yield e)}async writeFile(e,t,n){let i=T[l(e)];if(i){i.write(t);return}this.checkWrite(e),await this.checkParentRealpathEscape(e);try{(await this.vfs.lstat(e)).type===`symlink`&&await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof r&&e.code===`EACCES`)throw e}return this.vfs.writeFile(e,t,n)}async mkdir(e,t){return this.checkWrite(e),await this.checkParentRealpathEscape(e),this.vfs.mkdir(e,t)}async rm(e,t){this.checkWrite(e);try{(await this.vfs.lstat(e)).type===`symlink`||await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof r&&e.code===`EACCES`)throw e}return this.vfs.rm(e,t)}async rename(e,t){return this.checkWrite(e),this.checkWrite(t),await this.resolveAndCheckWrite(e),await this.checkParentRealpathEscape(t),this.vfs.rename(e,t)}async copyFile(e,t){if(!this.isAllowed(e))throw new r(`ENOENT`,`no such file or directory`,l(e));this.checkWrite(t);let n=await this.resolveAndCheckRead(e);await this.checkParentRealpathEscape(t);try{(await this.vfs.lstat(t)).type===`symlink`&&await this.resolveAndCheckWrite(t)}catch(e){if(e instanceof r&&e.code===`EACCES`)throw e}return this.vfs.copyFile(n,t)}async symlink(e,t){return this.checkWrite(t),await this.checkParentRealpathEscape(t),this.vfs.symlink(e,t)}async readlink(e){if(!this.isAllowedStrict(e))throw new r(`ENOENT`,`no such file or directory`,l(e));let t=await this.vfs.readlink(e),n;if(n=t.startsWith(`/`)?l(t):l(this.vfs.dirname(e)+`/`+t),!this.isAllowedStrict(n))throw new r(`ENOENT`,`no such file or directory`,l(e));return t}async lstat(e){let t=T[l(e)];if(t)return t.stat();if(!this.isAllowed(e))throw new r(`ENOENT`,`no such file or directory`,l(e));let n=l(e),i=this.vfs.dirname(n),a=this.vfs.basename(n),o;if(i===n)o=i;else try{o=await this.vfs.realpath(i)}catch{throw new r(`ENOENT`,`no such file or directory`,n)}let s=o===`/`?`/${a}`:`${o}/${a}`;if(!this.isAllowed(s))throw new r(`ENOENT`,`no such file or directory`,n);return this.vfs.lstat(s)}watch(e,t,n){if(!this.isAllowed(e))throw new r(`EACCES`,`permission denied`,l(e));let i=this.vfs.getWatcher();if(!i)throw new r(`EINVAL`,`no watcher configured`);return i.watch(l(e),t,n)}dirname(e){return this.vfs.dirname(e)}basename(e){return this.vfs.basename(e)}async dispose(){await this.vfs.dispose()}};function D(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`opfs`}catch{}return`memory`}var O=class e{lfs;lfsSync;rawLfs=null;rawLfsSync=null;_ready;_readyResolved=!1;backend;mountPoints=new Map;opfsBackendFs=null;opfsHandle=null;mountRoot=``;internalMounts=new Set;watcher=null;dbName;mountSyncChannel=null;mountIndex=new w;_writeLock=Promise.resolve();constructor(t,n,r,i){if(this.dbName=t,this.backend=r===`opfs`?`opfs`:`memory`,this.lfs=this.makeDeferredLfs(),this.lfsSync=this.makeDeferredLfsSync(),this._ready=this.backend===`opfs`?e.initOpfsBackend(this,i,n===!0):e.initMemoryBackend(this,t,n===!0),this._ready.then(()=>{this._readyResolved=!0},()=>{}),typeof BroadcastChannel<`u`)try{this.mountSyncChannel=new BroadcastChannel(`vfs-mount-sync:${t}`),this.mountSyncChannel.onmessage=e=>{let{type:t,path:n,descriptor:r}=e.data??{};if(t===`mount`&&typeof n==`string`&&r)this.reconstructBackendFromDescriptor(r).then(e=>{this.mountPoints.set(n,e),e.kind===`local`&&this.mountIndex.registerMount(n,e.getHandle()),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}).catch(()=>{});else if(t===`unmount`&&typeof n==`string`){let e=this.mountPoints.get(n);this.mountPoints.delete(n),this.mountIndex.unregisterMount(n),e?.close(),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}}}catch{}}static async initOpfsBackend(t,n,r){let i=n??await e.acquireOpfsHandle(t.dbName,r);await e.seedOpfsMetadataSidecarIfMissing(i);let[a,{WebAccess:o}]=await Promise.all([import(`./dist-xJPdMGJR.js`).then(e=>e.t),import(`./dist-C4FoRFNu.js`)]);await e.ensureRootMount(a);let s=`/__opfs__/${t.dbName}`,c=e.opfsBackends.get(t.dbName);if(c&&r){try{a.umount(s)}catch{}e.opfsBackends.delete(t.dbName),c=void 0}if(!c){let n=await a.resolveMountConfig({backend:o,handle:i,metadata:`/.metadata.json`});try{a.mount(s,n)}catch{}c={backendFs:n,refs:0},e.opfsBackends.set(t.dbName,c)}c.refs+=1,t.opfsBackendFs=c.backendFs.index?c.backendFs:null,t.opfsHandle=i,t.mountRoot=s,t.rawLfs=a.promises,t.rawLfsSync=a}static async initMemoryBackend(t,n,r){let i=await import(`./dist-xJPdMGJR.js`).then(e=>e.t);await e.ensureRootMount(i);let a=`/__zenfs__/${n}`,o=e.memoryBackends.get(n);if(o&&r){try{i.umount(a)}catch{}e.memoryBackends.delete(n),o=void 0}o||(o={store:i.InMemory.create({label:n}),refs:0},e.memoryBackends.set(n,o)),o.refs+=1;try{i.mount(a,o.store)}catch{}t.mountRoot=a,t.rawLfs=i.promises,t.rawLfsSync=i,t.opfsBackendFs=null,t.opfsHandle=null}static rootMountReady=null;static memoryBackends=new Map;static opfsBackends=new Map;static async ensureRootMount(t){return e.rootMountReady||=(async()=>{await t.configureSingle({backend:t.InMemory,label:`__vfs_root__`})})(),e.rootMountReady}prefix(e){return this.mountRoot?e===`/`?this.mountRoot:this.mountRoot+e:e}unprefix(e){return!this.mountRoot||!e.startsWith(this.mountRoot)?e:e.slice(this.mountRoot.length)||`/`}makeDeferredLfs(){let e=e=>this.prefix(e),t=e=>this.unprefix(e),n=()=>{if(!this.rawLfs)throw Error(`VirtualFS used before init resolved`);return this.rawLfs};return{readFile:(t,r)=>this._readyResolved?n().readFile(e(t),r):this._ready.then(()=>n().readFile(e(t),r)),writeFile:(t,r,i)=>this._readyResolved?n().writeFile(e(t),r,i):this._ready.then(()=>n().writeFile(e(t),r,i)),readdir:t=>this._readyResolved?n().readdir(e(t)):this._ready.then(()=>n().readdir(e(t))),mkdir:(t,r)=>this._readyResolved?n().mkdir(e(t),r):this._ready.then(()=>n().mkdir(e(t),r)),rmdir:t=>this._readyResolved?n().rmdir(e(t)):this._ready.then(()=>n().rmdir(e(t))),unlink:t=>this._readyResolved?n().unlink(e(t)):this._ready.then(()=>n().unlink(e(t))),rename:(t,r)=>this._readyResolved?n().rename(e(t),e(r)):this._ready.then(()=>n().rename(e(t),e(r))),stat:t=>this._readyResolved?n().stat(e(t)):this._ready.then(()=>n().stat(e(t))),lstat:t=>this._readyResolved?n().lstat(e(t)):this._ready.then(()=>n().lstat(e(t))),symlink:(t,r)=>{let i=t.startsWith(`/`)?e(t):t;return this._readyResolved?n().symlink(i,e(r)):this._ready.then(()=>n().symlink(i,e(r)))},readlink:async r=>(this._readyResolved||await this._ready,t(await n().readlink(e(r)))),truncate:async(t,r)=>{this._readyResolved||await this._ready;let i=n();typeof i.truncate==`function`&&await i.truncate(e(t),r)},realpath:async r=>{this._readyResolved||await this._ready;let i=n();return typeof i.realpath==`function`?t(await i.realpath(e(r))):e(r)}}}makeDeferredLfsSync(){let e=e=>this.prefix(e),t=e=>this.unprefix(e);return{readdirSync:t=>{let n=this.rawLfsSync;return n?.readdirSync?n.readdirSync(e(t)):void 0},statSync:t=>{let n=this.rawLfsSync;return n?.statSync?n.statSync(e(t)):void 0},lstatSync:t=>{let n=this.rawLfsSync;return n?.lstatSync?n.lstatSync(e(t)):void 0},readlinkSync:n=>{let r=this.rawLfsSync;return r?.readlinkSync?t(r.readlinkSync(e(n))):void 0}}}static async seedOpfsMetadataSidecarIfMissing(e){let t=`.metadata.json`;try{await e.getFileHandle(t);return}catch(e){if(e?.name!==`NotFoundError`)throw e}let n=await(await e.getFileHandle(t,{create:!0})).createWritable(),r=JSON.stringify({version:1,maxSize:4294967295,entries:{}});await n.write(r),await n.close()}static async acquireOpfsHandle(e,t){let n=navigator.storage;if(!n?.getDirectory)throw new r(`EINVAL`,`OPFS is not available in this environment`);let i=await n.getDirectory();if(t)try{await i.removeEntry(e,{recursive:!0})}catch{}return i.getDirectoryHandle(e,{create:!0})}static _createSyncForTests(t){return new e(t)}static async create(t){let n=t?.dbName??`browser-fs`,r=t?.wipe===!0,i=new e(n,r,t?.backend??D());return await i._ready,r&&await s().catch(()=>{}),i}async flush(){await this.writeOpfsMetadataSidecar()}async writeOpfsMetadataSidecar(){if(this.backend!==`opfs`)return;let e=this.opfsBackendFs,t=this.opfsHandle;if(!e||!t)return;let n=JSON.stringify(e.index.toJSON()),r=await(await t.getFileHandle(`.metadata.json`,{create:!0})).createWritable();await r.write(n),await r.close()}invalidatePaths(e){if(this.backend!==`opfs`||!this.opfsBackendFs)return;let t=this.opfsBackendFs;for(let n of e){let e=l(n);t.index.delete(e),t._handles?.delete(e)}}canWrite(e){return!0}setWatcher(e){this.watcher=e}getWatcher(){return this.watcher}async dispose(){if(this.mountSyncChannel?.close(),this.mountSyncChannel=null,this.watcher?.dispose(),this.watcher=null,this.mountIndex.dispose(),await this.writeOpfsMetadataSidecar(),this.mountRoot){let t=this.backend===`opfs`?e.opfsBackends:e.memoryBackends,n=t.get(this.dbName);if(n&&(--n.refs,n.refs<=0)){t.delete(this.dbName);try{(await import(`./dist-xJPdMGJR.js`).then(e=>e.t)).umount(this.mountRoot)}catch{}}}}readDirSync(e){let t=l(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.readdirSync!=`function`||typeof n.lstatSync!=`function`)return null;try{let e=n.readdirSync(t),r=[];for(let i of e){let e=t===`/`?`/${i}`:`${t}/${i}`;try{let t=n.lstatSync(e),a=t.isSymbolicLink()?`symlink`:t.isDirectory()?`directory`:`file`;r.push({name:i,type:a})}catch{}}return r}catch{return null}}statSync(e){let t=l(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.statSync!=`function`||typeof n.lstatSync!=`function`||typeof n.readlinkSync!=`function`)return null;let r=t;for(let e=0;e<=10;e++){let e;try{e=n.lstatSync(r)}catch{return null}if(!e.isSymbolicLink())return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs};let t;try{t=n.readlinkSync(r)}catch{return null}r=t.startsWith(`/`)?l(t):l(d(c(r).dir,t))}return null}lstatSync(e){let t=l(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.lstatSync!=`function`)return null;try{let e=n.lstatSync(t);if(e.isSymbolicLink()){let r=n.readlinkSync?n.readlinkSync(t):``;return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:r}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return null}}async mount(e,t,n){let a=l(e);if(this.mountPoints.has(a))throw new r(`EEXIST`,`mount point is already mounted`,a);try{if((await this.lstat(a)).type!==`directory`)throw new r(`ENOTDIR`,`mount point must be a directory`,a);if((await this.readDir(a)).length>0)throw new r(`ENOTEMPTY`,`mount point must be empty to avoid shadowing existing files`,a)}catch(e){if(!(e instanceof r)||e.code!==`ENOENT`)throw e}let{dir:o}=c(a);o!==`/`&&await this.mkdir(o,{recursive:!0});try{await this.lfs.mkdir(a)}catch{}if(this.mountPoints.set(a,t),t.kind===`local`){let e=C(n?.env??{});this.mountIndex.registerMount(a,t.getHandle(),e)}let s=t.kind===`local`?{kind:`local`,mountId:t.mountId,idbHandleKey:a}:t.kind===`s3`?{kind:`s3`,mountId:t.mountId,source:t.source,profile:t.profile??`default`}:{kind:`da`,mountId:t.mountId,source:t.source,profile:t.profile??`default`};try{this.mountSyncChannel?.postMessage({type:`mount`,path:a,descriptor:s})}catch{}this.watcher?.notify([{type:`modify`,path:a,entryType:`directory`}]);try{await i({targetPath:a,descriptor:s,createdAt:Date.now()},t.kind===`local`?t.getHandle():void 0)}catch{}}async unmount(e){let t=l(e),n=this.mountPoints.get(t);this.mountPoints.delete(t),this.mountIndex.unregisterMount(t);try{this.mountSyncChannel?.postMessage({type:`unmount`,path:t})}catch{}this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close();try{await a(t)}catch{}}async reconstructBackendFromDescriptor(e){switch(e.kind){case`local`:{let t=await o(e.idbHandleKey);if(!t)throw Error(`no handle stored for ${e.idbHandleKey}`);return n.fromHandle(t,{mountId:e.mountId})}case`s3`:{let{S3MountBackend:t,RemoteMountCache:n,makeSignedFetchS3:r}=await import(`./mount-BvBmQ0-0.js`).then(e=>e.t),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r(e.profile)})}case`da`:{let{DaMountBackend:t,RemoteMountCache:n,makeSignedFetchDa:r}=await import(`./mount-BvBmQ0-0.js`).then(e=>e.t),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r()})}}}listMounts(){let e=[];for(let t of this.mountPoints.keys())this.internalMounts.has(t)||e.push(t);return e}listInternalMounts(){return[...this.internalMounts]}listMountPoints(){let e=[];for(let[t,n]of this.mountPoints)this.internalMounts.has(t)||e.push({path:t,kind:n.kind});return e}async mountInternal(e,t){let n=l(e);if(this.mountPoints.has(n))throw new r(`EEXIST`,`mount point is already mounted`,n);let{dir:i}=c(n);i!==`/`&&await this.mkdir(i,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),this.internalMounts.add(n),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}async unmountInternal(e){let t=l(e);if(!this.internalMounts.has(t))throw new r(`ENOENT`,`not an internal mount point`,t);let n=this.mountPoints.get(t);this.mountPoints.delete(t),this.internalMounts.delete(t),this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close()}getMountIndex(){return this.mountIndex}async refreshMount(e,t){let n=l(e),i=this.mountPoints.get(n);if(!i)throw new r(`ENOENT`,`not a mount point`,n);let a=await i.refresh(t);return i.kind===`local`&&await this.mountIndex.refreshMount(n,C(t?.env??{})),a}isPathUnderMount(e){for(let t of this.mountPoints.keys())if(e===t||e.startsWith(t+`/`))return!0;return!1}static rebrandFsError(e,t){if(e instanceof r){let n=`${e.code}: `,i=e.message;throw i.startsWith(n)&&(i=i.slice(n.length)),e.path&&i.endsWith(` '${e.path}'`)&&(i=i.slice(0,i.length-` '${e.path}'`.length)),new r(e.code,i,t)}throw e}findMount(e){let t=null;for(let[n,r]of this.mountPoints)(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.mountPath.length)&&(t={mountPath:n,backend:r});return t?e===t.mountPath?{path:t.mountPath,backend:t.backend,relParts:[]}:{path:t.mountPath,backend:t.backend,relParts:e.slice(t.mountPath.length+1).split(`/`).filter(Boolean)}:null}async readFile(t,n){let i=l(t),a=this.findMount(i);if(a){if(a.relParts.length===0)throw new r(`EISDIR`,`is a directory`,i);let t=a.relParts.join(`/`);try{let e=await a.backend.readFile(t);return(n?.encoding??`utf-8`)===`utf-8`?new TextDecoder(`utf-8`).decode(e):e}catch(t){e.rebrandFsError(t,i)}}let o=await this.resolveSymlinks(i);try{return(n?.encoding??`utf-8`)===`utf-8`?await this.lfs.readFile(o,{encoding:`utf8`}):await this.lfs.readFile(o)}catch(e){throw this.convertError(e,i)}}async writeFile(t,n,i){let a=l(t),o=this.findMount(a);if(o){if(o.relParts.length===0)throw new r(`EISDIR`,`is a directory`,a);let t=o.relParts.join(`/`),i=!1;try{await this.stat(a),i=!0}catch{}let s=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);try{await o.backend.writeFile(t,s)}catch(t){e.rebrandFsError(t,a)}this.watcher?.notify([{type:i?`modify`:`create`,path:a,entryType:`file`}]),this.mountIndex.notifyWrite(a);return}let s;try{s=await this.resolveSymlinks(a)}catch{s=a}let u=!1;try{await this.lfs.stat(s),u=!0}catch{}let{dir:d}=c(s);await this.withWriteLock(async()=>{d!==`/`&&await this.mkdirRecursiveUnlocked(d);let e=typeof n==`string`?new TextEncoder().encode(n).byteLength:(n instanceof Uint8Array,n.byteLength);try{await this.lfs.writeFile(s,n)}catch(e){if(d!==`/`&&e instanceof Error&&e.message.includes(`ENOENT`)){await this.mkdirRecursiveUnlocked(d);try{await this.lfs.writeFile(s,n)}catch(e){throw this.convertError(e,a)}}else throw this.convertError(e,a)}try{await this.lfs.truncate?.(s,e)}catch(e){throw this.convertError(e,a)}}),this.watcher?.notify([{type:u?`modify`:`create`,path:s,entryType:`file`}])}async readDir(e){let t=l(e),n=this.findMount(t);return n?this.readDirMounted(t,n):this.readDirLocal(t)}async readDirMounted(t,n){let r=this.mountIndex.getDirectoryEntries(n.path,t);if(r!==void 0){let e=new Map;for(let t of r)e.set(t.name,{name:t.name,type:t.type});return this.addNestedMountEntries(e,t),[...e.values()]}let i=n.relParts.join(`/`)||`/`,a;try{a=await n.backend.readDir(i)}catch(n){e.rebrandFsError(n,t)}let o=new Map;for(let e of a)o.set(e.name,{name:e.name,type:e.kind===`directory`?`directory`:`file`});return this.addNestedMountEntries(o,t),[...o.values()]}async readDirLocal(e){let t=await this.resolveSymlinks(e);try{let e=await this.lfs.readdir(t),n=[];for(let r of e){let e=await this.statDirEntry(t,r);e&&n.push(e)}return n}catch(t){throw this.convertError(t,e)}}async statDirEntry(e,t){let n=e===`/`?`/${t}`:`${e}/${t}`;try{let e=await this.lfs.lstat(n);return e.isSymbolicLink()?{name:t,type:`symlink`}:{name:t,type:e.isDirectory()?`directory`:`file`}}catch{return null}}addNestedMountEntries(e,t){let n=t===`/`?`/`:`${t}/`;for(let r of this.mountPoints.keys()){if(r===t||!r.startsWith(n))continue;let i=r.slice(n.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}}async withWriteLock(e){let t,n=new Promise(e=>{t=e}),r=this._writeLock;this._writeLock=n,await r;try{return await e()}finally{t()}}async mkdirRecursiveUnlocked(e){let t=e.split(`/`).filter(Boolean),n=``;for(let e of t){n+=`/`+e;try{await this.lfs.mkdir(n)}catch(e){if(e instanceof Error&&!e.message.includes(`EEXIST`))throw this.convertError(e,n)}}}async mkdir(t,n){let r=l(t);if(r===`/`)return;let i=this.findMount(r);if(i){if(i.relParts.length===0)return;let t=i.relParts.join(`/`),n=await this.exists(r);try{await i.backend.mkdir(t)}catch(t){e.rebrandFsError(t,r)}n||this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}]);return}n?.recursive?await this.withWriteLock(()=>this.mkdirRecursiveUnlocked(r)):(await this.withWriteLock(async()=>{try{await this.lfs.mkdir(r)}catch(e){throw this.convertError(e,r)}}),this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}]))}async rm(t,n){let i=l(t),a=this.findMount(i);if(a){if(a.relParts.length===0)throw new r(`EINVAL`,`cannot remove a mount point — use unmount`,i);let t;try{t=(await this.stat(i)).type}catch{}let o=a.relParts.join(`/`);try{await a.backend.remove(o,{recursive:n?.recursive})}catch(t){e.rebrandFsError(t,i)}this.watcher?.notify([{type:`delete`,path:i,entryType:t}]),this.mountIndex.notifyDelete(i);return}try{let e=await this.lfs.lstat(i);e.isSymbolicLink()?await this.lfs.unlink(i):e.isDirectory()?n?.recursive?await this.rmRecursive(i):await this.lfs.rmdir(i):await this.lfs.unlink(i)}catch(e){throw this.convertError(e,i)}this.watcher?.notify([{type:`delete`,path:i}])}async rmRecursive(e){let t=await this.lfs.readdir(e);for(let n of t){let t=e===`/`?`/${n}`:`${e}/${n}`;(await this.lfs.stat(t)).isDirectory()?await this.rmRecursive(t):await this.lfs.unlink(t)}await this.lfs.rmdir(e)}async stat(t){let n=l(t),r=this.findMount(n);if(r){if(r.relParts.length===0)try{let e=await this.lfs.stat(n);return{type:`directory`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return{type:`directory`,size:0,mtime:Date.now(),ctime:Date.now()}}let t=r.relParts.join(`/`);try{let e=await r.backend.stat(t);return{type:e.kind===`directory`?`directory`:`file`,size:e.size,mtime:e.mtime,ctime:e.mtime}}catch(t){e.rebrandFsError(t,n)}}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.stat(i);return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,n)}}async exists(e){let t=l(e),n=this.findMount(t);if(n){if(n.relParts.length===0)return!0;try{return await this.stat(t),!0}catch{return!1}}try{return await this.stat(t),!0}catch{try{return await this.lfs.lstat(t),!0}catch{return!1}}}async rename(e,t){let n=l(e),r=l(t),i;try{i=(await this.lstat(n)).type}catch{}try{await this.lfs.rename(n,r)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`delete`,path:n,entryType:i},{type:`create`,path:r,entryType:i}]),this.mountIndex.notifyRename(n,r)}async readTextFile(e){return await this.readFile(e,{encoding:`utf-8`})}async*walk(e,t,n=0){let r=l(e);if(this.canUseWalkFastPath(r)){let e=this.mountIndex.getFiles(r);if(e){for(let t of e)yield t;return}}let i=t??new Set;if(n>64||i.size>=1e5)return;let a=await this.safeRealpath(r);if(i.has(a))return;i.add(a);let o=await this.readDir(r);for(let e of o){let t=r===`/`?`/${e.name}`:`${r}/${e.name}`;yield*this.walkEntry(e,t,i,n+1)}}canUseWalkFastPath(e){return this.mountPoints.size===0||!this.mountPoints.has(e)||!this.mountIndex.isReady(e)?!1:![...this.mountPoints.keys()].some(t=>t!==e&&t.startsWith(e+`/`))}async safeRealpath(e){try{return await this.realpath(e)}catch{return e}}async*walkEntry(e,t,n,r){if(e.type===`file`){yield t;return}if(e.type===`symlink`){yield*this.walkSymlink(t,n,r);return}yield*this.walk(t,n,r)}async*walkSymlink(e,t,n){try{let r=await this.stat(e);r.type===`file`?yield e:r.type===`directory`&&(yield*this.walk(e,t,n))}catch{}}async copyFile(e,t){if((await this.stat(e)).type===`directory`)throw new r(`EISDIR`,`is a directory`,e);let n=await this.readFile(e,{encoding:`binary`});await this.writeFile(t,n)}dirname(e){return c(l(e)).dir}basename(e){return c(l(e)).base}async symlink(e,t){let n=l(t);if(this.findMount(n))throw new r(`EINVAL`,`symlinks not supported on mounted filesystems`,n);let{dir:i}=c(n);await this.withWriteLock(async()=>{i!==`/`&&await this.mkdirRecursiveUnlocked(i);try{await this.lfs.symlink(e,n)}catch(t){if(i!==`/`&&t instanceof Error&&t.message.includes(`ENOENT`)){await this.mkdirRecursiveUnlocked(i);try{await this.lfs.symlink(e,n)}catch(e){throw this.convertError(e,n)}}else throw this.convertError(t,n)}}),this.watcher?.notify([{type:`create`,path:n,entryType:`symlink`}])}async readlink(e){let t=l(e);try{return await this.lfs.readlink(t)}catch(e){throw this.convertError(e,t)}}async lstat(e){let t=l(e);if(this.findMount(t))return this.stat(t);try{let e=await this.lfs.lstat(t);if(e.isSymbolicLink()){let n=await this.lfs.readlink(t);return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:n}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,t)}}async realpath(e){let t=l(e);if(this.findMount(t))return t;let n=t.split(`/`).filter(Boolean),r=`/`,i=0;for(let e=0;e<n.length;e++){let a=await this.resolveRealpathComponent(r,n[e],e===n.length-1,t,i);r=a.resolved,i=a.hops}return r}async resolveRealpathComponent(e,t,n,i,a){let o=e===`/`?`/${t}`:`${e}/${t}`;for(;;){let e=await this.lstatOrThrow(o,n,i);if(e===null||!e.isSymbolicLink())return{resolved:o,hops:a};if(++a>10)throw new r(`ELOOP`,`too many symbolic links encountered`,i);o=await this.readAndResolveLink(o,i)}}async lstatOrThrow(e,t,n){try{return await this.lfs.lstat(e)}catch(e){let r=this.convertError(e,n);if(r.code===`ENOENT`&&t)return null;throw r}}async readAndResolveLink(e,t){let n;try{n=await this.lfs.readlink(e)}catch(e){throw this.convertError(e,t)}return n.startsWith(`/`)?l(n):l(d(c(e).dir,n))}async resolveSymlinks(e){return this.findMount(e)?e:this.realpath(e)}convertError(e,t){if(e instanceof r)return e;let n=e?.code;if(typeof n==`string`){let i=n;if([`ENOENT`,`EEXIST`,`ENOTDIR`,`EISDIR`,`ENOTEMPTY`,`EINVAL`,`EACCES`,`ELOOP`,`EBUSY`,`EFBIG`,`EBADF`,`EIO`].includes(i))return new r(i,(e instanceof Error?e.message:String(e))||i,t)}let i=e instanceof Error?e.message:String(e);return i.includes(`ENOENT`)?new r(`ENOENT`,`no such file or directory`,t):i.includes(`EEXIST`)?new r(`EEXIST`,`file already exists`,t):i.includes(`ENOTDIR`)?new r(`ENOTDIR`,`not a directory`,t):i.includes(`EISDIR`)?new r(`EISDIR`,`is a directory`,t):i.includes(`ENOTEMPTY`)?new r(`ENOTEMPTY`,`directory not empty`,t):i.includes(`ELOOP`)?new r(`ELOOP`,`too many levels of symbolic links`,t):new r(`EINVAL`,i,t)}},k=e({FsError:()=>r,FsWatcher:()=>h,MountIndex:()=>w,RestrictedFS:()=>E,VirtualFS:()=>O,joinPath:()=>d,normalizePath:()=>l,pathSegments:()=>u,resolveVfsBackendFromEnv:()=>D,splitPath:()=>c});export{h as i,O as n,E as r,k as t};
@@ -1,24 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-BaZeZrKO.js","assets/preload-helper-CZgWQFsJ.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-D_z2v-ZE.js","assets/rolldown-runtime-aKtaBQYM.js","assets/src-CAHYy5iz.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/quick-llm-CvbElujR.js","assets/compat-FrhC6T45.js","assets/models-ByRUWfA-.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/account-store-DnfeinGB.js","assets/context-compaction-LYFtS2_f.js","assets/secret-topology-C29BvT4E.js","assets/secrets-bridge-client-Br74C9hX.js","assets/port-bridge-client-BnzDL5Fz.js","assets/tool-ui-DfXu6quJ.js","assets/providers-EOfV9vdZ.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CZFsedRI.js","assets/transform-messages-DwI5R8if.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js","assets/panel-responder-BKgfV-nl.js","assets/extension-bridge-transport-B9IadbHV.js","assets/cdp-bridge-CUqQUcaF.js","assets/lick-ws-bridge-BWokgV-S.js","assets/tray-leader-DySjWLR-.js","assets/cdp-FrTDh4u0.js","assets/navigation-watcher-C2s0i0h4.js","assets/handoff-link-w8LYa3Ua.js","assets/remote-cdp-transport-m_T16Bkr.js","assets/main-cherry-C4cWQqKP.js","assets/synthetic-cdp-transport-DLIt5SkY.js","assets/oauth-service-R1ITtnv3.js","assets/wc-permissions-registry-Blyunq37.js","assets/wc-shell-BRXA9i_k.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-shell-WkeczD9x.css","assets/wc-follower-8V6fEQ4R.js","assets/theme-engine-BEk-Upnk.js","assets/wc-attach-COndISMH.js","assets/wc-live-CWjluHxO.js","assets/hid-device-registry-6w-g8ZpF.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-D-YdmmuG.js","assets/usb-device-registry-k6vTKonT.js","assets/shared-Cq5Q0noX.js","assets/mime-types-ugOWOUZ9.js","assets/sprinkle-renderer-Cx1zoxx1.js","assets/theme-BWT6ZRD3.js","assets/sprinkle-bridge-C0ycYX8f.js","assets/page-follower-tray-fj4kD6LU.js","assets/wc-sprinkles-C14qdDwd.js","assets/oauth-bootstrap-2pqa5H30.js","assets/legacy-styles-CuB1P3LZ.js","assets/connect-surface-DxFQNDWS.js","assets/wc-extension-DqsWFOzt.js","assets/wc-detached-B3WCbbZT.js","assets/messages-BD4p8GuF.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import"./modulepreload-polyfill-Dezn_h7o.js";import{t}from"./preload-helper-CZgWQFsJ.js";import{A as n,B as r,C as i,D as a,E as o,F as s,H as c,I as l,L as u,M as d,N as f,O as p,P as m,R as h,S as g,T as _,U as v,V as y,W as b,_ as x,a as S,b as C,c as ee,d as w,f as te,g as ne,h as re,i as T,j as ie,k as ae,l as oe,m as se,n as ce,o as le,p as ue,s as de,t as fe,u as pe,v as me,w as he,x as ge,y as _e,z as ve}from"./account-store-DnfeinGB.js";import{t as E}from"./logger-DDBAeTLF.js";import{c as ye,l as be,o as xe,u as Se}from"./src-CAHYy5iz.js";import{a as Ce,c as we,o as Te,s as Ee,t as De}from"./proxied-fetch-D_z2v-ZE.js";import{n as D,t as O}from"./runtime-env-DH4NDw4t.js";import{a as Oe}from"./providers-EOfV9vdZ.js";import"./messages-BD4p8GuF.js";import{n as ke}from"./clipboard-DuHpK59o.js";function Ae(e){try{let t=new URL(e);return`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function je(e){try{let t=new URL(e);return`${t.protocol}//${t.host}/licks-ws`}catch{return null}}function k(e){let t;try{t=new URLSearchParams(e)}catch{return null}let n=t.get(Se),r=t.get(be);if(!n||!r||!/^wss?:\/\//.test(n))return null;let i=t.get(xe),a=i===`leader`||i===`follower`?i:null;return{url:n,subprotocol:`${ye}${r}`,token:r,apiBaseUrl:Ae(n),lickWsUrl:je(n),role:a}}var Me=`slicc:bridge-config`,Ne=`slicc:extension-delegate-config`;function Pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.type===`slicc:ext-fetch`&&typeof t.extensionId==`string`&&!!t.request&&typeof t.request==`object`}var Fe=E(`boot/ext-fetch-delegate`);function Ie(){let e=globalThis.chrome?.runtime;return e&&typeof e.connect==`function`?e:null}function Le(e,t,n){let r=Ie();if(!r){try{t.postMessage({type:`response-error`,error:`extension-delegate: chrome.runtime.connect unavailable`})}catch{}t.close();return}let i=e.extensionId||n,a;try{a=r.connect(i,{name:`fetch-proxy.fetch`})}catch(e){try{t.postMessage({type:`response-error`,error:`extension-delegate: connect failed — ${e instanceof Error?e.message:String(e)}`})}catch{}t.close();return}let o=!1,s=()=>{o=!0;try{a.disconnect()}catch{}try{t.close()}catch{}};a.onMessage.addListener(e=>{if(o)return;let n=e;try{t.postMessage(n)}catch{}(n.type===`response-end`||n.type===`response-error`)&&s()}),a.onDisconnect.addListener(()=>{if(!o){try{t.postMessage({type:`response-error`,error:`extension-delegate: fetch-proxy port disconnected`})}catch{}s()}}),a.postMessage({type:`request`,...e.request})}function Re(e){typeof navigator>`u`||!navigator.serviceWorker||navigator.serviceWorker.addEventListener(`message`,t=>{if(!Pe(t.data))return;let n=t.ports?.[0];if(!n){Fe.warn(`delegated fetch envelope arrived without a response port`);return}Le(t.data,n,e)})}function ze(){if(D())return;let e=new Blob([`
3
- let lastPong = Date.now();
4
- let frozen = false;
5
- setInterval(() => {
6
- postMessage({ type: 'ping' });
7
- const elapsed = Date.now() - lastPong;
8
- if (elapsed > 5000 && !frozen) {
9
- frozen = true;
10
- postMessage({ type: 'freeze-detected', elapsed });
11
- }
12
- }, 2000);
13
- self.onmessage = (e) => {
14
- if (e.data.type === 'pong') {
15
- lastPong = Date.now();
16
- if (frozen) {
17
- frozen = false;
18
- postMessage({ type: 'freeze-recovered' });
19
- }
20
- }
21
- };
22
- `],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var Be=`slicc-nuke-control`;function Ve(e=()=>location.reload()){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Be),n=t=>{let n=t.data;if(n?.type===`nuke-reload`){if(Array.isArray(n.keysToRemove)){for(let e of n.keysToRemove)if(typeof e==`string`)try{localStorage.removeItem(e)}catch{}}e()}};return t.addEventListener(`message`,n),()=>{t.removeEventListener(`message`,n),t.close()}}var A=null;function He(){return A||(A=Ve(),A)}var j=`tray`,Ue=`trayWorkerUrl`,We=`lead`;function M(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function Ge(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=M(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Ke(e,t){let n=new URL(e);return n.searchParams.delete(Ue),n.searchParams.delete(We),n.searchParams.set(j,t),n.toString()}var N=`slicc.trayWorkerBaseUrl`,P=`slicc.trayJoinUrl`,qe=`https://www.sliccy.ai`;function Je(e,t){let n=M(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function F(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return Ge(t.toString());let i=M(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function I(e){let t=F(e);return t?.joinUrl?t:null}function L(e,t){let n=I(t);return n?(e.setItem(P,n.joinUrl),e.setItem(N,n.workerBaseUrl),n):null}function Ye(e){return!!I(e?.getItem(`slicc.trayJoinUrl`)??null)}function Xe(e,t){let n=!1;try{let t=new URL(e),r=t.searchParams.get(j);if(r!==null){n=!0;let e=F(r);if(e?.joinUrl)return e.joinUrl}t.searchParams.get(`slicc`)===`leader`&&(n=!0)}catch{}let r=F(e);return r?.joinUrl?r.joinUrl:(r?.trayId&&(n=!0),n?null:I(t?.getItem(`slicc.trayJoinUrl`)??null)?.joinUrl??null)}function Ze(e){try{let t=new URL(e);t.searchParams.delete(j);let n=t.pathname.split(`/`).filter(Boolean);return n.length>=2&&n.at(-2)===`join`&&(n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`),t.toString()}catch{return e}}function Qe(e,t){let n=M(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function $e(e,t,n){return Ke(e,Qe(t,n))}async function R(e){let t=nt(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(P,t.joinUrl),e.storage.setItem(N,t.workerBaseUrl)),t;let n=I(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(N,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await rt(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(P,r.joinConfig.joinUrl),e.storage.setItem(N,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=M(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=M(e.envBaseUrl??null),s=M(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(N,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function et(e){return(await R(e))?.workerBaseUrl??null}async function tt(e=fetch){try{let t=await e(Ce(`/api/runtime-config`),{cache:`no-store`,headers:De()});return t.ok?await t.json():null}catch{return null}}function nt(e){try{let t=new URL(e),n=F(t.searchParams.get(j));if(n)return n;let r=F(t.searchParams.get(We));if(r)return r;let i=M(t.searchParams.get(Ue));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:Ge(e)||null}catch{return null}}async function rt(e){let t=await e();if(!t)return null;let n=I(t.trayJoinUrl??null);return{workerBaseUrl:M(t.trayWorkerBaseUrl??null),joinConfig:n}}var it=`slicc-cdp-superseded-banner`;function at(e){if(e.getElementById(it))return;let t=e.createElement(`div`);t.id=it,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function ot(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:Xe(e,n===void 0?typeof window<`u`?window.localStorage:null:n)?`follower`:ct(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function st(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function ct(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}var lt=e({setupSudoExtension:()=>dt,setupSudoStandalone:()=>ut});async function ut(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-BaZeZrKO.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]));n()}async function dt(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-BaZeZrKO.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]));n()}function ft(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function pt(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var mt=[100,200,400,800,1600];async function ht(e,t,n,r=mt,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function gt(e,n,r){let{ExtensionBridgeTransport:i}=await t(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-B9IadbHV.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([26,2,27])),{mapNavigatePayloadToLickEvent:a}=await t(async()=>{let{mapNavigatePayloadToLickEvent:e}=await import(`./lick-ws-bridge-BWokgV-S.js`);return{mapNavigatePayloadToLickEvent:e}},__vite__mapDeps([28,2,29,4,3,1,5,6,7])),o=null,s=[],c=!1,l=e=>{o=e;for(let t of s)e.sendForwardedLick(t);s.length=0},u=new e(new i({extensionId:n,onLick:e=>{let t=a(e);if(t){if(o){o.sendForwardedLick(t);return}s.length>=50&&(s.shift(),c||(c=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),s.push(t)}},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await ht(u,void 0,r),{browser:u,attachLickForwardingClient:l}}async function _t(e){let{runtimeMode:n,envBaseUrl:r,window:i,log:a}=e,o=n===`electron-overlay`;a.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:n});let{BrowserAPI:s}=await t(async()=>{let{BrowserAPI:e}=await import(`./cdp-FrTDh4u0.js`);return{BrowserAPI:e}},__vite__mapDeps([30,2,31,32,33,4,5]));await ut({log:a});let c,l,u,d=null,f=null,p=null,m=null,h,g=n===`cherry`?null:pt(i.location.search),_=!!g&&O(),v=n===`cherry`||_?null:k(i.location.search);v?.apiBaseUrl&&(d=v.apiBaseUrl,we(v.apiBaseUrl),f=v.token,Te(v.token)),v?.lickWsUrl&&(p=v.lickWsUrl);let y=await tt(),b=st(n,y!==null)?qe:null;if(await R({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:b,runtimeConfigFetcher:async()=>y}),n===`cherry`){let{setupCherryFollower:e}=await t(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-C4cWQqKP.js`);return{setupCherryFollower:e}},__vite__mapDeps([34,2,30,31,32,33,4,5,35])),n=await e();c=n.browser,l=n.joinUrl,u=n.transport}else if(g&&O()){a.info(`Routing CDP through the extension bridge (leader tab)`);let e=await gt(s,g.extensionId,a);c=e.browser,h=e.attachLickForwardingClient,m=g.extensionId,Ee(g.extensionId)}else{c=new s,v&&a.info(`Routing CDP through local standalone bridge`,{url:v.url,role:v.role??`(unset)`});let e=v?{url:v.url,protocols:v.subprotocol}:void 0;v?.role===`follower`?(a.info(`Skipping CDP connect for follower overlay tab`),c.primeConnectOptions(e)):(await ht(c,e,a),c.setCdpSupersededHandler(()=>at(i.document)))}let x=c.getTransport();return globalThis.__slicc_browser=c,{browser:c,realCdpTransport:x,cherryJoinUrl:l,cherryTransport:u,instanceId:ft(),isElectronOverlay:o,localApiBaseUrl:d,bridgeToken:f,localLickWsUrl:p,extensionDelegateId:m,attachLickForwardingClient:h}}var z=E(`boot/sw-registration`);async function vt(e=null,t=null){let n=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&n&&await xt())return`reload-pending`;if(!(`serviceWorker`in navigator)||n)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),z.info(`Preview SW registered`),!D())try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),z.info(`LLM-proxy SW registered`)}catch(e){z.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),z.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`),e&&(yt(e),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{yt(e)})),t&&(bt(t),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{bt(t)}))}catch(e){z.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}function yt(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:Me,apiBaseUrl:e.apiBaseUrl,token:e.token};try{t.postMessage(n)}catch(e){z.warn(`LLM-proxy SW bridge-config postMessage failed`,e)}}function bt(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:Ne,extensionId:e.extensionId};try{t.postMessage(n)}catch(e){z.warn(`LLM-proxy SW extension-delegate postMessage failed`,e)}}async function xt(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),z.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){z.error(`connect-mode SW cleanup failed`,e)}return!1}var B={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function St(){return{...B}}var Ct=`slicc.followerTrayStatus`,V=new Set;function wt(e){return V.add(e),()=>{V.delete(e)}}function Tt(){if(V.size!==0)for(let e of[...V])try{e({...B})}catch{}}function Et(e){B={...e},Tt()}function Dt(e){B={...B,lastPingTime:e},Tt()}function Ot(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function kt(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`the provided model identifier is invalid`)||t.includes(`model not allowed`)}function At(e){return e?e.toLowerCase().includes(`please log in again`):!1}function jt(e){return Ot(e)||kt(e)||At(e)}var H=null,Mt=!1;function Nt(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function Pt(){return Nt()?`standalone-worker`:D()?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Ft(){if(!Mt&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=Pt();e!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${e}`:globalThis.RUM_GENERATION=`slicc-${e}`,e===`standalone-worker`?(H=(await t(()=>import(`./rum-worker-CwmNSpjO.js`),[])).default,self.addEventListener(`error`,e=>{let t=e;U(`js`,t.error?.message??t.message??``)}),self.addEventListener(`unhandledrejection`,e=>{let t=e.reason;U(`js`,t instanceof Error?t.message:String(t))})):e===`extension`?(H=(await t(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{let t=e;U(`js`,t.error?.message??t.message??``)}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;U(`js`,t instanceof Error?t.message:String(t))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),Gt(),H=(await t(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),Mt=!0,H&&H(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function It(e,t){H?.(`formsubmit`,{source:e,target:t})}function Lt(e){H?.(`viewblock`,{source:e})}function Rt(e){H?.(`viewmedia`,{source:e})}function U(e,t){let n=t;if(typeof n==`string`){if(jt(n))return;let e=Vt(n);if(e===null)return;n=e}H?.(`error`,{source:e,target:n})}function zt(e){H?.(`signup`,{source:e})}function Bt(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function Vt(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
23
- `).filter(e=>!Bt(e)).join(`
24
- `).trim();return e?e.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`):null}return t.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var Ht=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`);function Ut(e){if(typeof e!=`string`)return{kind:`absent`};let t=Vt(e);return t===null?{kind:`noise`}:{kind:`kept`,value:t,mutated:t!==e}}function Wt(e){let t=Ut(e.source),n=Ut(e.target),r=t.kind!==`kept`,i=n.kind!==`kept`;if((t.kind!==`absent`||n.kind!==`absent`)&&r&&i)return!0;let a=!1;return t.kind===`kept`?t.mutated&&(e.source=t.value,a=!0):t.kind===`noise`&&(e.source=``,a=!0),n.kind===`kept`?n.mutated&&(e.target=n.value,a=!0):n.kind===`noise`&&(e.target=``,a=!0),a?JSON.stringify(e):null}function Gt(){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let e=navigator.sendBeacon;if(e[Ht])return;let t=e.bind(navigator),n=((e,n)=>{try{let r=typeof n==`string`?n:n instanceof ArrayBuffer?new TextDecoder().decode(n):null;if(r&&r.length>0&&r.charCodeAt(0)===123){let n=JSON.parse(r);if(n?.checkpoint===`error`){let r=Wt(n);if(r===!0)return!0;if(r!==null)return t(e,r)}}}catch{}return t(e,n)});n[Ht]=!0,navigator.sendBeacon=n}function Kt(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??qt(t.state)??`Mirroring another browser.`}}function qt(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function Jt(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var Yt=e({ACCOUNTS_KEY:()=>fe,__test__:()=>ce,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Zt,addAccount:()=>T,applyProviderDefaults:()=>S,clearAllSettings:()=>le,clearApiKey:()=>de,clearBaseUrl:()=>ee,clearSelectedProvider:()=>oe,describeInvalidJoinUrl:()=>Jt,downloadProviders:()=>$t,exportProviders:()=>pe,getAccounts:()=>w,getAllAvailableModels:()=>te,getAllExtraOAuthDomains:()=>ue,getApiKey:()=>se,getApiKeyForProvider:()=>re,getApiVersionForProvider:()=>ne,getAvailableProviders:()=>x,getBaseUrl:()=>me,getBaseUrlForProvider:()=>_e,getDeploymentForProvider:()=>C,getExtraOAuthDomains:()=>ge,getOAuthAccountInfo:()=>g,getProviderConfig:()=>i,getProviderModels:()=>he,getRawApiKeyForProvider:()=>_,getSelectedModelId:()=>o,getSelectedProvider:()=>a,isModelHiddenFromPicker:()=>p,logoutOAuthAccount:()=>ae,maskOAuthTokenWithRetry:()=>n,migrateLegacyAuthOnlySelection:()=>ie,persistOAuthMaskViaServiceWorker:()=>d,providerOffersLlmModels:()=>f,reloginOAuthAccount:()=>nn,removeAccount:()=>m,resolveCurrentModel:()=>s,resolveModelById:()=>l,resolveModelByShorthand:()=>u,saveOAuthAccount:()=>h,setApiKey:()=>ve,setBaseUrl:()=>r,setExtraOAuthDomains:()=>y,setExtraOAuthDomainsAsync:()=>c,setSelectedModelId:()=>v,setSelectedProvider:()=>b,showProviderSettings:()=>Cn}),Xt=E(`provider-settings`);function Zt(e,t){return Qt(e,t)}function Qt(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){Xt.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}function $t(){let e=JSON.stringify(pe(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function en(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function W(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var G={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]},K=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;function q(e,t){e.addEventListener(`mouseenter`,()=>{e.style.color=t,e.style.borderColor=t}),e.addEventListener(`mouseleave`,()=>{e.style.color=`var(--s2-content-secondary)`,e.style.borderColor=`var(--s2-border-subtle)`})}function J(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function Y(e){e.options?.startInAddAccount?J(e):X(e)}function tn(e){let t=document.createElement(`div`);return t.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,e.loggedOut?(t.textContent=e.userName?`Logged out — was ${e.userName}`:`Logged out`,t.style.color=`var(--s2-content-disabled)`):e.userName?t.textContent=e.userName:e.accessToken?t.textContent=`Logged in`:t.textContent=en(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function nn(e,n){let{createOAuthLauncher:r,createInterceptingOAuthLauncherForCurrentRuntime:i}=await t(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-R1ITtnv3.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([36,1,3,4,5,6,7,20,37])),a={forceReauth:!0};if(e.onOAuthLoginIntercepted){let t=await i();t&&await e.onOAuthLoginIntercepted(t,n,a)}else if(e.onOAuthLogin){let t=r();await e.onOAuthLogin(t,n,a)}}function rn(e,t){let n=document.createElement(`button`);return n.style.cssText=K,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(W(G.pen)),q(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Z(e,t)),n}function an(e,t,n){let r=document.createElement(`button`);return r.style.cssText=K,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(W(G.login)),q(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{nn(n,()=>X(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(W(G.logout)),q(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await ae(t.providerId),X(e)})()})),r}function on(e,t){let n=document.createElement(`button`);return n.style.cssText=K,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(W(G.trash)),q(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await m(t.providerId),X(e)})()}),n}function sn(e,t){let n=i(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let a=document.createElement(`div`);a.style.cssText=`flex: 1; min-width: 0;`;let o=document.createElement(`div`);o.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,o.textContent=n.name,a.appendChild(o),a.appendChild(tn(t)),r.appendChild(a);let s=document.createElement(`div`);return s.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,s.appendChild(rn(e,t)),n.isOAuth&&s.appendChild(an(e,t,n)),s.appendChild(on(e,t)),r.appendChild(s),r}function cn(e){let t=document.createDocumentFragment(),n=document.createElement(`hr`);n.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-weight: 600; margin-bottom: 8px;`,r.textContent=`Tray`,t.appendChild(r);let i=St(),a=i.state!==`inactive`,o=Ye(window.localStorage);if(a||o){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${a?i.state:`configured`}`,i.error&&(e.textContent+=` — ${i.error}`,e.style.color=`var(--slicc-cone)`),t.appendChild(e)}let s=document.createElement(`button`);return s.className=`dialog__btn dialog__btn--secondary`,s.textContent=a||o?`Reconnect to other browser`:`Connect to another browser`,s.addEventListener(`click`,()=>Q(e)),t.appendChild(s),t}function X(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Accounts`,t.appendChild(n);let r=w();if(r.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,t.appendChild(e)}else{let n=document.createElement(`div`);n.style.cssText=`margin-bottom: 16px;`;for(let t of r)n.appendChild(sn(e,t));t.appendChild(n)}let i=document.createElement(`div`);i.style.cssText=`display: flex; gap: 8px;`;let a=document.createElement(`button`);a.className=r.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,a.style.flex=`1`,a.textContent=`Add Account`,a.addEventListener(`click`,()=>Z(e)),i.appendChild(a);let o=document.createElement(`button`);o.className=`dialog__btn dialog__btn--secondary`,o.style.flex=`1`,o.textContent=`Export`,o.addEventListener(`click`,()=>$t()),i.appendChild(o),t.appendChild(i),t.appendChild(cn(e));let s=document.createElement(`hr`);s.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Get Started`,c.addEventListener(`click`,()=>J(e)),t.appendChild(c)}function ln(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=i(t.providerId),r=document.createElement(`option`);return r.value=t.providerId,r.textContent=e.name,n.appendChild(r),n.disabled=!0,n.style.opacity=`0.7`,n}let r=document.createElement(`option`);r.value=``,r.textContent=`Select a provider…`,r.disabled=!0,r.selected=!0,r.hidden=!0,n.appendChild(r);let a=new Set(w().map(e=>e.providerId)),o=[...x()].sort((e,t)=>i(e).name.localeCompare(i(t).name));for(let t of o){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!f(t))continue;let r=document.createElement(`option`);r.value=t,r.textContent=i(t).name,n.appendChild(r)}return n}function un(e,t){let n=ln(e,t),r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`;let i=document.createElement(`div`);i.style.cssText=`margin-bottom: 16px; display: none;`;let a=document.createElement(`button`);a.className=`dialog__btn`,a.textContent=`Login`,a.style.cssText=`width: 100%; margin-bottom: 8px;`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,i.appendChild(o);let s=document.createElement(`div`),c=document.createElement(`div`);c.className=`dialog__desc`,s.appendChild(c);let l=document.createElement(`input`);l.className=`dialog__input`,l.type=`password`,l.autocomplete=`off`,l.spellcheck=!1,t&&(l.value=t.apiKey),s.appendChild(l);let u=document.createElement(`div`),d=document.createElement(`div`);d.className=`dialog__desc`,d.textContent=`Base URL:`,u.appendChild(d);let f=document.createElement(`input`);f.className=`dialog__input`,f.type=`text`,f.autocomplete=`off`,f.spellcheck=!1,t?.baseUrl&&(f.value=t.baseUrl),u.appendChild(f);let p=document.createElement(`div`);p.className=`dialog__desc`,p.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,u.appendChild(p);let m=document.createElement(`div`);m.style.display=`none`;let h=document.createElement(`div`);h.className=`dialog__desc`,h.textContent=`Deployment:`,m.appendChild(h);let g=document.createElement(`input`);g.className=`dialog__input`,g.type=`text`,g.autocomplete=`off`,g.spellcheck=!1,t?.deployment&&(g.value=t.deployment),m.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,m.appendChild(_);let v=document.createElement(`div`);v.style.display=`none`;let y=document.createElement(`div`);y.className=`dialog__desc`,y.textContent=`API Version:`,v.appendChild(y);let b=document.createElement(`input`);b.className=`dialog__input`,b.type=`text`,b.autocomplete=`off`,b.spellcheck=!1,t?.apiVersion&&(b.value=t.apiVersion),v.appendChild(b);let x=document.createElement(`div`);x.className=`dialog__desc`,x.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,v.appendChild(x);let S=document.createElement(`div`);S.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`;let C=document.createElement(`button`);return C.className=`dialog__btn`,C.textContent=t?`Save`:`Add`,{providerSelect:n,providerDesc:r,oauth:{section:i,loginBtn:a,status:o},apiKeySection:s,apiKeyLabel:c,apiKeyInput:l,baseUrlSection:u,baseUrlInput:f,baseUrlDesc:p,deploymentSection:m,deploymentInput:g,deploymentDesc:_,apiVersionSection:v,apiVersionInput:b,apiVersionDesc:x,errorEl:S,saveBtn:C}}function dn(e){let t=document.createElement(`div`);t.setAttribute(`data-slicc-device-code-prompt`,``),t.style.cssText=`display:flex;flex-direction:column;gap:8px`;let n=document.createElement(`div`);n.className=`dialog__desc`,n.textContent=`Verification code`,n.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let r=document.createElement(`div`);r.textContent=e,r.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,i.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let a=document.createElement(`div`);a.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let o=document.createElement(`button`);o.type=`button`,o.className=`dialog__btn`,o.textContent=`Cancel`;let s=document.createElement(`button`);return s.type=`button`,s.className=`dialog__btn dialog__btn--primary`,s.textContent=`Copy & Continue`,a.appendChild(o),a.appendChild(s),t.appendChild(n),t.appendChild(r),t.appendChild(i),t.appendChild(a),{prompt:t,cancelBtn:o,continueBtn:s}}function fn(e){return t=>new Promise(n=>{let r=e.loginBtn.style.display,i=e.status.style.display;e.loginBtn.style.display=`none`,e.status.style.display=`none`;let{prompt:a,cancelBtn:o,continueBtn:s}=dn(t.userCode),c=()=>{try{a.remove()}catch{}e.loginBtn.style.display=r,e.status.style.display=i};o.addEventListener(`click`,()=>{c(),n(`cancel`)}),s.addEventListener(`click`,()=>{(async()=>{try{await ke(t.userCode)}catch{}c(),e.status.style.display=i,e.status.textContent=`Waiting for you to authorize in the new tab…`,n(`continue`)})()}),e.section.appendChild(a)})}async function pn(e,n){let r=n.providerSelect.value;if(!r)return;let a=i(r);if(!a.onOAuthLogin&&!a.onOAuthLoginIntercepted)return;let{status:o}=n.oauth,s=w().some(e=>e.providerId===r),c=_e(r);if(a.requiresBaseUrl&&!n.baseUrlInput.value.trim()&&!c){o.textContent=`Base URL is required.`,o.style.color=`var(--slicc-cone)`,n.baseUrlInput.focus();return}a.requiresBaseUrl&&n.baseUrlInput.value.trim()&&T(r,``,n.baseUrlInput.value.trim()),o.textContent=`Opening login window...`;try{if(a.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:r}=await t(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-R1ITtnv3.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([36,1,3,4,5,6,7,20,37])),i=await r();if(!i)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await a.onOAuthLoginIntercepted(i,()=>Y(e),{presentDeviceCode:fn(n.oauth)})}else if(a.onOAuthLogin){let{createOAuthLauncher:n}=await t(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-R1ITtnv3.js`);return{createOAuthLauncher:e}},__vite__mapDeps([36,1,3,4,5,6,7,20,37])),r=n();await a.onOAuthLogin(r,()=>Y(e))}}catch(e){if(!s)try{await m(r)}catch{}Xt.error(`OAuth login failed`,{providerId:r,error:e instanceof Error?e.message:String(e)}),o.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function mn(e,t){if(t.isOAuth){e.oauth.section.style.display=``,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``),e.oauth.loginBtn.textContent=`Login with ${t.name}`,e.saveBtn.style.display=`none`;return}e.oauth.section.style.display=`none`;let n=t.requiresApiKey?`API Key`:`API Key (optional)`;e.apiKeyLabel.textContent=`${n}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,e.apiKeyInput.placeholder=t.apiKeyPlaceholder||`API key`,e.apiKeySection.style.display=t.requiresApiKey||t.optionalApiKey?``:`none`,e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,e.saveBtn.style.display=``}function hn(e,t){t.requiresDeployment?(e.deploymentSection.style.display=``,e.deploymentInput.placeholder=t.deploymentPlaceholder||`deployment-name`,e.deploymentDesc.textContent=t.deploymentDescription||``):e.deploymentSection.style.display=`none`}function gn(e,t){t.requiresApiVersion?(e.apiVersionSection.style.display=``,!e.apiVersionInput.value&&t.apiVersionDefault&&(e.apiVersionInput.value=t.apiVersionDefault),e.apiVersionInput.placeholder=t.apiVersionDefault||`api-version`,e.apiVersionDesc.textContent=t.apiVersionDescription||``):e.apiVersionSection.style.display=`none`}function _n(e){let t=e.providerSelect.value;if(!t){e.providerDesc.textContent=``,e.oauth.section.style.display=`none`,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=`none`,e.deploymentSection.style.display=`none`,e.apiVersionSection.style.display=`none`,e.saveBtn.style.display=`none`;return}let n=i(t);e.providerDesc.textContent=n.description,mn(e,n),hn(e,n),gn(e,n)}function vn(e,t){let n=t.providerSelect.value;if(!n)return;let r=i(n),a=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(r.requiresApiKey&&t.apiKeyInput.value.trim().length<5){a(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()){a(`Base URL is required for this provider.`,t.baseUrlInput);return}if(r.requiresDeployment&&!t.deploymentInput.value.trim()){a(`Deployment name is required for this provider.`,t.deploymentInput);return}T(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),Y(e)}function yn(e,t){let{dialog:n,options:r}=e,i=w().length>0;if(r?.startInAddAccount){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Cancel`,t.addEventListener(`click`,()=>J(e)),n.appendChild(t)}else if(!t&&!i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Connect to another browser`,t.addEventListener(`click`,()=>Q(e)),n.appendChild(t)}else if(i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Back`,t.addEventListener(`click`,()=>X(e)),n.appendChild(t)}}function Z(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,n.appendChild(r);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Provider:`,n.appendChild(a);let o=un(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{pn(e,o)}),t?.userName&&(o.oauth.status.textContent=`Logged in as ${t.userName}`,o.oauth.loginBtn.textContent=`Re-login`),n.appendChild(o.oauth.section),n.appendChild(o.apiKeySection),n.appendChild(o.baseUrlSection),n.appendChild(o.deploymentSection),n.appendChild(o.apiVersionSection),n.appendChild(o.errorEl),o.providerSelect.addEventListener(`change`,()=>{o.errorEl.style.display=`none`,_n(o)}),_n(o),o.saveBtn.addEventListener(`click`,()=>vn(e,o));let s=t=>{t.key===`Enter`&&vn(e,o)};o.apiKeyInput.addEventListener(`keydown`,s),o.baseUrlInput.addEventListener(`keydown`,s),o.deploymentInput.addEventListener(`keydown`,s),o.apiVersionInput.addEventListener(`keydown`,s),n.appendChild(o.saveBtn),yn(e,!!t),requestAnimationFrame(()=>{let e=o.providerSelect.value;if(!e)return;let t=i(e);t.requiresApiKey?o.apiKeyInput.focus():t.requiresBaseUrl&&o.baseUrlInput.focus()})}function bn(e,t,n){Qt(t,n),n.textContent=`Connecting…`,n.style.display=``,n.style.color=`var(--s2-content-secondary)`;let r=setTimeout(()=>{e.overlay.remove(),e.resolve(!1)},800);n.dataset.dismissTimer=String(r)}function xn(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect this browser?`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,a.textContent=t.length>80?t.slice(0,40)+`…`+t.slice(-37):t,n.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,n.appendChild(o);let s=document.createElement(`button`);s.className=`dialog__btn`,s.textContent=`Connect`,s.addEventListener(`click`,()=>{let n=L(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}bn(e,n.joinUrl,o)}),n.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn dialog__btn--secondary`,c.style.marginTop=`8px`,c.textContent=`Set up an account instead`,c.addEventListener(`click`,()=>Z(e)),n.appendChild(c)}function Sn(){let e=document.createElement(`details`);e.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let t=document.createElement(`summary`);t.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,t.textContent=`How do I get the sync URL?`,e.appendChild(t);let n=document.createElement(`div`);n.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let r=document.createElement(`ol`);r.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,r.appendChild(t)}return n.appendChild(r),e.appendChild(n),e}function Q(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect to another browser`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.marginBottom=`12px`,r.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,t.appendChild(r),t.appendChild(Sn());let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Sync URL:`,t.appendChild(i);let a=document.createElement(`input`);a.className=`dialog__input`,a.type=`text`,a.autocomplete=`off`,a.spellcheck=!1,a.placeholder=`https://www.sliccy.ai/join/<token>`,t.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,t.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Connect`,c.addEventListener(`click`,()=>{let t=a.value.trim();if(!t){o.textContent=`Paste a sync URL to continue.`,o.style.display=``,a.focus();return}let n=L(window.localStorage,t);if(!n){o.textContent=Jt(t),o.style.display=``,a.focus();return}bn(e,n.joinUrl,s)}),t.appendChild(c),t.appendChild(s);let l=document.createElement(`button`);l.className=`dialog__btn dialog__btn--secondary`,l.style.marginTop=`8px`,l.textContent=`Back`,l.addEventListener(`click`,()=>Z(e)),t.appendChild(l),a.addEventListener(`input`,()=>{o.style.display=`none`}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()}),requestAnimationFrame(()=>a.focus())}function Cn(e){return zt(`button`),new Promise(t=>{let n=document.createElement(`div`);n.className=`dialog-overlay`;let r=document.createElement(`div`);r.className=`dialog`,r.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let i={overlay:n,dialog:r,options:e,accountsBefore:localStorage.getItem(`slicc_accounts`)??``,resolve:t};e?.startInAddAccount?Z(i):w().length>0?X(i):e?.autoJoinUrl?xn(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):Z(i),n.appendChild(r),document.body.appendChild(n)})}var $=E(`main`);function wn(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}async function Tn(){let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let n=D(),r=ot(window.location.href,n);if(wn(window.location.href)){let{mountWcUiPreview:n}=await t(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-BRXA9i_k.js`).then(e=>e.a);return{mountWcUiPreview:e}},__vite__mapDeps([38,4,1,24,39,40,41]));n(e);return}ze(),He(),r!==`connect`&&Ft().catch(()=>{});let i=k(window.location.search),a=r===`cherry`?null:pt(window.location.search),o=!!a&&O();if(await vt(i?{apiBaseUrl:i.apiBaseUrl,token:i.token}:null,o&&a?{extensionId:a.extensionId}:null)===`reload-pending`)return;if(!n&&(r===`follower`||r===`cherry`)){let{mountWcUiFollower:n}=await t(async()=>{let{mountWcUiFollower:e}=await import(`./wc-follower-8V6fEQ4R.js`);return{mountWcUiFollower:e}},__vite__mapDeps([42,1,2,5,38,4,24,39,40,41,43,44,37,45,9,10,11,12,13,14,3,6,7,15,16,17,18,19,20,21,22,46,47,48,49,29,50,51,52,53,54,55,33,56]));return n(e,$,r)}await Oe(),S();let{bootstrapOAuthReplicas:s}=await t(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-2pqa5H30.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([57,1,13,4,9,10,11,12,14,2,5,3,6,7,15,16,17,18,19,20,21,22]));if(await Promise.race([s().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),r===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:n}=await t(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-CuB1P3LZ.js`);return{loadLegacyStyles:e}},__vite__mapDeps([58,1]));await n();let{mountConnectSurface:r}=await t(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-DxFQNDWS.js`);return{mountConnectSurface:e}},__vite__mapDeps([59,13,4,1,9,10,11,12,14,2,5,3,6,7,15,16,17,18,19,20,21,22]));await r(e);return}if(n){let{mountWcUiExtension:n}=await t(async()=>{let{mountWcUiExtension:e}=await import(`./wc-extension-DqsWFOzt.js`);return{mountWcUiExtension:e}},__vite__mapDeps([60,1,61,62,45,9,10,11,12,4,13,14,2,5,3,6,7,15,16,17,18,19,20,21,22,37,46,47,48,49,24,29,50,51,38,39,40,41,52,53,43,54]));return n(e,$,r===`extension-detached`)}o&&a&&Re(a.extensionId);let{mountWcUiLive:c}=await t(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-CWjluHxO.js`);return{mountWcUiLive:e}},__vite__mapDeps([45,1,9,10,11,12,4,13,14,2,5,3,6,7,15,16,17,18,19,20,21,22,37,46,47,48,49,24,29,50,51,38,39,40,41,52,53,43,54]));return c(e,$,r)}Tn().catch(e=>{$.error(`Fatal error`,e);let t=document.getElementById(`app`);if(t){let n=document.createElement(`div`);n.style.cssText=`padding: 2rem; text-align: center;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Failed to start`;let i=document.createElement(`p`);for(i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=e.message,n.appendChild(r),n.appendChild(i);t.firstChild;)t.removeChild(t.firstChild);t.appendChild(n)}});export{Ye as C,Ze as D,L as E,Je as S,et as T,lt as _,U as a,N as b,At as c,Ct as d,St as f,_t as g,wt as h,It as i,kt as l,Et as m,Cn as n,Rt as o,Dt as p,Kt as r,Lt as s,Yt as t,Ot as u,qe as v,Xe as w,$e as x,P as y};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-C1dmcd_Z.js";import"./provider-C5S_5LXL.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-CjYJAk12.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{c as e}from"./wc-live-CWjluHxO.js";export{e as readSessionsIndex};