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.
Files changed (83) hide show
  1. package/dist/ui/assets/{account-store-Ca-6Qepy.js → account-store-BFup3fQv.js} +2 -2
  2. package/dist/ui/assets/{account-store-WxYLKJl4.js → account-store-CyTIxjml.js} +1 -1
  3. package/dist/ui/assets/{adobe-C4TDN6gJ.js → adobe-C3ICTjkQ.js} +1 -1
  4. package/dist/ui/assets/{adobe-BECI7LIx.js → adobe-Cwn9LSa3.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-DEaREUsJ.js → adobe-oauth-state-CJxatA-w.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-r6rFLlkg.js → agent-message-to-chat-Cnwu7Uug.js} +1 -1
  7. package/dist/ui/assets/{apps-DorRR2hG.js → apps-_Ru-zeOq.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-B2sHsITp.js → azure-openai-C5BnoYfB.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-Bndr5L8s.js → azure-openai-GOAwvC0d.js} +1 -1
  10. package/dist/ui/assets/{cerebras-BQ-fuEoV.js → cerebras-DnmvEnzf.js} +1 -1
  11. package/dist/ui/assets/{cerebras-Dei36lB9.js → cerebras-kkt6JWkZ.js} +1 -1
  12. package/dist/ui/assets/{connect-surface-UEwrwU3B.js → connect-surface-xExKp6k4.js} +1 -1
  13. package/dist/ui/assets/dip-vOI0dNhU.js +1 -0
  14. package/dist/ui/assets/{dist-DyA_dBRw.js → dist-rO_zI7c5.js} +1 -1
  15. package/dist/ui/assets/{dist-CsyS70tH.js → dist-wcq5kRyy.js} +1 -1
  16. package/dist/ui/assets/{ensure-speech-assets-B5a-L6cL.js → ensure-speech-assets-DVNIpxHE.js} +1 -1
  17. package/dist/ui/assets/esp8266-J41qncWu.js +1 -0
  18. package/dist/ui/assets/{esptool-operations-l2Cnzqeo.js → esptool-operations-BMcyf6lU.js} +2 -2
  19. package/dist/ui/assets/{fs-C9ZZPHHH.js → fs-Djs11fgL.js} +1 -1
  20. package/dist/ui/assets/{fs-8uahIHYg.js → fs-IUJNLCle.js} +2 -2
  21. package/dist/ui/assets/{github-BOgIIZQf.js → github-B2Q7d9d9.js} +1 -1
  22. package/dist/ui/assets/{github-CBaAwieE.js → github-V9F2Kwc3.js} +2 -2
  23. package/dist/ui/assets/{github-copilot-By9mvyfk.js → github-copilot-DrbeG1qM.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-B_-tmYGD.js → github-copilot-_wD9vWLP.js} +1 -1
  25. package/dist/ui/assets/{hear-DaOEu3r-.js → hear-B6wdzPMD.js} +1 -1
  26. package/dist/ui/assets/{kernel-worker-BVdWluOy.js → kernel-worker-D6FiY4In.js} +18 -18
  27. package/dist/ui/assets/{kokoro-engine-DqalxH8P.js → kokoro-engine-CdpBgmxP.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-_6bmVoay.js → lick-ws-bridge-Cstvd5df.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-BOGL3loo.js → lick-ws-bridge-DUmVUuCv.js} +1 -1
  30. package/dist/ui/assets/{local-llm-CSTYZfRl.js → local-llm-COSrJK26.js} +1 -1
  31. package/dist/ui/assets/{main-CN__UqbO.js → main-C--nD5g7.js} +4 -4
  32. package/dist/ui/assets/{mount-IiKfVLoJ.js → mount-CKi0fTDP.js} +2 -2
  33. package/dist/ui/assets/{mount-DTOk39Ey.js → mount-CihzCUsg.js} +1 -1
  34. package/dist/ui/assets/{new-session-B4TktVYW.js → new-session-AM3XtlDe.js} +2 -2
  35. package/dist/ui/assets/{oauth-bootstrap-risshLhE.js → oauth-bootstrap-Bh2RA718.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-RqVnP8ma.js → openai-codex-DetPrslk.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-XujJPcOv.js → openai-codex-IbPQB6G0.js} +1 -1
  38. package/dist/ui/assets/page-follower-tray-C6-y2wCt.js +5 -0
  39. package/dist/ui/assets/{panel-rpc-handlers-CwACzy8T.js → panel-rpc-handlers-BR7koM3e.js} +2 -2
  40. package/dist/ui/assets/{provider-Czziqbqr.js → provider-C2DK-tou.js} +2 -2
  41. package/dist/ui/assets/{provider-DYm3dgM_.js → provider-Kdt5mnJz.js} +1 -1
  42. package/dist/ui/assets/provider-store-access-BILn3hmx.js +1 -0
  43. package/dist/ui/assets/provider-store-access-CbFUIJuP.js +1 -0
  44. package/dist/ui/assets/{providers-Cxo5lEqr.js → providers-D-lbA45B.js} +2 -2
  45. package/dist/ui/assets/{providers-BLx3fae_.js → providers-uxcBDh6N.js} +1 -1
  46. package/dist/ui/assets/{quick-llm-BDH3bKTj.js → quick-llm-4arXh_DA.js} +1 -1
  47. package/dist/ui/assets/session-freezer-DpwXCapf.js +1 -0
  48. package/dist/ui/assets/{speak-CPJkZGWK.js → speak-BdzRzg-l.js} +1 -1
  49. package/dist/ui/assets/{sprinkle-manager-BTUA9i-m.js → sprinkle-manager-CRspU-wp.js} +1 -1
  50. package/dist/ui/assets/sprinkle-renderer-Ck9jaWXg.js +192 -0
  51. package/dist/ui/assets/{store-BguTJ6sX.js → store-AZEbHS5U.js} +1 -1
  52. package/dist/ui/assets/{sudo-OkMLEqOR.js → sudo-CTuXr4DQ.js} +1 -1
  53. package/dist/ui/assets/{transformers-env-DCoo5BQj.js → transformers-env-DLkBUkpw.js} +1 -1
  54. package/dist/ui/assets/{tray-leader-ig4c4qTn.js → tray-leader-DM9rswbl.js} +1 -1
  55. package/dist/ui/assets/{tray-leave-runtime-BjTWTK0U.js → tray-leave-runtime-BtIR6gOV.js} +1 -1
  56. package/dist/ui/assets/{upgrade-detection-D1VA2Lri.js → upgrade-detection-DxQBYy82.js} +1 -1
  57. package/dist/ui/assets/{voice-reply-BfOOgral.js → voice-reply-fuBAYbo5.js} +1 -1
  58. package/dist/ui/assets/{wc-attach-MaQvCmrh.js → wc-attach-CzeWLPFm.js} +2 -2
  59. package/dist/ui/assets/{wc-extension-Ce5acSDf.js → wc-extension-CQkPmWB-.js} +2 -2
  60. package/dist/ui/assets/wc-follower-6OLDQClB.js +4 -0
  61. package/dist/ui/assets/{wc-live-7ULV3ZpC.js → wc-live-DBfgEvvH.js} +5 -5
  62. package/dist/ui/assets/{wc-nav-BiK2SRzR.js → wc-nav-DpdrDmzV.js} +2 -2
  63. package/dist/ui/assets/{wc-onboarding-DdYaVqZn.js → wc-onboarding-Dl8IrgMO.js} +2 -2
  64. package/dist/ui/assets/{wc-placeholder-BJ3fArRM.js → wc-placeholder-9KOVYHkL.js} +3 -3
  65. package/dist/ui/assets/{wc-settings-CK2vVsoc.js → wc-settings-DK6xQJ9c.js} +2 -2
  66. package/dist/ui/assets/{wc-shell-C0CueAzb.js → wc-shell-BEzti5I0.js} +3 -3
  67. package/dist/ui/assets/{wc-sprinkles-CG2B6a19.js → wc-sprinkles-BwQjnMOV.js} +2 -2
  68. package/dist/ui/assets/wc-tray-Bfd9GvZL.js +2 -0
  69. package/dist/ui/assets/{whisper-engine-OgjNrsTq.js → whisper-engine-Dbg5R3v1.js} +1 -1
  70. package/dist/ui/assets/{xai-grok-Xz16vGFj.js → xai-grok-BSlNsl2K.js} +1 -1
  71. package/dist/ui/assets/{xai-grok-Boa11vEQ.js → xai-grok-COz57XiQ.js} +1 -1
  72. package/dist/ui/index.html +3 -3
  73. package/dist/ui/packages/webapp/index.html +3 -3
  74. package/package.json +1 -1
  75. package/dist/ui/assets/dip-BPBCgCGc.js +0 -1
  76. package/dist/ui/assets/esp8266-CK7zgrBp.js +0 -1
  77. package/dist/ui/assets/page-follower-tray-CV8qYe5v.js +0 -5
  78. package/dist/ui/assets/provider-store-access-CSqiDdRm.js +0 -1
  79. package/dist/ui/assets/provider-store-access-DGxGfbbA.js +0 -1
  80. package/dist/ui/assets/session-freezer-46FXxjdr.js +0 -1
  81. package/dist/ui/assets/sprinkle-renderer-BMzJnQXh.js +0 -192
  82. package/dist/ui/assets/wc-follower-tHA3T44W.js +0 -4
  83. 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};