sliccy 5.27.0 → 5.27.2
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/dist/ui/assets/{account-store-Ca-6Qepy.js → account-store-BFup3fQv.js} +2 -2
- package/dist/ui/assets/{account-store-WxYLKJl4.js → account-store-CyTIxjml.js} +1 -1
- package/dist/ui/assets/{adobe-C4TDN6gJ.js → adobe-C3ICTjkQ.js} +1 -1
- package/dist/ui/assets/{adobe-BECI7LIx.js → adobe-Cwn9LSa3.js} +1 -1
- package/dist/ui/assets/{adobe-oauth-state-DEaREUsJ.js → adobe-oauth-state-CJxatA-w.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-r6rFLlkg.js → agent-message-to-chat-Cnwu7Uug.js} +1 -1
- package/dist/ui/assets/{apps-DorRR2hG.js → apps-_Ru-zeOq.js} +1 -1
- package/dist/ui/assets/{azure-openai-B2sHsITp.js → azure-openai-C5BnoYfB.js} +1 -1
- package/dist/ui/assets/{azure-openai-Bndr5L8s.js → azure-openai-GOAwvC0d.js} +1 -1
- package/dist/ui/assets/{cerebras-BQ-fuEoV.js → cerebras-DnmvEnzf.js} +1 -1
- package/dist/ui/assets/{cerebras-Dei36lB9.js → cerebras-kkt6JWkZ.js} +1 -1
- package/dist/ui/assets/{connect-surface-UEwrwU3B.js → connect-surface-xExKp6k4.js} +1 -1
- package/dist/ui/assets/dip-vOI0dNhU.js +1 -0
- package/dist/ui/assets/{dist-DyA_dBRw.js → dist-rO_zI7c5.js} +1 -1
- package/dist/ui/assets/{dist-CsyS70tH.js → dist-wcq5kRyy.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-B5a-L6cL.js → ensure-speech-assets-DVNIpxHE.js} +1 -1
- package/dist/ui/assets/esp8266-J41qncWu.js +1 -0
- package/dist/ui/assets/{esptool-operations-l2Cnzqeo.js → esptool-operations-BMcyf6lU.js} +2 -2
- package/dist/ui/assets/{fs-C9ZZPHHH.js → fs-Djs11fgL.js} +1 -1
- package/dist/ui/assets/{fs-8uahIHYg.js → fs-IUJNLCle.js} +2 -2
- package/dist/ui/assets/{github-BOgIIZQf.js → github-B2Q7d9d9.js} +1 -1
- package/dist/ui/assets/{github-CBaAwieE.js → github-V9F2Kwc3.js} +2 -2
- package/dist/ui/assets/{github-copilot-By9mvyfk.js → github-copilot-DrbeG1qM.js} +1 -1
- package/dist/ui/assets/{github-copilot-B_-tmYGD.js → github-copilot-_wD9vWLP.js} +1 -1
- package/dist/ui/assets/{hear-DaOEu3r-.js → hear-B6wdzPMD.js} +1 -1
- package/dist/ui/assets/{kernel-worker-BVdWluOy.js → kernel-worker-D6FiY4In.js} +18 -18
- package/dist/ui/assets/{kokoro-engine-DqalxH8P.js → kokoro-engine-CdpBgmxP.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-_6bmVoay.js → lick-ws-bridge-Cstvd5df.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-BOGL3loo.js → lick-ws-bridge-DUmVUuCv.js} +1 -1
- package/dist/ui/assets/{local-llm-CSTYZfRl.js → local-llm-COSrJK26.js} +1 -1
- package/dist/ui/assets/{main-CN__UqbO.js → main-C--nD5g7.js} +4 -4
- package/dist/ui/assets/{mount-IiKfVLoJ.js → mount-CKi0fTDP.js} +2 -2
- package/dist/ui/assets/{mount-DTOk39Ey.js → mount-CihzCUsg.js} +1 -1
- package/dist/ui/assets/{new-session-B4TktVYW.js → new-session-AM3XtlDe.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-risshLhE.js → oauth-bootstrap-Bh2RA718.js} +2 -2
- package/dist/ui/assets/{openai-codex-RqVnP8ma.js → openai-codex-DetPrslk.js} +1 -1
- package/dist/ui/assets/{openai-codex-XujJPcOv.js → openai-codex-IbPQB6G0.js} +1 -1
- package/dist/ui/assets/page-follower-tray-C6-y2wCt.js +5 -0
- package/dist/ui/assets/{panel-rpc-handlers-CwACzy8T.js → panel-rpc-handlers-BR7koM3e.js} +2 -2
- package/dist/ui/assets/{provider-Czziqbqr.js → provider-C2DK-tou.js} +2 -2
- package/dist/ui/assets/{provider-DYm3dgM_.js → provider-Kdt5mnJz.js} +1 -1
- package/dist/ui/assets/provider-store-access-BILn3hmx.js +1 -0
- package/dist/ui/assets/provider-store-access-CbFUIJuP.js +1 -0
- package/dist/ui/assets/{providers-Cxo5lEqr.js → providers-D-lbA45B.js} +2 -2
- package/dist/ui/assets/{providers-BLx3fae_.js → providers-uxcBDh6N.js} +1 -1
- package/dist/ui/assets/{quick-llm-BDH3bKTj.js → quick-llm-4arXh_DA.js} +1 -1
- package/dist/ui/assets/session-freezer-DpwXCapf.js +1 -0
- package/dist/ui/assets/{speak-CPJkZGWK.js → speak-BdzRzg-l.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BTUA9i-m.js → sprinkle-manager-CRspU-wp.js} +1 -1
- package/dist/ui/assets/sprinkle-renderer-Ck9jaWXg.js +192 -0
- package/dist/ui/assets/{store-BguTJ6sX.js → store-AZEbHS5U.js} +1 -1
- package/dist/ui/assets/{sudo-OkMLEqOR.js → sudo-CTuXr4DQ.js} +1 -1
- package/dist/ui/assets/{transformers-env-DCoo5BQj.js → transformers-env-DLkBUkpw.js} +1 -1
- package/dist/ui/assets/{tray-leader-ig4c4qTn.js → tray-leader-DM9rswbl.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BjTWTK0U.js → tray-leave-runtime-BtIR6gOV.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-D1VA2Lri.js → upgrade-detection-DxQBYy82.js} +1 -1
- package/dist/ui/assets/{voice-reply-BfOOgral.js → voice-reply-fuBAYbo5.js} +1 -1
- package/dist/ui/assets/{wc-attach-MaQvCmrh.js → wc-attach-CzeWLPFm.js} +2 -2
- package/dist/ui/assets/{wc-extension-Ce5acSDf.js → wc-extension-CQkPmWB-.js} +2 -2
- package/dist/ui/assets/wc-follower-6OLDQClB.js +4 -0
- package/dist/ui/assets/{wc-live-7ULV3ZpC.js → wc-live-DBfgEvvH.js} +5 -5
- package/dist/ui/assets/{wc-nav-BiK2SRzR.js → wc-nav-DpdrDmzV.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DdYaVqZn.js → wc-onboarding-Dl8IrgMO.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-BJ3fArRM.js → wc-placeholder-9KOVYHkL.js} +3 -3
- package/dist/ui/assets/{wc-settings-CK2vVsoc.js → wc-settings-DK6xQJ9c.js} +2 -2
- package/dist/ui/assets/{wc-shell-C0CueAzb.js → wc-shell-BEzti5I0.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-CG2B6a19.js → wc-sprinkles-BwQjnMOV.js} +2 -2
- package/dist/ui/assets/wc-tray-Bfd9GvZL.js +2 -0
- package/dist/ui/assets/{whisper-engine-OgjNrsTq.js → whisper-engine-Dbg5R3v1.js} +1 -1
- package/dist/ui/assets/{xai-grok-Xz16vGFj.js → xai-grok-BSlNsl2K.js} +1 -1
- package/dist/ui/assets/{xai-grok-Boa11vEQ.js → xai-grok-COz57XiQ.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/dip-BPBCgCGc.js +0 -1
- package/dist/ui/assets/esp8266-CK7zgrBp.js +0 -1
- package/dist/ui/assets/page-follower-tray-CV8qYe5v.js +0 -5
- package/dist/ui/assets/provider-store-access-CSqiDdRm.js +0 -1
- package/dist/ui/assets/provider-store-access-DGxGfbbA.js +0 -1
- package/dist/ui/assets/session-freezer-46FXxjdr.js +0 -1
- package/dist/ui/assets/sprinkle-renderer-BMzJnQXh.js +0 -192
- package/dist/ui/assets/wc-follower-tHA3T44W.js +0 -4
- package/dist/ui/assets/wc-tray-3aPSo-_z.js +0 -2
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/slicc-editor-DKckizoI.js","assets/preload-helper-CZgWQFsJ.js","assets/dist-BHXb30bf.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-CZgWQFsJ.js";import{a as t,n,r}from"./theme-Bgsl5v2i.js";var i=typeof chrome<`u`&&!!chrome?.runtime?.id,a=/<script\b([^>]*)\bsrc\s*=\s*["'](https?:\/\/[^"']+)["']([^>]*)><\/script>/gi;async function o(e){let t=[],n;for(;(n=a.exec(e))!==null;)t.push({full:n[0],url:n[2],index:n.index});if(a.lastIndex=0,t.length===0)return e;let r=await Promise.all(t.map(async e=>{try{let t=await fetch(e.url);if(!t.ok)throw Error(`HTTP ${t.status}`);return{...e,text:await t.text()}}catch(t){let n=t instanceof Error?t.message:String(t);return{...e,text:`console.error('[sprinkle] Failed to load ${e.url}: ${n}')`}}})),i=e;for(let e=r.length-1;e>=0;e--){let{full:t,text:n}=r[e],a=n.replace(/<\/script/gi,`<\\/script`);i=i.replace(t,()=>`<script>${a}<\/script>`)}return i}function s(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}var c=class a{container;bridge;scripts=[];iframe=null;static cachedLucideScript=null;static lucideScriptPromise=null;messageHandler=null;constructor(e,t){this.container=e,this.bridge=t}async render(e,t){this.dispose(),i?await this.renderInSandbox(e,t,s(e)):s(e)?await this.renderFullDoc(e,t):this.renderInline(e,t)}async renderInSandbox(e,t,i=!1){let a=document.createElement(`iframe`);a.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),a.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`,this.iframe=a,console.log(`[sprinkle-renderer] creating sandbox iframe`,a.src),await new Promise((e,t)=>{let n=setTimeout(()=>{console.error(`[sprinkle-renderer] iframe load timed out after 5s`),t(Error(`sprinkle sandbox iframe load timed out`))},5e3);a.addEventListener(`load`,()=>{clearTimeout(n),console.log(`[sprinkle-renderer] iframe loaded, contentWindow:`,!!a.contentWindow),r(a.contentWindow),e()},{once:!0}),a.addEventListener(`error`,e=>{clearTimeout(n),console.error(`[sprinkle-renderer] iframe error:`,e),t(Error(`sprinkle sandbox iframe failed to load`))},{once:!0}),this.container.appendChild(a)}),this.messageHandler=e=>{if(e.source!==a.contentWindow)return;let n=e.data;if(n?.type){if(n.type===`sprinkle-lick`)this.bridge.lick({action:n.action,data:n.data});else if(n.type===`sprinkle-set-state`)this.bridge.setState(n.data);else if(n.type===`sprinkle-close`)this.bridge.close();else if(n.type===`sprinkle-minimize`)this.bridge.minimize();else if(n.type===`sprinkle-stop-cone`)this.bridge.stopCone();else if(n.type===`sprinkle-storage-set`)try{localStorage.setItem(`slicc-sprinkle-ls:${t}:${n.key}`,n.value)}catch(e){console.warn(`[sprinkle-renderer] localStorage setItem failed:`,n.key,e)}else if(n.type===`sprinkle-storage-remove`)try{localStorage.removeItem(`slicc-sprinkle-ls:${t}:${n.key}`)}catch(e){console.warn(`[sprinkle-renderer] localStorage removeItem failed:`,n.key,e)}else if(n.type===`sprinkle-storage-clear`){let e=`slicc-sprinkle-ls:${t}:`;for(let t=localStorage.length-1;t>=0;t--){let n=localStorage.key(t);n?.startsWith(e)&&localStorage.removeItem(n)}}else if(n.type===`sprinkle-attach-image`)this.bridge.attachImage(n.base64,n.name,n.mimeType);else if(n.type===`sprinkle-open`)this.bridge.open(n.path,n.projectRoot?{projectRoot:n.projectRoot}:void 0);else if(n.type===`sprinkle-readfile`)this.bridge.readFile(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:n.id,content:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-writefile`)this.bridge.writeFile(n.path,n.content).then(()=>a.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-readdir`)this.bridge.readDir(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:n.id,entries:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-exists`)this.bridge.exists(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:n.id,exists:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-stat`)this.bridge.stat(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:n.id,stat:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-mkdir`)this.bridge.mkdir(n.path).then(()=>a.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-rm`)this.bridge.rm(n.path).then(()=>a.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-capture-screen`)this.bridge.captureScreen().then(e=>a.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:n.id,base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-exec`)this.bridge.exec(n.cmd).then(e=>a.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-agent`)this.bridge.agent(n.prompt,n.opts).then(e=>a.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-jsh`)this.bridge._jsh(n.op,n.args).then(e=>a.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-device-op`)this.bridge._device(n.channel,n.op,n.args??[]).then(e=>a.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-fetch-script`){let e=n.url,t=n.id;fetch(e).then(e=>e.ok?e.text():Promise.reject(Error(`HTTP ${e.status}`))).then(n=>{a.contentWindow?.postMessage({type:`sprinkle-fetch-script-response`,id:t,url:e,text:n},`*`)}).catch(n=>{a.contentWindow?.postMessage({type:`sprinkle-fetch-script-response`,id:t,url:e,error:n instanceof Error?n.message:String(n)},`*`)})}}},window.addEventListener(`message`,this.messageHandler);let s=this.collectThemeCSS(),c={},l=`slicc-sprinkle-ls:${t}:`;for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);t?.startsWith(l)&&(c[t.slice(l.length)]=localStorage.getItem(t)??``)}let u=this.bridge.getState(),d=``,f=``;if(i){let t=[];e.includes(`<slicc-editor`)&&t.push(fetch(chrome.runtime.getURL(`slicc-editor.js`)).then(e=>e.ok?e.text():``).then(e=>{d=e}).catch(()=>{})),e.includes(`<slicc-diff`)&&t.push(fetch(chrome.runtime.getURL(`slicc-diff.js`)).then(e=>e.ok?e.text():``).then(e=>{f=e}).catch(()=>{})),await Promise.all(t)}let p=await this.getLucideScript(),m=i?await o(e):e;a.contentWindow.postMessage({type:`sprinkle-render`,content:m,name:t,themeCSS:s,savedState:u,savedStorage:c,fullDoc:i,editorScript:d,diffScript:f,lucideScript:p,isLight:n()},`*`)}pushUpdate(e){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-update`,data:e},`*`)}pushDeviceEvent(e,t){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-device-event`,channel:e,payload:t},`*`)}collectThemeCSS(){return u()}generateBridgeScript(){return`(function() {
|
|
3
|
-
var _updateListeners = new Set();
|
|
4
|
-
var _hidInputReportListeners = new Set();
|
|
5
|
-
var _sprinkleName = '';
|
|
6
|
-
var _state = null;
|
|
7
|
-
var _cbId = 0;
|
|
8
|
-
var _callbacks = {};
|
|
9
|
-
|
|
10
|
-
window.addEventListener('message', function(event) {
|
|
11
|
-
var msg = event.data;
|
|
12
|
-
if (!msg || !msg.type) return;
|
|
13
|
-
if (msg.type === 'sprinkle-init') {
|
|
14
|
-
_sprinkleName = msg.name || '';
|
|
15
|
-
_state = msg.savedState || null;
|
|
16
|
-
if (window.slicc) window.slicc.name = _sprinkleName;
|
|
17
|
-
} else if (msg.type === 'sprinkle-update') {
|
|
18
|
-
_updateListeners.forEach(function(cb) { try { cb(msg.data); } catch(e) { console.error(e); } });
|
|
19
|
-
} else if (msg.type === 'sprinkle-device-event') {
|
|
20
|
-
if (msg.channel === 'hid:inputreport') {
|
|
21
|
-
_hidInputReportListeners.forEach(function(cb) {
|
|
22
|
-
try { cb(msg.payload); } catch(e) { console.error(e); }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
} else if (msg.type === 'slicc-theme') {
|
|
26
|
-
document.documentElement.classList.toggle('theme-light', !!msg.isLight);
|
|
27
|
-
} else if (msg.id && _callbacks[msg.id]) {
|
|
28
|
-
var cb = _callbacks[msg.id];
|
|
29
|
-
delete _callbacks[msg.id];
|
|
30
|
-
cb(msg);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
function _vfsCall(type, params, extractResult) {
|
|
35
|
-
return new Promise(function(resolve, reject) {
|
|
36
|
-
var id = ++_cbId;
|
|
37
|
-
_callbacks[id] = function(msg) {
|
|
38
|
-
if (msg.error) reject(new Error(msg.error));
|
|
39
|
-
else resolve(extractResult ? extractResult(msg) : undefined);
|
|
40
|
-
};
|
|
41
|
-
var m = { type: type, id: id };
|
|
42
|
-
if (params) { for (var k in params) m[k] = params[k]; }
|
|
43
|
-
parent.postMessage(m, '*');
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function _jshCall(op, args) {
|
|
48
|
-
return _vfsCall('sprinkle-jsh', { op: op, args: args }, function(m) { return m.result; });
|
|
49
|
-
}
|
|
50
|
-
function _deviceCall(channel, op, args) {
|
|
51
|
-
return _vfsCall('sprinkle-device-op', { channel: channel, op: op, args: args || [] },
|
|
52
|
-
function(m) { return m.result; });
|
|
53
|
-
}
|
|
54
|
-
function _b64ToU8(b64) {
|
|
55
|
-
var bin = atob(b64); var u8 = new Uint8Array(bin.length);
|
|
56
|
-
for (var i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);
|
|
57
|
-
return u8;
|
|
58
|
-
}
|
|
59
|
-
function _u8ToB64(bytes) {
|
|
60
|
-
var bin = ''; for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
|
|
61
|
-
return btoa(bin);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
var api = {
|
|
65
|
-
lick: function(event) {
|
|
66
|
-
var action, data;
|
|
67
|
-
if (typeof event === 'string') { action = event; } else { action = event.action; data = event.data; }
|
|
68
|
-
parent.postMessage({ type: 'sprinkle-lick', action: action, data: data }, '*');
|
|
69
|
-
},
|
|
70
|
-
on: function(event, callback) { if (event === 'update') _updateListeners.add(callback); },
|
|
71
|
-
off: function(event, callback) { if (event === 'update') _updateListeners.delete(callback); },
|
|
72
|
-
readFile: function(path) {
|
|
73
|
-
return _vfsCall('sprinkle-readfile', { path: path }, function(m) { return m.content; });
|
|
74
|
-
},
|
|
75
|
-
writeFile: function(path, content) {
|
|
76
|
-
return _vfsCall('sprinkle-writefile', { path: path, content: content });
|
|
77
|
-
},
|
|
78
|
-
readDir: function(path) {
|
|
79
|
-
return _vfsCall('sprinkle-readdir', { path: path }, function(m) { return m.entries; });
|
|
80
|
-
},
|
|
81
|
-
exists: function(path) {
|
|
82
|
-
return _vfsCall('sprinkle-exists', { path: path }, function(m) { return m.exists; });
|
|
83
|
-
},
|
|
84
|
-
stat: function(path) {
|
|
85
|
-
return _vfsCall('sprinkle-stat', { path: path }, function(m) { return m.stat; });
|
|
86
|
-
},
|
|
87
|
-
mkdir: function(path) {
|
|
88
|
-
return _vfsCall('sprinkle-mkdir', { path: path });
|
|
89
|
-
},
|
|
90
|
-
rm: function(path) {
|
|
91
|
-
return _vfsCall('sprinkle-rm', { path: path });
|
|
92
|
-
},
|
|
93
|
-
screenshot: function(selector) {
|
|
94
|
-
return new Promise(function(resolve, reject) {
|
|
95
|
-
try {
|
|
96
|
-
var target = selector ? document.querySelector(selector) : document.body;
|
|
97
|
-
if (!target) { reject(new Error('Element not found: ' + selector)); return; }
|
|
98
|
-
var rect = target.getBoundingClientRect();
|
|
99
|
-
var w = Math.ceil(rect.width);
|
|
100
|
-
var h = Math.ceil(rect.height);
|
|
101
|
-
if (w === 0 || h === 0) { reject(new Error('Element has zero dimensions')); return; }
|
|
102
|
-
var canvas = document.createElement('canvas');
|
|
103
|
-
var dpr = window.devicePixelRatio || 1;
|
|
104
|
-
canvas.width = w * dpr;
|
|
105
|
-
canvas.height = h * dpr;
|
|
106
|
-
var ctx = canvas.getContext('2d');
|
|
107
|
-
ctx.scale(dpr, dpr);
|
|
108
|
-
var clone = target.cloneNode(true);
|
|
109
|
-
var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + w + '" height="' + h + '">' +
|
|
110
|
-
'<foreignObject width="100%" height="100%">' +
|
|
111
|
-
new XMLSerializer().serializeToString(clone) +
|
|
112
|
-
'</foreignObject></svg>';
|
|
113
|
-
var img = new Image();
|
|
114
|
-
img.onload = function() { ctx.drawImage(img, 0, 0); resolve(canvas.toDataURL('image/png')); };
|
|
115
|
-
img.onerror = function() { reject(new Error('Screenshot rendering failed')); };
|
|
116
|
-
img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
|
|
117
|
-
} catch(e) { reject(e); }
|
|
118
|
-
});
|
|
119
|
-
},
|
|
120
|
-
setState: function(data) { _state = data; parent.postMessage({ type: 'sprinkle-set-state', data: data }, '*'); },
|
|
121
|
-
getState: function() { return _state; },
|
|
122
|
-
close: function() { parent.postMessage({ type: 'sprinkle-close' }, '*'); },
|
|
123
|
-
minimize: function() { parent.postMessage({ type: 'sprinkle-minimize' }, '*'); },
|
|
124
|
-
stopCone: function() { parent.postMessage({ type: 'sprinkle-stop-cone' }, '*'); },
|
|
125
|
-
attachImage: function(base64, name, mimeType) { parent.postMessage({ type: 'sprinkle-attach-image', base64: base64, name: name, mimeType: mimeType }, '*'); },
|
|
126
|
-
captureScreen: function() {
|
|
127
|
-
return _vfsCall('sprinkle-capture-screen', {}, function(m) {
|
|
128
|
-
return { base64: m.base64, width: m.width, height: m.height, mimeType: m.mimeType };
|
|
129
|
-
});
|
|
130
|
-
},
|
|
131
|
-
exec: Object.assign(function(cmd) {
|
|
132
|
-
return _vfsCall('sprinkle-exec', { cmd: cmd }, function(m) { return m.result; });
|
|
133
|
-
}, { spawn: function(argv) { return _jshCall('spawn', [argv]); } }),
|
|
134
|
-
agent: function(prompt, opts) {
|
|
135
|
-
return _vfsCall('sprinkle-agent', { prompt: prompt, opts: opts }, function(m) { return m.result; });
|
|
136
|
-
},
|
|
137
|
-
fetch: function(url, init) { return _jshCall('fetch', [url, init || null]); },
|
|
138
|
-
http: {
|
|
139
|
-
client: function(cfg) {
|
|
140
|
-
function mk(method) { return function(path, opts) { return _jshCall('http', [cfg, method, path, opts || null]); }; }
|
|
141
|
-
return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
browser: {
|
|
145
|
-
findTab: function(q) { return _jshCall('browser', ['findTab', q]); },
|
|
146
|
-
ensureTab: function(url, options) { return _jshCall('browser', ['ensureTab', url, options || {}]); },
|
|
147
|
-
eval: function(tab, code) { return _jshCall('browser', ['eval', tab, code]); },
|
|
148
|
-
evalAsync: function(tab, code) { return _jshCall('browser', ['evalAsync', tab, code]); },
|
|
149
|
-
cookie: function(tab, name) { return _jshCall('browser', ['cookie', tab, name]); },
|
|
150
|
-
localStorage: function(tab, key) { return _jshCall('browser', ['localStorage', tab, key]); },
|
|
151
|
-
fetch: function(tab, url, opts) { return _jshCall('browser', ['fetch', tab, url, opts || {}]); }
|
|
152
|
-
},
|
|
153
|
-
hid: {
|
|
154
|
-
list: function() { return _deviceCall('hid', 'list', []); },
|
|
155
|
-
request: function(filters) { return _deviceCall('hid', 'request', [filters || []]); },
|
|
156
|
-
open: function(handle) { return _deviceCall('hid', 'open', [handle]).then(function() {}); },
|
|
157
|
-
close: function(handle) { return _deviceCall('hid', 'close', [handle]).then(function() {}); },
|
|
158
|
-
sendReport: function(handle, reportId, data) {
|
|
159
|
-
return _deviceCall('hid', 'sendReport', [handle, reportId, data]).then(function() {});
|
|
160
|
-
},
|
|
161
|
-
on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
|
|
162
|
-
off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners['delete'](cb); }
|
|
163
|
-
},
|
|
164
|
-
serial: {
|
|
165
|
-
list: function() { return _deviceCall('serial', 'list', []); },
|
|
166
|
-
request: function(filters) { return _deviceCall('serial', 'request', [filters || []]); },
|
|
167
|
-
open: function(handle, options) { return _deviceCall('serial', 'open', [handle, options]).then(function() {}); },
|
|
168
|
-
close: function(handle) { return _deviceCall('serial', 'close', [handle]).then(function() {}); }
|
|
169
|
-
},
|
|
170
|
-
usb: {
|
|
171
|
-
list: function() { return _deviceCall('usb', 'list', []); },
|
|
172
|
-
request: function(filters) { return _deviceCall('usb', 'request', [filters || []]); },
|
|
173
|
-
open: function(handle) { return _deviceCall('usb', 'open', [handle]).then(function() {}); },
|
|
174
|
-
close: function(handle) { return _deviceCall('usb', 'close', [handle]).then(function() {}); }
|
|
175
|
-
},
|
|
176
|
-
readFileBinary: function(path) { return _jshCall('readFileBinary', [path]).then(function(r) { return _b64ToU8(r.base64); }); },
|
|
177
|
-
writeFileBinary: function(path, bytes) { return _jshCall('writeFileBinary', [path, _u8ToB64(bytes)]); },
|
|
178
|
-
fetchToFile: function(url, path) { return _jshCall('fetchToFile', [url, path]); },
|
|
179
|
-
_jsh: function(op, args) { return _jshCall(op, args); },
|
|
180
|
-
name: ''
|
|
181
|
-
};
|
|
182
|
-
window.slicc = api;
|
|
183
|
-
window.bridge = api;
|
|
184
|
-
})();`}async renderFullDoc(e,t){let i=`<script>${this.generateBridgeScript()}<\/script>`,a=this.collectThemeCSS(),o=a?`<style>${a}</style>`:``,s=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,c=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,l=`<script>(function(){try{if(${n()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+i+o+s+c+`<script src="/lucide-icons.js"><\/script>`,u,d=e.match(/<head\b[^>]*>/i);if(d){let t=d.index+d[0].length;u=e.slice(0,t)+l+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)u=e.slice(0,t.index)+l+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;u=e.slice(0,n)+l+e.slice(n)}else u=l+e}}let f=document.createElement(`iframe`);f.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),f.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`,f.srcdoc=u,this.iframe=f,await new Promise((e,n)=>{let i=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);f.addEventListener(`load`,()=>{clearTimeout(i),r(f.contentWindow);let n=this.bridge.getState();f.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),e()},{once:!0}),f.addEventListener(`error`,e=>{clearTimeout(i),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(f)}),this.messageHandler=e=>{if(e.source!==f.contentWindow)return;let t=e.data;t?.type&&(t.type===`sprinkle-lick`?this.bridge.lick({action:t.action,data:t.data}):t.type===`sprinkle-set-state`?this.bridge.setState(t.data):t.type===`sprinkle-close`?this.bridge.close():t.type===`sprinkle-minimize`?this.bridge.minimize():t.type===`sprinkle-stop-cone`?this.bridge.stopCone():t.type===`sprinkle-attach-image`?this.bridge.attachImage(t.base64,t.name,t.mimeType):t.type===`sprinkle-readfile`?this.bridge.readFile(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:t.id,content:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-writefile`?this.bridge.writeFile(t.path,t.content).then(()=>f.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-readdir`?this.bridge.readDir(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:t.id,entries:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-exists`?this.bridge.exists(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:t.id,exists:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-stat`?this.bridge.stat(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:t.id,stat:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-mkdir`?this.bridge.mkdir(t.path).then(()=>f.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-rm`?this.bridge.rm(t.path).then(()=>f.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-capture-screen`?this.bridge.captureScreen().then(e=>f.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:t.id,base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-exec`?this.bridge.exec(t.cmd).then(e=>f.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-agent`?this.bridge.agent(t.prompt,t.opts).then(e=>f.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-jsh`?this.bridge._jsh(t.op,t.args).then(e=>f.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-device-op`&&this.bridge._device(t.channel,t.op,t.args??[]).then(e=>f.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)))},window.addEventListener(`message`,this.messageHandler)}renderInline(t,n){if(t.includes(`<slicc-editor`)&&!customElements.get(`slicc-editor`)&&e(()=>import(`./slicc-editor-DKckizoI.js`),__vite__mapDeps([0,1,2])),t.includes(`<slicc-diff`)&&!customElements.get(`slicc-diff`)){let e=document.createElement(`script`);e.src=`/slicc-diff.js`,document.head.appendChild(e)}window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[n]=this.bridge,this.bridge._container=this.container;let r=document.createElement(`div`);r.className=`sprinkle-content`,r.innerHTML=t,this.container.appendChild(r);for(let e of r.querySelectorAll(`.fill[data-value]`)){let t=parseFloat(e.dataset.value||`0`);t>=0&&t<=100&&(e.style.width=`${t}%`)}let i=`window.__slicc_sprinkles[${JSON.stringify(n)}]`;for(let e of r.querySelectorAll(`[onclick]`)){let t=e.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(t)&&e.setAttribute(`onclick`,t.replace(/\b(slicc|bridge)\b/g,i))}let a=Array.from(r.querySelectorAll(`script`));for(let e of a){e.remove();let t=document.createElement(`script`);for(let n of e.attributes)t.setAttribute(n.name,n.value);if(!e.src){let n=new Set;for(let e of r.querySelectorAll(`[onclick]`)){let t=e.getAttribute(`onclick`)||``;for(let e of t.matchAll(/\b(\w+)\s*\(/g)){let t=e[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(t)||n.add(t)}}let a=[...n].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
|
|
185
|
-
`);t.textContent=`(function() { var slicc = ${i}; var bridge = slicc;\n`+e.textContent+(a?`
|
|
186
|
-
`+a:``)+`
|
|
187
|
-
})();`}r.appendChild(t),this.scripts.push(t)}}dispose(){this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(t(this.iframe.contentWindow),this.iframe.remove(),null);for(let e of this.scripts)e.remove();this.scripts=[];let e=this.container.querySelector(`.sprinkle-content`);e&&e.remove(),window.__slicc_sprinkles&&delete window.__slicc_sprinkles[this.bridge.name]}async getLucideScript(){return a.cachedLucideScript===null?(a.lucideScriptPromise===null&&(a.lucideScriptPromise=(async()=>{try{let e=await fetch(chrome.runtime.getURL(`lucide-icons.js`));if(e.ok){let t=await e.text();return a.cachedLucideScript=t,t}}catch{}return a.cachedLucideScript=``,``})()),a.lucideScriptPromise):a.cachedLucideScript}};function l(e,t){return e.replace(/url\(\s*['"]?([^'")]+)['"]?\s*\)/g,(e,n)=>{if(/^(https?:|data:|blob:)/i.test(n))return`url('${n}')`;try{return`url('${new URL(n,t).href}')`}catch{return`url('${n}')`}})}function u(){if(typeof getComputedStyle!=`function`)return``;let e=[],t=[],n=[],r=location.href,i=e=>e===`:root`||e===`:root.theme-light`||e.startsWith(`.theme-light `)||e===`.theme-light`||e.split(`,`).some(e=>{let t=e.trim();return t===`:root`||t===`:root.theme-light`||t.startsWith(`.theme-light `)||t===`.theme-light`});for(let a of document.styleSheets)try{for(let o of a.cssRules)if(o instanceof CSSFontFaceRule)e.push(l(o.cssText,r));else if(o instanceof CSSStyleRule){let e=o.selectorText;i(e)&&t.push(o.cssText),(e.includes(`.sprinkle-`)||e.includes(`.fill`))&&n.push(o.cssText)}}catch{}return e.join(`
|
|
188
|
-
`)+`
|
|
189
|
-
`+t.join(`
|
|
190
|
-
`)+`
|
|
191
|
-
`+n.join(`
|
|
192
|
-
`)}export{u as n,c as t};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-7ULV3ZpC.js","assets/dist-D69OmKNn.js","assets/preload-helper-CZgWQFsJ.js","assets/__vite-browser-external-SwrSgYTf.js","assets/rolldown-runtime-aKtaBQYM.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-C7d6hyOc.js","assets/account-store-WxYLKJl4.js","assets/context-compaction-DvlXtgVG.js","assets/logger-DDBAeTLF.js","assets/src-x0cJ68Fe.js","assets/proxied-fetch-DzLglfG5.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CC_yKaqL.js","assets/secrets-bridge-client-C3K9ItX4.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Cxo5lEqr.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-DjKgax8m.js","assets/transform-messages-DiIjWKhh.js","assets/main-CN__UqbO.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/messages-BD4p8GuF.js","assets/clipboard-DuHpK59o.js","assets/wc-permissions-registry-Blyunq37.js","assets/hid-device-registry-6w-g8ZpF.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-D-YdmmuG.js","assets/usb-device-registry-k6vTKonT.js","assets/icons-C5g936Qd.js","assets/tray-leader-ig4c4qTn.js","assets/shared-CrHp2zdc.js","assets/mime-types-ugOWOUZ9.js","assets/wc-shell-C0CueAzb.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-shell-WkeczD9x.css","assets/sprinkle-bridge-DL0PzEfD.js","assets/theme-Bgsl5v2i.js","assets/theme-engine-DqVfCCym.js","assets/sprinkle-renderer-BMzJnQXh.js","assets/follower-navigate-watcher-quUh7-CS.js","assets/navigation-watcher-C2s0i0h4.js","assets/handoff-link-w8LYa3Ua.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-CZgWQFsJ.js";import{t}from"./logger-DDBAeTLF.js";import{D as n,b as r,g as i,w as a,y as o}from"./main-CN__UqbO.js";import{n as s}from"./remote-cdp-transport-DTCu2BgA.js";import{i as c}from"./wc-shell-C0CueAzb.js";import{wireWcAttach as l}from"./wc-attach-MaQvCmrh.js";import{prepareWcShell as u,t as d}from"./wc-live-7ULV3ZpC.js";import{t as f}from"./page-follower-tray-CV8qYe5v.js";import{WcSprinkleZone as p}from"./wc-sprinkles-CG2B6a19.js";var m=t(`follower-switch-out`);function h(e,t){t.stopFollower();try{t.storage.removeItem(o),e.workerBaseUrl===null?t.storage.removeItem(r):t.storage.setItem(r,e.workerBaseUrl)}catch(e){m.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(),r=n(e);r!==e&&t.replaceHref(r)}catch(e){m.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var g=t(`wc-follower`),_={sendMessage:()=>{},onEvent:()=>()=>{},stop:()=>{}};function v(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 y(e,t,n,r){let i=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};r.files?(e.style.display=`none`,e.parentElement?.append(i(`Files live on the leader. A follower mirrors the leader's chat, sprinkles, and browser tabs - not its filesystem.`))):e.closest(`slicc-surface`)?.remove(),r.terminal?t.append(i(`The shell runs on the leader. A follower has no local terminal - drive the session through chat.`)):t.closest(`slicc-surface`)?.remove(),r.memory?n.append(i(`Memory lives on the leader. A follower has no local memory store.`)):n.closest(`slicc-surface`)?.remove()}var b={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,newSprinkle:!0,monitor:!0};function x(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(`,
|
|
3
|
-
`)}{display:none!important;}`:``;e.history||(r+=`
|
|
4
|
-
.wcui-appcol{padding-left:0!important;}`),n.textContent=r,document.head.append(n)}}async function S(t,n,r){let o=r===`cherry`,m;try{m=await i({runtimeMode:r,envBaseUrl:null,window,log:n})}catch(e){let n=e instanceof Error?e.message:String(e);g.error(`follower prelude failed`,{runtimeMode:r,error:n}),v(t,n);return}let S=o?m.cherryJoinUrl:a(window.location.href,window.localStorage);if(!S){g.error(`follower mount with no join URL - falling back to live boot`);let{mountWcUiLive:r}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-7ULV3ZpC.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]));return r(t,n,`standalone`)}let C=u(t,o?`cherry · follower`:`follower`),w=o&&m.cherryTransport?m.cherryTransport.features:b;if(y(C.refs.fileTree,C.refs.termSurface,C.refs.memoryHost,w),x(w),o&&m.cherryTransport?.theme){let{applyCherryTheme:t}=await e(async()=>{let{applyCherryTheme:e}=await import(`./theme-engine-DqVfCCym.js`).then(e=>e.f);return{applyCherryTheme:e}},__vite__mapDeps([39,4,9]));t(m.cherryTransport.theme)}let T=new d({thread:C.refs.thread,agent:_,onQueuedChange:e=>{C.refs.queuedStack.setMessages(e)}});C.setController(T);let E=`Connecting to leader…`,D=(e,t)=>{C.refs.inputCard.setAttribute(`placeholder`,t),e?C.refs.inputCard.removeAttribute(`disabled`):C.refs.inputCard.setAttribute(`disabled`,``)};D(!1,E);let O=l({inputCard:C.refs.inputCard,freezer:C.refs.freezer,composer:C.refs.composer,log:g});C.refs.inputCard.addEventListener(`submit`,e=>{let t=c(e)??``,n=O.take();(t.trim()||n.length)&&(T.sendUserMessage(t,n),C.refs.inputCard.clear?.())});let k=new p(C.refs).callbacks(),A=f({joinUrl:S,runtime:o?s:`slicc-standalone`,browserAPI:m.browser,onSnapshot:e=>T.loadMessages(e),onUserMessage:(e,t,n,r)=>T.addUserMessage(e,r),onStatus:e=>T.setProcessing(e===`processing`),setChatAgent:e=>T.setAgent(e),onConnectionChange:e=>{D(e,e?`Ask the leader, or describe a change…`:E),o&&m.cherryTransport?.emitSliccEventToHost(e?`slicc.follower.ready`:`slicc.follower.disconnected`)},onGaveUp:e=>{g.error(`follower gave up reaching the leader`,{error:e}),D(!1,`Couldn't reach the leader. Reload to retry.`),o&&m.cherryTransport?.emitSliccEventToHost(`slicc.follower.disconnected`)},addSprinkle:k.addSprinkle,removeSprinkle:k.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):g.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},...o?{onCherrySliccEvent:(e,t)=>m.cherryTransport?.emitSliccEventToHost(e,t)}:{}});o&&m.cherryTransport&&(m.cherryTransport.onHostEvent=(e,t)=>A.currentSync?.sendCherryHostEvent(e,t));let j=null;if(!o){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-quUh7-CS.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([41,9,42,43]));j=t(m.realCdpTransport,()=>A.currentSync)}C.refs.avatarMenu.items=[{kind:`separator`},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}],C.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=>{h({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{j?.(),A.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),g.info(`follower mounted`,{runtimeMode:r,isCherry:o})}export{S as mountWcUiFollower};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DmJSNs0I.js","assets/rolldown-runtime-aKtaBQYM.js","assets/panel-rpc-handlers-CwACzy8T.js","assets/preload-helper-CZgWQFsJ.js","assets/account-store-WxYLKJl4.js","assets/dist-D69OmKNn.js","assets/__vite-browser-external-SwrSgYTf.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-C7d6hyOc.js","assets/context-compaction-DvlXtgVG.js","assets/logger-DDBAeTLF.js","assets/src-x0cJ68Fe.js","assets/proxied-fetch-DzLglfG5.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-CC_yKaqL.js","assets/secrets-bridge-client-C3K9ItX4.js","assets/tool-ui-DfXu6quJ.js","assets/providers-Cxo5lEqr.js","assets/bedrock-camp-DjKgax8m.js","assets/transform-messages-DiIjWKhh.js","assets/main-CN__UqbO.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/messages-BD4p8GuF.js","assets/clipboard-DuHpK59o.js","assets/hid-device-registry-6w-g8ZpF.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-D-YdmmuG.js","assets/usb-device-registry-k6vTKonT.js","assets/wc-permissions-registry-Blyunq37.js","assets/tray-leader-ig4c4qTn.js","assets/remote-cdp-transport-DTCu2BgA.js","assets/hosted-config-apply-uAym2aS5.js","assets/theme-engine-DqVfCCym.js","assets/legacy-styles-CF6h7ytf.js","assets/tray-leave-runtime-BjTWTK0U.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-CZgWQFsJ.js";import{P as t,R as n}from"./account-store-WxYLKJl4.js";import{a as r}from"./context-compaction-DvlXtgVG.js";import{t as i}from"./logger-DDBAeTLF.js";import{i as a}from"./src-x0cJ68Fe.js";import{a as o,t as s}from"./proxied-fetch-DzLglfG5.js";import{r as c}from"./panel-rpc-DmJSNs0I.js";import{E as l,b as u,d,f,h as p,x as m,y as h}from"./main-CN__UqbO.js";import{a as g,c as _,i as v,l as y,o as ee,t as te}from"./remote-cdp-transport-DTCu2BgA.js";import"./browser-2wdq8OwU.js";import{i as ne,n as b,t as x}from"./tray-leader-ig4c4qTn.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./page-follower-tray-CV8qYe5v.js";i(`scoops.tray-leave`),i(`scoops.tray-join`);var O=null;function k(e){O=e}function A(){return O?.()??[]}var j=`slicc.leaderTrayFollowers`;function M(e,t=globalThis.localStorage){try{t?.setItem(j,JSON.stringify(e))}catch{}}async function N(t){let{instanceId:n,browser:r,remoteCdpBridge:i,remoteCdpPushChannel:a,getLeader:o,performTrayLeaveLocally:s,window:c}=t,{installPanelRpcHandler:u,createPanelRpcEventEmitter:d}=await e(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await import(`./panel-rpc-DmJSNs0I.js`).then(e=>e.i);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},__vite__mapDeps([0,1])),{createStandalonePanelRpcHandlers:f}=await e(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-CwACzy8T.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17,0,18,19,20,21,22,23,24,25,26,27])),{getLeaderPermissionsSurface:p}=await e(async()=>{let{getLeaderPermissionsSurface:e}=await import(`./wc-permissions-registry-Blyunq37.js`).then(e=>e.r);return{getLeaderPermissionsSurface:e}},__vite__mapDeps([28,1])),m=d({instanceId:n}),h=u({instanceId:n,handlers:f({resetTray:async()=>{let e=o();if(!e)throw Error(`no active tray session to reset`);return await e.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await s({workerBaseUrl:e,requestId:t}),joinTray:({joinUrl:e})=>(l(c.localStorage,e),c.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e}})),{joinUrl:e}),emitEvent:(e,t)=>m.emit(e,t),emitCherrySliccEvent:(e,t,n)=>o()?.sync.emitCherrySliccEvent(e,t,n)??!1,mintPreview:async({entryPath:t,servedRoot:n,bridge:r,noBridge:i})=>{let a=o()?.currentLeaderSync;if(!a)throw Error(`serve: no active leader tray; cannot mint preview`);let{getLeaderTrayRuntimeStatus:s}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-ig4c4qTn.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([29,1,10,12,3,11,13,20,21,4,5,6,7,8,9,14,15,16,17,0,18,19,22,23])),c=s().session;if(!c)throw Error(`serve: leader tray has no active session`);let l=new URL(c.controllerUrl).pathname.split(`/`).pop()??``,{CHERRY_RUNTIME_TAG:u}=await e(async()=>{let{CHERRY_RUNTIME_TAG:e}=await import(`./remote-cdp-transport-DTCu2BgA.js`).then(e=>e.u);return{CHERRY_RUNTIME_TAG:e}},__vite__mapDeps([30,1,10])),{mintPreviewViaWorker:d}=await e(async()=>{let{mintPreviewViaWorker:e}=await import(`./preview-mint-client-0bViE0n9.js`);return{mintPreviewViaWorker:e}},[]),f=a.getConnectedFollowers().some(e=>e.runtime===u),p=!i&&(r||f),{url:m}=await d({workerBaseUrl:c.workerBaseUrl,trayId:c.trayId,controllerToken:l,servedRoot:n,entryPath:t,allowLive:p});return a.broadcastPreviewOpen(m),{url:m,pushed:a.getConnectedFollowers().length}},listRemoteTargets:()=>r.listAllTargets(),remoteCdp:i,getPermissionsSurface:()=>p()})});c.addEventListener(`beforeunload`,()=>{h(),m.dispose(),i.disposeAll(),a?.close()},{once:!0})}async function P(r){let{log:i}=r;await new Promise(e=>setTimeout(e,5e3));try{let r=await fetch(o(`/api/hosted-bootstrap`),{signal:AbortSignal.timeout(1e4),headers:s()});if(!r.ok)return;let a=await r.json(),c=a.accounts??(a.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:a.adobeImsToken}]:[]);a.model?localStorage.setItem(`selected-model`,a.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`);let[{applyHostedAccounts:l,prewarmHostedModels:u},d]=await Promise.all([e(()=>import(`./hosted-config-apply-uAym2aS5.js`),__vite__mapDeps([31,10])),e(()=>import(`./main-CN__UqbO.js`).then(e=>e.t),__vite__mapDeps([20,1,21,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,18,19,22,23]))]);await u(c,{getRefreshModels:e=>d.getProviderConfig(e).refreshModels});let f=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await l(c,{saveOAuthAccount:n,addAccount:d.addAccount,removeAccount:t,currentProviderIds:()=>d.getAccounts().map(e=>e.providerId),previouslyManaged:()=>f}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(c.map(e=>e.providerId))),i.info(`hosted-leader: cone config applied`,{count:c.length})}catch(e){i.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}}function F(e,t){if(!e||!t||!e.startsWith(`/`)||t===`/`||/%2[eE]/.test(e)||e.split(`/`).some(e=>e===`.`||e===`..`))return!1;let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n?!0:e.startsWith(n+`/`)}var I=64*1024;async function L(e,t,n){let{reqId:r,servedRoot:i,asText:o}=e,s=e.vfsPath;if(!F(s,i)){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}try{if((await n.stat(s)).type===`directory`&&(s=s.replace(/\/?$/,`/`)+`index.html`,!F(s,i))){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}}catch{}let c,l;try{o?(c=await n.readFile(s,{encoding:`utf-8`}),l=`utf-8`):(c=a(await n.readFile(s,{encoding:`binary`})),l=`base64`)}catch(e){e?.code===`ENOENT`?t.send({type:`preview.response`,reqId:r,ok:!1,status:404}):t.send({type:`preview.response`,reqId:r,ok:!1,status:500,reason:String(e?.message??e)});return}let u=z(s),d=R(c,I);for(let e=0;e<d.length;e++)t.send({type:`preview.response`,reqId:r,ok:!0,mime:u,chunkIndex:e,totalChunks:d.length,content:d[e],encoding:l})}function R(e,t){if(e.length<=t)return[e];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function z(e){return/\.html?$/i.test(e)?`text/html`:/\.css$/i.test(e)?`text/css`:/\.m?js$/i.test(e)?`application/javascript`:/\.json$/i.test(e)?`application/json`:/\.svg$/i.test(e)?`image/svg+xml`:/\.png$/i.test(e)?`image/png`:/\.jpe?g$/i.test(e)?`image/jpeg`:/\.gif$/i.test(e)?`image/gif`:/\.webp$/i.test(e)?`image/webp`:/\.ico$/i.test(e)?`image/x-icon`:/\.woff2$/i.test(e)?`font/woff2`:/\.woff$/i.test(e)?`font/woff`:/\.ttf$/i.test(e)?`font/ttf`:/\.mp4$/i.test(e)?`video/mp4`:/\.webm$/i.test(e)?`video/webm`:/\.mp3$/i.test(e)?`audio/mpeg`:/\.pdf$/i.test(e)?`application/pdf`:/\.xml$/i.test(e)?`application/xml`:/\.wasm$/i.test(e)?`application/wasm`:`application/octet-stream`}i(`lick-manager`);var B=new Set([`navigate`]),V=class{runtimes=new Map;dirty=!1;setTargets(e,t){this.runtimes.set(e,t),this.dirty=!0}removeRuntime(e){this.runtimes.delete(e)&&(this.dirty=!0)}getEntries(){this.dirty=!1;let e=[];for(let[t,n]of this.runtimes)for(let r of n)e.push({targetId:`${t}:${r.targetId}`,localTargetId:r.targetId,runtimeId:t,title:r.title,url:r.url,isLocal:!1,kind:r.kind??`browser`,capabilities:r.capabilities});return e}hasChanged(){return this.dirty}getRuntimeIds(){return[...this.runtimes.keys()]}},H=i(`tray-leader-sync`);function U(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function W(e,t){switch(e){case`extension`:return`extension follower`;case`standalone`:return`standalone follower`;case`electron`:return`Electron follower`;case`ios`:return`iOS follower`;default:return t?`follower (${t})`:`follower`}}function G(e){return e.kind===`cherry`}function re(e,t){return e.filter(e=>G(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var K=class e{options;followers=new Map;registry=new V;runtimeToBootstrap=new Map;pendingCDPRoutes=new Map;cdpChunkBuffers=new Map;remoteTransports=new Map;pendingTabOpenRoutes=new Map;tabOpenResolvers=new Map;pendingFsRoutes=new Map;fsResolvers=new Map;constructor(e){this.options=e}addFollower(e,t,n){this.removeFollower(e);let r=v(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new S({sendPing:()=>r.send({type:`ping`}),onDead:()=>{H.warn(`Follower keepalive dead, removing follower`,{bootstrapId:e}),this.removeFollower(e),this.options.onFollowerDead?.(e)}});a.start(),this.followers.set(e,{bootstrapId:e,sync:r,unsubscribe:i,keepalive:a,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:Date.now(),floatType:U(n?.runtime)}),H.info(`Follower added to sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size),this.sendSnapshotToFollower(e),this.sendScoopsListToFollower(e),this.sendSprinklesListToFollower(e);let o=this.getConnectedEntries();o.length>0&&r.send({type:`targets.registry`,targets:o})}removeFollower(e){let t=this.followers.get(e);if(t){t.keepalive.stop(),t.unsubscribe(),t.sync.close(),this.followers.delete(e),this.followerBroadcastErrorLogAt.delete(e);for(let[t,n]of this.runtimeToBootstrap)if(n===e){this.cleanupRemoteTransports(t),this.registry.removeRuntime(t),this.runtimeToBootstrap.delete(t);break}this.registry.hasChanged()&&this.broadcastTargetRegistry(),H.info(`Follower removed from sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size)}}followerBroadcastErrorLogAt=new Map;static BROADCAST_ERROR_THROTTLE_MS=6e4;broadcastToAllFollowers(t){let n=performance.now();for(let[r,i]of this.followers)try{i.sync.send(t),this.followerBroadcastErrorLogAt.delete(r)}catch(i){n-(this.followerBroadcastErrorLogAt.get(r)??-1/0)>e.BROADCAST_ERROR_THROTTLE_MS&&(this.followerBroadcastErrorLogAt.set(r,n),H.error(`Broadcast send to follower failed (channel may be stuck)`,{bootstrapId:r,messageType:t.type,error:i instanceof Error?i.message:String(i)}))}}broadcastEvent(e){if(this.followers.size===0)return;let t={type:`agent_event`,event:e,scoopJid:this.options.getScoopJid()};this.broadcastToAllFollowers(t)}broadcastUserMessage(e,t,n){if(this.followers.size===0)return;let i={type:`user_message_echo`,text:e,messageId:t,scoopJid:this.options.getScoopJid(),attachments:n?.length?r(n):n};this.broadcastToAllFollowers(i)}broadcastStatus(e){if(this.followers.size===0)return;let t={type:`status`,scoopStatus:e};this.broadcastToAllFollowers(t)}async sendSnapshotToFollower(e,t){let n=this.followers.get(e);if(!n)return;let r=t??n.selectedScoopJid??this.options.getScoopJid(),i;if(this.options.getMessagesForScoop&&r!==this.options.getScoopJid())try{i=await Promise.resolve(this.options.getMessagesForScoop(r))}catch(e){H.warn(`getMessagesForScoop failed, falling back to active scoop`,{targetJid:r,error:e instanceof Error?e.message:String(e)}),i=this.options.getMessages()}else i=this.options.getMessages();n.selectedScoopJid=r,y(n.sync,i,r),H.debug(`Snapshot sent to follower`,{bootstrapId:e,messageCount:i.length,scoopJid:r})}sendScoopsListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getScoops;if(n)try{let e=n(),r=this.options.getScoopJid();t.sync.send({type:`scoops.list`,scoops:e,activeScoopJid:r})}catch(t){H.warn(`Failed to send scoops.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}sendSprinklesListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getSprinkles;if(n)try{let e=n();t.sync.send({type:`sprinkles.list`,sprinkles:e})}catch(t){H.warn(`Failed to send sprinkles.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}broadcastScoopsList(){if(this.followers.size===0)return;let e=this.options.getScoops;if(!e)return;let t;try{t=e()}catch(e){H.warn(`Failed to compute scoops list`,{error:e instanceof Error?e.message:String(e)});return}let n=this.options.getScoopJid(),r={type:`scoops.list`,scoops:t,activeScoopJid:n};this.broadcastToAllFollowers(r)}broadcastSprinklesList(){if(this.followers.size===0)return;let e=this.options.getSprinkles;if(!e)return;let t;try{t=e()}catch(e){H.warn(`Failed to compute sprinkles list`,{error:e instanceof Error?e.message:String(e)});return}let n={type:`sprinkles.list`,sprinkles:t};this.broadcastToAllFollowers(n)}broadcastSprinkleUpdate(e,t){if(this.followers.size===0)return;let n={type:`sprinkle.update`,sprinkleName:e,data:t};this.broadcastToAllFollowers(n)}broadcastTheme(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`theme.apply`,themeJson:e})}broadcastSprinkleReloaded(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`sprinkle.reloaded`,sprinkleName:e})}broadcastPreviewOpen(e){if(this.followers.size===0)return;let t=`prv-${crypto.randomUUID()}`;this.broadcastToAllFollowers({type:`preview.open`,requestId:t,url:e})}static SPRINKLE_CHUNK_SIZE=32*1024;static SPRINKLE_CHUNK_THRESHOLD=64*1024;async handleSprinkleFetch(t,n,r){let i=this.followers.get(t);if(!i)return;let a=this.options.readSprinkleContent;if(!a){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Leader has no sprinkle content reader`});return}let o=null;try{o=await Promise.resolve(a(r))}catch(e){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:e instanceof Error?e.message:String(e)});return}if(o==null){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Sprinkle not found: ${r}`});return}if(o.length<=e.SPRINKLE_CHUNK_THRESHOLD){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:o});return}let s=e.SPRINKLE_CHUNK_SIZE,c=Math.ceil(o.length/s);for(let e=0;e<c;e++){let t=o.slice(e*s,(e+1)*s);i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:t,chunkIndex:e,totalChunks:c})}}handleFollowerUserMessage(e,t){H.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?r(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n)}handleFollowerSprinkleLick(e,t){H.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=W(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){H.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerLick(e,t){let n=t.event;if(!n||!B.has(n.type)){H.warn(`Rejecting malformed or non-forwardable lick from follower`,{bootstrapId:e,type:n?.type});return}let r=this.followers.get(e),{targetScoop:i,...a}=n,o={...a,originFollowerId:e,originLabel:W(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){H.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerTargetsAdvertise(e,t){H.info(`Follower targets advertised`,{bootstrapId:e,runtimeId:t.runtimeId,targetCount:t.targets.length});for(let e of[...this.remoteTransports.keys()]){let n=e.substring(0,e.indexOf(`:`));n!==`leader`&&!this.runtimeToBootstrap.has(n)&&n!==t.runtimeId&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),H.debug(`Cleaned up orphaned remote transport on advertise`,{key:e}))}this.runtimeToBootstrap.set(t.runtimeId,e),this.registry.setTargets(t.runtimeId,t.targets),this.broadcastTargetRegistry()}handleFollowerMessage(e,t){switch(t.type){case`user_message`:this.handleFollowerUserMessage(e,t);break;case`abort`:H.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:H.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{H.info(`Follower selected scoop`,{bootstrapId:e,scoopJid:t.scoopJid});let n=this.followers.get(e);n&&(n.selectedScoopJid=t.scoopJid,this.sendSnapshotToFollower(e,t.scoopJid));break}case`sprinkles.refresh`:H.info(`Follower requested sprinkles refresh`,{bootstrapId:e}),this.sendSprinklesListToFollower(e);break;case`sprinkle.fetch`:this.handleSprinkleFetch(e,t.requestId,t.sprinkleName);break;case`sprinkle.lick`:this.handleFollowerSprinkleLick(e,t);break;case`lick`:this.handleFollowerLick(e,t);break;case`targets.advertise`:this.handleFollowerTargetsAdvertise(e,t);break;case`cdp.request`:{let{requestId:n,targetRuntimeId:r,localTargetId:i,method:a,params:o,sessionId:s}=t;r===`leader`?this.executeLocalCDP(n,i,a,o,s,e):this.forwardCDPRequest(n,r,i,a,o,s,e);break}case`cdp.response`:this.handleCDPResponse(t);break;case`cdp.event`:this.handleCDPEvent(e,t.method,t.params,t.sessionId);break;case`tab.open`:{let{requestId:n,targetRuntimeId:r,url:i}=t;r===`leader`?this.executeLocalTabOpen(n,i,e):this.forwardTabOpen(n,r,i,e);break}case`tab.opened`:this.handleTabOpenResponse(t.requestId,t.targetId);break;case`tab.open.error`:this.handleTabOpenError(t.requestId,t.error);break;case`fs.request`:{let{requestId:n,targetRuntimeId:r,request:i}=t;r===`leader`?this.executeLocalFs(n,i,e):this.forwardFsRequest(n,r,i,e);break}case`fs.response`:this.handleFsResponse(t.requestId,t.response);break;case`cherry.host_event`:this.routeCherryHostEvent(e,t);break;case`ping`:{let t=this.followers.get(e);t&&(t.keepalive.receivePing(),t.lastActivity=Date.now(),t.sync.send({type:`pong`}));break}case`pong`:{let t=this.followers.get(e);t&&(t.keepalive.receivePong(),t.lastActivity=Date.now());break}}}setLocalTargets(e){this.registry.setTargets(`leader`,e),this.registry.hasChanged()&&this.broadcastTargetRegistry()}broadcastTargetRegistry(){if(this.followers.size===0)return;let e={type:`targets.registry`,targets:this.getConnectedEntries()};this.broadcastToAllFollowers(e)}getTargets(){return this.getConnectedEntries()}getConnectedEntries(){return this.registry.getEntries().filter(e=>{if(e.runtimeId===`leader`)return!0;let t=this.runtimeToBootstrap.get(e.runtimeId);return t?this.followers.has(t):!1})}createRemoteTransport(e,t){let n=new te({sendCDPRequest:(n,r,i,a)=>{let o=this.runtimeToBootstrap.get(e),s=o?this.followers.get(o):void 0;if(!s){this.remoteTransports.get(`${e}:${t}`)?.handleResponse(n,void 0,`Target runtime "${e}" not connected`);return}this.pendingCDPRoutes.set(n,{requesterBootstrapId:`__leader__`,requestId:n}),s.sync.send({type:`cdp.request`,requestId:n,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))}cleanupRemoteTransports(e){let t=`${e}:`;for(let e of[...this.remoteTransports.keys()])e.startsWith(t)&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),H.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){H.warn(`onRemoteTransportsCleaned handler threw`,{runtimeId:e,error:t instanceof Error?t.message:String(t)})}}getConnectedFollowers(){return[...this.runtimeToBootstrap.entries()].map(([e,t])=>{let n=this.followers.get(t);return{runtimeId:e,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:n?.lastActivity,floatType:n?.floatType}})}canRuntimeServeTeleport(e,t){if(t.runtime===`slicc-cherry`)return!1;let n=this.registry.getEntries().filter(t=>t.runtimeId===e);return n.length===0?!0:re(n,{requireNetwork:!0}).length>0}getBestFollowerForTeleport(){let e=[];for(let[t,n]of this.runtimeToBootstrap){let r=this.followers.get(n);r&&this.canRuntimeServeTeleport(t,r)&&e.push({runtimeId:t,bootstrapId:n,floatType:r.floatType,lastActivity:r.lastActivity})}if(e.length===0)return null;let t=e.filter(e=>e.floatType===`standalone`),n=t.length>0?t:e;return n.sort((e,t)=>t.lastActivity-e.lastActivity),n[0]}get hasFollowers(){return this.followers.size>0}stop(){for(let e of[...this.followers.keys()])this.removeFollower(e)}async executeLocalCDP(e,t,n,r,i,a){let o=this.followers.get(a);if(!o)return;let s=this.options.browserTransport;if(!s){o.sync.send({type:`cdp.response`,requestId:e,error:`Leader has no browser transport`});return}try{let t=await s.send(n,r,i);_(o.sync,e,t)}catch(t){o.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardCDPRequest(e,t,n,r,i,a,o){let s=this.runtimeToBootstrap.get(t),c=s?this.followers.get(s):void 0,l=this.followers.get(o);if(!c){l&&l.sync.send({type:`cdp.response`,requestId:e,error:`Target runtime "${t}" not connected`});return}this.pendingCDPRoutes.set(e,{requesterBootstrapId:o,requestId:e}),c.sync.send({type:`cdp.request`,requestId:e,localTargetId:n,method:r,params:i,sessionId:a})}handleCDPResponse(e){let{requestId:t}=e,n=this.pendingCDPRoutes.get(t);if(!n)return;let r=ee(this.cdpChunkBuffers,e);if(!r)return;if(this.pendingCDPRoutes.delete(t),n.requesterBootstrapId===`__leader__`){for(let e of this.remoteTransports.values())e.handleResponse(t,r.result,r.error);return}let i=this.followers.get(n.requesterBootstrapId);i&&_(i.sync,t,r.result,r.error)}handleCDPEvent(e,t,n,r){let i;for(let[t,n]of this.runtimeToBootstrap)if(n===e){i=t;break}if(!i)return;let a=`${i}:`;for(let[e,r]of this.remoteTransports)e.startsWith(a)&&r.handleEvent(t,n)}runtimeIdForBootstrap(e){for(let[t,n]of this.runtimeToBootstrap)if(n===e)return t}routeCherryHostEvent(e,t){if(!g(t))return;let n=this.options.onCherryHostEvent;if(!n){H.debug(`cherry.host_event received but no onCherryHostEvent wired`,{bootstrapId:e,name:t.name});return}let r=this.runtimeIdForBootstrap(e);try{n(r,t.name,t.detail)}catch(n){H.warn(`Failed to route cherry.host_event to cone`,{bootstrapId:e,name:t.name,error:n instanceof Error?n.message:String(n)})}}emitCherrySliccEvent(e,t,n){let r=e.indexOf(`:`),i=r>=0?e.slice(0,r):e,a=this.runtimeToBootstrap.get(i),o=a?this.followers.get(a):void 0;return o?o.sync.send({type:`cherry.slicc_event`,targetId:e,name:t,detail:n}):(H.warn(`emitCherrySliccEvent: owning follower not connected`,{targetId:e,name:t}),!1)}canRuntimeOpenTab(e){let t=this.registry.getEntries().filter(t=>t.runtimeId===e);return t.length===0?!0:t.some(e=>!G(e))}openRemoteTab(e,t){let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.reject(Error(`Target runtime "${e}" not connected`));if(!this.canRuntimeOpenTab(e))return Promise.reject(Error(`Target runtime "${e}" is a cherry host that cannot open tabs`));let i=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.tabOpenResolvers.set(i,{resolve:e,reject:n}),this.pendingTabOpenRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i}),r.sync.send({type:`tab.open`,requestId:i,url:t})})}async executeLocalTabOpen(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.browserTransport;if(!i){r.sync.send({type:`tab.open.error`,requestId:e,error:`Leader has no browser transport`});return}try{let n=(await i.send(`Target.createTarget`,{url:t,background:!0})).targetId;r.sync.send({type:`tab.opened`,requestId:e,targetId:`leader:${n}`})}catch(t){r.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardTabOpen(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" not connected`});return}if(!this.canRuntimeOpenTab(t)){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" is a cherry host that cannot open tabs`});return}this.pendingTabOpenRoutes.set(e,{requesterBootstrapId:r,requestId:e}),a.sync.send({type:`tab.open`,requestId:e,url:n})}handleTabOpenResponse(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.resolve(t));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.opened`,requestId:e,targetId:t})}handleTabOpenError(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.reject(Error(t)));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.open.error`,requestId:e,error:t})}async executeLocalFs(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.vfs;if(!i){r.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Leader has no VFS`}});return}let a=await C(i,t);for(let t of a)r.sync.send({type:`fs.response`,requestId:e,response:t})}forwardFsRequest(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Target runtime "${t}" not connected`}});return}this.pendingFsRoutes.set(e,{requesterBootstrapId:r,requestId:e,chunks:[],totalChunks:1}),a.sync.send({type:`fs.request`,requestId:e,request:n})}handleFsResponse(e,t){let n=this.pendingFsRoutes.get(e);if(!n){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}return}if(n.requesterBootstrapId===`__leader__`){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),this.pendingFsRoutes.delete(e),n.resolve(n.responses))}return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`fs.response`,requestId:e,response:t}),n.chunks.push(t),n.totalChunks=t.ok&&t.totalChunks||1,n.chunks.length>=n.totalChunks&&this.pendingFsRoutes.delete(e)}sendFsRequest(e,t){if(e===`leader`){let e=this.options.vfs;return e?C(e,t):Promise.resolve([{ok:!1,error:`Leader has no VFS`}])}let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.resolve([{ok:!1,error:`Target runtime "${e}" not connected`}]);let i=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.fsResolvers.set(i,{resolve:e,reject:n,responses:[]}),this.pendingFsRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i,chunks:[],totalChunks:1}),r.sync.send({type:`fs.request`,requestId:i,request:t})})}},q=i(`page-leader-tray`);function J(e){return new K({getMessages:e.getMessages,getMessagesForScoop:e.getMessagesForScoop,getScoopJid:e.getScoopJid,getScoops:e.getScoops,getSprinkles:e.getSprinkles,readSprinkleContent:e.readSprinkleContent,onSprinkleLick:e.onSprinkleLick,onForwardedLick:e.onForwardedLick,onFollowerMessage:e.onFollowerMessage,onFollowerAbort:e.onFollowerAbort,onFollowerCountChanged:e.onFollowerCountChanged,onRemoteTransportsCleaned:e.onRemoteTransportsCleaned,onCherryHostEvent:e.onCherryHostEvent,browserAPI:e.browserAPI,browserTransport:e.browserTransport,vfs:e.vfs})}function Y(e,t){return new E({sendControlMessage:t=>e().sendControlMessage(t),onPeerConnected:(e,n)=>{q.info(`Tray follower data channel opened`,{controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,runtime:e.runtime}),t.addFollower(e.bootstrapId,n,{runtime:e.runtime,connectedAt:e.connectedAt??void 0})},onPeerDisconnected:(e,t)=>{q.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}})}function X(e,t,n,r,i){return new x({workerBaseUrl:e.workerBaseUrl,runtime:e.runtime??`slicc-standalone`,...e.kind?{kind:e.kind}:{},...e.onLeaderReady?{onLeaderReady:e.onLeaderReady}:{},fetchImpl:n,...e._storeOverride?{store:e._storeOverride}:{},...e._webSocketFactory?{webSocketFactory:e._webSocketFactory}:{},onControlMessage:n=>{if(n.type===`webhook.event`){e.sendWebhookEvent(n.webhookId,n.headers,n.body);return}if(n.type===`preview.request`){let t=e.vfs;if(!t){i().sendControlMessage({type:`preview.response`,reqId:n.reqId,ok:!1,status:500,reason:`leader has no VFS bound`});return}L(n,{send:e=>i().sendControlMessage(e)},t).catch(e=>{q.error(`preview.request handling failed`,{error:e instanceof Error?e.message:String(e)})});return}if(n.type===`preview.revoked`){q.info(`Preview revoked by worker`,{previewToken:n.previewToken});return}t.handleControlMessage(n).catch(e=>{q.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{q.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{q.info(`Leader tray reconnected`,{trayId:e.trayId}),r(e)},onReconnectGaveUp:(e,t)=>{q.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}})}function ie(e,t){let n=new T(q,{failureMessage:`Leader CDP target refresh failed (best-effort, throttled)`,recoveryMessage:`Leader CDP target refresh recovered (stable for debounce window)`});return async()=>{let r;try{r=await e.browserAPI.listPages()}catch(e){n.reportFailure(e);return}n.reportSuccess();try{let e=r.map(e=>({targetId:e.targetId,title:e.title,url:e.url}));t.setLocalTargets(e)}catch(e){q.error(`Leader target broadcast failed (sync.setLocalTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}}function ae(e,t){return setInterval(()=>{try{e.broadcastScoopsList(),e.broadcastSprinklesList()}catch(e){q.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t)}function oe(e){return t=>{let n=e._historyOverride??se();if(n)try{let e=m(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){q.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}}function Z(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i=oe(e),a=J(e);e.browserAPI.setTrayTargetProvider(a);let o=Y(()=>r,a);r=X(e,o,n,i,()=>r);let s=e.onAgentEvent(e=>a.broadcastEvent(e)),c=[],l=ie(e,a);c.push(setInterval(l,t)),l(),c.push(ae(a,t)),r.start().then(e=>{i(e)}).catch(e=>{q.error(`Leader tray start failed`,{error:e instanceof Error?e.message:String(e)})});let u=!1;return{stop(){u=!0,s();for(let e of c)clearInterval(e);a.stop(),o.stop(),r.stop()},async reset(){return a.stop(),o.stop(),r.stop(),await r.clearSession(),i(await r.start()),b()},leader:r,peers:o,sync:a,get currentLeaderSync(){return u?null:a}}}function se(){return typeof window>`u`||!window.history||!window.location?null:{get href(){return window.location.href},replaceState(e,t,n){window.history.replaceState(e,t,n)}}}function Q(e){let t=new Map,n=(e,t)=>`${e}:${t}`,r=(r,i)=>{let a=n(r,i),o=t.get(a);if(!o){let n=e.getSync();if(!n)throw Error(`remote-cdp: leader tray not started`);o={runtimeId:r,localTargetId:i,transport:n.createRemoteTransport(r,i),forwarders:new Map},t.set(a,o)}return o},i=n=>{let r=t.get(n);if(!r)return;for(let[e,t]of r.forwarders)r.transport.off(e,t.listener);r.forwarders.clear();let i=e.getSync();i?.removeRemoteTransport?i.removeRemoteTransport(r.runtimeId,r.localTargetId):r.transport.disconnect(),t.delete(n)};return{async send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o}){return r(e,t).transport.send(n,i,a,o)},async subscribe({runtimeId:t,localTargetId:n,event:i}){let a=r(t,n),o=a.forwarders.get(i);if(o)return o.count+=1,{ok:!0};let s=r=>e.postEvent({runtimeId:t,localTargetId:n,method:i,params:r});return a.transport.on(i,s),a.forwarders.set(i,{listener:s,count:1}),{ok:!0}},async unsubscribe({runtimeId:e,localTargetId:r,event:i}){let a=t.get(n(e,r)),o=a?.forwarders.get(i);return!a||!o?{ok:!0}:(--o.count,o.count<=0&&(a.transport.off(i,o.listener),a.forwarders.delete(i)),{ok:!0})},async detach({runtimeId:e,localTargetId:t}){return i(n(e,t)),{ok:!0}},async openTab({runtimeId:t,url:n}){let r=e.getSync();if(!r?.openRemoteTab)throw Error(`remote-cdp: openRemoteTab not available`);return{targetId:await r.openRemoteTab(t,n)}},cleanupRuntime(e){let n=`${e}:`;for(let e of[...t.keys()])e.startsWith(n)&&i(e)},disposeAll(){for(let e of[...t.keys()])i(e)}}}function $(e,t){let{browser:n,client:r,getController:i}=e;return{joinUrl:t,onSnapshot:e=>i()?.loadMessages(e),onUserMessage:(e,t,n,r)=>i()?.addUserMessage(e,r),onStatus:e=>i()?.setProcessing(e===`processing`),setChatAgent:e=>i()?.setAgent(e),browserAPI:n,onForwardingToggle:e=>r.sendSetFollowerForwarding(e),addSprinkle:(t,n,r)=>e.addSprinkle(t,n,r),removeSprinkle:t=>e.removeSprinkle(t)}}function ce(e,t,n){let{client:r,refs:i}=e;return a=>({workerBaseUrl:a,getMessages:()=>e.getController()?.getMessages()??[],getScoopJid:()=>e.getSelectedJid(),getScoops:()=>r.getScoops().map(e=>({jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,trigger:e.trigger})),getSprinkles:()=>{let t=new Set(e.sprinkleManager.opened());return e.sprinkleManager.available().map(e=>({name:e.name,title:e.title,path:e.path,open:t.has(e.name),autoOpen:e.autoOpen}))},readSprinkleContent:async t=>{let n=e.sprinkleManager.available().find(e=>e.name===t);if(!n)return null;try{let t=await(await e.openFs()).readFile(n.path,{encoding:`utf-8`});return typeof t==`string`?t:new TextDecoder(`utf-8`).decode(t)}catch{return null}},onSprinkleLick:(e,t,n,i)=>r.sendSprinkleLick(e,t,n,i),onFollowerMessage:(n,r,i)=>{e.getController()?.addUserMessage(n,i),e.agentHandle.sendMessage(n,r,i),t.leader?.sync.broadcastUserMessage(n,r,i)},onFollowerAbort:()=>e.agentHandle.stop(),onFollowerCountChanged:t=>{i.floatbar.setAttribute(`label`,t>0?`tray · ${t} follower${t===1?``:`s`}`:e.baseFloatLabel??`standalone · live`),M(A())},onRemoteTransportsCleaned:e=>n.cleanupRuntime(e),onForwardedLick:e=>r.sendForwardedLick(e),onCherryHostEvent:(e,t,n)=>r.sendCherryHostEvent(e,t,n),sendWebhookEvent:(e,t,n)=>r.sendWebhookEvent(e,t,n),onAgentEvent:t=>e.agentHandle.onEvent(t),browserAPI:e.browser,browserTransport:e.realCdpTransport,vfs:{async stat(t){return(await e.openFs()).stat(t)},async readFile(t,n){return(await e.openFs()).readFile(t,n)}}})}function le(t,n){return{wireLeaderHooks:n=>{k(()=>n.peers.getPeers().map(e=>({runtimeId:w(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))),t.sprinkleManager.setSendToSprinkleHook((e,t)=>n.sync.broadcastSprinkleUpdate(e,t)),t.sprinkleManager.setReloadHook(e=>n.sync.broadcastSprinkleReloaded(e)),t.getController()?.setOnLocalUserMessage((e,t,r)=>n.sync.broadcastUserMessage(e,t,r)),t.getController()?.setOnLocalProcessingChange(e=>n.sync.broadcastStatus(e?`processing`:`ready`)),e(async()=>{let{setThemeChangeListener:e,getActiveThemeId:t}=await import(`./theme-engine-DqVfCCym.js`).then(e=>e.f);return{setThemeChangeListener:e,getActiveThemeId:t}},__vite__mapDeps([32,1,10])).then(({setThemeChangeListener:e,getActiveThemeId:t})=>{let r;e(e=>{t()!==`__preview`&&(clearTimeout(r),r=setTimeout(()=>n.sync.broadcastTheme(e),150))})})},clearLeaderHooks:()=>{k(null),M([]),t.getController()?.setOnLocalUserMessage(void 0),t.getController()?.setOnLocalProcessingChange(void 0),t.sprinkleManager.setSendToSprinkleHook(void 0),t.sprinkleManager.setReloadHook(void 0),n.disposeAll(),e(async()=>{let{setThemeChangeListener:e}=await import(`./theme-engine-DqVfCCym.js`).then(e=>e.f);return{setThemeChangeListener:e}},__vite__mapDeps([32,1,10])).then(({setThemeChangeListener:e})=>{e(null)})}}}function ue(e){return{runtime:`slicc-hosted-leader`,kind:`hosted`,onLeaderReady:t=>{fetch(o(`/api/cloud-status`),{method:`POST`,headers:s({"content-type":`application/json`}),body:JSON.stringify({joinUrl:t.joinUrl,trayId:t.trayId,controllerUrl:t.controllerUrl,webhookUrl:t.webhookUrl,runtime:t.runtime,sliccVersion:`5.27.0`}),signal:AbortSignal.timeout(1e4)}).catch(t=>{e.log.error(`failed to POST /api/cloud-status`,{error:String(t)})})}}}function de(e,t,n,r){let{window:i,log:a}=e;if(e.runtimeMode===`hosted-leader`){i.localStorage.removeItem(h);let o=i.localStorage.getItem(u);if(!o){a.error(`hosted-leader: tray worker base URL not seeded`);return}t.leader=Z({...n(o),...ue(e)}),r(t.leader),P({log:a});return}let o=i.localStorage.getItem(h),s=i.localStorage.getItem(u);o?t.follower=D($(e,o)):s&&(t.leader=Z(n(s)),r(t.leader))}function fe(e,t,n,r){let{window:i,log:a}=e;i.addEventListener(`slicc:tray-join`,r=>{let i=r.detail?.joinUrl;if(!i)return;let o=t.leader;t.leader=null,n();let s=t.follower;t.follower=null;try{o?.stop()}catch(e){a.error(`leader stop threw during tray-join switch`,e)}try{s?.stop()}catch(e){a.error(`previous follower stop threw during tray-join switch`,e)}try{t.follower=D($(e,i))}catch(e){a.error(`tray-join failed`,e)}}),i.addEventListener(`slicc:tray-leave`,e=>{let t=e;r({workerBaseUrl:t.detail?.workerBaseUrl??null,requestId:t.detail?.requestId}).catch(e=>a.error(`tray-leave failed`,e))}),i.addEventListener(`beforeunload`,()=>{t.leader?.stop(),t.follower?.stop()},{once:!0})}async function pe(t){let{loadSprinkleStyles:n}=await e(async()=>{let{loadSprinkleStyles:e}=await import(`./legacy-styles-CF6h7ytf.js`);return{loadSprinkleStyles:e}},__vite__mapDeps([33,3]));await n();let{client:r,instanceId:i,window:a,log:o}=t,s={leader:null,follower:null},l=typeof BroadcastChannel==`function`?new BroadcastChannel(c(i)):null,u=Q({getSync:()=>s.leader?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};l?.postMessage(t)}});r.setForwardLickHandler(e=>{let t=s.follower?.currentSync;t?t.forwardLick(e):o.warn(`forward-lick dropped: no active follower sync`)});let m=ce(t,s,u),{wireLeaderHooks:h,clearLeaderHooks:g}=le(t,u),_=async t=>{let{performTrayLeave:n}=await e(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-BjTWTK0U.js`);return{performTrayLeave:e}},__vite__mapDeps([34,20,1,21,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,18,19,22,23]));return await n({workerBaseUrl:t.workerBaseUrl,requestId:t.requestId},{getLeader:()=>s.leader,setLeader:e=>{s.leader=e},getFollower:()=>s.follower,setFollower:e=>{s.follower=e},startLeader:e=>Z(m(e)),clearLeaderHooks:g,wireLeaderHooks:h,storage:a.localStorage,log:o})};return await N({instanceId:i,browser:t.browser,remoteCdpBridge:u,remoteCdpPushChannel:l,getLeader:()=>s.leader,performTrayLeaveLocally:_,window:a}),de(t,s,m,h),ne(e=>{a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(b())),p(e=>{a.localStorage.setItem(d,JSON.stringify(e))}),a.localStorage.setItem(d,JSON.stringify(f())),M(A(),a.localStorage),fe(t,s,g,_),{getLeader:()=>s.leader,getFollower:()=>s.follower,performTrayLeaveLocally:_}}export{pe as wireWcTray};
|