sliccy 5.73.4 → 5.74.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 (157) hide show
  1. package/README.md +1 -0
  2. package/dist/node-server/_shared/index.d.ts +2 -0
  3. package/dist/node-server/_shared/index.d.ts.map +1 -1
  4. package/dist/node-server/_shared/index.js +2 -0
  5. package/dist/node-server/_shared/index.js.map +1 -1
  6. package/dist/node-server/_shared/secrets-pipeline.d.ts +22 -0
  7. package/dist/node-server/_shared/secrets-pipeline.d.ts.map +1 -1
  8. package/dist/node-server/_shared/secrets-pipeline.js +50 -0
  9. package/dist/node-server/_shared/secrets-pipeline.js.map +1 -1
  10. package/dist/node-server/_shared/transcript-export.d.ts +161 -0
  11. package/dist/node-server/_shared/transcript-export.d.ts.map +1 -0
  12. package/dist/node-server/_shared/transcript-export.js +804 -0
  13. package/dist/node-server/_shared/transcript-export.js.map +1 -0
  14. package/dist/node-server/_shared/transcript-redaction.d.ts +25 -0
  15. package/dist/node-server/_shared/transcript-redaction.d.ts.map +1 -0
  16. package/dist/node-server/_shared/transcript-redaction.js +107 -0
  17. package/dist/node-server/_shared/transcript-redaction.js.map +1 -0
  18. package/dist/node-server/_shared/tray-sync-protocol.d.ts +56 -1
  19. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  20. package/dist/node-server/_shared/tray-sync-protocol.js +1 -1
  21. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  22. package/dist/node-server/routes/secrets.js +52 -22
  23. package/dist/ui/assets/{account-store-DwSzwLW8.js → account-store-CJqBAm1f.js} +3 -3
  24. package/dist/ui/assets/{account-store-DzwZMcTg.js → account-store-CxSwSaS8.js} +2 -2
  25. package/dist/ui/assets/{adobe-h2gWq2z2.js → adobe-j3AP8U12.js} +2 -2
  26. package/dist/ui/assets/{adobe-ChyPg00A.js → adobe-lvezht3s.js} +1 -1
  27. package/dist/ui/assets/{apps-C86xnKLs.js → apps-D8IGKFP6.js} +1 -1
  28. package/dist/ui/assets/{azure-openai-DMNa-Eup.js → azure-openai-BD60xdeq.js} +1 -1
  29. package/dist/ui/assets/{azure-openai-CjkdyGG4.js → azure-openai-DyqeeHYG.js} +1 -1
  30. package/dist/ui/assets/{bridge-launch-params-jegYRGJ6.js → bridge-launch-params-QY3l_LbM.js} +1 -1
  31. package/dist/ui/assets/{cdp-7evcrxxP.js → cdp-D9eDDEuA.js} +1 -1
  32. package/dist/ui/assets/{cerebras-B0gvSD27.js → cerebras-B0L70LLb.js} +1 -1
  33. package/dist/ui/assets/{cerebras-CvSC_Q2O.js → cerebras-Di6jTcHx.js} +1 -1
  34. package/dist/ui/assets/{client-BliYDaDA.js → client-BxYB_ioq.js} +1 -1
  35. package/dist/ui/assets/{composer-speech-BSy_wbJC.js → composer-speech-FeteaFpi.js} +1 -1
  36. package/dist/ui/assets/{connect-surface-3UvT0SF3.js → connect-surface-CAwJVqDK.js} +1 -1
  37. package/dist/ui/assets/{discovery-preference-CUhsI-AU.js → discovery-preference-C0L_79z7.js} +1 -1
  38. package/dist/ui/assets/{ensure-speech-assets-8cWrra0n.js → ensure-speech-assets-DGq5bX3t.js} +1 -1
  39. package/dist/ui/assets/export-provider-B6K_eHX_.js +1 -0
  40. package/dist/ui/assets/export-spool-DCxGPg43.js +1 -0
  41. package/dist/ui/assets/{follower-navigate-watcher-UN0jo7Ge.js → follower-navigate-watcher-DgusZOpY.js} +1 -1
  42. package/dist/ui/assets/{fs-DC3MEAD4.js → fs-BI3-y-dt.js} +2 -2
  43. package/dist/ui/assets/{fs-DgMOH-Zj.js → fs-DUi6CyVs.js} +1 -1
  44. package/dist/ui/assets/{github-HKW-k0Oh.js → github-CsLyOpIY.js} +1 -1
  45. package/dist/ui/assets/{github-mH266f8L.js → github-DdtaZi7X.js} +2 -2
  46. package/dist/ui/assets/{github-copilot-CBv0T4_S.js → github-copilot-B3YCnypU.js} +1 -1
  47. package/dist/ui/assets/{github-copilot-C7lsRXxS.js → github-copilot-CLH7n3QY.js} +1 -1
  48. package/dist/ui/assets/{handoff-link-CfgH86mb.js → handoff-link-Dmaaww5x.js} +1 -1
  49. package/dist/ui/assets/{hear-B5lURJtR.js → hear-CRBq5mEX.js} +1 -1
  50. package/dist/ui/assets/{hear-DI5vlKdf.js → hear-v5qXSZw8.js} +1 -1
  51. package/dist/ui/assets/{kernel-worker-CHs5yDJo.js → kernel-worker-BL7ADt6y.js} +727 -597
  52. package/dist/ui/assets/{kokoro-engine-DX7VicqD.js → kokoro-engine-CogHLlSk.js} +1 -1
  53. package/dist/ui/assets/{lick-manager-Ct3WOtut.js → lick-manager-wU1FKkH8.js} +1 -1
  54. package/dist/ui/assets/{lick-ws-bridge-D5zKuunw.js → lick-ws-bridge-CFKIh9aE.js} +1 -1
  55. package/dist/ui/assets/lick-ws-bridge-yMljNHwr.js +1 -0
  56. package/dist/ui/assets/{local-llm-DcKgaorK.js → local-llm-BdGGSRtU.js} +1 -1
  57. package/dist/ui/assets/{local-llm-DpBDM1Dm.js → local-llm-Cys4QAHg.js} +1 -1
  58. package/dist/ui/assets/main-BZzNeGKC.js +22 -0
  59. package/dist/ui/assets/main-cherry-D_hgi0by.js +1 -0
  60. package/dist/ui/assets/{mount-BHqxxbwU.js → mount-Dk-I5R7K.js} +1 -1
  61. package/dist/ui/assets/{mount-BRSg0FIY.js → mount-GBkZgZPI.js} +2 -2
  62. package/dist/ui/assets/{mount-bridge-client-DHGevTQu.js → mount-bridge-client-BWPRzAQ5.js} +1 -1
  63. package/dist/ui/assets/{mount-recovery-Beig7gzz.js → mount-recovery-DO04oIYN.js} +1 -1
  64. package/dist/ui/assets/{navigation-watcher-BoJS9hdc.js → navigation-watcher-DkN9hU8i.js} +1 -1
  65. package/dist/ui/assets/new-session-DDu0IRGc.js +2 -0
  66. package/dist/ui/assets/{oauth-bootstrap-DUaR-il_.js → oauth-bootstrap-DfSYlub_.js} +2 -2
  67. package/dist/ui/assets/{oauth-service-foejPYvF.js → oauth-service-BuEH8BXq.js} +1 -1
  68. package/dist/ui/assets/{oauth-service-lE9AyywH.js → oauth-service-Dk3L2UWh.js} +1 -1
  69. package/dist/ui/assets/{openai-codex-CZit4W_R.js → openai-codex-DuyyDpZA.js} +1 -1
  70. package/dist/ui/assets/{openai-codex-D0W343kX.js → openai-codex-rpYkFAL8.js} +1 -1
  71. package/dist/ui/assets/{openrouter-XorTuzAh.js → openrouter-BcPlZu_G.js} +1 -1
  72. package/dist/ui/assets/{openrouter-D4iz9RSI.js → openrouter-DHTAGWtd.js} +1 -1
  73. package/dist/ui/assets/{openrouter-oauth-BLGBWXoP.js → openrouter-oauth-CTIG_xj5.js} +1 -1
  74. package/dist/ui/assets/{openrouter-oauth-BGOdgzqm.js → openrouter-oauth-iVwMGpbk.js} +1 -1
  75. package/dist/ui/assets/page-follower-tray-M061L6UY.js +5 -0
  76. package/dist/ui/assets/{panel-rpc-handlers-BPMsj1iE.js → panel-rpc-handlers-CkC-CpDZ.js} +2 -2
  77. package/dist/ui/assets/{port-bridge-client-CoFZLSYm.js → port-bridge-client-DdolH4cw.js} +1 -1
  78. package/dist/ui/assets/{port-bridge-client-BC810skI.js → port-bridge-client-f_6YKEkm.js} +1 -1
  79. package/dist/ui/assets/{provider-YxK-lzhm.js → provider-Db5o_XYj.js} +2 -2
  80. package/dist/ui/assets/{provider-DZ7x1aM4.js → provider-DiWogq8f.js} +1 -1
  81. package/dist/ui/assets/{provider-settings-CmJnFmK2.js → provider-settings-CSt8YEx4.js} +1 -1
  82. package/dist/ui/assets/{provider-settings-D6FC6-Ws.js → provider-settings-DnRChWz9.js} +2 -2
  83. package/dist/ui/assets/provider-store-access-Bo--BwLf.js +1 -0
  84. package/dist/ui/assets/{provider-store-access-Bqa_EvEK.js → provider-store-access-DQypuwRG.js} +2 -2
  85. package/dist/ui/assets/{providers-7r6dA4ra.js → providers-Bchg39l1.js} +1 -1
  86. package/dist/ui/assets/{providers-Bklgdp4G.js → providers-DpzUvgPJ.js} +2 -2
  87. package/dist/ui/assets/{proxied-fetch-D5h5REZy.js → proxied-fetch-CfcFb0B0.js} +1 -1
  88. package/dist/ui/assets/{proxied-fetch-ldIfAeIb.js → proxied-fetch-D8ebvbVd.js} +1 -1
  89. package/dist/ui/assets/{quick-llm-BHegEzYY.js → quick-llm-CuKruUki.js} +1 -1
  90. package/dist/ui/assets/{remote-cdp-transport-DOoXIxy3.js → remote-cdp-transport-Dmg2NdTA.js} +1 -1
  91. package/dist/ui/assets/{runtime-mode-BVHOImD_.js → runtime-mode-B8Tqab3Z.js} +1 -1
  92. package/dist/ui/assets/runtime-mode-BweZnYql.js +1 -0
  93. package/dist/ui/assets/{secret-env-dQA8rL_1.js → secret-env-Cn-GSA1R.js} +1 -1
  94. package/dist/ui/assets/{secret-topology-CptRwAX3.js → secret-topology-Baeul5rD.js} +1 -1
  95. package/dist/ui/assets/{secrets-bridge-client-D6nwnBvr.js → secrets-bridge-client-CLRo0NLf.js} +1 -1
  96. package/dist/ui/assets/session-freezer-DGs88nTW.js +21 -0
  97. package/dist/ui/assets/session-store-DQztDoVa.js +1 -0
  98. package/dist/ui/assets/setup-standalone-prelude-DJUR-Jx-.js +2 -0
  99. package/dist/ui/assets/{setup-sudo-DGrMEyR3.js → setup-sudo-Cc-d6eO1.js} +2 -2
  100. package/dist/ui/assets/sha256-DmK25X5D.js +1 -0
  101. package/dist/ui/assets/{silent-renew-backoff-DyzFsWYC.js → silent-renew-backoff-Chq7fPuc.js} +1 -1
  102. package/dist/ui/assets/{silent-renew-backoff-Dzkpjjro.js → silent-renew-backoff-CqD4WRin.js} +1 -1
  103. package/dist/ui/assets/{skills-DkHenAsV.js → skills-gGjRrQeq.js} +1 -1
  104. package/dist/ui/assets/{speak-aEIq7SEP.js → speak-DZhfxcQp.js} +1 -1
  105. package/dist/ui/assets/{speak-B4wyr-p6.js → speak-wEvzUJ_4.js} +1 -1
  106. package/dist/ui/assets/{sprinkle-manager-354rS3Fe.js → sprinkle-manager-BYlc7AHg.js} +1 -1
  107. package/dist/ui/assets/src-BcePBv4G.js +1 -0
  108. package/dist/ui/assets/src-C9oNvq2b2.js +2 -0
  109. package/dist/ui/assets/src-DoFhVmQT.js +1 -0
  110. package/dist/ui/assets/{store-DICK08O4.js → store-ByY8CO32.js} +1 -1
  111. package/dist/ui/assets/{sudo-9mYhdwPD.js → sudo-DsN_KTcg.js} +1 -1
  112. package/dist/ui/assets/{telemetry-C8rZr13D.js → telemetry-Dxrv_mDE.js} +1 -1
  113. package/dist/ui/assets/{transformers-env-DZtq7i0I.js → transformers-env-Cr03eE3X.js} +1 -1
  114. package/dist/ui/assets/{transformers-env-CeJN6XlP.js → transformers-env-DKadceXA.js} +1 -1
  115. package/dist/ui/assets/{tray-leader-DicSB8Dn.js → tray-leader-BDMuV-1a.js} +1 -1
  116. package/dist/ui/assets/{tray-leave-runtime-BI5IM82V.js → tray-leave-runtime-DuZ41JQ-.js} +1 -1
  117. package/dist/ui/assets/{tray-runtime-config-DquE2Rx9.js → tray-runtime-config-9kTxza5l.js} +1 -1
  118. package/dist/ui/assets/{tray-runtime-config-8-BCHO27.js → tray-runtime-config-GgP0BHji.js} +1 -1
  119. package/dist/ui/assets/{tray-sync-protocol-CVdiCvfU.js → tray-sync-protocol-CxWJ329c.js} +1 -1
  120. package/dist/ui/assets/{upgrade-detection-B8LfSgMb.js → upgrade-detection-BjD6M6tx.js} +1 -1
  121. package/dist/ui/assets/{voice-reply-6cMxpz9H.js → voice-reply-CkYr1oSF.js} +1 -1
  122. package/dist/ui/assets/{wc-attach-DU0svqb7.js → wc-attach-CYMk5mBA.js} +1 -1
  123. package/dist/ui/assets/wc-extension-WOxllVQv.js +2 -0
  124. package/dist/ui/assets/{wc-float-label-2tniyRvt.js → wc-float-label-yV3hzRXJ.js} +1 -1
  125. package/dist/ui/assets/wc-follower-CqNUhals.js +17 -0
  126. package/dist/ui/assets/wc-live-DN4iNS1F.js +8 -0
  127. package/dist/ui/assets/wc-nav-DdL1jc0a.js +2 -0
  128. package/dist/ui/assets/{wc-onboarding-t5pRxVjL.js → wc-onboarding-Bzxu5Ii4.js} +2 -2
  129. package/dist/ui/assets/{wc-placeholder-XW-qi_GD.js → wc-placeholder-5zeCfEVA.js} +2 -2
  130. package/dist/ui/assets/{wc-settings-7Jj2UM15.js → wc-settings-CrG7sAlG.js} +3 -3
  131. package/dist/ui/assets/{wc-shell-CoYCAmK-.js → wc-shell-DL44I68b.js} +3 -3
  132. package/dist/ui/assets/{wc-sprinkles-CFaUt2sb.js → wc-sprinkles-D52GEpi0.js} +2 -2
  133. package/dist/ui/assets/wc-transcript-export-5Pmfejur.js +2 -0
  134. package/dist/ui/assets/wc-tray-jp0YtxQG.js +2 -0
  135. package/dist/ui/assets/{whisper-engine-G1YfvaDM.js → whisper-engine-CHKYCaAu.js} +1 -1
  136. package/dist/ui/assets/{whisper-session-Ds5v74N9.js → whisper-session-W-6_Qa-h.js} +2 -2
  137. package/dist/ui/assets/{xai-grok-QulUPZS-.js → xai-grok-BuiKJ83J.js} +1 -1
  138. package/dist/ui/assets/{xai-grok-CrEqywR8.js → xai-grok-BxZVhpe_.js} +1 -1
  139. package/dist/ui/index.html +15 -13
  140. package/dist/ui/llm-proxy-sw.js +1 -1
  141. package/dist/ui/packages/webapp/index.html +15 -13
  142. package/package.json +1 -1
  143. package/dist/ui/assets/lick-ws-bridge-DbbdXQSp.js +0 -1
  144. package/dist/ui/assets/main-CBUfGcTh.js +0 -22
  145. package/dist/ui/assets/main-cherry-9qp2ecC4.js +0 -1
  146. package/dist/ui/assets/new-session-UPnjrqyz.js +0 -2
  147. package/dist/ui/assets/page-follower-tray-Cm9cuA-m.js +0 -5
  148. package/dist/ui/assets/provider-store-access-Dw2dlNIf.js +0 -1
  149. package/dist/ui/assets/session-freezer-oYKtZTY0.js +0 -21
  150. package/dist/ui/assets/session-store-DAM8GRJ0.js +0 -1
  151. package/dist/ui/assets/src-CS5gSDhT.js +0 -1
  152. package/dist/ui/assets/src-Dk1QVJRd.js +0 -1
  153. package/dist/ui/assets/wc-extension-grYSDyJN.js +0 -2
  154. package/dist/ui/assets/wc-follower-B6JesvuH.js +0 -17
  155. package/dist/ui/assets/wc-live-OHBNpb_A.js +0 -8
  156. package/dist/ui/assets/wc-nav-DcxqwpAS.js +0 -2
  157. package/dist/ui/assets/wc-tray-C_yJiqov.js +0 -2
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-lE9AyywH.js","assets/preload-helper-Czpn1I53.js","assets/proxied-fetch-D5h5REZy.js","assets/rolldown-runtime-aKtaBQYM.js","assets/base64-DpPqYZJF.js","assets/src-CS5gSDhT.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/panel-rpc-DmJSNs0I.js","assets/wc-permissions-registry-Blyunq37.js","assets/provider-store-access-Bqa_EvEK.js","assets/logger-DDBAeTLF.js","assets/global-db-CbuLl-zx.js","assets/types-idfTVsM8.js"])))=>i.map(i=>d[i]);
2
- import{R as e,S as t,d as n}from"./account-store-DwSzwLW8.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{t as i}from"./logger-DDBAeTLF.js";import{n as a}from"./runtime-env-DH4NDw4t.js";import{i as o}from"./providers-Bklgdp4G.js";import"./provider-store-access-Bqa_EvEK.js";var s=i(`mcp-oauth`);async function c(e,t,n){let r=new URL(e).origin,i=t??`${r}/.well-known/oauth-protected-resource`,a=null,o=null;s.debug(`Fetching PRM`,{prmUrl:i});try{let e=await n(i,{headers:{Accept:`application/json`}});if(!e.ok)o=`${e.status} ${e.statusText}`;else{let t=await e.json();!t.authorization_servers||t.authorization_servers.length===0?o=`lists no authorization_servers`:a=t}}catch(e){o=e instanceof Error?e.message:String(e)}let c,l,u;a?.authorization_servers&&a.authorization_servers.length>0?(c=a.authorization_servers[0].replace(/\/+$/,``),l=`${c}/.well-known/oauth-authorization-server`,u=`prm`,s.debug(`Discovery via PRM`,{prmUrl:i,asmUrl:l})):(c=r,l=`${r}/.well-known/oauth-authorization-server`,u=`asm-origin-fallback`,s.debug(`PRM unavailable; falling back to ASM at server origin`,{prmUrl:i,prmReason:o,asmUrl:l}));let d=null,f=null;s.debug(`Fetching ASM`,{asmUrl:l});try{let e=await n(l,{headers:{Accept:`application/json`}});e.ok?d=await e.json():f=`${e.status} ${e.statusText}`}catch(e){f=e instanceof Error?e.message:String(e)}if(!d)throw Error(u===`asm-origin-fallback`?`MCP OAuth discovery failed. PRM (${i}): ${o}. ASM fallback (${l}): ${f}.`:`ASM fetch failed: ${f} (${l})`);if(!d.authorization_endpoint||!d.token_endpoint)throw Error(u===`asm-origin-fallback`?`MCP OAuth discovery failed. PRM (${i}): ${o}. ASM fallback (${l}) is missing required endpoints (authorization_endpoint, token_endpoint).`:`ASM at ${l} is missing required endpoints`);return{issuer:d.issuer||c,authorizationEndpoint:d.authorization_endpoint,tokenEndpoint:d.token_endpoint,registrationEndpoint:d.registration_endpoint,supportedScopes:d.scopes_supported??a?.scopes_supported,codeChallengeMethods:d.code_challenge_methods_supported,grantTypes:d.grant_types_supported,discoveryPath:u}}function l(e){return!e||e.length===0||e.includes(`S256`)?`S256`:e.includes(`plain`)?`plain`:`S256`}function u(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}async function d(e){let t=new Uint8Array(32);crypto.getRandomValues(t);let n=u(t);if(e===`plain`)return{codeVerifier:n,codeChallenge:n,method:e};let r=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(n));return{codeVerifier:n,codeChallenge:u(new Uint8Array(r)),method:e}}function f(e){try{let t=new URL(e);return{code:t.searchParams.get(`code`),state:t.searchParams.get(`state`)}}catch{return{code:null,state:null}}}async function p(e){let t=await d(l(e.asMetadata.codeChallengeMethods)),n=u(crypto.getRandomValues(new Uint8Array(16))),r=new URLSearchParams({response_type:`code`,client_id:e.clientId,redirect_uri:e.redirectUri,code_challenge:t.codeChallenge,code_challenge_method:t.method,state:n});e.scope&&r.set(`scope`,e.scope);let i=`${e.asMetadata.authorizationEndpoint}?${r.toString()}`,a=await e.launcher(i);if(!a)throw Error(`MCP OAuth flow cancelled or timed out`);let{code:o,state:s}=f(a);if(!o)throw Error("MCP OAuth redirect missing `code` parameter");if(s!==n)throw Error(`MCP OAuth state mismatch — possible CSRF`);return h({tokenEndpoint:e.asMetadata.tokenEndpoint,clientId:e.clientId,code:o,codeVerifier:t.codeVerifier,redirectUri:e.redirectUri,fetchImpl:e.fetchImpl})}function m(e){if(e.error||!e.access_token)throw Error(`Token endpoint error: ${e.error??`no_access_token`}${e.error_description?` — ${e.error_description}`:``}`);return{accessToken:e.access_token,refreshToken:e.refresh_token,expiresAt:e.expires_in?Date.now()+e.expires_in*1e3:void 0,scope:e.scope,tokenType:e.token_type}}async function h(e){let t=new URLSearchParams({grant_type:`authorization_code`,code:e.code,redirect_uri:e.redirectUri,client_id:e.clientId,code_verifier:e.codeVerifier}).toString(),n=await e.fetchImpl(e.tokenEndpoint,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:t}),r=await n.json();if(!n.ok&&!r.access_token)throw Error(`Token exchange failed: ${n.status} ${n.statusText}${r.error?` (${r.error})`:``}`);return m(r)}async function g(e){let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e.refreshToken,client_id:e.clientId});e.scope&&t.set(`scope`,e.scope);let n=await e.fetchImpl(e.tokenEndpoint,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:t.toString()}),r=await n.json();if(!n.ok&&!r.access_token)throw Error(`Token refresh failed: ${n.status} ${n.statusText}${r.error?` (${r.error})`:``}`);return m(r)}var _=i(`mcp-provider`),v=`mcp:`;function y(){return typeof globalThis<`u`&&globalThis.indexedDB!==void 0}function b(e){return`${v}${e}`}var x=new Map,S=new Set;async function C(){if(a()){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}let{getOAuthPageOrigin:e}=await r(async()=>{let{getOAuthPageOrigin:e}=await import(`./oauth-service-lE9AyywH.js`);return{getOAuthPageOrigin:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),{origin:t}=await e();return`${t}/auth/callback`}async function w(e){if(e)return e;let{createProxiedFetch:t}=await r(async()=>{let{createProxiedFetch:e}=await import(`./proxied-fetch-D5h5REZy.js`).then(e=>e.a);return{createProxiedFetch:e}},__vite__mapDeps([2,3,1,4,5,6,7])),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function T(e){let t=x.get(b(e.name));if(t)return t;let n=await w(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return x.set(b(e.name),r),r}function E(r){let i=b(r.name),a=(()=>{try{return new URL(r.serverUrl).host}catch{return``}})();return{id:i,name:`MCP: ${r.name}`,description:`MCP server at ${r.serverUrl}`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:a?[a]:[],getModelIds:()=>[],onOAuthLogin:async(t,n)=>{let a=r.launcher??t,o=await w(r.fetchImpl),s=await p({asMetadata:await T(r),clientId:r.auth.clientId,scope:r.auth.scope,redirectUri:await C(),launcher:a,fetchImpl:o});await e({providerId:i,accessToken:s.accessToken,refreshToken:s.refreshToken,tokenExpiresAt:s.expiresAt}),n()},onSilentRenew:async()=>{if(!t(i))return null;let a=n().find(e=>e.providerId===i)?.refreshToken;if(!a)return _.info(`No refresh token for MCP provider, skipping silent renewal`,{id:i}),null;try{let t=await T(r),n=t.grantTypes??[];if(n.length>0&&!n.includes(`refresh_token`))return _.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:i}),null;let o=await w(r.fetchImpl),s=await g({tokenEndpoint:t.tokenEndpoint,clientId:r.auth.clientId,refreshToken:a,scope:r.auth.scope,fetchImpl:o});return await e({providerId:i,accessToken:s.accessToken,refreshToken:s.refreshToken??a,tokenExpiresAt:s.expiresAt}),s.accessToken}catch(e){return _.warn(`MCP silent renewal failed`,{id:i,error:e instanceof Error?e.message:String(e)}),null}}}}function D(e){let t=b(e.name);S.has(t)||(o(E(e)),S.add(t),_.debug(`Registered MCP provider`,{id:t}))}async function O(){if(!y())return[];let{readMcpAuthEntries:e}=await r(async()=>{let{readMcpAuthEntries:e}=await import(`./provider-store-access-Bqa_EvEK.js`);return{readMcpAuthEntries:e}},__vite__mapDeps([10,1,11,12,13])),t=await e(),n=[];for(let e of t)D({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(b(e.name));return n}export{O as ensureAllMcpProvidersRegistered};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-Dk3L2UWh.js","assets/preload-helper-Czpn1I53.js","assets/proxied-fetch-CfcFb0B0.js","assets/rolldown-runtime-aKtaBQYM.js","assets/base64-DpPqYZJF.js","assets/src-DoFhVmQT.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/panel-rpc-DmJSNs0I.js","assets/wc-permissions-registry-Blyunq37.js","assets/provider-store-access-DQypuwRG.js","assets/logger-DDBAeTLF.js","assets/global-db-CbuLl-zx.js","assets/types-idfTVsM8.js"])))=>i.map(i=>d[i]);
2
+ import{R as e,S as t,d as n}from"./account-store-CJqBAm1f.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{t as i}from"./logger-DDBAeTLF.js";import{n as a}from"./runtime-env-DH4NDw4t.js";import{i as o}from"./providers-DpzUvgPJ.js";import"./provider-store-access-DQypuwRG.js";var s=i(`mcp-oauth`);async function c(e,t,n){let r=new URL(e).origin,i=t??`${r}/.well-known/oauth-protected-resource`,a=null,o=null;s.debug(`Fetching PRM`,{prmUrl:i});try{let e=await n(i,{headers:{Accept:`application/json`}});if(!e.ok)o=`${e.status} ${e.statusText}`;else{let t=await e.json();!t.authorization_servers||t.authorization_servers.length===0?o=`lists no authorization_servers`:a=t}}catch(e){o=e instanceof Error?e.message:String(e)}let c,l,u;a?.authorization_servers&&a.authorization_servers.length>0?(c=a.authorization_servers[0].replace(/\/+$/,``),l=`${c}/.well-known/oauth-authorization-server`,u=`prm`,s.debug(`Discovery via PRM`,{prmUrl:i,asmUrl:l})):(c=r,l=`${r}/.well-known/oauth-authorization-server`,u=`asm-origin-fallback`,s.debug(`PRM unavailable; falling back to ASM at server origin`,{prmUrl:i,prmReason:o,asmUrl:l}));let d=null,f=null;s.debug(`Fetching ASM`,{asmUrl:l});try{let e=await n(l,{headers:{Accept:`application/json`}});e.ok?d=await e.json():f=`${e.status} ${e.statusText}`}catch(e){f=e instanceof Error?e.message:String(e)}if(!d)throw Error(u===`asm-origin-fallback`?`MCP OAuth discovery failed. PRM (${i}): ${o}. ASM fallback (${l}): ${f}.`:`ASM fetch failed: ${f} (${l})`);if(!d.authorization_endpoint||!d.token_endpoint)throw Error(u===`asm-origin-fallback`?`MCP OAuth discovery failed. PRM (${i}): ${o}. ASM fallback (${l}) is missing required endpoints (authorization_endpoint, token_endpoint).`:`ASM at ${l} is missing required endpoints`);return{issuer:d.issuer||c,authorizationEndpoint:d.authorization_endpoint,tokenEndpoint:d.token_endpoint,registrationEndpoint:d.registration_endpoint,supportedScopes:d.scopes_supported??a?.scopes_supported,codeChallengeMethods:d.code_challenge_methods_supported,grantTypes:d.grant_types_supported,discoveryPath:u}}function l(e){return!e||e.length===0||e.includes(`S256`)?`S256`:e.includes(`plain`)?`plain`:`S256`}function u(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}async function d(e){let t=new Uint8Array(32);crypto.getRandomValues(t);let n=u(t);if(e===`plain`)return{codeVerifier:n,codeChallenge:n,method:e};let r=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(n));return{codeVerifier:n,codeChallenge:u(new Uint8Array(r)),method:e}}function f(e){try{let t=new URL(e);return{code:t.searchParams.get(`code`),state:t.searchParams.get(`state`)}}catch{return{code:null,state:null}}}async function p(e){let t=await d(l(e.asMetadata.codeChallengeMethods)),n=u(crypto.getRandomValues(new Uint8Array(16))),r=new URLSearchParams({response_type:`code`,client_id:e.clientId,redirect_uri:e.redirectUri,code_challenge:t.codeChallenge,code_challenge_method:t.method,state:n});e.scope&&r.set(`scope`,e.scope);let i=`${e.asMetadata.authorizationEndpoint}?${r.toString()}`,a=await e.launcher(i);if(!a)throw Error(`MCP OAuth flow cancelled or timed out`);let{code:o,state:s}=f(a);if(!o)throw Error("MCP OAuth redirect missing `code` parameter");if(s!==n)throw Error(`MCP OAuth state mismatch — possible CSRF`);return h({tokenEndpoint:e.asMetadata.tokenEndpoint,clientId:e.clientId,code:o,codeVerifier:t.codeVerifier,redirectUri:e.redirectUri,fetchImpl:e.fetchImpl})}function m(e){if(e.error||!e.access_token)throw Error(`Token endpoint error: ${e.error??`no_access_token`}${e.error_description?` — ${e.error_description}`:``}`);return{accessToken:e.access_token,refreshToken:e.refresh_token,expiresAt:e.expires_in?Date.now()+e.expires_in*1e3:void 0,scope:e.scope,tokenType:e.token_type}}async function h(e){let t=new URLSearchParams({grant_type:`authorization_code`,code:e.code,redirect_uri:e.redirectUri,client_id:e.clientId,code_verifier:e.codeVerifier}).toString(),n=await e.fetchImpl(e.tokenEndpoint,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:t}),r=await n.json();if(!n.ok&&!r.access_token)throw Error(`Token exchange failed: ${n.status} ${n.statusText}${r.error?` (${r.error})`:``}`);return m(r)}async function g(e){let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e.refreshToken,client_id:e.clientId});e.scope&&t.set(`scope`,e.scope);let n=await e.fetchImpl(e.tokenEndpoint,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:t.toString()}),r=await n.json();if(!n.ok&&!r.access_token)throw Error(`Token refresh failed: ${n.status} ${n.statusText}${r.error?` (${r.error})`:``}`);return m(r)}var _=i(`mcp-provider`),v=`mcp:`;function y(){return typeof globalThis<`u`&&globalThis.indexedDB!==void 0}function b(e){return`${v}${e}`}var x=new Map,S=new Set;async function C(){if(a()){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}let{getOAuthPageOrigin:e}=await r(async()=>{let{getOAuthPageOrigin:e}=await import(`./oauth-service-Dk3L2UWh.js`);return{getOAuthPageOrigin:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),{origin:t}=await e();return`${t}/auth/callback`}async function w(e){if(e)return e;let{createProxiedFetch:t}=await r(async()=>{let{createProxiedFetch:e}=await import(`./proxied-fetch-CfcFb0B0.js`).then(e=>e.a);return{createProxiedFetch:e}},__vite__mapDeps([2,3,1,4,5,6,7])),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function T(e){let t=x.get(b(e.name));if(t)return t;let n=await w(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return x.set(b(e.name),r),r}function E(r){let i=b(r.name),a=(()=>{try{return new URL(r.serverUrl).host}catch{return``}})();return{id:i,name:`MCP: ${r.name}`,description:`MCP server at ${r.serverUrl}`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:a?[a]:[],getModelIds:()=>[],onOAuthLogin:async(t,n)=>{let a=r.launcher??t,o=await w(r.fetchImpl),s=await p({asMetadata:await T(r),clientId:r.auth.clientId,scope:r.auth.scope,redirectUri:await C(),launcher:a,fetchImpl:o});await e({providerId:i,accessToken:s.accessToken,refreshToken:s.refreshToken,tokenExpiresAt:s.expiresAt}),n()},onSilentRenew:async()=>{if(!t(i))return null;let a=n().find(e=>e.providerId===i)?.refreshToken;if(!a)return _.info(`No refresh token for MCP provider, skipping silent renewal`,{id:i}),null;try{let t=await T(r),n=t.grantTypes??[];if(n.length>0&&!n.includes(`refresh_token`))return _.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:i}),null;let o=await w(r.fetchImpl),s=await g({tokenEndpoint:t.tokenEndpoint,clientId:r.auth.clientId,refreshToken:a,scope:r.auth.scope,fetchImpl:o});return await e({providerId:i,accessToken:s.accessToken,refreshToken:s.refreshToken??a,tokenExpiresAt:s.expiresAt}),s.accessToken}catch(e){return _.warn(`MCP silent renewal failed`,{id:i,error:e instanceof Error?e.message:String(e)}),null}}}}function D(e){let t=b(e.name);S.has(t)||(o(E(e)),S.add(t),_.debug(`Registered MCP provider`,{id:t}))}async function O(){if(!y())return[];let{readMcpAuthEntries:e}=await r(async()=>{let{readMcpAuthEntries:e}=await import(`./provider-store-access-DQypuwRG.js`);return{readMcpAuthEntries:e}},__vite__mapDeps([10,1,11,12,13])),t=await e(),n=[];for(let e of t)D({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(b(e.name));return n}export{O as ensureAllMcpProvidersRegistered};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{i as t,s as n,t as r}from"./providers-7r6dA4ra.js";import{R as i,S as a,d as o}from"./account-store-DzwZMcTg.js";import{t as s}from"./runtime-env-byAg9ij-.js";import{discoverAuth as c,refreshAccessToken as l,runAuthFlow as u}from"./oauth-Czw-MuuR.js";import{n as d}from"./store-DICK08O4.js";import"./provider-store-access-Dw2dlNIf.js";const f=e(`mcp-provider`);function p(){return typeof globalThis<`u`&&globalThis.indexedDB!==void 0}function m(e){return`mcp:${e}`}const h=new Map,g=new Set;async function _(){if(s()){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}let{getOAuthPageOrigin:e}=await import(`./oauth-service-foejPYvF.js`),{origin:t}=await e();return`${t}/auth/callback`}async function v(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-ldIfAeIb.js`).then(e=>e.o),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function y(e){let t=h.get(m(e.name));if(t)return t;let n=await v(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return h.set(m(e.name),r),r}function b(e){let t=m(e.name),n=(()=>{try{return new URL(e.serverUrl).host}catch{return``}})();return{id:t,name:`MCP: ${e.name}`,description:`MCP server at ${e.serverUrl}`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:n?[n]:[],getModelIds:()=>[],onOAuthLogin:async(n,r)=>{let a=e.launcher??n,o=await v(e.fetchImpl),s=await u({asMetadata:await y(e),clientId:e.auth.clientId,scope:e.auth.scope,redirectUri:await _(),launcher:a,fetchImpl:o});await i({providerId:t,accessToken:s.accessToken,refreshToken:s.refreshToken,tokenExpiresAt:s.expiresAt}),r()},onSilentRenew:async()=>{if(!a(t))return null;let n=o().find(e=>e.providerId===t)?.refreshToken;if(!n)return f.info(`No refresh token for MCP provider, skipping silent renewal`,{id:t}),null;try{let r=await y(e),a=r.grantTypes??[];if(a.length>0&&!a.includes(`refresh_token`))return f.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:t}),null;let o=await v(e.fetchImpl),s=await l({tokenEndpoint:r.tokenEndpoint,clientId:e.auth.clientId,refreshToken:n,scope:e.auth.scope,fetchImpl:o});return await i({providerId:t,accessToken:s.accessToken,refreshToken:s.refreshToken??n,tokenExpiresAt:s.expiresAt}),s.accessToken}catch(e){return f.warn(`MCP silent renewal failed`,{id:t,error:e instanceof Error?e.message:String(e)}),null}}}}function x(e){let n=m(e.name);g.has(n)||(t(b(e)),g.add(n),f.debug(`Registered MCP provider`,{id:n}))}async function S(e){let t=m(e);if(g.has(t)&&r(t))return!0;if(!p())return!1;let n=await d(e);return n?(x({name:e,serverUrl:n.serverUrl,auth:n.auth}),!0):!1}async function C(){if(!p())return[];let{readMcpAuthEntries:e}=await import(`./provider-store-access-Dw2dlNIf.js`),t=await e(),n=[];for(let e of t)x({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(m(e.name));return n}function w(e){let t=m(e);return g.delete(t),h.delete(t),n(t)}export{C as ensureAllMcpProvidersRegistered,S as ensureMcpProviderRegistered,x as registerMcpProvider,w as removeMcpProvider};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{i as t,s as n,t as r}from"./providers-Bchg39l1.js";import{R as i,S as a,d as o}from"./account-store-CxSwSaS8.js";import{t as s}from"./runtime-env-byAg9ij-.js";import{discoverAuth as c,refreshAccessToken as l,runAuthFlow as u}from"./oauth-Czw-MuuR.js";import{n as d}from"./store-ByY8CO32.js";import"./provider-store-access-Bo--BwLf.js";const f=e(`mcp-provider`);function p(){return typeof globalThis<`u`&&globalThis.indexedDB!==void 0}function m(e){return`mcp:${e}`}const h=new Map,g=new Set;async function _(){if(s()){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}let{getOAuthPageOrigin:e}=await import(`./oauth-service-BuEH8BXq.js`),{origin:t}=await e();return`${t}/auth/callback`}async function v(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-D8ebvbVd.js`).then(e=>e.o),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function y(e){let t=h.get(m(e.name));if(t)return t;let n=await v(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return h.set(m(e.name),r),r}function b(e){let t=m(e.name),n=(()=>{try{return new URL(e.serverUrl).host}catch{return``}})();return{id:t,name:`MCP: ${e.name}`,description:`MCP server at ${e.serverUrl}`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,oauthTokenDomains:n?[n]:[],getModelIds:()=>[],onOAuthLogin:async(n,r)=>{let a=e.launcher??n,o=await v(e.fetchImpl),s=await u({asMetadata:await y(e),clientId:e.auth.clientId,scope:e.auth.scope,redirectUri:await _(),launcher:a,fetchImpl:o});await i({providerId:t,accessToken:s.accessToken,refreshToken:s.refreshToken,tokenExpiresAt:s.expiresAt}),r()},onSilentRenew:async()=>{if(!a(t))return null;let n=o().find(e=>e.providerId===t)?.refreshToken;if(!n)return f.info(`No refresh token for MCP provider, skipping silent renewal`,{id:t}),null;try{let r=await y(e),a=r.grantTypes??[];if(a.length>0&&!a.includes(`refresh_token`))return f.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:t}),null;let o=await v(e.fetchImpl),s=await l({tokenEndpoint:r.tokenEndpoint,clientId:e.auth.clientId,refreshToken:n,scope:e.auth.scope,fetchImpl:o});return await i({providerId:t,accessToken:s.accessToken,refreshToken:s.refreshToken??n,tokenExpiresAt:s.expiresAt}),s.accessToken}catch(e){return f.warn(`MCP silent renewal failed`,{id:t,error:e instanceof Error?e.message:String(e)}),null}}}}function x(e){let n=m(e.name);g.has(n)||(t(b(e)),g.add(n),f.debug(`Registered MCP provider`,{id:n}))}async function S(e){let t=m(e);if(g.has(t)&&r(t))return!0;if(!p())return!1;let n=await d(e);return n?(x({name:e,serverUrl:n.serverUrl,auth:n.auth}),!0):!1}async function C(){if(!p())return[];let{readMcpAuthEntries:e}=await import(`./provider-store-access-Bo--BwLf.js`),t=await e(),n=[];for(let e of t)x({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(m(e.name));return n}function w(e){let t=m(e);return g.delete(t),h.delete(t),n(t)}export{C as ensureAllMcpProvidersRegistered,S as ensureMcpProviderRegistered,x as registerMcpProvider,w as removeMcpProvider};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{r as t}from"./src-Dk1QVJRd.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 T,g as te,h as ne,i as E,j as D,k as O,l as k,m as A,n as re,o as ie,p as ae,s as oe,t as se,u as j,v as ce,w as le,x as ue,y as M,z as de}from"./account-store-DzwZMcTg.js";import{a as fe,n as pe}from"./tray-follower-status-B191H1LK.js";import{i as me,o as N}from"./tray-runtime-config-8-BCHO27.js";import{n as P}from"./clipboard-DuHpK59o.js";function F(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.`}const I=e(`provider-settings`);function L(e,t){return R(e,t)}function R(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){I.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 z(){let e=JSON.stringify(j(),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 he(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function B(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}const V={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`]},H=`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 U(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 W(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function G(e){e.options?.startInAddAccount?W(e):q(e)}function ge(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=he(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function K(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await import(`./oauth-service-foejPYvF.js`),i={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await r();n&&await e.onOAuthLoginIntercepted(n,t,i)}else if(e.onOAuthLogin){let r=n();await e.onOAuthLogin(r,t,i)}}function _e(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(B(V.pen)),U(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Z(e,t)),n}function ve(e,t,n){let r=document.createElement(`button`);return r.style.cssText=H,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(B(V.login)),U(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{K(n,()=>q(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(B(V.logout)),U(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await O(t.providerId),q(e)})()})),r}function ye(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(B(V.trash)),U(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await m(t.providerId),q(e)})()}),n}function be(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(ge(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(_e(e,t)),n.isOAuth&&s.appendChild(ve(e,t,n)),s.appendChild(ye(e,t)),r.appendChild(s),r}function xe(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=pe(),a=i.state!==`inactive`,o=me(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`,()=>$(e)),t.appendChild(s),t}function q(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(be(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`,()=>z()),i.appendChild(o),t.appendChild(i),t.appendChild(xe(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`,()=>W(e)),t.appendChild(c)}function Se(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 Ce(e,t){let n=Se(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 we(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 Te(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}=we(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 P(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 J(e,t){let n=t.providerSelect.value;if(!n)return;let r=i(n);if(!r.onOAuthLogin&&!r.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=w().some(e=>e.providerId===n),s=M(n);if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}r.requiresBaseUrl&&t.baseUrlInput.value.trim()&&E(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(r.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-foejPYvF.js`),i=await n();if(!i)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await r.onOAuthLoginIntercepted(i,()=>G(e),{presentDeviceCode:Te(t.oauth)})}else if(r.onOAuthLogin){let{createOAuthLauncher:t}=await import(`./oauth-service-foejPYvF.js`),n=t();await r.onOAuthLogin(n,()=>G(e))}}catch(e){if(!o)try{await m(n)}catch{}I.error(`OAuth login failed`,{providerId:n,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function Ee(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 De(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 Oe(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 Y(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,Ee(e,n),De(e,n),Oe(e,n)}function X(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}E(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),G(e)}function ke(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`,()=>W(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`,()=>$(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`,()=>q(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=Ce(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{J(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`,Y(o)}),Y(o),o.saveBtn.addEventListener(`click`,()=>X(e,o));let s=t=>{t.key===`Enter`&&X(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),ke(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 Q(e,t,n){R(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 Ae(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=N(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}Q(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 je(){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 $(e){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect to another browser`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,n.appendChild(i),n.appendChild(je());let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Sync URL:`,n.appendChild(a);let o=document.createElement(`input`);o.className=`dialog__input`,o.type=`text`,o.autocomplete=`off`,o.spellcheck=!1,o.placeholder=`${t}/join/<token>`,n.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,n.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let t=o.value.trim();if(!t){s.textContent=`Paste a sync URL to continue.`,s.style.display=``,o.focus();return}let n=N(window.localStorage,t);if(!n){s.textContent=F(t),s.style.display=``,o.focus();return}Q(e,n.joinUrl,c)}),n.appendChild(l),n.appendChild(c);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Back`,u.addEventListener(`click`,()=>Z(e)),n.appendChild(u),o.addEventListener(`input`,()=>{s.style.display=`none`}),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l.click()}),requestAnimationFrame(()=>o.focus())}function Me(e){return fe(`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?q(i):e?.autoJoinUrl?Ae(i,e.autoJoinUrl):e?.preferTrayJoin?$(i):Z(i),n.appendChild(r),document.body.appendChild(n)})}export{se as ACCOUNTS_KEY,re as __test__,E as addAccount,S as applyProviderDefaults,ie as clearAllSettings,oe as clearApiKey,ee as clearBaseUrl,k as clearSelectedProvider,F as describeInvalidJoinUrl,z as downloadProviders,j as exportProviders,w as getAccounts,T as getAllAvailableModels,ae as getAllExtraOAuthDomains,A as getApiKey,ne as getApiKeyForProvider,te as getApiVersionForProvider,x as getAvailableProviders,ce as getBaseUrl,M as getBaseUrlForProvider,C as getDeploymentForProvider,ue as getExtraOAuthDomains,g as getOAuthAccountInfo,i as getProviderConfig,le as getProviderModels,_ as getRawApiKeyForProvider,o as getSelectedModelId,a as getSelectedProvider,p as isModelHiddenFromPicker,O as logoutOAuthAccount,n as maskOAuthTokenWithRetry,D as migrateLegacyAuthOnlySelection,d as persistOAuthMaskViaServiceWorker,f as providerOffersLlmModels,K as reloginOAuthAccount,m as removeAccount,s as resolveCurrentModel,l as resolveModelById,u as resolveModelByShorthand,h as saveOAuthAccount,de as setApiKey,r as setBaseUrl,y as setExtraOAuthDomains,c as setExtraOAuthDomainsAsync,v as setSelectedModelId,b as setSelectedProvider,Me as showProviderSettings,L as testOnlyDispatchTrayJoinWithFailureFeedback};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{s as t}from"./src-BcePBv4G.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 T,g as te,h as ne,i as E,j as D,k as O,l as k,m as A,n as re,o as ie,p as ae,s as oe,t as se,u as j,v as ce,w as le,x as ue,y as M,z as de}from"./account-store-CxSwSaS8.js";import{a as fe,n as pe}from"./tray-follower-status-B191H1LK.js";import{i as me,o as N}from"./tray-runtime-config-GgP0BHji.js";import{n as P}from"./clipboard-DuHpK59o.js";function F(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.`}const I=e(`provider-settings`);function L(e,t){return R(e,t)}function R(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){I.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 z(){let e=JSON.stringify(j(),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 he(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function B(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}const V={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`]},H=`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 U(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 W(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function G(e){e.options?.startInAddAccount?W(e):q(e)}function ge(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=he(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function K(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await import(`./oauth-service-BuEH8BXq.js`),i={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await r();n&&await e.onOAuthLoginIntercepted(n,t,i)}else if(e.onOAuthLogin){let r=n();await e.onOAuthLogin(r,t,i)}}function _e(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(B(V.pen)),U(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Z(e,t)),n}function ve(e,t,n){let r=document.createElement(`button`);return r.style.cssText=H,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(B(V.login)),U(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{K(n,()=>q(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(B(V.logout)),U(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await O(t.providerId),q(e)})()})),r}function ye(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(B(V.trash)),U(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await m(t.providerId),q(e)})()}),n}function be(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(ge(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(_e(e,t)),n.isOAuth&&s.appendChild(ve(e,t,n)),s.appendChild(ye(e,t)),r.appendChild(s),r}function xe(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=pe(),a=i.state!==`inactive`,o=me(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`,()=>$(e)),t.appendChild(s),t}function q(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(be(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`,()=>z()),i.appendChild(o),t.appendChild(i),t.appendChild(xe(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`,()=>W(e)),t.appendChild(c)}function Se(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 Ce(e,t){let n=Se(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 we(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 Te(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}=we(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 P(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 J(e,t){let n=t.providerSelect.value;if(!n)return;let r=i(n);if(!r.onOAuthLogin&&!r.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=w().some(e=>e.providerId===n),s=M(n);if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}r.requiresBaseUrl&&t.baseUrlInput.value.trim()&&E(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(r.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-BuEH8BXq.js`),i=await n();if(!i)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await r.onOAuthLoginIntercepted(i,()=>G(e),{presentDeviceCode:Te(t.oauth)})}else if(r.onOAuthLogin){let{createOAuthLauncher:t}=await import(`./oauth-service-BuEH8BXq.js`),n=t();await r.onOAuthLogin(n,()=>G(e))}}catch(e){if(!o)try{await m(n)}catch{}I.error(`OAuth login failed`,{providerId:n,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function Ee(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 De(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 Oe(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 Y(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,Ee(e,n),De(e,n),Oe(e,n)}function X(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}E(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),G(e)}function ke(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`,()=>W(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`,()=>$(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`,()=>q(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=Ce(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{J(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`,Y(o)}),Y(o),o.saveBtn.addEventListener(`click`,()=>X(e,o));let s=t=>{t.key===`Enter`&&X(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),ke(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 Q(e,t,n){R(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 Ae(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=N(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}Q(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 je(){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 $(e){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect to another browser`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,n.appendChild(i),n.appendChild(je());let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Sync URL:`,n.appendChild(a);let o=document.createElement(`input`);o.className=`dialog__input`,o.type=`text`,o.autocomplete=`off`,o.spellcheck=!1,o.placeholder=`${t}/join/<token>`,n.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,n.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let t=o.value.trim();if(!t){s.textContent=`Paste a sync URL to continue.`,s.style.display=``,o.focus();return}let n=N(window.localStorage,t);if(!n){s.textContent=F(t),s.style.display=``,o.focus();return}Q(e,n.joinUrl,c)}),n.appendChild(l),n.appendChild(c);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Back`,u.addEventListener(`click`,()=>Z(e)),n.appendChild(u),o.addEventListener(`input`,()=>{s.style.display=`none`}),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l.click()}),requestAnimationFrame(()=>o.focus())}function Me(e){return fe(`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?q(i):e?.autoJoinUrl?Ae(i,e.autoJoinUrl):e?.preferTrayJoin?$(i):Z(i),n.appendChild(r),document.body.appendChild(n)})}export{se as ACCOUNTS_KEY,re as __test__,E as addAccount,S as applyProviderDefaults,ie as clearAllSettings,oe as clearApiKey,ee as clearBaseUrl,k as clearSelectedProvider,F as describeInvalidJoinUrl,z as downloadProviders,j as exportProviders,w as getAccounts,T as getAllAvailableModels,ae as getAllExtraOAuthDomains,A as getApiKey,ne as getApiKeyForProvider,te as getApiVersionForProvider,x as getAvailableProviders,ce as getBaseUrl,M as getBaseUrlForProvider,C as getDeploymentForProvider,ue as getExtraOAuthDomains,g as getOAuthAccountInfo,i as getProviderConfig,le as getProviderModels,_ as getRawApiKeyForProvider,o as getSelectedModelId,a as getSelectedProvider,p as isModelHiddenFromPicker,O as logoutOAuthAccount,n as maskOAuthTokenWithRetry,D as migrateLegacyAuthOnlySelection,d as persistOAuthMaskViaServiceWorker,f as providerOffersLlmModels,K as reloginOAuthAccount,m as removeAccount,s as resolveCurrentModel,l as resolveModelById,u as resolveModelByShorthand,h as saveOAuthAccount,de as setApiKey,r as setBaseUrl,y as setExtraOAuthDomains,c as setExtraOAuthDomainsAsync,v as setSelectedModelId,b as setSelectedProvider,Me as showProviderSettings,L as testOnlyDispatchTrayJoinWithFailureFeedback};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-lE9AyywH.js","assets/preload-helper-Czpn1I53.js","assets/proxied-fetch-D5h5REZy.js","assets/rolldown-runtime-aKtaBQYM.js","assets/base64-DpPqYZJF.js","assets/src-CS5gSDhT.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/panel-rpc-DmJSNs0I.js","assets/wc-permissions-registry-Blyunq37.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{A as t,B as n,C as r,D as i,E as a,F as o,H as s,I as c,L as l,M as u,N as d,O as f,P as p,R as m,S as h,T as g,U as _,V as v,W as y,_ as b,a as x,b as S,c as C,d as w,f as ee,g as te,h as ne,i as T,j as E,k as D,l as re,m as ie,n as ae,o as oe,p as se,s as ce,t as le,u as O,v as k,w as ue,x as A,y as j,z as de}from"./account-store-DwSzwLW8.js";import{t as M}from"./preload-helper-Czpn1I53.js";import{t as fe}from"./logger-DDBAeTLF.js";import{i as pe}from"./src-CS5gSDhT.js";import{d as N,s as me}from"./tray-runtime-config-DquE2Rx9.js";import{n as he}from"./tray-follower-status-CyJIKXH4.js";import{n as ge}from"./clipboard-DuHpK59o.js";import{a as P}from"./telemetry-C8rZr13D.js";import{n as F}from"./tray-join-url-BIvzbiFR.js";var I=e({ACCOUNTS_KEY:()=>le,__test__:()=>ae,addAccount:()=>T,applyProviderDefaults:()=>x,clearAllSettings:()=>oe,clearApiKey:()=>ce,clearBaseUrl:()=>C,clearSelectedProvider:()=>re,describeInvalidJoinUrl:()=>F,downloadProviders:()=>z,exportProviders:()=>O,getAccounts:()=>w,getAllAvailableModels:()=>ee,getAllExtraOAuthDomains:()=>se,getApiKey:()=>ie,getApiKeyForProvider:()=>ne,getApiVersionForProvider:()=>te,getAvailableProviders:()=>b,getBaseUrl:()=>k,getBaseUrlForProvider:()=>j,getDeploymentForProvider:()=>S,getExtraOAuthDomains:()=>A,getOAuthAccountInfo:()=>h,getProviderConfig:()=>r,getProviderModels:()=>ue,getRawApiKeyForProvider:()=>g,getSelectedModelId:()=>a,getSelectedProvider:()=>i,isModelHiddenFromPicker:()=>f,logoutOAuthAccount:()=>D,maskOAuthTokenWithRetry:()=>t,migrateLegacyAuthOnlySelection:()=>E,persistOAuthMaskViaServiceWorker:()=>u,providerOffersLlmModels:()=>d,reloginOAuthAccount:()=>K,removeAccount:()=>p,resolveCurrentModel:()=>o,resolveModelById:()=>c,resolveModelByShorthand:()=>l,saveOAuthAccount:()=>m,setApiKey:()=>de,setBaseUrl:()=>n,setExtraOAuthDomains:()=>v,setExtraOAuthDomainsAsync:()=>s,setSelectedModelId:()=>_,setSelectedProvider:()=>y,showProviderSettings:()=>$,testOnlyDispatchTrayJoinWithFailureFeedback:()=>_e}),L=fe(`provider-settings`);function _e(e,t){return R(e,t)}function R(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){L.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 z(){let e=JSON.stringify(O(),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 ve(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function B(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 V={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`]},H=`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 U(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 W(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function G(e){e.options?.startInAddAccount?W(e):q(e)}function ye(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=ve(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function K(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await M(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-lE9AyywH.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),i={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await r();n&&await e.onOAuthLoginIntercepted(n,t,i)}else if(e.onOAuthLogin){let r=n();await e.onOAuthLogin(r,t,i)}}function be(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(B(V.pen)),U(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>X(e,t)),n}function xe(e,t,n){let r=document.createElement(`button`);return r.style.cssText=H,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(B(V.login)),U(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{K(n,()=>q(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(B(V.logout)),U(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await D(t.providerId),q(e)})()})),r}function Se(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(B(V.trash)),U(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await p(t.providerId),q(e)})()}),n}function Ce(e,t){let n=r(t.providerId),i=document.createElement(`div`);i.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(ye(t)),i.appendChild(a);let s=document.createElement(`div`);return s.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,s.appendChild(be(e,t)),n.isOAuth&&s.appendChild(xe(e,t,n)),s.appendChild(Se(e,t)),i.appendChild(s),i}function we(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=he(),a=i.state!==`inactive`,o=me(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 q(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(Ce(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`,()=>X(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`,()=>z()),i.appendChild(o),t.appendChild(i),t.appendChild(we(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`,()=>W(e)),t.appendChild(c)}function Te(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=r(t.providerId),i=document.createElement(`option`);return i.value=t.providerId,i.textContent=e.name,n.appendChild(i),n.disabled=!0,n.style.opacity=`0.7`,n}let i=document.createElement(`option`);i.value=``,i.textContent=`Select a provider…`,i.disabled=!0,i.selected=!0,i.hidden=!0,n.appendChild(i);let a=new Set(w().map(e=>e.providerId)),o=[...b()].sort((e,t)=>r(e).name.localeCompare(r(t).name));for(let t of o){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!d(t))continue;let i=document.createElement(`option`);i.value=t,i.textContent=r(t).name,n.appendChild(i)}return n}function Ee(e,t){let n=Te(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 De(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 Oe(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}=De(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 ge(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 ke(e,t){let n=t.providerSelect.value;if(!n)return;let i=r(n);if(!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=w().some(e=>e.providerId===n),s=j(n);if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}i.requiresBaseUrl&&t.baseUrlInput.value.trim()&&T(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await M(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-lE9AyywH.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),r=await n();if(!r)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await i.onOAuthLoginIntercepted(r,()=>G(e),{presentDeviceCode:Oe(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await M(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-lE9AyywH.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),n=t();await i.onOAuthLogin(n,()=>G(e))}}catch(e){if(!o)try{await p(n)}catch{}L.error(`OAuth login failed`,{providerId:n,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function Ae(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 je(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 Me(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 J(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=r(t);e.providerDesc.textContent=n.description,Ae(e,n),je(e,n),Me(e,n)}function Y(e,t){let n=t.providerSelect.value;if(!n)return;let i=r(n),a=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(i.requiresApiKey&&t.apiKeyInput.value.trim().length<5){a(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()){a(`Base URL is required for this provider.`,t.baseUrlInput);return}if(i.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),G(e)}function Ne(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`,()=>W(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`,()=>q(e)),n.appendChild(t)}}function X(e,t){let{dialog:n}=e;n.innerHTML=``;let i=document.createElement(`div`);i.className=`dialog__title`,i.textContent=t?`Edit Account`:`Add Account`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Provider:`,n.appendChild(a);let o=Ee(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{ke(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`,J(o)}),J(o),o.saveBtn.addEventListener(`click`,()=>Y(e,o));let s=t=>{t.key===`Enter`&&Y(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),Ne(e,!!t),requestAnimationFrame(()=>{let e=o.providerSelect.value;if(!e)return;let t=r(e);t.requiresApiKey?o.apiKeyInput.focus():t.requiresBaseUrl&&o.baseUrlInput.focus()})}function Z(e,t,n){R(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 Pe(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=N(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}Z(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`,()=>X(e)),n.appendChild(c)}function Fe(){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(Fe());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=`${pe}/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=N(window.localStorage,t);if(!n){o.textContent=F(t),o.style.display=``,a.focus();return}Z(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`,()=>X(e)),t.appendChild(l),a.addEventListener(`input`,()=>{o.style.display=`none`}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()}),requestAnimationFrame(()=>a.focus())}function $(e){return P(`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?X(i):w().length>0?q(i):e?.autoJoinUrl?Pe(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):X(i),n.appendChild(r),document.body.appendChild(n)})}export{$ as n,I as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-Dk3L2UWh.js","assets/preload-helper-Czpn1I53.js","assets/proxied-fetch-CfcFb0B0.js","assets/rolldown-runtime-aKtaBQYM.js","assets/base64-DpPqYZJF.js","assets/src-DoFhVmQT.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/panel-rpc-DmJSNs0I.js","assets/wc-permissions-registry-Blyunq37.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{A as t,B as n,C as r,D as i,E as a,F as o,H as s,I as c,L as l,M as u,N as d,O as f,P as p,R as m,S as h,T as g,U as _,V as v,W as y,_ as b,a as x,b as S,c as C,d as w,f as ee,g as te,h as ne,i as T,j as E,k as D,l as re,m as ie,n as ae,o as oe,p as se,s as ce,t as le,u as O,v as k,w as ue,x as A,y as j,z as de}from"./account-store-CJqBAm1f.js";import{t as M}from"./preload-helper-Czpn1I53.js";import{t as fe}from"./logger-DDBAeTLF.js";import{l as pe}from"./src-DoFhVmQT.js";import{d as N,s as me}from"./tray-runtime-config-9kTxza5l.js";import{n as he}from"./tray-follower-status-CyJIKXH4.js";import{n as ge}from"./clipboard-DuHpK59o.js";import{a as P}from"./telemetry-Dxrv_mDE.js";import{n as F}from"./tray-join-url-BIvzbiFR.js";var I=e({ACCOUNTS_KEY:()=>le,__test__:()=>ae,addAccount:()=>T,applyProviderDefaults:()=>x,clearAllSettings:()=>oe,clearApiKey:()=>ce,clearBaseUrl:()=>C,clearSelectedProvider:()=>re,describeInvalidJoinUrl:()=>F,downloadProviders:()=>z,exportProviders:()=>O,getAccounts:()=>w,getAllAvailableModels:()=>ee,getAllExtraOAuthDomains:()=>se,getApiKey:()=>ie,getApiKeyForProvider:()=>ne,getApiVersionForProvider:()=>te,getAvailableProviders:()=>b,getBaseUrl:()=>k,getBaseUrlForProvider:()=>j,getDeploymentForProvider:()=>S,getExtraOAuthDomains:()=>A,getOAuthAccountInfo:()=>h,getProviderConfig:()=>r,getProviderModels:()=>ue,getRawApiKeyForProvider:()=>g,getSelectedModelId:()=>a,getSelectedProvider:()=>i,isModelHiddenFromPicker:()=>f,logoutOAuthAccount:()=>D,maskOAuthTokenWithRetry:()=>t,migrateLegacyAuthOnlySelection:()=>E,persistOAuthMaskViaServiceWorker:()=>u,providerOffersLlmModels:()=>d,reloginOAuthAccount:()=>K,removeAccount:()=>p,resolveCurrentModel:()=>o,resolveModelById:()=>c,resolveModelByShorthand:()=>l,saveOAuthAccount:()=>m,setApiKey:()=>de,setBaseUrl:()=>n,setExtraOAuthDomains:()=>v,setExtraOAuthDomainsAsync:()=>s,setSelectedModelId:()=>_,setSelectedProvider:()=>y,showProviderSettings:()=>$,testOnlyDispatchTrayJoinWithFailureFeedback:()=>_e}),L=fe(`provider-settings`);function _e(e,t){return R(e,t)}function R(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){L.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 z(){let e=JSON.stringify(O(),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 ve(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function B(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 V={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`]},H=`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 U(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 W(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function G(e){e.options?.startInAddAccount?W(e):q(e)}function ye(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=ve(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function K(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await M(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-Dk3L2UWh.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),i={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await r();n&&await e.onOAuthLoginIntercepted(n,t,i)}else if(e.onOAuthLogin){let r=n();await e.onOAuthLogin(r,t,i)}}function be(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(B(V.pen)),U(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>X(e,t)),n}function xe(e,t,n){let r=document.createElement(`button`);return r.style.cssText=H,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(B(V.login)),U(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{K(n,()=>q(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(B(V.logout)),U(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await D(t.providerId),q(e)})()})),r}function Se(e,t){let n=document.createElement(`button`);return n.style.cssText=H,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(B(V.trash)),U(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await p(t.providerId),q(e)})()}),n}function Ce(e,t){let n=r(t.providerId),i=document.createElement(`div`);i.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(ye(t)),i.appendChild(a);let s=document.createElement(`div`);return s.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,s.appendChild(be(e,t)),n.isOAuth&&s.appendChild(xe(e,t,n)),s.appendChild(Se(e,t)),i.appendChild(s),i}function we(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=he(),a=i.state!==`inactive`,o=me(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 q(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(Ce(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`,()=>X(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`,()=>z()),i.appendChild(o),t.appendChild(i),t.appendChild(we(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`,()=>W(e)),t.appendChild(c)}function Te(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=r(t.providerId),i=document.createElement(`option`);return i.value=t.providerId,i.textContent=e.name,n.appendChild(i),n.disabled=!0,n.style.opacity=`0.7`,n}let i=document.createElement(`option`);i.value=``,i.textContent=`Select a provider…`,i.disabled=!0,i.selected=!0,i.hidden=!0,n.appendChild(i);let a=new Set(w().map(e=>e.providerId)),o=[...b()].sort((e,t)=>r(e).name.localeCompare(r(t).name));for(let t of o){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!d(t))continue;let i=document.createElement(`option`);i.value=t,i.textContent=r(t).name,n.appendChild(i)}return n}function Ee(e,t){let n=Te(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 De(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 Oe(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}=De(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 ge(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 ke(e,t){let n=t.providerSelect.value;if(!n)return;let i=r(n);if(!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=w().some(e=>e.providerId===n),s=j(n);if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}i.requiresBaseUrl&&t.baseUrlInput.value.trim()&&T(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await M(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-Dk3L2UWh.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),r=await n();if(!r)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await i.onOAuthLoginIntercepted(r,()=>G(e),{presentDeviceCode:Oe(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await M(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-Dk3L2UWh.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),n=t();await i.onOAuthLogin(n,()=>G(e))}}catch(e){if(!o)try{await p(n)}catch{}L.error(`OAuth login failed`,{providerId:n,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function Ae(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 je(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 Me(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 J(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=r(t);e.providerDesc.textContent=n.description,Ae(e,n),je(e,n),Me(e,n)}function Y(e,t){let n=t.providerSelect.value;if(!n)return;let i=r(n),a=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(i.requiresApiKey&&t.apiKeyInput.value.trim().length<5){a(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()){a(`Base URL is required for this provider.`,t.baseUrlInput);return}if(i.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),G(e)}function Ne(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`,()=>W(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`,()=>q(e)),n.appendChild(t)}}function X(e,t){let{dialog:n}=e;n.innerHTML=``;let i=document.createElement(`div`);i.className=`dialog__title`,i.textContent=t?`Edit Account`:`Add Account`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Provider:`,n.appendChild(a);let o=Ee(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{ke(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`,J(o)}),J(o),o.saveBtn.addEventListener(`click`,()=>Y(e,o));let s=t=>{t.key===`Enter`&&Y(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),Ne(e,!!t),requestAnimationFrame(()=>{let e=o.providerSelect.value;if(!e)return;let t=r(e);t.requiresApiKey?o.apiKeyInput.focus():t.requiresBaseUrl&&o.baseUrlInput.focus()})}function Z(e,t,n){R(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 Pe(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=N(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}Z(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`,()=>X(e)),n.appendChild(c)}function Fe(){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(Fe());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=`${pe}/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=N(window.localStorage,t);if(!n){o.textContent=F(t),o.style.display=``,a.focus();return}Z(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`,()=>X(e)),t.appendChild(l),a.addEventListener(`input`,()=>{o.style.display=`none`}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()}),requestAnimationFrame(()=>a.focus())}function $(e){return P(`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?X(i):w().length>0?q(i):e?.autoJoinUrl?Pe(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):X(i),n.appendChild(r),document.body.appendChild(n)})}export{$ as n,I as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./store-ByY8CO32.js";export{e as readMcpAuthEntries};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-DC3MEAD4.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/types-idfTVsM8.js","assets/backend-local-smcj-_Ox.js","assets/tool-ui-DfXu6quJ.js","assets/picker-approval-CdWaB1mR.js","assets/mount-picker-popup-Bs1o43Z5.js","assets/rolldown-runtime-aKtaBQYM.js","assets/picker-popup-BvzmBsGL.js","assets/runtime-env-DH4NDw4t.js","assets/mount-table-store-CfQUN_2R.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{t as n}from"./global-db-CbuLl-zx.js";import{t as r}from"./types-idfTVsM8.js";var i=t(`mcp-store`),a=`/workspace/.mcp/servers.json`,o=1,s=null,c=null;async function l(){return s||=await e(()=>import(`./fs-DC3MEAD4.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),r=await t.create({dbName:n});return c={instance:r,dbName:n},r}function d(){return{version:o,servers:{}}}function f(e){if(!e||typeof e!=`object`)return d();let t=e,n=typeof t.version==`number`?t.version:o,r={};if(t.servers&&typeof t.servers==`object`)for(let[e,n]of Object.entries(t.servers)){if(!n||typeof n!=`object`)continue;let t=n;typeof t.url==`string`&&(r[e]=t)}return{version:n,servers:r}}async function p(e){try{let t=await(await u(e)).readFile(a,{encoding:`utf-8`});try{return f(JSON.parse(t))}catch(e){return i.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof r&&e.code===`ENOENT`||i.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function m(e){return(await p(e)).servers}async function h(){let e=await m(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{h as readMcpAuthEntries};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-BI3-y-dt.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/types-idfTVsM8.js","assets/backend-local-smcj-_Ox.js","assets/tool-ui-DfXu6quJ.js","assets/picker-approval-CdWaB1mR.js","assets/mount-picker-popup-Bs1o43Z5.js","assets/rolldown-runtime-aKtaBQYM.js","assets/picker-popup-BvzmBsGL.js","assets/runtime-env-DH4NDw4t.js","assets/mount-table-store-CfQUN_2R.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{t as n}from"./global-db-CbuLl-zx.js";import{t as r}from"./types-idfTVsM8.js";var i=t(`mcp-store`),a=`/workspace/.mcp/servers.json`,o=1,s=null,c=null;async function l(){return s||=await e(()=>import(`./fs-BI3-y-dt.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),r=await t.create({dbName:n});return c={instance:r,dbName:n},r}function d(){return{version:o,servers:{}}}function f(e){if(!e||typeof e!=`object`)return d();let t=e,n=typeof t.version==`number`?t.version:o,r={};if(t.servers&&typeof t.servers==`object`)for(let[e,n]of Object.entries(t.servers)){if(!n||typeof n!=`object`)continue;let t=n;typeof t.url==`string`&&(r[e]=t)}return{version:n,servers:r}}async function p(e){try{let t=await(await u(e)).readFile(a,{encoding:`utf-8`});try{return f(JSON.parse(t))}catch(e){return i.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof r&&e.code===`ENOENT`||i.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function m(e){return(await p(e)).servers}async function h(){let e=await m(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{h as readMcpAuthEntries};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";var t={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},n=e({allProviderConfigs:()=>u,getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>l,shouldIncludeProvider:()=>i,unregisterProviderConfig:()=>m});const r=Object.assign({"/packages/dev-tools/providers.build.json":t})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function i(e){let{include:t,exclude:n}=r;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}const a=Object.assign({"./built-in/azure-ai-foundry.ts":()=>import(`./azure-ai-foundry-CzkPLAhp.js`),"./built-in/azure-openai.ts":()=>import(`./azure-openai-CjkdyGG4.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-BO4bvAKs.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-DpBDM1Dm.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-ChyPg00A.js`),"/packages/webapp/providers/cerebras.ts":()=>import(`./cerebras-CvSC_Q2O.js`),"/packages/webapp/providers/github-copilot.ts":()=>import(`./github-copilot-CBv0T4_S.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-HKW-k0Oh.js`),"/packages/webapp/providers/openai-codex.ts":()=>import(`./openai-codex-CZit4W_R.js`),"/packages/webapp/providers/openrouter-models.ts":()=>import(`./openrouter-models-Bu1Cy5AD.js`),"/packages/webapp/providers/openrouter-oauth.ts":()=>import(`./openrouter-oauth-BGOdgzqm.js`),"/packages/webapp/providers/openrouter.ts":()=>import(`./openrouter-XorTuzAh.js`),"/packages/webapp/providers/xai-grok-errors.ts":()=>import(`./xai-grok-errors-ByEMMSoz.js`),"/packages/webapp/providers/xai-grok.ts":()=>import(`./xai-grok-QulUPZS-.js`)}),s=new Map;let c=null;function l(){return c||(c=(async()=>{for(let[e,t]of Object.entries(a)){let e=await t();e.config&&i(e.config.id)&&(s.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(o)){let e=await t();e.config&&(s.set(e.config.id,e.config),e.register?.())}})(),c)}const u=s;function d(e){return s.get(e)}function f(){return[...s.keys()]}function p(e){s.set(e.id,e)}function m(e){return s.delete(e)}export{l as a,p as i,f as n,i as o,n as r,m as s,d as t};
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";var t={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},n=e({allProviderConfigs:()=>u,getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>l,shouldIncludeProvider:()=>i,unregisterProviderConfig:()=>m});const r=Object.assign({"/packages/dev-tools/providers.build.json":t})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function i(e){let{include:t,exclude:n}=r;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}const a=Object.assign({"./built-in/azure-ai-foundry.ts":()=>import(`./azure-ai-foundry-CzkPLAhp.js`),"./built-in/azure-openai.ts":()=>import(`./azure-openai-DyqeeHYG.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-BO4bvAKs.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-Cys4QAHg.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-lvezht3s.js`),"/packages/webapp/providers/cerebras.ts":()=>import(`./cerebras-Di6jTcHx.js`),"/packages/webapp/providers/github-copilot.ts":()=>import(`./github-copilot-B3YCnypU.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-CsLyOpIY.js`),"/packages/webapp/providers/openai-codex.ts":()=>import(`./openai-codex-DuyyDpZA.js`),"/packages/webapp/providers/openrouter-models.ts":()=>import(`./openrouter-models-Bu1Cy5AD.js`),"/packages/webapp/providers/openrouter-oauth.ts":()=>import(`./openrouter-oauth-iVwMGpbk.js`),"/packages/webapp/providers/openrouter.ts":()=>import(`./openrouter-BcPlZu_G.js`),"/packages/webapp/providers/xai-grok-errors.ts":()=>import(`./xai-grok-errors-ByEMMSoz.js`),"/packages/webapp/providers/xai-grok.ts":()=>import(`./xai-grok-BuiKJ83J.js`)}),s=new Map;let c=null;function l(){return c||(c=(async()=>{for(let[e,t]of Object.entries(a)){let e=await t();e.config&&i(e.config.id)&&(s.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(o)){let e=await t();e.config&&(s.set(e.config.id,e.config),e.register?.())}})(),c)}const u=s;function d(e){return s.get(e)}function f(){return[...s.keys()]}function p(e){s.set(e.id,e)}function m(e){return s.delete(e)}export{l as a,p as i,f as n,i as o,n as r,m as s,d as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-DMNa-Eup.js","assets/account-store-DwSzwLW8.js","assets/rolldown-runtime-aKtaBQYM.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-D5h5REZy.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CptRwAX3.js","assets/secrets-bridge-client-D6nwnBvr.js","assets/port-bridge-client-CoFZLSYm.js","assets/tool-ui-DfXu6quJ.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/openai-BxFF4GUL.js","assets/local-llm-DcKgaorK.js","assets/legacy-api-aliases-IllWZ-uu.js","assets/adobe-h2gWq2z2.js","assets/provider-settings-D6FC6-Ws.js","assets/tray-runtime-config-DquE2Rx9.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-CyJIKXH4.js","assets/clipboard-DuHpK59o.js","assets/telemetry-C8rZr13D.js","assets/tray-join-url-BIvzbiFR.js","assets/silent-renew-backoff-Dzkpjjro.js","assets/bridge-launch-params-jegYRGJ6.js","assets/electron-overlay-route-CjT6k9Df.js","assets/oauth-service-lE9AyywH.js","assets/wc-permissions-registry-Blyunq37.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-B0gvSD27.js","assets/github-copilot-C7lsRXxS.js","assets/github-mH266f8L.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-D0W343kX.js","assets/openrouter-models-CfnkMx5-.js","assets/openrouter-oauth-BLGBWXoP.js","assets/openrouter-D4iz9RSI.js","assets/xai-grok-CrEqywR8.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";var n={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},r=e({getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>u,shouldIncludeProvider:()=>a}),i=Object.assign({"/packages/dev-tools/providers.build.json":n})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function a(e){let{include:t,exclude:n}=i;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var o=Object.assign({"./built-in/azure-ai-foundry.ts":()=>t(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>t(()=>import(`./azure-openai-DMNa-Eup.js`),__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])),"./built-in/bedrock-camp.ts":()=>t(()=>import(`./bedrock-camp-CVignIdH.js`).then(e=>e.n),__vite__mapDeps([22,2,6,5,3,4,7,8,9,23])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-DcKgaorK.js`),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-h2gWq2z2.js`),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,35,36,37,38,39,40])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-B0gvSD27.js`),__vite__mapDeps([41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-C7lsRXxS.js`),__vite__mapDeps([42,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-mH266f8L.js`),__vite__mapDeps([43,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30,28,31,32,33,34,35,36,37,38,39,44])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-D0W343kX.js`),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-CfnkMx5-.js`),__vite__mapDeps([46,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-BLGBWXoP.js`),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,29,30,31,32,33,34])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-D4iz9RSI.js`),__vite__mapDeps([48,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,46,47])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-CrEqywR8.js`),__vite__mapDeps([49,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,50]))}),c=new Map,l=null;function u(){return l||(l=(async()=>{for(let[e,t]of Object.entries(o)){let e=await t();e.config&&a(e.config.id)&&(c.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(s)){let e=await t();e.config&&(c.set(e.config.id,e.config),e.register?.())}})(),l)}function d(e){return c.get(e)}function f(){return[...c.keys()]}function p(e){c.set(e.id,e)}export{u as a,p as i,f as n,a as o,r,d as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-BD60xdeq.js","assets/account-store-CJqBAm1f.js","assets/rolldown-runtime-aKtaBQYM.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-DoFhVmQT.js","assets/proxied-fetch-CfcFb0B0.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-Baeul5rD.js","assets/secrets-bridge-client-CLRo0NLf.js","assets/port-bridge-client-DdolH4cw.js","assets/tool-ui-DfXu6quJ.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/openai-BxFF4GUL.js","assets/local-llm-BdGGSRtU.js","assets/legacy-api-aliases-IllWZ-uu.js","assets/adobe-j3AP8U12.js","assets/provider-settings-DnRChWz9.js","assets/tray-runtime-config-9kTxza5l.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-CyJIKXH4.js","assets/clipboard-DuHpK59o.js","assets/telemetry-Dxrv_mDE.js","assets/tray-join-url-BIvzbiFR.js","assets/silent-renew-backoff-CqD4WRin.js","assets/bridge-launch-params-QY3l_LbM.js","assets/electron-overlay-route-CjT6k9Df.js","assets/oauth-service-Dk3L2UWh.js","assets/wc-permissions-registry-Blyunq37.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-B0L70LLb.js","assets/github-copilot-CLH7n3QY.js","assets/github-DdtaZi7X.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-rpYkFAL8.js","assets/openrouter-models-CfnkMx5-.js","assets/openrouter-oauth-CTIG_xj5.js","assets/openrouter-DHTAGWtd.js","assets/xai-grok-BxZVhpe_.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";var n={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},r=e({getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>u,shouldIncludeProvider:()=>a}),i=Object.assign({"/packages/dev-tools/providers.build.json":n})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function a(e){let{include:t,exclude:n}=i;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var o=Object.assign({"./built-in/azure-ai-foundry.ts":()=>t(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>t(()=>import(`./azure-openai-BD60xdeq.js`),__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])),"./built-in/bedrock-camp.ts":()=>t(()=>import(`./bedrock-camp-CVignIdH.js`).then(e=>e.n),__vite__mapDeps([22,2,6,5,3,4,7,8,9,23])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-BdGGSRtU.js`),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-j3AP8U12.js`),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,35,36,37,38,39,40])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-B0L70LLb.js`),__vite__mapDeps([41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-CLH7n3QY.js`),__vite__mapDeps([42,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-DdtaZi7X.js`),__vite__mapDeps([43,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30,28,31,32,33,34,35,36,37,38,39,44])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-rpYkFAL8.js`),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-CfnkMx5-.js`),__vite__mapDeps([46,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-CTIG_xj5.js`),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,29,30,31,32,33,34])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-DHTAGWtd.js`),__vite__mapDeps([48,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,46,47])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-BxZVhpe_.js`),__vite__mapDeps([49,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26,28,29,30,31,32,33,34,50]))}),c=new Map,l=null;function u(){return l||(l=(async()=>{for(let[e,t]of Object.entries(o)){let e=await t();e.config&&a(e.config.id)&&(c.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(s)){let e=await t();e.config&&(c.set(e.config.id,e.config),e.register?.())}})(),l)}function d(e){return c.get(e)}function f(){return[...c.keys()]}function p(e){c.set(e.id,e)}export{u as a,p as i,f as n,a as o,r,d as t};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DmJSNs0I.js","assets/rolldown-runtime-aKtaBQYM.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";import{n,t as r}from"./base64-DpPqYZJF.js";import"./src-CS5gSDhT.js";import{n as i}from"./runtime-env-DH4NDw4t.js";import{t as a}from"./fetch-body-D2PwksUW.js";function o(e){return e.headers.get(`x-proxy-error`)===`1`}async function s(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return c(n,t)}function c(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}var l=new Map,u=new Map;function d(e,t){l.set(e,t),setTimeout(()=>l.delete(e),1e4)}function f(e,t){u.set(e,t),setTimeout(()=>u.delete(e),1e4)}function p(e){if(!e)return{};let t={};for(let[n,r]of Object.entries(e)){let e=n.toLowerCase();e===`cookie`?t[`X-Proxy-Cookie`]=r:e===`origin`?t[`X-Proxy-Origin`]=r:e===`referer`?t[`X-Proxy-Referer`]=r:e.startsWith(`proxy-`)?t[`X-Proxy-${n}`]=r:t[n]=r}return t}function m(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`x-proxy-set-cookie`?t[`set-cookie`]=r:t[n]=r;return t}function h(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}var g=e({apiHeaders:()=>O,collectViaExtensionDelegate:()=>H,createProxiedFetch:()=>U,decodeForbiddenResponseHeaders:()=>F,encodeForbiddenRequestHeaders:()=>P,getExtensionDelegateId:()=>E,getLocalApiBaseUrl:()=>S,headersToRecord:()=>M,isTextContentType:()=>A,prepareRequestBody:()=>N,readResponseBody:()=>j,resolveApiUrl:()=>D,setBridgeToken:()=>C,setExtensionDelegateId:()=>T,setLocalApiBaseUrl:()=>x}),_=32*1024*1024,v=new Set([101,103,204,205,304]),y=null,b=null;function x(e){if(e===null||e===``){y=null;return}y=e.replace(/\/+$/,``)}function S(){return y}function C(e){b=e===null||e===``?null:e}var w=null;function T(e){w=e===null||e===``?null:e}function E(){return w}function D(e){return y?`${y}${e}`:e}function O(e){let t={};if(b&&y&&(t[`X-Bridge-Token`]=b),e)for(let n of Object.keys(e))t[n]=e[n];return t}function k(){return D(`/api/fetch-proxy`)}function A(e){if(!e)return!0;let t=e.toLowerCase();return t.startsWith(`text/`)||t.includes(`json`)||t.includes(`xml`)||t.includes(`javascript`)||t.includes(`ecmascript`)||t.includes(`html`)||t.includes(`css`)||t.includes(`svg`)}async function j(e,t){let n=e.headers.get(`content-type`)??``,r=await e.arrayBuffer(),i=new Uint8Array(r);if(!A(n))if(t)f(t,i);else{let e=``;for(let t=0;t<i.length;t+=32768)e+=String.fromCharCode(...i.subarray(t,t+32768));d(e,i)}return i}var M=h;function N(e,t){if(e){if(!A(Object.entries(t??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``)){let t=a(e);return new Blob([t])}return e}}var P=p,F=m,I=r;function L(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}async function R(e,t,n){let r=new Headers;for(let[t,n]of Object.entries(e.headers))r.set(t,String(n));let i=v.has(e.status)?null:t,a=await j(new Response(i,{status:e.status,statusText:e.statusText,headers:r}),n);return{status:e.status,statusText:e.statusText,headers:F(e.headers),body:a,url:n}}async function z(e){let t=M(e?.headers),r=e?.method??`GET`,i=e?.body?N(e.body,t):void 0,a=P(t),o,s=!1;if(i!==void 0){let e=i instanceof Uint8Array?i:new Uint8Array(await new Response(i).arrayBuffer());e.byteLength>_?s=!0:o=n(e)}return{method:r,transportHeaders:a,bodyBase64:o,requestBodyTooLarge:s}}async function B(e,t,n){let{method:r,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}=await z(n),s=e();return new Promise((e,n)=>{let c=null,l=!1,u=[];s.onMessage.addListener(t=>{let r=t;if(r.type===`response-head`)c={status:r.status,statusText:r.statusText,headers:r.headers};else if(r.type===`response-chunk`)u.push(I(r.dataBase64));else if(r.type===`response-end`){if(l=!0,!c){n(Error(`fetch-proxy: response-end before response-head`));return}e({head:c,body:L(u).buffer}),s.disconnect()}else r.type===`response-error`&&(l=!0,n(Error(r.error)),s.disconnect())}),s.onDisconnect.addListener(()=>{l||n(Error(c?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),s.postMessage({type:`request`,url:t,method:r,headers:i,bodyBase64:a,requestBodyTooLarge:o})})}async function V(e,t){let{head:n,body:r}=await B(()=>chrome.runtime.connect({name:`fetch-proxy.fetch`}),e,t);return R(n,new Uint8Array(r),e)}async function H(e,t){let n=w;if(!n)throw Error(`proxied-fetch: no extension delegate id configured`);let r=chrome.runtime.connect;return B(()=>r(n,{name:`fetch-proxy.fetch`}),e,t)}function U(){return i()?V:typeof chrome<`u`&&typeof chrome?.runtime?.connect==`function`&&w?async(e,t)=>{let{head:n,body:r}=await H(e,t);return R(n,new Uint8Array(r),e)}:typeof chrome>`u`&&w?async(e,n)=>{let{getPanelRpcClient:r}=await t(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DmJSNs0I.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1])),i=r();if(!i)throw Error(`proxied-fetch: panel-RPC client unavailable in worker realm`);let a=n?.method??`GET`,o=M(n?.headers)??{},{head:s,body:c}=await i.call(`proxied-fetch`,{url:e,method:a,headers:o,body:n?.body},{timeoutMs:12e4});return R(s,new Uint8Array(c),e)}:async(e,t)=>{let n=t?.method??`GET`,r=O({...P(M(t?.headers)),"X-Target-URL":e}),i={method:n,headers:r,cache:`no-store`};t?.body&&![`GET`,`HEAD`].includes(n)&&(i.body=N(t.body,r));let a=await fetch(k(),i);if(o(a))throw Error(await s(a));let c=await j(a,e),l={};a.headers.forEach((e,t)=>{l[t]=e});let u=F(l);return{status:a.status,statusText:a.statusText,headers:u,body:c,url:e}}}export{g as a,T as c,s as d,S as i,x as l,U as n,D as o,E as r,C as s,O as t,o as u};
2
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";import{n,t as r}from"./base64-DpPqYZJF.js";import"./src-DoFhVmQT.js";import{n as i}from"./runtime-env-DH4NDw4t.js";import{t as a}from"./fetch-body-D2PwksUW.js";function o(e){return e.headers.get(`x-proxy-error`)===`1`}async function s(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return c(n,t)}function c(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}var l=new Map,u=new Map;function d(e,t){l.set(e,t),setTimeout(()=>l.delete(e),1e4)}function f(e,t){u.set(e,t),setTimeout(()=>u.delete(e),1e4)}function p(e){if(!e)return{};let t={};for(let[n,r]of Object.entries(e)){let e=n.toLowerCase();e===`cookie`?t[`X-Proxy-Cookie`]=r:e===`origin`?t[`X-Proxy-Origin`]=r:e===`referer`?t[`X-Proxy-Referer`]=r:e.startsWith(`proxy-`)?t[`X-Proxy-${n}`]=r:t[n]=r}return t}function m(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`x-proxy-set-cookie`?t[`set-cookie`]=r:t[n]=r;return t}function h(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}var g=e({apiHeaders:()=>O,collectViaExtensionDelegate:()=>H,createProxiedFetch:()=>U,decodeForbiddenResponseHeaders:()=>F,encodeForbiddenRequestHeaders:()=>P,getExtensionDelegateId:()=>E,getLocalApiBaseUrl:()=>S,headersToRecord:()=>M,isTextContentType:()=>A,prepareRequestBody:()=>N,readResponseBody:()=>j,resolveApiUrl:()=>D,setBridgeToken:()=>C,setExtensionDelegateId:()=>T,setLocalApiBaseUrl:()=>x}),_=32*1024*1024,v=new Set([101,103,204,205,304]),y=null,b=null;function x(e){if(e===null||e===``){y=null;return}y=e.replace(/\/+$/,``)}function S(){return y}function C(e){b=e===null||e===``?null:e}var w=null;function T(e){w=e===null||e===``?null:e}function E(){return w}function D(e){return y?`${y}${e}`:e}function O(e){let t={};if(b&&y&&(t[`X-Bridge-Token`]=b),e)for(let n of Object.keys(e))t[n]=e[n];return t}function k(){return D(`/api/fetch-proxy`)}function A(e){if(!e)return!0;let t=e.toLowerCase();return t.startsWith(`text/`)||t.includes(`json`)||t.includes(`xml`)||t.includes(`javascript`)||t.includes(`ecmascript`)||t.includes(`html`)||t.includes(`css`)||t.includes(`svg`)}async function j(e,t){let n=e.headers.get(`content-type`)??``,r=await e.arrayBuffer(),i=new Uint8Array(r);if(!A(n))if(t)f(t,i);else{let e=``;for(let t=0;t<i.length;t+=32768)e+=String.fromCharCode(...i.subarray(t,t+32768));d(e,i)}return i}var M=h;function N(e,t){if(e){if(!A(Object.entries(t??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``)){let t=a(e);return new Blob([t])}return e}}var P=p,F=m,I=r;function L(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}async function R(e,t,n){let r=new Headers;for(let[t,n]of Object.entries(e.headers))r.set(t,String(n));let i=v.has(e.status)?null:t,a=await j(new Response(i,{status:e.status,statusText:e.statusText,headers:r}),n);return{status:e.status,statusText:e.statusText,headers:F(e.headers),body:a,url:n}}async function z(e){let t=M(e?.headers),r=e?.method??`GET`,i=e?.body?N(e.body,t):void 0,a=P(t),o,s=!1;if(i!==void 0){let e=i instanceof Uint8Array?i:new Uint8Array(await new Response(i).arrayBuffer());e.byteLength>_?s=!0:o=n(e)}return{method:r,transportHeaders:a,bodyBase64:o,requestBodyTooLarge:s}}async function B(e,t,n){let{method:r,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}=await z(n),s=e();return new Promise((e,n)=>{let c=null,l=!1,u=[];s.onMessage.addListener(t=>{let r=t;if(r.type===`response-head`)c={status:r.status,statusText:r.statusText,headers:r.headers};else if(r.type===`response-chunk`)u.push(I(r.dataBase64));else if(r.type===`response-end`){if(l=!0,!c){n(Error(`fetch-proxy: response-end before response-head`));return}e({head:c,body:L(u).buffer}),s.disconnect()}else r.type===`response-error`&&(l=!0,n(Error(r.error)),s.disconnect())}),s.onDisconnect.addListener(()=>{l||n(Error(c?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),s.postMessage({type:`request`,url:t,method:r,headers:i,bodyBase64:a,requestBodyTooLarge:o})})}async function V(e,t){let{head:n,body:r}=await B(()=>chrome.runtime.connect({name:`fetch-proxy.fetch`}),e,t);return R(n,new Uint8Array(r),e)}async function H(e,t){let n=w;if(!n)throw Error(`proxied-fetch: no extension delegate id configured`);let r=chrome.runtime.connect;return B(()=>r(n,{name:`fetch-proxy.fetch`}),e,t)}function U(){return i()?V:typeof chrome<`u`&&typeof chrome?.runtime?.connect==`function`&&w?async(e,t)=>{let{head:n,body:r}=await H(e,t);return R(n,new Uint8Array(r),e)}:typeof chrome>`u`&&w?async(e,n)=>{let{getPanelRpcClient:r}=await t(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DmJSNs0I.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1])),i=r();if(!i)throw Error(`proxied-fetch: panel-RPC client unavailable in worker realm`);let a=n?.method??`GET`,o=M(n?.headers)??{},{head:s,body:c}=await i.call(`proxied-fetch`,{url:e,method:a,headers:o,body:n?.body},{timeoutMs:12e4});return R(s,new Uint8Array(c),e)}:async(e,t)=>{let n=t?.method??`GET`,r=O({...P(M(t?.headers)),"X-Target-URL":e}),i={method:n,headers:r,cache:`no-store`};t?.body&&![`GET`,`HEAD`].includes(n)&&(i.body=N(t.body,r));let a=await fetch(k(),i);if(o(a))throw Error(await s(a));let c=await j(a,e),l={};a.headers.forEach((e,t)=>{l[t]=e});let u=F(l);return{status:a.status,statusText:a.statusText,headers:u,body:c,url:e}}}export{g as a,T as c,s as d,S as i,x as l,U as n,D as o,E as r,C as s,O as t,o as u};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import"./src-Dk1QVJRd.js";import{t}from"./runtime-env-byAg9ij-.js";import{n}from"./fetch-body-DDu_AU5I.js";const r=32768;function i(){return globalThis.Buffer}const a=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})?$/;function o(e){let t=i();if(t){if(!a.test(e))throw Error(`Invalid base64 string`);return new Uint8Array(t.from(e,`base64`))}let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}function s(e){let t=i();if(t)return t.from(e).toString(`base64`);let n=``;for(let t=0;t<e.byteLength;t+=r){let i=e.subarray(t,Math.min(t+r,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function c(e){return e.headers.get(`x-proxy-error`)===`1`}async function l(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return u(n,t)}function u(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}const d=new Map,f=new Map;function p(e,t){d.set(e,t),setTimeout(()=>d.delete(e),1e4)}function m(e,t){f.set(e,t),setTimeout(()=>f.delete(e),1e4)}function h(e){let t=f.get(e);return t?(f.delete(e),t):null}function g(e){let t=d.get(e);return t?(d.delete(e),t):null}function _(e){if(!e)return{};let t={};for(let[n,r]of Object.entries(e)){let e=n.toLowerCase();e===`cookie`?t[`X-Proxy-Cookie`]=r:e===`origin`?t[`X-Proxy-Origin`]=r:e===`referer`?t[`X-Proxy-Referer`]=r:e.startsWith(`proxy-`)?t[`X-Proxy-${n}`]=r:t[n]=r}return t}function v(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`x-proxy-set-cookie`?t[`set-cookie`]=r:t[n]=r;return t}function y(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}function b(e){if(!e)return;if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),Object.keys(t).length===0?void 0:t}if(Array.isArray(e)){let t={};for(let[n,r]of e)t[n]=r;return Object.keys(t).length===0?void 0:t}let t={...e};return Object.keys(t).length===0?void 0:t}var x=e({apiHeaders:()=>M,collectViaExtensionDelegate:()=>K,createProxiedFetch:()=>q,decodeForbiddenResponseHeaders:()=>z,encodeForbiddenRequestHeaders:()=>R,getExtensionDelegateId:()=>A,getLocalApiBaseUrl:()=>E,headersToRecord:()=>I,isTextContentType:()=>P,prepareRequestBody:()=>L,readResponseBody:()=>F,resolveApiUrl:()=>j,setBridgeToken:()=>D,setExtensionDelegateId:()=>k,setLocalApiBaseUrl:()=>T});const S=new Set([101,103,204,205,304]);let C=null,w=null;function T(e){if(e===null||e===``){C=null;return}C=e.replace(/\/+$/,``)}function E(){return C}function D(e){w=e===null||e===``?null:e}let O=null;function k(e){O=e===null||e===``?null:e}function A(){return O}function j(e){return C?`${C}${e}`:e}function M(e){let t={};if(w&&C&&(t[`X-Bridge-Token`]=w),e)for(let n of Object.keys(e))t[n]=e[n];return t}function N(){return j(`/api/fetch-proxy`)}function P(e){if(!e)return!0;let t=e.toLowerCase();return t.startsWith(`text/`)||t.includes(`json`)||t.includes(`xml`)||t.includes(`javascript`)||t.includes(`ecmascript`)||t.includes(`html`)||t.includes(`css`)||t.includes(`svg`)}async function F(e,t){let n=e.headers.get(`content-type`)??``,r=await e.arrayBuffer(),i=new Uint8Array(r);if(!P(n))if(t)m(t,i);else{let e=``;for(let t=0;t<i.length;t+=32768)e+=String.fromCharCode(...i.subarray(t,t+32768));p(e,i)}return i}const I=y;function L(e,t){if(e){if(!P(Object.entries(t??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``)){let t=n(e);return new Blob([t])}return e}}const R=_,z=v,B=o;function V(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}async function H(e,t,n){let r=new Headers;for(let[t,n]of Object.entries(e.headers))r.set(t,String(n));let i=S.has(e.status)?null:t,a=await F(new Response(i,{status:e.status,statusText:e.statusText,headers:r}),n);return{status:e.status,statusText:e.statusText,headers:z(e.headers),body:a,url:n}}async function U(e){let t=I(e?.headers),n=e?.method??`GET`,r=e?.body?L(e.body,t):void 0,i=R(t),a,o=!1;if(r!==void 0){let e=r instanceof Uint8Array?r:new Uint8Array(await new Response(r).arrayBuffer());e.byteLength>33554432?o=!0:a=s(e)}return{method:n,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}}async function W(e,t,n){let{method:r,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}=await U(n),s=e();return new Promise((e,n)=>{let c=null,l=!1,u=[];s.onMessage.addListener(t=>{let r=t;if(r.type===`response-head`)c={status:r.status,statusText:r.statusText,headers:r.headers};else if(r.type===`response-chunk`)u.push(B(r.dataBase64));else if(r.type===`response-end`){if(l=!0,!c){n(Error(`fetch-proxy: response-end before response-head`));return}e({head:c,body:V(u).buffer}),s.disconnect()}else r.type===`response-error`&&(l=!0,n(Error(r.error)),s.disconnect())}),s.onDisconnect.addListener(()=>{l||n(Error(c?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),s.postMessage({type:`request`,url:t,method:r,headers:i,bodyBase64:a,requestBodyTooLarge:o})})}async function G(e,t){let{head:n,body:r}=await W(()=>chrome.runtime.connect({name:`fetch-proxy.fetch`}),e,t);return H(n,new Uint8Array(r),e)}async function K(e,t){let n=O;if(!n)throw Error(`proxied-fetch: no extension delegate id configured`);let r=chrome.runtime.connect;return W(()=>r(n,{name:`fetch-proxy.fetch`}),e,t)}function q(){return t()?G:typeof chrome<`u`&&typeof chrome?.runtime?.connect==`function`&&O?async(e,t)=>{let{head:n,body:r}=await K(e,t);return H(n,new Uint8Array(r),e)}:typeof chrome>`u`&&O?async(e,t)=>{let{getPanelRpcClient:n}=await import(`./panel-rpc-CjFVE0nK.js`).then(e=>e.i),r=n();if(!r)throw Error(`proxied-fetch: panel-RPC client unavailable in worker realm`);let i=t?.method??`GET`,a=I(t?.headers)??{},{head:o,body:s}=await r.call(`proxied-fetch`,{url:e,method:i,headers:a,body:t?.body},{timeoutMs:12e4});return H(o,new Uint8Array(s),e)}:async(e,t)=>{let n=t?.method??`GET`,r=I(t?.headers),i=M({...R(r),"X-Target-URL":e}),a={method:n,headers:i,cache:`no-store`};t?.body&&![`GET`,`HEAD`].includes(n)&&(a.body=L(t.body,i));let o=await fetch(N(),a);if(c(o))throw Error(await l(o));let s=await F(o,e),u={};o.headers.forEach((e,t)=>{u[t]=e});let d=z(u);return{status:o.status,statusText:o.statusText,headers:d,body:s,url:e}}}export{P as a,D as c,b as d,g as f,s as h,E as i,k as l,o as m,q as n,x as o,h as p,A as r,j as s,M as t,T as u};
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import"./src-BcePBv4G.js";import{t}from"./runtime-env-byAg9ij-.js";import{n}from"./fetch-body-DDu_AU5I.js";const r=32768;function i(){return globalThis.Buffer}const a=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})?$/;function o(e){let t=i();if(t){if(!a.test(e))throw Error(`Invalid base64 string`);return new Uint8Array(t.from(e,`base64`))}let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}function s(e){let t=i();if(t)return t.from(e).toString(`base64`);let n=``;for(let t=0;t<e.byteLength;t+=r){let i=e.subarray(t,Math.min(t+r,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function c(e){return e.headers.get(`x-proxy-error`)===`1`}async function l(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return u(n,t)}function u(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}const d=new Map,f=new Map;function p(e,t){d.set(e,t),setTimeout(()=>d.delete(e),1e4)}function m(e,t){f.set(e,t),setTimeout(()=>f.delete(e),1e4)}function h(e){let t=f.get(e);return t?(f.delete(e),t):null}function g(e){let t=d.get(e);return t?(d.delete(e),t):null}function _(e){if(!e)return{};let t={};for(let[n,r]of Object.entries(e)){let e=n.toLowerCase();e===`cookie`?t[`X-Proxy-Cookie`]=r:e===`origin`?t[`X-Proxy-Origin`]=r:e===`referer`?t[`X-Proxy-Referer`]=r:e.startsWith(`proxy-`)?t[`X-Proxy-${n}`]=r:t[n]=r}return t}function v(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`x-proxy-set-cookie`?t[`set-cookie`]=r:t[n]=r;return t}function y(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}function b(e){if(!e)return;if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),Object.keys(t).length===0?void 0:t}if(Array.isArray(e)){let t={};for(let[n,r]of e)t[n]=r;return Object.keys(t).length===0?void 0:t}let t={...e};return Object.keys(t).length===0?void 0:t}var x=e({apiHeaders:()=>M,collectViaExtensionDelegate:()=>K,createProxiedFetch:()=>q,decodeForbiddenResponseHeaders:()=>z,encodeForbiddenRequestHeaders:()=>R,getExtensionDelegateId:()=>A,getLocalApiBaseUrl:()=>E,headersToRecord:()=>I,isTextContentType:()=>P,prepareRequestBody:()=>L,readResponseBody:()=>F,resolveApiUrl:()=>j,setBridgeToken:()=>D,setExtensionDelegateId:()=>k,setLocalApiBaseUrl:()=>T});const S=new Set([101,103,204,205,304]);let C=null,w=null;function T(e){if(e===null||e===``){C=null;return}C=e.replace(/\/+$/,``)}function E(){return C}function D(e){w=e===null||e===``?null:e}let O=null;function k(e){O=e===null||e===``?null:e}function A(){return O}function j(e){return C?`${C}${e}`:e}function M(e){let t={};if(w&&C&&(t[`X-Bridge-Token`]=w),e)for(let n of Object.keys(e))t[n]=e[n];return t}function N(){return j(`/api/fetch-proxy`)}function P(e){if(!e)return!0;let t=e.toLowerCase();return t.startsWith(`text/`)||t.includes(`json`)||t.includes(`xml`)||t.includes(`javascript`)||t.includes(`ecmascript`)||t.includes(`html`)||t.includes(`css`)||t.includes(`svg`)}async function F(e,t){let n=e.headers.get(`content-type`)??``,r=await e.arrayBuffer(),i=new Uint8Array(r);if(!P(n))if(t)m(t,i);else{let e=``;for(let t=0;t<i.length;t+=32768)e+=String.fromCharCode(...i.subarray(t,t+32768));p(e,i)}return i}const I=y;function L(e,t){if(e){if(!P(Object.entries(t??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``)){let t=n(e);return new Blob([t])}return e}}const R=_,z=v,B=o;function V(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}async function H(e,t,n){let r=new Headers;for(let[t,n]of Object.entries(e.headers))r.set(t,String(n));let i=S.has(e.status)?null:t,a=await F(new Response(i,{status:e.status,statusText:e.statusText,headers:r}),n);return{status:e.status,statusText:e.statusText,headers:z(e.headers),body:a,url:n}}async function U(e){let t=I(e?.headers),n=e?.method??`GET`,r=e?.body?L(e.body,t):void 0,i=R(t),a,o=!1;if(r!==void 0){let e=r instanceof Uint8Array?r:new Uint8Array(await new Response(r).arrayBuffer());e.byteLength>33554432?o=!0:a=s(e)}return{method:n,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}}async function W(e,t,n){let{method:r,transportHeaders:i,bodyBase64:a,requestBodyTooLarge:o}=await U(n),s=e();return new Promise((e,n)=>{let c=null,l=!1,u=[];s.onMessage.addListener(t=>{let r=t;if(r.type===`response-head`)c={status:r.status,statusText:r.statusText,headers:r.headers};else if(r.type===`response-chunk`)u.push(B(r.dataBase64));else if(r.type===`response-end`){if(l=!0,!c){n(Error(`fetch-proxy: response-end before response-head`));return}e({head:c,body:V(u).buffer}),s.disconnect()}else r.type===`response-error`&&(l=!0,n(Error(r.error)),s.disconnect())}),s.onDisconnect.addListener(()=>{l||n(Error(c?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),s.postMessage({type:`request`,url:t,method:r,headers:i,bodyBase64:a,requestBodyTooLarge:o})})}async function G(e,t){let{head:n,body:r}=await W(()=>chrome.runtime.connect({name:`fetch-proxy.fetch`}),e,t);return H(n,new Uint8Array(r),e)}async function K(e,t){let n=O;if(!n)throw Error(`proxied-fetch: no extension delegate id configured`);let r=chrome.runtime.connect;return W(()=>r(n,{name:`fetch-proxy.fetch`}),e,t)}function q(){return t()?G:typeof chrome<`u`&&typeof chrome?.runtime?.connect==`function`&&O?async(e,t)=>{let{head:n,body:r}=await K(e,t);return H(n,new Uint8Array(r),e)}:typeof chrome>`u`&&O?async(e,t)=>{let{getPanelRpcClient:n}=await import(`./panel-rpc-CjFVE0nK.js`).then(e=>e.i),r=n();if(!r)throw Error(`proxied-fetch: panel-RPC client unavailable in worker realm`);let i=t?.method??`GET`,a=I(t?.headers)??{},{head:o,body:s}=await r.call(`proxied-fetch`,{url:e,method:i,headers:a,body:t?.body},{timeoutMs:12e4});return H(o,new Uint8Array(s),e)}:async(e,t)=>{let n=t?.method??`GET`,r=I(t?.headers),i=M({...R(r),"X-Target-URL":e}),a={method:n,headers:i,cache:`no-store`};t?.body&&![`GET`,`HEAD`].includes(n)&&(a.body=L(t.body,i));let o=await fetch(N(),a);if(c(o))throw Error(await l(o));let s=await F(o,e),u={};o.headers.forEach((e,t)=>{u[t]=e});let d=z(u);return{status:o.status,statusText:o.statusText,headers:d,body:s,url:e}}}export{P as a,D as c,b as d,g as f,s as h,E as i,k as l,o as m,q as n,x as o,h as p,A as r,j as s,M as t,T as u};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{D as t,E as n,m as r,w as i}from"./account-store-DwSzwLW8.js";import{t as a}from"./compat-aVSWLlYQ.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{r as c,t as l}from"./icons-C5g936Qd.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let i=r();if(!i)return d.debug(`No API key for active provider — skipping`),null;let o=t(),s=n(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let t=(await a(c,{systemPrompt:e.system,messages:[l]},{apiKey:i,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return t.length>0?t:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=i(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],a=y(r.id),o=n.filter(e=>v(e,r,a));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return i(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{D as t,E as n,m as r,w as i}from"./account-store-CJqBAm1f.js";import{t as a}from"./compat-aVSWLlYQ.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{r as c,t as l}from"./icons-C5g936Qd.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let i=r();if(!i)return d.debug(`No API key for active provider — skipping`),null;let o=t(),s=n(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let t=(await a(c,{systemPrompt:e.system,messages:[l]},{apiKey:i,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return t.length>0?t:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=i(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],a=y(r.id),o=n.filter(e=>v(e,r,a));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return i(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
@@ -1 +1 @@
1
- import{r as e}from"./tray-sync-protocol-CVdiCvfU.js";var t=class{sender;timeoutMs;pending=new Map;eventListeners=new Map;chunkBuffers=new Map;_state=`connected`;requestCounter=0;constructor(e,t=3e4){this.sender=e,this.timeoutMs=t}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let[,{reject:e,timer:t}]of this.pending)clearTimeout(t),e(Error(`Transport disconnected`));this.pending.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=`remote-${++this.requestCounter}-${Date.now()}`,a=r??this.timeoutMs;return new Promise((r,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`Remote CDP request timed out after ${a}ms: ${e}`))},a);this.pending.set(i,{resolve:r,reject:o,timer:s}),this.sender.sendCDPRequest(i,e,t,n)})}on(e,t){let n=this.eventListeners.get(e);n||(n=new Set,this.eventListeners.set(e,n)),n.add(t)}off(e,t){this.eventListeners.get(e)?.delete(t)}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a=setTimeout(()=>{this.off(e,o),r(Error(`Remote CDP event timed out: ${e}`))},i),o=t=>{clearTimeout(a),this.off(e,o),n(t)};this.on(e,o)})}handleResponse(t,n,r,i,a,o){let s=this.pending.get(t);if(!s)return;let c=e(this.chunkBuffers,{type:`cdp.response`,requestId:t,result:n,error:r,chunkData:i,chunkIndex:a,totalChunks:o});c&&(this.pending.delete(t),clearTimeout(s.timer),c.error?s.reject(Error(c.error)):s.resolve(c.result??{}))}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)e(t)}};export{t};
1
+ import{r as e}from"./tray-sync-protocol-CxWJ329c.js";var t=class{sender;timeoutMs;pending=new Map;eventListeners=new Map;chunkBuffers=new Map;_state=`connected`;requestCounter=0;constructor(e,t=3e4){this.sender=e,this.timeoutMs=t}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let[,{reject:e,timer:t}]of this.pending)clearTimeout(t),e(Error(`Transport disconnected`));this.pending.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=`remote-${++this.requestCounter}-${Date.now()}`,a=r??this.timeoutMs;return new Promise((r,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`Remote CDP request timed out after ${a}ms: ${e}`))},a);this.pending.set(i,{resolve:r,reject:o,timer:s}),this.sender.sendCDPRequest(i,e,t,n)})}on(e,t){let n=this.eventListeners.get(e);n||(n=new Set,this.eventListeners.set(e,n)),n.add(t)}off(e,t){this.eventListeners.get(e)?.delete(t)}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a=setTimeout(()=>{this.off(e,o),r(Error(`Remote CDP event timed out: ${e}`))},i),o=t=>{clearTimeout(a),this.off(e,o),n(t)};this.on(e,o)})}handleResponse(t,n,r,i,a,o){let s=this.pending.get(t);if(!s)return;let c=e(this.chunkBuffers,{type:`cdp.response`,requestId:t,result:n,error:r,chunkData:i,chunkIndex:a,totalChunks:o});c&&(this.pending.delete(t),clearTimeout(s.timer),c.error?s.reject(Error(c.error)):s.resolve(c.result??{}))}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)e(t)}};export{t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import"./proxied-fetch-ldIfAeIb.js";import"./src-Dk1QVJRd.js";import"./tray-runtime-config-8-BCHO27.js";e(`tray-leader`);let t={state:`inactive`,session:null,error:null};function n(){return{...t,session:t.session?{...t.session}:null}}function r(){let e=n();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(`slicc.leaderTrayStatus`);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const i=new Set;function a(e){return i.add(e),()=>{i.delete(e)}}function o(e){let t=new URL(e);return`${t.protocol===`https:`?`wss:`:`ws:`}//${t.host}/licks-ws`}function s(e,t){return`${new URL(e).origin}/webhooks/${t}`}function c(e,t){return`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}export{n as a,r as i,c as n,a as o,s as r,o as t};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import"./proxied-fetch-D8ebvbVd.js";import"./src-BcePBv4G.js";import"./tray-runtime-config-GgP0BHji.js";e(`tray-leader`);let t={state:`inactive`,session:null,error:null};function n(){return{...t,session:t.session?{...t.session}:null}}function r(){let e=n();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(`slicc.leaderTrayStatus`);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const i=new Set;function a(e){return i.add(e),()=>{i.delete(e)}}function o(e){let t=new URL(e);return`${t.protocol===`https:`?`wss:`:`ws:`}//${t.host}/licks-ws`}function s(e,t){return`${new URL(e).origin}/webhooks/${t}`}function c(e,t){return`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}export{n as a,r as i,c as n,a as o,s as r,o as t};
@@ -0,0 +1 @@
1
+ import"./src-DoFhVmQT.js";import"./electron-overlay-route-CjT6k9Df.js";import"./messages-BD4p8GuF.js";import{c as e}from"./tray-runtime-config-9kTxza5l.js";function t(t,n,i){if(n){try{if(new URL(t).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let n=new URL(t);return n.searchParams.get(`connect`)===`1`?`connect`:n.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:n.searchParams.get(`cherry`)===`1`?`cherry`:e(t,i===void 0?typeof window<`u`?window.localStorage:null:i)?`follower`:r(n)?`electron-overlay`:`standalone`}catch{return`standalone`}}function n(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function r(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}export{n,t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{o as t,t as n}from"./proxied-fetch-D5h5REZy.js";import{t as r}from"./secret-topology-CptRwAX3.js";import{t as i}from"./secrets-bridge-client-D6nwnBvr.js";var a=e(`secret-env`);function o(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),o(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&a.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&a.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return a.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return a.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&a.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return a.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{o as t,t as n}from"./proxied-fetch-CfcFb0B0.js";import{t as r}from"./secret-topology-Baeul5rD.js";import{t as i}from"./secrets-bridge-client-CLRo0NLf.js";var a=e(`secret-env`);function o(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),o(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&a.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&a.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return a.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return a.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&a.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return a.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
@@ -1 +1 @@
1
- import{r as e}from"./proxied-fetch-D5h5REZy.js";import{n as t}from"./runtime-env-DH4NDw4t.js";function n(){return t()?`extension-direct`:e()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}export{n as t};
1
+ import{r as e}from"./proxied-fetch-CfcFb0B0.js";import{n as t}from"./runtime-env-DH4NDw4t.js";function n(){return t()?`extension-direct`:e()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}export{n as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./port-bridge-client-CoFZLSYm.js";var n=e({callSecretsBridge:()=>i}),r=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function i(e,t){return r({type:e,payload:t})}export{n,i as t};
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./port-bridge-client-DdolH4cw.js";var n=e({callSecretsBridge:()=>i}),r=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function i(e,t){return r({type:e,payload:t})}export{n,i as t};
@@ -0,0 +1,21 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-CuKruUki.js","assets/rolldown-runtime-aKtaBQYM.js","assets/account-store-CJqBAm1f.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-DoFhVmQT.js","assets/proxied-fetch-CfcFb0B0.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-Baeul5rD.js","assets/secrets-bridge-client-CLRo0NLf.js","assets/port-bridge-client-DdolH4cw.js","assets/tool-ui-DfXu6quJ.js","assets/providers-DpzUvgPJ.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";import{t as n}from"./compat-aVSWLlYQ.js";import{t as r}from"./attachments-CByeG2Ru.js";import{n as i,r as a,t as o}from"./context-compaction-_UkD06XB.js";import{t as s}from"./logger-DDBAeTLF.js";import{t as c}from"./types-idfTVsM8.js";import{t as l}from"./icons-C5g936Qd.js";import{a as u}from"./dictation-priming-DGpw1lUV.js";var d=s(`cone-memory-budget`),f=4e3,ee=2e3,te=1.25,p=`/workspace/CLAUDE.md`,ne=`/sessions/index.json`,re=4096,ie=/^## Auto-extracted/m,ae=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
3
+
4
+ Rules:
5
+ - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
6
+ - One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
7
+ - Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
8
+ - Be terse. Aim well under the original size.
9
+ - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function m(e){return Math.round(f+ee*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function h(e){let t=ie.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function oe(e){try{let t=await e.readFile(ne,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function g(e){let{header:t,autoExtracted:r}=h(e.currentContent);if(!r.trim())return e.currentContent;let i=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
10
+
11
+ <auto-extracted>
12
+ ${r}
13
+ </auto-extracted>`,a={role:`user`,content:[{type:`text`,text:ae}],timestamp:Date.now()},o=await n(e.model,{systemPrompt:i,messages:[a]},{apiKey:e.apiKey,maxTokens:re,headers:e.headers,signal:e.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
14
+ `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
15
+ `)?``:`
16
+ `}${s}\n`}async function se(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(p,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await oe(e.vfs),r=m(n),i=r*te;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};d.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await g({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(p,n),d.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return d.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}function _(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,i=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${i}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${r(e)}`).join(`
17
+ `)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var v=e({SESSIONS_INDEX_PATH:()=>w,enrichPendingSession:()=>X,freezeConeSession:()=>T,frozenSessionPath:()=>Y,markSnapshotUnavailable:()=>Q,parseFrozenArchive:()=>$,readSessionsIndex:()=>J}),y=s(`session-freezer`),b=4,x=2048,S=40,C=`/sessions`,ce=`${C}/attachments`,w=`/sessions/index.json`;async function T(e){let t=await L(e.sessionStore);if(!t||t.messages.length<b)return y.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=R(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await O(e,n,i);let a=await k(e,n,i)||W(t.messages);return await A(e,t,a,r,i?await E(e,a):void 0)}async function E(e,n){try{return D(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-CuKruUki.js`).then(e=>e.n);return{pickLucideIcon: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,26]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){y.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function D(e){if(e)return l(e)?e:void 0}async function O(e,t,n){if(!n){y.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await a({messages:t,instruction:o,model:e.model,apiKey:e.apiKey,maxTokens:x,headers:e.headers})}catch(e){y.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){y.info(`Memory extraction returned no durable memories`);return}try{await q(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),y.info(`Memory extracted and appended on new-session`)}catch(e){y.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function k(e,t,n){if(!n)return``;try{return U(await a({messages:t,instruction:i,model:e.model,apiKey:e.apiKey,maxTokens:S,headers:e.headers}))}catch(e){return y.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function A(e,t,n,r,i){let a=new Date().toISOString(),o=crypto.randomUUID(),s=r===`quick`?`pending-${le()}.md`:`${a.replace(/[:.]/g,`-`)}-${G(n)}.md`,c={filename:s,sessionId:o,title:n,frozenAt:a,messageCount:t.messages.length,...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{}};try{await K(e.vfs,C);let r=await j(e.vfs,t.messages,s.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r},o=H(i);return await e.vfs.writeFile(`${C}/${s}`,o),await ue(e.vfs,c),await e.vfs.flush(),y.info(`Cone session frozen`,{filename:s,title:n,messageCount:t.messages.length}),{...c,archive:i}}catch(e){return y.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function j(e,t,n){let r={vfs:e,archiveDir:`${ce}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(P)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await M(r,n));i.push({...e,attachments:t})}return i}async function M(e,t){if(!P(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await N(e.vfs,t.path);if(!r)return I(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await K(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function N(e,t){try{if(!await F(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function P(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function F(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function I(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function L(e){try{return await e.load(`session-cone`)}catch(e){return y.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function R(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var z=`<!-- slicc:session-data
18
+ `,B=`
19
+ -->`;function V(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function H(e){let t=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n---\n\n`,n=`${z}${JSON.stringify(V(e.messages)).replace(/-->/g,`-- >`)}${B}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+_(e.messages)}function U(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function W(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function G(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function le(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function K(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function q(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof c)||t.code!==`ENOENT`)throw t;await K(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
20
+ `)?``:`
21
+ `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await se({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){y.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function ue(e,t){let n=[];try{let t=await e.readFile(w,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(w,JSON.stringify(r,null,2))}async function J(e){try{let t=await e.readFile(w,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function Y(e){return`${C}/${e.filename}`}async function X(e,t,n){if(!t.pendingEnrichment)return null;let r=await fe(e,t);if(r===null)return null;let i=pe(t,r);if(i===null)return null;let a=await me(t,i,n);if(a===null)return null;let o=await de(n,a.newTitle);return await he(e,t,a.bullets,n),await ge(e,t,r,a.newTitle,o)}async function de(e,t){if(e.pickIcon)try{return await D(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){y.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function fe(e,t){try{let n=await e.readFile(Y(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?y.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):y.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function pe(e,t){let n;try{n=$(t).messages}catch(t){return y.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(y.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):R(n)}async function me(e,t,n){let r=``;try{r=await a({messages:t,instruction:o,model:n.model,apiKey:n.apiKey,maxTokens:x,headers:n.headers})}catch(t){return y.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=U(await a({messages:t,instruction:i,model:n.model,apiKey:n.apiKey,maxTokens:S,headers:n.headers}))}catch(t){return y.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:r,newTitle:s}:(y.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function he(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await q(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){y.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function ge(e,t,n,r,i){let a=Y(t),o=_e(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${G(r)}.md`,c=`${C}/${s}`;try{await K(e,C),await e.writeFile(c,o)}catch(e){return y.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let l=i??t.icon,u={filename:s,title:r,frozenAt:t.frozenAt,messageCount:t.messageCount,...t.sessionId?{sessionId:t.sessionId}:{},...l?{icon:l}:{}};try{await ve(e,t.filename,u)}catch(e){return y.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(c!==a)try{await e.rm(a)}catch(e){y.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return y.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function _e(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var Z=Promise.resolve();async function ve(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(w,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(w,JSON.stringify(a,null,2))},i=Z.then(r,r);return Z=i.then(()=>void 0,()=>void 0),i}async function Q(e,t){let n=async()=>{let n=[];try{let t=await e.readFile(w,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{return}if(!n.find(e=>e.filename===t))return;let r=n.map(e=>e.filename===t?{...e,completeSnapshotUnavailable:!0}:e);await e.writeFile(w,JSON.stringify(r,null,2))},r=Z.then(n,n);return Z=r.then(()=>void 0,()=>void 0),r}function $(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:ye(t)}}function ye(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}export{Q as a,v as c,Y as i,_ as l,X as n,$ as o,T as r,J as s,w as t};