sliccy 6.153.0 → 6.154.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +1 -1
  2. package/dist/ui/.vite/manifest.json +224 -198
  3. package/dist/ui/assets/{SKILL-zHRhO4F3.js → SKILL-S80DGuUz.js} +1 -1
  4. package/dist/ui/assets/{account-store-Br-5Tahn.js → account-store-BgFuxoIt.js} +1 -1
  5. package/dist/ui/assets/{account-store-DT3VDbvp.js → account-store-BqdqUcgS.js} +1 -1
  6. package/dist/ui/assets/{adobe-s7kqWKTP.js → adobe-BWEqvpfE.js} +1 -1
  7. package/dist/ui/assets/{adobe-D-SRO3WV.js → adobe-De7VHe-t.js} +1 -1
  8. package/dist/ui/assets/{agent-bridge-DPAiiTJu.js → agent-bridge-EXV0qNBB.js} +1 -1
  9. package/dist/ui/assets/{agent-panels-C-vXgmUa.js → agent-panels-dcldnH3V.js} +1 -1
  10. package/dist/ui/assets/{apply-layout-aXZfO5zJ.js → apply-layout-DVgK-NlB.js} +1 -1
  11. package/dist/ui/assets/{apps-CfzNbgxN.js → apps-BqrASr5C.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-CENnbCPD.js → azure-openai-94kdulWT.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-Bv0RSahJ.js → azure-openai-vXGFZfPE.js} +1 -1
  14. package/dist/ui/assets/{budget-usage-source-CI1VrdHF.js → budget-usage-source-BNEsxDHX.js} +1 -1
  15. package/dist/ui/assets/{cdp-BpGYDjo4.js → cdp-D0GOzfX9.js} +1 -1
  16. package/dist/ui/assets/{cerebras-DW9t3pME.js → cerebras-eckgXNEU.js} +1 -1
  17. package/dist/ui/assets/{cerebras-D1qiSEMk.js → cerebras-v41u2mpJ.js} +1 -1
  18. package/dist/ui/assets/{composer-speech-D3-kZTJe.js → composer-speech-ButVgF9_.js} +1 -1
  19. package/dist/ui/assets/{connect-surface-CNxDpOvY.js → connect-surface-C0WXwJHl.js} +1 -1
  20. package/dist/ui/assets/{directed-approval-ByZDWCge.js → directed-approval-D1CLB6cG.js} +1 -1
  21. package/dist/ui/assets/{fs-DqBbpVZo.js → fs-DK3k_wQh.js} +2 -2
  22. package/dist/ui/assets/{fs-D_5Hf9-X.js → fs-mC_RRTZZ.js} +1 -1
  23. package/dist/ui/assets/{github-DxToYpZG.js → github-BLOM522m.js} +2 -2
  24. package/dist/ui/assets/{github-Dbs3fu5D.js → github-CT-Oyj_0.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-BtVP3b6q.js → github-copilot-CACLYChL.js} +1 -1
  26. package/dist/ui/assets/{github-copilot-DDIYDOoo.js → github-copilot-D2H-jvYu.js} +1 -1
  27. package/dist/ui/assets/{github-install-CfilaKPL.js → github-install-Bk-KTJD-.js} +1 -1
  28. package/dist/ui/assets/{github-zip-CowqpWqM.js → github-zip-Dvb4zHOl.js} +1 -1
  29. package/dist/ui/assets/{hear-Bmw4jv4C.js → hear-BXcOoxVl.js} +1 -1
  30. package/dist/ui/assets/{help-dis3gVin.js → help-BAqixBa0.js} +1 -1
  31. package/dist/ui/assets/hid-operations-C97SZtrY.js +1 -0
  32. package/dist/ui/assets/{js-realm-worker-BMbF2DPc.js → js-realm-worker-CRY5Fv-C.js} +2 -2
  33. package/dist/ui/assets/{jsh-runtime-extensions-6coWmZ2q.js → jsh-runtime-extensions-D6vP9Uiw.js} +1 -1
  34. package/dist/ui/assets/{kernel-worker-JD5PLtQg.js → kernel-worker-C1DLWYBM.js} +590 -584
  35. package/dist/ui/assets/{local-llm-3efEmI2R.js → local-llm-Cv98D1SL.js} +1 -1
  36. package/dist/ui/assets/{local-llm-8mNKYUyN.js → local-llm-D723hPLf.js} +1 -1
  37. package/dist/ui/assets/main-C-pVQBFE.js +22 -0
  38. package/dist/ui/assets/{main-cherry-BUC0V42i.js → main-cherry-BdH-nz0p.js} +1 -1
  39. package/dist/ui/assets/{memory-curation-seam-B1zdL89W.js → memory-curation-seam-eUVjWT6W.js} +1 -1
  40. package/dist/ui/assets/{mount-DQE9qVGW.js → mount-3VFe3Pa7.js} +3 -3
  41. package/dist/ui/assets/{mount-BU0YiStI.js → mount-Dh4tJ6XQ.js} +1 -1
  42. package/dist/ui/assets/{mount-recovery-szxkUpiN.js → mount-recovery-Cp7KYqTq.js} +1 -1
  43. package/dist/ui/assets/{new-session-CVLZettz.js → new-session-hwwKqrO5.js} +2 -2
  44. package/dist/ui/assets/{oauth-bootstrap-D4K4RG4i.js → oauth-bootstrap-BP7bAgwJ.js} +2 -2
  45. package/dist/ui/assets/{onboarding-orchestrator-c2j_jTmA.js → onboarding-orchestrator-DOOTJ9OG.js} +1 -1
  46. package/dist/ui/assets/{openai-codex-CK-EVEzJ.js → openai-codex--3foibzj.js} +1 -1
  47. package/dist/ui/assets/{openai-codex-BB6AGAk4.js → openai-codex-vGpH6Ldz.js} +1 -1
  48. package/dist/ui/assets/{openrouter-D7x3pGdS.js → openrouter-B3v5OQPe.js} +1 -1
  49. package/dist/ui/assets/{openrouter-DIe9K8K3.js → openrouter-D17vOiK5.js} +1 -1
  50. package/dist/ui/assets/{openrouter-free-DJ5lPq7S.js → openrouter-free-DndyeHH8.js} +1 -1
  51. package/dist/ui/assets/{openrouter-free-CENDt7Ou.js → openrouter-free-Mha-ykI6.js} +1 -1
  52. package/dist/ui/assets/{openrouter-oauth-cIflZeMd.js → openrouter-oauth-C4aGXNeF.js} +1 -1
  53. package/dist/ui/assets/{openrouter-oauth-D32eGAS-.js → openrouter-oauth-ov7dnUnh.js} +1 -1
  54. package/dist/ui/assets/panel-rpc-handlers-CDsWA3s8.js +2 -0
  55. package/dist/ui/assets/{panelize-shell-B89wjO8U.js → panelize-shell-CXpZWzgn.js} +1 -1
  56. package/dist/ui/assets/{provider-CSA17s1P.js → provider-2fDgJArv.js} +2 -2
  57. package/dist/ui/assets/{provider-C0eIfUUt.js → provider-BtT9_ZsY.js} +1 -1
  58. package/dist/ui/assets/provider-settings-D2AYwHOa.js +1 -0
  59. package/dist/ui/assets/provider-store-access-BdvWm9Kj.js +1 -0
  60. package/dist/ui/assets/provider-store-access-C5A5Se3D.js +1 -0
  61. package/dist/ui/assets/{providers-CIJO5pfi.js → providers-BWmPj6ob.js} +2 -2
  62. package/dist/ui/assets/{providers-DdkG0NSO.js → providers-D_mm-oKv.js} +1 -1
  63. package/dist/ui/assets/{quick-llm-DzOHzN-I.js → quick-llm-Ch_X9AH9.js} +1 -1
  64. package/dist/ui/assets/{recovery-screen-7YwqCNIg.js → recovery-screen-Ldb8xS5S.js} +1 -1
  65. package/dist/ui/assets/{remote-terminal-view-D0AXaUk6.js → remote-terminal-view-DJrkDTkY.js} +1 -1
  66. package/dist/ui/assets/{run-rqExAVOb.js → run-Bmb6g7U2.js} +2 -2
  67. package/dist/ui/assets/{run-DbnU3wyl.js → run-DXUToOLa.js} +1 -1
  68. package/dist/ui/assets/{run-CD28vEFB.js → run-xG3-BOwR.js} +1 -1
  69. package/dist/ui/assets/{session-jsonl-4dg00tv6.js → session-jsonl-DlNZajGM.js} +1 -1
  70. package/dist/ui/assets/{setup-feature-flags-remote-DFRtQB19.js → setup-feature-flags-remote-D-IPtvuE.js} +1 -1
  71. package/dist/ui/assets/sidecar-repair-DRUvDMSe.js +1 -0
  72. package/dist/ui/assets/{silent-renew-backoff-DEAQc8gF.js → silent-renew-backoff-BocHwLdw.js} +1 -1
  73. package/dist/ui/assets/{skills-CyAtIBDH.js → skills-CTDnQTUW.js} +1 -1
  74. package/dist/ui/assets/slicc-version-CWl4uhV3.js +1 -0
  75. package/dist/ui/assets/{snapshot-rQItub8y.js → snapshot-BZ-_n6uU.js} +1 -1
  76. package/dist/ui/assets/{snapshot-features-CXvFb5kP.js → snapshot-features-BWzc1ERL.js} +1 -1
  77. package/dist/ui/assets/{soundscape-BfgaSN-Y.js → soundscape-CowYlYSr.js} +1 -1
  78. package/dist/ui/assets/{speak-zFtFhgmL.js → speak-rCiisrK7.js} +1 -1
  79. package/dist/ui/assets/sprinkle-bridge-channel-Bur-XBNy.js +1 -0
  80. package/dist/ui/assets/{sprinkle-bridge-channel-Clwu-X1e.js → sprinkle-bridge-channel-DTP5IbJB.js} +1 -1
  81. package/dist/ui/assets/sprinkle-manager-DaVvW4Pl.js +1 -0
  82. package/dist/ui/assets/sprinkle-op-handler-DyRlIvAg.js +1 -0
  83. package/dist/ui/assets/sprinkle-renderer-CDcbztf1.js +333 -0
  84. package/dist/ui/assets/{state-DVDUDADZ.js → state-DHftNsPN.js} +1 -1
  85. package/dist/ui/assets/{store-3A-5dTwk.js → store-CTM4679Z.js} +1 -1
  86. package/dist/ui/assets/{store-DWLwX9LI.js → store-MZJeSOYF.js} +1 -1
  87. package/dist/ui/assets/{sudo-Vmn2lmIe.js → sudo-DLRz2gLx.js} +1 -1
  88. package/dist/ui/assets/{sync-dialog-CS1RAgot.js → sync-dialog-BUFCYPxf.js} +1 -1
  89. package/dist/ui/assets/{transformers-env-DAziCt21.js → transformers-env-BfjOXz9f.js} +1 -1
  90. package/dist/ui/assets/{tray-sidecar-Tsj_KlbJ.js → tray-sidecar-BP70hrzZ.js} +1 -1
  91. package/dist/ui/assets/{upgrade-detection-BXADtDDx.js → upgrade-detection-Be8A7nY7.js} +1 -1
  92. package/dist/ui/assets/usb-claim-broker-CnZXiC75.js +1 -0
  93. package/dist/ui/assets/usb-claim-broker-Do2ZUpNv.js +1 -0
  94. package/dist/ui/assets/usb-device-registry--JwKRTYp.js +1 -0
  95. package/dist/ui/assets/usb-device-registry-DFzxaOky.js +1 -0
  96. package/dist/ui/assets/usb-operations-B1y8RuQp.js +2 -0
  97. package/dist/ui/assets/usb-picker-O-2gFMNl.js +1 -0
  98. package/dist/ui/assets/{voice-reply-BGwjuDSD.js → voice-reply-BtqQr2DX.js} +1 -1
  99. package/dist/ui/assets/{wc-attach-lctJI9Cb.js → wc-attach-zW7DuRo7.js} +2 -2
  100. package/dist/ui/assets/{wc-extension-CJ8-0uuM.js → wc-extension-DGYx9jMG.js} +2 -2
  101. package/dist/ui/assets/wc-follower-Bc6Mmmda.js +17 -0
  102. package/dist/ui/assets/{wc-follower-oauth-Dxh3czLI.js → wc-follower-oauth-DOaUEVw8.js} +1 -1
  103. package/dist/ui/assets/{wc-gelatiere-BXF8unbT.js → wc-gelatiere-CdqOnO6V.js} +1 -1
  104. package/dist/ui/assets/{wc-live-CY77nXRu.js → wc-live-BrKyGs-7.js} +7 -7
  105. package/dist/ui/assets/{wc-nav-D4j-dAFm.js → wc-nav-dSAbBsA5.js} +2 -2
  106. package/dist/ui/assets/{wc-onboarding-Daxory4F.js → wc-onboarding-C1uyya9g.js} +2 -2
  107. package/dist/ui/assets/{wc-permissions-Ch85s0Vv.js → wc-permissions-BEmYiApA.js} +2 -2
  108. package/dist/ui/assets/wc-permissions-providers-wSXekwkO.js +2 -0
  109. package/dist/ui/assets/{wc-placeholder-R85lT45F.js → wc-placeholder-Cw7uGVuJ.js} +3 -3
  110. package/dist/ui/assets/{wc-secret-request-Cq3B_6l5.js → wc-secret-request-CwA6DiWC.js} +1 -1
  111. package/dist/ui/assets/{wc-settings-D6g62psJ.js → wc-settings-DJEhDr23.js} +3 -3
  112. package/dist/ui/assets/{wc-shell-CVnS13Pt.js → wc-shell-C-DwVQCG.js} +3 -3
  113. package/dist/ui/assets/{wc-shortcut-config-Dq7vpLhS.js → wc-shortcut-config-D9HBEfqv.js} +1 -1
  114. package/dist/ui/assets/{wc-shortcuts-CQHGJh5j.js → wc-shortcuts-7i4KncH2.js} +1 -1
  115. package/dist/ui/assets/wc-sprinkles-DsRJYYRI.js +2 -0
  116. package/dist/ui/assets/{wc-transcript-export-CqrBcsOg.js → wc-transcript-export-Dq9HNkpA.js} +2 -2
  117. package/dist/ui/assets/{wc-tray-CBlFR1Md.js → wc-tray-f6xi76Bq.js} +4 -4
  118. package/dist/ui/assets/welcome-detection-DmqQ-hO4.js +1 -0
  119. package/dist/ui/assets/{whisper-session-DzS7Olt2.js → whisper-session-B6knWfce.js} +2 -2
  120. package/dist/ui/assets/{xai-grok-B_eBvQy4.js → xai-grok-B0KRInrx.js} +1 -1
  121. package/dist/ui/assets/{xai-grok-D3bEO2ts.js → xai-grok-BIfBT2BL.js} +1 -1
  122. package/dist/ui/index.html +3 -3
  123. package/dist/ui/packages/webapp/index.html +3 -3
  124. package/package.json +1 -1
  125. package/dist/ui/assets/main-DNSx5t9M.js +0 -22
  126. package/dist/ui/assets/panel-rpc-handlers-ChtHTqiQ.js +0 -2
  127. package/dist/ui/assets/provider-settings-CK9AxQ6e.js +0 -1
  128. package/dist/ui/assets/provider-store-access-D0e3HMUh.js +0 -1
  129. package/dist/ui/assets/provider-store-access-D6D8_V2Z.js +0 -1
  130. package/dist/ui/assets/sidecar-repair-G397kiLT.js +0 -1
  131. package/dist/ui/assets/slicc-version-BTzaBTax.js +0 -1
  132. package/dist/ui/assets/sprinkle-bridge-channel-CftxYQ9D.js +0 -1
  133. package/dist/ui/assets/sprinkle-manager-CiAkASWE.js +0 -1
  134. package/dist/ui/assets/sprinkle-op-handler-Cb1pl8Ok.js +0 -1
  135. package/dist/ui/assets/sprinkle-renderer-DDP-UxN2.js +0 -315
  136. package/dist/ui/assets/usb-device-registry-DmUBqrA-.js +0 -1
  137. package/dist/ui/assets/usb-operations-BsAiCAWF.js +0 -1
  138. package/dist/ui/assets/usb-picker-Cbm0jfjl.js +0 -1
  139. package/dist/ui/assets/wc-follower-BABTMpUh.js +0 -17
  140. package/dist/ui/assets/wc-permissions-providers-CVe-8jSH.js +0 -2
  141. package/dist/ui/assets/wc-sprinkles-CnPEFIgm.js +0 -2
  142. package/dist/ui/assets/welcome-detection-Dv6cuKXV.js +0 -1
