sliccy 6.153.0 → 6.154.1
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.
- package/README.md +1 -1
- package/dist/ui/.vite/manifest.json +224 -198
- package/dist/ui/assets/{SKILL-zHRhO4F3.js → SKILL-S80DGuUz.js} +1 -1
- package/dist/ui/assets/{account-store-Br-5Tahn.js → account-store-BgFuxoIt.js} +1 -1
- package/dist/ui/assets/{account-store-DT3VDbvp.js → account-store-BqdqUcgS.js} +1 -1
- package/dist/ui/assets/{adobe-s7kqWKTP.js → adobe-BWEqvpfE.js} +1 -1
- package/dist/ui/assets/{adobe-D-SRO3WV.js → adobe-De7VHe-t.js} +1 -1
- package/dist/ui/assets/{agent-bridge-DPAiiTJu.js → agent-bridge-EXV0qNBB.js} +1 -1
- package/dist/ui/assets/{agent-panels-C-vXgmUa.js → agent-panels-dcldnH3V.js} +1 -1
- package/dist/ui/assets/{apply-layout-aXZfO5zJ.js → apply-layout-DVgK-NlB.js} +1 -1
- package/dist/ui/assets/{apps-CfzNbgxN.js → apps-BqrASr5C.js} +1 -1
- package/dist/ui/assets/{azure-openai-CENnbCPD.js → azure-openai-94kdulWT.js} +1 -1
- package/dist/ui/assets/{azure-openai-Bv0RSahJ.js → azure-openai-vXGFZfPE.js} +1 -1
- package/dist/ui/assets/{budget-usage-source-CI1VrdHF.js → budget-usage-source-BNEsxDHX.js} +1 -1
- package/dist/ui/assets/{cdp-BpGYDjo4.js → cdp-D0GOzfX9.js} +1 -1
- package/dist/ui/assets/{cerebras-DW9t3pME.js → cerebras-eckgXNEU.js} +1 -1
- package/dist/ui/assets/{cerebras-D1qiSEMk.js → cerebras-v41u2mpJ.js} +1 -1
- package/dist/ui/assets/{composer-speech-D3-kZTJe.js → composer-speech-ButVgF9_.js} +1 -1
- package/dist/ui/assets/{connect-surface-CNxDpOvY.js → connect-surface-C0WXwJHl.js} +1 -1
- package/dist/ui/assets/{directed-approval-ByZDWCge.js → directed-approval-D1CLB6cG.js} +1 -1
- package/dist/ui/assets/{fs-DqBbpVZo.js → fs-DK3k_wQh.js} +2 -2
- package/dist/ui/assets/{fs-D_5Hf9-X.js → fs-mC_RRTZZ.js} +1 -1
- package/dist/ui/assets/{github-DxToYpZG.js → github-BLOM522m.js} +2 -2
- package/dist/ui/assets/{github-Dbs3fu5D.js → github-CT-Oyj_0.js} +1 -1
- package/dist/ui/assets/{github-copilot-BtVP3b6q.js → github-copilot-CACLYChL.js} +1 -1
- package/dist/ui/assets/{github-copilot-DDIYDOoo.js → github-copilot-D2H-jvYu.js} +1 -1
- package/dist/ui/assets/{github-install-CfilaKPL.js → github-install-Bk-KTJD-.js} +1 -1
- package/dist/ui/assets/{github-zip-CowqpWqM.js → github-zip-Dvb4zHOl.js} +1 -1
- package/dist/ui/assets/{hear-Bmw4jv4C.js → hear-BXcOoxVl.js} +1 -1
- package/dist/ui/assets/{help-dis3gVin.js → help-BAqixBa0.js} +1 -1
- package/dist/ui/assets/hid-operations-C97SZtrY.js +1 -0
- package/dist/ui/assets/{js-realm-worker-BMbF2DPc.js → js-realm-worker-CRY5Fv-C.js} +2 -2
- package/dist/ui/assets/{jsh-runtime-extensions-6coWmZ2q.js → jsh-runtime-extensions-D6vP9Uiw.js} +1 -1
- package/dist/ui/assets/{kernel-worker-JD5PLtQg.js → kernel-worker-C1DLWYBM.js} +590 -584
- package/dist/ui/assets/{local-llm-3efEmI2R.js → local-llm-Cv98D1SL.js} +1 -1
- package/dist/ui/assets/{local-llm-8mNKYUyN.js → local-llm-D723hPLf.js} +1 -1
- package/dist/ui/assets/main-C-pVQBFE.js +22 -0
- package/dist/ui/assets/{main-cherry-BUC0V42i.js → main-cherry-BdH-nz0p.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-B1zdL89W.js → memory-curation-seam-eUVjWT6W.js} +1 -1
- package/dist/ui/assets/{mount-DQE9qVGW.js → mount-3VFe3Pa7.js} +3 -3
- package/dist/ui/assets/{mount-BU0YiStI.js → mount-Dh4tJ6XQ.js} +1 -1
- package/dist/ui/assets/{mount-recovery-szxkUpiN.js → mount-recovery-Cp7KYqTq.js} +1 -1
- package/dist/ui/assets/{new-session-CVLZettz.js → new-session-hwwKqrO5.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-D4K4RG4i.js → oauth-bootstrap-BP7bAgwJ.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-c2j_jTmA.js → onboarding-orchestrator-DOOTJ9OG.js} +1 -1
- package/dist/ui/assets/{openai-codex-CK-EVEzJ.js → openai-codex--3foibzj.js} +1 -1
- package/dist/ui/assets/{openai-codex-BB6AGAk4.js → openai-codex-vGpH6Ldz.js} +1 -1
- package/dist/ui/assets/{openrouter-D7x3pGdS.js → openrouter-B3v5OQPe.js} +1 -1
- package/dist/ui/assets/{openrouter-DIe9K8K3.js → openrouter-D17vOiK5.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DJ5lPq7S.js → openrouter-free-DndyeHH8.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CENDt7Ou.js → openrouter-free-Mha-ykI6.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-cIflZeMd.js → openrouter-oauth-C4aGXNeF.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-D32eGAS-.js → openrouter-oauth-ov7dnUnh.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-CDsWA3s8.js +2 -0
- package/dist/ui/assets/{panelize-shell-B89wjO8U.js → panelize-shell-CXpZWzgn.js} +1 -1
- package/dist/ui/assets/{provider-CSA17s1P.js → provider-2fDgJArv.js} +2 -2
- package/dist/ui/assets/{provider-C0eIfUUt.js → provider-BtT9_ZsY.js} +1 -1
- package/dist/ui/assets/provider-settings-D2AYwHOa.js +1 -0
- package/dist/ui/assets/provider-store-access-BdvWm9Kj.js +1 -0
- package/dist/ui/assets/provider-store-access-C5A5Se3D.js +1 -0
- package/dist/ui/assets/{providers-CIJO5pfi.js → providers-BWmPj6ob.js} +2 -2
- package/dist/ui/assets/{providers-DdkG0NSO.js → providers-D_mm-oKv.js} +1 -1
- package/dist/ui/assets/{quick-llm-DzOHzN-I.js → quick-llm-Ch_X9AH9.js} +1 -1
- package/dist/ui/assets/{recovery-screen-7YwqCNIg.js → recovery-screen-Ldb8xS5S.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-D0AXaUk6.js → remote-terminal-view-DJrkDTkY.js} +1 -1
- package/dist/ui/assets/{run-rqExAVOb.js → run-Bmb6g7U2.js} +2 -2
- package/dist/ui/assets/{run-DbnU3wyl.js → run-DXUToOLa.js} +1 -1
- package/dist/ui/assets/{run-CD28vEFB.js → run-xG3-BOwR.js} +1 -1
- package/dist/ui/assets/{session-jsonl-4dg00tv6.js → session-jsonl-DlNZajGM.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DFRtQB19.js → setup-feature-flags-remote-D-IPtvuE.js} +1 -1
- package/dist/ui/assets/sidecar-repair-DRUvDMSe.js +1 -0
- package/dist/ui/assets/{silent-renew-backoff-DEAQc8gF.js → silent-renew-backoff-BocHwLdw.js} +1 -1
- package/dist/ui/assets/{skills-CyAtIBDH.js → skills-CTDnQTUW.js} +1 -1
- package/dist/ui/assets/slicc-version-CWl4uhV3.js +1 -0
- package/dist/ui/assets/{snapshot-rQItub8y.js → snapshot-BZ-_n6uU.js} +1 -1
- package/dist/ui/assets/{snapshot-features-CXvFb5kP.js → snapshot-features-BWzc1ERL.js} +1 -1
- package/dist/ui/assets/{soundscape-BfgaSN-Y.js → soundscape-CowYlYSr.js} +1 -1
- package/dist/ui/assets/{speak-zFtFhgmL.js → speak-rCiisrK7.js} +1 -1
- package/dist/ui/assets/sprinkle-bridge-channel-Bur-XBNy.js +1 -0
- package/dist/ui/assets/{sprinkle-bridge-channel-Clwu-X1e.js → sprinkle-bridge-channel-DTP5IbJB.js} +1 -1
- package/dist/ui/assets/sprinkle-manager-DaVvW4Pl.js +1 -0
- package/dist/ui/assets/sprinkle-op-handler-DyRlIvAg.js +1 -0
- package/dist/ui/assets/sprinkle-renderer-CDcbztf1.js +333 -0
- package/dist/ui/assets/{state-DVDUDADZ.js → state-DHftNsPN.js} +1 -1
- package/dist/ui/assets/{store-3A-5dTwk.js → store-CTM4679Z.js} +1 -1
- package/dist/ui/assets/{store-DWLwX9LI.js → store-MZJeSOYF.js} +1 -1
- package/dist/ui/assets/{sudo-Vmn2lmIe.js → sudo-DLRz2gLx.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CS1RAgot.js → sync-dialog-BUFCYPxf.js} +1 -1
- package/dist/ui/assets/{transformers-env-DAziCt21.js → transformers-env-BfjOXz9f.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-Tsj_KlbJ.js → tray-sidecar-BP70hrzZ.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-BXADtDDx.js → upgrade-detection-Be8A7nY7.js} +1 -1
- package/dist/ui/assets/usb-claim-broker-CnZXiC75.js +1 -0
- package/dist/ui/assets/usb-claim-broker-Do2ZUpNv.js +1 -0
- package/dist/ui/assets/usb-device-registry--JwKRTYp.js +1 -0
- package/dist/ui/assets/usb-device-registry-DFzxaOky.js +1 -0
- package/dist/ui/assets/usb-operations-B1y8RuQp.js +2 -0
- package/dist/ui/assets/usb-picker-O-2gFMNl.js +1 -0
- package/dist/ui/assets/{voice-reply-BGwjuDSD.js → voice-reply-BtqQr2DX.js} +1 -1
- package/dist/ui/assets/{wc-attach-lctJI9Cb.js → wc-attach-zW7DuRo7.js} +2 -2
- package/dist/ui/assets/{wc-extension-CJ8-0uuM.js → wc-extension-DGYx9jMG.js} +2 -2
- package/dist/ui/assets/wc-follower-Bc6Mmmda.js +17 -0
- package/dist/ui/assets/{wc-follower-oauth-Dxh3czLI.js → wc-follower-oauth-DOaUEVw8.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-BXF8unbT.js → wc-gelatiere-CdqOnO6V.js} +1 -1
- package/dist/ui/assets/{wc-live-CY77nXRu.js → wc-live-BrKyGs-7.js} +7 -7
- package/dist/ui/assets/{wc-nav-D4j-dAFm.js → wc-nav-dSAbBsA5.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-Daxory4F.js → wc-onboarding-C1uyya9g.js} +2 -2
- package/dist/ui/assets/{wc-permissions-Ch85s0Vv.js → wc-permissions-BEmYiApA.js} +2 -2
- package/dist/ui/assets/wc-permissions-providers-wSXekwkO.js +2 -0
- package/dist/ui/assets/{wc-placeholder-R85lT45F.js → wc-placeholder-Cw7uGVuJ.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-Cq3B_6l5.js → wc-secret-request-CwA6DiWC.js} +1 -1
- package/dist/ui/assets/{wc-settings-D6g62psJ.js → wc-settings-DJEhDr23.js} +3 -3
- package/dist/ui/assets/{wc-shell-CVnS13Pt.js → wc-shell-C-DwVQCG.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-Dq7vpLhS.js → wc-shortcut-config-D9HBEfqv.js} +1 -1
- package/dist/ui/assets/{wc-shortcuts-CQHGJh5j.js → wc-shortcuts-7i4KncH2.js} +1 -1
- package/dist/ui/assets/wc-sprinkles-DsRJYYRI.js +2 -0
- package/dist/ui/assets/{wc-transcript-export-CqrBcsOg.js → wc-transcript-export-Dq9HNkpA.js} +2 -2
- package/dist/ui/assets/{wc-tray-CBlFR1Md.js → wc-tray-f6xi76Bq.js} +4 -4
- package/dist/ui/assets/welcome-detection-DmqQ-hO4.js +1 -0
- package/dist/ui/assets/{whisper-session-DzS7Olt2.js → whisper-session-B6knWfce.js} +2 -2
- package/dist/ui/assets/{xai-grok-B_eBvQy4.js → xai-grok-B0KRInrx.js} +1 -1
- package/dist/ui/assets/{xai-grok-D3bEO2ts.js → xai-grok-BIfBT2BL.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/main-DNSx5t9M.js +0 -22
- package/dist/ui/assets/panel-rpc-handlers-ChtHTqiQ.js +0 -2
- package/dist/ui/assets/provider-settings-CK9AxQ6e.js +0 -1
- package/dist/ui/assets/provider-store-access-D0e3HMUh.js +0 -1
- package/dist/ui/assets/provider-store-access-D6D8_V2Z.js +0 -1
- package/dist/ui/assets/sidecar-repair-G397kiLT.js +0 -1
- package/dist/ui/assets/slicc-version-BTzaBTax.js +0 -1
- package/dist/ui/assets/sprinkle-bridge-channel-CftxYQ9D.js +0 -1
- package/dist/ui/assets/sprinkle-manager-CiAkASWE.js +0 -1
- package/dist/ui/assets/sprinkle-op-handler-Cb1pl8Ok.js +0 -1
- package/dist/ui/assets/sprinkle-renderer-DDP-UxN2.js +0 -315
- package/dist/ui/assets/usb-device-registry-DmUBqrA-.js +0 -1
- package/dist/ui/assets/usb-operations-BsAiCAWF.js +0 -1
- package/dist/ui/assets/usb-picker-Cbm0jfjl.js +0 -1
- package/dist/ui/assets/wc-follower-BABTMpUh.js +0 -17
- package/dist/ui/assets/wc-permissions-providers-CVe-8jSH.js +0 -2
- package/dist/ui/assets/wc-sprinkles-CnPEFIgm.js +0 -2
- package/dist/ui/assets/welcome-detection-Dv6cuKXV.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./wc-onboarding-C1uyya9g.js";export{e as hasOnboardingFinalLickInHistory};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,o as i,r as a,t as o}from"./transformers-env-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-rCiisrK7.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-BfjOXz9f.js","assets/wc-shortcuts-7i4KncH2.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-BgFuxoIt.js","assets/claude-model-version-CSATLzrT.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/base64-DJRlyqZu.js","assets/proxied-fetch-DyBveeCl.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/float-topology-YtctpJaG.js","assets/secret-topology-DLJBhHOi.js","assets/secrets-bridge-client--VZ3E0yk.js","assets/port-bridge-client-Dn8JtUyP.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-BWmPj6ob.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-D5_bMrnB.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.js","assets/transformers.web-B0gi9Hor.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,o as i,r as a,t as o}from"./transformers-env-BfjOXz9f.js";var s=t(`speech:whisper`),c=null,l=`idle`,u=null,d=new Set;function f(){return l}function p(){return u}function m(e){return e&&d.add(e),c||=(l=`loading`,g().then(e=>(l=`ready`,h(),e),e=>{throw l=`failed`,c=null,s.error(`whisper load failed`,e),e})),c}function h(){e(async()=>{let{kokoroWarmup:e}=await import(`./speak-rCiisrK7.js`);return{kokoroWarmup: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])).then(({kokoroWarmup:e})=>e()).catch(e=>s.warn(`kokoro warmup (chained after whisper) failed`,e))}async function g(){let{pipeline:t,env:c}=await e(async()=>{let{pipeline:e,env:t}=await import(`./transformers.web-B0gi9Hor.js`);return{pipeline:e,env:t}},__vite__mapDeps([31,7,1]));r(c),await o(n),await a();let l=i(),f=e=>{if(e?.file){if(e.status===`progress`)l.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)l.complete(e.file);else return;u=l.snapshot();for(let e of d)e(u)}},p=async e=>await t(`automatic-speech-recognition`,n,{device:e,dtype:e===`webgpu`?`fp32`:`q8`,progress_callback:f}),m=typeof navigator<`u`&&`gpu`in navigator,h;if(m)try{h=await p(`webgpu`)}catch(e){s.warn(`whisper webgpu init failed; retrying on wasm`,e),h=await p(`wasm`)}else h=await p(`wasm`);return s.info(`whisper ready`,{model:n,device:m?`webgpu`:`wasm`}),{async transcribe(e,t){let n=performance.now(),r=await h(e,{chunk_length_s:30,task:`transcribe`,...t?.language?{language:t.language}:{}}),i=Array.isArray(r)?r.map(e=>e.text??``).join(` `):r.text??``;return s.info(`whisper transcribe`,{elapsedMs:Math.round(performance.now()-n),audioSeconds:Math.round(e.length/160)/100,numThreads:c.backends?.onnx?.wasm?.numThreads,device:m?`webgpu`:`wasm`}),i.trim()}}}var _=16e3;async function v(e){if(typeof AudioContext>`u`||typeof OfflineAudioContext>`u`)throw Error(`audio decoding requires a window/page realm (AudioContext unavailable)`);let t=new AudioContext,n;try{n=await t.decodeAudioData(e.slice(0))}finally{await t.close().catch(()=>{})}let r=Math.max(1,Math.ceil(n.duration*_)),i=new OfflineAudioContext(1,r,_),a=i.createBufferSource();return a.buffer=n,a.connect(i.destination),a.start(),(await i.startRendering()).getChannelData(0).slice(0)}var y=t(`speech:whisper-session`),b=2e3,x=500,S=5e3,C=3e4,w=(e,t,n)=>new Promise((r,i)=>{let a=setTimeout(()=>i(Error(`${n} timed out after ${t}ms`)),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})});function T(e){return e?.split(`-`)[0]?.toLowerCase()||void 0}async function E(e,t){let n;if(t.stream)n=t.stream;else{if(!navigator.mediaDevices?.getUserMedia)throw Error(`microphone capture unavailable in this realm`);n=await navigator.mediaDevices.getUserMedia({audio:t.deviceId&&t.deviceId!=="default"?{deviceId:{exact:t.deviceId}}:!0})}let r=new MediaRecorder(n),i=[],a=T(t.lang),o=!1,s=!1;r.ondataavailable=e=>{e.data.size>0&&i.push(e.data)};let c=async()=>{if(i.length===0)return``;let t=await v(await new Blob(i,{type:r.mimeType||`audio/webm`}).arrayBuffer());return e.transcribe(t,{language:a})},l=Promise.resolve(``),u=()=>{let e=l.catch(()=>``).then(()=>c());return l=e.catch(()=>``),e},d=setInterval(()=>{o||s||i.length===0||(o=!0,u().then(e=>{!s&&e&&t.onPartial?.(e)}).catch(e=>{y.warn(`partial transcription failed`,e)}).finally(()=>{o=!1}))},b),f=()=>{if(clearInterval(d),r.state!==`inactive`)try{r.stop()}catch{}for(let e of n.getTracks())e.stop()},p=()=>new Promise(e=>{if(r.state===`inactive`){e();return}r.onstop=()=>e();try{r.stop()}catch{e()}});return r.start(x),{async stop(){if(s)return``;s=!0,clearInterval(d);try{await w(p(),S,`recorder flush`);for(let e of n.getTracks())e.stop();return await w(u(),C,`transcription`)}catch(e){for(let e of n.getTracks())e.stop();let r=e instanceof Error?e.message:String(e);return t.onError?.(`transcription failed: ${r}`),``}},cancel(){s||(s=!0,f())}}}export{p as a,m as i,T as n,f as o,v as r,E as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as e,f as t}from"./account-store-
|
|
1
|
+
import{G as e,f as t}from"./account-store-BgFuxoIt.js";import{a as n}from"./diagnostics-DN_idNHx.js";import{d as r,l as i}from"./claude-model-version-CSATLzrT.js";import{c as a,i as o,r as s,s as c}from"./legacy-api-aliases-bAJ0Klzq.js";import"./main-C-pVQBFE.js";import{n as l,r as u,t as d}from"./pkce-hGf_TEnP.js";import{XaiErrorCode as f,XaiOAuthError as p}from"./xai-grok-errors-bnlIBeu-.js";var m=`https://cli-chat-proxy.grok.com/v1/billing?format=credits`,h=8e3,g=65536,_=1e3;function v(e){return typeof e==`object`&&!!e}function y(e){if(!v(e))return null;let t=v(e.config)?e.config:e,n=t.creditUsagePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r=Math.min(_,Math.max(0,n)),i=v(t.currentPeriod)?t.currentPeriod:{},a=i.type,o=typeof a==`string`?a.replace(`USAGE_PERIOD_TYPE_`,``).toLowerCase():``,s=i.end??t.billingPeriodEnd,c=typeof s==`string`&&Number.isFinite(Date.parse(s))?s:void 0;return{percent:r,status:`ok`,window:o&&o!==`unspecified`?o:`billing`,...c?{resetsAt:c}:{}}}async function b(e,t,n={}){let r=new AbortController,i=setTimeout(()=>r.abort(),n.timeoutMs??h);try{let n=await t(m,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}),{status:i}=n;if(i===404||i===501)return null;if(!n.ok)throw Error(`xAI Grok usage: ${i===401||i===403?`re-login required`:`failed`} (${i})`);let a=await n.text();if(a.length>g)return null;try{return y(JSON.parse(a))}catch{return null}}finally{clearTimeout(i)}}var x=`xai-grok`,S=`https://auth.x.ai`,C=`${S}/oauth2/authorize`,w=`${S}/oauth2/token`,T=`b1a00492-073a-47ea-816f-4c329264a828`,E=`openid profile email offline_access grok-cli:access api:access`,D=`http://127.0.0.1:56121/callback`,O=`http://127.0.0.1:56121/*`,k=`https://api.x.ai/v1`,A=`grok-4.5`,j=`${x}-openai`;function M(){return i(`xai`)}function N(e){return{id:e.id,name:e.name,api:`openai`,reasoning:e.reasoning,input:e.input,context_window:e.contextWindow,max_tokens:e.maxTokens,compat:e.compat,thinkingLevelMap:e.thinkingLevelMap}}function P(e){let t=M(),n=t.find(t=>t.id===e.id);if(!n&&(console.warn(`xAI model "${e.id}" is no longer in the pi-ai catalog; falling back to default "${A}"`),n=t.find(e=>e.id===A),!n))throw Error(`xAI default model "${A}" is not registered by pi-ai`);if(n.api!==`openai-responses`&&n.api!==`openai-completions`)throw Error(`Unsupported pi-ai API "${n.api}" for xAI model "${e.id}"`);return{...e,...n,baseUrl:k}}async function F(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:D,client_id:T,code_verifier:t}),r=await fetch(w,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new p(`xAI token exchange failed: ${r.status} ${await r.text()}`,f.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new p(`xAI token exchange did not return access_token.`,f.TOKEN_EXCHANGE_INVALID);return i}async function I(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:T}),n=await fetch(w,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function L(){return t().find(e=>e.providerId===x)}async function R(){let t=L();if(!t?.accessToken)throw new p("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",f.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await I(t.refreshToken);if(n?.access_token)return await e({providerId:x,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token}return t.accessToken}async function z(){if(!L()?.accessToken)throw Error(`xAI Grok budget: not signed in`);return b(await R(),fetch)}function B(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:j,provider:x,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function V(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function H(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function U(e,t,n,r){try{let i=await R(),a=r.sessionId,c=P(t),l={...r,apiKey:i,headers:V(r.headers,a)},u=c.api===`openai-responses`?o(c,n,l):s(c,n,l);for await(let t of u)e.push(t);e.end()}catch(n){H(n),e.push(B(t,n)),e.end()}}async function W(e,t,n,r){try{let i=await R(),o=r?.sessionId,s=P(t),l={...r,apiKey:i,headers:V(r?.headers,o)},u=s.api===`openai-responses`?a(s,n,l):c(s,n,l);for await(let t of u)e.push(t);e.end()}catch(n){H(n),e.push(B(t,n)),e.end()}}var G=(e,t,r={})=>{let i=n();return U(i,e,t,r).catch(H),i},K=(e,t,r)=>{let i=n();return W(i,e,t,r).catch(H),i},q={id:x,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok 4.5.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:A,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`,`cli-chat-proxy.grok.com`],getModelIds:()=>M().map(N),getBudgetUsage:z,onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(C);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,T),c.searchParams.set(`redirect_uri`,D),c.searchParams.set(`scope`,r?.scopes??E),c.searchParams.set(`code_challenge`,a),c.searchParams.set(`code_challenge_method`,`S256`),c.searchParams.set(`state`,o),c.searchParams.set(`nonce`,s),c.searchParams.set(`plan`,`generic`),c.searchParams.set(`referrer`,`slicc`);let m=await t({authorizeUrl:c.toString(),redirectUriPattern:O,onCapture:`close`});if(!m)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let h=new URL(m),g=h.searchParams.get(`code`),_=h.searchParams.get(`state`);if(!g)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(_!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let v=await F(g,i);await e({providerId:x,accessToken:v.access_token,refreshToken:v.refresh_token,tokenExpiresAt:Date.now()+(v.expires_in??21600)*1e3,baseUrl:k,scopes:v.scope}),n()},onOAuthLogout:async()=>{await e({providerId:x,accessToken:``})},onSilentRenew:async()=>{let t=L();if(!t?.refreshToken)return null;let n=await I(t.refreshToken);return n?.access_token?(await e({providerId:x,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token):null}};function J(){r({api:j,stream:G,streamSimple:K})}export{f as XaiErrorCode,p as XaiOAuthError,q as config,J as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,r as t}from"./account-store-
|
|
1
|
+
import{_ as e,r as t}from"./account-store-BqdqUcgS.js";import{a as n}from"./diagnostics-DN_idNHx.js";import{a as r,r as i}from"./compat-uEPf6-XW.js";import{c as a,i as o,r as s,s as c}from"./legacy-api-aliases-jKEvBgOL.js";import"./provider-settings-D2AYwHOa.js";import{n as l,r as u,t as d}from"./pkce-hGf_TEnP.js";import{XaiErrorCode as f,XaiOAuthError as p}from"./xai-grok-errors-ByEMMSoz.js";function m(e){return typeof e==`object`&&!!e}function h(e){if(!m(e))return null;let t=m(e.config)?e.config:e,n=t.creditUsagePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r=Math.min(1e3,Math.max(0,n)),i=m(t.currentPeriod)?t.currentPeriod:{},a=i.type,o=typeof a==`string`?a.replace(`USAGE_PERIOD_TYPE_`,``).toLowerCase():``,s=i.end??t.billingPeriodEnd,c=typeof s==`string`&&Number.isFinite(Date.parse(s))?s:void 0;return{percent:r,status:`ok`,window:o&&o!==`unspecified`?o:`billing`,...c?{resetsAt:c}:{}}}async function g(e,t,n={}){let r=new AbortController,i=setTimeout(()=>r.abort(),n.timeoutMs??8e3);try{let n=await t(`https://cli-chat-proxy.grok.com/v1/billing?format=credits`,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}),{status:i}=n;if(i===404||i===501)return null;if(!n.ok)throw Error(`xAI Grok usage: ${i===401||i===403?`re-login required`:`failed`} (${i})`);let a=await n.text();if(a.length>65536)return null;try{return h(JSON.parse(a))}catch{return null}}finally{clearTimeout(i)}}const _=`xai-grok`,v=`https://auth.x.ai`,y=`${v}/oauth2/authorize`,b=`${v}/oauth2/token`,x=`b1a00492-073a-47ea-816f-4c329264a828`,S=`http://127.0.0.1:56121/callback`,C=`https://api.x.ai/v1`,w=`grok-4.5`,T=`${_}-openai`;function E(){return i(`xai`)}function D(e){return{id:e.id,name:e.name,api:`openai`,reasoning:e.reasoning,input:e.input,context_window:e.contextWindow,max_tokens:e.maxTokens,compat:e.compat,thinkingLevelMap:e.thinkingLevelMap}}function O(e){let t=E(),n=t.find(t=>t.id===e.id);if(!n&&(console.warn(`xAI model "${e.id}" is no longer in the pi-ai catalog; falling back to default "${w}"`),n=t.find(e=>e.id===w),!n))throw Error(`xAI default model "${w}" is not registered by pi-ai`);if(n.api!==`openai-responses`&&n.api!==`openai-completions`)throw Error(`Unsupported pi-ai API "${n.api}" for xAI model "${e.id}"`);return{...e,...n,baseUrl:C}}async function k(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:S,client_id:x,code_verifier:t}),r=await fetch(b,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new p(`xAI token exchange failed: ${r.status} ${await r.text()}`,f.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new p(`xAI token exchange did not return access_token.`,f.TOKEN_EXCHANGE_INVALID);return i}async function A(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:x}),n=await fetch(b,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function j(){return t().find(e=>e.providerId===_)}async function M(){let t=j();if(!t?.accessToken)throw new p("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",f.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await A(t.refreshToken);if(n?.access_token)return await e({providerId:_,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token}return t.accessToken}async function N(){if(!j()?.accessToken)throw Error(`xAI Grok budget: not signed in`);return g(await M(),fetch)}function P(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:T,provider:_,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function F(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function I(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function L(e,t,n,r){try{let i=await M(),a=r.sessionId,c=O(t),l={...r,apiKey:i,headers:F(r.headers,a)},u=c.api===`openai-responses`?o(c,n,l):s(c,n,l);for await(let t of u)e.push(t);e.end()}catch(n){I(n),e.push(P(t,n)),e.end()}}async function R(e,t,n,r){try{let i=await M(),o=r?.sessionId,s=O(t),l={...r,apiKey:i,headers:F(r?.headers,o)},u=s.api===`openai-responses`?a(s,n,l):c(s,n,l);for await(let t of u)e.push(t);e.end()}catch(n){I(n),e.push(P(t,n)),e.end()}}const z=(e,t,r={})=>{let i=n();return L(i,e,t,r).catch(I),i},B=(e,t,r)=>{let i=n();return R(i,e,t,r).catch(I),i},V={id:_,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok 4.5.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:w,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`,`cli-chat-proxy.grok.com`],getModelIds:()=>E().map(D),getBudgetUsage:N,onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(y);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,x),c.searchParams.set(`redirect_uri`,S),c.searchParams.set(`scope`,r?.scopes??`openid profile email offline_access grok-cli:access api:access`),c.searchParams.set(`code_challenge`,a),c.searchParams.set(`code_challenge_method`,`S256`),c.searchParams.set(`state`,o),c.searchParams.set(`nonce`,s),c.searchParams.set(`plan`,`generic`),c.searchParams.set(`referrer`,`slicc`);let m=await t({authorizeUrl:c.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!m)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let h=new URL(m),g=h.searchParams.get(`code`),v=h.searchParams.get(`state`);if(!g)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(v!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let b=await k(g,i);await e({providerId:_,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:C,scopes:b.scope}),n()},onOAuthLogout:async()=>{await e({providerId:_,accessToken:``})},onSilentRenew:async()=>{let t=j();if(!t?.refreshToken)return null;let n=await A(t.refreshToken);return n?.access_token?(await e({providerId:_,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token):null}};function H(){r({api:T,stream:z,streamSimple:B})}export{f as XaiErrorCode,p as XaiOAuthError,V as config,H as register};
|
package/dist/ui/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>slicc</title>
|
|
7
7
|
<link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-C-pVQBFE.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-Dn8JtUyP.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client--VZ3E0yk.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-BWmPj6ob.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-BeCSBUrZ.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-BgFuxoIt.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/messages-zAgr7E2T.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-B9jN9kUJ.js">
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>slicc</title>
|
|
7
7
|
<link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-C-pVQBFE.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-Dn8JtUyP.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client--VZ3E0yk.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-BWmPj6ob.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-BeCSBUrZ.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-BgFuxoIt.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/messages-zAgr7E2T.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-B9jN9kUJ.js">
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/setup-feature-flags-remote-DFRtQB19.js","assets/tray-runtime-config-B9jN9kUJ.js","assets/bridge-protocol-06nbmp2X.js","assets/proxied-fetch-DyBveeCl.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/base64-DJRlyqZu.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/messages-zAgr7E2T.js","assets/feature-flags-O-TLmy2G.js","assets/sudo-Vmn2lmIe.js","assets/logger-DDBAeTLF.js","assets/quick-llm-DzOHzN-I.js","assets/account-store-Br-5Tahn.js","assets/claude-model-version-CSATLzrT.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/float-topology-YtctpJaG.js","assets/secret-topology-DLJBhHOi.js","assets/secrets-bridge-client--VZ3E0yk.js","assets/port-bridge-client-Dn8JtUyP.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CIJO5pfi.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-D5_bMrnB.js","assets/approval-decision-CS9Wwm5B.js","assets/capability-DQ10DnFn.js","assets/page-approval-service-BXlCsull.js","assets/extension-bridge-transport-B-i9vQpb.js","assets/pending-request-table-k-D7ZZsL.js","assets/lick-ws-bridge-BlInST5r.js","assets/tray-leader-BmmfZ-wo.js","assets/logger-BoSvu4mW.js","assets/cdp-BpGYDjo4.js","assets/navigation-watcher-BpA1OwJw.js","assets/wc-follower-oauth-Dxh3czLI.js","assets/wc-shortcuts-CQHGJh5j.js","assets/sprinkle-renderer-DDP-UxN2.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/usb-operations-BsAiCAWF.js","assets/usb-device-registry-DmUBqrA-.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.js","assets/theme-DFKCBK8N.js","assets/theme-engine-B5SkYf3E.js","assets/slicc-app-url-B9OxaBDe.js","assets/transcript-export-DP-r8eDz.js","assets/tray-follower-status-BAjnN7Ar.js","assets/record-CCQFJXn_.js","assets/export-spool-CuNzzI8a.js","assets/src-BWaKqLvQ.js","assets/main-cherry-BUC0V42i.js","assets/synthetic-cdp-transport-OUVdC4zy.js","assets/oauth-service-BsW9nY_u.js","assets/permissions-surface-registry-CilCRwhh.js","assets/wc-shell-CVnS13Pt.js","assets/telemetry-DJyRzh6X.js","assets/wc-shell-WkeczD9x.css","assets/wc-follower-BABTMpUh.js","assets/wc-live-CY77nXRu.js","assets/slugify-BYJ6QVAt.js","assets/session-jsonl-4dg00tv6.js","assets/types-Dgm4REV3.js","assets/provider-budget-LCzMPlKv.js","assets/browser-DGwroBSO.js","assets/wc-unit-context-DhQqWVxs.js","assets/wc-sprinkles-CnPEFIgm.js","assets/wc-attach-lctJI9Cb.js","assets/wc-permissions-Ch85s0Vv.js","assets/oauth-bootstrap-D4K4RG4i.js","assets/legacy-styles-B3nS5QUo.js","assets/connect-surface-CNxDpOvY.js","assets/wc-extension-CJ8-0uuM.js","assets/wc-detached-F7FTH1YG.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import"./modulepreload-polyfill-P2Xu9kJm.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,X as C,Y as ee,Z as te,_ as ne,a as re,b as ie,c as ae,d as oe,f as w,g as se,h as ce,i as T,j as le,k as ue,l as de,m as fe,n as pe,o as me,p as he,q as ge,s as _e,t as ve,u as ye,v as be,w as xe,x as Se,y as Ce,z as E}from"./account-store-Br-5Tahn.js";import{t as D}from"./preload-helper-Czpn1I53.js";import{t as O}from"./logger-DDBAeTLF.js";import{i as we,n as Te,r as Ee,t as De}from"./bridge-protocol-06nbmp2X.js";import"./proxied-fetch-DyBveeCl.js";import"./messages-zAgr7E2T.js";import{n as k,t as A}from"./runtime-env-Dlaokqg1.js";import{a as Oe,c as ke,o as Ae,s as je,t as Me,u as Ne}from"./tray-runtime-config-B9jN9kUJ.js";import{c as Pe,o as j,s as Fe}from"./api-endpoint-DGxXvrur.js";import{o as Ie,t as Le}from"./telemetry-DJyRzh6X.js";import{a as Re}from"./providers-CIJO5pfi.js";import{r as ze}from"./feature-flags-O-TLmy2G.js";import{t as Be}from"./tray-follower-status-BAjnN7Ar.js";import{n as Ve}from"./clipboard-eqmn97SP.js";import{n as He}from"./tray-join-url-BIvzbiFR.js";var Ue=`role`;function We(e){if(!e)return!1;let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(t===`localhost`||t===`::1`||/^127(\.\d{1,3}){3}$/.test(t))}function Ge(e){try{let t=new URL(e);return`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function Ke(e){try{let t=new URL(e);return`${t.protocol}//${t.host}/licks-ws`}catch{return null}}function qe(e){let t;try{t=new URLSearchParams(e)}catch{return null}let n=t.get(Ee),r=t.get(Te);if(!n||!r||!/^wss?:\/\//.test(n))return null;let i;try{i=new URL(n).hostname}catch{return null}if(!We(i))return null;let a=t.get(Ue),o=a===`leader`||a===`follower`?a:null;return{url:n,subprotocol:`${De}${r}`,token:r,apiBaseUrl:Ge(n),lickWsUrl:Ke(n),role:o}}var Je=`slicc:bridge-config`,Ye=`slicc:extension-delegate-config`;function Xe(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.type===`slicc:ext-fetch`&&typeof t.extensionId==`string`&&!!t.request&&typeof t.request==`object`}var Ze=O(`boot/ext-fetch-delegate`);function Qe(){let e=globalThis.chrome?.runtime;return e&&typeof e.connect==`function`?e:null}function $e(e,t,n){let r=Qe();if(!r){try{t.postMessage({type:`response-error`,error:`extension-delegate: chrome.runtime.connect unavailable`})}catch{}t.close();return}let i=e.extensionId||n,a;try{a=r.connect(i,{name:`fetch-proxy.fetch`})}catch(e){try{t.postMessage({type:`response-error`,error:`extension-delegate: connect failed — ${e instanceof Error?e.message:String(e)}`})}catch{}t.close();return}let o=!1,s=()=>{o=!0;try{a.disconnect()}catch{}try{t.close()}catch{}};a.onMessage.addListener(e=>{if(o)return;let n=e;try{t.postMessage(n)}catch{}(n.type===`response-end`||n.type===`response-error`)&&s()}),a.onDisconnect.addListener(()=>{if(!o){try{t.postMessage({type:`response-error`,error:`extension-delegate: fetch-proxy port disconnected`})}catch{}s()}}),a.postMessage({type:`request`,...e.request})}function et(e){typeof navigator>`u`||!navigator.serviceWorker||navigator.serviceWorker.addEventListener(`message`,t=>{if(!Xe(t.data))return;let n=t.ports?.[0];if(!n){Ze.warn(`delegated fetch envelope arrived without a response port`);return}$e(t.data,n,e)})}var tt=`slicc_feature_flags_remote`;function nt(e){return`${tt}:${e}`}function rt(e,t){let n=at(t);ze(e,ot(n,e)??{})}function it(e,t,n){try{e?.setItem(nt(t),JSON.stringify(n))}catch{}}function at(e){if(e!==void 0)return e;try{let e=globalThis.localStorage;return typeof e?.getItem!=`function`||typeof e.setItem!=`function`?void 0:e}catch{return}}function ot(e,t){try{let n=e?.getItem(nt(t));return n?st(JSON.parse(n)):null}catch{return null}}function st(e){return!ct(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function ct(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function lt(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 je(e,r)?`follower`:dt(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function ut(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function dt(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function ft(e,t){rt(e,t.storage),D(async()=>{let{refreshFeatureFlagsForPage:e,scheduleFeatureFlagsRefresh:t}=await import(`./setup-feature-flags-remote-DFRtQB19.js`);return{refreshFeatureFlagsForPage:e,scheduleFeatureFlagsRefresh:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(({refreshFeatureFlagsForPage:n,scheduleFeatureFlagsRefresh:r})=>(r(e,t),n(e,t))).catch(()=>{})}function pt(e){let t=lt(e.locationHref,e.isExtension,e.storage);return ft(t,e),t}function mt(){if(k())return;let e=new Blob([`
|
|
3
|
-
let lastPong = Date.now();
|
|
4
|
-
let frozen = false;
|
|
5
|
-
setInterval(() => {
|
|
6
|
-
postMessage({ type: 'ping' });
|
|
7
|
-
const elapsed = Date.now() - lastPong;
|
|
8
|
-
if (elapsed > 5000 && !frozen) {
|
|
9
|
-
frozen = true;
|
|
10
|
-
postMessage({ type: 'freeze-detected', elapsed });
|
|
11
|
-
}
|
|
12
|
-
}, 2000);
|
|
13
|
-
self.onmessage = (e) => {
|
|
14
|
-
if (e.data.type === 'pong') {
|
|
15
|
-
lastPong = Date.now();
|
|
16
|
-
if (frozen) {
|
|
17
|
-
frozen = false;
|
|
18
|
-
postMessage({ type: 'freeze-recovered' });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
`],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var ht=`slicc-nuke-control`,gt=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];function _t(e=()=>location.reload()){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(ht),n=t=>{let n=t.data;if(n?.type===`nuke-reload`){if(Array.isArray(n.keysToRemove)){for(let e of n.keysToRemove)if(typeof e==`string`)try{localStorage.removeItem(e)}catch{}}e()}};return t.addEventListener(`message`,n),()=>{t.removeEventListener(`message`,n),t.close()}}var M=null;function vt(){return M||(M=_t(),M)}O(`stale-asset`);var yt=`slicc-stale-asset-reload`;function bt(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(yt),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 xt=`slicc:stale-asset-reloaded-at`,St=6e4,N=`slicc:stale-asset-replay`;function Ct(e=window.sessionStorage){try{e.setItem(N,`1`)}catch{}}function wt(e=window.sessionStorage){try{return e.getItem(N)===`1`&&(e.removeItem(N),!0)}catch{return!1}}function Tt(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:St,storageKey:xt}}function Et(e,t,n){return e===null||t-e>=n}function P(e=Tt()){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(!Et(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var F=null,I=null;function Dt(e){F||(I={...Tt(),...e},F=e=>{P(I)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,F))}var L=null;function Ot(e){return L||(L=bt(e,e=>{e&&Ct(),P(I??void 0)}),L)}var kt=`slicc-cdp-superseded-banner`;function At(e){if(e.getElementById(kt))return;let t=e.createElement(`div`);t.id=kt,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)}var jt=e({setupSudoExtension:()=>Mt,setupSudoStandalone:()=>R});async function R(e){let{createSudoBroker:t,installSudoTestHook:n}=await D(async()=>{let{createSudoBroker:e,installSudoTestHook:t}=await import(`./sudo-Vmn2lmIe.js`);return{createSudoBroker:e,installSudoTestHook:t}},__vite__mapDeps([12,5,13,14,4,15,16,17,18,19,20,21,22,6,3,7,8,9,23,24,25,26,27,28,29,30,31,32,33,34,35])),{createRestCapabilityBroker:r}=await D(async()=>{let{createRestCapabilityBroker:e}=await import(`./capability-DQ10DnFn.js`).then(e=>e.t);return{createRestCapabilityBroker:e}},__vite__mapDeps([34,4,5]));n(t(r()))}async function Mt(e){let{installPanelSudoResponder:t}=await D(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-Vmn2lmIe.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([12,5,13,14,4,15,16,17,18,19,20,21,22,6,3,7,8,9,23,24,25,26,27,28,29,30,31,32,33,34,35]));t()}function Nt(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function z(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 Pt=[100,200,400,800,1600];async function B(e,t,n,r=Pt,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 Ft(e,t,n){let{ExtensionBridgeTransport:r}=await D(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-B-i9vQpb.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([36,13,37])),{mapDiscoveryPayloadToLickEvent:i,mapNavigatePayloadToLickEvent:a}=await D(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-BlInST5r.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([38,13,39,4,3,5,6,7,8,9,1,2,10,40])),o=null,s=[],c=!1,l=e=>{o=e;for(let t of s)e.sendForwardedLick(t);s.length=0},u=e=>{if(e){if(o){o.sendForwardedLick(e);return}s.length>=50&&(s.shift(),c||(c=!0,n.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),s.push(e)}},d=new e(new r({extensionId:t,onLick:e=>{u(a(e))},onDiscovery:e=>{u(i(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await B(d,void 0,n),{browser:d,attachLickForwardingClient:l}}async function It(e){let{runtimeMode:t,envBaseUrl:n,window:r,log:i,sleep:a}=e,o=t===`electron-overlay`;i.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:t});let{BrowserAPI:s}=await D(async()=>{let{BrowserAPI:e}=await import(`./cdp-BpGYDjo4.js`);return{BrowserAPI:e}},__vite__mapDeps([41,13,42,2,43,4,5,44,15,16,17,18,19,20,21,22,6,3,7,8,9,23,24,25,26,27,28,29,30,32,45,46,47,48,49,50,51,52,53,54,55,56,37,57,58,59]));await R({log:i});let c,l,u,d=null,f=null,p=null,m=null,h,g=t===`cherry`?null:z(r.location.search),_=!!g&&A(),v=t===`cherry`||_?null:qe(r.location.search);v?.apiBaseUrl&&(d=v.apiBaseUrl,Pe(v.apiBaseUrl),f=v.token,j(v.token)),v?.lickWsUrl&&(p=v.lickWsUrl);let y=t===`cherry`||_||v!==null,b=await Oe(),x=ut(t,b!==null)?Me:null;if(await ke({locationHref:r.location.href,storage:r.localStorage,envBaseUrl:n,defaultWorkerBaseUrl:x,runtimeConfigFetcher:async()=>b}),t===`cherry`){let{setupCherryFollower:e}=await D(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-BUC0V42i.js`);return{setupCherryFollower:e}},__vite__mapDeps([60,13,55,37,41,42,2,43,4,5,44,15,16,17,18,19,20,21,22,6,3,7,8,9,23,24,25,26,27,28,29,30,32,45,46,47,48,49,50,51,52,53,54,56,57,58,59,61])),t=await e();c=t.browser,l=t.joinUrl,u=t.transport}else if(g&&A()){i.info(`Routing CDP through the extension bridge (leader tab)`);let e=await Ft(s,g.extensionId,i);c=e.browser,h=e.attachLickForwardingClient,m=g.extensionId,Fe(g.extensionId)}else{c=new s,v&&i.info(`Routing CDP through local standalone bridge`,{url:v.url,role:v.role??`(unset)`});let e=v?{url:v.url,protocols:v.subprotocol}:void 0;v?.role===`follower`?(i.info(`Skipping CDP connect for follower overlay tab`),c.primeConnectOptions(e)):(await B(c,e,i,void 0,a),c.setCdpSupersededHandler(()=>At(r.document)))}let S=c.getUnderlyingTransport();return globalThis.__slicc_browser=c,{browser:c,realCdpTransport:S,hasLocalCdpSurface:y,cherryJoinUrl:l,cherryTransport:u,instanceId:Nt(),isElectronOverlay:o,localApiBaseUrl:d,bridgeToken:f,localLickWsUrl:p,extensionDelegateId:m,attachLickForwardingClient:h}}var V=O(`storage-persist`);function Lt(){try{return globalThis.navigator?.storage}catch{return}}async function Rt(e=Lt()){try{return typeof e?.persist==`function`?typeof e.persisted==`function`&&await e.persisted()?`already-persisted`:await e.persist()?`granted`:`denied`:`unsupported`}catch(e){return V.warn(`storage persistence check failed`,e),`failed`}}var zt=!1;function Bt(){zt||(zt=!0,Rt().then(e=>{switch(e){case`granted`:V.info(`OPFS marked persistent — SLICC data is now exempt from disk-pressure eviction`);break;case`already-persisted`:V.debug(`OPFS already persistent`);break;case`denied`:V.warn(`Browser declined persistent storage — SLICC data can be evicted if the disk fills up`);break;case`unsupported`:V.debug(`navigator.storage.persist() unavailable in this runtime`)}}).catch(()=>{}))}var H=O(`boot/sw-registration`);async function Vt(e=null,t=null){let n=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&n&&await Wt())return`reload-pending`;if(!(`serviceWorker`in navigator)||n)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),H.info(`Preview SW registered`),!k())try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),H.info(`LLM-proxy SW registered`)}catch(e){H.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),H.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`),e&&(Ht(e),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Ht(e)})),t&&(Ut(t),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Ut(t)}))}catch(e){H.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}function Ht(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:Je,apiBaseUrl:e.apiBaseUrl,token:e.token};try{t.postMessage(n)}catch(e){H.warn(`LLM-proxy SW bridge-config postMessage failed`,e)}}function Ut(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:Ye,extensionId:e.extensionId};try{t.postMessage(n)}catch(e){H.warn(`LLM-proxy SW extension-delegate postMessage failed`,e)}}async function Wt(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),H.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){H.error(`connect-mode SW cleanup failed`,e)}return!1}var Gt=e({ACCOUNTS_KEY:()=>ve,__test__:()=>pe,addAccount:()=>T,applyProviderDefaults:()=>re,clearAllSettings:()=>me,clearApiKey:()=>_e,clearBaseUrl:()=>ae,clearSelectedProvider:()=>de,describeInvalidJoinUrl:()=>He,downloadProviders:()=>Yt,ensureOAuthMaskReplica:()=>ye,exportProviders:()=>oe,getAccounts:()=>w,getAllAvailableModels:()=>he,getAllExtraOAuthDomains:()=>fe,getAlternativeModelProviders:()=>ce,getApiKey:()=>se,getApiKeyForProvider:()=>ne,getApiVersionForProvider:()=>be,getAvailableProviders:()=>Ce,getBaseUrl:()=>ie,getBaseUrlForProvider:()=>Se,getDeploymentForProvider:()=>v,getExtraOAuthDomains:()=>r,getOAuthAccountInfo:()=>xe,getProviderConfig:()=>y,getProviderModels:()=>a,getRawApiKeyForProvider:()=>i,getSelectedModelId:()=>h,getSelectedProvider:()=>ue,isModelHiddenFromPicker:()=>t,isUsableOAuthMaskReplica:()=>le,logoutOAuthAccount:()=>p,maskOAuthTokenWithRetry:()=>m,migrateLegacyAuthOnlySelection:()=>g,modelRunsOnProvider:()=>o,persistOAuthMaskViaServiceWorker:()=>l,policyVisible:()=>f,providerOffersLlmModels:()=>_,reloginOAuthAccount:()=>Qt,removeAccount:()=>E,resolveCurrentModel:()=>n,resolveModelById:()=>x,resolveModelByShorthand:()=>c,resolveModelIdForScoop:()=>b,resolveModelSelectionForScoop:()=>S,saveOAuthAccount:()=>s,setApiKey:()=>d,setBaseUrl:()=>ge,setExtraOAuthDomains:()=>u,setExtraOAuthDomainsAsync:()=>ee,setSelectedModelId:()=>C,setSelectedProvider:()=>te,showProviderSettings:()=>vn,testOnlyDispatchTrayJoinWithFailureFeedback:()=>qt}),Kt=O(`provider-settings`);function qt(e,t){return Jt(e,t)}function Jt(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){Kt.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 Yt(){let e=JSON.stringify(oe(),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 Xt(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function U(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 W={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`]},G=`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 K(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 q(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function J(e){e.options?.startInAddAccount?q(e):Y(e)}function Zt(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`:Xt(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function Qt(e,t){let{createOAuthLauncher:n,createInterceptingOAuthLauncherForCurrentRuntime:r}=await D(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-BsW9nY_u.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([62,5,3,4,6,7,8,9,29,63])),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 $t(e,t){let n=document.createElement(`button`);return n.style.cssText=G,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(U(W.pen)),K(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Z(e,t)),n}function en(e,t,n){let r=document.createElement(`button`);return r.style.cssText=G,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(U(W.login)),K(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{Qt(n,()=>Y(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(U(W.logout)),K(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await p(t.providerId),Y(e)})()})),r}function tn(e,t){let n=document.createElement(`button`);return n.style.cssText=G,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(U(W.trash)),K(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await E(t.providerId),Y(e)})()}),n}function nn(e,t){let n=y(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a),i.appendChild(Zt(t)),r.appendChild(i);let o=document.createElement(`div`);return o.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,o.appendChild($t(e,t)),n.isOAuth&&o.appendChild(en(e,t,n)),o.appendChild(tn(e,t)),r.appendChild(o),r}function rn(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=Be(),a=i.state!==`inactive`,o=Ae(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 Y(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(nn(e,t));t.appendChild(n)}let i=document.createElement(`div`);i.style.cssText=`display: flex; gap: 8px;`;let a=document.createElement(`button`);a.className=r.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,a.style.flex=`1`,a.textContent=`Add Account`,a.addEventListener(`click`,()=>Z(e)),i.appendChild(a);let o=document.createElement(`button`);o.className=`dialog__btn dialog__btn--secondary`,o.style.flex=`1`,o.textContent=`Export`,o.addEventListener(`click`,()=>Yt()),i.appendChild(o),t.appendChild(i),t.appendChild(rn(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`,()=>q(e)),t.appendChild(c)}function an(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=y(t.providerId),r=document.createElement(`option`);return r.value=t.providerId,r.textContent=e.name,n.appendChild(r),n.disabled=!0,n.style.opacity=`0.7`,n}let r=document.createElement(`option`);r.value=``,r.textContent=`Select a provider…`,r.disabled=!0,r.selected=!0,r.hidden=!0,n.appendChild(r);let i=new Set(w().map(e=>e.providerId)),a=[...Ce()].sort((e,t)=>y(e).name.localeCompare(y(t).name));for(let t of a){if(i.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!_(t))continue;let r=document.createElement(`option`);r.value=t,r.textContent=y(t).name,n.appendChild(r)}return n}function on(e,t){let n=an(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 sn(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 cn(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}=sn(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 Ve(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 ln(e,t){let n=t.providerSelect.value;if(!n)return;let r=y(n);if(!r.onOAuthLogin&&!r.onOAuthLoginIntercepted)return;let{status:i}=t.oauth,a=w().some(e=>e.providerId===n),o=Se(n);if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!o){i.textContent=`Base URL is required.`,i.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}r.requiresBaseUrl&&t.baseUrlInput.value.trim()&&T(n,``,t.baseUrlInput.value.trim()),i.textContent=`Opening login window...`;try{if(r.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await D(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-BsW9nY_u.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([62,5,3,4,6,7,8,9,29,63])),i=await n();if(!i)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await r.onOAuthLoginIntercepted(i,()=>J(e),{presentDeviceCode:cn(t.oauth)})}else if(r.onOAuthLogin){let{createOAuthLauncher:t}=await D(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BsW9nY_u.js`);return{createOAuthLauncher:e}},__vite__mapDeps([62,5,3,4,6,7,8,9,29,63])),n=t();await r.onOAuthLogin(n,()=>J(e))}}catch(e){if(!a)try{await E(n)}catch{}Kt.error(`OAuth login failed`,{providerId:n,error:e instanceof Error?e.message:String(e)}),i.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function un(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 dn(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 fn(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 pn(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=y(t);e.providerDesc.textContent=n.description,un(e,n),dn(e,n),fn(e,n)}function X(e,t){let n=t.providerSelect.value;if(!n)return;let r=y(n),i=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(r.requiresApiKey&&t.apiKeyInput.value.trim().length<5){i(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()){i(`Base URL is required for this provider.`,t.baseUrlInput);return}if(r.requiresDeployment&&!t.deploymentInput.value.trim()){i(`Deployment name is required for this provider.`,t.deploymentInput);return}T(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),J(e)}function mn(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`,()=>q(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`,()=>Y(e)),n.appendChild(t)}}function Z(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Provider:`,n.appendChild(i);let a=on(e.options,t);n.appendChild(a.providerSelect),n.appendChild(a.providerDesc),a.oauth.loginBtn.addEventListener(`click`,()=>{ln(e,a)}),t?.userName&&(a.oauth.status.textContent=`Logged in as ${t.userName}`,a.oauth.loginBtn.textContent=`Re-login`),n.appendChild(a.oauth.section),n.appendChild(a.apiKeySection),n.appendChild(a.baseUrlSection),n.appendChild(a.deploymentSection),n.appendChild(a.apiVersionSection),n.appendChild(a.errorEl),a.providerSelect.addEventListener(`change`,()=>{a.errorEl.style.display=`none`,pn(a)}),pn(a),a.saveBtn.addEventListener(`click`,()=>X(e,a));let o=t=>{t.key===`Enter`&&X(e,a)};a.apiKeyInput.addEventListener(`keydown`,o),a.baseUrlInput.addEventListener(`keydown`,o),a.deploymentInput.addEventListener(`keydown`,o),a.apiVersionInput.addEventListener(`keydown`,o),n.appendChild(a.saveBtn),mn(e,!!t),requestAnimationFrame(()=>{let e=a.providerSelect.value;if(!e)return;let t=y(e);t.requiresApiKey?a.apiKeyInput.focus():t.requiresBaseUrl&&a.baseUrlInput.focus()})}function hn(e,t,n){Jt(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 gn(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=Ne(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}hn(e,n.joinUrl,o)}),n.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn dialog__btn--secondary`,c.style.marginTop=`8px`,c.textContent=`Set up an account instead`,c.addEventListener(`click`,()=>Z(e)),n.appendChild(c)}function _n(){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(_n());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=`${we}/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=Ne(window.localStorage,t);if(!n){o.textContent=He(t),o.style.display=``,a.focus();return}hn(e,n.joinUrl,s)}),t.appendChild(c),t.appendChild(s);let l=document.createElement(`button`);l.className=`dialog__btn dialog__btn--secondary`,l.style.marginTop=`8px`,l.textContent=`Back`,l.addEventListener(`click`,()=>Z(e)),t.appendChild(l),a.addEventListener(`input`,()=>{o.style.display=`none`}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()}),requestAnimationFrame(()=>a.focus())}function vn(e){return Ie(`button`),new Promise(t=>{let n=document.createElement(`div`);n.className=`dialog-overlay`;let r=document.createElement(`div`);r.className=`dialog`,r.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let i={overlay:n,dialog:r,options:e,accountsBefore:localStorage.getItem(`slicc_accounts`)??``,resolve:t};e?.startInAddAccount?Z(i):w().length>0?Y(i):e?.autoJoinUrl?gn(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):Z(i),n.appendChild(r),document.body.appendChild(n)})}var $=O(`main`);function yn(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}async function bn(){Dt();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let t=k(),n=pt({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,isDev:!1,isExtension:t});if(yn(window.location.href)){let{mountWcUiPreview:t}=await D(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-CVnS13Pt.js`).then(e=>e.s);return{mountWcUiPreview:e}},__vite__mapDeps([64,4,15,5,16,17,18,19,20,21,22,13,6,3,7,8,9,23,24,25,26,27,28,29,30,44,32,51,2,65,66]));t(e);return}mt(),vt(),Bt(),n!==`connect`&&Le({isExtensionRealm:t}).catch(()=>{});let r=qe(window.location.search),i=n===`cherry`?null:z(window.location.search),a=!!i&&A();if(await Vt(r?{apiBaseUrl:r.apiBaseUrl,token:r.token}:null,a&&i?{extensionId:i.extensionId}:null)===`reload-pending`)return;if(!t&&(n===`follower`||n===`cherry`)){let{bootFollowerFloat:t}=await D(async()=>{let{bootFollowerFloat:e}=await import(`./wc-follower-BABTMpUh.js`);return{bootFollowerFloat:e}},__vite__mapDeps([67,5,13,55,43,4,44,15,16,17,18,19,20,21,22,6,3,7,8,9,23,24,25,26,27,28,29,30,32,45,46,47,48,49,50,51,52,53,54,2,56,37,57,58,59,1,10,68,69,70,71,65,11,72,63,73,39,64,66,74,75,76,77]));return t(e,$,n)}await Re(),re(),r?.apiBaseUrl&&!a&&(Pe(r.apiBaseUrl),j(r.token));let{bootstrapOAuthReplicas:o}=await D(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-D4K4RG4i.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([78,15,4,5,16,17,18,19,20,21,22,13,6,3,7,8,9,23,24,25,26,27,28,29,30,40]));if(await Promise.race([o().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),n===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:t}=await D(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-B3nS5QUo.js`);return{loadLegacyStyles:e}},__vite__mapDeps([79,5]));await t();let{mountConnectSurface:n}=await D(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-CNxDpOvY.js`);return{mountConnectSurface:e}},__vite__mapDeps([80,15,4,5,16,17,18,19,20,21,22,13,6,3,7,8,9,23,24,25,26,27,28,29,30]));await n(e);return}if(t){let{bootExtensionFloat:t}=await D(async()=>{let{bootExtensionFloat:e}=await import(`./wc-extension-CJ8-0uuM.js`);return{bootExtensionFloat:e}},__vite__mapDeps([81,5,68,4,15,16,17,18,19,20,21,22,13,6,3,7,8,9,23,24,25,26,27,28,29,30,44,32,45,46,47,48,49,50,51,52,53,69,55,70,71,1,2,10,65,11,56,59,72,63,73,39,57,64,66,74,82]));return t(e,$,n===`extension-detached`)}a&&i&&et(i.extensionId);let{bootLeaderFloat:s}=await D(async()=>{let{bootLeaderFloat:e}=await import(`./wc-live-CY77nXRu.js`).then(e=>e.n);return{bootLeaderFloat:e}},__vite__mapDeps([68,4,15,5,16,17,18,19,20,21,22,13,6,3,7,8,9,23,24,25,26,27,28,29,30,44,32,45,46,47,48,49,50,51,52,53,69,55,70,71,1,2,10,65,11,56,59,72,63,73,39,57,64,66,74]));return s(e,$,n)}function xn(e,t){let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.textContent=`Failed to start`;let i=document.createElement(`p`);i.textContent=t instanceof Error?t.message:String(t);let a=document.createElement(`button`);a.type=`button`,a.textContent=`Reload`,a.addEventListener(`click`,()=>location.reload()),n.append(r,i,a),e.replaceChildren(n)}async function Sn(e,t){let n;try{({renderBootRecoveryScreen:n}=await D(()=>import(`./recovery-screen-7YwqCNIg.js`),[]))}catch{xn(e,t);return}if(n(e,t),t instanceof Error&&t.message.includes(`did not signal ready`))try{let{triageModuleWorkerHealth:r}=await D(async()=>{let{triageModuleWorkerHealth:e}=await import(`./worker-triage-BvsMZrdR.js`);return{triageModuleWorkerHealth:e}},[]),i=await r();i===`browser-wedged`&&n(e,t,{verdict:i})}catch{}}bn().catch(e=>{$.error(`Fatal error`,e);let t=document.getElementById(`app`);t&&Sn(t,e)});export{wt as a,gt as c,We as d,jt as i,at as l,vn as n,P as o,It as r,Ot as s,Gt as t,it as u};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-bridge-client--VZ3E0yk.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/port-bridge-client-Dn8JtUyP.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-DyBveeCl.js","assets/base64-DJRlyqZu.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/mount-bridge-client-DQaM1wCj.js","assets/types-Dgm4REV3.js","assets/page-approval-service-BXlCsull.js","assets/float-topology-YtctpJaG.js","assets/speak-zFtFhgmL.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-DAziCt21.js","assets/wc-shortcuts-CQHGJh5j.js","assets/account-store-Br-5Tahn.js","assets/claude-model-version-CSATLzrT.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/secret-topology-DLJBhHOi.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CIJO5pfi.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-D5_bMrnB.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.js","assets/hear-Bmw4jv4C.js","assets/permissions-surface-registry-CilCRwhh.js","assets/whisper-session-DzS7Olt2.js","assets/esptool-operations-CiccBbBW.js","assets/rom-eeWiO07Z.js","assets/mount-picker-popup--ijSfN8u.js","assets/picker-popup-sQtXmfAo.js","assets/theme-engine-B5SkYf3E.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{J as e,m as t}from"./account-store-Br-5Tahn.js";import{t as n}from"./preload-helper-Czpn1I53.js";import"./proxied-fetch-DyBveeCl.js";import{a as r,t as i}from"./api-endpoint-DGxXvrur.js";import"./main-DNSx5t9M.js";import{n as a,r as o}from"./hid-device-registry-B2R-0rNt.js";import{a as s,i as c}from"./serial-port-registry-CCqklAEr.js";import{A as l,C as u,D as d,E as ee,M as te,O as ne,S as re,T as ie,_ as ae,a as oe,b as se,c as ce,d as le,f as ue,g as f,h as p,i as m,j as h,k as g,l as _,m as v,n as y,o as b,p as x,r as S,s as C,t as w,u as T,v as E,w as D,x as O,y as k}from"./usb-operations-BsAiCAWF.js";import{i as A,r as j}from"./usb-device-registry-DmUBqrA-.js";function M(e={}){let t=new Map;return{...R(),...z(e),...de(),...B(e),...V(e),...H(),...fe(e,t),...pe(),...me(e),...he(e),..._e(e),...L(),...F(),...I(),...N(),...P(),...Te(),...Ee()}}function N(){return{"secrets-bridge":async({type:e,payload:t})=>{let{callSecretsBridge:r}=await n(async()=>{let{callSecretsBridge:e}=await import(`./secrets-bridge-client--VZ3E0yk.js`).then(e=>e.t);return{callSecretsBridge:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return{response:await r(e,t)}}}}function P(){return{"mount-sign-and-forward":async({type:e,envelope:t})=>{let{callMountBridge:r}=await n(async()=>{let{callMountBridge:e}=await import(`./mount-bridge-client-DQaM1wCj.js`);return{callMountBridge:e}},__vite__mapDeps([10,2,3,4,5,1,6,7,8,9,11]));return{response:await r(e,t)}}}}function F(){return{"sudo-request":async({request:e,mode:t})=>{let{resolveSudoApprovalInPage:r}=await n(async()=>{let{resolveSudoApprovalInPage:e}=await import(`./page-approval-service-BXlCsull.js`);return{resolveSudoApprovalInPage:e}},__vite__mapDeps([12,4,13,5,1,3,6,7,8,9]));return r(e,t??`resolve`)}}}function I(){return{"secret-request":async e=>{let{getSecretRequestSurface:t}=await n(async()=>{let{getSecretRequestSurface:e}=await import(`./secret-request-registry-DrOMKR1H.js`);return{getSecretRequestSurface:e}},[]),r=t();return r?r(e):{stored:!1,reason:`unavailable`}}}}function L(){return{"proxied-fetch":async({url:e,method:t,headers:r,body:i})=>{let{collectViaExtensionDelegate:a}=await n(async()=>{let{collectViaExtensionDelegate:e}=await import(`./proxied-fetch-DyBveeCl.js`).then(e=>e.i);return{collectViaExtensionDelegate:e}},__vite__mapDeps([5,1,3,6,7,8,9])),{head:o,body:s}=await a(e,{method:t,headers:r,body:i});return{head:o,body:s}}}}function R(){return{"page-info":()=>({origin:window.location.origin,href:window.location.href,title:document.title||``}),screencapture:async({mimeType:e,quality:t})=>{let n=await Ce(e,t),r=await n.arrayBuffer(),i=await we(n);return{bytes:r,width:i.width,height:i.height,mimeType:e}},"speak-text":async({text:e,lang:t,voice:r,rate:i,pitch:a,volume:o})=>{let{speak:s}=await n(async()=>{let{speak:e}=await import(`./speak-zFtFhgmL.js`);return{speak:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,13,26,0,2,27,28,29,30,31,32,33]));return await s({text:e,lang:t,voice:r,rate:i,pitch:a,volume:o}),{done:!0}},"list-voices":async()=>{let{kokoroVoicesIfReady:e}=await n(async()=>{let{kokoroVoicesIfReady:e}=await import(`./speak-zFtFhgmL.js`);return{kokoroVoicesIfReady:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,13,26,0,2,27,28,29,30,31,32,33])),t=e().map(e=>({name:e.id,lang:e.lang,default:!1,onDevice:e.onDevice}));if(typeof speechSynthesis>`u`){if(t.length>0)return{voices:t};throw Error(`speechSynthesis is unavailable in this page`)}let r=speechSynthesis.getVoices();if(r.length>0)return{voices:[...t,...r.map(Z)]};let i=await new Promise(e=>{let t=()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,t),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())},1e3)});return{voices:[...t,...i.map(Z)]}},"speak-status":async()=>{let{kokoroStatus:e}=await n(async()=>{let{kokoroStatus:e}=await import(`./speak-zFtFhgmL.js`);return{kokoroStatus:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,13,26,0,2,27,28,29,30,31,32,33]));return e()},"speak-warmup":async()=>{let{kokoroWarmup:e}=await n(async()=>{let{kokoroWarmup:e}=await import(`./speak-zFtFhgmL.js`);return{kokoroWarmup:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,13,26,0,2,27,28,29,30,31,32,33]));return e()},"synthesize-to-wav":async({text:e,lang:t,voice:r,rate:i})=>{let{synthesizeToWav:a}=await n(async()=>{let{synthesizeToWav:e}=await import(`./speak-zFtFhgmL.js`);return{synthesizeToWav:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,13,26,0,2,27,28,29,30,31,32,33])),o=await a({text:e,...t===void 0?{}:{lang:t},...r===void 0?{}:{voice:r},...i===void 0?{}:{rate:i}});return{bytes:o.buffer.slice(o.byteOffset,o.byteOffset+o.byteLength)}},"play-audio":async({bytes:e,volume:t})=>{if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let n=new AudioContext;try{let r=await n.decodeAudioData(e.slice(0)),i=n.createBufferSource();if(i.buffer=r,t!==void 0){let e=n.createGain();e.gain.value=Math.max(0,Math.min(1,t)),i.connect(e),e.connect(n.destination)}else i.connect(n.destination);await new Promise(e=>{i.onended=()=>e(),i.start()})}finally{try{await n.close()}catch{}}return{done:!0}},"play-chime":async({tone:e})=>{let t={success:[880,1320],error:[440,220],notify:[660,660]},[n,r]=t[e??`notify`]??t.notify;if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let i=new AudioContext;try{let e=i.currentTime;for(let[t,a]of[n,r].entries()){let n=i.createOscillator();n.type=`sine`,n.frequency.value=a;let r=i.createGain();r.gain.setValueAtTime(1e-4,e+t*.18),r.gain.exponentialRampToValueAtTime(.2,e+t*.18+.02),r.gain.exponentialRampToValueAtTime(1e-4,e+t*.18+.18),n.connect(r),r.connect(i.destination),n.start(e+t*.18),n.stop(e+t*.18+.2)}await new Promise(e=>setTimeout(e,450))}finally{try{await i.close()}catch{}}return{done:!0}}}}function z(e={}){return{"clipboard-read-text":async()=>{if(!navigator.clipboard?.readText)throw Error(`clipboard API unavailable`);return{text:await navigator.clipboard.readText()}},"clipboard-write-text":async({text:e})=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard API unavailable`);return await $(),await navigator.clipboard.writeText(e),{done:!0}},"clipboard-write-image":async({bytes:e,mimeType:t})=>{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`clipboard image API unavailable`);let n,r=new Blob([e],{type:t});return n=t===`image/png`?r:await Q(r),await $(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{done:!0}},"window-open":async({url:e,target:t,features:n})=>({opened:window.open(e,t??`_blank`,n??`noopener,noreferrer`)!==null}),"oauth-popup":async({url:t})=>{let n=await e.delegateOAuthLogin?.(t);return n?.delegated?{redirectUrl:n.redirectUrl,error:n.error}:{redirectUrl:await xe(t,e.getPermissionsSurface)}},"oauth-route":async()=>({delegate:await e.shouldDelegateOAuth?.()===!0}),"capture-camera":async e=>await ye(e),"enumerate-media-devices":async()=>{if(!navigator.mediaDevices?.enumerateDevices)throw Error(`enumerateDevices is not supported in this browser`);let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}}}function de(){return{"hear-capture":async e=>{let{hearCapture:t}=await n(async()=>{let{hearCapture:e}=await import(`./hear-Bmw4jv4C.js`);return{hearCapture:e}},__vite__mapDeps([34,4,35,36,3,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,9,13,26,0,2,27,28,29,30,31,32,33]));return await t(e??{})},"hear-transcribe":async({bytes:e,lang:t})=>{let{hearTranscribe:r}=await n(async()=>{let{hearTranscribe:e}=await import(`./hear-Bmw4jv4C.js`);return{hearTranscribe:e}},__vite__mapDeps([34,4,35,36,3,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,9,13,26,0,2,27,28,29,30,31,32,33]));return await r(e,t)},"hear-status":async()=>{let{hearStatus:e}=await n(async()=>{let{hearStatus:e}=await import(`./hear-Bmw4jv4C.js`);return{hearStatus:e}},__vite__mapDeps([34,4,35,36,3,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,9,13,26,0,2,27,28,29,30,31,32,33]));return e()},"hear-warmup":async()=>{let{hearWarmup:e}=await n(async()=>{let{hearWarmup:e}=await import(`./hear-Bmw4jv4C.js`);return{hearWarmup:e}},__vite__mapDeps([34,4,35,36,3,16,17,1,18,19,20,21,22,23,24,25,6,5,7,8,9,13,26,0,2,27,28,29,30,31,32,33]));return e()}}}function B(r){return{"tray-reset":async()=>{if(!r.resetTray)throw Error(`host reset: no active tray session to reset`);return await r.resetTray()},"tray-webhook-rotate":async()=>{if(!r.rotateWebhook)throw Error(`webhook rotate: no active leader tray`);return await r.rotateWebhook()},"tray-webhook-revoke":async e=>{if(!r.revokeWebhook)throw Error(`webhook delete: no active leader tray`);return await r.revokeWebhook(e.webhookId),{ok:!0}},"tray-open-preview":async e=>{if(!r.mintPreview)throw Error(`serve: no active leader tray; cannot mint preview`);return await r.mintPreview(e)},"tray-revoke-preview":async e=>{if(!r.revokePreview)throw Error(`serve: no active leader tray; cannot revoke preview`);return await r.revokePreview(e)},"tray-list-previews":async()=>{if(!r.listPreviews)throw Error(`serve: no active leader tray; cannot list previews`);return await r.listPreviews()},"tray-mint-biscotto":async e=>{if(!r.mintBiscotto)throw Error(`biscotto: no active leader tray; cannot mint a seat`);return await r.mintBiscotto(e)},"tray-revoke-biscotto":async e=>{if(!r.revokeBiscotto)throw Error(`biscotto revoke: no active leader tray; cannot revoke a seat`);return await r.revokeBiscotto(e)},"tray-list-biscotti":async()=>{if(!r.listBiscotti)throw Error(`biscotti: no active leader tray; cannot list seats`);return await r.listBiscotti()},"tray-preview-logs":async({previewToken:e})=>{if(!r.getPreviewLifecycleRecords)throw Error(`serve --logs: no active leader tray; cannot read preview logs`);return r.getPreviewLifecycleRecords(e)},"tray-preview-truncate":async({previewToken:e})=>{if(!r.truncatePreviewLifecycleRecords)throw Error(`serve --truncate: no active leader tray; cannot truncate preview logs`);return r.truncatePreviewLifecycleRecords(e)},"tray-leave":async({workerBaseUrl:e,requestId:t})=>{if(!r.leaveTray)throw Error(`host leave: tray leave is not available in this environment`);return await r.leaveTray({workerBaseUrl:e,requestId:t})},"tray-join":async({joinUrl:e,requestId:t})=>{if(!r.joinTray)throw Error(`host join: tray join is not available in this environment`);return await r.joinTray({joinUrl:e,requestId:t})},"cherry-emit":async({runtimeId:e,name:t,detail:n})=>{if(!r.emitCherrySliccEvent)throw Error(`cherry-emit: not available in this environment`);return{delivered:r.emitCherrySliccEvent(e,t,n)}},"tray-exec":async e=>{if(!r.execOnRemote)throw Error(`ssh: no active leader tray in this environment`);return await r.execOnRemote(e)},"tray-exec-signal":({execToken:e})=>(r.signalRemoteExec?.({execToken:e}),{ok:!0}),"oauth-extras-set":({providerId:n,domains:r})=>(e(n,r),{storeAfter:t()}),"silent-renew":async({providerId:e})=>{let{getRegisteredProviderConfig:t}=await n(async()=>{let{getRegisteredProviderConfig:e}=await import(`./providers-CIJO5pfi.js`).then(e=>e.r);return{getRegisteredProviderConfig:e}},__vite__mapDeps([28,1,3])),r=t(e);return r?.onSilentRenew?{accessToken:await r.onSilentRenew()}:{accessToken:null}},"save-oauth-accounts":({accountsJson:e})=>(localStorage.setItem(`slicc_accounts`,e),{storedJson:localStorage.getItem(`slicc_accounts`)??e})}}function V(e){let t=new Map,n=()=>{if(!e.sliccSidecar)throw Error(`slicc: sidecar attachments are not available in this environment`);return e.sliccSidecar},r=async(e,r)=>{let i=n(),a=new AbortController;t.set(e,a);try{return await r(i,a.signal)}finally{t.delete(e)}};return{"slicc-attach":async({joinUrl:e,name:t,connectTimeoutMs:r})=>await n().attach({joinUrl:e,name:t,connectTimeoutMs:r}),"slicc-detach":({name:e})=>({detached:n().detach(e)}),"slicc-list":()=>({attachments:n().list()}),"slicc-prompt":async({name:e,text:t,runToken:n,steer:i,timeoutMs:a})=>await r(n,async(n,r)=>await n.prompt(e,t,{steer:i,timeoutMs:a,signal:r})),"slicc-exec":async({name:e,command:t,runToken:n,cwd:i,env:a,timeoutMs:o,stdin:s})=>await r(n,async(n,r)=>await n.exec(e,t,{cwd:i,env:a,timeoutMs:o,stdin:s,signal:r})),"slicc-watch":async({name:e,runToken:t,durationMs:n,scoopJid:i,untilIdle:a})=>await r(t,async(t,r)=>await t.watch(e,{durationMs:n,scoopJid:i,untilIdle:a,signal:r})),"slicc-cancel":({runToken:e})=>(t.get(e)?.abort(),{ok:!0})}}function H(){return{"usb-list":async()=>({devices:await C(U(),W())}),"usb-request":async({filters:e})=>({device:await T(U(),W(),e)}),"usb-device-info":({handle:e})=>({device:b(U(),e)}),"usb-open":async({handle:e})=>(await ce(U(),e),{done:!0}),"usb-close":async({handle:e})=>(await S(U(),e),{done:!0}),"usb-select-configuration":async({handle:e,configurationValue:t})=>(await ue(U(),e,t),{done:!0}),"usb-claim-interface":async({handle:e,interfaceNumber:t})=>(await w(U(),e,t),{done:!0}),"usb-release-interface":async({handle:e,interfaceNumber:t})=>(await _(U(),e,t),{done:!0}),"usb-control-transfer-in":async({handle:e,setup:t,length:n})=>m(U(),e,t,n),"usb-control-transfer-out":async({handle:e,setup:t,bytes:n})=>oe(U(),e,t,n),"usb-transfer-in":async({handle:e,endpointNumber:t,length:n})=>x(U(),e,t,n),"usb-transfer-out":async({handle:e,endpointNumber:t,bytes:n})=>v(U(),e,t,n),"usb-reset":async({handle:e})=>(await le(U(),e),{done:!0}),"usb-clear-halt":async({handle:e,direction:t,endpointNumber:n})=>(await y(U(),e,t,n),{done:!0})}}function fe(e,t){return{"hid-list":async()=>({devices:await ae(G(),K())}),"hid-request":async({filters:e})=>({devices:await se(G(),K(),e)}),"hid-device-info":({handle:e})=>({device:f(G(),e)}),"hid-open":async({handle:e})=>(await E(G(),e),{done:!0}),"hid-close":async({handle:e})=>(await p(G(),e),{done:!0}),"hid-send-report":async({handle:e,reportId:t,bytes:n})=>(await re(G(),e,t,n),{done:!0}),"hid-send-feature-report":async({handle:e,reportId:t,bytes:n})=>(await O(G(),e,t,n),{done:!0}),"hid-receive-feature-report":async({handle:e,reportId:t})=>k(G(),e,t),"hid-subscribe-input-reports":async({handle:n})=>{t.get(n)?.();let r=await u(G(),n,t=>{e.emitEvent?.(`hid-input-report`,{handle:n,reportId:t.reportId,bytes:t.bytes})});return t.set(n,r),{done:!0}},"hid-unsubscribe-input-reports":({handle:e})=>(t.get(e)?.(),t.delete(e),{done:!0})}}function pe(){return{"serial-list":async()=>({devices:await d(q(),J())}),"serial-request":async({filters:e})=>({device:await l(q(),J(),e)}),"serial-device-info":({handle:e})=>({device:ie(q(),e)}),"serial-open":async({handle:e,options:t})=>(await ne(q(),e,t),{done:!0}),"serial-close":async({handle:e})=>(await D(q(),e),{done:!0}),"serial-read":async({handle:e,maxBytes:t,until:n,timeoutMs:r})=>{let i=await g(q(),e,{maxBytes:t,until:n?new Uint8Array(n):void 0,timeoutMs:r});return{bytes:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)}},"serial-write":async({handle:e,bytes:t})=>({bytesWritten:await te(q(),e,new Uint8Array(t))}),"serial-get-signals":async({handle:e})=>({signals:await ee(q(),e)}),"serial-set-signals":async({handle:e,signals:t})=>(await h(q(),e,t),{done:!0})}}function me(e){return{"esptool-chip-info":async({handle:t,baudRate:r})=>(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolChipInfo(q(),t,r,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),"esptool-read-mac":async({handle:t,baudRate:r})=>(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolReadMac(q(),t,r,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),"esptool-erase-flash":async({handle:t,baudRate:r})=>(await(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolEraseFlash(q(),t,r,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),{done:!0}),"esptool-flash":async({handle:t,baudRate:r,eraseAll:i,segments:a})=>(await(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolFlash(q(),t,r,i,a.map(e=>({address:e.address,data:new Uint8Array(e.bytes)})),n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),{done:!0}),"esptool-read-flash":async({handle:t,baudRate:r,address:i,size:a})=>{let o=await(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolReadFlash(q(),t,r,i,a,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n}));return{bytes:o.buffer.slice(o.byteOffset,o.byteOffset+o.byteLength)}},"esptool-read-reg":async({handle:t,baudRate:r,address:i})=>(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolReadReg(q(),t,r,i,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),"esptool-flash-id":async({handle:t,baudRate:r})=>(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolFlashId(q(),t,r,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),"esptool-erase-region":async({handle:t,baudRate:r,address:i,size:a})=>(await(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolEraseRegion(q(),t,r,i,a,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),{done:!0}),"esptool-run":async({handle:t,baudRate:r})=>(await(await n(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([37,1,3,38]))).esptoolRun(q(),t,r,n=>e.emitEvent?.(`esptool-progress`,{handle:t,line:n})),{done:!0})}}function he(e){return{"list-remote-targets":async()=>e.listRemoteTargets?{targets:(await e.listRemoteTargets()).filter(e=>e.targetId.includes(`:`)).map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}:{targets:[]},"remote-cdp-send":async({runtimeId:t,localTargetId:n,method:r,params:i,sessionId:a,timeout:o})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.send({runtimeId:t,localTargetId:n,method:r,params:i,sessionId:a,timeout:o})},"remote-cdp-subscribe":async({runtimeId:t,localTargetId:n,event:r})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.subscribe({runtimeId:t,localTargetId:n,event:r})},"remote-cdp-unsubscribe":async({runtimeId:t,localTargetId:n,event:r})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.unsubscribe({runtimeId:t,localTargetId:n,event:r})},"remote-cdp-detach":async({runtimeId:t,localTargetId:n})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.detach({runtimeId:t,localTargetId:n})},"remote-open-tab":async({runtimeId:t,url:n})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.openTab({runtimeId:t,url:n})}}}function ge(e,t){return t===void 0?e.length>0&&e.every(e=>e===`camera`||e===`microphone`):t}function _e(e){return{"permission-request":async t=>{let r=e.getPermissionsSurface?.()??null;if(!r)throw Error(`permission-request: permission surface unavailable`);let i=await r.prompt({kinds:t.kinds,description:t.description,heading:t.heading,grantLabel:t.grantLabel,cancelLabel:t.cancelLabel,skipIfGranted:ge(t.kinds,t.skipIfGranted)});if(i.status!==`granted`){let e=i.message?`: ${i.message}`:``;throw Error(`permission-request: ${i.reason??i.status}${e}`)}let a=[];for(let e of i.grants)switch(e.kind){case`usb`:{let t=U().register(e.device);a.push({kind:`usb`,handle:t});break}case`hid`:{let t=G().register(e.device);a.push({kind:`hid`,handle:t});break}case`serial`:{let t=q().register(e.port);a.push({kind:`serial`,handle:t});break}case`filesystem`:{let{storePendingHandle:t}=await n(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup--ijSfN8u.js`);return{storePendingHandle:e}},__vite__mapDeps([39,4,40,9])),r=`pendingMount:rpc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;await t(r,e.handle),a.push({kind:`filesystem`,idbKey:r,dirName:e.handle.name});break}case`camera`:case`microphone`:case`screenshare`:for(let t of e.stream.getTracks())t.stop();a.push({kind:e.kind,ok:!0})}return{grants:a}}}}function U(){return A()}function W(){let e=j();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}function G(){return o()}function K(){let e=a();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}function q(){return s()}function J(){let e=c();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}var ve=1500;async function ye(e){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia is not supported in this browser`);let t=e.mode===`photo`||e.captureVideo!==!1,n=!!e.captureAudio&&e.mode===`video`;if(!t&&!n)throw Error(`camera capture: at least one of video or audio must be requested`);let r=await be({wantVideo:t,videoDeviceId:t?await Y(e.deviceId,`videoinput`):void 0,audioDeviceId:n?await Y(e.audioDeviceId,`audioinput`):void 0,wantAudio:n,width:e.width,height:e.height,frameRate:e.frameRate,exact:!!e.exactSize});try{let n=null,i=0,a=0;if(t){n=document.createElement(`video`),n.srcObject=r,n.muted=!0,n.playsInline=!0;let e=n;await new Promise((t,n)=>{e.onloadedmetadata=()=>e.play().then(()=>t()).catch(n),e.onerror=()=>n(Error(`Failed to load camera stream`))}),await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e())),i=e.videoWidth,a=e.videoHeight}if(e.mode===`photo`){if(!n)throw Error(`photo capture requires a video track`);let t=e.warmupMs??ve;t>0&&await new Promise(e=>setTimeout(e,t));let r=document.createElement(`canvas`);r.width=i,r.height=a;let o=r.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);o.drawImage(n,0,0,i,a);let s=await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to encode photo`)),e.mimeType,e.quality)});return{bytes:await s.arrayBuffer(),mimeType:s.type||e.mimeType,width:i,height:a}}let o=Math.max(100,Math.min(e.durationMs??5e3,6e4)),s=typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e.mimeType)?e.mimeType:`video/webm`,c=new MediaRecorder(r,{mimeType:s}),l=[];c.ondataavailable=e=>{e.data&&e.data.size>0&&l.push(e.data)};let u=new Promise(e=>{c.onstop=()=>e()});c.start(),await new Promise(e=>setTimeout(e,o)),c.stop(),await u;let d=new Blob(l,{type:s});return{bytes:await d.arrayBuffer(),mimeType:d.type||s,width:i,height:a,durationMs:o}}finally{r.getTracks().forEach(e=>{e.stop()})}}async function Y(e,t){if(e===void 0||e===``)return;if(!/^\d+$/.test(e))return e;if(!navigator.mediaDevices?.enumerateDevices)return;let n=parseInt(e,10);return(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===t)[n]?.deviceId}async function be(e){let t=t=>{if(!e.wantVideo)return!1;let n={};return e.videoDeviceId&&(n.deviceId={exact:e.videoDeviceId}),e.width&&(n.width=t===`exact`?{exact:e.width}:{ideal:e.width}),e.height&&(n.height=t===`exact`?{exact:e.height}:{ideal:e.height}),e.frameRate&&(n.frameRate=t===`exact`?{exact:e.frameRate}:{ideal:e.frameRate}),Object.keys(n).length>0?n:!0},n=()=>e.wantAudio?!e.audioDeviceId||{deviceId:{exact:e.audioDeviceId}}:!1;try{return await navigator.mediaDevices.getUserMedia({video:t(e.exact?`exact`:`ideal`),audio:n()})}catch(r){let i=r?.name;if(!e.exact||i!==`OverconstrainedError`&&i!==`NotReadableError`)throw r;return console.warn(`panel-rpc:capture-camera: exact ${e.width??`?`}x${e.height??`?`}@${e.frameRate??`?`} unmet, falling back to ideal`),await navigator.mediaDevices.getUserMedia({video:t(`ideal`),audio:n()})}}async function xe(e,t){if((typeof navigator<`u`?navigator.userActivation:void 0)?.isActive===!0)return X(window.open(e,`_blank`,`width=500,height=700,popup=yes`));let n=t?.()??null;if(n){let t=await Se(n,e);return t===void 0?null:X(t)}return X(window.open(e,`_blank`,`width=500,height=700,popup=yes`))}function X(e){return new Promise(t=>{let n=!1,a=null,o=()=>{n||(n=!0,window.removeEventListener(`message`,s),clearTimeout(c),a&&clearInterval(a))},s=n=>{if(n.data?.type!==`oauth-callback`||n.origin!==window.location.origin||e&&n.source!==e)return;if(o(),n.data.error){console.error(`[panel-rpc:oauth-popup] OAuth error:`,n.data.error),t(null);return}let r=n.data.redirectUrl;(typeof r==`string`||r==null)&&t(r??null)};window.addEventListener(`message`,s),a=setInterval(async()=>{if(!n)try{let e=await fetch(r(`/api/oauth-result`),{headers:i()});if(e.status===204||!e.ok)return;let a=await e.json();if(n)return;if(o(),a.error){console.error(`[panel-rpc:oauth-popup] Server relay OAuth error:`,a.error),t(null);return}t(a.redirectUrl??null)}catch(e){console.warn(`[panel-rpc:oauth-popup] Poll failed:`,e instanceof Error?e.message:String(e))}},1e3);let c=setTimeout(()=>{o();try{e?.close()}catch{}t(null)},12e4)})}async function Se(e,t){let n=await e.prompt({kinds:[`popup`],description:`Continue to sign in. A new window will open to the provider.`,grantLabel:`Continue`,requestOptions:{popup:{url:t}}});if(n.status!==`granted`)return;let r=n.grants.find(e=>e.kind===`popup`);return r&&r.kind===`popup`?r.window:null}function Z(e){return{name:e.name,lang:e.lang,default:e.default,onDevice:!1}}async function Ce(e,t){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);let n=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let r=document.createElement(`video`);r.srcObject=n,r.muted=!0,r.playsInline=!0,await new Promise((e,t)=>{r.onloadedmetadata=()=>r.play().then(()=>e()).catch(t),r.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100));let i=r.videoWidth,a=r.videoHeight,o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);return s.drawImage(r,0,0,i,a),await new Promise((n,r)=>{o.toBlob(e=>e?n(e):r(Error(`Failed to create image blob`)),e,t)})}finally{n.getTracks().forEach(e=>{e.stop()})}}async function we(e){let t=URL.createObjectURL(e);try{let e=new Image;return await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to decode capture`)),e.src=t}),{width:e.naturalWidth,height:e.naturalHeight}}finally{URL.revokeObjectURL(t)}}async function Q(e){let t=URL.createObjectURL(e);try{let e=new Image;await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to load image for clipboard conversion`)),e.src=t});let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);return r.drawImage(e,0,0),await new Promise((e,t)=>{n.toBlob(n=>n?e(n):t(Error(`PNG re-encode failed`)),`image/png`)})}finally{URL.revokeObjectURL(t)}}async function $(e=3e5){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}function Te(){return{"theme-apply":async({themeJson:e,action:t})=>{let{importTheme:r,saveCustomTheme:i,setActiveTheme:a,clearActiveTheme:o,applyThemeOverrides:s}=await n(async()=>{let{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}=await import(`./theme-engine-B5SkYf3E.js`).then(e=>e.m);return{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}},__vite__mapDeps([41,1,4]));if(t===`reset`)return o(),s(),{applied:null};if(e){let t=r(e);return i(t),a(t.id),s(),{applied:t.id}}return{applied:null}}}}function Ee(){return{"layout-apply":async e=>{let{getLayoutApplier:t}=await n(async()=>{let{getLayoutApplier:e}=await import(`./layout-apply-registry-Cw730jao.js`);return{getLayoutApplier:e}},[]),r=t();return r?await r(e)??{applied:!0}:{applied:!1,error:`no layout is mounted`}}}}export{M as createStandalonePanelRpcHandlers};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import"./account-store-DT3VDbvp.js";import"./core-D59qaXEb.js";import"./tray-runtime-config--rtR6Gxd.js";e(`provider-settings`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./provider-CSA17s1P.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-3A-5dTwk.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t}from"./fs-DqBbpVZo.js";export{t as repairOpfsMetadataSidecar,e as resolveWithSidecarRepair};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(){return{version:`6.153.0`,releasedAt:`2026-09-14T14:10:13Z`,buildId:`6.153.0-mu1blc92`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{r as t,t as n}from"./sprinkle-renderer-DDP-UxN2.js";import{s as r}from"./telemetry-DJyRzh6X.js";import{i}from"./feature-flags-O-TLmy2G.js";import{n as a,t as o}from"./panel-rpc-B3MSVImO.js";import{n as s,t as c}from"./bounded-walk-BjxKWNqp.js";import"./sprinkle-instances-B8n7h-oP.js";var l=[`/workspace`,`/shared`,`/scoops`,`/home`],u=[`/shared/sprinkles`],d=6,f=500,p=new Set([`connect-llm`,`welcome`]);function m(e){return p.has(e)?!0:e===`suggestions`&&!i(`memory-v2`)}async function h(e){let t=new Map;for(let n of[...u,...l])await e.exists(n)&&await g(e,n,t);return t}async function g(e,t,n){let r=s(e,t,{maxDepth:d,maxDirs:f,skip:c});for await(let t of r){if(!t.endsWith(`.shtml`))continue;let r=_(t);if(!m(r)&&!n.has(r)){let i;try{i=await e.readFile(t,{encoding:`utf-8`})??``}catch{i=``}n.set(r,{name:r,path:t,title:v(i,r),autoOpen:y(i),icon:b(i)})}}}function _(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function v(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function y(e){return/data-sprinkle-autoopen\b/.test(e)}function b(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=x(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=S(i,`href`);if(a!==void 0)return a.trim()}let r=S(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function x(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function S(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var C=e(`sprinkle-manager`),w=`slicc-open-sprinkles`,T=`sprinkles`;function E(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(T);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function D(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(T):t.searchParams.set(T,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var O=`slicc-known-sprinkles`;function k(e){try{let t=new Set(e),n=A().filter(e=>t.has(e));localStorage.setItem(O,JSON.stringify(n))}catch{}}function A(){try{let e=localStorage.getItem(O);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var j=`slicc-autoopened-once`,M=l,N=250,P=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,n,r,i,s={}){this.fs=e;let c=async()=>{let e=`image/png`,t=a(),n=o();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);if(t&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let r,i,s;if(t){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),i=n.videoWidth,s=n.videoHeight;let a=document.createElement(`canvas`);a.width=i,a.height=s;let o=a.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);o.drawImage(n,0,0,i,s),r=await(await new Promise((t,n)=>{a.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:3e5});r=t.bytes,i=t.width,s=t.height}let c=new Uint8Array(r),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:i,height:s,mimeType:e}};this.bridge=new t(e,n,e=>this.close(e),e=>this.minimize(e),i,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=r,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&C.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}async reload(e){let t=this.openSprinkles.get(e);if(!t){C.info(`Cannot reload closed sprinkle`,{name:e});return}let r=this.availableSprinkles.get(e);if(r||=(await this.refresh(),this.availableSprinkles.get(e)),!r){C.warn(`Sprinkle not found during reload`,{name:e});return}let i=await this.fs.readFile(r.path,{encoding:`utf-8`});if(i==null){C.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e),s=new n(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(C.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){C.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=E();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(w);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{C.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(w)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{C.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),C.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{C.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(A())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(O,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(j);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(j,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(w,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,D([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh!==null)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<N))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name)){if(i=!0,a.autoOpen){if(n.has(a.name)){C.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),C.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{C.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),C.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{C.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await h(this.fs),C.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){C.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){C.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){C.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,i={}){if(this.openSprinkles.has(e)){C.info(`Sprinkle already open`,{name:e});return}let a=this.availableSprinkles.get(e);if(a||=(await this.refresh(),this.availableSprinkles.get(e)),!a)throw Error(`Sprinkle not found: ${e}`);let o=await this.fs.readFile(a.path,{encoding:`utf-8`});if(o==null)throw Error(`Failed to read sprinkle content: ${a.path} (file may be corrupted or missing)`);let s=typeof o==`string`?o:new TextDecoder(`utf-8`).decode(o),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:c}),i.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,a.title,c,t,{...i,icon:a.icon});let l=this.bridge.createAPI(e),u=new n(c,l);await u.render(s,e);let d=this.openSprinkles.get(e);if(!d){u.dispose();return}d.renderer=u,u.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),r(e),C.info(`Sprinkle opened`,{name:e,title:a.title}),this.notifyChange())}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),C.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){this.attentionOnly.has(e)&&this.markActivated(e);let n=this.openSprinkles.get(e);if(!n){try{await this.open(e,t)}catch(t){C.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}return}let r=this.availableSprinkles.get(e);this.callbacks.addSprinkle(e,r?.title??e,n.container,t,{icon:r?.icon})}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),C.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),C.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{C.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{C.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=M.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t,n){let r=!n?.runtime||n.runtime===`leader`,i=!n?.runtime||n.runtime!==`leader`,a={leader:!1,followers:[]};if(r){let n=this.openSprinkles.get(e);n?(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),a.leader=!0):C.warn(`Cannot send to closed sprinkle`,{name:e})}if(i&&this.onSendToSprinkle)try{let r=this.onSendToSprinkle(e,t,n);r&&(a.followers=r.followers,r.unknownRuntime&&(a.unknownRuntime=r.unknownRuntime))}catch(t){C.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}return a}};export{P as SprinkleManager,k as pruneKnownSprinkleNames,A as readKnownSprinkleNames};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
async function e(e,t,n,r,i,a){try{let o;switch(n){case`list`:await e.refresh(),o=e.available();break;case`opened`:o=e.opened();break;case`refresh`:await e.refresh(),o=e.available().length;break;case`open`:await e.open(r),o=!0;break;case`close`:e.close(r),o=!0;break;case`send`:o=e.sendToSprinkle(r,i,a);break;case`reload`:await e.reload(r),o=!0;break;case`openNewAutoOpen`:await e.openNewAutoOpenSprinkles(),o=!0}chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,result:o}}).catch(()=>{})}catch(e){chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,error:e instanceof Error?e.message:String(e)}}).catch(()=>{})}}export{e as handleSprinkleOp};
|