sliccy 5.73.4 → 5.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/node-server/_shared/index.d.ts +2 -0
- package/dist/node-server/_shared/index.d.ts.map +1 -1
- package/dist/node-server/_shared/index.js +2 -0
- package/dist/node-server/_shared/index.js.map +1 -1
- package/dist/node-server/_shared/secrets-pipeline.d.ts +22 -0
- package/dist/node-server/_shared/secrets-pipeline.d.ts.map +1 -1
- package/dist/node-server/_shared/secrets-pipeline.js +50 -0
- package/dist/node-server/_shared/secrets-pipeline.js.map +1 -1
- package/dist/node-server/_shared/transcript-export.d.ts +161 -0
- package/dist/node-server/_shared/transcript-export.d.ts.map +1 -0
- package/dist/node-server/_shared/transcript-export.js +804 -0
- package/dist/node-server/_shared/transcript-export.js.map +1 -0
- package/dist/node-server/_shared/transcript-redaction.d.ts +25 -0
- package/dist/node-server/_shared/transcript-redaction.d.ts.map +1 -0
- package/dist/node-server/_shared/transcript-redaction.js +107 -0
- package/dist/node-server/_shared/transcript-redaction.js.map +1 -0
- package/dist/node-server/_shared/tray-sync-protocol.d.ts +56 -1
- package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
- package/dist/node-server/_shared/tray-sync-protocol.js +1 -1
- package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
- package/dist/node-server/routes/secrets.js +52 -22
- package/dist/ui/assets/{account-store-DwSzwLW8.js → account-store-Bl8i_M1G.js} +3 -3
- package/dist/ui/assets/{account-store-DzwZMcTg.js → account-store-D1yHSv41.js} +2 -2
- package/dist/ui/assets/{adobe-h2gWq2z2.js → adobe-Dj6ICUFy.js} +2 -2
- package/dist/ui/assets/{adobe-ChyPg00A.js → adobe-spCgooV8.js} +1 -1
- package/dist/ui/assets/{apps-C86xnKLs.js → apps-DYGU4Hk4.js} +1 -1
- package/dist/ui/assets/{azure-openai-DMNa-Eup.js → azure-openai-BWxnsgoz.js} +1 -1
- package/dist/ui/assets/{azure-openai-CjkdyGG4.js → azure-openai-HviLHIe2.js} +1 -1
- package/dist/ui/assets/{bridge-launch-params-jegYRGJ6.js → bridge-launch-params-QY3l_LbM.js} +1 -1
- package/dist/ui/assets/{cdp-7evcrxxP.js → cdp-D9eDDEuA.js} +1 -1
- package/dist/ui/assets/{cerebras-CvSC_Q2O.js → cerebras-BZ84V5eM.js} +1 -1
- package/dist/ui/assets/{cerebras-B0gvSD27.js → cerebras-TQl2NG86.js} +1 -1
- package/dist/ui/assets/{client-BliYDaDA.js → client-BxYB_ioq.js} +1 -1
- package/dist/ui/assets/{composer-speech-BSy_wbJC.js → composer-speech-FeteaFpi.js} +1 -1
- package/dist/ui/assets/{connect-surface-3UvT0SF3.js → connect-surface-7HJhV-kA.js} +1 -1
- package/dist/ui/assets/{discovery-preference-CUhsI-AU.js → discovery-preference-C0L_79z7.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-8cWrra0n.js → ensure-speech-assets-DGq5bX3t.js} +1 -1
- package/dist/ui/assets/export-provider-B6K_eHX_.js +1 -0
- package/dist/ui/assets/export-spool-DCxGPg43.js +1 -0
- package/dist/ui/assets/{follower-navigate-watcher-UN0jo7Ge.js → follower-navigate-watcher-DgusZOpY.js} +1 -1
- package/dist/ui/assets/{fs-DgMOH-Zj.js → fs-BS22sTLO.js} +1 -1
- package/dist/ui/assets/{fs-DC3MEAD4.js → fs-CnmmspRj.js} +2 -2
- package/dist/ui/assets/{github-HKW-k0Oh.js → github-CDEISDAs.js} +1 -1
- package/dist/ui/assets/{github-mH266f8L.js → github-CRxngoj0.js} +2 -2
- package/dist/ui/assets/{github-copilot-CBv0T4_S.js → github-copilot-BJqTbNKn.js} +1 -1
- package/dist/ui/assets/{github-copilot-C7lsRXxS.js → github-copilot-BzQ18OiN.js} +1 -1
- package/dist/ui/assets/{handoff-link-CfgH86mb.js → handoff-link-Dmaaww5x.js} +1 -1
- package/dist/ui/assets/{hear-B5lURJtR.js → hear-CRBq5mEX.js} +1 -1
- package/dist/ui/assets/{hear-DI5vlKdf.js → hear-v5qXSZw8.js} +1 -1
- package/dist/ui/assets/{kernel-worker-CHs5yDJo.js → kernel-worker-C1-PDfKp.js} +728 -594
- package/dist/ui/assets/{kokoro-engine-DX7VicqD.js → kokoro-engine-CogHLlSk.js} +1 -1
- package/dist/ui/assets/{lick-manager-Ct3WOtut.js → lick-manager-wU1FKkH8.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-D5zKuunw.js → lick-ws-bridge-CFKIh9aE.js} +1 -1
- package/dist/ui/assets/lick-ws-bridge-yMljNHwr.js +1 -0
- package/dist/ui/assets/{local-llm-DcKgaorK.js → local-llm-BGgEn1af.js} +1 -1
- package/dist/ui/assets/{local-llm-DpBDM1Dm.js → local-llm-DkpJTY09.js} +1 -1
- package/dist/ui/assets/main-cherry-D_hgi0by.js +1 -0
- package/dist/ui/assets/main-hPxGMX9p.js +22 -0
- package/dist/ui/assets/{mount-BRSg0FIY.js → mount-DerCullm.js} +2 -2
- package/dist/ui/assets/{mount-BHqxxbwU.js → mount-YAzoDR12.js} +1 -1
- package/dist/ui/assets/{mount-bridge-client-DHGevTQu.js → mount-bridge-client-BWPRzAQ5.js} +1 -1
- package/dist/ui/assets/{mount-recovery-Beig7gzz.js → mount-recovery-F-Ikaxyf.js} +1 -1
- package/dist/ui/assets/{navigation-watcher-BoJS9hdc.js → navigation-watcher-DkN9hU8i.js} +1 -1
- package/dist/ui/assets/new-session-1cUlwvcQ.js +2 -0
- package/dist/ui/assets/{oauth-bootstrap-DUaR-il_.js → oauth-bootstrap-CxYyki5j.js} +2 -2
- package/dist/ui/assets/{oauth-service-foejPYvF.js → oauth-service-BuEH8BXq.js} +1 -1
- package/dist/ui/assets/{oauth-service-lE9AyywH.js → oauth-service-Dk3L2UWh.js} +1 -1
- package/dist/ui/assets/{openai-codex-CZit4W_R.js → openai-codex-BOOXWh0-.js} +1 -1
- package/dist/ui/assets/{openai-codex-D0W343kX.js → openai-codex-Z87rB7hH.js} +1 -1
- package/dist/ui/assets/{openrouter-D4iz9RSI.js → openrouter-ChLya5Rz.js} +1 -1
- package/dist/ui/assets/{openrouter-XorTuzAh.js → openrouter-DqBzxuS4.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BGOdgzqm.js → openrouter-oauth-B2EeoFim.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BLGBWXoP.js → openrouter-oauth-BfBNSDL4.js} +1 -1
- package/dist/ui/assets/page-follower-tray-M061L6UY.js +5 -0
- package/dist/ui/assets/{panel-rpc-handlers-BPMsj1iE.js → panel-rpc-handlers-lhPUi07r.js} +2 -2
- package/dist/ui/assets/{port-bridge-client-CoFZLSYm.js → port-bridge-client-DdolH4cw.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-BC810skI.js → port-bridge-client-f_6YKEkm.js} +1 -1
- package/dist/ui/assets/{provider-DZ7x1aM4.js → provider-C7Q4UCkY.js} +1 -1
- package/dist/ui/assets/{provider-YxK-lzhm.js → provider-DxymVAbc.js} +2 -2
- package/dist/ui/assets/{provider-settings-D6FC6-Ws.js → provider-settings-B10nWNyQ.js} +2 -2
- package/dist/ui/assets/{provider-settings-CmJnFmK2.js → provider-settings-LbMzjgqW.js} +1 -1
- package/dist/ui/assets/provider-store-access-Dd3tkLn0.js +1 -0
- package/dist/ui/assets/{provider-store-access-Bqa_EvEK.js → provider-store-access-btCSTQlh.js} +2 -2
- package/dist/ui/assets/{providers-Bklgdp4G.js → providers-9ptDFUER.js} +2 -2
- package/dist/ui/assets/{providers-7r6dA4ra.js → providers-SLMbNokZ.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-D5h5REZy.js → proxied-fetch-CfcFb0B0.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-ldIfAeIb.js → proxied-fetch-D8ebvbVd.js} +1 -1
- package/dist/ui/assets/{quick-llm-BHegEzYY.js → quick-llm-OrtNrFVG.js} +1 -1
- package/dist/ui/assets/{remote-cdp-transport-DOoXIxy3.js → remote-cdp-transport-Dmg2NdTA.js} +1 -1
- package/dist/ui/assets/{runtime-mode-BVHOImD_.js → runtime-mode-B8Tqab3Z.js} +1 -1
- package/dist/ui/assets/runtime-mode-BweZnYql.js +1 -0
- package/dist/ui/assets/{secret-env-dQA8rL_1.js → secret-env-Cn-GSA1R.js} +1 -1
- package/dist/ui/assets/{secret-topology-CptRwAX3.js → secret-topology-Baeul5rD.js} +1 -1
- package/dist/ui/assets/{secrets-bridge-client-D6nwnBvr.js → secrets-bridge-client-CLRo0NLf.js} +1 -1
- package/dist/ui/assets/session-freezer-Cff7tz-G.js +21 -0
- package/dist/ui/assets/session-store-DQztDoVa.js +1 -0
- package/dist/ui/assets/setup-standalone-prelude-DMI8rzSo.js +2 -0
- package/dist/ui/assets/{setup-sudo-DGrMEyR3.js → setup-sudo-dy3HgBdZ.js} +2 -2
- package/dist/ui/assets/sha256-DmK25X5D.js +1 -0
- package/dist/ui/assets/{silent-renew-backoff-DyzFsWYC.js → silent-renew-backoff-Chq7fPuc.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-Dzkpjjro.js → silent-renew-backoff-CqD4WRin.js} +1 -1
- package/dist/ui/assets/{skills-DkHenAsV.js → skills-YAG8gCqO.js} +1 -1
- package/dist/ui/assets/{speak-aEIq7SEP.js → speak-DZhfxcQp.js} +1 -1
- package/dist/ui/assets/{speak-B4wyr-p6.js → speak-wEvzUJ_4.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-354rS3Fe.js → sprinkle-manager-BYlc7AHg.js} +1 -1
- package/dist/ui/assets/src-BcePBv4G.js +1 -0
- package/dist/ui/assets/src-C9oNvq2b2.js +2 -0
- package/dist/ui/assets/src-DoFhVmQT.js +1 -0
- package/dist/ui/assets/{store-DICK08O4.js → store-CWIEXi1n.js} +1 -1
- package/dist/ui/assets/{sudo-9mYhdwPD.js → sudo-Bvn2VGB-.js} +1 -1
- package/dist/ui/assets/{telemetry-C8rZr13D.js → telemetry-Dxrv_mDE.js} +1 -1
- package/dist/ui/assets/{transformers-env-DZtq7i0I.js → transformers-env-Cr03eE3X.js} +1 -1
- package/dist/ui/assets/{transformers-env-CeJN6XlP.js → transformers-env-DKadceXA.js} +1 -1
- package/dist/ui/assets/{tray-leader-DicSB8Dn.js → tray-leader-BDMuV-1a.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BI5IM82V.js → tray-leave-runtime-DuZ41JQ-.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-DquE2Rx9.js → tray-runtime-config-9kTxza5l.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-8-BCHO27.js → tray-runtime-config-GgP0BHji.js} +1 -1
- package/dist/ui/assets/{tray-sync-protocol-CVdiCvfU.js → tray-sync-protocol-CxWJ329c.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-B8LfSgMb.js → upgrade-detection-B8gNzBbn.js} +1 -1
- package/dist/ui/assets/{voice-reply-6cMxpz9H.js → voice-reply-CkYr1oSF.js} +1 -1
- package/dist/ui/assets/{wc-attach-DU0svqb7.js → wc-attach-CYMk5mBA.js} +1 -1
- package/dist/ui/assets/wc-extension-Toc5AmFR.js +2 -0
- package/dist/ui/assets/{wc-float-label-2tniyRvt.js → wc-float-label-yV3hzRXJ.js} +1 -1
- package/dist/ui/assets/wc-follower-OxUb51ep.js +17 -0
- package/dist/ui/assets/wc-live-za8yDeaP.js +8 -0
- package/dist/ui/assets/wc-nav-ppYEG0RH.js +2 -0
- package/dist/ui/assets/{wc-onboarding-t5pRxVjL.js → wc-onboarding-DfIJGC-J.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-XW-qi_GD.js → wc-placeholder-3E3MxTwO.js} +2 -2
- package/dist/ui/assets/{wc-settings-7Jj2UM15.js → wc-settings-O4nxw4gF.js} +3 -3
- package/dist/ui/assets/{wc-shell-CoYCAmK-.js → wc-shell-B25uXa4K.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-CFaUt2sb.js → wc-sprinkles-CD1WpjET.js} +2 -2
- package/dist/ui/assets/wc-transcript-export-5Pmfejur.js +2 -0
- package/dist/ui/assets/wc-tray-BO2UoOrE.js +2 -0
- package/dist/ui/assets/{whisper-engine-G1YfvaDM.js → whisper-engine-CHKYCaAu.js} +1 -1
- package/dist/ui/assets/{whisper-session-Ds5v74N9.js → whisper-session-W-6_Qa-h.js} +2 -2
- package/dist/ui/assets/{xai-grok-CrEqywR8.js → xai-grok-Dq34m_Xp.js} +1 -1
- package/dist/ui/assets/{xai-grok-QulUPZS-.js → xai-grok-FRt_Qr4y.js} +1 -1
- package/dist/ui/index.html +15 -13
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +15 -13
- package/package.json +1 -1
- package/dist/ui/assets/lick-ws-bridge-DbbdXQSp.js +0 -1
- package/dist/ui/assets/main-CBUfGcTh.js +0 -22
- package/dist/ui/assets/main-cherry-9qp2ecC4.js +0 -1
- package/dist/ui/assets/new-session-UPnjrqyz.js +0 -2
- package/dist/ui/assets/page-follower-tray-Cm9cuA-m.js +0 -5
- package/dist/ui/assets/provider-store-access-Dw2dlNIf.js +0 -1
- package/dist/ui/assets/session-freezer-oYKtZTY0.js +0 -21
- package/dist/ui/assets/session-store-DAM8GRJ0.js +0 -1
- package/dist/ui/assets/src-CS5gSDhT.js +0 -1
- package/dist/ui/assets/src-Dk1QVJRd.js +0 -1
- package/dist/ui/assets/wc-extension-grYSDyJN.js +0 -2
- package/dist/ui/assets/wc-follower-B6JesvuH.js +0 -17
- package/dist/ui/assets/wc-live-OHBNpb_A.js +0 -8
- package/dist/ui/assets/wc-nav-DcxqwpAS.js +0 -2
- package/dist/ui/assets/wc-tray-C_yJiqov.js +0 -2
package/dist/ui/llm-proxy-sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var I="https://www.sliccy.ai";var w="bridgeToken",b="bridge",U="X-Bridge-Token";var de=new URL(I).hostname,$e={[de]:"sliccy.now","sliccy.ai":"sliccy.now","slicc-tray-hub-staging.minivelos.workers.dev":"sliccy.dev","localhost:8787":"localhost:8787"};var pe=["ghp_","gho_","ghu_","ghs_","ghr_","github_pat_","sk-","pk-","xoxb-","xoxp-","xoxa-","xoxs-","AKIA","ABIA","ACCA","ASIA","sk-ant-","Bearer "],je=[...pe].sort((e,t)=>t.length-e.length);var ge="slicc-sync-fs-";function F(e){return ge+e}var N="sync-fs-nonce",L="sync-fs-need-nonce",R="/__slicc/fs-sync/";var O="x-slicc-fs-token",E="x-slicc-fs-errno",h="x-slicc-fs",D="sync-fs-req",B="sync-fs-ack",q="sync-fs-res",P=25e3,H=2e3;function C(e){if(!e)return{};let t={};for(let[r,s]of Object.entries(e)){let n=r.toLowerCase();n==="cookie"?t["X-Proxy-Cookie"]=s:n==="origin"?t["X-Proxy-Origin"]=s:n==="referer"?t["X-Proxy-Referer"]=s:n.startsWith("proxy-")?t[`X-Proxy-${r}`]=s:t[r]=s}return t}function V(e){let t={};for(let[r,s]of Object.entries(e))r.toLowerCase()==="x-proxy-set-cookie"?t["set-cookie"]=s:t[r]=s;return t}var fe=new Set([101,103,204,205,304]);function ye(e){let t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}function $(e){let t,r,s=new Promise((o,i)=>{t=o,r=i}),n=null,a=new ReadableStream({start(o){n=o}}),c=!1,u=!1,f=()=>{try{n?.close()}catch{}},p=o=>{try{n?.error(o)}catch{}},g=o=>{if(c)return;c=!0;let i=new Headers;for(let[l,y]of Object.entries(V(o.headers)))i.set(l,y);let S=fe.has(o.status)?null:a;t(new Response(S,{status:o.status,statusText:o.statusText,headers:i}))},d=o=>{u=!0;let i=new Error(o.error);c?p(i):r(i),e.close?.()};return e.onmessage=o=>{let i=o.data;!i||typeof i.type!="string"||u||(i.type==="response-head"?g(i):i.type==="response-chunk"?n?.enqueue(ye(i.dataBase64)):i.type==="response-end"?(u=!0,f(),e.close?.()):i.type==="response-error"&&d(i))},e.start?.(),{responsePromise:s}}var me=new Set([101,103,204,205,304]);function v(e){let t=me.has(e.status)?null:e.body;return new Response(t,{status:e.status,statusText:e.statusText,headers:e.headers})}var Y="slicc",W="leader";function j(e){try{let t=new URL(e);return`${t.protocol==="wss:"?"https:":"http:"}//${t.host}`}catch{return null}}var Se="slicc:bridge-config";function G(e,t){if(e?.apiBaseUrl&&e.token)return{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,""),token:e.token};if(!t)return null;let r;try{r=new URL(t)}catch{return null}let s=r.searchParams.get(b),n=r.searchParams.get(w);if(!s||!n)return null;let a=j(s);return a?{apiBaseUrl:a.replace(/\/+$/,""),token:n}:null}function K(e,t){if(e?.apiBaseUrl&&e.token)return G(e,null);for(let r of t){let s=G(null,r);if(s)return s}return null}function z(e,t){return t?`${t.apiBaseUrl}${e}`:e}function Q(e,t){let r,s;try{r=new URL(t),s=new URL(e)}catch{return!1}return s.origin===r.origin&&s.pathname.startsWith("/api/")}function X(e){return!e||typeof e!="object"?!1:e.type===Se}var M=class{byClient=new Map;set(t,r){if(t){if(!r.apiBaseUrl||!r.token){this.byClient.delete(t);return}this.byClient.set(t,{apiBaseUrl:r.apiBaseUrl.replace(/\/+$/,""),token:r.token})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},xe="slicc:extension-delegate-config",J="slicc:ext-fetch";function Z(e){return!e||typeof e!="object"?!1:e.type===xe}function A(e){if(!e)return null;let t;try{t=new URL(e)}catch{return null}if(t.searchParams.get(Y)!==W)return null;let r=t.searchParams.get("ext");return r?{extensionId:r}:null}function ee(e,t){if(e?.extensionId)return{extensionId:e.extensionId};for(let r of t){let s=A(r);if(s)return s}return null}var k=class{byClient=new Map;set(t,r){if(t){if(!r.extensionId){this.byClient.delete(t);return}this.byClient.set(t,{extensionId:r.extensionId})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},Ee=new Set(["image","font","style","video","audio","track","iframe","object","embed"]);function te(e){return Ee.has(e)}function re(e){let t=e;return t?.type==="window"&&t.frameType==="top-level"}function se(){let e=[];return{notify(){let t=e;e=[];for(let r of t)r()},wait(t){return new Promise(r=>{let s=!1,n=()=>{s||(s=!0,clearTimeout(a),e=e.filter(c=>c!==n),r())},a=setTimeout(n,t);e.push(n)})}}}var Re=P,Me=200,ke=new Set(["stat","readdir","exists"]);function _e(e){switch(e){case"ENOENT":return 404;case"EACCES":return 403;case"EISDIR":case"ENOTDIR":case"EINVAL":return 400;case"EIO":return 503;default:return 500}}async function ne(e){let t=new URL(e.url);if(!t.pathname.startsWith(R))return null;let r=t.pathname.slice(R.length-1),s;try{s=r.split("/").map(decodeURIComponent).join("/")}catch{return null}let n=e.headers.get(O)??"";if(e.method==="POST"){let c=await e.arrayBuffer();return{token:n,op:"write",path:s,body:new Uint8Array(c)}}let a=t.searchParams.get("op");return a&&ke.has(a)?{token:n,op:a,path:s}:{token:n,op:"read",path:s}}function we(e){if(!e.ok){let r=e.errno??"EIO";return new Response(e.message??r,{status:_e(r),headers:{[E]:r,[h]:"1"}})}if(e.kind==="json")return new Response(JSON.stringify(e.json??null),{status:200,headers:{"content-type":"application/json",[h]:"1"}});let t=e.kind==="bytes"?new Uint8Array(e.bytes):new Uint8Array(0);return new Response(t,{status:200,headers:{"content-type":"application/octet-stream",[h]:"1"}})}function oe(e,t,r={}){let s=r.timeoutMs??Re,n=r.retryIntervalMs??Me,a=crypto.randomUUID();return new Promise(c=>{let u=!1,f=!1,p,g,d=()=>{for(let l of e)l.removeEventListener("message",i);p&&clearInterval(p),g&&clearTimeout(g)},o=l=>{f||(f=!0,d(),c(l))},i=l=>{let y=l.data;if(!(!y||y.id!==a)){if(y.type===B){u=!0,p&&clearInterval(p);return}y.type===q&&o(we(y))}};for(let l of e)l.addEventListener("message",i);let S=()=>{for(let l of e)l.postMessage({type:D,id:a,...t})};S(),p=setInterval(()=>{u||S()},n),g=setTimeout(()=>{o(new Response("sync-fs bridge timeout",{status:503,headers:{[E]:"EIO",[h]:"1"}}))},s)})}var be="/api/fetch-proxy",_="x-bypass-llm-proxy",ce=new M,le=new k,Ce=32*1024*1024;self.importScripts("/preview-sw.js");self.addEventListener("install",e=>{e.waitUntil(self.skipWaiting())});self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())});self.addEventListener("message",e=>{let t=e.source;if(!t||!("id"in t)||typeof t.id!="string")return;if(X(e.data)){ce.set(t.id,{apiBaseUrl:e.data.apiBaseUrl,token:e.data.token});return}if(Z(e.data)){le.set(t.id,{extensionId:e.data.extensionId});return}let r=e.data;if(r?.type===N&&typeof r.nonce=="string"){re(t)&&ve(r.nonce);return}});self.addEventListener("fetch",e=>{let t=e.request;if(t.headers.get(_)==="1"||te(t.destination))return;let r;try{r=new URL(t.url)}catch{return}r.origin!==self.location.origin&&(r.protocol!=="http:"&&r.protocol!=="https:"||e.respondWith(Te(t,e.clientId||null)))});var T=new Map,ue=se();function ie(){return[...T.values()]}function ve(e){T.has(e)||(T.set(e,new BroadcastChannel(F(e))),ue.notify())}async function Ae(){let e=await self.clients.matchAll({type:"window"}),t={type:L};for(let r of e)r.postMessage(t)}self.addEventListener("fetch",e=>{let t=new URL(e.request.url);t.origin===self.location.origin&&t.pathname.startsWith(R)&&e.respondWith((async()=>{let r=await ne(e.request);if(!r)return new Response("sync-fs bridge: malformed path",{status:400,headers:{[E]:"EINVAL",[h]:"1"}});let s=ie();return s.length===0&&(Ae(),await ue.wait(H),s=ie(),s.length===0)?new Response("sync-fs bridge not ready",{status:503,headers:{[E]:"EIO",[h]:"1"}}):oe(s,r)})())});async function Te(e,t){let r=e.url,s={};e.headers.forEach((m,x)=>{x.toLowerCase()!==_&&(s[x]=m)});let n=C(s),a=new Headers;for(let[m,x]of Object.entries(n))a.set(m,x);a.set("X-Target-URL",r);let c=ce.get(t),u=le.get(t),f=await Ie(t),p=c||u?[]:await Ue(),g=[f,...p],d=ee(u,g);if(d){let m=await Fe();if(m)return Le(e,d,m,r)}let o=K(c,g);if(o&&Q(e.url,o.apiBaseUrl)){let m=new Headers(e.headers);m.set(_,"1");let x={method:e.method,headers:m,cache:"no-store",credentials:e.credentials,redirect:"manual",signal:e.signal,body:await ae(e)};return v(await fetch(e.url,x))}o&&a.set(U,o.token);let i=z(be,o),S=await ae(e),l={method:e.method,headers:a,cache:"no-store",credentials:"omit",redirect:"manual",signal:e.signal,body:S},y=await fetch(i,l);return v(y)}async function ae(e){if(e.method==="GET"||e.method==="HEAD")return;let t=await e.arrayBuffer();return t.byteLength>0?t:void 0}async function Ie(e){if(!e)return null;try{return(await self.clients.get(e))?.url??null}catch{return null}}async function Ue(){try{return(await self.clients.matchAll({type:"window",includeUncontrolled:!0})).map(t=>t.url).filter(t=>!!t)}catch{return[]}}async function Fe(){try{let e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});return e.length===0?null:e.find(r=>A(r.url)!==null)??e[0]}catch{return null}}function Ne(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}async function Le(e,t,r,s){let n={};e.headers.forEach((d,o)=>{o.toLowerCase()!==_&&(n[o]=d)});let a=C(n),c,u=!1;if(e.method!=="GET"&&e.method!=="HEAD"){let d=await e.arrayBuffer();d.byteLength>Ce?u=!0:d.byteLength>0&&(c=Ne(new Uint8Array(d)))}let f=new MessageChannel,{responsePromise:p}=$(f.port1),g={type:J,requestId:Oe(),extensionId:t.extensionId,request:{url:s,method:e.method,headers:a,bodyBase64:c,requestBodyTooLarge:u}};return r.postMessage(g,[f.port2]),p}function Oe(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}})();
|
|
1
|
+
"use strict";(()=>{var T="https://www.sliccy.ai";var w="bridgeToken",_="bridge",U="X-Bridge-Token";var fe=new URL(T).hostname,je={[fe]:"sliccy.now","sliccy.ai":"sliccy.now","slicc-tray-hub-staging.minivelos.workers.dev":"sliccy.dev","localhost:8787":"localhost:8787"};var de=["ghp_","gho_","ghu_","ghs_","ghr_","github_pat_","sk-","pk-","xoxb-","xoxp-","xoxa-","xoxs-","AKIA","ABIA","ACCA","ASIA","sk-ant-","Bearer "],Ge=[...de].sort((e,t)=>t.length-e.length);var ge=["canonical-agent-history-unavailable","tool-data-may-be-truncated","model-metadata-unavailable","scoop-history-unavailable","attachment-file-missing","attachment-association-unavailable","complete-snapshot-unavailable"];var ut=new Set(ge);var dt=[{category:"jwt",source:String.raw`ey[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+`,flags:"g"},{category:"private-key",source:"-----BEGIN [A-Z ]* PRIVATE KEY-----"+String.raw`[\s\S]*?`+"-----END [A-Z ]* PRIVATE KEY-----",flags:"g"},{category:"bearer-token",source:"Bearer [A-Za-z0-9._~+/=!-]+",flags:"gi"},{category:"api-key",source:"(?:sk-(?:live|test|prod|proj)-[A-Za-z0-9]{8,}|sk-ant-[A-Za-z0-9-]{8,}|xoxb-[A-Za-z0-9-]{10,}|xoxp-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{16}|ghp_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{34})",flags:"g"},{category:"password",source:String.raw`\b(?:password|passwd|token|secret|api_key)\s*[=:]\s*\S+`,flags:"gi"}];var pe="slicc-sync-fs-";function $(e){return pe+e}var F="sync-fs-nonce",N="sync-fs-need-nonce",R="/__slicc/fs-sync/";var L="x-slicc-fs-token",x="x-slicc-fs-errno",h="x-slicc-fs",O="sync-fs-req",D="sync-fs-ack",B="sync-fs-res",P=25e3,q=2e3;function v(e){if(!e)return{};let t={};for(let[r,n]of Object.entries(e)){let s=r.toLowerCase();s==="cookie"?t["X-Proxy-Cookie"]=n:s==="origin"?t["X-Proxy-Origin"]=n:s==="referer"?t["X-Proxy-Referer"]=n:s.startsWith("proxy-")?t[`X-Proxy-${r}`]=n:t[r]=n}return t}function V(e){let t={};for(let[r,n]of Object.entries(e))r.toLowerCase()==="x-proxy-set-cookie"?t["set-cookie"]=n:t[r]=n;return t}var me=new Set([101,103,204,205,304]);function ye(e){let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function H(e){let t,r,n=new Promise((o,i)=>{t=o,r=i}),s=null,a=new ReadableStream({start(o){s=o}}),c=!1,u=!1,p=()=>{try{s?.close()}catch{}},d=o=>{try{s?.error(o)}catch{}},g=o=>{if(c)return;c=!0;let i=new Headers;for(let[l,m]of Object.entries(V(o.headers)))i.set(l,m);let S=me.has(o.status)?null:a;t(new Response(S,{status:o.status,statusText:o.statusText,headers:i}))},f=o=>{u=!0;let i=new Error(o.error);c?d(i):r(i),e.close?.()};return e.onmessage=o=>{let i=o.data;!i||typeof i.type!="string"||u||(i.type==="response-head"?g(i):i.type==="response-chunk"?s?.enqueue(ye(i.dataBase64)):i.type==="response-end"?(u=!0,p(),e.close?.()):i.type==="response-error"&&f(i))},e.start?.(),{responsePromise:n}}var he=new Set([101,103,204,205,304]);function A(e){let t=he.has(e.status)?null:e.body;return new Response(t,{status:e.status,statusText:e.statusText,headers:e.headers})}var j="slicc",Y="leader";function W(e){try{let t=new URL(e);return`${t.protocol==="wss:"?"https:":"http:"}//${t.host}`}catch{return null}}var ke="slicc:bridge-config";function G(e,t){if(e?.apiBaseUrl&&e.token)return{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,""),token:e.token};if(!t)return null;let r;try{r=new URL(t)}catch{return null}let n=r.searchParams.get(_),s=r.searchParams.get(w);if(!n||!s)return null;let a=W(n);return a?{apiBaseUrl:a.replace(/\/+$/,""),token:s}:null}function z(e,t){if(e?.apiBaseUrl&&e.token)return G(e,null);for(let r of t){let n=G(null,r);if(n)return n}return null}function K(e,t){return t?`${t.apiBaseUrl}${e}`:e}function X(e,t){let r,n;try{r=new URL(t),n=new URL(e)}catch{return!1}return n.origin===r.origin&&n.pathname.startsWith("/api/")}function Q(e){return!e||typeof e!="object"?!1:e.type===ke}var E=class{byClient=new Map;set(t,r){if(t){if(!r.apiBaseUrl||!r.token){this.byClient.delete(t);return}this.byClient.set(t,{apiBaseUrl:r.apiBaseUrl.replace(/\/+$/,""),token:r.token})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},xe="slicc:extension-delegate-config",J="slicc:ext-fetch";function Z(e){return!e||typeof e!="object"?!1:e.type===xe}function C(e){if(!e)return null;let t;try{t=new URL(e)}catch{return null}if(t.searchParams.get(j)!==Y)return null;let r=t.searchParams.get("ext");return r?{extensionId:r}:null}function ee(e,t){if(e?.extensionId)return{extensionId:e.extensionId};for(let r of t){let n=C(r);if(n)return n}return null}var M=class{byClient=new Map;set(t,r){if(t){if(!r.extensionId){this.byClient.delete(t);return}this.byClient.set(t,{extensionId:r.extensionId})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},Re=new Set(["image","font","style","video","audio","track","iframe","object","embed"]);function te(e){return Re.has(e)}function re(e){let t=e;return t?.type==="window"&&t.frameType==="top-level"}function ne(){let e=[];return{notify(){let t=e;e=[];for(let r of t)r()},wait(t){return new Promise(r=>{let n=!1,s=()=>{n||(n=!0,clearTimeout(a),e=e.filter(c=>c!==s),r())},a=setTimeout(s,t);e.push(s)})}}}var Ee=P,Me=200,be=new Set(["stat","readdir","exists"]);function we(e){switch(e){case"ENOENT":return 404;case"EACCES":return 403;case"EISDIR":case"ENOTDIR":case"EINVAL":return 400;case"EIO":return 503;default:return 500}}async function se(e){let t=new URL(e.url);if(!t.pathname.startsWith(R))return null;let r=t.pathname.slice(R.length-1),n;try{n=r.split("/").map(decodeURIComponent).join("/")}catch{return null}let s=e.headers.get(L)??"";if(e.method==="POST"){let c=await e.arrayBuffer();return{token:s,op:"write",path:n,body:new Uint8Array(c)}}let a=t.searchParams.get("op");return a&&be.has(a)?{token:s,op:a,path:n}:{token:s,op:"read",path:n}}function _e(e){if(!e.ok){let r=e.errno??"EIO";return new Response(e.message??r,{status:we(r),headers:{[x]:r,[h]:"1"}})}if(e.kind==="json")return new Response(JSON.stringify(e.json??null),{status:200,headers:{"content-type":"application/json",[h]:"1"}});let t=e.kind==="bytes"?new Uint8Array(e.bytes):new Uint8Array(0);return new Response(t,{status:200,headers:{"content-type":"application/octet-stream",[h]:"1"}})}function oe(e,t,r={}){let n=r.timeoutMs??Ee,s=r.retryIntervalMs??Me,a=crypto.randomUUID();return new Promise(c=>{let u=!1,p=!1,d,g,f=()=>{for(let l of e)l.removeEventListener("message",i);d&&clearInterval(d),g&&clearTimeout(g)},o=l=>{p||(p=!0,f(),c(l))},i=l=>{let m=l.data;if(!(!m||m.id!==a)){if(m.type===D){u=!0,d&&clearInterval(d);return}m.type===B&&o(_e(m))}};for(let l of e)l.addEventListener("message",i);let S=()=>{for(let l of e)l.postMessage({type:O,id:a,...t})};S(),d=setInterval(()=>{u||S()},s),g=setTimeout(()=>{o(new Response("sync-fs bridge timeout",{status:503,headers:{[x]:"EIO",[h]:"1"}}))},n)})}var ve="/api/fetch-proxy",b="x-bypass-llm-proxy",ce=new E,le=new M,Ae=32*1024*1024;self.importScripts("/preview-sw.js");self.addEventListener("install",e=>{e.waitUntil(self.skipWaiting())});self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())});self.addEventListener("message",e=>{let t=e.source;if(!t||!("id"in t)||typeof t.id!="string")return;if(Q(e.data)){ce.set(t.id,{apiBaseUrl:e.data.apiBaseUrl,token:e.data.token});return}if(Z(e.data)){le.set(t.id,{extensionId:e.data.extensionId});return}let r=e.data;if(r?.type===F&&typeof r.nonce=="string"){re(t)&&Ce(r.nonce);return}});self.addEventListener("fetch",e=>{let t=e.request;if(t.headers.get(b)==="1"||te(t.destination))return;let r;try{r=new URL(t.url)}catch{return}r.origin!==self.location.origin&&(r.protocol!=="http:"&&r.protocol!=="https:"||e.respondWith(Te(t,e.clientId||null)))});var I=new Map,ue=ne();function ie(){return[...I.values()]}function Ce(e){I.has(e)||(I.set(e,new BroadcastChannel($(e))),ue.notify())}async function Ie(){let e=await self.clients.matchAll({type:"window"}),t={type:N};for(let r of e)r.postMessage(t)}self.addEventListener("fetch",e=>{let t=new URL(e.request.url);t.origin===self.location.origin&&t.pathname.startsWith(R)&&e.respondWith((async()=>{let r=await se(e.request);if(!r)return new Response("sync-fs bridge: malformed path",{status:400,headers:{[x]:"EINVAL",[h]:"1"}});let n=ie();return n.length===0&&(Ie(),await ue.wait(q),n=ie(),n.length===0)?new Response("sync-fs bridge not ready",{status:503,headers:{[x]:"EIO",[h]:"1"}}):oe(n,r)})())});async function Te(e,t){let r=e.url,n={};e.headers.forEach((y,k)=>{k.toLowerCase()!==b&&(n[k]=y)});let s=v(n),a=new Headers;for(let[y,k]of Object.entries(s))a.set(y,k);a.set("X-Target-URL",r);let c=ce.get(t),u=le.get(t),p=await Ue(t),d=c||u?[]:await $e(),g=[p,...d],f=ee(u,g);if(f){let y=await Fe();if(y)return Le(e,f,y,r)}let o=z(c,g);if(o&&X(e.url,o.apiBaseUrl)){let y=new Headers(e.headers);y.set(b,"1");let k={method:e.method,headers:y,cache:"no-store",credentials:e.credentials,redirect:"manual",signal:e.signal,body:await ae(e)};return A(await fetch(e.url,k))}o&&a.set(U,o.token);let i=K(ve,o),S=await ae(e),l={method:e.method,headers:a,cache:"no-store",credentials:"omit",redirect:"manual",signal:e.signal,body:S},m=await fetch(i,l);return A(m)}async function ae(e){if(e.method==="GET"||e.method==="HEAD")return;let t=await e.arrayBuffer();return t.byteLength>0?t:void 0}async function Ue(e){if(!e)return null;try{return(await self.clients.get(e))?.url??null}catch{return null}}async function $e(){try{return(await self.clients.matchAll({type:"window",includeUncontrolled:!0})).map(t=>t.url).filter(t=>!!t)}catch{return[]}}async function Fe(){try{let e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});return e.length===0?null:e.find(r=>C(r.url)!==null)??e[0]}catch{return null}}function Ne(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}async function Le(e,t,r,n){let s={};e.headers.forEach((f,o)=>{o.toLowerCase()!==b&&(s[o]=f)});let a=v(s),c,u=!1;if(e.method!=="GET"&&e.method!=="HEAD"){let f=await e.arrayBuffer();f.byteLength>Ae?u=!0:f.byteLength>0&&(c=Ne(new Uint8Array(f)))}let p=new MessageChannel,{responsePromise:d}=H(p.port1),g={type:J,requestId:Oe(),extensionId:t.extensionId,request:{url:n,method:e.method,headers:a,bodyBase64:c,requestBodyTooLarge:u}};return r.postMessage(g,[p.port2]),d}function Oe(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}})();
|
|
@@ -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-hPxGMX9p.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -17,30 +17,32 @@
|
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/compat-aVSWLlYQ.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/logger-DDBAeTLF.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/context-compaction-_UkD06XB.js">
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/src-
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/src-DoFhVmQT.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/base64-DpPqYZJF.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-DH4NDw4t.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/fetch-body-D2PwksUW.js">
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/secret-topology-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-CfcFb0B0.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/secret-topology-Baeul5rD.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-DdolH4cw.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-CLRo0NLf.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-9ptDFUER.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-DmJSNs0I.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/transform-messages-wECJwtH0.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-CVignIdH.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-Bl8i_M1G.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/electron-overlay-route-CjT6k9Df.js">
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/bridge-launch-params-
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/bridge-launch-params-QY3l_LbM.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
37
|
-
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
37
|
+
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-9kTxza5l.js">
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/runtime-mode-BweZnYql.js">
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-dy3HgBdZ.js">
|
|
40
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-DMI8rzSo.js">
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/telemetry-Dxrv_mDE.js">
|
|
40
42
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-CyJIKXH4.js">
|
|
41
43
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-DuHpK59o.js">
|
|
42
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
43
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-B10nWNyQ.js">
|
|
44
46
|
</head>
|
|
45
47
|
<body>
|
|
46
48
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import"./main-CBUfGcTh.js";import"./tray-leader-DicSB8Dn.js";e(`lick-ws-bridge`);function t(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:i}}function n(e){let t=typeof e.discoveryOrigin==`string`?e.discoveryOrigin:null,n=e.discoveryKind===`ai-catalog`||e.discoveryKind===`llms-txt`?e.discoveryKind:null,r=typeof e.discoveryUrl==`string`&&e.discoveryUrl.length>0?e.discoveryUrl:null;if(!t||!n||!r)return null;let i=typeof e.url==`string`?e.url:void 0;return{type:`discovery`,discoveryOrigin:t,discoveryKind:n,discoveryUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:{origin:t,kind:n,url:r,...i?{pageUrl:i}:{}}}}export{n as mapDiscoveryPayloadToLickEvent,t as mapNavigatePayloadToLickEvent};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-Dq1Od_T7.js","assets/logger-DDBAeTLF.js","assets/lick-ws-bridge-DbbdXQSp.js","assets/tray-leader-DicSB8Dn.js","assets/rolldown-runtime-aKtaBQYM.js","assets/proxied-fetch-D5h5REZy.js","assets/preload-helper-Czpn1I53.js","assets/base64-DpPqYZJF.js","assets/src-CS5gSDhT.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/tray-runtime-config-DquE2Rx9.js","assets/messages-BD4p8GuF.js","assets/db-ysOO0kLr.js","assets/cdp-7evcrxxP.js","assets/navigation-watcher-BoJS9hdc.js","assets/handoff-link-CfgH86mb.js","assets/remote-cdp-transport-DOoXIxy3.js","assets/tray-sync-protocol-CVdiCvfU.js","assets/main-cherry-9qp2ecC4.js","assets/synthetic-cdp-transport-DLIt5SkY.js","assets/wc-shell-CoYCAmK-.js","assets/telemetry-C8rZr13D.js","assets/icons-C5g936Qd.js","assets/dictation-priming-DGpw1lUV.js","assets/timestamp-preference-DgrTvVNx.js","assets/src-6TqoULh8.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-scoop-color-CByZNEJo.js","assets/wc-shell-WkeczD9x.css","assets/wc-follower-B6JesvuH.js","assets/theme-engine-jfuTMXZM.js","assets/dip-D3QakWLH.js","assets/wc-permissions-registry-Blyunq37.js","assets/hid-device-registry-DboUgvzI.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-BQbhk96u.js","assets/usb-device-registry-BOGfZXgp.js","assets/sprinkle-renderer-qv3mGpBG.js","assets/theme-C8b_iQ_9.js","assets/sprinkle-bridge-DziYRsuS.js","assets/shared-BYVJAPbn.js","assets/mime-types-ugOWOUZ9.js","assets/wc-attach-DU0svqb7.js","assets/wc-live-OHBNpb_A.js","assets/account-store-DwSzwLW8.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/secret-topology-CptRwAX3.js","assets/secrets-bridge-client-D6nwnBvr.js","assets/port-bridge-client-CoFZLSYm.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Bklgdp4G.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/tray-follower-status-CyJIKXH4.js","assets/session-freezer-oYKtZTY0.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/leader-session-events-m7I5BMZy.js","assets/page-follower-tray-Cm9cuA-m.js","assets/wc-sprinkles-CFaUt2sb.js","assets/oauth-bootstrap-DUaR-il_.js","assets/provider-settings-D6FC6-Ws.js","assets/clipboard-DuHpK59o.js","assets/tray-join-url-BIvzbiFR.js","assets/legacy-styles-DcRu2WCJ.js","assets/connect-surface-3UvT0SF3.js","assets/wc-extension-grYSDyJN.js","assets/wc-detached-B3WCbbZT.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import"./modulepreload-polyfill-Dezn_h7o.js";import{a as e}from"./account-store-DwSzwLW8.js";import{t}from"./preload-helper-Czpn1I53.js";import{t as n}from"./logger-DDBAeTLF.js";import"./src-CS5gSDhT.js";import"./electron-overlay-route-CjT6k9Df.js";import{c as r,l as i,s as a}from"./proxied-fetch-D5h5REZy.js";import{n as o,t as s}from"./runtime-env-DH4NDw4t.js";import{a as c}from"./providers-Bklgdp4G.js";import{t as l}from"./bridge-launch-params-jegYRGJ6.js";import"./messages-BD4p8GuF.js";import{c as u,l as d,o as f,t as p}from"./tray-runtime-config-DquE2Rx9.js";import{t as m}from"./setup-sudo-DGrMEyR3.js";import{t as h}from"./telemetry-C8rZr13D.js";import"./provider-settings-D6FC6-Ws.js";var g=`slicc-nuke-control`,_=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];function v(e=()=>location.reload()){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(g),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()}}async function y(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function b(e,t,n={}){let r=n.wipe??y,i=n.reload??(()=>location.reload()),a=t instanceof Error?t.message:String(t),o=document.createElement(`div`);o.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let s=document.createElement(`h1`);s.style.color=`var(--s2-negative, #e34850)`,s.textContent=`Failed to start`;let c=document.createElement(`p`);c.style.color=`var(--s2-content-tertiary, #717171)`,c.textContent=a;let l=document.createElement(`div`);l.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let u=document.createElement(`button`);u.type=`button`,u.textContent=`Reset local data & reload`,u.style.cssText=`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let d=document.createElement(`button`);for(d.type=`button`,d.textContent=`Reload`,d.style.cssText=`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,u.addEventListener(`click`,()=>{u.disabled=!0,d.disabled=!0,u.textContent=`Resetting…`,(async()=>{try{await r()}catch{}for(let e of _)try{localStorage.removeItem(e)}catch{}i()})()}),d.addEventListener(`click`,()=>{i()}),l.append(u,d),o.append(s,c,l);e.firstChild;)e.removeChild(e.firstChild);e.appendChild(o)}var x=`slicc:bridge-config`,S=`slicc:extension-delegate-config`;function C(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 w=n(`boot/ext-fetch-delegate`);function T(){let e=globalThis.chrome?.runtime;return e&&typeof e.connect==`function`?e:null}function E(e,t,n){let r=T();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 D(e){typeof navigator>`u`||!navigator.serviceWorker||navigator.serviceWorker.addEventListener(`message`,t=>{if(!C(t.data))return;let n=t.ports?.[0];if(!n){w.warn(`delegated fetch envelope arrived without a response port`);return}E(t.data,n,e)})}function O(){if(o())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 k=null;function A(){return k||(k=v(),k)}n(`stale-asset`);var ee=`slicc-stale-asset-reload`;function te(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(ee),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 ne=`slicc:stale-asset-reloaded-at`,re=6e4,j=`slicc:stale-asset-replay`;function M(e=window.sessionStorage){try{e.setItem(j,`1`)}catch{}}function N(e=window.sessionStorage){try{return e.getItem(j)===`1`?(e.removeItem(j),!0):!1}catch{return!1}}function P(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:re,storageKey:ne}}function ie(e,t,n){return e===null||t-e>=n}function F(e=P()){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(!ie(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var I=null,L=null;function ae(e){I||(L={...P(),...e},I=e=>{F(L)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,I))}var R=null;function z(e){return R||(R=te(e,e=>{e&&M(),F(L??void 0)}),R)}var B=`slicc-cdp-superseded-banner`;function V(e){if(e.getElementById(B))return;let t=e.createElement(`div`);t.id=B,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function H(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:u(e,n===void 0?typeof window<`u`?window.localStorage:null:n)?`follower`:W(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function U(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function W(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function G(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function K(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 q=[100,200,400,800,1600];async function J(e,t,n,r=q,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 oe(e,n,r){let{ExtensionBridgeTransport:i}=await t(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-Dq1Od_T7.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await t(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-DbbdXQSp.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([2,1,3,4,5,6,7,8,9,10,11,12,13])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new e(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await J(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function se(e){let{runtimeMode:n,envBaseUrl:o,window:c,log:u}=e,h=n===`electron-overlay`;u.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:n});let{BrowserAPI:g}=await t(async()=>{let{BrowserAPI:e}=await import(`./cdp-7evcrxxP.js`);return{BrowserAPI:e}},__vite__mapDeps([14,1,15,16,8,17,18,4]));await m({log:u});let _,v,y,b=null,x=null,S=null,C=null,w,T=n===`cherry`?null:K(c.location.search),E=!!T&&s(),D=n===`cherry`||E?null:l(c.location.search);D?.apiBaseUrl&&(b=D.apiBaseUrl,i(D.apiBaseUrl),x=D.token,a(D.token)),D?.lickWsUrl&&(S=D.lickWsUrl);let O=await f(),k=U(n,O!==null)?p:null;if(await d({locationHref:c.location.href,storage:c.localStorage,envBaseUrl:o,defaultWorkerBaseUrl:k,runtimeConfigFetcher:async()=>O}),n===`cherry`){let{setupCherryFollower:e}=await t(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-9qp2ecC4.js`);return{setupCherryFollower:e}},__vite__mapDeps([19,1,14,15,16,8,17,18,4,20])),n=await e();_=n.browser,v=n.joinUrl,y=n.transport}else if(T&&s()){u.info(`Routing CDP through the extension bridge (leader tab)`);let e=await oe(g,T.extensionId,u);_=e.browser,w=e.attachLickForwardingClient,C=T.extensionId,r(T.extensionId)}else{_=new g,D&&u.info(`Routing CDP through local standalone bridge`,{url:D.url,role:D.role??`(unset)`});let e=D?{url:D.url,protocols:D.subprotocol}:void 0;D?.role===`follower`?(u.info(`Skipping CDP connect for follower overlay tab`),_.primeConnectOptions(e)):(await J(_,e,u),_.setCdpSupersededHandler(()=>V(c.document)))}let A=_.getTransport();return globalThis.__slicc_browser=_,{browser:_,realCdpTransport:A,cherryJoinUrl:v,cherryTransport:y,instanceId:G(),isElectronOverlay:h,localApiBaseUrl:b,bridgeToken:x,localLickWsUrl:S,extensionDelegateId:C,attachLickForwardingClient:w}}var Y=n(`boot/sw-registration`);async function ce(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 le())return`reload-pending`;if(!(`serviceWorker`in navigator)||n)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),Y.info(`Preview SW registered`),!o())try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),Y.info(`LLM-proxy SW registered`)}catch(e){Y.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`),Y.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`),e&&(X(e),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{X(e)})),t&&(Z(t),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Z(t)}))}catch(e){Y.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}function X(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:x,apiBaseUrl:e.apiBaseUrl,token:e.token};try{t.postMessage(n)}catch(e){Y.warn(`LLM-proxy SW bridge-config postMessage failed`,e)}}function Z(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:S,extensionId:e.extensionId};try{t.postMessage(n)}catch(e){Y.warn(`LLM-proxy SW extension-delegate postMessage failed`,e)}}async function le(){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`),Y.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){Y.error(`connect-mode SW cleanup failed`,e)}return!1}var Q=n(`main`);function $(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}async function ue(){ae();let n=document.getElementById(`app`);if(!n)throw Error(`#app element not found`);let r=o(),i=H(window.location.href,r);if($(window.location.href)){let{mountWcUiPreview:e}=await t(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-CoYCAmK-.js`).then(e=>e.a);return{mountWcUiPreview:e}},__vite__mapDeps([21,4,6,8,22,9,23,24,25,26,27,28,29,30]));e(n);return}O(),A(),i!==`connect`&&h().catch(()=>{});let a=l(window.location.search),u=i===`cherry`?null:K(window.location.search),d=!!u&&s();if(await ce(a?{apiBaseUrl:a.apiBaseUrl,token:a.token}:null,d&&u?{extensionId:u.extensionId}:null)===`reload-pending`)return;if(!r&&(i===`follower`||i===`cherry`)){let{mountWcUiFollower:e}=await t(async()=>{let{mountWcUiFollower:e}=await import(`./wc-follower-B6JesvuH.js`);return{mountWcUiFollower:e}},__vite__mapDeps([31,6,1,18,4,8,11,5,7,9,10,12,32,33,34,35,36,37,38,39,40,41,42,43,44,21,22,23,24,25,26,27,28,29,30,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,3,13,63,64,65,66,67,17,68]));return e(n,Q,i)}await c(),e();let{bootstrapOAuthReplicas:f}=await t(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-DUaR-il_.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([69,46,4,6,47,48,49,50,51,52,53,1,8,5,7,9,10,54,55,56,57,58,59,60,61,70,11,12,62,71,22,72]));if(await Promise.race([f().catch(e=>{Q.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),i===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:e}=await t(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadLegacyStyles:e}},__vite__mapDeps([73,6]));await e();let{mountConnectSurface:r}=await t(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-3UvT0SF3.js`);return{mountConnectSurface:e}},__vite__mapDeps([74,46,4,6,47,48,49,50,51,52,53,1,8,5,7,9,10,54,55,56,57,58,59,60,61,70,11,12,62,71,22,72]));await r(n);return}if(r){let{mountWcUiExtension:e}=await t(async()=>{let{mountWcUiExtension:e}=await import(`./wc-extension-grYSDyJN.js`);return{mountWcUiExtension:e}},__vite__mapDeps([75,6,76,12,45,46,4,47,48,49,50,51,52,53,1,8,5,7,9,10,54,55,56,57,58,59,60,61,11,62,22,3,13,42,43,24,33,34,35,36,37,38,39,40,32,41,63,64,65,23,21,25,26,27,28,29,30,66]));return e(n,Q,i===`extension-detached`)}d&&u&&D(u.extensionId);let{mountWcUiLive:p}=await t(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-OHBNpb_A.js`);return{mountWcUiLive:e}},__vite__mapDeps([45,46,4,6,47,48,49,50,51,52,53,1,8,5,7,9,10,54,55,56,57,58,59,60,61,11,12,62,22,3,13,42,43,24,33,34,35,36,37,38,39,40,32,41,63,64,65,23,21,25,26,27,28,29,30,66]));return p(n,Q,i)}ue().catch(e=>{Q.error(`Fatal error`,e);let t=document.getElementById(`app`);t&&b(t,e)});export{z as i,N as n,F as r,se as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{BrowserAPI as t}from"./cdp-7evcrxxP.js";import{t as n}from"./synthetic-cdp-transport-DLIt5SkY.js";var r=new Set([`handshake.hello`,`handshake.welcome`,`cdp.request`,`cdp.response`,`cdp.event`,`permission.request`,`permission.response`,`host.event`,`slicc.event`]);function i(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.cherry===1&&typeof t.channelId==`string`&&typeof t.kind==`string`&&r.has(t.kind)}function a(e,t){return!(!t.allowOrigins.includes(e.origin)||t.expectedSource!==null&&e.source!==t.expectedSource||!i(e.data)||t.channelId!==null&&e.data.channelId!==t.channelId)}function o(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.cherry==`number`&&t.cherry!==1&&typeof t.channelId==`string`&&typeof t.kind==`string`}var s=e(`cherry-transport`),c=3e4,l=class extends n{opts;channelId=null;nextId=1;pending=new Map;connectResolve=null;connectReject=null;connectTimer=null;_joinUrl=null;_features={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,newSprinkle:!0,monitor:!0};_theme=null;_effortLevel=null;boundHandler=e=>this.handleMessage(e);onHostEvent=null;constructor(e){super({targetUrl:typeof location<`u`?location.href:`about:blank`,targetOrigin:e.targetOrigin,title:`Cherry Host Page`,ids:{target:`cherry-target`,session:`cherry-session`,frame:`cherry-frame`,loader:`cherry-loader`}}),this.opts=e}getCurrentUrl(){return typeof location<`u`?location.href:super.getCurrentUrl()}get joinUrl(){return this._joinUrl}get features(){return this._features}get theme(){return this._theme}get effortLevel(){return this._effortLevel}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);this._state=`connecting`,this.channelId=`cherry-${crypto.randomUUID()}`,typeof window<`u`&&window.addEventListener(`message`,this.boundHandler);let t=e?.timeout??c;return new Promise((e,n)=>{this.connectResolve=e,this.connectReject=n,this.connectTimer=setTimeout(()=>{this.connectTimer=null,typeof window<`u`&&window.removeEventListener(`message`,this.boundHandler),this._state=`disconnected`,this.channelId=null,this.connectResolve=null,this.connectReject=null,n(Error(`Cherry handshake timed out after ${t}ms`))},t),this.post({cherry:1,channelId:this.channelId,kind:`handshake.hello`,capabilities:this.opts.capabilities??{navigate:!0,screenshot:!0,openUrl:!0}})})}failPendingConnect(e){if(this.connectReject===null)return;this.connectTimer!==null&&(clearTimeout(this.connectTimer),this.connectTimer=null),typeof window<`u`&&window.removeEventListener(`message`,this.boundHandler),this._state=`disconnected`,this.channelId=null;let t=this.connectReject;this.connectResolve=null,this.connectReject=null,t(e)}disconnect(){this.connectTimer!==null&&(clearTimeout(this.connectTimer),this.connectTimer=null),typeof window<`u`&&window.removeEventListener(`message`,this.boundHandler);for(let[,e]of this.pending)e.reject(Error(`Cherry transport disconnected`));this.pending.clear(),this._state=`disconnected`,this.channelId=null}async forward(e,t,n,r=c){let i=this.nextId++;return new Promise((n,a)=>{let o=setTimeout(()=>{this.pending.delete(i),a(Error(`Cherry CDP timed out after ${r}ms: ${e}`))},r);this.pending.set(i,{resolve:e=>{clearTimeout(o),n(e)},reject:e=>{clearTimeout(o),a(e)}}),this.post({cherry:1,channelId:this.channelId,kind:`cdp.request`,id:i,method:e,params:t})})}testReceive(e){this.handleMessage(e)}emitSliccEventToHost(e,t){if(!this.channelId){s.warn(`Dropping slicc.event before handshake (no channelId yet)`,{name:e});return}this.post({cherry:1,channelId:this.channelId,kind:`slicc.event`,name:e,detail:t})}post(e){this.opts.counterpart.postMessage(e,this.opts.targetOrigin)}handleMessage(e){if(!a(e,{allowOrigins:this.opts.allowOrigins,expectedSource:this.opts.counterpart,channelId:this.channelId})){o(e.data)?(s.warn(`Cherry protocol version mismatch — update the older side`,{peerVersion:e.data.cherry,ourVersion:1,origin:e.origin}),this.opts.allowOrigins.includes(e.origin)&&e.source===this.opts.counterpart&&this.failPendingConnect(Error(`Cherry protocol version mismatch (peer v${e.data.cherry}, ours v1) — update the older side`))):i(e.data)&&s.warn(`Rejected a cherry envelope (origin/source/channel mismatch)`,{origin:e.origin,allowOrigins:this.opts.allowOrigins});return}let t=e.data;switch(t.kind){case`handshake.welcome`:this.connectTimer!==null&&(clearTimeout(this.connectTimer),this.connectTimer=null),this._state=`connected`,this._joinUrl=t.joinUrl??null,this._theme=t.theme??null,this._effortLevel=t.effortLevel??null,this._features=t.features??{terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,newSprinkle:!0,monitor:!0},s.info(`Cherry handshake complete`,{channelId:this.channelId}),this.connectResolve?.(),this.connectResolve=null,this.connectReject=null;return;case`cdp.response`:{let e=this.pending.get(t.id);if(!e)return;this.pending.delete(t.id),t.error?e.reject(Error(`Cherry CDP error: ${t.error.message} (${t.error.code})`)):e.resolve(t.result??{});return}case`cdp.event`:this.emit(t.method,{...t.params??{},sessionId:t.sessionId??this.syntheticIds.session});return;case`host.event`:this.onHostEvent?.(t.name,t.detail);return;default:return}}},u=e(`cherry-boot`);function d(){let e=location.ancestorOrigins;if(e&&e.length>0){let t=e[0];if(t&&t!==`null`)return t}if(document.referrer)try{return new URL(document.referrer).origin}catch{}return location.origin}async function f(){let e=d(),n=[e],r=e,i=new l({counterpart:window.parent,allowOrigins:n,targetOrigin:r});await i.connect(),u.info(`Cherry transport connected`);let a=i.joinUrl;if(!a)throw Error(`cherry boot: no joinUrl from handshake`);return{transport:i,browser:new t(i),joinUrl:a}}export{f as setupCherryFollower};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-BHegEzYY.js","assets/rolldown-runtime-aKtaBQYM.js","assets/account-store-DwSzwLW8.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-D5h5REZy.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CptRwAX3.js","assets/secrets-bridge-client-D6nwnBvr.js","assets/port-bridge-client-CoFZLSYm.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Bklgdp4G.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{F as e,m as t}from"./account-store-DwSzwLW8.js";import{t as n}from"./preload-helper-Czpn1I53.js";import{t as r}from"./logger-DDBAeTLF.js";import"./provider-settings-D6FC6-Ws.js";import{t as i}from"./llm-session-id-bZQs6gBN.js";import{n as a,r as o}from"./session-freezer-oYKtZTY0.js";import{SessionStore as s}from"./session-store-DAM8GRJ0.js";var c=r(`new-session`),l=`ui-new-session`,u=2e4,d=250;async function f(e,t,n,r){for(let i of n){let n=`${t}/${i.name}`;r.has(n)||i.type===`directory`&&(await f(e,n,await e.readDir(n),r),[...r].some(e=>e.startsWith(`${n}/`)))||await e.rm(n)}}async function p(e){let t=new Set((await e.listMountPoints()).map(({path:e})=>e).filter(e=>e===`/tmp`||e.startsWith(`/tmp/`)));if(t.has(`/tmp`))return;let n;try{n=await e.readDir(`/tmp`)}catch(t){if(t?.code!==`ENOENT`)throw t;await e.mkdir(`/tmp`,{recursive:!0});return}await f(e,`/tmp`,n,t),await e.mkdir(`/tmp`,{recursive:!0})}async function m(r){let d=r.enrichmentRaceMs??u,f=t()??void 0,p;try{p=e()}catch(e){c.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let m=p?.provider===`adobe`?{"X-Session-Id":i(l)}:void 0,g=new s;try{await g.init()}catch(e){return c.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}let _=await o({sessionStore:g,vfs:r.vfs,mode:`quick`});if(!_)return null;if(!f||!p)return c.info(`Frozen without enrichment (no LLM credentials) — left pending`,{filename:_.filename}),_;let v=p,y=a(r.vfs,_,{model:v,apiKey:f,headers:m,pickIcon:e=>n(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BHegEzYY.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])).then(({pickLucideIcon:t})=>t(e))}).catch(e=>(c.warn(`Single-click enrichment threw (entry stays pending)`,{filename:_.filename,error:e instanceof Error?e.message:String(e)}),null)),b=await h(y,d,r.onProgress);return b.kind===`llm`?b.updated?{...b.updated,archive:_.archive}:_:(y.then(e=>{c.info(`Background enrichment resolved after race window`,{filename:_.filename,enriched:e?.filename??null}),r.onBackgroundEnriched?.(e)}),_)}async function h(e,t,n){let r=Date.now(),i,a;n?.(0),n&&(i=setInterval(()=>{n(Math.min(1,(Date.now()-r)/t))},d));let o=new Promise(e=>{a=setTimeout(()=>e({kind:`timer`}),t)}),s=e.then(e=>({kind:`llm`,updated:e}));try{return await Promise.race([s,o])}finally{i&&clearInterval(i),a&&clearTimeout(a),n?.(null)}}async function g(e){let t=new s;try{await t.init()}catch(e){return c.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return o({sessionStore:t,vfs:e.vfs,mode:`quick`})}export{p as resetNewSessionTmp,m as runNewSessionFreeze,g as runNewSessionFreezeQuick};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/theme-engine-jfuTMXZM.js","assets/rolldown-runtime-aKtaBQYM.js","assets/logger-DDBAeTLF.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{n as t}from"./attachments-CByeG2Ru.js";import{t as n}from"./logger-DDBAeTLF.js";import{n as r,t as i}from"./base64-DpPqYZJF.js";import"./src-CS5gSDhT.js";import{a,i as o,r as s,t as c,u as l}from"./tray-sync-protocol-CVdiCvfU.js";import{i as u,n as d,r as f}from"./tray-follower-status-CyJIKXH4.js";import{t as p}from"./remote-cdp-transport-DOoXIxy3.js";import{n as m}from"./shared-BYVJAPbn.js";import{t as h}from"./sprinkle-renderer-qv3mGpBG.js";var g=class{logger;failureMessage;recoveryMessage;throttleMs;sustainedRelogMs;recoveryDebounceTicks;now;lastErrorLogAt=-1/0;inFailingState=!1;consecutiveSuccesses=0;constructor(e,t){if(!t.failureMessage.trim())throw RangeError(`ThrottledErrorTracker: failureMessage must be non-empty`);if(!t.recoveryMessage.trim())throw RangeError(`ThrottledErrorTracker: recoveryMessage must be non-empty`);let n=t.throttleMs??6e4;if(!Number.isFinite(n)||n<0)throw RangeError(`ThrottledErrorTracker: throttleMs must be a non-negative finite number, got ${n}`);let r=t.sustainedRelogMs??3e5;if(!Number.isFinite(r)||r<0)throw RangeError(`ThrottledErrorTracker: sustainedRelogMs must be a non-negative finite number, got ${r}`);let i=t.recoveryDebounceTicks??5;if(!Number.isInteger(i)||i<1)throw RangeError(`ThrottledErrorTracker: recoveryDebounceTicks must be a positive integer, got ${i}`);this.logger=e,this.failureMessage=t.failureMessage,this.recoveryMessage=t.recoveryMessage,this.throttleMs=n,this.sustainedRelogMs=r,this.recoveryDebounceTicks=i,this.now=t.now??(()=>performance.now())}reportFailure(e){let t=this.inFailingState;this.inFailingState=!0,this.consecutiveSuccesses=0;let n=this.now(),r=n-this.lastErrorLogAt;if(r>(t?this.sustainedRelogMs:this.throttleMs)){let i=t,a=i?`${this.failureMessage} (sustained)`:this.failureMessage;try{try{this.logger.error(a,i?{error:e instanceof Error?e.message:String(e),elapsedMs:Math.round(r)}:{error:e instanceof Error?e.message:String(e)})}catch(t){try{console.error(`[throttled-error-tracker] logger.error threw`,t,{originalMessage:a,originalError:e instanceof Error?e.message:String(e)})}catch{}}}finally{this.lastErrorLogAt=n}}}reportSuccess(){if(this.inFailingState&&(this.consecutiveSuccesses++,!(this.consecutiveSuccesses<this.recoveryDebounceTicks)))try{try{this.logger.error(this.recoveryMessage,{kind:`recovery`})}catch(e){try{console.error(`[throttled-error-tracker] logger.error (recovery) threw`,e,{originalMessage:this.recoveryMessage})}catch{}}}finally{this.inFailingState=!1,this.consecutiveSuccesses=0,this.lastErrorLogAt=-1/0}}},_=n(`data-channel-keepalive`),v=class{sendPing;onDead;intervalMs;maxMissed;timer=null;missedPongs=0;awaitingPong=!1;stopped=!1;constructor(e){this.sendPing=e.sendPing,this.onDead=e.onDead,this.intervalMs=e.intervalMs??1e4,this.maxMissed=e.maxMissed??3}start(){this.timer||this.stopped||(this.timer=setInterval(()=>this.tick(),this.intervalMs))}stop(){this.stopped=!0,this.timer&&=(clearInterval(this.timer),null)}receivePong(){this.awaitingPong=!1,this.missedPongs=0}receivePing(){this.missedPongs=0,this.awaitingPong=!1}get missed(){return this.missedPongs}tick(){if(!this.stopped){if(this.awaitingPong&&(this.missedPongs++,_.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){_.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}},y=64*1024;async function b(e,t){try{switch(t.op){case`readFile`:return await x(e,t.path,t.encoding);case`writeFile`:return[await ee(e,t.path,t.content,t.encoding)];case`stat`:return[await te(e,t.path)];case`readDir`:return[await ne(e,t.path)];case`mkdir`:return[await S(e,t.path,t.recursive)];case`rm`:return[await C(e,t.path,t.recursive)];case`exists`:return[await re(e,t.path)];case`walk`:return[await w(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[ie(e)]}}async function x(e,t,n){return(n??`utf-8`)===`utf-8`?T(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):T(r(await e.readFile(t,{encoding:`binary`})),`base64`)}async function ee(e,t,n,r){if(r===`base64`){let r=i(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function te(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function ne(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function S(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function C(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function re(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function w(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function T(e,t){if(e.length<=y)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/y),r=[];for(let i=0;i<n;i++){let a=i*y,o=e.slice(a,a+y);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function ie(e){return e instanceof Error&&`code`in e?{ok:!1,error:e.message,code:e.code}:{ok:!1,error:e instanceof Error?e.message:String(e)}}var E=n(`tray-follower-sync`),D=15e3,O=class{options;sync;eventListeners=new Set;unsubscribe;keepalive;latestSnapshot=null;sentMessageIds=new Set;targetEntries=[];remoteTransports=new Map;cdpChunkBuffers=new Map;snapshotChunkBuffer=null;remoteCDPSessions=new Set;cdpEventCleanups=[];tabOpenResolvers=new Map;fsResolvers=new Map;leaderProtocolVersion;legacyLeaderLogged=!1;latestSprinkles=[];sprinkleContentCache=new Map;pendingSprinkleFetches=new Map;inflightSprinkleByName=new Map;sprinkleContentWaiters=new Map;cacheEpoch=0;fetchEpoch=new Map;constructor(e,t={}){this.options=t;let n=t.sprinkleFetchTimeoutMs;if(n!==void 0&&(!Number.isFinite(n)||n<0))throw RangeError(`sprinkleFetchTimeoutMs must be a non-negative finite number (0 disables the timer); got ${n}`);this.sync=c(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.sync.send({type:`hello`,protocolVersion:1,...this.options.selfRuntimeId?{runtime:this.options.selfRuntimeId}:{}}),this.keepalive=new v({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{E.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{E.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{E.warn(`Data channel error`),this.handleDisconnect(`Data channel error`)})}sendMessage(e,n,r){let i=n??`follower-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.sentMessageIds.add(i);let a=r?.length?t(r):r;this.sync.send({type:`user_message`,text:e,messageId:i,attachments:a}),E.info(`Sent user message to leader`,{messageId:i})}onEvent(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}stop(){this.sync.send({type:`abort`}),E.info(`Sent abort to leader`)}requestSnapshot(){this.sync.send({type:`request_snapshot`})}requestNewSession(e){this.sync.send({type:`new_session`,action:e}),E.info(`Sent new_session to leader`,{action:e})}selectScoop(e){this.sync.send({type:`scoops.select`,scoopJid:e})}getLatestSnapshot(){return this.latestSnapshot}close(){this.disconnected||(this.disconnected=!0,this.keepalive.stop(),this.unsubscribe(),this.sync.close(),this.eventListeners.clear(),this.cleanupCDPEventForwarding(),this.rejectPendingRequests(`Follower sync closed`),E.info(`Follower sync closed`))}rejectPendingRequests(e){this.rejectPendingSprinkleFetches(e);let t=Error(e);for(let{reject:e}of this.tabOpenResolvers.values())e(t);this.tabOpenResolvers.clear();for(let{reject:e}of this.fsResolvers.values())e(t);this.fsResolvers.clear(),this.cdpChunkBuffers.clear();for(let e of this.remoteTransports.values())e.disconnect();this.remoteTransports.clear()}advertiseTargets(e,t){this.sync.send({type:`targets.advertise`,targets:e,runtimeId:t})}getTargets(){return this.targetEntries}sendCherryHostEvent(e,t){this.sync.send({type:`cherry.host_event`,targetId:this.options.selfRuntimeId??``,name:e,detail:t})}getSprinkles(){return this.latestSprinkles}refreshSprinkles(){this.sync.send({type:`sprinkles.refresh`})}fetchSprinkleContent(e){let t=this.sprinkleContentCache.get(e);if(t!==void 0)return Promise.resolve(t);let n=this.options.sprinkleFetchTimeoutMs??D;return new Promise((t,r)=>{let i=Symbol(`sprinkle-waiter`),a,o=e=>{a!==void 0&&clearTimeout(a),t(e)},s=e=>{a!==void 0&&clearTimeout(a),r(e)},c=this.sprinkleContentWaiters.get(e)??[];if(c.push({id:i,resolve:o,reject:s}),this.sprinkleContentWaiters.set(e,c),n>0&&(a=setTimeout(()=>{let t=this.sprinkleContentWaiters.get(e);if(t){let r=t.findIndex(e=>e.id===i);r>=0&&t.splice(r,1),t.length===0&&(this.sprinkleContentWaiters.delete(e),this.cancelSprinkleFetch(e,`Sprinkle fetch for "${e}" timed out after ${n}ms`))}r(Error(`Sprinkle fetch for "${e}" timed out after ${n}ms`))},n)),this.inflightSprinkleByName.has(e))return;let l=`sprinkle-fetch-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.inflightSprinkleByName.set(e,l),this.pendingSprinkleFetches.set(l,{sprinkleName:e,chunks:new Map,totalChunks:1}),this.fetchEpoch.set(l,this.cacheEpoch),this.sync.send({type:`sprinkle.fetch`,requestId:l,sprinkleName:e})})}sendSprinkleLick(e,t,n){this.sync.send({type:`sprinkle.lick`,sprinkleName:e,body:t,targetScoop:n})||E.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||E.warn(`forwardLick dropped: tray channel closed`,{type:e.type}),t}clearSprinkleCache(e){e===void 0?this.sprinkleContentCache.clear():this.sprinkleContentCache.delete(e)}cancelSprinkleFetch(e,t=`fetch cancelled`){let n=this.sprinkleContentWaiters.get(e)??[];this.sprinkleContentWaiters.delete(e);let r=this.inflightSprinkleByName.get(e);if(r!==void 0&&(this.inflightSprinkleByName.delete(e),this.pendingSprinkleFetches.delete(r),this.fetchEpoch.delete(r)),n.length===0)return;let i=Error(t);for(let e of n)e.reject(i)}disconnected=!1;handleDisconnect(e){this.disconnected||(this.disconnected=!0,u({...d(),state:`error`,error:e}),this.emitEvent({type:`error`,error:`Connection to leader lost: ${e}`}),this.keepalive.stop(),this.cleanupCDPEventForwarding(),this.unsubscribe(),this.sync.close(),this.rejectPendingRequests(`Follower sync disconnected: ${e}`),this.options.onDisconnect?.(e))}handleLeaderHello(e){this.leaderProtocolVersion=e,e>1?E.warn(`Leader speaks a newer tray sync protocol — update this build`,{leaderVersion:e,ourVersion:1}):E.info(`Leader hello`,{protocolVersion:e})}noteLegacyLeader(e){e===`hello`||this.leaderProtocolVersion!==void 0||this.legacyLeaderLogged||(this.legacyLeaderLogged=!0,E.info(`Leader sent no hello — legacy peer (pre-versioning build)`))}handleLeaderMessage(e){if(this.noteLegacyLeader(e.type),e.type===`theme.apply`){this.applyLeaderTheme(e.themeJson);return}switch(e.type){case`snapshot`:E.info(`Snapshot received from leader`,{messageCount:e.messages.length,scoopJid:e.scoopJid}),this.snapshotChunkBuffer=null,this.latestSnapshot={messages:e.messages,scoopJid:e.scoopJid},this.options.onSnapshot?.(e.messages,e.scoopJid);break;case`snapshot_chunk`:{let t=o(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(E.info(`Chunked snapshot reassembled from leader`,{messageCount:t.result.messages.length,scoopJid:t.result.scoopJid}),this.latestSnapshot=t.result,this.options.onSnapshot?.(t.result.messages,t.result.scoopJid));break}case`agent_event`:this.emitEvent(e.event);break;case`user_message_echo`:this.handleUserMessageEcho(e);break;case`status`:this.options.onStatus?.(e.scoopStatus);break;case`error`:E.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:E.info(`Target registry received from leader`,{targetCount:e.targets.length}),this.targetEntries=e.targets,this.options.onTargetsUpdated?.(this.targetEntries);break;case`cdp.request`:{let{requestId:t,localTargetId:n,method:r,params:i,sessionId:a}=e;this.executeLocalCDP(t,n,r,i,a);break}case`cdp.response`:this.routeCDPResponse(e);break;case`cdp.event`:for(let t of this.remoteTransports.values())t.handleEvent(e.method,e.params);break;case`tab.open`:case`preview.open`:this.executeLocalTabOpen(e.requestId,e.url);break;case`tab.opened`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.resolve(e.targetId));break}case`tab.open.error`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.reject(Error(e.error)));break}case`fs.request`:this.executeLocalFs(e.requestId,e.request);break;case`fs.response`:this.routeFsResponse(e.requestId,e.response);break;case`scoops.list`:this.handleScoopsList(e.scoops,e.activeScoopJid);break;case`sprinkles.list`:this.handleSprinklesList(e.sprinkles);break;case`sprinkle.content`:this.handleSprinkleContent(e);break;case`sprinkle.update`:this.options.onSprinkleUpdate?.(e.sprinkleName,e.data);break;case`sprinkle.reloaded`:this.handleSprinkleReloaded(e.sprinkleName);break;case`cherry.slicc_event`:this.options.onCherrySliccEvent?.(e.name,e.detail);break;case`ping`:this.keepalive.receivePing(),this.sync.send({type:`pong`});break;case`pong`:this.keepalive.receivePong(),f(Date.now());break;case`hello`:this.handleLeaderHello(e.protocolVersion);break;case`exec.request`:case`exec.chunk`:case`exec.response`:case`exec.signal`:this.handleExecMessage(e);break;default:{let t=l(e);E.warn(`Unknown leader message type — skewed leader?`,{type:t.type});break}}}handleExecMessage(e){e.type===`exec.request`&&this.sync.send({type:`exec.response`,requestId:e.requestId,exitCode:127,error:`exec is not supported on this follower`})}handleSprinklesList(e){E.info(`Sprinkles list received from leader`,{sprinkleCount:e.length}),this.sprinkleContentCache.clear(),this.cacheEpoch++,this.latestSprinkles=e,this.options.onSprinklesList?.(e)}handleUserMessageEcho(e){if(this.sentMessageIds.has(e.messageId)){this.sentMessageIds.delete(e.messageId),E.debug(`Skipping own message echo`,{messageId:e.messageId});return}E.info(`User message echo received`,{messageId:e.messageId,scoopJid:e.scoopJid}),this.options.onUserMessage?.(e.text,e.messageId,e.scoopJid,e.attachments)}handleScoopsList(e,t){E.info(`Scoops list received from leader`,{scoopCount:e.length}),this.options.onScoopsList?.(e,t)}handleSprinkleReloaded(e){this.sprinkleContentCache.delete(e),this.options.onSprinkleReloaded?.(e)}handleSprinkleContent(e){let{requestId:t,sprinkleName:n,content:r,chunkIndex:i,totalChunks:a,error:o}=e;if(o){E.warn(`sprinkle.content error from leader`,{sprinkleName:n,error:o}),this.pendingSprinkleFetches.delete(t),this.inflightSprinkleByName.delete(n),this.fetchEpoch.delete(t);let e=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let t of e)t.reject(Error(o));return}if(!this.pendingSprinkleFetches.has(t)){E.debug(`Dropping sprinkle.content for unknown requestId`,{sprinkleName:n,requestId:t});return}let s=null;if(i!==void 0&&a!==void 0){if(i<0||i>=a){E.warn(`Dropping sprinkle.content with out-of-range chunkIndex`,{sprinkleName:n,chunkIndex:i,totalChunks:a});return}let e=this.pendingSprinkleFetches.get(t);if(e.totalChunks=a,e.chunks.has(i)?E.warn(`Dropping duplicate sprinkle.content chunk`,{sprinkleName:n,chunkIndex:i}):e.chunks.set(i,r),e.chunks.size>=a){let r=[];for(let t=0;t<a;t++){let i=e.chunks.get(t);if(i===void 0){E.warn(`Chunked sprinkle.content missing chunk after assembly`,{sprinkleName:n,missingIndex:t});return}r.push(i)}s=r.join(``),this.pendingSprinkleFetches.delete(t)}}else s=r,this.pendingSprinkleFetches.delete(t);if(s===null)return;let c=this.fetchEpoch.get(t);this.fetchEpoch.delete(t),c===this.cacheEpoch&&this.sprinkleContentCache.set(n,s),this.inflightSprinkleByName.delete(n);let l=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let e of l)e.resolve(s)}rejectPendingSprinkleFetches(e){let t=Error(e);for(let[,e]of this.sprinkleContentWaiters)for(let n of e)n.reject(t);this.sprinkleContentWaiters.clear(),this.pendingSprinkleFetches.clear(),this.inflightSprinkleByName.clear(),this.fetchEpoch.clear()}applyLeaderTheme(t){e(async()=>{let{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}},__vite__mapDeps([0,1,2])).then(({importTheme:e,saveCustomTheme:n,setActiveTheme:r,clearActiveTheme:i,applyThemeOverrides:a})=>{if(!t)i();else{let i=e(t);n(i),r(i.id)}a()}).catch(e=>E.error(`Failed to apply leader theme`,{err:e}))}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(t){E.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new p({sendCDPRequest:(n,r,i,a)=>{this.sync.send({type:`cdp.request`,requestId:n,targetRuntimeId:e,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}openRemoteTab(e,t){let n=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.tabOpenResolvers.set(n,{resolve:r,reject:i}),this.sync.send({type:`tab.open`,requestId:n,targetRuntimeId:e,url:t})})}async executeLocalTabOpen(e,t){let n=this.options.browserTransport;if(!n){this.sync.send({type:`tab.open.error`,requestId:e,error:`Follower has no browser transport`});return}try{let r=(await n.send(`Target.createTarget`,{url:t,background:!0})).targetId;if(typeof r!=`string`||r.length===0){this.sync.send({type:`tab.open.error`,requestId:e,error:`Target.createTarget did not return a usable targetId`});return}this.sync.send({type:`tab.opened`,requestId:e,targetId:r}),this.options.onTargetsChanged?.()}catch(t){this.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}async executeLocalCDP(e,t,n,r,i){let o=this.options.browserTransport;if(!o){this.sync.send({type:`cdp.response`,requestId:e,error:`Follower has no browser transport`});return}try{let t=await o.send(n,r,i);if(n===`Target.attachToTarget`&&t.sessionId){let e=t.sessionId;this.remoteCDPSessions.add(e),this.setupCDPEventForwarding(o,e),E.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),E.debug(`Removed remote CDP session on detach`,{sessionId:i})),a(this.sync,e,t)}catch(t){this.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}setupCDPEventForwarding(e,t){for(let n of[`Page.frameNavigated`,`Page.loadEventFired`,`Page.domContentEventFired`,`Network.responseReceived`,`Network.loadingFinished`,`Network.requestWillBeSent`]){let r=e=>{if(e.sessionId!==t||!this.remoteCDPSessions.has(t))return;let{sessionId:r,...i}=e;this.sync.send({type:`cdp.event`,method:n,params:i,sessionId:t})};e.on(n,r),this.cdpEventCleanups.push(()=>e.off(n,r))}}cleanupCDPEventForwarding(){for(let e of this.cdpEventCleanups)e();this.cdpEventCleanups.length=0,this.remoteCDPSessions.clear()}routeCDPResponse(e){let t=s(this.cdpChunkBuffers,e);if(t)for(let n of this.remoteTransports.values())n.handleResponse(e.requestId,t.result,t.error)}async executeLocalFs(e,t){let n=this.options.vfs;if(!n){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Follower has no VFS`}});return}let r;try{r=await b(n,t)}catch(t){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:t instanceof Error?t.message:String(t)}});return}for(let t of r)this.sync.send({type:`fs.response`,requestId:e,response:t})}routeFsResponse(e,t){let n=this.fsResolvers.get(e);if(!n)return;n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}sendFsRequest(e,t){let n=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.fsResolvers.set(n,{resolve:r,reject:i,responses:[]}),this.sync.send({type:`fs.request`,requestId:n,targetRuntimeId:e,request:t})})}},k=n(`tray-follower`);function A(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function ae(e){let t=A(e.joinUrl),n=await I(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return k.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),oe(n)}function oe(e){let t={trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,action:e.result.action,code:e.result.code,iceServers:e.iceServers};return e.result.action===`wait`?{...t,retryAfterMs:e.result.retryAfterMs}:e.result.action===`signal`?{...t,bootstrap:e.result.bootstrap}:e.result.action===`fail`?{...t,error:e.result.error,...e.result.code===`TRAY_SUPERSEDED`?{supersededByJoinUrl:e.result.joinUrl}:{}}:t}async function j(e){return F(await L(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function M(e){return F(await L(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function N(e){return F(await L(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function P(e){return F(await L(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function F(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function I(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!R(n)){let n=t?t.slice(0,200):`(empty)`;throw k.warn(`Tray follower attach returned an invalid response`,{status:e.status,body:n}),Error(`Tray follower attach returned an invalid response (${e.status}): ${n}`)}return n}async function L(e,t){let n=A(e.joinUrl),r=await(e.fetchImpl??fetch)(n,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),i=await r.json().catch(()=>null);if(!z(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function R(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.trayId!=`string`||typeof t.controllerId!=`string`||t.role!==`follower`||typeof t.participantCount!=`number`)return!1;let n=t.result;if(!n||typeof n!=`object`)return!1;let r=n;return r.action===`wait`?(r.code===`LEADER_NOT_ELECTED`||r.code===`LEADER_NOT_CONNECTED`)&&typeof r.retryAfterMs==`number`:r.action===`signal`?r.code===`LEADER_CONNECTED`&&B(r.bootstrap):r.action===`fail`?r.code===`TRAY_SUPERSEDED`?typeof r.error==`string`&&typeof r.joinUrl==`string`:(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function z(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.trayId==`string`&&typeof t.controllerId==`string`&&t.role===`follower`&&typeof t.participantCount==`number`&&B(t.bootstrap)&&Array.isArray(t.events)}function B(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.controllerId==`string`&&typeof t.bootstrapId==`string`&&typeof t.attempt==`number`&&typeof t.state==`string`&&typeof t.expiresAt==`string`&&typeof t.cursor==`number`&&typeof t.maxRetries==`number`&&typeof t.retriesRemaining==`number`}var V=n(`tray-webrtc`),H=`tray-control`,U=250,W=5,G=1e3,K=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>q(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??H}setIceServers(e){this.iceServers=e}async handleControlMessage(e){e.type===`follower.join_requested`?(e.iceServers&&!this.iceServers&&(this.iceServers=e.iceServers),await this.handleJoinRequested(e)):e.type===`bootstrap.answer`?await this.peers.get(e.bootstrapId)?.peer.setRemoteDescription(e.answer):e.type===`bootstrap.ice_candidate`&&await this.peers.get(e.bootstrapId)?.peer.addIceCandidate(e.candidate)}getPeers(){return Array.from(this.peers.values()).map(({state:e})=>({...e}))}getChannel(e){return this.peers.get(e)?.channel??null}stop(){for(let e of this.peers.values())e.peer.close();this.peers.clear()}async handleJoinRequested(e){this.closeControllerPeers(e.controllerId);let t=this.peerConnectionFactory(),n={controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,state:`connecting`,connectedAt:null,runtime:e.runtime},r=t.createDataChannel(this.dataChannelLabel);this.peers.set(e.bootstrapId,{state:n,peer:t,channel:r}),t.addEventListener(`icecandidate`,({candidate:t})=>{let n=Y(t);n&&this.options.sendControlMessage({type:`bootstrap.ice_candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:n})}),t.addEventListener(`connectionstatechange`,()=>{let n=this.peers.get(e.bootstrapId);n&&(n.state.state===`connected`?(t.connectionState===`disconnected`||t.connectionState===`failed`)&&(V.warn(`Leader peer connection state changed post-connect`,{bootstrapId:e.bootstrapId,state:t.connectionState}),this.options.onPeerDisconnected?.(e.bootstrapId,`Peer connection ${t.connectionState}`)):t.connectionState===`failed`&&this.failPeer(e,`Leader peer connection failed before the data channel opened`))}),r.addEventListener(`open`,()=>{let t=this.peers.get(e.bootstrapId);!t||t.state.state===`connected`||(t.state.state=`connected`,t.state.connectedAt=new Date().toISOString(),this.options.onPeerConnected?.({...t.state},t.channel))}),r.addEventListener(`close`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(V.warn(`Leader data channel closed post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel closed`)):this.failPeer(e,`Leader data channel closed before opening`))}),r.addEventListener(`error`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(V.warn(`Leader data channel error post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel error`)):this.failPeer(e,`Leader data channel failed before opening`))});try{let n=await t.createOffer();await t.setLocalDescription(n),this.options.sendControlMessage({type:`bootstrap.offer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,offer:J(t.localDescription??n,`offer`)})}catch(t){this.failPeer(e,t instanceof Error?t.message:String(t))}}closeControllerPeers(e){for(let[t,n]of this.peers.entries())n.state.controllerId===e&&(n.peer.close(),this.peers.delete(t))}failPeer(e,t){let n=this.peers.get(e.bootstrapId);if(n){n.peer.close(),this.peers.delete(e.bootstrapId);try{this.options.sendControlMessage({type:`bootstrap.failed`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,code:`WEBRTC_BOOTSTRAP_FAILED`,message:t,retryable:!0,retryAfterMs:1e3})}catch(e){V.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},se=class{options;fetchImpl;peerConnectionFactory;controllerIdFactory;sleep;pollIntervalMs;iceServers;activePeer=null;stopped=!1;constructor(e){this.options=e,this.fetchImpl=e.fetchImpl??fetch,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>q(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??U}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();u({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),V.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0,r=0;for(;;){X(this.stopped),n++;let t;try{t=await ae({joinUrl:this.options.joinUrl,controllerId:e,runtime:this.options.runtime,fetchImpl:this.fetchImpl})}catch(e){let t=e instanceof Error?e.message:String(e);throw u({...d(),attachAttempts:n,lastError:t}),e}if(u({...d(),attachAttempts:n,lastAttachCode:t.code}),this.followSupersededJoinUrl(t,r)){r++,await this.sleep(G);continue}if(t.action===`wait`){let e=t.retryAfterMs??1e3;V.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&V.warn(`Follower tray attach still waiting after ${n} attempts`,{attempt:n,code:t.code,retryAfterMs:e}),await this.sleep(e);continue}if(t.action===`fail`||!t.bootstrap){let e=t.error??`Tray follower attach failed (${t.code})`;throw u({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),V.warn(`Follower tray attach failed`,{error:e}),Error(e)}t.iceServers&&(this.iceServers=t.iceServers);try{let r=await this.completeBootstrap(t.trayId,e,t.bootstrap);return u({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),V.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw u({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),V.warn(`Follower tray bootstrap failed`,{error:r}),e}}}followSupersededJoinUrl(e,t){if(e.action!==`fail`||e.code!==`TRAY_SUPERSEDED`||!e.supersededByJoinUrl)return!1;if(t>=W)throw Error(`Follower tray attach gave up after ${t} supersede redirects (possible redirect cycle)`);let n;try{n=new URL(e.supersededByJoinUrl)}catch{throw Error(`Follower tray superseded with an invalid joinUrl: ${e.supersededByJoinUrl}`)}return V.info(`Follower tray superseded, following redirect`,{oldJoinUrl:this.options.joinUrl,newJoinUrl:n.toString()}),this.options.joinUrl=n.toString(),this.options.onJoinUrlChanged?.(n.toString()),!0}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,u({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})}async completeBootstrap(e,t,n){let r=n,i=0;for(this.activePeer=this.createFollowerPeer(t,r.bootstrapId);;){if(X(this.stopped),this.activePeer.open&&this.activePeer.channel)return{trayId:e,controllerId:t,bootstrapId:r.bootstrapId,channel:this.activePeer.channel};if(this.activePeer.openError)throw Error(this.activePeer.openError);let n=await j({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,cursor:i,fetchImpl:this.fetchImpl});r=n.bootstrap,i=r.cursor;try{await this.applyBootstrapEvents(n.events,this.activePeer,t,r.bootstrapId)}catch(e){if(r.failure?.retryable&&r.retriesRemaining>0){r=(await P({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,runtime:this.options.runtime,fetchImpl:this.fetchImpl})).bootstrap,i=0,this.activePeer.peer.close(),this.activePeer=this.createFollowerPeer(t,r.bootstrapId);continue}throw e}this.activePeer.open||await this.sleep(this.pollIntervalMs)}}async applyBootstrapEvents(e,t,n,r){for(let i of e)if(i.type===`bootstrap.offer`){await t.peer.setRemoteDescription(i.offer);let e=await t.peer.createAnswer();await t.peer.setLocalDescription(e),await M({joinUrl:this.options.joinUrl,controllerId:n,bootstrapId:r,answer:J(t.peer.localDescription??e,`answer`),fetchImpl:this.fetchImpl})}else if(i.type===`bootstrap.ice_candidate`)await t.peer.addIceCandidate(i.candidate);else if(i.type===`bootstrap.failed`)throw Error(i.failure.message)}createFollowerPeer(e,t){let n=this.peerConnectionFactory(),r={peer:n,channel:null,open:!1,openError:null};return n.addEventListener(`connectionstatechange`,()=>{r.open&&(n.connectionState===`disconnected`||n.connectionState===`failed`)&&(V.warn(`Follower peer connection state changed post-connect`,{bootstrapId:t,state:n.connectionState}),this.options.onDisconnected?.(`Peer connection ${n.connectionState}`))}),n.addEventListener(`datachannel`,({channel:e})=>{r.channel=e,e.addEventListener(`open`,()=>{r.open=!0}),e.addEventListener(`close`,()=>{r.open?(V.warn(`Follower data channel closed post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel closed`)):r.openError=`Follower data channel closed before opening`}),e.addEventListener(`error`,()=>{r.open?(V.warn(`Follower data channel error post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel error`)):r.openError=`Follower data channel failed before opening`})}),n.addEventListener(`icecandidate`,({candidate:n})=>{let r=Y(n);r&&N({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{V.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function ce(e,t){let n=t.baseDelayMs??1e3,r=t.backoffMultiplier??2,i=t.maxDelayMs??3e4,a=t.maxAttempts??10,o=t.sleep??e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=!1,c=!1,l=null,f={cancel(){s=!0,c=!1,l?.stop(),l=null},get reconnecting(){return c}},p=()=>{let t=new se({...e,sleep:o,onDisconnected:e=>{s||(V.warn(`Follower disconnected, starting reconnect loop`,{reason:e}),m(e))},onJoinUrlChanged:t=>{e.joinUrl=t,e.onJoinUrlChanged?.(t)}});return l=t,{manager:t,connectionPromise:t.start()}},m=async f=>{if(s||c)return;c=!0,l?.stop(),l=null;let m=0,h=n,g=f??`Unknown disconnect`;for(;!s&&m<a&&(m++,t.onReconnecting?.(m),u({...d(),state:`reconnecting`,error:null,reconnectAttempts:m}),V.info(`Reconnect attempt`,{attempt:m,delay:h}),await o(h),!s);){let n=null;try{let r=p();n=r.manager;let i=await r.connectionPromise;if(s){n.stop();break}c=!1,u({...d(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),V.info(`Reconnect successful`,{attempt:m,trayId:i.trayId}),t.onConnected(i);return}catch(e){g=e instanceof Error?e.message:String(e),V.warn(`Reconnect attempt failed`,{attempt:m,error:g}),n?.stop(),l=null}h=Math.min(h*r,i)}s||(c=!1,u({...d(),state:`error`,error:`Reconnect failed after ${m} attempts: ${g}`,reconnectAttempts:m}),V.warn(`Reconnect gave up`,{attempts:m,lastError:g}),t.onGaveUp?.(g))},{connectionPromise:h}=p();return h.then(e=>{s||t.onConnected(e)}).catch(e=>{s||(V.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)}),m(e instanceof Error?e.message:String(e)))}),f}function q(e){if(typeof RTCPeerConnection>`u`)throw Error(`RTCPeerConnection is not available in this runtime`);let t=e?.length?{iceServers:e}:void 0;return new RTCPeerConnection(t)}function J(e,t){if(!e||e.type!==t||typeof e.sdp!=`string`)throw Error(`Expected a local ${t} description before signaling`);return{type:e.type,sdp:e.sdp}}function Y(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.candidate==`string`?{candidate:t.candidate,sdpMid:typeof t.sdpMid==`string`?t.sdpMid:null,sdpMLineIndex:typeof t.sdpMLineIndex==`number`?t.sdpMLineIndex:null,usernameFragment:typeof t.usernameFragment==`string`?t.usernameFragment:null}:null}function X(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}function Z(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}var Q=n(`sprinkle-follower`),le=class{sync;addSprinkle;removeSprinkle;zone;openPath;open=new Map;opening=new Set;latestDesiredOpen=new Set;pendingUpdates=new Map;updateListeners=new Map;disposed=!1;constructor(e){this.sync=e.sync,this.addSprinkle=e.addSprinkle,this.removeSprinkle=e.removeSprinkle,this.zone=e.zone,this.openPath=e.open}async updateAvailable(e){if(this.disposed)return;let t=new Map;for(let n of e)n.open&&t.set(n.name,n);this.latestDesiredOpen=new Set(t.keys());for(let e of[...this.open.keys()])t.has(e)||this.closeLocally(e);for(let e of[...this.pendingUpdates.keys()])t.has(e)||this.pendingUpdates.delete(e);let n=[];for(let[e,r]of t)this.open.has(e)||this.opening.has(e)||n.push(this.openLocally(e,r));await Promise.allSettled(n)}handleSprinkleUpdate(e,t){if(this.disposed)return;let n=this.open.get(e);if(n){n.renderer.pushUpdate(t),this.fanOutToListeners(e,t);return}if(this.opening.has(e)){this.pendingUpdates.set(e,t);return}Q.debug(`Dropping sprinkle.update for unknown sprinkle`,{sprinkleName:e})}async handleSprinkleReloaded(e){if(this.disposed)return;let t=this.open.get(e);if(!t){this.opening.has(e)&&this.pendingUpdates.delete(e);return}this.updateListeners.delete(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){Q.warn(`Failed to fetch sprinkle content for reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.open.has(e))return;try{t.renderer.dispose()}catch(t){Q.warn(`Sprinkle dispose threw during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}let r=this.createBridge(e),i=new h(t.container,r);try{await i.render(n,e)}catch(t){Q.warn(`Sprinkle re-render failed during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.open.has(e)){i.dispose();return}t.renderer=i,Q.info(`Sprinkle reloaded in place`,{sprinkleName:e})}dispose(){if(!this.disposed){this.disposed=!0;for(let e of[...this.open.keys()])this.closeLocally(e);this.pendingUpdates.clear(),this.latestDesiredOpen.clear(),this.updateListeners.clear()}}async openLocally(e,t){this.opening.add(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){this.opening.delete(e),this.pendingUpdates.delete(e),Q.warn(`Failed to fetch sprinkle content from leader`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.latestDesiredOpen.has(e)){this.opening.delete(e),this.pendingUpdates.delete(e);return}let r=document.createElement(`div`);r.className=`sprinkle-panel`,r.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,r.dataset.sprinkle=e;let i=new h(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone,{icon:t.icon});try{await i.render(n,e)}catch(t){Q.warn(`Sprinkle render failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.latestDesiredOpen.has(e)){this.updateListeners.delete(e),this.opening.delete(e),this.pendingUpdates.delete(e);try{i.dispose()}catch(t){Q.warn(`Sprinkle dispose threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}r.remove();try{this.removeSprinkle(e)}catch(t){Q.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}this.open.set(e,{renderer:i,container:r}),this.opening.delete(e);let a=this.pendingUpdates.get(e);a!==void 0&&(this.pendingUpdates.delete(e),i.pushUpdate(a),this.fanOutToListeners(e,a))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){Q.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){Q.warn(`Sprinkle dispose threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}t.container.remove(),this.open.delete(e);try{this.removeSprinkle(e)}catch(t){Q.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}}createBridge(e){return{name:e,lick:t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data;this.sync.sendSprinkleLick(e,{action:n,data:r})},on:(t,n)=>{if(t!==`update`)return;let r=this.updateListeners.get(e);r||(r=new Set,this.updateListeners.set(e,r)),r.add(n)},off:(t,n)=>{t===`update`&&this.updateListeners.get(e)?.delete(n)},readFile:()=>Promise.reject(Error(`readFile not supported in follower-rendered sprinkle`)),writeFile:()=>Promise.reject(Error(`writeFile not supported in follower-rendered sprinkle`)),readDir:()=>Promise.reject(Error(`readDir not supported in follower-rendered sprinkle`)),exists:()=>Promise.resolve(!1),stat:()=>Promise.reject(Error(`stat not supported in follower-rendered sprinkle`)),mkdir:()=>Promise.reject(Error(`mkdir not supported in follower-rendered sprinkle`)),rm:()=>Promise.reject(Error(`rm not supported in follower-rendered sprinkle`)),screenshot:()=>Promise.reject(Error(`screenshot not supported in follower-rendered sprinkle`)),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch(t){Q.warn(`Sprinkle setState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch(t){return Q.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{if(this.openPath){this.openPath(e);return}let t=/^https?:|^chrome-extension:/.test(e)?e:m(e);window.open(t,`_blank`)},close:()=>this.closeLocally(e),minimize:()=>{},stopCone:()=>{this.sync.sendSprinkleLick(e,{action:`__stopCone__`})},attachImage:()=>{},captureScreen:()=>Promise.reject(Error(`captureScreen not supported in follower-rendered sprinkle`)),exec:Object.assign(()=>Promise.resolve({stdout:``,stderr:`exec not supported in follower-rendered sprinkle
|
|
3
|
-
`,exitCode:127}),{spawn:()=>Promise.resolve({stdout:``,stderr:`exec.spawn not supported in follower-rendered sprinkle
|
|
4
|
-
`,exitCode:127})}),agent:()=>Promise.resolve({stdout:`agent not supported in follower-rendered sprinkle
|
|
5
|
-
`,exitCode:127}),fetch:()=>Promise.reject(Error(`fetch not supported in follower-rendered sprinkle`)),http:{client:()=>{let e=()=>Promise.reject(Error(`http not supported in follower-rendered sprinkle`));return{get:e,post:e,put:e,patch:e,delete:e}}},browser:{findTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),ensureTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),eval:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),evalAsync:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),cookie:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),localStorage:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),fetch:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`))},hid:{list:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),sendReport:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),on:()=>{},off:()=>{}},serial:{list:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`))},usb:{list:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`))},readFileBinary:()=>Promise.reject(Error(`readFileBinary not supported in follower-rendered sprinkle`)),writeFileBinary:()=>Promise.reject(Error(`writeFileBinary not supported in follower-rendered sprinkle`)),fetchToFile:()=>Promise.reject(Error(`fetchToFile not supported in follower-rendered sprinkle`)),_jsh:()=>Promise.reject(Error(`jsh globals not supported in follower-rendered sprinkle`)),_device:()=>Promise.reject(Error(`device ops not supported in follower-rendered sprinkle`))}}},$=n(`page-follower-tray`);function ue(e,t){return t===`slicc-cherry`?e.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`cherry`,capabilities:{navigate:!0,network:!1,screenshot:!0}})):e.map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}function de(e){let t=e._refreshIntervalMs??5e3,n=null,r=null,i=null,a=null,o=(t=!0)=>{i&&=(clearInterval(i),null),r&&=(r.dispose(),null),n&&=(e.onForwardingToggle?.(!1),t&&e.onConnectionChange?.(!1),e.browserAPI.setTrayTargetProvider(null),n.close(),null)};return a=ce({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep,onJoinUrlChanged:e.onJoinUrlChanged},{onConnected:a=>{o();let s=Z(a.bootstrapId),c=null,l=new O(a.channel,{browserTransport:e.browserAPI.getTransport(),browserAPI:e.browserAPI,onSnapshot:e.onSnapshot,onUserMessage:e.onUserMessage,onStatus:e.onStatus,onCherrySliccEvent:e.onCherrySliccEvent,onScoopsList:e.onScoopsList,selfRuntimeId:s,onTargetsChanged:()=>void d(),onSprinklesList:t=>{e.onSprinklesList?.(t),c?.updateAvailable(t)},onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t),onSprinkleReloaded:e=>void c?.handleSprinkleReloaded(e),onDisconnect:e=>{$.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new le({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle,open:e.onOpen}),r=c);let u=new g($,{failureMessage:`Follower CDP target listing failed (best-effort, throttled)`,recoveryMessage:`Follower CDP target listing recovered (stable for debounce window)`}),d=async()=>{if(e.uiOnly)return;let t;try{t=await e.browserAPI.listPages()}catch(e){u.reportFailure(e);return}if(n===l){u.reportSuccess();try{l.advertiseTargets(ue(t,e.runtime??`slicc-standalone`),s)}catch(e){$.error(`Follower target advertisement broadcast failed (sync.advertiseTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}};n=l,e.browserAPI.setTrayTargetProvider(l),e.setChatAgent(l),e.onForwardingToggle?.(!0),e.onConnectionChange?.(!0),l.requestSnapshot(),e.uiOnly||(i=setInterval(()=>void d(),t),d()),$.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{$.info(`Follower reconnecting`,{attempt:e})},onGaveUp:t=>{$.warn(`Follower reconnect gave up`,{lastError:t}),o(!1),e.onGaveUp?.(t)},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null,u({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})},get currentSync(){return n}}}export{v as a,b as i,Z as n,g as o,K as r,de as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-DICK08O4.js";export{e as readMcpAuthEntries};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-BHegEzYY.js","assets/rolldown-runtime-aKtaBQYM.js","assets/account-store-DwSzwLW8.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-D5h5REZy.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CptRwAX3.js","assets/secrets-bridge-client-D6nwnBvr.js","assets/port-bridge-client-CoFZLSYm.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Bklgdp4G.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./preload-helper-Czpn1I53.js";import{t as n}from"./compat-aVSWLlYQ.js";import{t as r}from"./attachments-CByeG2Ru.js";import{n as i,r as a,t as o}from"./context-compaction-_UkD06XB.js";import{t as s}from"./logger-DDBAeTLF.js";import{t as c}from"./types-idfTVsM8.js";import{t as l}from"./icons-C5g936Qd.js";import{a as u}from"./dictation-priming-DGpw1lUV.js";var d=s(`cone-memory-budget`),ee=4e3,te=2e3,f=1.25,p=`/workspace/CLAUDE.md`,ne=`/sessions/index.json`,re=4096,ie=/^## Auto-extracted/m,m=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
|
|
3
|
-
|
|
4
|
-
Rules:
|
|
5
|
-
- Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
|
|
6
|
-
- One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
|
|
7
|
-
- Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
|
|
8
|
-
- Be terse. Aim well under the original size.
|
|
9
|
-
- Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function h(e){return Math.round(ee+te*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function g(e){let t=ie.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function ae(e){try{let t=await e.readFile(ne,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function oe(e){let{header:t,autoExtracted:r}=g(e.currentContent);if(!r.trim())return e.currentContent;let i=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
|
|
10
|
-
|
|
11
|
-
<auto-extracted>
|
|
12
|
-
${r}
|
|
13
|
-
</auto-extracted>`,a={role:`user`,content:[{type:`text`,text:m}],timestamp:Date.now()},o=await n(e.model,{systemPrompt:i,messages:[a]},{apiKey:e.apiKey,maxTokens:re,headers:e.headers,signal:e.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
14
|
-
`).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
|
|
15
|
-
`)?``:`
|
|
16
|
-
`}${s}\n`}async function _(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(p,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await ae(e.vfs),r=h(n),i=r*f;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};d.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await oe({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(p,n),d.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return d.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}function v(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,i=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${i}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${r(e)}`).join(`
|
|
17
|
-
`)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var y=e({SESSIONS_INDEX_PATH:()=>E,enrichPendingSession:()=>Z,freezeConeSession:()=>D,frozenSessionPath:()=>X,parseFrozenArchive:()=>$,readSessionsIndex:()=>le}),b=s(`session-freezer`),x=4,S=2048,C=40,w=`/sessions`,T=`${w}/attachments`,E=`/sessions/index.json`;async function D(e){let t=await z(e.sessionStore);if(!t||t.messages.length<x)return b.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=B(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await A(e,n,i);let a=await j(e,n,i)||K(t.messages);return await M(e,t,a,r,i?await O(e,a):void 0)}async function O(e,n){try{return k(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BHegEzYY.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){b.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function k(e){if(e)return l(e)?e:void 0}async function A(e,t,n){if(!n){b.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await a({messages:t,instruction:o,model:e.model,apiKey:e.apiKey,maxTokens:S,headers:e.headers})}catch(e){b.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){b.info(`Memory extraction returned no durable memories`);return}try{await Y(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),b.info(`Memory extracted and appended on new-session`)}catch(e){b.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function j(e,t,n){if(!n)return``;try{return G(await a({messages:t,instruction:i,model:e.model,apiKey:e.apiKey,maxTokens:C,headers:e.headers}))}catch(e){return b.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function M(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${se()}.md`:`${a.replace(/[:.]/g,`-`)}-${q(n)}.md`,s={filename:o,title:n,frozenAt:a,messageCount:t.messages.length,...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{}};try{await J(e.vfs,w);let r=await N(e.vfs,t.messages,o.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r},c=W(i);return await e.vfs.writeFile(`${w}/${o}`,c),await ce(e.vfs,s),await e.vfs.flush(),b.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...s,archive:i}}catch(e){return b.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function N(e,t,n){let r={vfs:e,archiveDir:`${T}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(I)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await P(r,n));i.push({...e,attachments:t})}return i}async function P(e,t){if(!I(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await F(e.vfs,t.path);if(!r)return R(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await J(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function F(e,t){try{if(!await L(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function I(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function L(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function R(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function z(e){try{return await e.load(`session-cone`)}catch(e){return b.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function B(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var V=`<!-- slicc:session-data
|
|
18
|
-
`,H=`
|
|
19
|
-
-->`;function U(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function W(e){let t=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n---\n\n`,n=`${V}${JSON.stringify(U(e.messages)).replace(/-->/g,`-- >`)}${H}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+v(e.messages)}function G(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function K(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function q(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function se(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function J(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function Y(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof c)||t.code!==`ENOENT`)throw t;await J(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
|
|
20
|
-
`)?``:`
|
|
21
|
-
`}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await _({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){b.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function ce(e,t){let n=[];try{let t=await e.readFile(E,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(E,JSON.stringify(r,null,2))}async function le(e){try{let t=await e.readFile(E,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function X(e){return`${w}/${e.filename}`}async function Z(e,t,n){if(!t.pendingEnrichment)return null;let r=await de(e,t);if(r===null)return null;let i=fe(t,r);if(i===null)return null;let a=await pe(t,i,n);if(a===null)return null;let o=await ue(n,a.newTitle);return await me(e,t,a.bullets,n),await he(e,t,r,a.newTitle,o)}async function ue(e,t){if(e.pickIcon)try{return await k(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){b.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function de(e,t){try{let n=await e.readFile(X(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?b.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):b.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function fe(e,t){let n;try{n=$(t).messages}catch(t){return b.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(b.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):B(n)}async function pe(e,t,n){let r=``;try{r=await a({messages:t,instruction:o,model:n.model,apiKey:n.apiKey,maxTokens:S,headers:n.headers})}catch(t){return b.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=G(await a({messages:t,instruction:i,model:n.model,apiKey:n.apiKey,maxTokens:C,headers:n.headers}))}catch(t){return b.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:r,newTitle:s}:(b.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function me(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await Y(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){b.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function he(e,t,n,r,i){let a=X(t),o=ge(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${q(r)}.md`,c=`${w}/${s}`;try{await J(e,w),await e.writeFile(c,o)}catch(e){return b.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let l=i??t.icon,u={filename:s,title:r,frozenAt:t.frozenAt,messageCount:t.messageCount,...l?{icon:l}:{}};try{await _e(e,t.filename,u)}catch(e){return b.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(c!==a)try{await e.rm(a)}catch(e){b.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return b.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function ge(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var Q=Promise.resolve();async function _e(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(E,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(E,JSON.stringify(a,null,2))},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),i}function $(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:ve(t)}}function ve(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}export{$ as a,X as i,Z as n,y as o,D as r,v as s,E as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`sessions`;function t(){return new Promise((t,n)=>{let r=indexedDB.open(`browser-coding-agent`,1);r.onupgradeneeded=()=>{let t=r.result;t.objectStoreNames.contains(e)||t.createObjectStore(e,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}var n=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await t();e.onversionchange=()=>{e.close(),this.db=null},e.onclose=()=>{this.db=null},this.db=e}return this.db}async save(t){let n=await this.getDb();return new Promise((r,i)=>{let a=n.transaction(e,`readwrite`);a.objectStore(e).put(t),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async load(t){let n=await this.getDb();return new Promise((r,i)=>{let a=n.transaction(e,`readonly`).objectStore(e).get(t);a.onsuccess=()=>r(a.result??null),a.onerror=()=>i(a.error)})}async list(){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(e,`readonly`).objectStore(e).getAll();i.onsuccess=()=>{n(i.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},i.onerror=()=>r(i.error)})}async delete(t){let n=await this.getDb();return new Promise((r,i)=>{let a=n.transaction(e,`readwrite`);a.objectStore(e).delete(t),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}};export{n as SessionStore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`https://www.sliccy.ai`,t=`slicc.bridge.v1.`,n=`bridgeToken`,r=`bridge`;new URL(e).hostname,[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);export{e as i,n,r,t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=`https://www.sliccy.ai`,t=`bridge`;new URL(e).hostname,[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function n(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function r(e,t){return e.some(e=>n(e,t))}export{t as n,e as r,r as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/setup-sudo-DGrMEyR3.js","assets/rolldown-runtime-aKtaBQYM.js","assets/preload-helper-Czpn1I53.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{wireWcDetached as t}from"./wc-detached-B3WCbbZT.js";import{attachWcClient as n,createWcLiveCallbacks as r,n as i,prepareWcShell as a}from"./wc-live-OHBNpb_A.js";async function o(o,s,c=!1){let l=a(o,`extension · wc`),u=new i(r(l.wiring));n(l,u,s),t({client:u,isDetachedSelf:c});let{setupSudoExtension:d}=await e(async()=>{let{setupSudoExtension:e}=await import(`./setup-sudo-DGrMEyR3.js`).then(e=>e.n);return{setupSudoExtension:e}},__vite__mapDeps([0,1,2]));await d({log:s}),u.requestState(),s.info(`WC extension shell connected to offscreen engine`)}export{o as mountWcUiExtension};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-OHBNpb_A.js","assets/account-store-DwSzwLW8.js","assets/rolldown-runtime-aKtaBQYM.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-D5h5REZy.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CptRwAX3.js","assets/secrets-bridge-client-D6nwnBvr.js","assets/port-bridge-client-CoFZLSYm.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Bklgdp4G.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/tray-runtime-config-DquE2Rx9.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-CyJIKXH4.js","assets/telemetry-C8rZr13D.js","assets/main-CBUfGcTh.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/electron-overlay-route-CjT6k9Df.js","assets/bridge-launch-params-jegYRGJ6.js","assets/setup-sudo-DGrMEyR3.js","assets/provider-settings-D6FC6-Ws.js","assets/clipboard-DuHpK59o.js","assets/tray-join-url-BIvzbiFR.js","assets/tray-leader-DicSB8Dn.js","assets/db-ysOO0kLr.js","assets/shared-BYVJAPbn.js","assets/mime-types-ugOWOUZ9.js","assets/dictation-priming-DGpw1lUV.js","assets/dip-D3QakWLH.js","assets/wc-permissions-registry-Blyunq37.js","assets/hid-device-registry-DboUgvzI.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-BQbhk96u.js","assets/usb-device-registry-BOGfZXgp.js","assets/sprinkle-renderer-qv3mGpBG.js","assets/theme-C8b_iQ_9.js","assets/theme-engine-jfuTMXZM.js","assets/sprinkle-bridge-DziYRsuS.js","assets/session-freezer-oYKtZTY0.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/icons-C5g936Qd.js","assets/wc-shell-CoYCAmK-.js","assets/timestamp-preference-DgrTvVNx.js","assets/src-6TqoULh8.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-scoop-color-CByZNEJo.js","assets/wc-shell-WkeczD9x.css","assets/leader-session-events-m7I5BMZy.js","assets/legacy-styles-DcRu2WCJ.js","assets/follower-navigate-watcher-UN0jo7Ge.js","assets/navigation-watcher-BoJS9hdc.js","assets/handoff-link-CfgH86mb.js","assets/discovery-preference-CUhsI-AU.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{c as n}from"./tray-sync-protocol-CVdiCvfU.js";import{c as r,d as i,f as a,n as o,r as s}from"./tray-runtime-config-DquE2Rx9.js";import{t as c}from"./main-CBUfGcTh.js";import{n as l}from"./theme-engine-jfuTMXZM.js";import{i as u,r as d}from"./dip-D3QakWLH.js";import{wireWcAttach as f}from"./wc-attach-DU0svqb7.js";import{i as p}from"./wc-shell-CoYCAmK-.js";import{t as m}from"./wc-scoop-color-CByZNEJo.js";import{prepareWcShell as h,t as g}from"./wc-live-OHBNpb_A.js";import{t as _}from"./page-follower-tray-Cm9cuA-m.js";import{WcSprinkleZone as v}from"./wc-sprinkles-CFaUt2sb.js";var y=t(`follower-switch-out`);function b(e,t){t.stopFollower();try{t.storage.removeItem(o),e.workerBaseUrl===null?t.storage.removeItem(s):t.storage.setItem(s,e.workerBaseUrl)}catch(e){y.error(`follower switch-out: storage write failed — state may revert on reload`,{error:e instanceof Error?e.message:String(e)})}try{let e=t.getHref(),n=a(e);n!==e&&t.replaceHref(n)}catch(e){y.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var x=new Set([`oauth-attempt`,`connect-attempt`,`device-code-decision`]);function S(e){return x.has(e)}var C=`slicc-signin-redirect-style`,w=`wc-signin-redirect`,T=`
|
|
3
|
-
.${w}{display:flex;gap:10px;align-items:flex-start;margin:10px 12px;padding:12px 14px;
|
|
4
|
-
border:1px solid var(--line);border-radius:12px;background:var(--ghost);color:var(--ink);
|
|
5
|
-
font-family:var(--ui);font-size:13px;line-height:1.4;}
|
|
6
|
-
.${w}__body{flex:1;min-width:0;}
|
|
7
|
-
.${w}__title{font-weight:600;margin-bottom:2px;}
|
|
8
|
-
.${w}__sub{color:var(--txt-2);}
|
|
9
|
-
.${w}__open{appearance:none;border:1px solid var(--line);border-radius:8px;cursor:pointer;
|
|
10
|
-
background:var(--canvas);color:var(--ink);font:inherit;font-weight:600;padding:6px 12px;white-space:nowrap;}
|
|
11
|
-
.${w}__open:hover{background:var(--ghost);}
|
|
12
|
-
.${w}__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
|
|
13
|
-
font:inherit;font-size:16px;line-height:1;padding:0 2px;}
|
|
14
|
-
.${w}__x:hover{color:var(--ink);}
|
|
15
|
-
`;function E(e){if(e.getElementById(C))return;let t=e.createElement(`style`);t.id=C,t.textContent=T,e.head.appendChild(t)}function D(e,t){E(e);let n=e.createElement(`div`);n.className=w,n.setAttribute(`role`,`status`);let r=e.createElement(`div`);r.className=`${w}__body`;let i=e.createElement(`div`);i.className=`${w}__title`,i.textContent=t.title;let a=e.createElement(`div`);a.className=`${w}__sub`,a.textContent=t.sub,r.append(i,a);let o=e.createElement(`button`);if(o.type=`button`,o.className=`${w}__open`,o.textContent=t.buttonLabel,o.addEventListener(`click`,()=>t.onOpenTab()),n.append(r,o),t.dismissible){let t=e.createElement(`button`);t.type=`button`,t.className=`${w}__x`,t.setAttribute(`aria-label`,`Dismiss`),t.textContent=`×`,t.addEventListener(`click`,()=>n.remove()),n.append(t)}return n}function O(e,t){let n=e.ownerDocument;t.onOpenTab();let r=e.querySelector(`.${w}`);if(r)return r.scrollIntoView?.({block:`nearest`}),r;let i=D(n,{title:`Sign in from the SLICC tab`,sub:`The side panel can't complete a provider login — we've switched you to the main SLICC tab. Finish signing in there (Settings › Providers), then come back.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!0});return e.append(i),i.scrollIntoView?.({block:`nearest`}),i}function k(e,t){return D(e,{title:`Set up SLICC in the main tab`,sub:`SLICC needs a model connected before it can help. Open the main SLICC tab to finish setup and sign in, then come back to the side panel.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!1})}var A=t(`wc-follower`),j=`/shared/sprinkles/welcome/`,M={sendMessage:()=>{},onEvent:()=>()=>{},stop:()=>{}};function N(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Could not start follower`;let i=document.createElement(`p`);i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=t,n.append(r,i),e.appendChild(n)}function P(e,t,n,r,i){let a=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};i.files?(e.style.display=`none`,e.parentElement?.append(a(`Files live on the leader. A follower mirrors the leader's chat, sprinkles, and browser tabs - not its filesystem.`))):e.closest(`slicc-surface`)?.remove(),i.terminal?t.append(a(`The shell runs on the leader. A follower has no local terminal - drive the session through chat.`)):t.closest(`slicc-surface`)?.remove(),i.memory?n.append(a(`Memory lives on the leader. A follower has no local memory store.`)):n.closest(`slicc-surface`)?.remove(),i.monitor?(r.style.display=`none`,r.parentElement?.append(a(`Monitor reads the leader's kernel state. A follower has no local kernel.`))):r.closest(`slicc-surface`)?.remove()}var F={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,newSprinkle:!0,monitor:!0,showTimestamps:!0};function I(e){let t=[];for(let[n,r]of[[`terminal`,`term`],[`files`,`files`],[`memory`,`memory`],[`browser`,`browser`],[`monitor`,`monitor`],[`newSprinkle`,`new`]])e[n]||t.push(`slicc-dock-item[data-t="${r}"]`);if(e.modelPicker||t.push(`slicc-composer-meta`),e.history||t.push(`slicc-freezer`),e.nav||t.push(`slicc-nav`),!e.terminal&&!e.files&&!e.memory&&!e.browser&&!e.monitor&&t.push(`slicc-dock .div`,`slicc-dock .grow`),t.length||!e.history){let n=document.createElement(`style`),r=t.length?`${t.join(`,
|
|
16
|
-
`)}{display:none!important;}`:``;e.history||(r+=`
|
|
17
|
-
.wcui-appcol{padding-left:0!important;}`),n.textContent=r,document.head.append(n)}}async function L(t,a,o){let s=o===`cherry`,y=s&&new URLSearchParams(window.location.search).get(`ui-only`)===`1`,x=window.location.ancestorOrigins?.[0],C=s&&(x?.startsWith(`chrome-extension://`)??!1),w;try{w=await c({runtimeMode:o,envBaseUrl:null,window,log:a})}catch(e){let n=e instanceof Error?e.message:String(e);A.error(`follower prelude failed`,{runtimeMode:o,error:n}),N(t,n);return}let T=s?w.cherryJoinUrl:r(window.location.href,window.localStorage);if(!T){A.error(`follower mount with no join URL - falling back to live boot`);let{mountWcUiLive:n}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-OHBNpb_A.js`);return{mountWcUiLive: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,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]));return n(t,a,`standalone`)}let E=h(t,s?`cherry · follower`:`follower`);s&&w.cherryTransport?.theme&&l(w.cherryTransport.theme);let D=s&&w.cherryTransport?.effortLevel;D?localStorage.setItem(`slicc_locked_effort_level`,D):localStorage.removeItem(`slicc_locked_effort_level`);let L=s&&w.cherryTransport?{...F,...w.cherryTransport.features}:F;P(E.refs.fileTree,E.refs.termSurface,E.refs.memoryHost,E.refs.monitor,L),I(L),e(async()=>{let{applyTimestampVisibility:e,initTimestampPreference:t}=await import(`./timestamp-preference-DgrTvVNx.js`).then(e=>e.a);return{applyTimestampVisibility:e,initTimestampPreference:t}},__vite__mapDeps([57,2])).then(({applyTimestampVisibility:e,initTimestampPreference:t})=>{L.showTimestamps?t():e(!1)}),e(async()=>{let{loadDipStyles:e,loadSprinkleStyles:t}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadDipStyles:e,loadSprinkleStyles:t}},__vite__mapDeps([64,3])).then(({loadDipStyles:e,loadSprinkleStyles:t})=>Promise.all([e(),t()])).catch(()=>void 0);let R=new Map,z=()=>w.cherryTransport?.emitSliccEventToHost(`slicc.open-leader-tab`),B=()=>{C&&O(E.refs.thread,{onOpenTab:z})},V=e=>{let t=e.querySelectorAll(`img[src^="${j}"]`);return t.length===0?!1:(t.forEach((t,n)=>{n===0?t.replaceWith(k(e.ownerDocument,{onOpenTab:z})):t.remove()}),!0)},H=(e,t)=>{Y.currentSync?.sendSprinkleLick(`inline`,{action:e,data:t}),S(e)&&B()},U=new g({thread:E.refs.thread,agent:M,onQueuedChange:e=>{E.refs.queuedStack.setMessages(e)},onMessageRendered:(e,t)=>{let n=t[0];n&&(C&&V(n),R.set(e.id,u(n,H)))},onMessageDisposed:e=>{let t=R.get(e);t&&(d(t),R.delete(e))},readOnlyToolUi:!0});if(E.setController(U),C)for(let e of[`slicc-error-open-settings`,`slicc-error-login`,`slicc-error-change-model`])E.refs.thread.addEventListener(e,()=>B());let W=`Connecting to leader…`,G=(e,t)=>{E.refs.inputCard.setAttribute(`placeholder`,t),e?E.refs.inputCard.removeAttribute(`disabled`):E.refs.inputCard.setAttribute(`disabled`,``)};G(!1,W),y||E.refs.composer.setAttribute(`ptt`,``);let K=f({inputCard:E.refs.inputCard,freezer:E.refs.freezer,composer:E.refs.composer,noCamera:y,log:A});E.refs.inputCard.addEventListener(`submit`,e=>{let t=p(e)??``,n=K.take();(t.trim()||n.length)&&(U.sendUserMessage(t,n),E.refs.inputCard.clear?.())});let q=new v(E.refs).callbacks(),J=null,Y=_({joinUrl:T,runtime:s?n:`slicc-standalone`,uiOnly:y,browserAPI:w.browser,onSnapshot:e=>U.loadMessages(e),onUserMessage:(e,t,n,r)=>U.addUserMessage(e,r),onStatus:e=>U.setProcessing(e===`processing`),setChatAgent:e=>U.setAgent(e),onConnectionChange:e=>{G(e,e?`Ask the leader, or describe a change…`:W),s&&w.cherryTransport?.emitSliccEventToHost(e?`slicc.follower.ready`:`slicc.follower.disconnected`)},onGaveUp:e=>{A.error(`follower gave up reaching the leader`,{error:e}),G(!1,`Couldn't reach the leader. Reload to retry.`),s&&w.cherryTransport?.emitSliccEventToHost(`slicc.follower.disconnected`)},...s?{}:{onJoinUrlChanged:e=>{A.info(`follower joinUrl superseded, persisting replacement`,{newJoinUrl:e}),i(window.localStorage,e)}},addSprinkle:q.addSprinkle,removeSprinkle:q.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):A.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},onScoopsList:(e,t)=>{E.refs.switcher.scoops=e.map(e=>({key:e.jid,type:e.isCone?`cone`:`scoop`,color:m(e),label:e.isCone?`sliccy`:e.name,eyes:`open`})),E.refs.switcher.setAttribute(`active`,J??t)},...s?{onCherrySliccEvent:(e,t)=>w.cherryTransport?.emitSliccEventToHost(e,t)}:{}});for(let e of[`save`,`skip`,`erase`])E.refs.freezer.addEventListener(`new-chat-${e}`,()=>{Y.currentSync?.requestNewSession(e)});E.refs.switcher.addEventListener(`slicc-scoop-select`,e=>{let t=e.detail?.key;t&&(J=t,E.refs.switcher.setAttribute(`active`,t),Y.currentSync?.selectScoop(t))}),s&&w.cherryTransport&&(w.cherryTransport.onHostEvent=(e,t)=>Y.currentSync?.sendCherryHostEvent(e,t));let X=null;if(!s){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-UN0jo7Ge.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([65,11,13,2,3,14,12,15,16,66,67,68]));X=t(w.realCdpTransport,()=>Y.currentSync)}E.refs.avatarMenu.items=[{kind:`separator`},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}],E.refs.avatarMenu.addEventListener(`slicc-avatar-action`,e=>{e.detail?.id===`tray-stop`&&window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}))}),window.addEventListener(`slicc:tray-leave`,e=>{b({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{X?.(),Y.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),A.info(`follower mounted`,{runtimeMode:o,isCherry:s})}export{L as mountWcUiFollower};
|