sliccy 5.57.1 → 5.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/ui/assets/{account-store-BqI_bdKc.js → account-store-DeH3wiFo.js} +1 -1
  2. package/dist/ui/assets/{account-store-B70B-Xy1.js → account-store-vuw_HYi3.js} +2 -2
  3. package/dist/ui/assets/{adobe-DkCnsZQc.js → adobe-DNQRukss.js} +1 -1
  4. package/dist/ui/assets/{adobe-xeGFGZpC.js → adobe-DvNOyoXS.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-DPaR8NRp.js → adobe-oauth-state-DVHpvwZF.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-DzRXXJel.js → agent-message-to-chat-C1KU3v3M.js} +1 -1
  7. package/dist/ui/assets/{apps-DpqSNSYV.js → apps-BK6JupOo.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-Bn3boHbY.js → azure-openai-B2QtYE4i.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-DEBv7yQp.js → azure-openai-iKx1U0sg.js} +1 -1
  10. package/dist/ui/assets/{cerebras-BwqdpIyz.js → cerebras-BKzAvJCs.js} +1 -1
  11. package/dist/ui/assets/{cerebras-DWHxltur.js → cerebras-xBxjmrc-.js} +1 -1
  12. package/dist/ui/assets/clipboard-tweg-07U.js +1 -0
  13. package/dist/ui/assets/{connect-surface-D6odnHkh.js → connect-surface-dlct_w-J.js} +1 -1
  14. package/dist/ui/assets/dip-CfZnFlBK.js +1 -0
  15. package/dist/ui/assets/{dist-Dny1G18y.js → dist-0NnHP0j4.js} +1 -1
  16. package/dist/ui/assets/{dist-CSrZL2G5.js → dist-CONhOaPx.js} +1 -1
  17. package/dist/ui/assets/{ensure-speech-assets-W5QPk6uQ.js → ensure-speech-assets-BHJG5H3M.js} +1 -1
  18. package/dist/ui/assets/{fs-CnhmusOG.js → fs-BP1ycbTv.js} +2 -2
  19. package/dist/ui/assets/{fs-D-5giB0a.js → fs-CZLyw6X8.js} +1 -1
  20. package/dist/ui/assets/{github-B29ZCKQg.js → github-BXXTJfnG.js} +1 -1
  21. package/dist/ui/assets/{github-DzM3FtVD.js → github-C97Vqbxa.js} +2 -2
  22. package/dist/ui/assets/{github-copilot-n309ImF7.js → github-copilot-BITa1j16.js} +1 -1
  23. package/dist/ui/assets/{github-copilot-C7aAJAqW.js → github-copilot-DFz_D79x.js} +1 -1
  24. package/dist/ui/assets/{hear-0Tswpuv7.js → hear-DK3SE9UZ.js} +1 -1
  25. package/dist/ui/assets/{js-realm-worker-Bi5UIEMG.js → js-realm-worker-CeYHBMC5.js} +7 -7
  26. package/dist/ui/assets/{kernel-worker-BCW_QlyZ.js → kernel-worker-Rrx0aK7m.js} +635 -636
  27. package/dist/ui/assets/{kokoro-engine-CRs8ZEvx.js → kokoro-engine-DYUZ5mft.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-8McAeIbO.js → lick-ws-bridge-BXfKVz1B.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-D2LfSdTD.js → lick-ws-bridge-CEw7zXWb.js} +1 -1
  30. package/dist/ui/assets/{local-llm-Dl9iXPsJ.js → local-llm-DEpCPL3N.js} +1 -1
  31. package/dist/ui/assets/{main-6Q7Fb4tw.js → main-DLz5qyR7.js} +4 -4
  32. package/dist/ui/assets/{mount-NSmYg9GU.js → mount-0ZiASF_5.js} +1 -1
  33. package/dist/ui/assets/{mount-BtjScgjq.js → mount-C1swqkaU.js} +2 -2
  34. package/dist/ui/assets/{new-session-CLta1Lj7.js → new-session-BQx4lnyb.js} +2 -2
  35. package/dist/ui/assets/{oauth-bootstrap-D-yvRHGz.js → oauth-bootstrap-B9vY-BRE.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-ZCmj450m.js → openai-codex-D4UsQa8g.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-CB6PdYqU.js → openai-codex-zTDkFxq_.js} +1 -1
  38. package/dist/ui/assets/{page-follower-tray-TKZCNKRZ.js → page-follower-tray-DmAd_GWW.js} +1 -1
  39. package/dist/ui/assets/{panel-rpc-handlers-RRddFZTk.js → panel-rpc-handlers-NhfnH6G9.js} +2 -2
  40. package/dist/ui/assets/{provider-DOjCml56.js → provider-Cu28qTkm.js} +2 -2
  41. package/dist/ui/assets/{provider-BWME-twj.js → provider-NTQuGPsR.js} +1 -1
  42. package/dist/ui/assets/{provider-settings-B2s5vgom.js → provider-settings-CYYH3vDR.js} +1 -1
  43. package/dist/ui/assets/provider-store-access-BGuwAmCa.js +1 -0
  44. package/dist/ui/assets/provider-store-access-C_AVf_E8.js +1 -0
  45. package/dist/ui/assets/{providers-uyxOwwt4.js → providers-B9nw-ePd.js} +1 -1
  46. package/dist/ui/assets/{providers-BQomGz9R.js → providers-BRleMLiy.js} +2 -2
  47. package/dist/ui/assets/{quick-llm-DHtKMD9z.js → quick-llm-D69J7_RA.js} +1 -1
  48. package/dist/ui/assets/session-freezer-CDMn8WnP.js +1 -0
  49. package/dist/ui/assets/{speak-D5G7KiTT.js → speak-DvAyaogi.js} +1 -1
  50. package/dist/ui/assets/{sprinkle-manager-nP3g46qO.js → sprinkle-manager-rpkrbAvW.js} +1 -1
  51. package/dist/ui/assets/sprinkle-renderer-Bk_e6Kbr.js +192 -0
  52. package/dist/ui/assets/{store-BZTffu8V.js → store-vSe4KiU_.js} +1 -1
  53. package/dist/ui/assets/{sudo-CsZ2DlSz.js → sudo-Cm3hirW9.js} +1 -1
  54. package/dist/ui/assets/{transformers-env-DHJa4RCf.js → transformers-env-B3kpk97f.js} +1 -1
  55. package/dist/ui/assets/{tray-leader-DgTG9H-w.js → tray-leader-DdBEL_nf.js} +1 -1
  56. package/dist/ui/assets/{tray-leave-runtime-uZUZNHVX.js → tray-leave-runtime-BLySFWqC.js} +1 -1
  57. package/dist/ui/assets/{upgrade-detection-i5f6luyi.js → upgrade-detection-CaN4us1y.js} +1 -1
  58. package/dist/ui/assets/{voice-reply-C-3rH9oC.js → voice-reply-Cd2cQZ1O.js} +1 -1
  59. package/dist/ui/assets/{wc-attach-BQzDqdAQ.js → wc-attach-B_sJtvrP.js} +2 -2
  60. package/dist/ui/assets/{wc-extension-DA4ER47a.js → wc-extension-BA8Trhas.js} +2 -2
  61. package/dist/ui/assets/{wc-follower-CsQZCsua.js → wc-follower-JCOA6Od2.js} +3 -3
  62. package/dist/ui/assets/{wc-live-C04ItfnZ.js → wc-live-Hbl4Ji2P.js} +5 -5
  63. package/dist/ui/assets/{wc-nav-DgqufJsO.js → wc-nav-vGWYhcSN.js} +2 -2
  64. package/dist/ui/assets/{wc-onboarding-BR7HaQPL.js → wc-onboarding-BAq8GkX1.js} +2 -2
  65. package/dist/ui/assets/{wc-placeholder-D36A-bB6.js → wc-placeholder-pJKktrh8.js} +3 -3
  66. package/dist/ui/assets/{wc-settings-CaxJcNwg.js → wc-settings-4_1h_265.js} +3 -3
  67. package/dist/ui/assets/{wc-shell-B7yKyiZ2.js → wc-shell-OJSz86We.js} +3 -3
  68. package/dist/ui/assets/{wc-sprinkles-j5hfmEtl.js → wc-sprinkles-DMgKUvY4.js} +2 -2
  69. package/dist/ui/assets/{wc-tray-CofjfW_1.js → wc-tray-BdeVxo6d.js} +2 -2
  70. package/dist/ui/assets/{whisper-engine-rP8D81pe.js → whisper-engine-De27HbRj.js} +1 -1
  71. package/dist/ui/assets/{xai-grok-D80aaxGn.js → xai-grok-19HQKb_w.js} +1 -1
  72. package/dist/ui/assets/{xai-grok-BPagp879.js → xai-grok-CRjHls8r.js} +1 -1
  73. package/dist/ui/index.html +3 -3
  74. package/dist/ui/packages/webapp/index.html +3 -3
  75. package/package.json +1 -1
  76. package/dist/ui/assets/clipboard-CSEDRfgj.js +0 -1
  77. package/dist/ui/assets/dip-Bwzg4JXD.js +0 -1
  78. package/dist/ui/assets/provider-store-access-CjY49bAL.js +0 -1
  79. package/dist/ui/assets/provider-store-access-DQ3kqRuy.js +0 -1
  80. package/dist/ui/assets/session-freezer-D-7ulfYc.js +0 -1
  81. package/dist/ui/assets/sprinkle-renderer-CTKWW81m.js +0 -192
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-settings-B2s5vgom.js";export{e as copyTextToClipboard};
@@ -1 +0,0 @@
1
- import{m as e}from"./wc-live-C04ItfnZ.js";export{e as setDipExecHandler};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-DOjCml56.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-BZTffu8V.js";import"./provider-BWME-twj.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{c as e}from"./wc-live-C04ItfnZ.js";export{e as readSessionsIndex};
@@ -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{n as t}from"./runtime-env-DH4NDw4t.js";import{a as n,n as r,r as i}from"./theme-C8b_iQ_9.js";function a(){try{return window.self!==window.top}catch{return!0}}var o=new WeakSet;function s(e,t){if(o.has(e)){t?.();return}let n=!1;c(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&c(e)},500)}function c(e,t,n){if(o.has(e)){t?.();return}o.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,a=a=>{i||(i=!0,e.style.display=r,o.delete(e),a&&n?.(),t?.())};requestAnimationFrame(()=>{requestAnimationFrame(()=>a(!0))}),setTimeout(()=>a(!1),100)}var l=t(),u=/<script\b([^>]*)\bsrc\s*=\s*["'](https?:\/\/[^"']+)["']([^>]*)><\/script>/gi;async function d(e){let t=[],n;for(;(n=u.exec(e))!==null;)t.push({full:n[0],url:n[2],index:n.index});if(u.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 f(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}function p(e,t,n,r={}){e.contentWindow?.postMessage({type:t,id:n,...r},`*`)}function m(e,t,n,r,i){r.then(r=>p(e,t,n,i(r)),r=>p(e,t,n,{error:r instanceof Error?r.message:String(r)}))}function h(e){return{"sprinkle-lick":(t,n)=>e.lick({action:n.action,data:n.data}),"sprinkle-set-state":(t,n)=>e.setState(n.data),"sprinkle-close":()=>e.close(),"sprinkle-minimize":()=>e.minimize(),"sprinkle-stop-cone":()=>e.stopCone(),"sprinkle-attach-image":(t,n)=>e.attachImage(n.base64,n.name,n.mimeType),"sprinkle-readfile":(t,n)=>m(t,`sprinkle-readfile-response`,n.id,e.readFile(n.path),e=>({content:e})),"sprinkle-writefile":(t,n)=>m(t,`sprinkle-writefile-response`,n.id,e.writeFile(n.path,n.content),()=>({})),"sprinkle-readdir":(t,n)=>m(t,`sprinkle-readdir-response`,n.id,e.readDir(n.path),e=>({entries:e})),"sprinkle-exists":(t,n)=>m(t,`sprinkle-exists-response`,n.id,e.exists(n.path),e=>({exists:e})),"sprinkle-stat":(t,n)=>m(t,`sprinkle-stat-response`,n.id,e.stat(n.path),e=>({stat:e})),"sprinkle-mkdir":(t,n)=>m(t,`sprinkle-mkdir-response`,n.id,e.mkdir(n.path),()=>({})),"sprinkle-rm":(t,n)=>m(t,`sprinkle-rm-response`,n.id,e.rm(n.path),()=>({})),"sprinkle-capture-screen":(t,n)=>m(t,`sprinkle-capture-screen-response`,n.id,e.captureScreen(),e=>({base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType})),"sprinkle-exec":(t,n)=>m(t,`sprinkle-exec-response`,n.id,e.exec(n.cmd),e=>({result:e})),"sprinkle-agent":(t,n)=>m(t,`sprinkle-agent-response`,n.id,e.agent(n.prompt,n.opts),e=>({result:e})),"sprinkle-jsh":(t,n)=>m(t,`sprinkle-jsh-response`,n.id,e._jsh(n.op,n.args),e=>({result:e})),"sprinkle-device-op":(t,n)=>m(t,`sprinkle-device-op-response`,n.id,e._device(n.channel,n.op,n.args??[]),e=>({result:e}))}}function g(e,t){return n=>{if(n.source!==e.contentWindow)return;let r=n.data;r?.type&&t[r.type]?.(e,r)}}function _(t){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)}}function v(e){for(let t of e.querySelectorAll(`.fill[data-value]`)){let e=parseFloat(t.dataset.value||`0`);e>=0&&e<=100&&(t.style.width=`${e}%`)}}function y(e,t){let n=`window.__slicc_sprinkles[${JSON.stringify(t)}]`;for(let t of e.querySelectorAll(`[onclick]`)){let e=t.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(e)&&t.setAttribute(`onclick`,e.replace(/\b(slicc|bridge)\b/g,n))}return n}function b(e){let t=new Set;for(let n of e.querySelectorAll(`[onclick]`)){let e=n.getAttribute(`onclick`)||``;for(let n of e.matchAll(/\b(\w+)\s*\(/g)){let e=n[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(e)||t.add(e)}}return t}function x(e,t){let n=[];for(let r of Array.from(e.querySelectorAll(`script`))){r.remove();let i=document.createElement(`script`);for(let e of r.attributes)i.setAttribute(e.name,e.value);if(!r.src){let n=[...b(e)].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
3
- `);i.textContent=`(function() { var slicc = ${t}; var bridge = slicc;\n`+r.textContent+(n?`
4
- `+n:``)+`
5
- })();`}e.appendChild(i),n.push(i)}return n}var S=class e{container;bridge;scripts=[];iframe=null;static cachedLucideScript=null;static lucideScriptPromise=null;messageHandler=null;visibilityObserver=null;constructor(e,t){this.container=e,this.bridge=t}async render(e,t){this.dispose(),l?await this.renderInSandbox(e,t,f(e)):f(e)?await this.renderFullDoc(e,t):this.renderInline(e,t)}async renderInSandbox(e,t,n=!1){let o=document.createElement(`iframe`);o.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),o.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`+(a()?` transform: translateZ(0);`:``),this.iframe=o,console.log(`[sprinkle-renderer] creating sandbox iframe`,o.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);o.addEventListener(`load`,()=>{clearTimeout(n),console.log(`[sprinkle-renderer] iframe loaded, contentWindow:`,!!o.contentWindow),i(o.contentWindow),a()&&s(o),e()},{once:!0}),o.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(o)}),this.messageHandler=g(o,{...h(this.bridge),"sprinkle-storage-set":(e,n)=>{try{localStorage.setItem(`slicc-sprinkle-ls:${t}:${n.key}`,n.value)}catch(e){console.warn(`[sprinkle-renderer] localStorage setItem failed:`,n.key,e)}},"sprinkle-storage-remove":(e,n)=>{try{localStorage.removeItem(`slicc-sprinkle-ls:${t}:${n.key}`)}catch(e){console.warn(`[sprinkle-renderer] localStorage removeItem failed:`,n.key,e)}},"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)}},"sprinkle-open":(e,t)=>this.bridge.open(t.path,t.projectRoot?{projectRoot:t.projectRoot}:void 0),"sprinkle-fetch-script":(e,t)=>{let n=t.url,r=t.id;fetch(n).then(e=>e.ok?e.text():Promise.reject(Error(`HTTP ${e.status}`))).then(t=>p(e,`sprinkle-fetch-script-response`,r,{url:n,text:t})).catch(t=>p(e,`sprinkle-fetch-script-response`,r,{url:n,error:t instanceof Error?t.message:String(t)}))}}),window.addEventListener(`message`,this.messageHandler);let c=this.collectThemeCSS(),l={},u=`slicc-sprinkle-ls:${t}:`;for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);t?.startsWith(u)&&(l[t.slice(u.length)]=localStorage.getItem(t)??``)}let f=this.bridge.getState(),m=``,_=``;if(n){let t=[];e.includes(`<slicc-editor`)&&t.push(fetch(chrome.runtime.getURL(`slicc-editor.js`)).then(e=>e.ok?e.text():``).then(e=>{m=e}).catch(()=>{})),e.includes(`<slicc-diff`)&&t.push(fetch(chrome.runtime.getURL(`slicc-diff.js`)).then(e=>e.ok?e.text():``).then(e=>{_=e}).catch(()=>{})),await Promise.all(t)}let v=await this.getLucideScript(),y=n?await d(e):e;o.contentWindow.postMessage({type:`sprinkle-render`,content:y,name:t,themeCSS:c,savedState:f,savedStorage:l,fullDoc:n,editorScript:m,diffScript:_,lucideScript:v,isLight:r()},`*`)}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 w()}generateBridgeScript(){return`(function() {
6
- var _updateListeners = new Set();
7
- var _hidInputReportListeners = new Set();
8
- var _sprinkleName = '';
9
- var _state = null;
10
- var _cbId = 0;
11
- var _callbacks = {};
12
-
13
- window.addEventListener('message', function(event) {
14
- var msg = event.data;
15
- if (!msg || !msg.type) return;
16
- if (msg.type === 'sprinkle-init') {
17
- _sprinkleName = msg.name || '';
18
- _state = msg.savedState || null;
19
- if (window.slicc) window.slicc.name = _sprinkleName;
20
- } else if (msg.type === 'sprinkle-update') {
21
- _updateListeners.forEach(function(cb) { try { cb(msg.data); } catch(e) { console.error(e); } });
22
- } else if (msg.type === 'sprinkle-device-event') {
23
- if (msg.channel === 'hid:inputreport') {
24
- _hidInputReportListeners.forEach(function(cb) {
25
- try { cb(msg.payload); } catch(e) { console.error(e); }
26
- });
27
- }
28
- } else if (msg.type === 'slicc-theme') {
29
- document.documentElement.classList.toggle('theme-light', !!msg.isLight);
30
- } else if (msg.id && _callbacks[msg.id]) {
31
- var cb = _callbacks[msg.id];
32
- delete _callbacks[msg.id];
33
- cb(msg);
34
- }
35
- });
36
-
37
- function _vfsCall(type, params, extractResult) {
38
- return new Promise(function(resolve, reject) {
39
- var id = ++_cbId;
40
- _callbacks[id] = function(msg) {
41
- if (msg.error) reject(new Error(msg.error));
42
- else resolve(extractResult ? extractResult(msg) : undefined);
43
- };
44
- var m = { type: type, id: id };
45
- if (params) { for (var k in params) m[k] = params[k]; }
46
- parent.postMessage(m, '*');
47
- });
48
- }
49
-
50
- function _jshCall(op, args) {
51
- return _vfsCall('sprinkle-jsh', { op: op, args: args }, function(m) { return m.result; });
52
- }
53
- function _deviceCall(channel, op, args) {
54
- return _vfsCall('sprinkle-device-op', { channel: channel, op: op, args: args || [] },
55
- function(m) { return m.result; });
56
- }
57
- function _b64ToU8(b64) {
58
- var bin = atob(b64); var u8 = new Uint8Array(bin.length);
59
- for (var i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);
60
- return u8;
61
- }
62
- function _u8ToB64(bytes) {
63
- var bin = ''; for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
64
- return btoa(bin);
65
- }
66
-
67
- var api = {
68
- lick: function(event) {
69
- var action, data;
70
- if (typeof event === 'string') { action = event; } else { action = event.action; data = event.data; }
71
- parent.postMessage({ type: 'sprinkle-lick', action: action, data: data }, '*');
72
- },
73
- on: function(event, callback) { if (event === 'update') _updateListeners.add(callback); },
74
- off: function(event, callback) { if (event === 'update') _updateListeners.delete(callback); },
75
- readFile: function(path) {
76
- return _vfsCall('sprinkle-readfile', { path: path }, function(m) { return m.content; });
77
- },
78
- writeFile: function(path, content) {
79
- return _vfsCall('sprinkle-writefile', { path: path, content: content });
80
- },
81
- readDir: function(path) {
82
- return _vfsCall('sprinkle-readdir', { path: path }, function(m) { return m.entries; });
83
- },
84
- exists: function(path) {
85
- return _vfsCall('sprinkle-exists', { path: path }, function(m) { return m.exists; });
86
- },
87
- stat: function(path) {
88
- return _vfsCall('sprinkle-stat', { path: path }, function(m) { return m.stat; });
89
- },
90
- mkdir: function(path) {
91
- return _vfsCall('sprinkle-mkdir', { path: path });
92
- },
93
- rm: function(path) {
94
- return _vfsCall('sprinkle-rm', { path: path });
95
- },
96
- screenshot: function(selector) {
97
- return new Promise(function(resolve, reject) {
98
- try {
99
- var target = selector ? document.querySelector(selector) : document.body;
100
- if (!target) { reject(new Error('Element not found: ' + selector)); return; }
101
- var rect = target.getBoundingClientRect();
102
- var w = Math.ceil(rect.width);
103
- var h = Math.ceil(rect.height);
104
- if (w === 0 || h === 0) { reject(new Error('Element has zero dimensions')); return; }
105
- var canvas = document.createElement('canvas');
106
- var dpr = window.devicePixelRatio || 1;
107
- canvas.width = w * dpr;
108
- canvas.height = h * dpr;
109
- var ctx = canvas.getContext('2d');
110
- ctx.scale(dpr, dpr);
111
- var clone = target.cloneNode(true);
112
- var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + w + '" height="' + h + '">' +
113
- '<foreignObject width="100%" height="100%">' +
114
- new XMLSerializer().serializeToString(clone) +
115
- '</foreignObject></svg>';
116
- var img = new Image();
117
- img.onload = function() { ctx.drawImage(img, 0, 0); resolve(canvas.toDataURL('image/png')); };
118
- img.onerror = function() { reject(new Error('Screenshot rendering failed')); };
119
- img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
120
- } catch(e) { reject(e); }
121
- });
122
- },
123
- setState: function(data) { _state = data; parent.postMessage({ type: 'sprinkle-set-state', data: data }, '*'); },
124
- getState: function() { return _state; },
125
- close: function() { parent.postMessage({ type: 'sprinkle-close' }, '*'); },
126
- minimize: function() { parent.postMessage({ type: 'sprinkle-minimize' }, '*'); },
127
- stopCone: function() { parent.postMessage({ type: 'sprinkle-stop-cone' }, '*'); },
128
- attachImage: function(base64, name, mimeType) { parent.postMessage({ type: 'sprinkle-attach-image', base64: base64, name: name, mimeType: mimeType }, '*'); },
129
- captureScreen: function() {
130
- return _vfsCall('sprinkle-capture-screen', {}, function(m) {
131
- return { base64: m.base64, width: m.width, height: m.height, mimeType: m.mimeType };
132
- });
133
- },
134
- exec: Object.assign(function(cmd) {
135
- return _vfsCall('sprinkle-exec', { cmd: cmd }, function(m) { return m.result; });
136
- }, { spawn: function(argv) { return _jshCall('spawn', [argv]); } }),
137
- agent: function(prompt, opts) {
138
- return _vfsCall('sprinkle-agent', { prompt: prompt, opts: opts }, function(m) { return m.result; });
139
- },
140
- fetch: function(url, init) { return _jshCall('fetch', [url, init || null]); },
141
- http: {
142
- client: function(cfg) {
143
- function mk(method) { return function(path, opts) { return _jshCall('http', [cfg, method, path, opts || null]); }; }
144
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
145
- }
146
- },
147
- browser: {
148
- findTab: function(q) { return _jshCall('browser', ['findTab', q]); },
149
- ensureTab: function(url, options) { return _jshCall('browser', ['ensureTab', url, options || {}]); },
150
- eval: function(tab, code) { return _jshCall('browser', ['eval', tab, code]); },
151
- evalAsync: function(tab, code) { return _jshCall('browser', ['evalAsync', tab, code]); },
152
- cookie: function(tab, name) { return _jshCall('browser', ['cookie', tab, name]); },
153
- localStorage: function(tab, key) { return _jshCall('browser', ['localStorage', tab, key]); },
154
- fetch: function(tab, url, opts) { return _jshCall('browser', ['fetch', tab, url, opts || {}]); }
155
- },
156
- hid: {
157
- list: function() { return _deviceCall('hid', 'list', []); },
158
- request: function(filters) { return _deviceCall('hid', 'request', [filters || []]); },
159
- open: function(handle) { return _deviceCall('hid', 'open', [handle]).then(function() {}); },
160
- close: function(handle) { return _deviceCall('hid', 'close', [handle]).then(function() {}); },
161
- sendReport: function(handle, reportId, data) {
162
- return _deviceCall('hid', 'sendReport', [handle, reportId, data]).then(function() {});
163
- },
164
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
165
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners['delete'](cb); }
166
- },
167
- serial: {
168
- list: function() { return _deviceCall('serial', 'list', []); },
169
- request: function(filters) { return _deviceCall('serial', 'request', [filters || []]); },
170
- open: function(handle, options) { return _deviceCall('serial', 'open', [handle, options]).then(function() {}); },
171
- close: function(handle) { return _deviceCall('serial', 'close', [handle]).then(function() {}); }
172
- },
173
- usb: {
174
- list: function() { return _deviceCall('usb', 'list', []); },
175
- request: function(filters) { return _deviceCall('usb', 'request', [filters || []]); },
176
- open: function(handle) { return _deviceCall('usb', 'open', [handle]).then(function() {}); },
177
- close: function(handle) { return _deviceCall('usb', 'close', [handle]).then(function() {}); }
178
- },
179
- readFileBinary: function(path) { return _jshCall('readFileBinary', [path]).then(function(r) { return _b64ToU8(r.base64); }); },
180
- writeFileBinary: function(path, bytes) { return _jshCall('writeFileBinary', [path, _u8ToB64(bytes)]); },
181
- fetchToFile: function(url, path) { return _jshCall('fetchToFile', [url, path]); },
182
- _jsh: function(op, args) { return _jshCall(op, args); },
183
- name: ''
184
- };
185
- window.slicc = api;
186
- window.bridge = api;
187
- })();`}async renderFullDoc(e,t){let n=`<script>${this.generateBridgeScript()}<\/script>`,o=this.collectThemeCSS(),c=o?`<style>${o}</style>`:``,l=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,u=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,d=`<script>(function(){try{if(${r()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+n+c+l+u+`<script src="/lucide-icons.js"><\/script>`,f,p=e.match(/<head\b[^>]*>/i);if(p){let t=p.index+p[0].length;f=e.slice(0,t)+d+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)f=e.slice(0,t.index)+d+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;f=e.slice(0,n)+d+e.slice(n)}else f=d+e}}let m=document.createElement(`iframe`),_=a()?`allow-scripts allow-same-origin allow-popups`:`allow-scripts allow-same-origin`;if(m.setAttribute(`sandbox`,_),m.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`+(a()?` transform: translateZ(0);`:``),m.srcdoc=f,this.iframe=m,await new Promise((e,n)=>{let r=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);m.addEventListener(`load`,()=>{clearTimeout(r),i(m.contentWindow);let n=this.bridge.getState();m.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),a()&&s(m),e()},{once:!0}),m.addEventListener(`error`,e=>{clearTimeout(r),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(m)}),this.messageHandler=g(m,h(this.bridge)),window.addEventListener(`message`,this.messageHandler),a()&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(m),s(m,()=>{e=!0,t.observe(m)})}});this.visibilityObserver=t,t.observe(m)}}renderInline(e,t){_(e),window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[t]=this.bridge,this.bridge._container=this.container;let n=document.createElement(`div`);n.className=`sprinkle-content`,n.innerHTML=e,this.container.appendChild(n),v(n);let r=y(n,t);this.scripts=x(n,r)}dispose(){this.visibilityObserver&&=(this.visibilityObserver.disconnect(),null),this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(n(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 e.cachedLucideScript===null?(e.lucideScriptPromise===null&&(e.lucideScriptPromise=(async()=>{try{let t=await fetch(chrome.runtime.getURL(`lucide-icons.js`));if(t.ok){let n=await t.text();return e.cachedLucideScript=n,n}console.warn(`[sprinkle-renderer] lucide-icons.js fetch returned non-ok status:`,t.status)}catch(e){console.warn(`[sprinkle-renderer] lucide-icons.js fetch failed:`,e)}finally{e.lucideScriptPromise=null}return``})()),e.lucideScriptPromise):e.cachedLucideScript}};function C(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 w(){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(C(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{s as i,w as n,a as r,S as t};