@@ -1,315 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/slicc-editor-BwV9b9S6.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/upgrade-own-properties-DI0JKxGt.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{J as t}from"./wc-shortcuts-CQHGJh5j.js";import{n,r}from"./hid-device-registry-B2R-0rNt.js";import{a as i,i as a}from"./serial-port-registry-CCqklAEr.js";import{A as o,C as s,D as c,O as l,S as u,T as d,_ as f,a as p,b as m,c as h,d as g,f as ee,g as te,h as ne,i as re,l as ie,m as ae,n as oe,o as se,p as _,r as v,s as y,t as b,u as x,v as S,w as C}from"./usb-operations-BsAiCAWF.js";import{i as ce,r as w}from"./usb-device-registry-DmUBqrA-.js";import"./shared-mBEktoxE.js";import{a as T,n as le,r as ue}from"./theme-DFKCBK8N.js";function E(){try{let e=globalThis.window??globalThis;return e.self!==e.top}catch{return!0}}var D=new WeakSet;function O(e,t){if(D.has(e)){t?.();return}let n=!1;k(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&k(e)},500)}function k(e,t,n){if(D.has(e)){t?.();return}D.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,a=a=>{i||(i=!0,e.style.display=r,D.delete(e),a&&n?.(),t?.())},o=globalThis.requestAnimationFrame;typeof o==`function`&&o(()=>{o(()=>a(!0))}),setTimeout(()=>a(!1),100)}var A=`
3
- var _themeOverrideKeys = [];
4
- var _themeCssStyle = null;
5
- function applyIframeTheme(event) {
6
- if (event.source !== parent) return;
7
- var msg = event.data;
8
- document.documentElement.classList.toggle('theme-light', !!msg.isLight);
9
- var rootStyle = document.documentElement.style;
10
- _themeOverrideKeys.forEach(function(key) { rootStyle.removeProperty(key); });
11
- _themeOverrideKeys = [];
12
- Object.entries(msg.overrides || {}).forEach(function(entry) {
13
- if (entry[0].startsWith('--') && typeof entry[1] === 'string') {
14
- rootStyle.setProperty(entry[0], entry[1]);
15
- _themeOverrideKeys.push(entry[0]);
16
- }
17
- });
18
- if (typeof msg.css === 'string' && msg.css) {
19
- if (!_themeCssStyle) {
20
- _themeCssStyle = document.createElement('style');
21
- _themeCssStyle.id = 'slicc-iframe-theme-overrides';
22
- document.head.appendChild(_themeCssStyle);
23
- }
24
- _themeCssStyle.textContent = msg.css;
25
- } else if (_themeCssStyle) {
26
- _themeCssStyle.remove();
27
- _themeCssStyle = null;
28
- }
29
- }
30
- `,j=`slicc-sprinkle-routes`;function M(){try{let e=localStorage.getItem(j);return e?JSON.parse(e):{}}catch{return{}}}function N(e){return M()[e]}function P(e,t){return e||(typeof document<`u`&&t===document.body?`document.body`:`container`)}function F(e,t,n){return`Element has zero dimensions (`+e+`, `+t+`x`+n+`)`}function I(e,t,n,r,i,a){let o=`Screenshot rendering failed (`+e+`; `+t+` `+n+`x`+r;return i&&(o+=`; serialised SVG `+i+` bytes`),a&&(o+=`; data URL `+a+` bytes`),o+`)`}function L(e,t,n){let r=e;return e.indexOf(`xmlns="http://www.w3.org/1999/xhtml"`)===-1&&(r=`<div xmlns="http://www.w3.org/1999/xhtml">`+e+`</div>`),`<svg xmlns="http://www.w3.org/2000/svg" width="`+t+`" height="`+n+`"><foreignObject width="100%" height="100%" xmlns="http://www.w3.org/1999/xhtml">`+r+`</foreignObject></svg>`}function R(){return`var screenshotTargetLabel = `+P.toString()+`;
31
- var screenshotZeroDimensionError = `+F.toString()+`;
32
- var screenshotRasteriseError = `+I.toString()+`;
33
- var buildScreenshotSvg = `+L.toString()+`;
34
- `}async function z(e,t){let n=t??document.body,r=e?n.querySelector(e):n,i=P(e,r);if(!r)throw Error(`Element not found: `+(e||i));let a=r.getBoundingClientRect(),o=Math.ceil(a.width),s=Math.ceil(a.height);if(o===0||s===0)throw Error(F(i,a.width,a.height));let c=document.createElement(`canvas`),l=window.devicePixelRatio||1;c.width=o*l,c.height=s*l;let u=c.getContext(`2d`);if(!u)throw Error(I(`canvas context unavailable`,i,o,s));u.scale(l,l);let d=r.cloneNode(!0);B(d);let f;try{f=new XMLSerializer().serializeToString(d)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(I(`XMLSerializer threw: `+t,i,o,s))}return V(L(f,o,s),u,c,i,o,s)}function B(e){if(!(`querySelectorAll`in e))return;let t=e.querySelectorAll(`script, link[rel="stylesheet"]`);for(let e=0;e<t.length;e++)t[e].parentNode?.removeChild(t[e])}function V(e,t,n,r,i,a){let o=e.length,s;try{s=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(e)}catch{return Promise.reject(Error(I(`data-URL too large`,r,i,a,o)))}let c=s.length,l=H(e,s,c,r,i,a);return l instanceof Error?Promise.reject(l):new Promise((e,s)=>{let u=new Image,d=()=>{if(l.blobUrl)try{URL.revokeObjectURL(l.blobUrl)}catch{}};u.onload=()=>{d(),t.drawImage(u,0,0),e(n.toDataURL(`image/png`))},u.onerror=()=>{d();let e=!l.blobUrl&&c>2097152?`data-URL too large`:`image decode failed`;s(Error(I(e,r,i,a,o,c)))},u.src=l.src})}function H(e,t,n,r,i,a){let o=()=>Error(I(`data-URL too large`,r,i,a,e.length,n));if(typeof URL<`u`&&typeof URL.createObjectURL==`function`)try{let t=URL.createObjectURL(new Blob([e],{type:`image/svg+xml;charset=utf-8`}));return{src:t,blobUrl:t}}catch{return n>2097152?o():{src:t,blobUrl:null}}return n>2097152?o():{src:t,blobUrl:null}}var U=`SLICCJSH`;function de(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function fe(e,t){return`var REQ=${JSON.stringify({op:e,args:t})};var P=${JSON.stringify(U)};function emit(o){process.stdout.write(P+JSON.stringify(o));}try{var op=REQ.op,a=REQ.args||[],out;if(op==='fetch'){var r=await fetch(a[0],a[1]||undefined);var h={};r.headers.forEach(function(v,k){h[k]=v;});var u=new Uint8Array(await r.arrayBuffer());var bin="",C=0x8000;for(var i=0;i<u.length;i+=C){bin+=String.fromCharCode.apply(null,u.subarray(i,i+C));}out={ok:r.ok,status:r.status,statusText:r.statusText,url:r.url,headers:h,bodyBase64:btoa(bin)};}else if(op==='http'){var http=require("sliccy:http");var c=http.client(a[0]||{});var res=await c[a[1]](a[2],Object.assign({},a[3]||{},{raw:true}));out={status:res.status,headers:res.headers,body:res.body};}else if(op==='browser'){var browser=require("sliccy:browser");var m=a[0];if(typeof browser[m]!=="function")throw new Error("browser."+m+" is not available over the sprinkle bridge");out=await browser[m].apply(browser,a.slice(1));}else if(op==='spawn'){out=await require("sliccy:exec").spawn(a[0]);}else if(op==='fetchToFile'){out=await require("node:fs").fetchToFile(a[0],a[1]);}else{throw new Error("unknown jsh op: "+op);}emit({ok:true,value:out});}catch(e){emit({ok:false,error:(e&&e.message)?e.message:String(e)});}`}function W(e,t){return`node -e ${de(fe(e,t))}`}function pe(e){let t=e.stdout.lastIndexOf(U);if(t===-1){let t=e.stderr.trim()||e.stdout.trim()||`exit code ${e.exitCode}`;throw Error(`jsh bridge: no result (${t})`)}let n;try{n=JSON.parse(e.stdout.slice(t+10))}catch{throw Error(`jsh bridge: malformed result`)}if(!n.ok)throw Error(n.error||`jsh bridge error`);return n.value}async function G(e,t,n){return pe(await e(W(t,n)))}function K(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}function q(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function J(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function me(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}function Y(e){let t=atob(e.bodyBase64),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);let r=e.status===101||e.status===103||e.status===204||e.status===205||e.status===304?null:n,i=new Headers(e.headers);try{let t=new Response(r,{status:e.status,statusText:e.statusText,headers:i});return Object.defineProperty(t,"url",{value:e.url,configurable:!0}),t}catch{let t=new Response(r,{headers:i}),n=e.status>=200&&e.status<300;return Object.defineProperty(t,"status",{value:e.status,configurable:!0}),Object.defineProperty(t,"statusText",{value:e.statusText,configurable:!0}),Object.defineProperty(t,"ok",{value:n,configurable:!0}),Object.defineProperty(t,"url",{value:e.url,configurable:!0}),t}}function he(){return`var buildFetchResponse = `+Y.toString()+`;
35
- `}function X(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}var ge=class{listeners=new Map;lickHandler;fs;closeHandler;minimizeHandler;stopConeHandler;attachImageHandler;captureScreenHandler;execHandler;hidSubs=new Map;iframePusher;constructor(e,t,n,r,i,a,o,s,c){this.fs=e,this.lickHandler=t,this.closeHandler=n,this.minimizeHandler=r,this.stopConeHandler=i,this.attachImageHandler=a,this.captureScreenHandler=o,this.execHandler=s,this.iframePusher=c}setIframePusher(e){this.iframePusher=e}async hidOp(e,t,i){let a=r();switch(t){case`list`:{let e=n();if(!e)throw Error(`WebHID is unavailable in this browser`);return f(a,e)}case`request`:{let e=n();if(!e)throw Error(`WebHID is unavailable in this browser`);return m(a,e,i[0]??[])}case`info`:return te(a,i[0]);case`open`:{let t=i[0];return await S(a,t),await this.attachHidInputReports(e,t),{ok:!0}}case`close`:{let t=i[0];return await this.detachHidInputReports(e,t),await ne(a,t),{ok:!0}}case`sendReport`:{let e=i[0],t=i[1],n=me(i[2]),r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength);return await u(a,e,t,r),{ok:!0}}default:throw Error(`hid: unknown op '${t}'`)}}async serialOp(e,t,n){let r=i();switch(t){case`list`:{let e=a();if(!e)throw Error(`Web Serial is unavailable in this browser`);return c(r,e)}case`request`:{let e=a();if(!e)throw Error(`Web Serial is unavailable in this browser`);return o(r,e,n[0]??[])}case`info`:return d(r,n[0]);case`open`:{let e=n[0],t=n[1]??{baudRate:9600};return await l(r,e,t),{ok:!0}}case`close`:{let e=n[0];return await C(r,e),{ok:!0}}default:throw Error(`serial: unknown op '${t}'`)}}async usbOp(e,t,n){let r=ce();switch(t){case`list`:{let e=w();if(!e)throw Error(`WebUSB is unavailable in this browser`);return y(r,e)}case`request`:{let e=w();if(!e)throw Error(`WebUSB is unavailable in this browser`);return x(r,e,n[0]??[])}case`info`:return se(r,n[0]);case`open`:return await h(r,n[0]),{ok:!0};case`close`:return await v(r,n[0]),{ok:!0};case`reset`:return await g(r,n[0]),{ok:!0};case`selectConfig`:return await ee(r,n[0],n[1]),{ok:!0};case`claim`:return await b(r,n[0],n[1]),{ok:!0};case`release`:return await ie(r,n[0],n[1]),{ok:!0};case`clearHalt`:return await oe(r,n[0],n[1],n[2]),{ok:!0};case`controlIn`:{let e=await re(r,n[0],n[1],n[2]);return{status:e.status,base64:q(new Uint8Array(e.bytes))}}case`controlOut`:{let e=await p(r,n[0],n[1],K(J(n[2])));return{status:e.status,bytesWritten:e.bytesWritten}}case`transferIn`:{let e=await _(r,n[0],n[1],n[2]);return{status:e.status,base64:q(new Uint8Array(e.bytes))}}case`transferOut`:{let e=await ae(r,n[0],n[1],K(J(n[2])));return{status:e.status,bytesWritten:e.bytesWritten}}default:throw Error(`usb: unknown op '${t}'`)}}async deviceOp(e,t,n,r){if(t===`hid`)return this.hidOp(e,n,r);if(t===`serial`)return this.serialOp(e,n,r);if(t===`usb`)return this.usbOp(e,n,r);throw Error(`unknown device channel '${t}'`)}async attachHidInputReports(e,t){let n=this.hidSubs.get(e);if(n||(n=new Map,this.hidSubs.set(e,n)),n.has(t))return;let i=await s(r(),t,n=>{let r=n.bytes instanceof Uint8Array?n.bytes:new Uint8Array(n.bytes);this.deliverHidInputReport(e,{handle:t,reportId:n.reportId,data:r})});n.set(t,i)}async detachHidInputReports(e,t){let n=this.hidSubs.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&this.hidSubs.delete(e)}deliverHidInputReport(e,t){let n=this.listeners.get(`${e}:hid:inputreport`);if(n)for(let e of n){let r=n;setTimeout(()=>{if(r.has(e))try{e(t)}catch{}},0)}try{this.iframePusher?.(e,`hid:inputreport`,t)}catch{}}async runExec(e){if(!this.execHandler)return{stdout:``,stderr:`exec: shell bridge not available
36
- `,exitCode:127};try{return await this.execHandler(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async jshDispatch(e,t){return e===`readFileBinary`?{base64:q(await this.fs.readFile(t[0],{encoding:`binary`}))}:e===`writeFileBinary`?(await this.fs.writeFile(t[0],J(t[1])),!0):G(e=>this.runExec(e),e,t)}createLickHandler(e){return t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data,i={type:`sprinkle`,sprinkleName:e,targetScoop:N(e),timestamp:new Date().toISOString(),body:{action:n,data:r}};this.lickHandler(i)}}createScreenshotHandler(e){return async t=>e?z(t,e):``}createAgentHandler(){return async(e,t)=>{let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];t?.model&&i.push(`--model`,X(t.model)),t?.thinking&&i.push(`--thinking`,X(t.thinking)),t?.readOnly&&i.push(`--read-only`,X(t.readOnly)),i.push(X(n),X(r),X(e));let a=await this.runExec(i.join(` `));return{stdout:a.stdout||a.stderr,exitCode:a.exitCode}}}createHidApi(e){return{list:()=>this.hidOp(e,`list`,[]),request:t=>this.hidOp(e,`request`,[t??[]]),open:async t=>{await this.hidOp(e,`open`,[t])},close:async t=>{await this.hidOp(e,`close`,[t])},sendReport:async(t,n,r)=>{await this.hidOp(e,`sendReport`,[t,n,r])},on:(t,n)=>{if(t!==`inputreport`)return;let r=`${e}:hid:inputreport`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{t===`inputreport`&&this.listeners.get(`${e}:hid:inputreport`)?.delete(n)}}}createSerialApi(e){return{list:()=>this.serialOp(e,`list`,[]),request:t=>this.serialOp(e,`request`,[t??[]]),open:async(t,n)=>{await this.serialOp(e,`open`,[t,n])},close:async t=>{await this.serialOp(e,`close`,[t])}}}createUsbApi(e){return{list:()=>this.usbOp(e,`list`,[]),request:t=>this.usbOp(e,`request`,[t??[]]),open:async t=>{await this.usbOp(e,`open`,[t])},close:async t=>{await this.usbOp(e,`close`,[t])},reset:async t=>{await this.usbOp(e,`reset`,[t])},selectConfiguration:async(t,n)=>{await this.usbOp(e,`selectConfig`,[t,n])},claimInterface:async(t,n)=>{await this.usbOp(e,`claim`,[t,n])},releaseInterface:async(t,n)=>{await this.usbOp(e,`release`,[t,n])},clearHalt:async(t,n,r)=>{await this.usbOp(e,`clearHalt`,[t,n,r])},controlTransferIn:async(t,n,r)=>{let i=await this.usbOp(e,`controlIn`,[t,n,r]);return{status:i.status,bytes:J(i.base64)}},controlTransferOut:async(t,n,r)=>this.usbOp(e,`controlOut`,[t,n,q(r)]),transferIn:async(t,n,r)=>{let i=await this.usbOp(e,`transferIn`,[t,n,r]);return{status:i.status,bytes:J(i.base64)}},transferOut:async(t,n,r)=>this.usbOp(e,`transferOut`,[t,n,q(r)])}}createHttpClient(e){let t=t=>(n,r)=>this.jshDispatch(`http`,[e,t,n,r??null]);return{get:t(`get`),post:t(`post`),put:t(`put`),patch:t(`patch`),delete:t(`delete`)}}createAPI(e){let n={name:e,lick:this.createLickHandler(e),on:(t,n)=>{let r=`${e}:${t}`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{let r=`${e}:${t}`;this.listeners.get(r)?.delete(n)},readFile:async e=>await this.fs.readFile(e,{encoding:`utf-8`}),writeFile:async(e,t)=>{await this.fs.writeFile(e,t)},readDir:async e=>(await this.fs.readDir(e)).map(e=>({name:e.name,type:e.type})),exists:async e=>this.fs.exists(e),stat:async e=>{let t=await this.fs.stat(e);return{type:t.type,size:t.size}},mkdir:async e=>{await this.fs.mkdir(e,{recursive:!0})},rm:async e=>{await this.fs.rm(e)},screenshot:e=>this.createScreenshotHandler(n._container)(e),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch{}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch{return null}},open:e=>{let n=/^https?:|^chrome-extension:/.test(e)?e:t(e);window.open(n,`_blank`)},close:()=>this.closeHandler(e),minimize:()=>this.minimizeHandler(e),stopCone:()=>this.stopConeHandler(),attachImage:(e,t,n)=>this.attachImageHandler(e,t,n),captureScreen:()=>this.captureScreenHandler(),exec:Object.assign(e=>this.runExec(e),{spawn:e=>this.jshDispatch(`spawn`,[e])}),fetch:async(e,t)=>Y(await this.jshDispatch(`fetch`,[e,t??null])),http:{client:e=>this.createHttpClient(e)},browser:{findTab:e=>this.jshDispatch(`browser`,[`findTab`,e]),ensureTab:(e,t)=>this.jshDispatch(`browser`,[`ensureTab`,e,t??{}]),eval:(e,t)=>this.jshDispatch(`browser`,[`eval`,e,t]),evalAsync:(e,t)=>this.jshDispatch(`browser`,[`evalAsync`,e,t]),cookie:(e,t)=>this.jshDispatch(`browser`,[`cookie`,e,t]),localStorage:(e,t)=>this.jshDispatch(`browser`,[`localStorage`,e,t]),fetch:(e,t,n)=>this.jshDispatch(`browser`,[`fetch`,e,t,n??{}])},hid:this.createHidApi(e),serial:this.createSerialApi(e),usb:this.createUsbApi(e),readFileBinary:async e=>J((await this.jshDispatch(`readFileBinary`,[e])).base64),writeFileBinary:async(e,t)=>{await this.jshDispatch(`writeFileBinary`,[e,q(t)])},fetchToFile:(e,t)=>this.jshDispatch(`fetchToFile`,[e,t]),_jsh:(e,t)=>this.jshDispatch(e,t),_device:(t,n,r)=>this.deviceOp(e,t,n,r),agent:this.createAgentHandler()};return n}pushUpdate(e,t){let n=`${e}:update`,r=this.listeners.get(n);if(r)for(let e of r){let n=r;setTimeout(()=>{if(n.has(e))try{e(t)}catch{}},0)}}removeSprinkle(e){for(let t of this.listeners.keys())t.startsWith(`${e}:`)&&this.listeners.delete(t);let t=this.hidSubs.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}this.hidSubs.delete(e)}}};function _e(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}function ve(e){return`width: 100%; height: 100%; flex: 1; border: none; min-height: 0;`+(e?` transform: translateZ(0);`:``)}function ye(e,t){let n=t.clientWidth,r=t.clientHeight;return n<=0||r<=0?!1:(e.style.width=`${n}px`,e.style.height=`${r}px`,!0)}function be(e){e.style.width=`100%`,e.style.height=`100%`}function xe(e,t){let n=e.match(/<head\b[^>]*>/i);if(n){let r=n.index+n[0].length;return e.slice(0,r)+t+e.slice(r)}let r=e.match(/<script\b/i);if(r)return e.slice(0,r.index)+t+e.slice(r.index);let i=e.match(/<html\b[^>]*>/i);if(i){let n=i.index+i[0].length;return e.slice(0,n)+t+e.slice(n)}return t+e}function Se(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>{r(Error(`full-doc iframe load timed out`))},5e3);e.addEventListener(`load`,()=>{clearTimeout(i),t(),n()},{once:!0}),e.addEventListener(`error`,()=>{clearTimeout(i),r(Error(`full-doc iframe failed to load`))},{once:!0})})}function Z(e,t,n,r={}){let i=e.contentWindow;if(i)try{i.postMessage({type:t,id:n,...r},`*`)}catch(e){if(r.error!==void 0)return;let a=e instanceof Error?e.message:String(e);try{i.postMessage({type:t,id:n,error:a},`*`)}catch{}}}function Q(e,t,n,r,i){r.then(r=>Z(e,t,n,i(r)),r=>Z(e,t,n,{error:r instanceof Error?r.message:String(r)}))}function Ce(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)=>Q(t,`sprinkle-readfile-response`,n.id,e.readFile(n.path),e=>({content:e})),"sprinkle-writefile":(t,n)=>Q(t,`sprinkle-writefile-response`,n.id,e.writeFile(n.path,n.content),()=>({})),"sprinkle-readdir":(t,n)=>Q(t,`sprinkle-readdir-response`,n.id,e.readDir(n.path),e=>({entries:e})),"sprinkle-exists":(t,n)=>Q(t,`sprinkle-exists-response`,n.id,e.exists(n.path),e=>({exists:e})),"sprinkle-stat":(t,n)=>Q(t,`sprinkle-stat-response`,n.id,e.stat(n.path),e=>({stat:e})),"sprinkle-mkdir":(t,n)=>Q(t,`sprinkle-mkdir-response`,n.id,e.mkdir(n.path),()=>({})),"sprinkle-rm":(t,n)=>Q(t,`sprinkle-rm-response`,n.id,e.rm(n.path),()=>({})),"sprinkle-capture-screen":(t,n)=>Q(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)=>Q(t,`sprinkle-exec-response`,n.id,e.exec(n.cmd),e=>({result:e})),"sprinkle-agent":(t,n)=>Q(t,`sprinkle-agent-response`,n.id,e.agent(n.prompt,n.opts),e=>({result:e})),"sprinkle-jsh":(t,n)=>Q(t,`sprinkle-jsh-response`,n.id,e._jsh(n.op,n.args),e=>({result:e})),"sprinkle-device-op":(t,n)=>Q(t,`sprinkle-device-op-response`,n.id,e._device(n.channel,n.op,n.args??[]),e=>({result:e}))}}function we(e,t){return n=>{if(n.source!==e.contentWindow)return;let r=n.data;r?.type&&t[r.type]?.(e,r)}}function Te(t){if(t.includes(`<slicc-editor`)&&!customElements.get(`slicc-editor`)&&e(()=>import(`./slicc-editor-BwV9b9S6.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3])),t.includes(`<slicc-diff`)&&!customElements.get(`slicc-diff`)){let e=document.createElement(`script`);e.src=`/slicc-diff.js`,document.head.appendChild(e)}}function Ee(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 De(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 Oe(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 ke(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=[...Oe(e)].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
37
- `);i.textContent=`(function() { var slicc = ${t}; var bridge = slicc;\n`+r.textContent+(n?`
38
- `+n:``)+`
39
- })();`}e.appendChild(i),n.push(i)}return n}var Ae=class{container;bridge;scripts=[];iframe=null;iframeLoadHandler=null;registeredWindow=null;messageHandler=null;visibilityObserver=null;bridgeLifecycleReady=!1;pendingBridgeLifecycle=[];constructor(e,t){this.container=e,this.bridge=t}async render(e,t){if(this.dispose(),_e(e))try{await this.renderFullDoc(e,t)}catch(e){throw this.dispose(),e}else this.renderInline(e,t)}activateBridgeLifecycle(){for(this.bridgeLifecycleReady=!0;this.bridgeLifecycleReady&&this.pendingBridgeLifecycle.length>0;)this.pendingBridgeLifecycle.shift()()}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 $()}generateBridgeScript(){return`(function() {
40
- var _updateListeners = new Set();
41
- var _hidInputReportListeners = new Set();
42
- var _sprinkleName = '';
43
- var _state = null;
44
- var _cbId = 0;
45
- var _callbacks = {};
46
- ${A}
47
-
48
- window.addEventListener('message', function(event) {
49
- var msg = event.data;
50
- if (!msg || !msg.type) return;
51
- if (msg.type === 'sprinkle-init') {
52
- _sprinkleName = msg.name || '';
53
- _state = msg.savedState || null;
54
- if (window.slicc) window.slicc.name = _sprinkleName;
55
- } else if (msg.type === 'sprinkle-update') {
56
- _updateListeners.forEach(function(cb) { try { cb(msg.data); } catch(e) { console.error(e); } });
57
- } else if (msg.type === 'sprinkle-device-event') {
58
- if (msg.channel === 'hid:inputreport') {
59
- _hidInputReportListeners.forEach(function(cb) {
60
- try { cb(msg.payload); } catch(e) { console.error(e); }
61
- });
62
- }
63
- } else if (msg.type === 'slicc-theme') {
64
- applyIframeTheme(event);
65
- } else if (msg.id && _callbacks[msg.id]) {
66
- var cb = _callbacks[msg.id];
67
- delete _callbacks[msg.id];
68
- cb(msg);
69
- }
70
- });
71
-
72
- function _vfsCall(type, params, extractResult) {
73
- return new Promise(function(resolve, reject) {
74
- var id = ++_cbId;
75
- _callbacks[id] = function(msg) {
76
- if (msg.error) reject(new Error(msg.error));
77
- else resolve(extractResult ? extractResult(msg) : undefined);
78
- };
79
- var m = { type: type, id: id };
80
- if (params) { for (var k in params) m[k] = params[k]; }
81
- parent.postMessage(m, '*');
82
- });
83
- }
84
-
85
- function _jshCall(op, args) {
86
- return _vfsCall('sprinkle-jsh', { op: op, args: args }, function(m) { return m.result; });
87
- }
88
- function _deviceCall(channel, op, args) {
89
- return _vfsCall('sprinkle-device-op', { channel: channel, op: op, args: args || [] },
90
- function(m) { return m.result; });
91
- }
92
- function _b64ToU8(b64) {
93
- var bin = atob(b64); var u8 = new Uint8Array(bin.length);
94
- for (var i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);
95
- return u8;
96
- }
97
- function _u8ToB64(bytes) {
98
- var bin = ''; for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
99
- return btoa(bin);
100
- }
101
-
102
- ${R()}
103
- ${he()}
104
-
105
- var api = {
106
- lick: function(event) {
107
- var action, data;
108
- if (typeof event === 'string') { action = event; } else { action = event.action; data = event.data; }
109
- parent.postMessage({ type: 'sprinkle-lick', action: action, data: data }, '*');
110
- },
111
- on: function(event, callback) { if (event === 'update') _updateListeners.add(callback); },
112
- off: function(event, callback) { if (event === 'update') _updateListeners.delete(callback); },
113
- readFile: function(path) {
114
- return _vfsCall('sprinkle-readfile', { path: path }, function(m) { return m.content; });
115
- },
116
- writeFile: function(path, content) {
117
- return _vfsCall('sprinkle-writefile', { path: path, content: content });
118
- },
119
- readDir: function(path) {
120
- return _vfsCall('sprinkle-readdir', { path: path }, function(m) { return m.entries; });
121
- },
122
- exists: function(path) {
123
- return _vfsCall('sprinkle-exists', { path: path }, function(m) { return m.exists; });
124
- },
125
- stat: function(path) {
126
- return _vfsCall('sprinkle-stat', { path: path }, function(m) { return m.stat; });
127
- },
128
- mkdir: function(path) {
129
- return _vfsCall('sprinkle-mkdir', { path: path });
130
- },
131
- rm: function(path) {
132
- return _vfsCall('sprinkle-rm', { path: path });
133
- },
134
- screenshot: function(selector) {
135
- // Keep in lockstep with captureSprinkleScreenshot in sprinkle-screenshot.ts.
136
- return new Promise(function(resolve, reject) {
137
- try {
138
- var target = selector ? document.querySelector(selector) : document.body;
139
- var label = screenshotTargetLabel(selector, target);
140
- if (!target) { reject(new Error('Element not found: ' + (selector || label))); return; }
141
- var rect = target.getBoundingClientRect();
142
- var w = Math.ceil(rect.width);
143
- var h = Math.ceil(rect.height);
144
- if (w === 0 || h === 0) {
145
- reject(new Error(screenshotZeroDimensionError(label, rect.width, rect.height)));
146
- return;
147
- }
148
- var canvas = document.createElement('canvas');
149
- var dpr = window.devicePixelRatio || 1;
150
- canvas.width = w * dpr;
151
- canvas.height = h * dpr;
152
- var ctx = canvas.getContext('2d');
153
- if (!ctx) {
154
- reject(new Error(screenshotRasteriseError('canvas context unavailable', label, w, h)));
155
- return;
156
- }
157
- ctx.scale(dpr, dpr);
158
- var clone = target.cloneNode(true);
159
- if (clone.querySelectorAll) {
160
- var junk = clone.querySelectorAll('script, link[rel="stylesheet"]');
161
- for (var i = 0; i < junk.length; i++) {
162
- if (junk[i].parentNode) junk[i].parentNode.removeChild(junk[i]);
163
- }
164
- }
165
- var xhtml;
166
- try {
167
- xhtml = new XMLSerializer().serializeToString(clone);
168
- } catch (serErr) {
169
- var serMsg = serErr && serErr.message ? serErr.message : String(serErr);
170
- reject(new Error(screenshotRasteriseError('XMLSerializer threw: ' + serMsg, label, w, h)));
171
- return;
172
- }
173
- var svg = buildScreenshotSvg(xhtml, w, h);
174
- var svgBytes = svg.length;
175
- var dataUrl;
176
- try {
177
- dataUrl = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
178
- } catch (encErr) {
179
- reject(new Error(screenshotRasteriseError('data-URL too large', label, w, h, svgBytes)));
180
- return;
181
- }
182
- var dataUrlBytes = dataUrl.length;
183
- var src = dataUrl;
184
- var blobUrl = null;
185
- if (typeof URL !== 'undefined' && URL.createObjectURL) {
186
- try {
187
- blobUrl = URL.createObjectURL(new Blob([svg], { type: 'image/svg+xml;charset=utf-8' }));
188
- src = blobUrl;
189
- } catch (blobErr) {
190
- if (dataUrlBytes > 2097152) {
191
- reject(new Error(screenshotRasteriseError('data-URL too large', label, w, h, svgBytes, dataUrlBytes)));
192
- return;
193
- }
194
- }
195
- } else if (dataUrlBytes > 2097152) {
196
- reject(new Error(screenshotRasteriseError('data-URL too large', label, w, h, svgBytes, dataUrlBytes)));
197
- return;
198
- }
199
- var img = new Image();
200
- img.onload = function() {
201
- if (blobUrl) { try { URL.revokeObjectURL(blobUrl); } catch (e) {} }
202
- ctx.drawImage(img, 0, 0);
203
- resolve(canvas.toDataURL('image/png'));
204
- };
205
- img.onerror = function() {
206
- if (blobUrl) { try { URL.revokeObjectURL(blobUrl); } catch (e) {} }
207
- var reason = !blobUrl && dataUrlBytes > 2097152 ? 'data-URL too large' : 'image decode failed';
208
- reject(new Error(screenshotRasteriseError(reason, label, w, h, svgBytes, dataUrlBytes)));
209
- };
210
- img.src = src;
211
- } catch(e) { reject(e); }
212
- });
213
- },
214
- setState: function(data) { _state = data; parent.postMessage({ type: 'sprinkle-set-state', data: data }, '*'); },
215
- getState: function() { return _state; },
216
- close: function() { parent.postMessage({ type: 'sprinkle-close' }, '*'); },
217
- minimize: function() { parent.postMessage({ type: 'sprinkle-minimize' }, '*'); },
218
- stopCone: function() { parent.postMessage({ type: 'sprinkle-stop-cone' }, '*'); },
219
- attachImage: function(base64, name, mimeType) { parent.postMessage({ type: 'sprinkle-attach-image', base64: base64, name: name, mimeType: mimeType }, '*'); },
220
- captureScreen: function() {
221
- return _vfsCall('sprinkle-capture-screen', {}, function(m) {
222
- return { base64: m.base64, width: m.width, height: m.height, mimeType: m.mimeType };
223
- });
224
- },
225
- exec: Object.assign(function(cmd) {
226
- return _vfsCall('sprinkle-exec', { cmd: cmd }, function(m) { return m.result; });
227
- }, { spawn: function(argv) { return _jshCall('spawn', [argv]); } }),
228
- agent: function(prompt, opts) {
229
- return _vfsCall('sprinkle-agent', { prompt: prompt, opts: opts }, function(m) { return m.result; });
230
- },
231
- fetch: function(url, init) {
232
- return _jshCall('fetch', [url, init || null]).then(function(v) { return buildFetchResponse(v); });
233
- },
234
- http: {
235
- client: function(cfg) {
236
- function mk(method) { return function(path, opts) { return _jshCall('http', [cfg, method, path, opts || null]); }; }
237
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
238
- }
239
- },
240
- browser: {
241
- findTab: function(q) { return _jshCall('browser', ['findTab', q]); },
242
- ensureTab: function(url, options) { return _jshCall('browser', ['ensureTab', url, options || {}]); },
243
- eval: function(tab, code) { return _jshCall('browser', ['eval', tab, code]); },
244
- evalAsync: function(tab, code) { return _jshCall('browser', ['evalAsync', tab, code]); },
245
- cookie: function(tab, name) { return _jshCall('browser', ['cookie', tab, name]); },
246
- localStorage: function(tab, key) { return _jshCall('browser', ['localStorage', tab, key]); },
247
- fetch: function(tab, url, opts) { return _jshCall('browser', ['fetch', tab, url, opts || {}]); }
248
- },
249
- hid: {
250
- list: function() { return _deviceCall('hid', 'list', []); },
251
- request: function(filters) { return _deviceCall('hid', 'request', [filters || []]); },
252
- open: function(handle) { return _deviceCall('hid', 'open', [handle]).then(function() {}); },
253
- close: function(handle) { return _deviceCall('hid', 'close', [handle]).then(function() {}); },
254
- sendReport: function(handle, reportId, data) {
255
- return _deviceCall('hid', 'sendReport', [handle, reportId, data]).then(function() {});
256
- },
257
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
258
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners['delete'](cb); }
259
- },
260
- serial: {
261
- list: function() { return _deviceCall('serial', 'list', []); },
262
- request: function(filters) { return _deviceCall('serial', 'request', [filters || []]); },
263
- open: function(handle, options) { return _deviceCall('serial', 'open', [handle, options]).then(function() {}); },
264
- close: function(handle) { return _deviceCall('serial', 'close', [handle]).then(function() {}); }
265
- },
266
- usb: {
267
- list: function() { return _deviceCall('usb', 'list', []); },
268
- request: function(filters) { return _deviceCall('usb', 'request', [filters || []]); },
269
- open: function(handle) { return _deviceCall('usb', 'open', [handle]).then(function() {}); },
270
- close: function(handle) { return _deviceCall('usb', 'close', [handle]).then(function() {}); },
271
- reset: function(handle) { return _deviceCall('usb', 'reset', [handle]).then(function() {}); },
272
- selectConfiguration: function(handle, value) {
273
- return _deviceCall('usb', 'selectConfig', [handle, value]).then(function() {});
274
- },
275
- claimInterface: function(handle, n) {
276
- return _deviceCall('usb', 'claim', [handle, n]).then(function() {});
277
- },
278
- releaseInterface: function(handle, n) {
279
- return _deviceCall('usb', 'release', [handle, n]).then(function() {});
280
- },
281
- clearHalt: function(handle, direction, ep) {
282
- return _deviceCall('usb', 'clearHalt', [handle, direction, ep]).then(function() {});
283
- },
284
- // Payloads cross as base64 — see the note on SprinkleUsbApi.
285
- controlTransferIn: function(handle, setup, length) {
286
- return _deviceCall('usb', 'controlIn', [handle, setup, length]).then(function(r) {
287
- return { status: r.status, bytes: _b64ToU8(r.base64) };
288
- });
289
- },
290
- controlTransferOut: function(handle, setup, bytes) {
291
- return _deviceCall('usb', 'controlOut', [handle, setup, _u8ToB64(bytes)]);
292
- },
293
- transferIn: function(handle, ep, length) {
294
- return _deviceCall('usb', 'transferIn', [handle, ep, length]).then(function(r) {
295
- return { status: r.status, bytes: _b64ToU8(r.base64) };
296
- });
297
- },
298
- transferOut: function(handle, ep, bytes) {
299
- return _deviceCall('usb', 'transferOut', [handle, ep, _u8ToB64(bytes)]);
300
- }
301
- },
302
- readFileBinary: function(path) { return _jshCall('readFileBinary', [path]).then(function(r) { return _b64ToU8(r.base64); }); },
303
- writeFileBinary: function(path, bytes) { return _jshCall('writeFileBinary', [path, _u8ToB64(bytes)]); },
304
- fetchToFile: function(url, path) { return _jshCall('fetchToFile', [url, path]); },
305
- _jsh: function(op, args) { return _jshCall(op, args); },
306
- name: ''
307
- };
308
- window.slicc = api;
309
- window.bridge = api;
310
- })();`}async renderFullDoc(e,t){let n=`<script>${this.generateBridgeScript()}<\/script>`,r=this.collectThemeCSS(),i=r?`<style>${r}</style>`:``,a=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,o=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,s=xe(e,`<script>(function(){try{if(${le()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+n+i+a+o+`<script src="/lucide-icons.js"><\/script>`),c=document.createElement(`iframe`),l=E(),u=l?`allow-scripts allow-same-origin allow-popups`:`allow-scripts allow-same-origin`;c.setAttribute(`sandbox`,u),c.style.cssText=ve(l);let d=ye(c,this.container);c.srcdoc=s,this.iframe=c;let f=Ce(this.bridge);for(let e of[`sprinkle-close`,`sprinkle-minimize`]){let t=f[e];f[e]=(e,n)=>{if(!this.bridgeLifecycleReady){this.pendingBridgeLifecycle.push(()=>t(e,n));return}t(e,n)}}this.messageHandler=we(c,f),window.addEventListener(`message`,this.messageHandler),this.iframeLoadHandler=()=>{T(this.registeredWindow),this.registeredWindow=c.contentWindow,ue(this.registeredWindow);let e=this.bridge.getState();c.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:e},`*`)},c.addEventListener(`load`,this.iframeLoadHandler);let p=Se(c,()=>{c.getBoundingClientRect(),d&&be(c),l&&O(c)});if(this.container.appendChild(c),await p,l&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(c),O(c,()=>{e=!0,t.observe(c)})}});this.visibilityObserver=t,t.observe(c)}}renderInline(e,t){Te(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),Ee(n);let r=De(n,t);this.scripts=ke(n,r)}dispose(){this.bridgeLifecycleReady=!1,this.pendingBridgeLifecycle=[],this.visibilityObserver&&=(this.visibilityObserver.disconnect(),null),this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(this.iframeLoadHandler&&=(this.iframe.removeEventListener(`load`,this.iframeLoadHandler),null),T(this.registeredWindow),this.registeredWindow=null,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]}};function je(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 $(){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)if(a.ownerNode?.id!==`slicc-theme-overrides`)try{for(let o of a.cssRules)if(o instanceof CSSFontFaceRule)e.push(je(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(`
311
- `)+`
312
- `+t.join(`
313
- `)+`
314
- `+n.join(`
315
- `)}export{A as a,G as i,$ as n,E as o,ge as r,O as s,Ae as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";var t=e({DeviceHandleRegistry:()=>i,MAX_USB_TRANSFER_BYTES:()=>s,deviceToInfo:()=>d,getNavigatorUsb:()=>n,getSharedUsbRegistry:()=>o});function n(){return globalThis.navigator?.usb??null}function r(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.serialNumber??``)===(t.serialNumber??``)&&!!e.serialNumber}var i=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(r(n,e))return this.byHandle.set(t,e),t;let t=`usb${++this.counter}`;return this.byHandle.set(t,e),t}get(e){return this.byHandle.get(e)}remove(e){return this.byHandle.delete(e)}list(){return[...this.byHandle].map(([e,t])=>({handle:e,device:t}))}},a=null;function o(){return a||=new i,a}var s=4194304,c=new Set([`in`,`out`]),l=new Set([`bulk`,`interrupt`,`isochronous`]);function u(e){return e.map(e=>({configurationValue:e.configurationValue,...e.configurationName?{configurationName:e.configurationName}:{},interfaces:(e.interfaces??[]).map(e=>({interfaceNumber:e.interfaceNumber,claimed:!!e.claimed,alternates:(e.alternates??[]).map(e=>({alternateSetting:e.alternateSetting,interfaceClass:e.interfaceClass,interfaceSubclass:e.interfaceSubclass,interfaceProtocol:e.interfaceProtocol,...e.interfaceName?{interfaceName:e.interfaceName}:{},endpoints:(e.endpoints??[]).filter(e=>c.has(e.direction)&&l.has(e.type)).map(e=>({endpointNumber:e.endpointNumber,direction:e.direction,type:e.type,packetSize:e.packetSize}))}))}))}))}function d(e,t){return{handle:e,vendorId:t.vendorId,productId:t.productId,...t.productName?{productName:t.productName}:{},...t.manufacturerName?{manufacturerName:t.manufacturerName}:{},...t.serialNumber?{serialNumber:t.serialNumber}:{},opened:t.opened,...t.configurations?{configurations:u(t.configurations)}:{}}}export{t as a,o as i,d as n,n as r,s as t};
@@ -1 +0,0 @@
1
- import{i as e,t}from"./hid-device-registry-B2R-0rNt.js";import{n,r}from"./serial-port-registry-CCqklAEr.js";import{n as i,t as a}from"./usb-device-registry-DmUBqrA-.js";function o(e,t){let n=e.get(t);if(!n)throw Error(`unknown serial handle '${t}'`);return n}function s(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}function c(e,t,n){if(t.length===0)return-1;outer:for(let r=Math.max(0,n);r+t.length<=e.length;r++){for(let n=0;n<t.length;n++)if(e[r+n]!==t[n])continue outer;return r}return-1}async function l(e){if(e.reader){try{await e.reader.cancel()}catch{}try{e.reader.releaseLock()}catch{}e.reader=void 0}if(e.pendingRead=void 0,e.leftover=void 0,e.writer){try{e.writer.releaseLock()}catch{}e.writer=void 0}}async function u(e){if(await l(e),e.opened){try{await e.port.close()}catch{}e.opened=!1}}async function d(e,t){let n=await t.getPorts();for(let{entry:t}of e.retainOnly(n))await u(t);return n.map(t=>{let n=e.register(t);return r(n,e.get(n))})}async function f(e,t,n){let i=await t.requestPort(n.length?{filters:n}:{}),a=e.register(i);return r(a,e.get(a))}function p(e,t){return r(t,o(e,t))}async function m(e,t,n){let r=o(e,t);try{await r.port.open(n)}catch(e){throw Error(`${e instanceof Error?e.message:String(e)} (handle '${t}' may be stale after a device reset — re-run 'serial list' to pick up the current handle)`)}r.opened=!0}async function h(e,t){let n=o(e,t);await l(n);try{await n.port.close()}catch(e){if(!g(e))throw e}n.opened=!1}function g(e){let t=e instanceof Error?e.message:String(e);return/already closed|not open/i.test(t)}function _(e){if(!e.reader){if(!e.port.readable)throw Error(`serial port is not readable (is it open?)`);e.reader=e.port.readable.getReader()}return e.reader}function v(e){if(!e.writer){if(!e.port.writable)throw Error(`serial port is not writable (is it open?)`);e.writer=e.port.writable.getWriter()}return e.writer}async function y(e,t,r){let i=o(e,t),a=Math.min(r.maxBytes??4194304,n),l=r.until?.length?r.until:void 0,u=r.timeoutMs??1e3,d=Date.now()+Math.max(0,u),f=i.leftover??new Uint8Array;i.leftover=void 0;let p=0,m=()=>{if(l){let e=c(f,l,Math.max(0,p-(l.length-1)));if(e>=0){let t=e+l.length;return i.leftover=f.slice(t),f.slice(0,t)}}return f.length>=a?(i.leftover=f.slice(a),f.slice(0,a)):null},h=m();if(h)return h;let g=_(i);for(;Date.now()<d;){let e=d-Date.now(),t=i.pendingRead??g.read();i.pendingRead=t;let n,r=new Promise(t=>{n=setTimeout(()=>t(`__timeout`),e)}),a;try{a=await Promise.race([t,r])}finally{n&&clearTimeout(n)}if(a===`__timeout`)break;if(i.pendingRead=void 0,a.done){i.reader=void 0;break}if(a.value?.length){p=f.length,f=s(f,a.value);let e=m();if(e)return e}}return f}async function b(e,t,r){if(r.length>4194304)throw Error(`serial write payload exceeds the ${n}-byte (4 MiB) v1 limit`);return await v(o(e,t)).write(r),r.length}async function x(e,t){return o(e,t).port.getSignals()}async function S(e,t,n){await o(e,t).port.setSignals(n)}function C(e,t){let n=e.get(t);if(!n)throw Error(`unknown hid handle '${t}'`);return n}async function w(e){e.opened||await e.open()}function T(e,n){if(e>4194304)throw Error(`${n} exceeds the ${t}-byte (4 MiB) v1 limit`)}function E(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),t}async function D(t,n){return(await n.getDevices()).map(n=>e(t.register(n),n))}async function O(t,n,r){let i=await n.requestDevice({filters:r});if(i.length===0)throw Error(`No device selected.`);return i.map(n=>e(t.register(n),n))}function k(t,n){return e(n,C(t,n))}async function A(e,t){await C(e,t).open()}async function j(e,t){await C(e,t).close()}async function M(e,t,n,r){T(r.byteLength,`send report payload`);let i=C(e,t);await w(i),await i.sendReport(n,r)}async function N(e,t,n,r){T(r.byteLength,`send feature report payload`);let i=C(e,t);await w(i),await i.sendFeatureReport(n,r)}async function P(e,t,n){let r=C(e,t);return await w(r),{reportId:n,bytes:E(await r.receiveFeatureReport(n))}}async function F(e,t,n){let r=C(e,t);await w(r);let i=e=>{n({reportId:e.reportId,bytes:E(e.data)})};return r.addEventListener(`inputreport`,i),()=>r.removeEventListener(`inputreport`,i)}function I(e,t){let n=e.get(t);if(!n)throw Error(`unknown usb handle '${t}'`);return n}function L(e,t){if(e>4194304)throw Error(`${t} exceeds the ${a}-byte (4 MiB) v1 limit`)}function R(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}async function z(e,t){return(await t.getDevices()).map(t=>i(e.register(t),t))}async function B(e,t,n){let r=await t.requestDevice({filters:n});return i(e.register(r),r)}function V(e,t){return i(t,I(e,t))}async function H(e,t){await I(e,t).open()}async function U(e,t){await I(e,t).close()}async function W(e,t,n){await I(e,t).selectConfiguration(n)}async function G(e,t,n){await I(e,t).claimInterface(n)}async function K(e,t,n){await I(e,t).releaseInterface(n)}async function q(e,t,n,r){L(r,`control-in length`);let i=await I(e,t).controlTransferIn(n,r);return{status:i.status??`ok`,bytes:i.data?R(i.data):new ArrayBuffer(0)}}async function J(e,t,n,r){L(r.byteLength,`control-out payload`);let i=await I(e,t).controlTransferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function Y(e,t,n,r){L(r,`transfer-in length`);let i=await I(e,t).transferIn(n,r);return{status:i.status??`ok`,bytes:i.data?R(i.data):new ArrayBuffer(0)}}async function X(e,t,n,r){L(r.byteLength,`transfer-out payload`);let i=await I(e,t).transferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function Z(e,t){await I(e,t).reset()}async function Q(e,t,n,r){await I(e,t).clearHalt(n,r)}export{f as A,F as C,d as D,x as E,b as M,m as O,M as S,p as T,D as _,J as a,O as b,H as c,Z as d,W as f,k as g,j as h,q as i,S as j,y as k,K as l,X as m,Q as n,V as o,Y as p,U as r,z as s,G as t,B as u,A as v,h as w,N as x,P as y};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./picker-popup-sQtXmfAo.js";var n=6e4;function r(){return t()}function i(t){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(o),r(e))},o=setTimeout(()=>a({cancelled:!0}),n);e(`usb-device`,t??[],void 0,{timeoutMs:n}).then(e=>{let t=e;t.cancelled?a({cancelled:!0}):typeof t.error==`string`?a({error:t.error}):t.granted&&t.info?a({granted:!0,info:t.info}):a({error:`usb picker returned an unexpected response`})}).catch(e=>{a({error:e instanceof Error?e.message:`Failed to open USB picker`})})})}export{r as canOpenUsbPickerPopup,i as openUsbPickerPopup};
@@ -1,17 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shortcuts-CQHGJh5j.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-Br-5Tahn.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-CSATLzrT.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/base64-DJRlyqZu.js","assets/proxied-fetch-DyBveeCl.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/float-topology-YtctpJaG.js","assets/secret-topology-DLJBhHOi.js","assets/secrets-bridge-client--VZ3E0yk.js","assets/port-bridge-client-Dn8JtUyP.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CIJO5pfi.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-D5_bMrnB.js","assets/panelize-shell-B89wjO8U.js","assets/virtual-device-paths-D45tpPP6.js","assets/layout-apply-registry-Cw730jao.js","assets/wc-live-CY77nXRu.js","assets/sprinkle-renderer-DDP-UxN2.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/usb-operations-BsAiCAWF.js","assets/usb-device-registry-DmUBqrA-.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.js","assets/theme-DFKCBK8N.js","assets/theme-engine-B5SkYf3E.js","assets/slugify-BYJ6QVAt.js","assets/transcript-export-DP-r8eDz.js","assets/session-jsonl-4dg00tv6.js","assets/types-Dgm4REV3.js","assets/tray-runtime-config-B9jN9kUJ.js","assets/bridge-protocol-06nbmp2X.js","assets/messages-zAgr7E2T.js","assets/telemetry-DJyRzh6X.js","assets/feature-flags-O-TLmy2G.js","assets/tray-follower-status-BAjnN7Ar.js","assets/main-DNSx5t9M.js","assets/modulepreload-polyfill-P2Xu9kJm.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/src-BWaKqLvQ.js","assets/provider-budget-LCzMPlKv.js","assets/permissions-surface-registry-CilCRwhh.js","assets/browser-DGwroBSO.js","assets/tray-leader-BmmfZ-wo.js","assets/record-CCQFJXn_.js","assets/wc-shell-CVnS13Pt.js","assets/wc-shell-WkeczD9x.css","assets/wc-unit-context-DhQqWVxs.js","assets/legacy-styles-B3nS5QUo.js","assets/follower-navigate-watcher-DnnHgZbM.js","assets/navigation-watcher-BpA1OwJw.js","assets/discovery-preference-Bw3Fi0jd.js","assets/wc-transcript-export-CqrBcsOg.js","assets/export-spool-CuNzzI8a.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./transcript-export-DP-r8eDz.js";import{a as r,c as i,n as a,t as o,v as s,y as c}from"./wc-follower-oauth-Dxh3czLI.js";import{d as l,m as u,p as d,s as ee,u as te}from"./tray-runtime-config-B9jN9kUJ.js";import{m as ne,r as re,x as f}from"./wc-live-CY77nXRu.js";import{i as p,t as m}from"./feature-flags-O-TLmy2G.js";import{a as ie,t as ae}from"./tray-follower-status-BAjnN7Ar.js";import{r as oe}from"./main-DNSx5t9M.js";import{n as se}from"./theme-engine-B5SkYf3E.js";import{d as ce}from"./wc-unit-context-DhQqWVxs.js";import{WcSprinkleZone as le}from"./wc-sprinkles-CnPEFIgm.js";import{wireWcAttach as ue}from"./wc-attach-lctJI9Cb.js";import{installLeaderPermissionsSurface as de}from"./wc-permissions-Ch85s0Vv.js";var h=t(`follower-switch-out`);function fe(e,t){t.stopFollower();try{t.storage.removeItem(d),e.workerBaseUrl===null?t.storage.removeItem(u):t.storage.setItem(u,e.workerBaseUrl)}catch(e){h.error(`follower switch-out: storage write failed — state may revert on reload`,{error:e instanceof Error?e.message:String(e)})}try{let e=t.getHref(),n=l(e);n!==e&&t.replaceHref(n)}catch(e){h.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=6;function pe(e){let{refs:t,getSync:n,getTargets:r,hasCdpBrowser:i,log:a}=e;if(t.overlaySurfaces.has(`browser`))return{overlay:document.createElement(`slicc-tab-overlay`),refresh:()=>{}};let o=document.createElement(`slicc-tab-overlay`);o.setAttribute(`heading`,`Browser · tabs in this tray`),o.setAttribute(`no-peek`,``),document.body.append(o);let s=()=>{o.tabs=r().map(e=>({id:e.targetId,title:e.title||e.url||e.targetId,url:e.url}))};return t.overlaySurfaces.add(`browser`),t.dock.addEventListener(`slicc-dock-select`,e=>{e.detail?.id===`browser`&&(s(),o.show(),t.dock.collapse?.())}),o.addEventListener(`tab-activate`,t=>{let r=t.detail.id,s=n(),c=s?.getLeaderProtocolVersion()??0;if(!(s&&i()&&c>=g)){let t=o.tabs.find(e=>e.id===r)?.url;if(!t){a.warn(`WC follower browser: no URL for tab`,{id:r});return}e.window.open(t,`_blank`,`noopener`)||a.warn(`WC follower browser: window.open was blocked`,{id:r}),o.hide();return}s.requestTabTeleport(r).then(e=>{a.info(`WC follower browser: leader teleported a tab here`,{source:r,targetId:e}),o.hide()}).catch(e=>{a.error(`WC follower browser: tab teleport failed`,e)})}),{overlay:o,refresh:s}}var _=new Set([`oauth-attempt`,`connect-attempt`,`device-code-decision`]);function me(e){return _.has(e)}var v=`slicc-signin-redirect-style`,y=`wc-signin-redirect`,b=`${y}--welcome`,x=`
3
- .${y}{display:flex;gap:10px;align-items:flex-start;margin:10px 12px;padding:12px 14px;
4
- border:1px solid var(--line);border-radius:12px;background:var(--ghost);color:var(--ink);
5
- font-family:var(--ui);font-size:13px;line-height:1.4;}
6
- .${y}__body{flex:1;min-width:0;}
7
- .${y}__title{font-weight:600;margin-bottom:2px;}
8
- .${y}__sub{color:var(--txt-2);}
9
- .${y}__open{appearance:none;border:1px solid var(--line);border-radius:8px;cursor:pointer;
10
- background:var(--canvas);color:var(--ink);font:inherit;font-weight:600;padding:6px 12px;white-space:nowrap;}
11
- .${y}__open:hover{background:var(--ghost);}
12
- .${y}__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
13
- font:inherit;font-size:16px;line-height:1;padding:0 2px;}
14
- .${y}__x:hover{color:var(--ink);}
15
- `;function S(e){if(e.getElementById(v))return;let t=e.createElement(`style`);t.id=v,t.textContent=x,e.head.appendChild(t)}function C(e,t){S(e);let n=e.createElement(`div`);n.className=y,n.setAttribute(`role`,`status`);let r=e.createElement(`div`);r.className=`${y}__body`;let i=e.createElement(`div`);i.className=`${y}__title`,i.textContent=t.title;let a=e.createElement(`div`);a.className=`${y}__sub`,a.textContent=t.sub,r.append(i,a);let o=e.createElement(`button`);if(o.type=`button`,o.className=`${y}__open`,o.textContent=t.buttonLabel,o.addEventListener(`click`,()=>t.onOpenTab()),n.append(r,o),t.dismissible){let t=e.createElement(`button`);t.type=`button`,t.className=`${y}__x`,t.setAttribute(`aria-label`,`Dismiss`),t.textContent=`×`,t.addEventListener(`click`,()=>n.remove()),n.append(t)}return n}function he(e,t){let n=e.ownerDocument;t.onOpenTab();let r=e.querySelector(`.${y}`);if(r)return r.scrollIntoView?.({block:`nearest`}),r;let i=C(n,{title:`Sign in from the SLICC tab`,sub:`The side panel can't complete a provider login — we've switched you to the main SLICC tab. Finish signing in there (Settings › Providers), then come back.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!0});return e.append(i),i.scrollIntoView?.({block:`nearest`}),i}function ge(e,t){let n=C(e,{title:`Set up SLICC in the main tab`,sub:`SLICC needs a model connected before it can help. Open the main SLICC tab to finish setup and sign in, then come back to the side panel.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!1});return n.classList.add(b),n}var w=t(`wc-follower`),_e=`/shared/sprinkles/welcome/`,ve=`/shared/sprinkles/suggestions/`;function ye(e){return e===void 0||e===`active`?{kind:`active`}:e.trim()===``?null:{kind:`frozen`,sessionId:e}}function be(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 xe(e,t,n,r,i){let a=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};i.files?(e.style.display=`none`,e.parentElement?.append(a(`Files live on the leader. A follower mirrors the leader's chat, sprinkles, and browser tabs - not its filesystem.`))):e.closest(`slicc-surface`)?.remove(),i.terminal?t.append(a(`The shell runs on the leader. A follower has no local terminal - drive the session through chat.`)):t.closest(`slicc-surface`)?.remove(),i.memory?n.append(a(`Memory lives on the leader. A follower has no local memory store.`)):n.closest(`slicc-surface`)?.remove(),i.monitor?(r.style.display=`none`,r.parentElement?.append(a(`Monitor reads the leader's kernel state. A follower has no local kernel.`))):r.closest(`slicc-surface`)?.remove()}var T={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,monitor:!0,showTimestamps:!0};function Se(e){let t=[];for(let[n,r]of[[`terminal`,`term`],[`files`,`files`],[`memory`,`memory`],[`browser`,`browser`],[`monitor`,`monitor`]])e[n]||t.push(`slicc-dock-item[data-t="${r}"]`);if(e.modelPicker||t.push(`slicc-composer-meta`),e.history||t.push(`slicc-freezer`),e.nav||t.push(`slicc-nav`),!e.terminal&&!e.files&&!e.memory&&!e.browser&&!e.monitor&&t.push(`slicc-dock .div`,`slicc-dock .grow`),t.length||!e.history){let n=document.createElement(`style`),r=t.length?`${t.join(`,
16
- `)}{display:none!important;}`:``;e.history||(r+=`
17
- .wcui-appcol{padding-left:0!important;}`),n.textContent=r,document.head.append(n)}}function E(e,t){return e&&!t}async function D(t,n,r){let[{parseLayoutDocument:i},{panelizeShell:a}]=await Promise.all([e(()=>import(`./wc-shortcuts-CQHGJh5j.js`).then(e=>e.w),__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])),e(()=>import(`./panelize-shell-B89wjO8U.js`),__vite__mapDeps([26,11,0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28]))]),o=i(n);if(`error`in o){r.warn(`follower: host-pushed layout failed validation — keeping the default`,{error:o.error});return}a(t.refs,o),r.info(`follower: applied host-pushed layout document`,{id:o.id,locked:o.locked===!0})}async function Ce(e,t,n){if(n&&t.cherryTransport?.flags)try{let e=JSON.parse(t.cherryTransport.flags);e&&typeof e==`object`&&!Array.isArray(e)&&m(e)}catch(e){w.warn(`follower: host-pushed flags were not valid JSON — ignoring`,e)}let r=p(`panel-layouts`);if(e.refs.dockTree.tilesMovable=r,n&&t.cherryTransport?.layout)try{let n=JSON.parse(t.cherryTransport.layout);n&&typeof n==`object`&&`base`in n?r?await D(e,n,w):w.warn(`follower: ignoring host-pushed layout — the panel-layouts flag is off`):e.refs.dockTree.setTree(n)}catch(e){w.warn(`follower: host-pushed layout was not valid JSON — keeping the default`,e)}}async function O(t,l,u){let d=u===`cherry`,m=d&&new URLSearchParams(window.location.search).get(`ui-only`)===`1`,h=window.location.ancestorOrigins?.[0],g=d&&(h?.startsWith(`chrome-extension://`)??!1),_;try{_=await oe({runtimeMode:u,envBaseUrl:null,window,log:l})}catch(e){let n=e instanceof Error?e.message:String(e);w.error(`follower prelude failed`,{runtimeMode:u,error:n}),be(t,n);return}let v=d?_.cherryJoinUrl:ee(window.location.href,window.localStorage);if(!v){w.error(`follower mount with no join URL - falling back to live boot`);let{bootLeaderFloat:n}=await e(async()=>{let{bootLeaderFloat:e}=await import(`./wc-live-CY77nXRu.js`).then(e=>e.n);return{bootLeaderFloat:e}},__vite__mapDeps([29,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,0,25,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61]));return n(t,l,`standalone`)}let y=d?`cherry`:g?`extension`:`standalone`,x,S,C,D=new Set,O=null,k=null,A=()=>_.cherryTransport?.emitSliccEventToHost(`slicc.open-leader-tab`),j=()=>{g&&he(x.refs.thread,{onOpenTab:A})},we=e=>{let t=e.querySelectorAll(`img[src^="${_e}"]`);return t.length!==0&&(t.forEach((t,n)=>{n===0&&!M?t.replaceWith(ge(e.ownerDocument,{onOpenTab:A})):t.remove()}),!0)},M=!1,Te=e=>{let t=e.querySelectorAll(`img[src^="${ve}"]`);if(t.length!==0){for(let e of t)e.remove();M=!0;for(let e of x.refs.thread.querySelectorAll(`.${b}`))e.remove()}},N=(await re(t,l,{floatKind:y,connect:async t=>{x=t,d&&_.cherryTransport?.theme&&se(_.cherryTransport.theme),await Ce(x,_,d);let n=d&&_.cherryTransport?.effortLevel;n?localStorage.setItem(`slicc_locked_effort_level`,n):localStorage.removeItem(`slicc_locked_effort_level`),S=d&&_.cherryTransport?{...T,..._.cherryTransport.features}:T,xe(x.refs.fileTree,x.refs.termSurface,x.refs.memoryHost,x.refs.monitor,S),Se(S),e(async()=>{let{applyTimestampVisibility:e,initTimestampPreference:t}=await import(`./wc-shortcuts-CQHGJh5j.js`).then(e=>e.R);return{applyTimestampVisibility:e,initTimestampPreference:t}},__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])).then(({applyTimestampVisibility:e,initTimestampPreference:t})=>{S.showTimestamps?t():e(!1)}),e(async()=>{let{loadDipStyles:e,loadSprinkleStyles:t}=await import(`./legacy-styles-B3nS5QUo.js`);return{loadDipStyles:e,loadSprinkleStyles:t}},__vite__mapDeps([62,3])).then(({loadDipStyles:e,loadSprinkleStyles:t})=>Promise.all([e(),t()])).catch(()=>void 0),C=new a({getSync:()=>J?.currentSync??null});let r=f({getSync:()=>J?.currentSync??null,onAgentEvent:e=>(D.add(e),()=>D.delete(e)),onAgentError:e=>{w.warn(`follower send failed`,{error:e}),N.controller.addAssistantMessage(`_That message was not sent to the leader — ${e}_`)}}),i={...r,sendSprinkleLick:(e,t,n)=>{r.sendSprinkleLick(e,t,n);let i=t?.action;typeof i==`string`&&me(i)&&j()},addressableUnitId:()=>V(),onMessageRendered:e=>{Te(e),g&&we(e)},onSelectionApplied:()=>{W(H,U),k?.onShownUnitChanged()},onSnapshotRendered:e=>{N.controller.setProcessing(e.some(e=>e.isStreaming))},ownsModelPill:!0,takeAttachments:()=>De.take()};return{client:C,host:i}}})).chat,P=N.controller;if(g)for(let e of[`slicc-error-open-settings`,`slicc-error-login`,`slicc-error-change-model`])x.refs.thread.addEventListener(e,()=>j());let F=`Connecting to leader…`,I=`Ask the leader, or describe a change…`,L=null,R=()=>x.getSelected()?.id??L,z=e=>e&&e.length>0?e:null,B=!1,V=()=>B?z(R()??C.selectedUnitId):null,Ee=()=>{let e=x.getSelected();return e?ce(e):!1},H=!1,U=F,W=(e,t)=>{H=e,U=t;let n=e&&V()!==null;x.refs.inputCard.setAttribute(`placeholder`,e&&!n?F:t),n&&!Ee()?x.refs.inputCard.removeAttribute(`disabled`):x.refs.inputCard.setAttribute(`disabled`,``)};W(!1,F),ie(e=>{try{window.localStorage.setItem(s,JSON.stringify(e))}catch{}});try{window.localStorage.setItem(s,JSON.stringify(ae()))}catch{}m||x.refs.composer.setAttribute(`ptt`,``);let De=ue({inputCard:x.refs.inputCard,freezer:x.refs.freezer,composer:x.refs.composer,noCamera:m,log:w}),G=new le(x.refs).callbacks(),K=e=>{if(L=e,!e)return;let t=C.currentUnits().find(t=>t.id===e);if(!t){x.watchUnit(e),W(H,U);return}if(x.getSelected()?.id!==t.id){x.selectScoop(t);return}W(H,U)},q=()=>{B=!1,C.resetSelection()};x.refs.switcher.connection=`disconnected`;let J,Y=null,Oe=()=>(Y||=de({runtimeMode:u})?.element??null,Y),X=[],ke=pe({refs:x.refs,getSync:()=>J.currentSync,getTargets:()=>X,hasCdpBrowser:()=>E(_.hasLocalCdpSurface,m),window,log:w});k=ne({composerMeta:x.refs.composerMeta,getUnits:()=>C.currentUnits(),setModel:(e,t)=>{C.setModel(e,t).catch(()=>void 0)},getSync:()=>J.currentSync,getSelectedScoopJid:()=>R(),modelPickerEnabled:S.modelPicker,getLockedEffortLevel:()=>localStorage.getItem(`slicc_locked_effort_level`)}),C.subscribeList(()=>k?.onShownUnitChanged()),J=r(C.wrapOptions({joinUrl:v,runtime:d?c:`slicc-standalone`,advertisesCdpTargets:E(_.hasLocalCdpSurface,m),onTargetsUpdated:e=>{X=e,ke.refresh()},...d||m?{}:{onOAuthPopupRequest:(e,t)=>o(e,t,{getPermissionsSurface:Oe,window})},browserAPI:_.browser,onSnapshot:(e,t)=>{B=!0,K(z(t))},onUserMessage:(e,t,n,r)=>P.addUserMessage(e,r),onBiscottoMessageState:(e,t)=>{switch(t){case`pending`:P.addAssistantMessage(`_Sent for review — waiting for the host._`);break;case`rejected`:P.addAssistantMessage(`_The host did not forward that message._`);break;case`unanswered`:P.addAssistantMessage(`_No one reviewed that message in time, so it was not forwarded._`)}},onStatus:(e,t)=>{i(t,R())&&P.setProcessing(e===`processing`)},setChatAgent:e=>{O?.(),O=e.onEvent(e=>{for(let t of D)t(e)})},onSudoApprovalRequest:async t=>{let{openSudoApprovalDialog:n}=await e(async()=>{let{openSudoApprovalDialog:e}=await import(`./wc-sudo-approval-BE35g6ia.js`);return{openSudoApprovalDialog:e}},[]),r=d?_.cherryTransport?.hostOrigin:void 0;return{decision:(await n({kind:t.kind,detail:t.detail,...t.suggestedPattern?{suggestedPattern:t.suggestedPattern}:{}},{allowAlways:!1,signal:t.signal,expiresAt:t.expiresAt,requester:t.requester??t.scoopName??(r?`via ${r}`:void 0)})).decision,attestation:`none`}},onConnectionChange:e=>{x.refs.switcher.connection=e?`connected`:`disconnected`,e||q(),W(e,e?I:F),e||k?.reset(),d&&_.cherryTransport?.emitSliccEventToHost(e?`slicc.follower.ready`:`slicc.follower.disconnected`)},getSelectedScoopJid:()=>R(),onLeaderStalled:e=>{W(!e,e?`The leader is busy — hang on…`:I)},onGaveUp:e=>{w.error(`follower gave up reaching the leader`,{error:e}),x.refs.switcher.connection=`disconnected`,q(),W(!1,`Couldn't reach the leader. Reload to retry.`),k?.reset(),d&&_.cherryTransport?.emitSliccEventToHost(`slicc.follower.disconnected`)},...d?{}:{onJoinUrlChanged:e=>{w.info(`follower joinUrl superseded, persisting replacement`,{newJoinUrl:e}),te(window.localStorage,e)}},addSprinkle:G.addSprinkle,removeSprinkle:G.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):w.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},onScoopsList:(e,t)=>{B=!0;let n=R();!n||!e.some(e=>e.jid===n)?K(z(t)):K(n),x.wiring.refreshScoops?.()},onModelsList:e=>k?.onModelsList(e),onModelState:e=>k?.onModelState(e),...d?{onCherrySliccEvent:(e,t)=>_.cherryTransport?.emitSliccEventToHost(e,t)}:{}}));for(let e of[`save`,`skip`,`erase`])x.refs.freezer.addEventListener(`new-chat-${e}`,()=>{J.currentSync?.requestNewSession(e)});p(`agentic-memory`)&&x.refs.freezer.querySelector(`slicc-freezer-new`)?.setAttribute(`no-skip`,``),x.refs.switcher.addEventListener(`slicc-scoop-select`,e=>{let t=e.detail?.key;t&&(L=t)}),d&&_.cherryTransport&&(_.cherryTransport.onHostEvent=(e,t)=>J.currentSync?.sendCherryHostEvent(e,t),_.cherryTransport.onExportRequest=(e,t,r,i)=>{let a=J.currentSync;if(!a)return Promise.reject(new n(`transfer-aborted`));let o=ye(t);return o?a.requestTranscriptExport(o,r,i):Promise.reject(new n(`session-not-found`))});let Z=null;if(!d){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-DnnHgZbM.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([63,11,13,1,3,12,14,15,16,64,44,65]));Z=t(_.realCdpTransport,()=>J.currentSync)}let Q=!1,$=()=>{x.refs.avatarMenu.items=[{kind:`separator`},...g?[{id:`focus-leader-tab`,label:`Bring leader to front`,icon:`external-link`}]:[],{id:`export-transcript`,label:Q?`Exporting…`:`Export transcript`,icon:`download`,disabled:Q||void 0},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}]};$(),x.refs.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n===`focus-leader-tab`){_.cherryTransport?.emitSliccEventToHost(`slicc.focus-leader-tab`);return}if(n===`tray-stop`){window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}));return}if(n===`export-transcript`&&!Q){Q=!0,$();let t=J.currentSync;if(!t){Q=!1,$();return}let n=new AbortController;t.requestTranscriptExport({kind:`active`},n.signal).then(async t=>{let{downloadTranscriptBlob:n}=await e(async()=>{let{downloadTranscriptBlob:e}=await import(`./wc-transcript-export-CqrBcsOg.js`);return{downloadTranscriptBlob:e}},__vite__mapDeps([66,3,40,67,53,1]));await n(t,`slicc-transcript-${new Date().toISOString().slice(0,10)}.zip`)}).catch(e=>{w.error(`follower transcript export failed`,{error:String(e)})}).finally(()=>{Q=!1,$()})}}),window.addEventListener(`slicc:tray-leave`,e=>{fe({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{Z?.(),J.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),w.info(`follower mounted`,{runtimeMode:u,isCherry:d})}export{O as bootFollowerFloat};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-picker-popup--ijSfN8u.js","assets/logger-DDBAeTLF.js","assets/picker-popup-sQtXmfAo.js","assets/runtime-env-Dlaokqg1.js","assets/usb-picker-Cbm0jfjl.js","assets/hid-picker-sFJ8vzUj.js","assets/serial-picker-BQF_Eitc.js","assets/usb-device-registry-DmUBqrA-.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{n as t}from"./runtime-env-Dlaokqg1.js";function n(){return t()}async function r(t=n()){if(!t)return;let[{openMountPickerPopup:r,storePendingHandle:s,loadAndClearPendingHandle:c},l,u,d]=await Promise.all([e(()=>import(`./mount-picker-popup--ijSfN8u.js`),__vite__mapDeps([0,1,2,3])),e(()=>import(`./usb-picker-Cbm0jfjl.js`),__vite__mapDeps([4,2,3])),e(()=>import(`./hid-picker-sFJ8vzUj.js`),__vite__mapDeps([5,2,3])),e(()=>import(`./serial-picker-BQF_Eitc.js`),__vite__mapDeps([6,2,3]))]);return{filesystem:{async showDirectoryPicker(){let e=await r();if(e.cancelled)throw new DOMException(`mount picker cancelled`,`AbortError`);if(e.error)throw Error(e.error);if(!e.idbKey)throw Error(`mount picker returned no handle key`);let t=await c(e.idbKey);if(!t)throw Error(`mount picker returned no handle`);return await s(e.idbKey,t),t}},usb:{async requestDevice(e){let t=await l.openUsbPickerPopup(e?.filters??[]);if(`cancelled`in t)throw new DOMException(`usb picker cancelled`,`AbortError`);if(`error`in t)throw Error(t.error);let n=await i(t.info);if(!n)throw Error(`granted USB device could not be re-acquired`);return n}},hid:{async requestDevice(e){let t=await u.openHidPickerPopup(e?.filters??[]);if(`cancelled`in t)throw new DOMException(`hid picker cancelled`,`AbortError`);if(`error`in t)throw Error(t.error);let n=await a(t.info);if(n.length===0)throw Error(`granted HID device could not be re-acquired`);return n}},serial:{async requestPort(e){let t=await d.openSerialPickerPopup(e?.filters??[]);if(`cancelled`in t)throw new DOMException(`serial picker cancelled`,`AbortError`);if(`error`in t)throw Error(t.error);let n=await o(t.info);if(!n)throw Error(`granted serial port could not be re-acquired`);return n}}}}async function i(t){let{getNavigatorUsb:n}=await e(async()=>{let{getNavigatorUsb:e}=await import(`./usb-device-registry-DmUBqrA-.js`).then(e=>e.a);return{getNavigatorUsb:e}},__vite__mapDeps([7,8])),r=n();if(!r)throw Error(`WebUSB is unavailable in this browser`);return(await r.getDevices()).find(e=>e.vendorId===t.vendorId&&e.productId===t.productId&&(!t.serialNumber||e.serialNumber===t.serialNumber))??null}async function a(t){let{getNavigatorHid:n}=await e(async()=>{let{getNavigatorHid:e}=await import(`./hid-device-registry-B2R-0rNt.js`).then(e=>e.a);return{getNavigatorHid:e}},__vite__mapDeps([9,8])),r=n();if(!r)throw Error(`WebHID is unavailable in this browser`);return(await r.getDevices()).filter(e=>e.vendorId===t.vendorId&&e.productId===t.productId)}async function o(t){let{getNavigatorSerial:n}=await e(async()=>{let{getNavigatorSerial:e}=await import(`./serial-port-registry-CCqklAEr.js`).then(e=>e.o);return{getNavigatorSerial:e}},__vite__mapDeps([10,8])),r=n();if(!r)throw Error(`Web Serial is unavailable in this browser`);let i=await r.getPorts();return i.filter(e=>{let n=e.getInfo();return!(t.usbVendorId!==void 0&&n.usbVendorId!==t.usbVendorId||t.usbProductId!==void 0&&n.usbProductId!==t.usbProductId)})[0]??i[0]??null}export{r as buildLeaderPermissionProviders,n as isExtensionRuntime};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/legacy-styles-B3nS5QUo.js","assets/preload-helper-Czpn1I53.js","assets/sprinkle-manager-CiAkASWE.js","assets/logger-DDBAeTLF.js","assets/sprinkle-renderer-DDP-UxN2.js","assets/wc-shortcuts-CQHGJh5j.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-Br-5Tahn.js","assets/claude-model-version-CSATLzrT.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/base64-DJRlyqZu.js","assets/proxied-fetch-DyBveeCl.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/float-topology-YtctpJaG.js","assets/secret-topology-DLJBhHOi.js","assets/secrets-bridge-client--VZ3E0yk.js","assets/port-bridge-client-Dn8JtUyP.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CIJO5pfi.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-D5_bMrnB.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/usb-operations-BsAiCAWF.js","assets/usb-device-registry-DmUBqrA-.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.js","assets/theme-DFKCBK8N.js","assets/theme-engine-B5SkYf3E.js","assets/telemetry-DJyRzh6X.js","assets/feature-flags-O-TLmy2G.js","assets/bounded-walk-BjxKWNqp.js","assets/path-utils-DNJG-zQf.js","assets/sprinkle-instances-B8n7h-oP.js","assets/setup-sprinkle-exec-BX_Qq-Su.js","assets/wc-live-CY77nXRu.js","assets/slugify-BYJ6QVAt.js","assets/transcript-export-DP-r8eDz.js","assets/session-jsonl-4dg00tv6.js","assets/types-Dgm4REV3.js","assets/tray-runtime-config-B9jN9kUJ.js","assets/bridge-protocol-06nbmp2X.js","assets/messages-zAgr7E2T.js","assets/tray-follower-status-BAjnN7Ar.js","assets/main-DNSx5t9M.js","assets/modulepreload-polyfill-P2Xu9kJm.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/src-BWaKqLvQ.js","assets/provider-budget-LCzMPlKv.js","assets/permissions-surface-registry-CilCRwhh.js","assets/browser-DGwroBSO.js","assets/tray-leader-BmmfZ-wo.js","assets/record-CCQFJXn_.js","assets/wc-shell-CVnS13Pt.js","assets/wc-shell-WkeczD9x.css","assets/wc-unit-context-DhQqWVxs.js","assets/quick-llm-DzOHzN-I.js","assets/llm-session-id-bZQs6gBN.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{k as t}from"./wc-shortcuts-CQHGJh5j.js";import{n}from"./runtime-env-Dlaokqg1.js";import{t as r}from"./wc-unit-context-DhQqWVxs.js";var i=`sprinkle:`,a=`slicc-sprinkle-icons`;function o(){try{let e=localStorage.getItem(a);if(!e)return{};let t=JSON.parse(e);if(typeof t!=`object`||!t)return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);return n}catch{return{}}}function s(e){try{let t=new Set(e),n=Object.fromEntries(Object.entries(o()).filter(([e])=>t.has(e)));localStorage.setItem(a,JSON.stringify(n))}catch{}}function c(e,t){try{localStorage.setItem(a,JSON.stringify({...o(),[e]:t}))}catch{}}function l(e){return typeof e==`string`&&/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e)}function u(e){return`${i}${e}`}function d(e){return e?.startsWith(i)?e.slice(9):null}var f=`chat`,p=new Set([`files`,`term`,`memory`,`monitor`]),m=`right`,h=m;function g(e){return p.has(e)}var _=class{#e;#t=new Map;#n=new Map;#r=new Set;#i=[];#a;constructor(e,t={}){this.#e=e,this.#a=t}#o(){return this.#e.dockTree}applyLayout(e){let t=this.#o();t?.setTree(e);for(let e of this.#i)t?.placeSurface(u(e),h)}placeSurface(e,t){let n=this.#o();if(n&&!this.#a.hostSprinkleSurface)for(let e of n.getSurfaceIds())e!==t&&e!==`chat`&&this.removeSurface(e);if(n?.placeSurface(t,e),!this.#a.hostSprinkleSurface){let e=this.#e.dock;e&&(e.active=t)}g(t)&&this.#a.onToolPanelActivate?.(t)}moveSurfaceToZone(e,t){this.#o()?.moveSurfaceToZone(e,t)}removeSurface(e){this.#o()?.removeSurface(e),g(e)&&this.#a.onToolPanelDeactivate?.(e)}setSurfaceSize(e,t){return this.#o()?.setSurfaceSize(e,t)??!1}seedDockItems(e){let t=o(),n=!1;for(let r of e)this.#t.has(r)||(this.#r.add(r),this.#t.set(r,{id:u(r),icon:t[r]??`sparkles`,label:r,kind:`sprinkle`}),n=!0);n&&this.#p()}dropUnconfirmedSeeds(){let e=!1;for(let t of this.#r)this.#n.has(t)||(this.#t.delete(t),e=!0);this.#r.clear(),e&&this.#p()}callbacks(){return{addSprinkle:(e,t,n,r,i)=>this.#s(e,t,n,i),removeSprinkle:e=>this.#c(e,{keepDockItem:!1}),minimizeSprinkle:e=>this.#l(e),registerSprinkle:(e,t,n)=>this.#u(e,t,n?.icon),unregisterSprinkle:e=>this.#f(e),closeSprinkleContent:e=>this.#c(e,{keepDockItem:!0})}}updateDockIcon(e,t){let n=this.#t.get(e);!n||n.icon===t||(this.#t.set(e,{...n,icon:t}),this.#p())}defaultIconNames(){return[...this.#t.entries()].filter(([,e])=>e.icon===`sparkles`).map(([e])=>e)}isOpen(e){return this.#n.has(e)}#s(e,t,n,r){let i=u(e),a=this.#a.hostSprinkleSurface,o=this.#n.get(e),s=!o;if(o||(o=document.createElement(`slicc-surface`),o.setAttribute(`surface-id`,i),o.setAttribute(`layout`,`flex`),a||this.#e.dockTree?.append(o),this.#n.set(e,o)),o.replaceChildren(n),this.#u(e,t,r?.icon),this.#i.includes(e)||this.#i.push(e),a){s&&a(i,o);return}r?.attention||r?.background||this.placeSurface(h,i)}#c(e,t){let n=u(e);this.#n.get(e)?.remove(),this.#n.delete(e),t.keepDockItem||this.#t.delete(e);let r=this.#i.indexOf(e);if(r>=0&&this.#i.splice(r,1),this.#p(),this.#a.removeSprinkleSurface){this.#a.removeSprinkleSurface(n);return}this.#e.dockTree?.removeSurface(n)}#l(e){this.#e.dock.removeAttribute(`active`),!this.#a.hostSprinkleSurface&&this.removeSurface(u(e))}#u(e,t,n){this.#r.delete(e);let r=this.#d(e,n);this.#t.set(e,{id:u(e),icon:r,label:t,kind:`sprinkle`}),this.#p()}#d(e,t){return l(t)?t:o()[e]??`sparkles`}#f(e){this.#n.has(e)||(this.#t.delete(e),this.#p())}#p(){this.#e.dock.items=[...this.#t.values()]}};function v(e,t){return n=>{n.type!==`sprinkle`||!n.sprinkleName||t?.(n)||e.sendSprinkleLick(n.sprinkleName,n.body,n.targetScoop)}}var y=180;function b(e){e.dock.addEventListener(`slicc-dock-longpress`,n=>{let r=n.detail?.id;if(!r||d(r)===null&&!g(r))return;let i=n=>{t(e.frame??e.dockTree,r)||n<=0||requestAnimationFrame(()=>i(n-1))};i(y)})}async function x(t){let{refs:i,client:a,fs:o,instanceId:c,onAttachImage:l,onToolPanelActivate:u,onToolPanelDeactivate:f,hostSprinkleSurface:p,removeSprinkleSurface:h,log:y}=t,x=new _(i,{onToolPanelActivate:u,onToolPanelDeactivate:f,hostSprinkleSurface:p,removeSprinkleSurface:h}),{loadSprinkleStyles:C}=await e(async()=>{let{loadSprinkleStyles:e}=await import(`./legacy-styles-B3nS5QUo.js`);return{loadSprinkleStyles:e}},__vite__mapDeps([0,1]));await C();let{SprinkleManager:w,readKnownSprinkleNames:T}=await e(async()=>{let{SprinkleManager:e,readKnownSprinkleNames:t}=await import(`./sprinkle-manager-CiAkASWE.js`);return{SprinkleManager:e,readKnownSprinkleNames:t}},__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]));x.seedDockItems(T());let{installSprinkleManagerHandlerOverChannel:E}=await e(async()=>{let{installSprinkleManagerHandlerOverChannel:e}=await import(`./sprinkle-bridge-channel-Clwu-X1e.js`);return{installSprinkleManagerHandlerOverChannel:e}},[]),{createSprinkleExecHandler:D}=await e(async()=>{let{createSprinkleExecHandler:e}=await import(`./setup-sprinkle-exec-BX_Qq-Su.js`);return{createSprinkleExecHandler:e}},__vite__mapDeps([42,1])),{setDipExecHandler:O}=await e(async()=>{let{setDipExecHandler:e}=await import(`./wc-live-CY77nXRu.js`).then(e=>e.R);return{setDipExecHandler:e}},__vite__mapDeps([43,6,7,1,8,9,10,11,12,13,14,3,15,16,17,18,19,20,21,22,23,24,25,26,27,5,28,4,29,30,31,32,33,34,35,36,44,45,46,47,48,49,50,37,38,51,52,53,54,55,56,57,58,59,60,61,62,63,64])),k=n(),A=D(a),j=new w(o,v(a,t.interceptWelcomeLick),x.callbacks(),()=>{let e=r(t.getUnits());e&&a.stopScoop(e.id)},{...k?{autoOpenBehavior:`attention`}:{},inlineSprinkles:new Set([`welcome`]),execHandler:A,onAttachImage:l??(()=>{})});if(window.__slicc_sprinkleManager=j,O(A),c!==void 0){let e=E(j,{instanceId:c});window.addEventListener(`beforeunload`,()=>e(),{once:!0})}else if(k){let{handleSprinkleOp:t}=await e(async()=>{let{handleSprinkleOp:e}=await import(`./sprinkle-op-handler-Cb1pl8Ok.js`);return{handleSprinkleOp:e}},[]);a.setSprinkleOpHandler(e=>{let{id:n,op:r,name:i,data:a,target:o}=e;t(j,n,r,i,a,o)})}i.dock.addEventListener(`slicc-dock-select`,e=>{let t=e.detail?.id,n=d(t);if(n){j.activate(n).catch(e=>y.error(`WC sprinkle activate failed`,e));return}t&&g(t)&&x.placeSurface(m,t)}),i.dock.addEventListener(`slicc-dock-collapse`,e=>{let t=e.detail?.id;if(!t)return;if(g(t)){x.removeSurface(t);return}let n=d(t);n&&j.minimize(n)}),b(i);let M=!1,N=async()=>{if(await j.refresh(),j.available().length>0){x.dropUnconfirmedSeeds();let t=j.available().map(e=>e.name),{pruneKnownSprinkleNames:n}=await e(async()=>{let{pruneKnownSprinkleNames:e}=await import(`./sprinkle-manager-CiAkASWE.js`);return{pruneKnownSprinkleNames:e}},__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]));n(t),s(t)}await j.restoreOpenSprinkles().catch(e=>{y.warn(`WC shell: failed to restore open sprinkles`,e)}),M||(M=!0,e(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-DzOHzN-I.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([65,6,7,1,8,9,10,11,12,13,14,3,15,16,17,18,19,20,21,22,23,24,25,26,27,66,28])).then(({pickLucideIcon:e})=>S(x,j.available(),t=>e({subject:t}))).catch(()=>void 0).finally(()=>{M=!1}))};return N().catch(e=>y.warn(`WC shell: initial sprinkle resync failed`,e)),{manager:j,zone:x,resync:N}}async function S(e,t,n){let r=new Set(e.defaultIconNames()),i=o();for(let a of t){if(!r.has(a.name)||l(a.icon))continue;let t=i[a.name];if(t){e.updateDockIcon(a.name,t);continue}let o=await n(`"${a.title}" — a SLICC sprinkle panel (${a.name})`);o&&(c(a.name,o),e.updateDockIcon(a.name,o))}}export{f as CHAT_SURFACE_ID,_ as WcSprinkleZone,x as wireWcSprinkles};
@@ -1 +0,0 @@
1
- import{n as e}from"./wc-onboarding-Daxory4F.js";export{e as hasOnboardingFinalLickInHistory};