sliccy 6.74.1 → 6.76.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 (103) hide show
  1. package/README.md +1 -1
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts +22 -0
  3. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  4. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  5. package/dist/ui/.vite/manifest.json +159 -153
  6. package/dist/ui/assets/{account-store-Bs5wYmPH.js → account-store-BOO_CzoH.js} +1 -1
  7. package/dist/ui/assets/{account-store-DhXm-hp2.js → account-store-BxGdz4En.js} +1 -1
  8. package/dist/ui/assets/{adobe-ZJw2pWdU.js → adobe-BS726v5F.js} +1 -1
  9. package/dist/ui/assets/{adobe-BY6VkVG7.js → adobe-DRIeZ7SH.js} +1 -1
  10. package/dist/ui/assets/{apply-layout-Ceii10ec.js → apply-layout-8FDKkAyS.js} +1 -1
  11. package/dist/ui/assets/{apps-B3hWxSJa.js → apps-Dy99L1_j.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-6A7ULWsO.js → azure-openai-2PeEIEpE.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-DYx6GjSK.js → azure-openai-CSLwIPI9.js} +1 -1
  14. package/dist/ui/assets/{cerebras-Tsgj47QL.js → cerebras-Ba7Z9duV.js} +1 -1
  15. package/dist/ui/assets/{cerebras-EP9KkiyX.js → cerebras-QV_fd2ps.js} +1 -1
  16. package/dist/ui/assets/{connect-surface-CJASCNXx.js → connect-surface-CTu0wr2Y.js} +1 -1
  17. package/dist/ui/assets/db-DATxPCUz.js +1 -0
  18. package/dist/ui/assets/db-DIbBClfy.js +1 -0
  19. package/dist/ui/assets/feature-flags-ByMXaIc4.js +1 -0
  20. package/dist/ui/assets/{fs-B9b0E2_f.js → fs-3kOP04jS.js} +2 -2
  21. package/dist/ui/assets/{fs-DVnwglvE.js → fs-Boij2gPF.js} +1 -1
  22. package/dist/ui/assets/{github-DjPj9qkm.js → github-BjNCMOTH.js} +1 -1
  23. package/dist/ui/assets/{github-Dm6bGUQw.js → github-DGwuCXij.js} +2 -2
  24. package/dist/ui/assets/{github-copilot-Clu3Ah3c.js → github-copilot-7vobYWUU.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-BwNKa1YA.js → github-copilot-DlzADrSr.js} +1 -1
  26. package/dist/ui/assets/{github-install-BU__F4cn.js → github-install-B8nRAI8z.js} +1 -1
  27. package/dist/ui/assets/{github-zip-Bg2XmI3w.js → github-zip-7k6aGRi5.js} +1 -1
  28. package/dist/ui/assets/{host-command-DNHWSLM2.js → host-command-CzRn3Wvz.js} +1 -1
  29. package/dist/ui/assets/{js-realm-worker-D9dufpct.js → js-realm-worker-BH_Uhjou.js} +1 -1
  30. package/dist/ui/assets/{kernel-worker-BeQsXS7Z.js → kernel-worker-COfVGbIN.js} +672 -679
  31. package/dist/ui/assets/{lick-manager-BpI2wI9M.js → lick-manager-BJhAu_iX.js} +1 -1
  32. package/dist/ui/assets/{lick-ws-bridge-Cn0JxFJP.js → lick-ws-bridge-DZ5pLaXa.js} +1 -1
  33. package/dist/ui/assets/{llm-session-id-ZObKEXzb.js → llm-session-id-BZyXP_j2.js} +1 -1
  34. package/dist/ui/assets/{local-llm-4eumet6V.js → local-llm-CDx8pQEL.js} +1 -1
  35. package/dist/ui/assets/{local-llm-46v21F6v.js → local-llm-Ca41QR9W.js} +1 -1
  36. package/dist/ui/assets/{main-Cc_Ew7tx.js → main-CBjLDGjV.js} +3 -3
  37. package/dist/ui/assets/{mount-DlhGjFpz.js → mount-BNWucV-S.js} +2 -2
  38. package/dist/ui/assets/{mount-B5EPyAiB.js → mount-Dcl0CQrv.js} +1 -1
  39. package/dist/ui/assets/{mount-recovery-B6xgXgIN.js → mount-recovery-B1Eib3Wt.js} +1 -1
  40. package/dist/ui/assets/{new-session-ICgxt805.js → new-session-CGv5e7P7.js} +2 -2
  41. package/dist/ui/assets/{oauth-bootstrap-36Ol1qSd.js → oauth-bootstrap-DBbtYdzz.js} +2 -2
  42. package/dist/ui/assets/{openai-codex-Cl-TQRio.js → openai-codex-BTUlRTto.js} +1 -1
  43. package/dist/ui/assets/{openai-codex-B4yjYiyu.js → openai-codex-CZs8JRSw.js} +1 -1
  44. package/dist/ui/assets/{openrouter-DEc7uQ6U.js → openrouter-Bvd2Eqif.js} +1 -1
  45. package/dist/ui/assets/{openrouter-DxCfhknQ.js → openrouter-DYhI1zom.js} +1 -1
  46. package/dist/ui/assets/{openrouter-oauth-Cn0pR8xA.js → openrouter-oauth-C6mgQiRV.js} +1 -1
  47. package/dist/ui/assets/{openrouter-oauth-F7U_v5W7.js → openrouter-oauth-DK-5hp2X.js} +1 -1
  48. package/dist/ui/assets/{panel-rpc-handlers-Kg81C_dG.js → panel-rpc-handlers-BXCRWF2E.js} +2 -2
  49. package/dist/ui/assets/{provider-B30Ksfaf.js → provider-DxVWgpTU.js} +2 -2
  50. package/dist/ui/assets/{provider-settings-C5pzMk-0.js → provider-settings-BWmqGvFK.js} +1 -1
  51. package/dist/ui/assets/{provider-settings-BjjWqkj0.js → provider-settings-DByKbVop.js} +1 -1
  52. package/dist/ui/assets/{provider-store-access-DkhPM-2g.js → provider-store-access-BQfEu3u9.js} +2 -2
  53. package/dist/ui/assets/provider-store-access-dlrRLglC.js +1 -0
  54. package/dist/ui/assets/{provider-Dp6zI7eY.js → provider-xByUgvpM.js} +1 -1
  55. package/dist/ui/assets/{providers-pB7s55hk.js → providers-DH1Mhm__.js} +1 -1
  56. package/dist/ui/assets/{providers-BrDyUzyA.js → providers-Db_Doqrk.js} +2 -2
  57. package/dist/ui/assets/{quick-llm-CQWlRmAB.js → quick-llm-nv9Pz0pZ.js} +1 -1
  58. package/dist/ui/assets/{recovery-screen-uzNaac2n.js → recovery-screen-0OnsBXuN.js} +1 -1
  59. package/dist/ui/assets/{redirect-uri-BbDAhEn_.js → redirect-uri-DVwxCbAH.js} +1 -1
  60. package/dist/ui/assets/session-freezer-BVmmPVzM.js +152 -0
  61. package/dist/ui/assets/{setup-feature-flags-remote-xYY2KoRd.js → setup-feature-flags-remote-DCYtiT5O.js} +1 -1
  62. package/dist/ui/assets/{setup-standalone-prelude-yxWF4qBw.js → setup-standalone-prelude-C89-5Dtf.js} +2 -2
  63. package/dist/ui/assets/{setup-sudo-B2sKjBny.js → setup-sudo-CHykhXbm.js} +2 -2
  64. package/dist/ui/assets/{skills-8NiwYZ4d.js → skills-BKsLImdA.js} +1 -1
  65. package/dist/ui/assets/slicc-version-DV1WF_eM.js +1 -0
  66. package/dist/ui/assets/sprinkle-bridge-channel-CftxYQ9D.js +1 -0
  67. package/dist/ui/assets/{sprinkle-bridge-channel-DiTL7Uq5.js → sprinkle-bridge-channel-Clwu-X1e.js} +1 -1
  68. package/dist/ui/assets/sprinkle-instances-B8n7h-oP.js +1 -0
  69. package/dist/ui/assets/sprinkle-manager-BMj0BniN.js +1 -0
  70. package/dist/ui/assets/sprinkle-op-handler-Cb1pl8Ok.js +1 -0
  71. package/dist/ui/assets/{store-DiFedg2r.js → store-CEccVDd7.js} +1 -1
  72. package/dist/ui/assets/{store-DbHU-U7R.js → store-CgULlP3e.js} +1 -1
  73. package/dist/ui/assets/{sudo-BpgGkYVu.js → sudo-Bi--9XjE.js} +1 -1
  74. package/dist/ui/assets/{tray-leader-wwljq4Tw.js → tray-leader-CXKotSM9.js} +1 -1
  75. package/dist/ui/assets/{upgrade-detection-CrtIw3_B.js → upgrade-detection-Di65pY4y.js} +1 -1
  76. package/dist/ui/assets/{wc-extension-CSapnTcp.js → wc-extension-CwbvHOae.js} +2 -2
  77. package/dist/ui/assets/{wc-follower-CbxYM2hr.js → wc-follower-DfFkmNjM.js} +3 -3
  78. package/dist/ui/assets/wc-live-C5Y8LMGm.js +41 -0
  79. package/dist/ui/assets/{wc-nav-DA5n1AdF.js → wc-nav-D4I71uQu.js} +2 -2
  80. package/dist/ui/assets/{wc-onboarding-D-SyzUOU.js → wc-onboarding-UrMxL1c-.js} +2 -2
  81. package/dist/ui/assets/{wc-placeholder-Daucr5kB.js → wc-placeholder-zxd8RVYO.js} +2 -2
  82. package/dist/ui/assets/{wc-settings-ylQZwBuJ.js → wc-settings-BcpEli20.js} +3 -3
  83. package/dist/ui/assets/{wc-shell-DDuip0n8.js → wc-shell-ClIw7Xp7.js} +2 -2
  84. package/dist/ui/assets/{wc-sprinkles-J1ztSjiF.js → wc-sprinkles-DmaQ6PZC.js} +2 -2
  85. package/dist/ui/assets/wc-tray-D8C4hzMc.js +2 -0
  86. package/dist/ui/assets/wc-tray-scoops-CNqQ6-vb.js +5 -0
  87. package/dist/ui/assets/{xai-grok-DKl8JIC2.js → xai-grok-C4yc6t0c.js} +1 -1
  88. package/dist/ui/assets/{xai-grok-CNQFCjQM.js → xai-grok-CTETAYca.js} +1 -1
  89. package/dist/ui/index.html +7 -7
  90. package/dist/ui/packages/webapp/index.html +7 -7
  91. package/package.json +4 -3
  92. package/dist/ui/assets/db-BTiVtoD4.js +0 -1
  93. package/dist/ui/assets/db-C7OEVMWU.js +0 -1
  94. package/dist/ui/assets/feature-flags-Cf-Bv5AK.js +0 -1
  95. package/dist/ui/assets/provider-store-access-XCgBUiZn.js +0 -1
  96. package/dist/ui/assets/session-freezer-DFRTF4GP.js +0 -158
  97. package/dist/ui/assets/slicc-version-D3muNOTC.js +0 -1
  98. package/dist/ui/assets/sprinkle-bridge-channel-14cdGa6x.js +0 -1
  99. package/dist/ui/assets/sprinkle-manager-gzuF1Z-C.js +0 -1
  100. package/dist/ui/assets/sprinkle-op-handler-Bkvm_zYI.js +0 -1
  101. package/dist/ui/assets/wc-live-BcwQzHWX.js +0 -8
  102. package/dist/ui/assets/wc-tray-BFo9Iac7.js +0 -2
  103. package/dist/ui/assets/wc-tray-scoops--J_O3Rkm.js +0 -5
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-C9Jn4g2n.js","assets/preload-helper-Czpn1I53.js","assets/proxied-fetch-5-UeqOh8.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/panel-rpc-B3MSVImO.js","assets/permissions-surface-registry-CilCRwhh.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,R as _,S as v,T as y,U as b,V as x,W as S,_ as C,a as ee,b as te,c as ne,d as w,f as re,g as ie,h as T,i as E,j as ae,k as D,l as oe,m as se,n as ce,o as le,p as ue,q as de,s as fe,t as pe,u as O,v as me,w as he,x as ge,y as k,z as _e}from"./account-store-DhXm-hp2.js";import{t as A}from"./preload-helper-Czpn1I53.js";import{t as ve}from"./logger-DDBAeTLF.js";import{l as ye}from"./src-CAWTvdAa.js";import{o as j}from"./telemetry-DeLkquP_.js";import{c as M,p as N}from"./tray-runtime-config-DAGrwZQV.js";import{t as P}from"./tray-follower-status-BAjnN7Ar.js";import{n as be}from"./clipboard-eqmn97SP.js";import{n as F}from"./tray-join-url-BIvzbiFR.js";var xe=e({ACCOUNTS_KEY:()=>pe,__test__:()=>ce,addAccount:()=>E,applyProviderDefaults:()=>ee,clearAllSettings:()=>le,clearApiKey:()=>fe,clearBaseUrl:()=>ne,clearSelectedProvider:()=>oe,describeInvalidJoinUrl:()=>F,downloadProviders:()=>R,exportProviders:()=>O,getAccounts:()=>w,getAllAvailableModels:()=>re,getAllExtraOAuthDomains:()=>ue,getApiKey:()=>se,getApiKeyForProvider:()=>T,getApiVersionForProvider:()=>ie,getAvailableProviders:()=>C,getBaseUrl:()=>me,getBaseUrlForProvider:()=>k,getDeploymentForProvider:()=>te,getExtraOAuthDomains:()=>ge,getOAuthAccountInfo:()=>v,getProviderConfig:()=>r,getProviderModels:()=>he,getRawApiKeyForProvider:()=>y,getSelectedModelId:()=>a,getSelectedProvider:()=>i,isModelHiddenFromPicker:()=>h,logoutOAuthAccount:()=>D,maskOAuthTokenWithRetry:()=>t,migrateLegacyAuthOnlySelection:()=>ae,modelRunsOnProvider:()=>p,persistOAuthMaskViaServiceWorker:()=>m,policyVisible:()=>g,providerOffersLlmModels:()=>o,reloginOAuthAccount:()=>G,removeAccount:()=>l,resolveCurrentModel:()=>f,resolveModelById:()=>_,resolveModelByShorthand:()=>_e,resolveModelIdForScoop:()=>n,resolveModelSelectionForScoop:()=>x,saveOAuthAccount:()=>c,setApiKey:()=>b,setBaseUrl:()=>S,setExtraOAuthDomains:()=>s,setExtraOAuthDomainsAsync:()=>d,setSelectedModelId:()=>de,setSelectedProvider:()=>u,showProviderSettings:()=>$,testOnlyDispatchTrayJoinWithFailureFeedback:()=>Se}),I=ve(`provider-settings`);function Se(e,t){return L(e,t)}function L(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 R(){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 Ce(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function z(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 B={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`]},V=`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 H(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 U(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function W(e){e.options?.startInAddAccount?U(e):K(e)}function we(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)`):t.textContent=e.userName?e.userName:e.accessToken?`Logged in`:Ce(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function G(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await A(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-C9Jn4g2n.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),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 Te(e,t){let n=document.createElement(`button`);return n.style.cssText=V,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(z(B.pen)),H(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>X(e,t)),n}function Ee(e,t,n){let r=document.createElement(`button`);return r.style.cssText=V,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(z(B.login)),H(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{G(n,()=>K(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(z(B.logout)),H(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await D(t.providerId),K(e)})()})),r}function De(e,t){let n=document.createElement(`button`);return n.style.cssText=V,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(z(B.trash)),H(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await l(t.providerId),K(e)})()}),n}function Oe(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(we(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(Te(e,t)),n.isOAuth&&s.appendChild(Ee(e,t,n)),s.appendChild(De(e,t)),i.appendChild(s),i}function ke(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=P(),a=i.state!==`inactive`,o=M(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 K(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(Oe(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`,()=>R()),i.appendChild(o),t.appendChild(i),t.appendChild(ke(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`,()=>U(e)),t.appendChild(c)}function Ae(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)),s=[...C()].sort((e,t)=>r(e).name.localeCompare(r(t).name));for(let t of s){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!o(t))continue;let i=document.createElement(`option`);i.value=t,i.textContent=r(t).name,n.appendChild(i)}return n}function je(e,t){let n=Ae(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 Me(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 Ne(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}=Me(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 be(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 q(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=k(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()&&E(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await A(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-C9Jn4g2n.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),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,()=>W(e),{presentDeviceCode:Ne(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await A(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-C9Jn4g2n.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),n=t();await i.onOAuthLogin(n,()=>W(e))}}catch(e){if(!o)try{await l(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 Pe(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 Fe(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 Ie(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,Pe(e,n),Fe(e,n),Ie(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}E(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),W(e)}function Le(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`,()=>U(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`,()=>K(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=je(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{q(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),Le(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){L(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 Re(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 ze(){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(ze());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=`${ye}/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 j(`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?K(i):e?.autoJoinUrl?Re(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):X(i),n.appendChild(r),document.body.appendChild(n)})}export{$ as n,xe as t};
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,R as _,S as v,T as y,U as b,V as x,W as S,_ as C,a as ee,b as te,c as ne,d as w,f as re,g as ie,h as T,i as E,j as ae,k as D,l as oe,m as se,n as ce,o as le,p as ue,q as de,s as fe,t as pe,u as O,v as me,w as he,x as ge,y as k,z as _e}from"./account-store-BxGdz4En.js";import{t as A}from"./preload-helper-Czpn1I53.js";import{t as ve}from"./logger-DDBAeTLF.js";import{l as ye}from"./src-CAWTvdAa.js";import{o as j}from"./telemetry-DeLkquP_.js";import{c as M,p as N}from"./tray-runtime-config-DAGrwZQV.js";import{t as P}from"./tray-follower-status-BAjnN7Ar.js";import{n as be}from"./clipboard-eqmn97SP.js";import{n as F}from"./tray-join-url-BIvzbiFR.js";var xe=e({ACCOUNTS_KEY:()=>pe,__test__:()=>ce,addAccount:()=>E,applyProviderDefaults:()=>ee,clearAllSettings:()=>le,clearApiKey:()=>fe,clearBaseUrl:()=>ne,clearSelectedProvider:()=>oe,describeInvalidJoinUrl:()=>F,downloadProviders:()=>R,exportProviders:()=>O,getAccounts:()=>w,getAllAvailableModels:()=>re,getAllExtraOAuthDomains:()=>ue,getApiKey:()=>se,getApiKeyForProvider:()=>T,getApiVersionForProvider:()=>ie,getAvailableProviders:()=>C,getBaseUrl:()=>me,getBaseUrlForProvider:()=>k,getDeploymentForProvider:()=>te,getExtraOAuthDomains:()=>ge,getOAuthAccountInfo:()=>v,getProviderConfig:()=>r,getProviderModels:()=>he,getRawApiKeyForProvider:()=>y,getSelectedModelId:()=>a,getSelectedProvider:()=>i,isModelHiddenFromPicker:()=>h,logoutOAuthAccount:()=>D,maskOAuthTokenWithRetry:()=>t,migrateLegacyAuthOnlySelection:()=>ae,modelRunsOnProvider:()=>p,persistOAuthMaskViaServiceWorker:()=>m,policyVisible:()=>g,providerOffersLlmModels:()=>o,reloginOAuthAccount:()=>G,removeAccount:()=>l,resolveCurrentModel:()=>f,resolveModelById:()=>_,resolveModelByShorthand:()=>_e,resolveModelIdForScoop:()=>n,resolveModelSelectionForScoop:()=>x,saveOAuthAccount:()=>c,setApiKey:()=>b,setBaseUrl:()=>S,setExtraOAuthDomains:()=>s,setExtraOAuthDomainsAsync:()=>d,setSelectedModelId:()=>de,setSelectedProvider:()=>u,showProviderSettings:()=>$,testOnlyDispatchTrayJoinWithFailureFeedback:()=>Se}),I=ve(`provider-settings`);function Se(e,t){return L(e,t)}function L(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 R(){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 Ce(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function z(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 B={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`]},V=`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 H(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 U(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function W(e){e.options?.startInAddAccount?U(e):K(e)}function we(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)`):t.textContent=e.userName?e.userName:e.accessToken?`Logged in`:Ce(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function G(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await A(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-C9Jn4g2n.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),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 Te(e,t){let n=document.createElement(`button`);return n.style.cssText=V,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(z(B.pen)),H(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>X(e,t)),n}function Ee(e,t,n){let r=document.createElement(`button`);return r.style.cssText=V,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(z(B.login)),H(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{G(n,()=>K(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(z(B.logout)),H(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await D(t.providerId),K(e)})()})),r}function De(e,t){let n=document.createElement(`button`);return n.style.cssText=V,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(z(B.trash)),H(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await l(t.providerId),K(e)})()}),n}function Oe(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(we(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(Te(e,t)),n.isOAuth&&s.appendChild(Ee(e,t,n)),s.appendChild(De(e,t)),i.appendChild(s),i}function ke(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=P(),a=i.state!==`inactive`,o=M(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 K(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(Oe(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`,()=>R()),i.appendChild(o),t.appendChild(i),t.appendChild(ke(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`,()=>U(e)),t.appendChild(c)}function Ae(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)),s=[...C()].sort((e,t)=>r(e).name.localeCompare(r(t).name));for(let t of s){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!o(t))continue;let i=document.createElement(`option`);i.value=t,i.textContent=r(t).name,n.appendChild(i)}return n}function je(e,t){let n=Ae(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 Me(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 Ne(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}=Me(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 be(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 q(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=k(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()&&E(n,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await A(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-C9Jn4g2n.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),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,()=>W(e),{presentDeviceCode:Ne(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await A(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-C9Jn4g2n.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),n=t();await i.onOAuthLogin(n,()=>W(e))}}catch(e){if(!o)try{await l(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 Pe(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 Fe(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 Ie(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,Pe(e,n),Fe(e,n),Ie(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}E(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),W(e)}function Le(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`,()=>U(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`,()=>K(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=je(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{q(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),Le(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){L(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 Re(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 ze(){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(ze());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=`${ye}/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 j(`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?K(i):e?.autoJoinUrl?Re(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):X(i),n.appendChild(r),document.body.appendChild(n)})}export{$ as n,xe as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-B9b0E2_f.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/path-utils-DNJG-zQf.js","assets/types-idfTVsM8.js","assets/virtual-device-paths-9EXC9iPp.js","assets/backend-local-1YuE96fx.js","assets/tool-ui-DfXu6quJ.js","assets/picker-approval-D89YhXsA.js","assets/html-B_Hg2WOy.js","assets/mount-picker-popup-Bc3ca2Vl.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/logger-BoSvu4mW.js","assets/picker-popup-Bwcnocm6.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/src-CAWTvdAa.js","assets/mount-table-store-dY2IfQ5S.js","assets/sidecar-repair-B1MVRrrn.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-B9b0E2_f.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),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 null;let t={...e};return typeof t.url==`string`?(delete t.sessionId,t):null}function p(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)){let t=f(n);t&&(r[e]=t)}return{version:n,servers:r}}async function m(e){try{let t=await(await u(e)).readFile(a,{encoding:`utf-8`});try{return p(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 h(e){return(await m(e)).servers}async function g(){let e=await h(),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{g as readMcpAuthEntries};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/fs-3kOP04jS.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/path-utils-DNJG-zQf.js","assets/types-idfTVsM8.js","assets/virtual-device-paths-9EXC9iPp.js","assets/backend-local-1YuE96fx.js","assets/tool-ui-DfXu6quJ.js","assets/picker-approval-D89YhXsA.js","assets/html-B_Hg2WOy.js","assets/mount-picker-popup-Bc3ca2Vl.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/logger-BoSvu4mW.js","assets/picker-popup-Bwcnocm6.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/src-CAWTvdAa.js","assets/mount-table-store-dY2IfQ5S.js","assets/sidecar-repair-B1MVRrrn.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-3kOP04jS.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])),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 null;let t={...e};return typeof t.url==`string`?(delete t.sessionId,t):null}function p(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)){let t=f(n);t&&(r[e]=t)}return{version:n,servers:r}}async function m(e){try{let t=await(await u(e)).readFile(a,{encoding:`utf-8`});try{return p(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 h(e){return(await m(e)).servers}async function g(){let e=await h(),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{g as readMcpAuthEntries};
@@ -0,0 +1 @@
1
+ import{t as e}from"./store-CEccVDd7.js";export{e as readMcpAuthEntries};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{i as t,s as n,t as r}from"./providers-pB7s55hk.js";import{H as i,S as a,d as o}from"./account-store-Bs5wYmPH.js";import{t as s}from"./redirect-uri-BbDAhEn_.js";import{discoverAuth as c,refreshAccessToken as l,runAuthFlow as u}from"./oauth-DR6XMm1M.js";import{n as d}from"./store-DiFedg2r.js";import"./provider-store-access-XCgBUiZn.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 _(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CWqWgyRG.js`).then(e=>e.n),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 v(e){let t=h.get(m(e.name));if(t)return t;let n=await _(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return h.set(m(e.name),r),r}function y(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 _(e.fetchImpl),c=await v(e),l=await u({asMetadata:c,clientId:e.auth.clientId,scope:e.auth.scope,redirectUri:e.auth.redirectUri??await s(),launcher:a,fetchImpl:o});await i({providerId:t,accessToken:l.accessToken,refreshToken:l.refreshToken,tokenExpiresAt:l.expiresAt,scopes:l.scope}),r()},onSilentRenew:async()=>{if(!a(t))return null;let n=o().find(e=>e.providerId===t),r=n?.refreshToken;if(!r)return f.info(`No refresh token for MCP provider, skipping silent renewal`,{id:t}),null;try{let a=await v(e),o=a.grantTypes??[];if(o.length>0&&!o.includes(`refresh_token`))return f.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:t}),null;let s=await _(e.fetchImpl),c=await l({tokenEndpoint:a.tokenEndpoint,clientId:e.auth.clientId,refreshToken:r,scope:e.auth.scope,fetchImpl:s});return await i({providerId:t,accessToken:c.accessToken,refreshToken:c.refreshToken??r,tokenExpiresAt:c.expiresAt,scopes:c.scope??n.scopes}),c.accessToken}catch(e){return f.warn(`MCP silent renewal failed`,{id:t,error:e instanceof Error?e.message:String(e)}),null}}}}function b(e){let n=m(e.name);if(g.has(n))return;let r=y(e);t(r),g.add(n),f.debug(`Registered MCP provider`,{id:n})}async function x(e,t={}){let n=m(e);if(g.has(n)&&r(n))return!0;if(!p())return!1;let i=await d(e);return i?(b({name:e,serverUrl:i.serverUrl,auth:i.auth,...t}),!0):!1}async function S(){if(!p())return[];let{readMcpAuthEntries:e}=await import(`./provider-store-access-XCgBUiZn.js`),t=await e(),n=[];for(let e of t)b({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(m(e.name));return n}function C(e){let t=m(e);return g.delete(t),h.delete(t),n(t)}export{S as ensureAllMcpProvidersRegistered,x as ensureMcpProviderRegistered,b as registerMcpProvider,C as removeMcpProvider};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{i as t,s as n,t as r}from"./providers-DH1Mhm__.js";import{H as i,S as a,d as o}from"./account-store-BOO_CzoH.js";import{t as s}from"./redirect-uri-DVwxCbAH.js";import{discoverAuth as c,refreshAccessToken as l,runAuthFlow as u}from"./oauth-DR6XMm1M.js";import{n as d}from"./store-CEccVDd7.js";import"./provider-store-access-dlrRLglC.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 _(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CWqWgyRG.js`).then(e=>e.n),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 v(e){let t=h.get(m(e.name));if(t)return t;let n=await _(e.fetchImpl),r=await c(e.serverUrl,void 0,n);return h.set(m(e.name),r),r}function y(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 _(e.fetchImpl),c=await v(e),l=await u({asMetadata:c,clientId:e.auth.clientId,scope:e.auth.scope,redirectUri:e.auth.redirectUri??await s(),launcher:a,fetchImpl:o});await i({providerId:t,accessToken:l.accessToken,refreshToken:l.refreshToken,tokenExpiresAt:l.expiresAt,scopes:l.scope}),r()},onSilentRenew:async()=>{if(!a(t))return null;let n=o().find(e=>e.providerId===t),r=n?.refreshToken;if(!r)return f.info(`No refresh token for MCP provider, skipping silent renewal`,{id:t}),null;try{let a=await v(e),o=a.grantTypes??[];if(o.length>0&&!o.includes(`refresh_token`))return f.info(`AS does not advertise refresh_token grant; skipping silent renewal`,{id:t}),null;let s=await _(e.fetchImpl),c=await l({tokenEndpoint:a.tokenEndpoint,clientId:e.auth.clientId,refreshToken:r,scope:e.auth.scope,fetchImpl:s});return await i({providerId:t,accessToken:c.accessToken,refreshToken:c.refreshToken??r,tokenExpiresAt:c.expiresAt,scopes:c.scope??n.scopes}),c.accessToken}catch(e){return f.warn(`MCP silent renewal failed`,{id:t,error:e instanceof Error?e.message:String(e)}),null}}}}function b(e){let n=m(e.name);if(g.has(n))return;let r=y(e);t(r),g.add(n),f.debug(`Registered MCP provider`,{id:n})}async function x(e,t={}){let n=m(e);if(g.has(n)&&r(n))return!0;if(!p())return!1;let i=await d(e);return i?(b({name:e,serverUrl:i.serverUrl,auth:i.auth,...t}),!0):!1}async function S(){if(!p())return[];let{readMcpAuthEntries:e}=await import(`./provider-store-access-dlrRLglC.js`),t=await e(),n=[];for(let e of t)b({name:e.name,serverUrl:e.serverUrl,auth:e.auth}),n.push(m(e.name));return n}function C(e){let t=m(e);return g.delete(t),h.delete(t),n(t)}export{S as ensureAllMcpProvidersRegistered,x as ensureMcpProviderRegistered,b as registerMcpProvider,C as removeMcpProvider};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.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-6A7ULWsO.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-BfNg24Ce.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-46v21F6v.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-BY6VkVG7.js`),"/packages/webapp/providers/cerebras.ts":()=>import(`./cerebras-Tsgj47QL.js`),"/packages/webapp/providers/github-copilot.ts":()=>import(`./github-copilot-BwNKa1YA.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-DjPj9qkm.js`),"/packages/webapp/providers/openai-codex.ts":()=>import(`./openai-codex-B4yjYiyu.js`),"/packages/webapp/providers/openrouter-models.ts":()=>import(`./openrouter-models-Ds9BfRxR.js`),"/packages/webapp/providers/openrouter-oauth.ts":()=>import(`./openrouter-oauth-F7U_v5W7.js`),"/packages/webapp/providers/openrouter.ts":()=>import(`./openrouter-DEc7uQ6U.js`),"/packages/webapp/providers/xai-grok-errors.ts":()=>import(`./xai-grok-errors-ByEMMSoz.js`),"/packages/webapp/providers/xai-grok.ts":()=>import(`./xai-grok-CNQFCjQM.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-Dd_uD5pT.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-2PeEIEpE.js`),"./built-in/bedrock-camp.ts":()=>import(`./bedrock-camp-BfNg24Ce.js`).then(e=>e.n),"./built-in/local-llm.ts":()=>import(`./local-llm-Ca41QR9W.js`).then(e=>e.n)}),o=Object.assign({"/packages/webapp/providers/adobe.ts":()=>import(`./adobe-DRIeZ7SH.js`),"/packages/webapp/providers/cerebras.ts":()=>import(`./cerebras-Ba7Z9duV.js`),"/packages/webapp/providers/github-copilot.ts":()=>import(`./github-copilot-DlzADrSr.js`),"/packages/webapp/providers/github.ts":()=>import(`./github-BjNCMOTH.js`),"/packages/webapp/providers/openai-codex.ts":()=>import(`./openai-codex-CZs8JRSw.js`),"/packages/webapp/providers/openrouter-models.ts":()=>import(`./openrouter-models-Ds9BfRxR.js`),"/packages/webapp/providers/openrouter-oauth.ts":()=>import(`./openrouter-oauth-DK-5hp2X.js`),"/packages/webapp/providers/openrouter.ts":()=>import(`./openrouter-Bvd2Eqif.js`),"/packages/webapp/providers/xai-grok-errors.ts":()=>import(`./xai-grok-errors-ByEMMSoz.js`),"/packages/webapp/providers/xai-grok.ts":()=>import(`./xai-grok-CTETAYca.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-DYx6GjSK.js","assets/account-store-DhXm-hp2.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-5-UeqOh8.js","assets/base64-DpPqYZJF.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/float-topology-BX3WJDxo.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/panel-rpc-B3MSVImO.js","assets/local-llm-4eumet6V.js","assets/legacy-api-aliases-C2CCsk4u.js","assets/adobe-ZJw2pWdU.js","assets/provider-settings-BjjWqkj0.js","assets/telemetry-DeLkquP_.js","assets/runtime-env-CgsZ7LTp.js","assets/tray-runtime-config-DAGrwZQV.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/silent-renew-backoff-BhyOB6Rq.js","assets/bridge-launch-params-zrpWWxT3.js","assets/oauth-service-C9Jn4g2n.js","assets/permissions-surface-registry-CilCRwhh.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-EP9KkiyX.js","assets/github-copilot-Clu3Ah3c.js","assets/github-Dm6bGUQw.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-Cl-TQRio.js","assets/pkce-hGf_TEnP.js","assets/openrouter-models-BVfLgK5R.js","assets/openrouter-oauth-Cn0pR8xA.js","assets/openrouter-DxCfhknQ.js","assets/xai-grok-DKl8JIC2.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.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-DYx6GjSK.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-C8bCNVSq.js`).then(e=>e.n),__vite__mapDeps([4,2,5,6,3,7,8,9])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-4eumet6V.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,24,26]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-ZJw2pWdU.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,24,26,28,29,30,31,32,33,34,35,36,37,38,39,40])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-EP9KkiyX.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,24,26])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-Clu3Ah3c.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,24,26,28,29,30,31,32,33,34,35])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-Dm6bGUQw.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,24,31,32,28,29,30,33,34,35,36,37,38,39,44])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-Cl-TQRio.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,24,26,28,29,30,31,32,33,34,35,46])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-BVfLgK5R.js`),__vite__mapDeps([47,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-Cn0pR8xA.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,24,28,29,30,31,32,33,34,35,46])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-DxCfhknQ.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,24,26,28,29,30,31,32,33,34,35,47,48,46])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-DKl8JIC2.js`),__vite__mapDeps([50,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,28,29,30,31,32,33,34,35,46,51]))}),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-CSLwIPI9.js","assets/account-store-BxGdz4En.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-5-UeqOh8.js","assets/base64-DpPqYZJF.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/float-topology-BX3WJDxo.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/panel-rpc-B3MSVImO.js","assets/local-llm-CDx8pQEL.js","assets/legacy-api-aliases-C2CCsk4u.js","assets/adobe-BS726v5F.js","assets/provider-settings-DByKbVop.js","assets/telemetry-DeLkquP_.js","assets/runtime-env-CgsZ7LTp.js","assets/tray-runtime-config-DAGrwZQV.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/silent-renew-backoff-BhyOB6Rq.js","assets/bridge-launch-params-zrpWWxT3.js","assets/oauth-service-C9Jn4g2n.js","assets/permissions-surface-registry-CilCRwhh.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-QV_fd2ps.js","assets/github-copilot-7vobYWUU.js","assets/github-DGwuCXij.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-BTUlRTto.js","assets/pkce-hGf_TEnP.js","assets/openrouter-models-BVfLgK5R.js","assets/openrouter-oauth-C6mgQiRV.js","assets/openrouter-DYhI1zom.js","assets/xai-grok-C4yc6t0c.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.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-CSLwIPI9.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-C8bCNVSq.js`).then(e=>e.n),__vite__mapDeps([4,2,5,6,3,7,8,9])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-CDx8pQEL.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,24,26]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-BS726v5F.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,24,26,28,29,30,31,32,33,34,35,36,37,38,39,40])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-QV_fd2ps.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,24,26])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-7vobYWUU.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,24,26,28,29,30,31,32,33,34,35])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-DGwuCXij.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,24,31,32,28,29,30,33,34,35,36,37,38,39,44])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-BTUlRTto.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,24,26,28,29,30,31,32,33,34,35,46])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-BVfLgK5R.js`),__vite__mapDeps([47,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-C6mgQiRV.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,24,28,29,30,31,32,33,34,35,46])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-DYhI1zom.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,24,26,28,29,30,31,32,33,34,35,47,48,46])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-C4yc6t0c.js`),__vite__mapDeps([50,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,28,29,30,31,32,33,34,35,46,51]))}),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 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-DhXm-hp2.js";import{l as a}from"./bedrock-camp-C8bCNVSq.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{i as c,t as l}from"./icons-DtQGhvkp.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-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-BxGdz4En.js";import{l as a}from"./bedrock-camp-C8bCNVSq.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{i as c,t as l}from"./icons-DtQGhvkp.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{t as e}from"./main-Cc_Ew7tx.js";async function t(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function n(n,r,i={}){if(n.dataset.recoveryBusy===`1`)return;let a=i.wipe??t,o=i.reload??(()=>location.reload()),s=r instanceof Error?r.message:String(r),c=i.verdict===`browser-wedged`,l=document.createElement(`div`);l.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let u=document.createElement(`h1`);u.style.color=`var(--s2-negative, #e34850)`,u.textContent=c?`Your browser needs a restart`:`Failed to start`;let d=document.createElement(`p`);d.style.color=`var(--s2-content-tertiary, #717171)`,d.textContent=s;let f=document.createElement(`div`);f.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let p=document.createElement(`button`);p.type=`button`,p.textContent=`Reset local data & reload`,p.dataset.variant=c?`demoted`:`destructive`,p.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let m=document.createElement(`button`);if(m.type=`button`,m.textContent=`Reload`,m.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-accent, #0265dc);background:var(--s2-accent, #0265dc);color:#fff;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,p.addEventListener(`click`,()=>{p.disabled=!0,m.disabled=!0,p.textContent=`Resetting…`,n.dataset.recoveryBusy=`1`,(async()=>{try{await a()}catch{}for(let t of e)try{localStorage.removeItem(t)}catch{}o()})()}),m.addEventListener(`click`,()=>{o()}),c){let e=document.createElement(`p`);e.style.cssText=`max-width:34rem;margin:1rem auto 0;`,e.textContent=`This browser has stopped starting web workers — a browser process issue, not a problem with your data. Quit the browser completely, reopen it, and come back. Your local data is intact; resetting it will not fix this.`,l.append(u,d,e),f.append(m,p)}else l.append(u,d),f.append(p,m);for(l.append(f);n.firstChild;)n.removeChild(n.firstChild);n.appendChild(l)}export{n as renderBootRecoveryScreen};
1
+ import{t as e}from"./main-CBjLDGjV.js";async function t(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function n(n,r,i={}){if(n.dataset.recoveryBusy===`1`)return;let a=i.wipe??t,o=i.reload??(()=>location.reload()),s=r instanceof Error?r.message:String(r),c=i.verdict===`browser-wedged`,l=document.createElement(`div`);l.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let u=document.createElement(`h1`);u.style.color=`var(--s2-negative, #e34850)`,u.textContent=c?`Your browser needs a restart`:`Failed to start`;let d=document.createElement(`p`);d.style.color=`var(--s2-content-tertiary, #717171)`,d.textContent=s;let f=document.createElement(`div`);f.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let p=document.createElement(`button`);p.type=`button`,p.textContent=`Reset local data & reload`,p.dataset.variant=c?`demoted`:`destructive`,p.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let m=document.createElement(`button`);if(m.type=`button`,m.textContent=`Reload`,m.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-accent, #0265dc);background:var(--s2-accent, #0265dc);color:#fff;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,p.addEventListener(`click`,()=>{p.disabled=!0,m.disabled=!0,p.textContent=`Resetting…`,n.dataset.recoveryBusy=`1`,(async()=>{try{await a()}catch{}for(let t of e)try{localStorage.removeItem(t)}catch{}o()})()}),m.addEventListener(`click`,()=>{o()}),c){let e=document.createElement(`p`);e.style.cssText=`max-width:34rem;margin:1rem auto 0;`,e.textContent=`This browser has stopped starting web workers — a browser process issue, not a problem with your data. Quit the browser completely, reopen it, and come back. Your local data is intact; resetting it will not fix this.`,l.append(u,d,e),f.append(m,p)}else l.append(u,d),f.append(p,m);for(l.append(f);n.firstChild;)n.removeChild(n.firstChild);n.appendChild(l)}export{n as renderBootRecoveryScreen};
@@ -1 +1 @@
1
- import{it as e}from"./account-store-Bs5wYmPH.js";async function t(){let t=e();if(t===`extension-direct`){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}if(t===`node-rest`){let{getLocalApiBaseUrl:e}=await import(`./proxied-fetch-CWqWgyRG.js`).then(e=>e.n),t=e();if(t)return`${t}/auth/callback`}let{getOAuthPageOrigin:n}=await import(`./oauth-service-DNcIcWT8.js`),{origin:r}=await n();return`${r}${t===`extension-delegate`?`/auth/mcp-callback`:`/auth/callback`}`}export{t};
1
+ import{it as e}from"./account-store-BOO_CzoH.js";async function t(){let t=e();if(t===`extension-direct`){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}if(t===`node-rest`){let{getLocalApiBaseUrl:e}=await import(`./proxied-fetch-CWqWgyRG.js`).then(e=>e.n),t=e();if(t)return`${t}/auth/callback`}let{getOAuthPageOrigin:n}=await import(`./oauth-service-DNcIcWT8.js`),{origin:r}=await n();return`${r}${t===`extension-delegate`?`/auth/mcp-callback`:`/auth/callback`}`}export{t};
@@ -0,0 +1,152 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-nv9Pz0pZ.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-BxGdz4En.js","assets/preload-helper-Czpn1I53.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-5-UeqOh8.js","assets/base64-DpPqYZJF.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/float-topology-BX3WJDxo.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Db_Doqrk.js","assets/panel-rpc-B3MSVImO.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Q as t,X as n,Z as r}from"./account-store-BxGdz4En.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{l as a}from"./bedrock-camp-C8bCNVSq.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./attachments-CByeG2Ru.js";import{t as c}from"./types-idfTVsM8.js";import{t as l}from"./icons-DtQGhvkp.js";import{a as u}from"./dictation-priming-CNllGgNq.js";import"./agent-message-to-chat-_cvF5A5g.js";var d=`---
3
+ writablePaths:
4
+ - /workspace/CLAUDE.md
5
+ visiblePaths:
6
+ - /sessions/
7
+ - /shared/
8
+ - /workspace/
9
+ allowedCommands:
10
+ - awk
11
+ - cat
12
+ - cp
13
+ - cut
14
+ - echo
15
+ - file
16
+ - find
17
+ - grep
18
+ - head
19
+ - jq # structured reads of JSON stores such as /shared/loose-ends.json
20
+ - ls
21
+ - mkdir
22
+ - mv
23
+ - od # read-only byte inspection of corrupted stores
24
+ - printf
25
+ - rg # recursive, .gitignore-aware search; what the curator actually uses over find|xargs grep
26
+ - sed
27
+ - sort
28
+ - tail
29
+ - tr
30
+ - uniq
31
+ - upskill
32
+ - wc
33
+ timeoutSeconds: 1200
34
+ thinkingLevel: medium
35
+ ---
36
+
37
+ # Memory curator
38
+
39
+ Curate the durable memory for session {{SESSION_COUNT}}. Today's date is {{TODAY}}.
40
+
41
+ **Work fast: a full pass should finish in well under 10 minutes.** The run is hard-stopped at 20 minutes, and a kill mid-write can corrupt the memory file or leave it over budget — so mine the three signals, rewrite the file, compact it in the same pass, and stop, rather than exploring the archive exhaustively.
42
+
43
+ Read the entire current memory at {{MEMORY_PATH}} if it exists. Then mine the archived session at {{SESSION_ARCHIVE_PATH}} using the reading recipes below. Rewrite the entire {{MEMORY_PATH}} file with the durable information worth carrying into future sessions. Every part of the file is editable and counts toward the budget.
44
+
45
+ ## What to look for
46
+
47
+ Three things carry across sessions, and each has its own place in the archive:
48
+
49
+ | Look for | Where it lives |
50
+ | --------------- | ---------------------------------------------------------------------- |
51
+ | **Preferences** | the user's own messages — how they want things done, and what to avoid |
52
+ | **Projects** | tool-call arguments — the paths, repos and files actually worked on |
53
+ | **Pitfalls** | failed tool calls — what broke, and the error that proves it |
54
+
55
+ Pitfalls are the highest-value and most-often-lost category: a failure that cost half an hour is worth one line next time. Keep the error text that identifies it, not the stack trace.
56
+
57
+ ## Reading the session archive
58
+
59
+ **Never \`cat\` the archive and never \`head\` it.** Archives reach several megabytes, and the machine-readable \`<!-- slicc:session-data ... -->\` block is a _single line_ holding the whole session as JSON — roughly half the file. Reading it costs a fortune and tells you nothing the prose below it does not. Whole \`### Tool\` result bodies are the other half and are equally not worth reading.
60
+
61
+ Check the size first, then pull the three signals separately. Together they run about 1% of the archive, so these work on a 2.5 MB file as happily as on a small one.
62
+
63
+ \`\`\`bash
64
+ wc -c {{SESSION_ARCHIVE_PATH}}
65
+
66
+ # Preferences — what the user asked for, in their words.
67
+ sed '/^<!-- slicc:session-data$/,/^-->$/d' {{SESSION_ARCHIVE_PATH}} \\
68
+ | awk '/^## User/{p=1;next} /^## (Assistant|Summary)/{p=0} /^### Tool/{p=0} p'
69
+
70
+ # Projects — the paths touched most, which name the work.
71
+ sed '/^<!-- slicc:session-data$/,/^-->$/d' {{SESSION_ARCHIVE_PATH}} \\
72
+ | grep -o '/[A-Za-z0-9_][A-Za-z0-9_./-]\\{3,\\}' \\
73
+ | sort | uniq -c | sort -rn | head -40
74
+
75
+ # Pitfalls — failed calls with the input that caused them.
76
+ sed '/^<!-- slicc:session-data$/,/^-->$/d' {{SESSION_ARCHIVE_PATH}} \\
77
+ | grep -B6 '^Result:.*\\(rror\\|not found\\|failed\\|denied\\|ENOENT\\|fatal\\)' \\
78
+ | cut -c1-200
79
+ \`\`\`
80
+
81
+ Only if something is still missing, reach into one specific block with \`grep -n\` plus a bounded \`sed -n 'START,ENDp'\`. Never widen these to the whole file.
82
+
83
+ ## Suggesting a skill
84
+
85
+ A recurring pitfall is often a missing skill. Once you know what broke and what the work was, spend **one** lookup on it — no more, and skip it entirely when the session had no failures:
86
+
87
+ \`\`\`bash
88
+ upskill search <a few words from the pitfall>
89
+ upskill list # what is already installed — never suggest a duplicate
90
+ \`\`\`
91
+
92
+ \`upskill ai-ecoverse/skills\` and \`upskill adobe/skills\` list a repo's skills without installing anything. **Never install.** You have no write access outside {{MEMORY_PATH}}, so an install attempt will fail or interrupt the user for approval; recommending is your job, deciding is theirs. Put any suggestion in your closing message, with the pitfall it addresses — that message is delivered to the main agent.
93
+
94
+ ## Working within the budget
95
+
96
+ Measure, decide, then write once. Do not converge on the budget by trial and error — each attempt re-reads your whole context and is billed accordingly.
97
+
98
+ 1. \`wc -c {{MEMORY_PATH}}\` to get the current size, and subtract {{BUDGET_CHARS}} to get the exact surplus.
99
+ 2. Decide up front which sections absorb that surplus, oldest-dated first, and roughly what each one costs. Budget the whole cut before editing anything.
100
+ 3. Write the complete file once, already inside the budget. Never write a version you know to be over budget «to fix in the next step»: the pass can be killed at any moment, and the file you leave behind is the one the next session inherits.
101
+ 4. \`wc -c {{MEMORY_PATH}}\` to confirm. If you are still over, cut a whole section rather than shaving a few characters at a time.
102
+
103
+ If the pass is running long, drop the oldest-dated section wholesale and write. An under-budget file missing one stale section is a good outcome; an over-budget file is a broken one.
104
+
105
+ Rules:
106
+
107
+ - Keep durable preferences, stable project facts, validated approaches, named resources, and the pitfalls worth not repeating.
108
+ - Organize retained information into concise per-topic sections rather than one flat list. Let the topic lead the heading; preferences, projects and pitfalls are what to look for, not a required table of contents.
109
+ - Write the memory file only. Do not create backups or scratch copies next to it — the file is versioned, and you have no write access anywhere else.
110
+ - End every \`##\` and \`###\` section heading with its last-verified date in \`YYYY-MM-DD\` form, for example \`## Deployment pipeline (2026-08-06)\`. Dates are UTC, matching the session archive timestamps, so a late-evening freeze west of UTC stamps the next day.
111
+ - Stamp sections you write or confirm with today's date, {{TODAY}}.
112
+ - Prioritize re-verifying the oldest-dated sections. Treat undated headings as maximally stale and date them on this pass.
113
+ - Drop ephemera and duplicates. Delete or merge sections that are stale, superseded, or unverifiable.
114
+ - Preserve concrete identifiers such as file paths, URLs, IDs, and names verbatim.
115
+ - Keep the entire file at or below the hard budget of {{BUDGET_CHARS}} characters, with no exempt region. When over budget, compact or remove the oldest-dated sections first.
116
+ - Write the result to {{MEMORY_PATH}}; do not merely return it in your response.
117
+
118
+ <!-- How to customize
119
+ Add curator instructions here, for example: also update the knowledge base at /path following its WIKI.md. Extend visiblePaths or writablePaths above to grant access to extra stores, and adjust timeoutSeconds when needed.
120
+
121
+ writablePaths defaults to the memory file alone rather than /workspace/, because the curator can run upskill and a directory-wide grant would also let it install skills into /workspace/skills. Widen it only as far as a task genuinely needs; a single file is a valid entry, not just a directory.
122
+
123
+ thinkingLevel accepts off, minimal, low, medium, high, or xhigh. Curation is cheaper with reasoning than without: an unreasoned pass converges on the budget by trial and error, and because every turn re-reads the whole context, turn count is what the pass costs. Lower it to off only if you also shrink the prompt to a single mechanical instruction.
124
+
125
+ MEMORY.md is user-edited only: the curator intentionally has read-only access to /shared/ and cannot rewrite its own instructions. A bare / is rejected in writablePaths.
126
+
127
+ Frontmatter supports a strict YAML subset. Arrays may use the block form above (with optional # comment tails) or inline form such as [cat, grep]. \`allowedCommands\` is additive: listed commands extend the built-in base set without replacing it. Inline entries containing commas must be quoted, for example ["/knowledge/lars,rebecca/"].
128
+ -->
129
+ `,f=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`];function ee(e){return typeof e==`string`&&f.includes(e)}o(`agent-bridge`);var te=`agent: name already in use`,p=o(`cone-memory-budget`),ne=4e3,re=2e3,ie=1.25,m=`/workspace/CLAUDE.md`,ae=`/sessions/index.json`,oe=4096,se=/^## Auto-extracted/m,ce=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
130
+
131
+ Rules:
132
+ - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
133
+ - One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
134
+ - Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
135
+ - Be terse. Aim well under the original size.
136
+ - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function h(e){return Math.round(ne+re*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function le(e){let t=se.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function g(e){try{let t=await e.readFile(ae,{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 ue(e){let{header:t,autoExtracted:n}=le(e.currentContent);if(!n.trim())return e.currentContent;let r=`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.
137
+
138
+ <auto-extracted>
139
+ ${n}
140
+ </auto-extracted>`,i={role:`user`,content:[{type:`text`,text:ce}],timestamp:Date.now()},o=await a(e.model,{systemPrompt:r,messages:[i]},{apiKey:e.apiKey,maxTokens:oe,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(`
141
+ `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
142
+ `)?``:`
143
+ `}${s}\n`}async function de(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(m,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await g(e.vfs),r=h(n),i=r*ie;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};p.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await ue({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(m,n),p.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return p.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}var _=o(`agentic-memory`),fe=`/shared/MEMORY.md`,pe=1200,me=[m],he=[`/sessions/`,`/shared/`,`/workspace/`],ge=`/workspace`,_e=`awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.sed.sort.stat.tail.touch.tr.uniq.upskill.wc.xxd`.split(`.`),ve=new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),ye=new Set([`model`,`timeoutSeconds`,`thinkingLevel`]),be=`medium`,v=3e4;async function xe(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=await Se(e.vfs),n=Ae(t,je(t.promptTemplate,{MEMORY_PATH:m,SESSION_ARCHIVE_PATH:e.sessionArchivePath,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(h(e.sessionCount)),TODAY:e.today??new Date().toISOString().slice(0,10)}),e.sessionArchivePath);e.signal&&(n.signal=e.signal);let r=await Me(Promise.resolve().then(()=>e.spawn(n)),t.timeoutSeconds*1e3+v,e.signal);if(r.type===`timeout`)return _.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:t.timeoutSeconds,graceMs:v}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(r.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(r.type===`error`)return{ok:!1,reason:w(r.error),legacyFallbackSafe:!0};if(r.result.exitCode!==0){let e=(r.result.finalText??``).startsWith(te);return{ok:!1,reason:r.result.finalText||`exit-${r.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:r.result.finalText}}catch(e){return _.warn(`Agentic memory pass failed`,{error:w(e)}),{ok:!1,reason:w(e),legacyFallbackSafe:!1}}}async function Se(e){try{let t=await e.readFile(fe,{encoding:`utf-8`});return y(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){return _.warn(`Could not load valid MEMORY.md; using built-in default`,{error:w(e)}),y(d)}}function y(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
144
+ `).match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t?.[2].trim())throw Error(`MEMORY.md requires frontmatter and a prompt`);let n=we(t[1]),r=x(n,`writablePaths`,me);if(r.length===0)throw Error(`writablePaths must not be empty`);S(r,`writablePaths`);let i=x(n,`visiblePaths`,he);S(i,`visiblePaths`);let a=ke(n.timeoutSeconds),o=Oe(n.model,`model`);return{writablePaths:r,visiblePaths:i,allowedCommands:[...new Set([..._e,...x(n,`allowedCommands`,[])])],...o?{model:o}:{},thinkingLevel:Ce(n.thinkingLevel),timeoutSeconds:a,promptTemplate:t[2].trim()}}function Ce(e){if(e===void 0)return be;if(typeof e!=`string`||!ee(e))throw Error(`thinkingLevel must be one of ${f.join(`, `)}`);return e}function we(e){let t={},n=e.split(`
145
+ `);for(let e=0;e<n.length;e+=1){let r=n[e];if(!r.trim()||r.trimStart().startsWith(`#`))continue;let i=r.match(/^([A-Za-z][A-Za-z0-9]*):\s*(.*)$/);if(!i)throw Error(`Invalid frontmatter line: ${r}`);let[,a,o]=i;if(ve.has(a)){let r=Te(n,e,o);t[a]=r.value,e=r.lastIndex}else if(ye.has(a)&&o.trim())t[a]=b(o);else throw Error(`Unsupported or empty frontmatter field: ${a}`)}return t}function Te(e,t,n){if(n.trim()){let e=n.trim();if(!e.startsWith(`[`)||!e.endsWith(`]`))throw Error(`Expected an array`);let r=e.slice(1,-1).trim();return{value:r?Ee(r):[],lastIndex:t}}let r=[],i=t;for(let n=t+1;n<e.length;n+=1){let t=e[n].match(/^\s+-\s+(.+)$/);if(!t)break;r.push(b(De(t[1]))),i=n}return{value:r,lastIndex:i}}function Ee(e){let t=[],n=0,r;for(let i=0;i<e.length;i+=1){let a=e[i];a===`"`||a===`'`?r=r===a?void 0:r??a:a===`,`&&!r&&(t.push(b(e.slice(n,i))),n=i+1)}if(r)throw Error(`Unclosed quoted value`);return t.push(b(e.slice(n))),t}function De(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`"`||r===`'`)t=t===r?void 0:t??r;else if(r===`#`&&!t&&(n===0||/\s/.test(e[n-1])))return e.slice(0,n).trimEnd()}return e}function b(e){let t=e.trim();if(!t)throw Error(`Empty frontmatter value`);let n=t[0];if((n===`"`||n===`'`)&&t.at(-1)===n)return t.slice(1,-1);if(n===`"`||n===`'`)throw Error(`Unclosed quoted value`);return t}function x(e,t,n){let r=e[t];if(r===void 0)return[...n];if(!Array.isArray(r)||r.some(e=>!e))throw Error(`${t} is invalid`);return[...r]}function Oe(e,t){if(e!==void 0){if(typeof e!=`string`||!e)throw Error(`${t} is invalid`);return e}}function ke(e){if(e===void 0)return 600;if(typeof e!=`string`)throw Error(`timeoutSeconds is invalid`);let t=Number(e);if(!Number.isFinite(t)||t<=0)throw Error(`timeoutSeconds must be positive`);return Math.min(t,pe)}function S(e,t){if(e.some(e=>!e.startsWith(`/`)||e.includes(`\0`)||t===`writablePaths`&&e===`/`))throw Error(`${t} must contain absolute VFS paths`)}function C(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function Ae(e,t,n){let r=e.model===`parent`||e.model===`cone`;return{cwd:ge,writablePaths:e.writablePaths,visiblePaths:e.visiblePaths,allowedCommands:e.allowedCommands,prompt:t,thinkingLevel:e.thinkingLevel,persistSession:!0,name:`memory-curator`,notifyOnComplete:!0,successReceiptPath:C(n),maxWallClockMs:e.timeoutSeconds*1e3,...!r&&e.model?{modelId:e.model}:{}}}function je(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Me(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function w(e){return e instanceof Error?e.message:String(e)}var T=`/sessions`,E=`/sessions/index.json`;async function D(e){try{let t=await e.readFile(E,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function O(e){return`${T}/${e.filename}`}function k(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length);let e=A(i[1],`cost`),a=A(i[1],`models`);e&&(r.cost=e),a&&(r.models=a);let o=i[1].match(/^title:\s*(.+?)\s*$/m);if(o){let e=o[1].trim();if(e.startsWith(`"`))try{let t=JSON.parse(e);typeof t==`string`&&(n=t)}catch{n=e.replace(/^"|"$/g,``)}else n=e}}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:Ne(t),...r}}function A(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function Ne(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}function j(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(e)}`).join(`
146
+ `)}\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 Pe=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>E,curateFrozenSessionMemories:()=>I,enrichPendingSession:()=>Y,freezeConeSession:()=>F,listPendingEnrichments:()=>K,markSnapshotUnavailable:()=>$,processPendingSessions:()=>q,readSessionsIndex:()=>D}),M=o(`session-freezer`),Fe=4,N=2048,P=40,Ie=`${T}/attachments`;async function F(e){let t=await qe(e.sessionStore);if(!t||t.messages.length<Fe)return M.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=V(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);e.agenticMemorySpawn||await R(e,n,i);let a=await Re(e,n,i)||Qe(t.messages);return await ze(e,t,a,r,i?await Le(e,a):void 0,!!e.agenticMemorySpawn)}async function I(e,t){let n=V(t.archive.messages),r;try{r=await xe({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:O(t),sessionCount:await g(e.vfs)})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await ut(e.vfs,t.filename);return await X(e.vfs,t.filename),n?(delete t.memoryPending,M.info(`Agentic memory pass completed`,{filename:t.filename}),n):(M.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return r.legacyFallbackSafe?(M.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await R(e,n,!0),null):(M.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function Le(e,t){try{return L(await(e.pickIcon??(await i(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-nv9Pz0pZ.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,27]))).pickLucideIcon)({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){M.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function L(e){if(e)return l(e)?e:void 0}async function R(e,r,i){if(!i){M.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let a=``;try{a=await t({messages:r,instruction:n,model:e.model,apiKey:e.apiKey,maxTokens:N,headers:e.headers})}catch(e){M.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!a.trim()||a.trim()===`NONE`){M.info(`Memory extraction returned no durable memories`);return}try{await G(e.vfs,a.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),M.info(`Memory extracted and appended on new-session`)}catch(e){M.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Re(e,n,i){if(!i)return``;try{return H(await t({messages:n,instruction:r,model:e.model,apiKey:e.apiKey,maxTokens:P,headers:e.headers}))}catch(e){return M.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function ze(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=crypto.randomUUID(),c=r===`quick`?`pending-${$e()}.md`:`${o.replace(/[:.]/g,`-`)}-${U(n)}.md`,l=Be(t.messages),u={filename:c,sessionId:s,title:n,frozenAt:o,messageCount:t.messages.length,...l??{},...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{}};try{await W(e.vfs,T);let r=await He(e.vfs,t.messages,c.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...l??{}},a=Ze(i);return await e.vfs.writeFile(`${T}/${c}`,a),await tt(e.vfs,u),await e.vfs.flush(),M.info(`Cone session frozen`,{filename:c,title:n,messageCount:t.messages.length}),{...u,archive:i}}catch(e){return M.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Be(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!Ve(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function z(e){return typeof e==`number`&&Number.isFinite(e)}function Ve(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(z)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(z)}async function He(e,t,n){let r={vfs:e,archiveDir:`${Ie}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(B)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await Ue(r,n));i.push({...e,attachments:t})}return i}async function Ue(e,t){if(!B(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await We(e.vfs,t.path);if(!r)return Ke(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await W(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function We(e,t){try{if(!await Ge(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 B(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function Ge(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 Ke(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function qe(e){try{return await e.load(`session-cone`)}catch(e){return M.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function V(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var Je=`<!-- slicc:session-data
147
+ `,Ye=`
148
+ -->`;function Xe(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 Ze(e){let t=(e.cost?`cost: ${JSON.stringify(e.cost)}\n`:``)+(e.models?`models: ${JSON.stringify(e.models)}\n`:``),n=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n`+t+`---
149
+
150
+ `,r=`${Je}${JSON.stringify(Xe(e.messages)).replace(/-->/g,`-- >`)}${Ye}\n\n`,i=`# ${e.title}\n\n`;return n+r+i+j(e.messages)}function H(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 Qe(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 U(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function $e(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function et(e){return e.startsWith(`pending-`)}async function W(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function G(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 W(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
151
+ `)?``:`
152
+ `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await de({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){M.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function tt(e,t){let n=[];try{let t=await e.readFile(E,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch(e){if(!(e instanceof c)||e.code!==`ENOENT`)throw e}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(E,JSON.stringify(r,null,2))}async function K(e){return(await D(e)).filter(e=>(e.pendingEnrichment===!0||e.memoryPending===!0)&&J(e)<3)}async function q(e){let t={attempted:0,completed:0};if(!e.model||!e.apiKey)return t;try{let n=await K(e.vfs);for(let r of n)try{let n=await dt(e.vfs,r.filename);if(!n)continue;t.attempted+=1,await Y(e.vfs,n,{model:e.model,apiKey:e.apiKey,headers:e.headers})&&(t.completed+=1)}catch(e){M.warn(`Pending session catch-up attempt failed`,{filename:r.filename,error:e instanceof Error?e.message:String(e)})}}catch(e){M.warn(`Pending session catch-up failed`,{error:e instanceof Error?e.message:String(e)})}return t}function J(e){let t=e.pendingAttemptCount;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:0}async function Y(e,t,n){if(!t.pendingEnrichment&&!t.memoryPending)return null;let r=await it(e,t);if(r===null)return null;let i=Z(t,r);if(i===null)return null;let a=t.memoryPending===!0&&n.skipMemory!==!0&&await nt(e,t),o=a?{...n,skipMemory:!0}:n,s=await at(t,i,o);if(s===null)return null;let c=await rt(o,s.newTitle);await ot(e,t,s.bullets,o);let l=await ct(e,t,r,s.newTitle,c,n.skipMemory===!0);return l&&a&&await X(e,t.filename),l}async function nt(e,t){try{return await e.stat(C(`/sessions/${t.filename}`)),!0}catch{return!1}}async function X(e,t){try{await e.rm(C(`/sessions/${t}`))}catch{}}async function rt(e,t){if(e.pickIcon)try{return await L(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){M.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function it(e,t){try{let n=await e.readFile(O(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?M.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):M.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function Z(e,t){let n;try{n=k(t).messages}catch(t){return M.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?(M.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):V(n)}async function at(e,i,a){let o=``;if(!a.skipMemory)try{o=await t({messages:i,instruction:n,model:a.model,apiKey:a.apiKey,maxTokens:N,headers:a.headers})}catch(t){return M.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=H(await t({messages:i,instruction:r,model:a.model,apiKey:a.apiKey,maxTokens:P,headers:a.headers}))}catch(t){return M.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:o,newTitle:s}:(M.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function ot(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await G(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){M.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}function st(e,t,n,r,i){let a=r??e.icon;return{filename:t,title:n,frozenAt:e.frozenAt,messageCount:e.messageCount,...e.cost?{cost:e.cost}:{},...e.models?{models:e.models}:{},...e.sessionId?{sessionId:e.sessionId}:{},...a?{icon:a}:{},...e.completeSnapshotUnavailable?{completeSnapshotUnavailable:!0}:{},...i&&e.memoryPending?{memoryPending:!0}:{}}}async function ct(e,t,n,r,i,a=!1){let o=O(t),s=et(t.filename),c=s?r:t.title,l=s?`${t.frozenAt.replace(/[:.]/g,`-`)}-${U(r)}.md`:t.filename,u=`${T}/${l}`;if(s)try{await W(e,T),await e.writeFile(u,lt(n,c))}catch(e){return M.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let d=st(t,l,c,i,a);try{await ft(e,t.filename,d)}catch(e){return M.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(u!==o)try{await e.rm(o)}catch(e){M.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:o,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return M.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:l,title:c}),d}function lt(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 Q=Promise.resolve();async function ut(e,t){let n=null,r=async()=>{let r=await D(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let{memoryPending:a,pendingEnrichment:o,pendingAttemptCount:s,...c}=r[i],l=r.slice();l[i]=c,await e.writeFile(E,JSON.stringify(l,null,2)),await e.flush(),n=c},i=Q.then(r,r);Q=i.then(()=>void 0,()=>void 0);try{await i}catch(e){M.warn(`Failed to clear agentic memory pending marker`,{filename:t,error:e instanceof Error?e.message:String(e)})}return n}async function dt(e,t){let n=null,r=async()=>{let r=await D(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i];if(!a.pendingEnrichment&&!a.memoryPending)return;let o=J(a);if(o>=3)return;n={...a,pendingAttemptCount:o+1};let s=r.slice();s[i]=n,await e.writeFile(E,JSON.stringify(s,null,2)),await e.flush()},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),await i,n}async function ft(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(E,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch(e){if(!(e instanceof c)||e.code!==`ENOENT`)throw e}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(E,JSON.stringify(a,null,2))},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),i}async function $(e,t){let n=async()=>{let n=[];try{let t=await e.readFile(E,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch(e){if(!(e instanceof c)||e.code!==`ENOENT`)throw e;return}if(!n.find(e=>e.filename===t))return;let r=n.map(e=>e.filename===t?{...e,completeSnapshotUnavailable:!0}:e);await e.writeFile(E,JSON.stringify(r,null,2))},r=Q.then(n,n);return Q=r.then(()=>void 0,()=>void 0),r}export{q as a,E as c,D as d,$ as i,O as l,Y as n,Pe as o,F as r,j as s,I as t,k as u};
@@ -1 +1 @@
1
- import{n as e}from"./feature-flags-Cf-Bv5AK.js";import{h as t,n,t as r}from"./tray-runtime-config-DAGrwZQV.js";import{n as i,r as a}from"./main-Cc_Ew7tx.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){return!u(e)||!u(e.flags)||Object.values(e.flags).some(e=>typeof e!=`string`)?null:e.flags}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
1
+ import{n as e}from"./feature-flags-ByMXaIc4.js";import{h as t,n,t as r}from"./tray-runtime-config-DAGrwZQV.js";import{n as i,r as a}from"./main-CBjLDGjV.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){return!u(e)||!u(e.flags)||Object.values(e.flags).some(e=>typeof e!=`string`)?null:e.flags}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-Cn0JxFJP.js","assets/logger-BoSvu4mW.js","assets/tray-leader-wwljq4Tw.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/proxied-fetch-5-UeqOh8.js","assets/preload-helper-Czpn1I53.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/tray-runtime-config-DAGrwZQV.js","assets/messages-BD4p8GuF.js","assets/db-C7OEVMWU.js","assets/cdp-BAGGi_P9.js","assets/navigation-watcher-CcKsLKw9.js","assets/handoff-link-BM4ctkE8.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-L2scWl6W.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./src-CAWTvdAa.js";import{c as n,l as r,s as i}from"./proxied-fetch-5-UeqOh8.js";import{t as a}from"./bridge-launch-params-zrpWWxT3.js";import{t as o}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import"./messages-BD4p8GuF.js";import{d as s,s as c,t as l,u}from"./tray-runtime-config-DAGrwZQV.js";import{t as d}from"./setup-sudo-B2sKjBny.js";function f(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);if(t.searchParams.get(`connect`)===`1`)return`connect`;if(t.searchParams.get(`runtime`)===`hosted-leader`)return`hosted-leader`;if(t.searchParams.get(`cherry`)===`1`)return`cherry`;let r=n===void 0?typeof window<`u`?window.localStorage:null:n;return u(e,r)?`follower`:m(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function p(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function m(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}t(`stale-asset`);var h=`slicc-stale-asset-reload`;function g(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(h),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var _=`slicc:stale-asset-reloaded-at`,v=6e4,y=`slicc:stale-asset-replay`;function b(e=window.sessionStorage){try{e.setItem(y,`1`)}catch{}}function x(e=window.sessionStorage){try{return e.getItem(y)===`1`&&(e.removeItem(y),!0)}catch{return!1}}function S(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:v,storageKey:_}}function C(e,t,n){return e===null||t-e>=n}function w(e=S()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!C(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var T=null,E=null;function D(e){T||(E={...S(),...e},T=e=>{w(E)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,T))}var O=null;function k(e){return O||(O=g(e,e=>{e&&b(),w(E??void 0)}),O)}var A=`slicc-cdp-superseded-banner`;function j(e){if(e.getElementById(A))return;let t=e.createElement(`div`);t.id=A,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function M(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function N(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var P=[100,200,400,800,1600];async function F(e,t,n,r=P,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function I(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-Cn0JxFJP.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await F(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function L(t){let{runtimeMode:u,envBaseUrl:f,window:m,log:h}=t,g=u===`electron-overlay`;h.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:u});let{BrowserAPI:_}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-BAGGi_P9.js`);return{BrowserAPI:e}},__vite__mapDeps([18,1,2,4,19,20,10,21,22]));await d({log:h});let v,y,b,x=null,S=null,C=null,w=null,T,E=u===`cherry`?null:N(m.location.search),D=!!E&&o(),O=u===`cherry`||D?null:a(m.location.search);O?.apiBaseUrl&&(x=O.apiBaseUrl,r(O.apiBaseUrl),S=O.token,i(O.token)),O?.lickWsUrl&&(C=O.lickWsUrl);let k=u===`cherry`||D||O!==null,A=await c(),P=p(u,A!==null)?l:null;if(await s({locationHref:m.location.href,storage:m.localStorage,envBaseUrl:f,defaultWorkerBaseUrl:P,runtimeConfigFetcher:async()=>A}),u===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-L2scWl6W.js`);return{setupCherryFollower:e}},__vite__mapDeps([23,1,10,2,18,4,19,20,21,22,24])),n=await t();v=n.browser,y=n.joinUrl,b=n.transport}else if(E&&o()){h.info(`Routing CDP through the extension bridge (leader tab)`);let e=await I(_,E.extensionId,h);v=e.browser,T=e.attachLickForwardingClient,w=E.extensionId,n(E.extensionId)}else{v=new _,O&&h.info(`Routing CDP through local standalone bridge`,{url:O.url,role:O.role??`(unset)`});let e=O?{url:O.url,protocols:O.subprotocol}:void 0;O?.role===`follower`?(h.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await F(v,e,h),v.setCdpSupersededHandler(()=>j(m.document)))}let L=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:L,hasLocalCdpSurface:k,cherryJoinUrl:y,cherryTransport:b,instanceId:M(),isElectronOverlay:g,localApiBaseUrl:x,bridgeToken:S,localLickWsUrl:C,extensionDelegateId:w,attachLickForwardingClient:T}}export{k as a,w as i,L as n,D as o,x as r,f as s,N as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-DZ5pLaXa.js","assets/logger-BoSvu4mW.js","assets/tray-leader-CXKotSM9.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/proxied-fetch-5-UeqOh8.js","assets/preload-helper-Czpn1I53.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/tray-runtime-config-DAGrwZQV.js","assets/messages-BD4p8GuF.js","assets/db-DIbBClfy.js","assets/cdp-BAGGi_P9.js","assets/navigation-watcher-CcKsLKw9.js","assets/handoff-link-BM4ctkE8.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-L2scWl6W.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./src-CAWTvdAa.js";import{c as n,l as r,s as i}from"./proxied-fetch-5-UeqOh8.js";import{t as a}from"./bridge-launch-params-zrpWWxT3.js";import{t as o}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import"./messages-BD4p8GuF.js";import{d as s,s as c,t as l,u}from"./tray-runtime-config-DAGrwZQV.js";import{t as d}from"./setup-sudo-CHykhXbm.js";function f(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);if(t.searchParams.get(`connect`)===`1`)return`connect`;if(t.searchParams.get(`runtime`)===`hosted-leader`)return`hosted-leader`;if(t.searchParams.get(`cherry`)===`1`)return`cherry`;let r=n===void 0?typeof window<`u`?window.localStorage:null:n;return u(e,r)?`follower`:m(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function p(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function m(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}t(`stale-asset`);var h=`slicc-stale-asset-reload`;function g(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(h),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var _=`slicc:stale-asset-reloaded-at`,v=6e4,y=`slicc:stale-asset-replay`;function b(e=window.sessionStorage){try{e.setItem(y,`1`)}catch{}}function x(e=window.sessionStorage){try{return e.getItem(y)===`1`&&(e.removeItem(y),!0)}catch{return!1}}function S(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:v,storageKey:_}}function C(e,t,n){return e===null||t-e>=n}function w(e=S()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!C(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var T=null,E=null;function D(e){T||(E={...S(),...e},T=e=>{w(E)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,T))}var O=null;function k(e){return O||(O=g(e,e=>{e&&b(),w(E??void 0)}),O)}var A=`slicc-cdp-superseded-banner`;function j(e){if(e.getElementById(A))return;let t=e.createElement(`div`);t.id=A,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function M(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function N(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var P=[100,200,400,800,1600];async function F(e,t,n,r=P,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function I(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-DZ5pLaXa.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await F(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function L(t){let{runtimeMode:u,envBaseUrl:f,window:m,log:h}=t,g=u===`electron-overlay`;h.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:u});let{BrowserAPI:_}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-BAGGi_P9.js`);return{BrowserAPI:e}},__vite__mapDeps([18,1,2,4,19,20,10,21,22]));await d({log:h});let v,y,b,x=null,S=null,C=null,w=null,T,E=u===`cherry`?null:N(m.location.search),D=!!E&&o(),O=u===`cherry`||D?null:a(m.location.search);O?.apiBaseUrl&&(x=O.apiBaseUrl,r(O.apiBaseUrl),S=O.token,i(O.token)),O?.lickWsUrl&&(C=O.lickWsUrl);let k=u===`cherry`||D||O!==null,A=await c(),P=p(u,A!==null)?l:null;if(await s({locationHref:m.location.href,storage:m.localStorage,envBaseUrl:f,defaultWorkerBaseUrl:P,runtimeConfigFetcher:async()=>A}),u===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-L2scWl6W.js`);return{setupCherryFollower:e}},__vite__mapDeps([23,1,10,2,18,4,19,20,21,22,24])),n=await t();v=n.browser,y=n.joinUrl,b=n.transport}else if(E&&o()){h.info(`Routing CDP through the extension bridge (leader tab)`);let e=await I(_,E.extensionId,h);v=e.browser,T=e.attachLickForwardingClient,w=E.extensionId,n(E.extensionId)}else{v=new _,O&&h.info(`Routing CDP through local standalone bridge`,{url:O.url,role:O.role??`(unset)`});let e=O?{url:O.url,protocols:O.subprotocol}:void 0;O?.role===`follower`?(h.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await F(v,e,h),v.setCdpSupersededHandler(()=>j(m.document)))}let L=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:L,hasLocalCdpSurface:k,cherryJoinUrl:y,cherryTransport:b,instanceId:M(),isElectronOverlay:g,localApiBaseUrl:x,bridgeToken:S,localLickWsUrl:C,extensionDelegateId:w,attachLickForwardingClient:T}}export{k as a,w as i,L as n,D as o,x as r,f as s,N as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-BpgGkYVu.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-5-UeqOh8.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-CQWlRmAB.js","assets/account-store-DhXm-hp2.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/float-topology-BX3WJDxo.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-BrDyUzyA.js","assets/panel-rpc-B3MSVImO.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js","assets/page-approval-service-BwheP_IN.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-BpgGkYVu.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-BpgGkYVu.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}export{n,r as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-Bi--9XjE.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-5-UeqOh8.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-nv9Pz0pZ.js","assets/account-store-BxGdz4En.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/float-topology-BX3WJDxo.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Db_Doqrk.js","assets/panel-rpc-B3MSVImO.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js","assets/page-approval-service-BwheP_IN.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-Bi--9XjE.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-Bi--9XjE.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}export{n,r as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import{i as a}from"./fs-DVnwglvE.js";const o=t(`sudo:sudoers`),s=`/etc/sudoers`,c=`/etc/sudoers.d`,l=/^\/scoops\/[^/]+\/etc\/sudoers$/;function u(e){return`/scoops/${e}/etc/sudoers`}function d(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function f(){return{cmnd:[],read:[],write:[],export:[]}}function p(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=p(r),n+=1)}return RegExp(`^${t}$`,`s`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`,`Export`]);function _(e){switch(e){case`read`:return`Read`;case`write`:return`Write`;case`export`:return`Export`;default:return`Cmnd`}}function v(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function y(e){let t=f();try{if(typeof e!=`string`)return t;for(let n of e.split(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import{i as a}from"./fs-Boij2gPF.js";const o=t(`sudo:sudoers`),s=`/etc/sudoers`,c=`/etc/sudoers.d`,l=/^\/scoops\/[^/]+\/etc\/sudoers$/;function u(e){return`/scoops/${e}/etc/sudoers`}function d(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function f(){return{cmnd:[],read:[],write:[],export:[]}}function p(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=p(r),n+=1)}return RegExp(`^${t}$`,`s`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`,`Export`]);function _(e){switch(e){case`read`:return`Read`;case`write`:return`Write`;case`export`:return`Export`;default:return`Cmnd`}}function v(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function y(e){let t=f();try{if(typeof e!=`string`)return t;for(let n of e.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let i=v(e);if(!i){o.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let a=i.directive===`Cmnd`||i.directive===`Export`?m:r,s={pattern:i.pattern,nopasswd:i.nopasswd,regex:a(i.pattern)};i.directive===`Cmnd`?t.cmnd.push(s):i.directive===`Read`?t.read.push(s):i.directive===`Export`?t.export.push(s):t.write.push(s)}return t}catch(e){return o.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),f()}}const ee=[`NOPASSWD Read /tmp`,`NOPASSWD Read /tmp/**`,`NOPASSWD Write /tmp`,`NOPASSWD Write /tmp/**`].join(`
3
3
  `);let b=null;function te(){return b??=y(ee),b}function x(...e){let t=f();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write),t.export.push(...n.export??[]));return t}function S(e,t){let n=!1;for(let r of e)if(r.regex.test(t)){if(r.nopasswd)return`nopasswd-allow`;n=!0}return n?`require-approval`:`no-match`}function ne(e,t){return S(e.export??[],t)===`nopasswd-allow`?`nopasswd-allow`:`require-approval`}function re(e,t){return S(e.cmnd,t.trim())}function ie(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||l.test(e)||e===`/etc/slicc/layouts`||e.startsWith(`/etc/slicc/layouts/`)}function C(e,t,r,i){let o=n(r);if(t===`write`){if(ie(o))return`require-approval`;if(i?.isContentWrite&&a(o))return`nopasswd-allow`}return S(t===`read`?e.read:e.write,o)}const w=t(`sudo:timeout`),T={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function E(e){return T[e]}function D(e=`user-timeout`){return{decision:`deny`,reason:e}}function O(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${E(n)}`:`${e}: approval denied`}function ae(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let l=!1,u=e=>{l=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},d=r(()=>{l||(w.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),u(D(`user-timeout`)))},n),f=e=>{if(l){w.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(d),u(e)};e.requestApproval(t,{signal:s.signal}).then(f,e=>{w.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),f({decision:`deny`})})})}}}const oe=t(`sudo:fs`),k=Symbol.for(`slicc.fs.monkeypatchUnsafe`),A=`${c}/granted`;function j(e){return O(`sudo`,e)}const M=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],N=[`writeFile`],P=[`mkdir`,`rm`];async function F(e,t,n,a){let o=h(a);if(!o)return;let s=t(),l={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?s.read:s.write).push(l);let u=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(A,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
4
4
  `)?`
@@ -0,0 +1 @@
1
+ function e(){return{version:`6.76.0`,releasedAt:`2026-08-21T18:05:31Z`,buildId:`6.76.0-mt39fh80`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
@@ -0,0 +1 @@
1
+ const e=`slicc-sprinkle-bridge`;function t(t){return t?`${e}:${t}`:e}function n(e={}){let n=e.timeoutMs??8e3;if(typeof BroadcastChannel!=`function`)return r();let a=t(e.instanceId),o=new BroadcastChannel(a),s=new Map;o.addEventListener(`message`,e=>{let t=e.data;if(t?.type!==`sprinkle-op-response`)return;let n=s.get(t.id);n&&(s.delete(t.id),clearTimeout(n.timer),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result))});function c(e,t={}){let r=i();return new Promise((i,a)=>{let c=setTimeout(()=>{s.delete(r),a(Error(`sprinkle op '${e}' timed out`))},n);s.set(r,{resolve:i,reject:a,timer:c});let l={type:`sprinkle-op-request`,id:r,op:e,...t};o.postMessage(l)})}let l=[],u=[];return{async refresh(){l=await c(`list`)??[],u=await c(`opened`)??[]},available(){return l},opened(){return u},async open(e){await c(`open`,{name:e})},close(e){c(`close`,{name:e}).catch(()=>{})},async sendToSprinkle(e,t,n){return await c(`send`,{name:e,data:t,target:n})??{leader:!1,followers:[]}},async reload(e){await c(`reload`,{name:e})},async openNewAutoOpenSprinkles(){await c(`openNewAutoOpen`)}}}function r(){let e=e=>Error(`sprinkle bridge unavailable (no BroadcastChannel) — cannot run '${e}'`);return{refresh:async()=>{throw e(`refresh`)},available:()=>[],opened:()=>[],open:async()=>{throw e(`open`)},close:()=>{},sendToSprinkle:()=>{throw e(`sendToSprinkle`)},reload:async()=>{throw e(`reload`)},openNewAutoOpenSprinkles:async()=>{throw e(`openNewAutoOpenSprinkles`)}}}function i(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`sp-${crypto.randomUUID()}`:`sp-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}export{n as createSprinkleManagerProxyOverChannel};
@@ -1 +1 @@
1
- var e=`slicc-sprinkle-bridge`;function t(t){return t?`${e}:${t}`:e}function n(e,n={}){if(typeof BroadcastChannel!=`function`)return()=>{};let r=new BroadcastChannel(t(n.instanceId)),i=(e,t,n)=>{let i={type:`sprinkle-op-response`,id:e};typeof n==`string`?i.error=n:i.result=t,r.postMessage(i)},a=t=>{let n=t.data;n?.type===`sprinkle-op-request`&&(async()=>{try{let{op:t,name:r,data:a,id:o}=n;switch(t){case`list`:await e.refresh(),i(o,e.available());return;case`opened`:i(o,e.opened());return;case`refresh`:await e.refresh(),i(o,e.available().length);return;case`open`:await e.open(r??``),i(o,!0);return;case`close`:e.close(r??``),i(o,!0);return;case`send`:e.sendToSprinkle(r??``,a),i(o,!0);return;case`reload`:await e.reload(r??``),i(o,!0);return;case`openNewAutoOpen`:await e.openNewAutoOpenSprinkles(),i(o,!0);return;default:i(n.id,null);return}}catch(e){i(n.id,void 0,e instanceof Error?e.message:String(e))}})()};return r.addEventListener(`message`,a),()=>{r.removeEventListener(`message`,a),r.close()}}export{n as installSprinkleManagerHandlerOverChannel};
1
+ var e=`slicc-sprinkle-bridge`;function t(t){return t?`${e}:${t}`:e}function n(e,n={}){if(typeof BroadcastChannel!=`function`)return()=>{};let r=new BroadcastChannel(t(n.instanceId)),i=(e,t,n)=>{let i={type:`sprinkle-op-response`,id:e};typeof n==`string`?i.error=n:i.result=t,r.postMessage(i)},a=t=>{let n=t.data;n?.type===`sprinkle-op-request`&&(async()=>{try{let{op:t,name:r,data:a,id:o}=n;switch(t){case`list`:await e.refresh(),i(o,e.available());return;case`opened`:i(o,e.opened());return;case`refresh`:await e.refresh(),i(o,e.available().length);return;case`open`:await e.open(r??``),i(o,!0);return;case`close`:e.close(r??``),i(o,!0);return;case`send`:i(o,await e.sendToSprinkle(r??``,a,n.target));return;case`reload`:await e.reload(r??``),i(o,!0);return;case`openNewAutoOpen`:await e.openNewAutoOpenSprinkles(),i(o,!0);return;default:i(n.id,null);return}}catch(e){i(n.id,void 0,e instanceof Error?e.message:String(e))}})()};return r.addEventListener(`message`,a),()=>{r.removeEventListener(`message`,a),r.close()}}export{n as installSprinkleManagerHandlerOverChannel};
@@ -0,0 +1 @@
1
+ var e=`leader`;function t(e){}function n(e,t=globalThis.localStorage){try{t?.setItem(`slicc.leaderSprinkleInstances`,JSON.stringify(e))}catch{}}export{t as n,n as r,e as t};