sliccy 5.83.0 → 5.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +1 -0
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts +2 -0
  3. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  4. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  5. package/dist/ui/assets/{account-store-wRKPNSLk.js → account-store-CJ9KAeuF.js} +1 -1
  6. package/dist/ui/assets/{account-store-Cd-tdnVM.js → account-store-DqOwEqPJ.js} +1 -1
  7. package/dist/ui/assets/{adobe-D5qaF266.js → adobe-DGx3DYwC.js} +1 -1
  8. package/dist/ui/assets/{adobe-DyOr7WDY.js → adobe-DpUgMhMf.js} +1 -1
  9. package/dist/ui/assets/{apps-BZ7jo_tV.js → apps-DVTVcvIV.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-DW-IHPrw.js → azure-openai-CvlKI0gI.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-DQcYkDOO.js → azure-openai-VvV3bfKn.js} +1 -1
  12. package/dist/ui/assets/{cerebras-DHhVwBA5.js → cerebras-CJvtnPux.js} +1 -1
  13. package/dist/ui/assets/{cerebras-V-Vr1a1Q.js → cerebras-yb140WKQ.js} +1 -1
  14. package/dist/ui/assets/{connect-surface-jT1zpRuM.js → connect-surface-DCr_sst4.js} +1 -1
  15. package/dist/ui/assets/{db-DjAqlQ2I.js → db-BTiVtoD4.js} +1 -1
  16. package/dist/ui/assets/{fs-Dw5TZrdP.js → fs-C3EYD3qT.js} +1 -1
  17. package/dist/ui/assets/{fs-BN93wigF.js → fs-DHqCcha5.js} +2 -2
  18. package/dist/ui/assets/{github-Dmh6WFSu.js → github-C1llen91.js} +1 -1
  19. package/dist/ui/assets/{github-Mf9cKlpI.js → github-D03OPP_K.js} +2 -2
  20. package/dist/ui/assets/{github-copilot-gHM-PlKT.js → github-copilot-5U2E9Vz_.js} +1 -1
  21. package/dist/ui/assets/{github-copilot-BIU8__wL.js → github-copilot-BOslP0sZ.js} +1 -1
  22. package/dist/ui/assets/{kernel-worker-BPvDXoE4.js → kernel-worker-BNnqnIh-.js} +595 -595
  23. package/dist/ui/assets/{lick-manager-wU1FKkH8.js → lick-manager-Ce_d4NxJ.js} +1 -1
  24. package/dist/ui/assets/{local-llm-3iOvTJly.js → local-llm-DF_UaKBw.js} +1 -1
  25. package/dist/ui/assets/{local-llm-CD3hgBkq.js → local-llm-Dmd1MYay.js} +1 -1
  26. package/dist/ui/assets/{main-DU7ZMaRI.js → main-OC7WLZIp.js} +3 -3
  27. package/dist/ui/assets/{mount-DUrYX2YO.js → mount-BGLX5HYy.js} +2 -2
  28. package/dist/ui/assets/{mount-B92bwZG6.js → mount-DqW1EKLo.js} +1 -1
  29. package/dist/ui/assets/{mount-recovery-DEoVeBdn.js → mount-recovery-EGuo4xHy.js} +1 -1
  30. package/dist/ui/assets/{new-session-fsGH73gc.js → new-session-DeRaLfZJ.js} +2 -2
  31. package/dist/ui/assets/{oauth-bootstrap-BK2dnpDr.js → oauth-bootstrap-BTv4hjuO.js} +2 -2
  32. package/dist/ui/assets/{openai-codex-C_BBxLdW.js → openai-codex-0z7ugfds.js} +1 -1
  33. package/dist/ui/assets/{openai-codex-8fuGDS_6.js → openai-codex-DeSSYpyV.js} +1 -1
  34. package/dist/ui/assets/{openrouter-DQOKBpdt.js → openrouter-B684-YNV.js} +1 -1
  35. package/dist/ui/assets/{openrouter-Yc2BPFgw.js → openrouter-DmXu0orK.js} +1 -1
  36. package/dist/ui/assets/{openrouter-oauth-DqtbI5Cg.js → openrouter-oauth-4TQRhnJc.js} +1 -1
  37. package/dist/ui/assets/{openrouter-oauth-Cx6tOntT.js → openrouter-oauth-B50WslGj.js} +1 -1
  38. package/dist/ui/assets/{panel-rpc-handlers-Br6tQT81.js → panel-rpc-handlers-89YhWuM8.js} +2 -2
  39. package/dist/ui/assets/{provider-1pHZr1WO.js → provider-Bi-hjlEX.js} +1 -1
  40. package/dist/ui/assets/{provider-C8QWCpz8.js → provider-oUC8vFQ5.js} +2 -2
  41. package/dist/ui/assets/{provider-settings-DV3qVADA.js → provider-settings-CzdPoa2L.js} +1 -1
  42. package/dist/ui/assets/{provider-settings-D8S5YdaW.js → provider-settings-_PFHVGxB.js} +1 -1
  43. package/dist/ui/assets/{provider-store-access-DB7c9hOI.js → provider-store-access-BbYdUswr.js} +2 -2
  44. package/dist/ui/assets/provider-store-access-Dcw79llI.js +1 -0
  45. package/dist/ui/assets/{providers-DG12esho.js → providers-Bq7zW4Gk.js} +2 -2
  46. package/dist/ui/assets/{providers-NWbn4JJG.js → providers-K_nrbRE6.js} +1 -1
  47. package/dist/ui/assets/{quick-llm-BIdwKjMA.js → quick-llm-Dl7XIpey.js} +1 -1
  48. package/dist/ui/assets/{session-freezer-5kKWFNcz.js → session-freezer-BlEQaK0W.js} +2 -2
  49. package/dist/ui/assets/{setup-standalone-prelude-DM59hg5k.js → setup-standalone-prelude-KH8G_LfB.js} +1 -1
  50. package/dist/ui/assets/{setup-sudo-DGndYAJc.js → setup-sudo-krlb-y3i.js} +2 -2
  51. package/dist/ui/assets/{skills-D215gXLe.js → skills-CTb4NuXP.js} +1 -1
  52. package/dist/ui/assets/{src-6TqoULh8.js → src-q42bWiRK.js} +1 -1
  53. package/dist/ui/assets/{store-i2-wAf3y.js → store--D7lWwZR.js} +1 -1
  54. package/dist/ui/assets/{sudo-DHC3U4QT.js → sudo-QRrN7GP8.js} +1 -1
  55. package/dist/ui/assets/upgrade-detection-e_modEZG.js +1 -0
  56. package/dist/ui/assets/{wc-attach-CYMk5mBA.js → wc-attach-BEw0uKlO.js} +2 -2
  57. package/dist/ui/assets/{wc-extension-BfcIbw-G.js → wc-extension-x68wh_S1.js} +2 -2
  58. package/dist/ui/assets/wc-floatbar-online-0Dg_sFmu.js +5 -0
  59. package/dist/ui/assets/wc-follower-DP6y1rn1.js +17 -0
  60. package/dist/ui/assets/wc-live-Ca_Pupdm.js +8 -0
  61. package/dist/ui/assets/{wc-nav-Dlamz3gp.js → wc-nav-BgXT_vJ8.js} +2 -2
  62. package/dist/ui/assets/{wc-onboarding-Bx26DTML.js → wc-onboarding-CMTrRNAb.js} +2 -2
  63. package/dist/ui/assets/{wc-placeholder-Do_J1qRT.js → wc-placeholder-D0-hD2IZ.js} +2 -2
  64. package/dist/ui/assets/{wc-settings--XI5hGQK.js → wc-settings-DUy4cLvW.js} +2 -2
  65. package/dist/ui/assets/{wc-shell-CaWIMRFL.js → wc-shell-Fq-OIqlc.js} +4 -4
  66. package/dist/ui/assets/{wc-sprinkles-C-q1vy-w.js → wc-sprinkles-1kb8khRN.js} +2 -2
  67. package/dist/ui/assets/wc-tray-BhkmdnRe.js +2 -0
  68. package/dist/ui/assets/{xai-grok-sdVcuvWJ.js → xai-grok-BRS79NT7.js} +1 -1
  69. package/dist/ui/assets/{xai-grok-Bdtkb3qG.js → xai-grok-CmlbtRNX.js} +1 -1
  70. package/dist/ui/index.html +6 -6
  71. package/dist/ui/packages/webapp/index.html +6 -6
  72. package/package.json +2 -2
  73. package/dist/ui/assets/provider-store-access-B_8R8fuZ.js +0 -1
  74. package/dist/ui/assets/upgrade-detection-B3319J2u.js +0 -1
  75. package/dist/ui/assets/wc-floatbar-online-DD7hSYol.js +0 -5
  76. package/dist/ui/assets/wc-follower-THDkOvKD.js +0 -17
  77. package/dist/ui/assets/wc-live-DA3HbK_D.js +0 -8
  78. package/dist/ui/assets/wc-tray-DllMR8uZ.js +0 -2
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/main-DU7ZMaRI.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-OC7WLZIp.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
@@ -26,23 +26,23 @@
26
26
  <link rel="modulepreload" crossorigin href="/assets/port-bridge-client-DdolH4cw.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-CLRo0NLf.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
29
- <link rel="modulepreload" crossorigin href="/assets/providers-DG12esho.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/providers-Bq7zW4Gk.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/panel-rpc-DmJSNs0I.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-wECJwtH0.js">
32
32
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-CVignIdH.js">
33
- <link rel="modulepreload" crossorigin href="/assets/account-store-Cd-tdnVM.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/account-store-DqOwEqPJ.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/electron-overlay-route-CjT6k9Df.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/bridge-launch-params-QY3l_LbM.js">
36
36
  <link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
37
37
  <link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-9kTxza5l.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/runtime-mode-BweZnYql.js">
39
- <link rel="modulepreload" crossorigin href="/assets/setup-sudo-DGndYAJc.js">
40
- <link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-DM59hg5k.js">
39
+ <link rel="modulepreload" crossorigin href="/assets/setup-sudo-krlb-y3i.js">
40
+ <link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-KH8G_LfB.js">
41
41
  <link rel="modulepreload" crossorigin href="/assets/telemetry-Dxrv_mDE.js">
42
42
  <link rel="modulepreload" crossorigin href="/assets/tray-follower-status-5SqDRLX8.js">
43
43
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DuHpK59o.js">
44
44
  <link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
45
- <link rel="modulepreload" crossorigin href="/assets/provider-settings-DV3qVADA.js">
45
+ <link rel="modulepreload" crossorigin href="/assets/provider-settings-CzdPoa2L.js">
46
46
  </head>
47
47
  <body>
48
48
  <div id="app"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "5.83.0",
3
+ "version": "5.84.0",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -117,7 +117,7 @@
117
117
  "husky": "9.1.7",
118
118
  "jscpd": "5.0.14",
119
119
  "knip": "^6.11.0",
120
- "lint-staged": "17.1.0",
120
+ "lint-staged": "17.1.1",
121
121
  "patch-package": "8.0.1",
122
122
  "playwright": "^1.58.2",
123
123
  "prettier": "3.9.6",
@@ -1 +0,0 @@
1
- import{t as e}from"./store-i2-wAf3y.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{h as e,w as t}from"./db-DjAqlQ2I.js";const n=`slicc:last-seen-version`;function r(){return{version:`5.83.0`,releasedAt:`2026-07-28T20:16:53Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/theme-engine-jfuTMXZM.js","assets/rolldown-runtime-aKtaBQYM.js","assets/logger-DDBAeTLF.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{n as t}from"./attachments-CByeG2Ru.js";import{t as n}from"./logger-DDBAeTLF.js";import{n as r,t as i}from"./base64-DpPqYZJF.js";import{i as a,r as o}from"./src-DoFhVmQT.js";import{a as s,i as c,r as l,t as u,u as d}from"./tray-sync-protocol-DdoErB3E.js";import{a as f,i as p,n as m,o as h,r as g}from"./tray-follower-status-5SqDRLX8.js";import{t as ee}from"./remote-cdp-transport-BWNdvwP2.js";import{i as te,n as _}from"./tray-leader-BDMuV-1a.js";import{n as ne}from"./shared-BYVJAPbn.js";import{t as v}from"./sprinkle-renderer-oLgy--3J.js";import{t as y}from"./export-spool-DCxGPg43.js";var b=class{logger;failureMessage;recoveryMessage;throttleMs;sustainedRelogMs;recoveryDebounceTicks;now;lastErrorLogAt=-1/0;inFailingState=!1;consecutiveSuccesses=0;constructor(e,t){if(!t.failureMessage.trim())throw RangeError(`ThrottledErrorTracker: failureMessage must be non-empty`);if(!t.recoveryMessage.trim())throw RangeError(`ThrottledErrorTracker: recoveryMessage must be non-empty`);let n=t.throttleMs??6e4;if(!Number.isFinite(n)||n<0)throw RangeError(`ThrottledErrorTracker: throttleMs must be a non-negative finite number, got ${n}`);let r=t.sustainedRelogMs??3e5;if(!Number.isFinite(r)||r<0)throw RangeError(`ThrottledErrorTracker: sustainedRelogMs must be a non-negative finite number, got ${r}`);let i=t.recoveryDebounceTicks??5;if(!Number.isInteger(i)||i<1)throw RangeError(`ThrottledErrorTracker: recoveryDebounceTicks must be a positive integer, got ${i}`);this.logger=e,this.failureMessage=t.failureMessage,this.recoveryMessage=t.recoveryMessage,this.throttleMs=n,this.sustainedRelogMs=r,this.recoveryDebounceTicks=i,this.now=t.now??(()=>performance.now())}reportFailure(e){let t=this.inFailingState;this.inFailingState=!0,this.consecutiveSuccesses=0;let n=this.now(),r=n-this.lastErrorLogAt;if(r>(t?this.sustainedRelogMs:this.throttleMs)){let i=t,a=i?`${this.failureMessage} (sustained)`:this.failureMessage;try{try{this.logger.error(a,i?{error:e instanceof Error?e.message:String(e),elapsedMs:Math.round(r)}:{error:e instanceof Error?e.message:String(e)})}catch(t){try{console.error(`[throttled-error-tracker] logger.error threw`,t,{originalMessage:a,originalError:e instanceof Error?e.message:String(e)})}catch{}}}finally{this.lastErrorLogAt=n}}}reportSuccess(){if(this.inFailingState&&(this.consecutiveSuccesses++,!(this.consecutiveSuccesses<this.recoveryDebounceTicks)))try{try{this.logger.error(this.recoveryMessage,{kind:`recovery`})}catch(e){try{console.error(`[throttled-error-tracker] logger.error (recovery) threw`,e,{originalMessage:this.recoveryMessage})}catch{}}}finally{this.inFailingState=!1,this.consecutiveSuccesses=0,this.lastErrorLogAt=-1/0}}},x=n(`data-channel-keepalive`);function S(e,t){if(!Number.isInteger(t)||t<1)throw RangeError(`DataChannelKeepalive ${e} must be a positive integer; got ${String(t)}`)}var C=class{sendPing;onDead;isTransportOpen;onStalled;onRecovered;intervalMs;maxMissed;hardMaxMissed;timer=null;missedPongs=0;awaitingPong=!1;stopped=!1;stalled=!1;constructor(e){if(this.sendPing=e.sendPing,this.onDead=e.onDead,this.isTransportOpen=e.isTransportOpen??(()=>!1),this.onStalled=e.onStalled,this.onRecovered=e.onRecovered,this.intervalMs=e.intervalMs??1e4,this.maxMissed=e.maxMissed??3,this.hardMaxMissed=e.hardMaxMissed??30,S(`intervalMs`,this.intervalMs),S(`maxMissed`,this.maxMissed),S(`hardMaxMissed`,this.hardMaxMissed),this.hardMaxMissed<this.maxMissed)throw RangeError(`DataChannelKeepalive hardMaxMissed (${this.hardMaxMissed}) must be >= maxMissed (${this.maxMissed})`)}start(){this.timer||this.stopped||(this.timer=setInterval(()=>this.tick(),this.intervalMs))}stop(){this.stopped=!0,this.stalled=!1,this.timer&&=(clearInterval(this.timer),null)}receivePong(){this.stopped||(this.awaitingPong=!1,this.missedPongs=0,this.clearStall())}receivePing(){this.stopped||(this.missedPongs=0,this.awaitingPong=!1,this.clearStall())}get missed(){return this.missedPongs}get isStalled(){return this.stalled}clearStall(){this.stalled&&(this.stalled=!1,x.info(`Peer answered again after a stall`),this.onRecovered?.())}tick(){this.stopped||this.awaitingPong&&(this.missedPongs++,x.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed&&this.declareUnreachable())||(this.awaitingPong=!0,this.sendPing())}declareUnreachable(){return this.missedPongs<this.hardMaxMissed&&this.isTransportOpen()?(this.stalled||(this.stalled=!0,x.warn(`Peer stopped answering but its transport is still open — treating as stalled`,{missedPongs:this.missedPongs,hardMaxMissed:this.hardMaxMissed}),this.onStalled?.()),!1):(x.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead(),!0)}},w=64*1024;async function T(e,t){try{switch(t.op){case`readFile`:return await re(e,t.path,t.encoding);case`writeFile`:return[await ie(e,t.path,t.content,t.encoding)];case`stat`:return[await ae(e,t.path)];case`readDir`:return[await E(e,t.path)];case`mkdir`:return[await oe(e,t.path,t.recursive)];case`rm`:return[await se(e,t.path,t.recursive)];case`exists`:return[await ce(e,t.path)];case`walk`:return[await le(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[ue(e)]}}async function re(e,t,n){return(n??`utf-8`)===`utf-8`?D(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):D(r(await e.readFile(t,{encoding:`binary`})),`base64`)}async function ie(e,t,n,r){if(r===`base64`){let r=i(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function ae(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function E(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function oe(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function se(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function ce(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function le(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function D(e,t){if(e.length<=w)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/w),r=[];for(let i=0;i<n;i++){let a=i*w,o=e.slice(a,a+w);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function ue(e){return e instanceof Error&&`code`in e?{ok:!1,error:e.message,code:e.code}:{ok:!1,error:e instanceof Error?e.message:String(e)}}var O=n(`tray-follower-sync`),de=15e3,fe=class{options;sync;eventListeners=new Set;unsubscribe;keepalive;latestSnapshot=null;sentMessageIds=new Set;targetEntries=[];remoteTransports=new Map;cdpChunkBuffers=new Map;snapshotChunkBuffer=null;remoteCDPSessions=new Set;cdpEventCleanups=[];tabOpenResolvers=new Map;fsResolvers=new Map;leaderProtocolVersion;legacyLeaderLogged=!1;latestSprinkles=[];sprinkleContentCache=new Map;pendingSprinkleFetches=new Map;inflightSprinkleByName=new Map;sprinkleContentWaiters=new Map;cacheEpoch=0;fetchEpoch=new Map;activeExportRequests=new Map;constructor(e,t={}){this.options=t;let n=t.sprinkleFetchTimeoutMs;if(n!==void 0&&(!Number.isFinite(n)||n<0))throw RangeError(`sprinkleFetchTimeoutMs must be a non-negative finite number (0 disables the timer); got ${n}`);this.sync=u(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.sync.send({type:`hello`,protocolVersion:4,...this.options.selfRuntimeId?{runtime:this.options.selfRuntimeId}:{}}),this.keepalive=new C({sendPing:()=>this.sync.send({type:`ping`}),isTransportOpen:()=>this.sync.isOpen,onStalled:()=>{O.warn(`Leader stopped answering pings; channel still open, waiting for it to catch up`),p(!0),this.options.onLeaderStalled?.(!0)},onRecovered:()=>{O.info(`Leader is answering pings again`),p(!1),this.options.onLeaderStalled?.(!1)},onDead:()=>{O.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{O.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{O.warn(`Data channel error`),this.handleDisconnect(`Data channel error`)})}sendMessage(e,n,r){let i=n??`follower-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.sentMessageIds.add(i);let a=r?.length?t(r):r;this.sync.send({type:`user_message`,text:e,messageId:i,attachments:a}),O.info(`Sent user message to leader`,{messageId:i})}onEvent(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}stop(){this.sync.send({type:`abort`}),O.info(`Sent abort to leader`)}requestSnapshot(){this.sync.send({type:`request_snapshot`})}requestNewSession(e){this.sync.send({type:`new_session`,action:e}),O.info(`Sent new_session to leader`,{action:e})}selectScoop(e){this.sync.send({type:`scoops.select`,scoopJid:e})}getLatestSnapshot(){return this.latestSnapshot}close(){this.disconnected||(this.disconnected=!0,this.keepalive.stop(),this.unsubscribe(),this.sync.close(),this.eventListeners.clear(),this.cleanupCDPEventForwarding(),this.rejectPendingRequests(`Follower sync closed`),O.info(`Follower sync closed`))}rejectPendingRequests(e){this.rejectPendingSprinkleFetches(e);let t=Error(e);for(let{reject:e}of this.tabOpenResolvers.values())e(t);this.tabOpenResolvers.clear();for(let{reject:e}of this.fsResolvers.values())e(t);this.fsResolvers.clear(),this.cdpChunkBuffers.clear();for(let e of this.remoteTransports.values())e.disconnect();this.remoteTransports.clear();for(let[,e]of this.activeExportRequests)e.approvalAbort?.abort(),e.signal.removeEventListener(`abort`,e.onAbort),e.spool.cancel(),e.reject(new o(`transfer-aborted`));this.activeExportRequests.clear()}advertiseTargets(e,t){this.sync.send({type:`targets.advertise`,targets:e,runtimeId:t})}getTargets(){return this.targetEntries}sendCherryHostEvent(e,t){this.sync.send({type:`cherry.host_event`,targetId:this.options.selfRuntimeId??``,name:e,detail:t})}getSprinkles(){return this.latestSprinkles}refreshSprinkles(){this.sync.send({type:`sprinkles.refresh`})}fetchSprinkleContent(e){let t=this.sprinkleContentCache.get(e);if(t!==void 0)return Promise.resolve(t);let n=this.options.sprinkleFetchTimeoutMs??de;return new Promise((t,r)=>{let i=Symbol(`sprinkle-waiter`),a,o=e=>{a!==void 0&&clearTimeout(a),t(e)},s=e=>{a!==void 0&&clearTimeout(a),r(e)},c=this.sprinkleContentWaiters.get(e)??[];if(c.push({id:i,resolve:o,reject:s}),this.sprinkleContentWaiters.set(e,c),n>0&&(a=setTimeout(()=>{let t=this.sprinkleContentWaiters.get(e);if(t){let r=t.findIndex(e=>e.id===i);r>=0&&t.splice(r,1),t.length===0&&(this.sprinkleContentWaiters.delete(e),this.cancelSprinkleFetch(e,`Sprinkle fetch for "${e}" timed out after ${n}ms`))}r(Error(`Sprinkle fetch for "${e}" timed out after ${n}ms`))},n)),this.inflightSprinkleByName.has(e))return;let l=`sprinkle-fetch-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.inflightSprinkleByName.set(e,l),this.pendingSprinkleFetches.set(l,{sprinkleName:e,chunks:new Map,totalChunks:1}),this.fetchEpoch.set(l,this.cacheEpoch),this.sync.send({type:`sprinkle.fetch`,requestId:l,sprinkleName:e})})}sendSprinkleLick(e,t,n){this.sync.send({type:`sprinkle.lick`,sprinkleName:e,body:t,targetScoop:n})||O.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||O.warn(`forwardLick dropped: tray channel closed`,{type:e.type}),t}clearSprinkleCache(e){e===void 0?this.sprinkleContentCache.clear():this.sprinkleContentCache.delete(e)}cancelSprinkleFetch(e,t=`fetch cancelled`){let n=this.sprinkleContentWaiters.get(e)??[];this.sprinkleContentWaiters.delete(e);let r=this.inflightSprinkleByName.get(e);if(r!==void 0&&(this.inflightSprinkleByName.delete(e),this.pendingSprinkleFetches.delete(r),this.fetchEpoch.delete(r)),n.length===0)return;let i=Error(t);for(let e of n)e.reject(i)}disconnected=!1;handleDisconnect(e){this.disconnected||(this.disconnected=!0,O.error(`Follower sync disconnected`,{reason:e}),f({...m(),state:`error`,error:e,stalled:!1}),this.keepalive.stop(),this.cleanupCDPEventForwarding(),this.unsubscribe(),this.sync.close(),this.rejectPendingRequests(`Follower sync disconnected: ${e}`),this.options.onDisconnect?.(e))}handleLeaderHello(e){this.leaderProtocolVersion=e,e>4?O.warn(`Leader speaks a newer tray sync protocol — update this build`,{leaderVersion:e,ourVersion:4}):O.info(`Leader hello`,{protocolVersion:e})}noteLegacyLeader(e){e===`hello`||this.leaderProtocolVersion!==void 0||this.legacyLeaderLogged||(this.legacyLeaderLogged=!0,O.info(`Leader sent no hello — legacy peer (pre-versioning build)`))}handleLeaderMessage(e){if(this.noteLegacyLeader(e.type),e.type===`theme.apply`){this.applyLeaderTheme(e.themeJson);return}switch(e.type){case`snapshot`:O.info(`Snapshot received from leader`,{messageCount:e.messages.length,scoopJid:e.scoopJid}),this.snapshotChunkBuffer=null,this.latestSnapshot={messages:e.messages,scoopJid:e.scoopJid},this.options.onSnapshot?.(e.messages,e.scoopJid);break;case`snapshot_chunk`:{let t=c(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(O.info(`Chunked snapshot reassembled from leader`,{messageCount:t.result.messages.length,scoopJid:t.result.scoopJid}),this.latestSnapshot=t.result,this.options.onSnapshot?.(t.result.messages,t.result.scoopJid));break}case`agent_event`:this.emitEvent(e.event);break;case`user_message_echo`:this.handleUserMessageEcho(e);break;case`status`:this.options.onStatus?.(e.scoopStatus);break;case`error`:O.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:O.info(`Target registry received from leader`,{targetCount:e.targets.length}),this.targetEntries=e.targets,this.options.onTargetsUpdated?.(this.targetEntries);break;case`cdp.request`:{let{requestId:t,localTargetId:n,method:r,params:i,sessionId:a}=e;this.executeLocalCDP(t,n,r,i,a);break}case`cdp.response`:this.routeCDPResponse(e);break;case`cdp.event`:for(let t of this.remoteTransports.values())t.handleEvent(e.method,e.params);break;case`tab.open`:case`preview.open`:this.executeLocalTabOpen(e.requestId,e.url);break;case`tab.opened`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.resolve(e.targetId));break}case`tab.open.error`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.reject(Error(e.error)));break}case`fs.request`:this.executeLocalFs(e.requestId,e.request);break;case`fs.response`:this.routeFsResponse(e.requestId,e.response);break;case`scoops.list`:this.handleScoopsList(e.scoops,e.activeScoopJid);break;case`sprinkles.list`:this.handleSprinklesList(e.sprinkles);break;case`sprinkle.content`:this.handleSprinkleContent(e);break;case`sprinkle.update`:this.options.onSprinkleUpdate?.(e.sprinkleName,e.data);break;case`sprinkle.reloaded`:this.handleSprinkleReloaded(e.sprinkleName);break;case`cherry.slicc_event`:this.options.onCherrySliccEvent?.(e.name,e.detail);break;case`transcript.export.pending`:case`transcript.export.denied`:case`transcript.export.start`:case`transcript.export.chunk`:case`transcript.export.complete`:case`transcript.export.error`:case`transcript.export.approve.request`:this.handleExportLeaderMessage(e);break;case`ping`:this.keepalive.receivePing(),this.sync.send({type:`pong`});break;case`pong`:this.keepalive.receivePong(),g(Date.now());break;case`hello`:this.handleLeaderHello(e.protocolVersion);break;case`exec.request`:case`exec.chunk`:case`exec.response`:case`exec.signal`:this.handleExecMessage(e);break;default:{let t=d(e);O.warn(`Unknown leader message type — skewed leader?`,{type:t.type});break}}}handleExecMessage(e){e.type===`exec.request`&&this.sync.send({type:`exec.response`,requestId:e.requestId,exitCode:127,error:`exec is not supported on this follower`})}handleSprinklesList(e){O.info(`Sprinkles list received from leader`,{sprinkleCount:e.length}),this.sprinkleContentCache.clear(),this.cacheEpoch++,this.latestSprinkles=e,this.options.onSprinklesList?.(e)}handleUserMessageEcho(e){if(this.sentMessageIds.has(e.messageId)){this.sentMessageIds.delete(e.messageId),O.debug(`Skipping own message echo`,{messageId:e.messageId});return}O.info(`User message echo received`,{messageId:e.messageId,scoopJid:e.scoopJid}),this.options.onUserMessage?.(e.text,e.messageId,e.scoopJid,e.attachments)}handleScoopsList(e,t){O.info(`Scoops list received from leader`,{scoopCount:e.length}),this.options.onScoopsList?.(e,t)}handleSprinkleReloaded(e){this.sprinkleContentCache.delete(e),this.options.onSprinkleReloaded?.(e)}handleSprinkleContent(e){let{requestId:t,sprinkleName:n,content:r,chunkIndex:i,totalChunks:a,error:o}=e;if(o){O.warn(`sprinkle.content error from leader`,{sprinkleName:n,error:o}),this.pendingSprinkleFetches.delete(t),this.inflightSprinkleByName.delete(n),this.fetchEpoch.delete(t);let e=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let t of e)t.reject(Error(o));return}if(!this.pendingSprinkleFetches.has(t)){O.debug(`Dropping sprinkle.content for unknown requestId`,{sprinkleName:n,requestId:t});return}let s=null;if(i!==void 0&&a!==void 0){if(i<0||i>=a){O.warn(`Dropping sprinkle.content with out-of-range chunkIndex`,{sprinkleName:n,chunkIndex:i,totalChunks:a});return}let e=this.pendingSprinkleFetches.get(t);if(e.totalChunks=a,e.chunks.has(i)?O.warn(`Dropping duplicate sprinkle.content chunk`,{sprinkleName:n,chunkIndex:i}):e.chunks.set(i,r),e.chunks.size>=a){let r=[];for(let t=0;t<a;t++){let i=e.chunks.get(t);if(i===void 0){O.warn(`Chunked sprinkle.content missing chunk after assembly`,{sprinkleName:n,missingIndex:t});return}r.push(i)}s=r.join(``),this.pendingSprinkleFetches.delete(t)}}else s=r,this.pendingSprinkleFetches.delete(t);if(s===null)return;let c=this.fetchEpoch.get(t);this.fetchEpoch.delete(t),c===this.cacheEpoch&&this.sprinkleContentCache.set(n,s),this.inflightSprinkleByName.delete(n);let l=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let e of l)e.resolve(s)}rejectPendingSprinkleFetches(e){let t=Error(e);for(let[,e]of this.sprinkleContentWaiters)for(let n of e)n.reject(t);this.sprinkleContentWaiters.clear(),this.pendingSprinkleFetches.clear(),this.inflightSprinkleByName.clear(),this.fetchEpoch.clear()}applyLeaderTheme(t){e(async()=>{let{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}},__vite__mapDeps([0,1,2])).then(({importTheme:e,saveCustomTheme:n,setActiveTheme:r,clearActiveTheme:i,applyThemeOverrides:a})=>{if(!t)i();else{let i=e(t);n(i),r(i.id)}a()}).catch(e=>O.error(`Failed to apply leader theme`,{err:e}))}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(t){O.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new ee({sendCDPRequest:(n,r,i,a)=>{this.sync.send({type:`cdp.request`,requestId:n,targetRuntimeId:e,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}openRemoteTab(e,t){let n=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.tabOpenResolvers.set(n,{resolve:r,reject:i}),this.sync.send({type:`tab.open`,requestId:n,targetRuntimeId:e,url:t})})}async executeLocalTabOpen(e,t){let n=this.options.browserTransport;if(!n){this.sync.send({type:`tab.open.error`,requestId:e,error:`Follower has no browser transport`});return}try{let r=(await n.send(`Target.createTarget`,{url:t,background:!0})).targetId;if(typeof r!=`string`||r.length===0){this.sync.send({type:`tab.open.error`,requestId:e,error:`Target.createTarget did not return a usable targetId`});return}this.sync.send({type:`tab.opened`,requestId:e,targetId:r}),this.options.onTargetsChanged?.()}catch(t){this.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}async executeLocalCDP(e,t,n,r,i){let a=this.options.browserTransport;if(!a){this.sync.send({type:`cdp.response`,requestId:e,error:`Follower has no browser transport`});return}try{let t=await a.send(n,r,i);if(n===`Target.attachToTarget`&&t.sessionId){let e=t.sessionId;this.remoteCDPSessions.add(e),this.setupCDPEventForwarding(a,e),O.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),O.debug(`Removed remote CDP session on detach`,{sessionId:i})),s(this.sync,e,t)}catch(t){this.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}setupCDPEventForwarding(e,t){for(let n of[`Page.frameNavigated`,`Page.loadEventFired`,`Page.domContentEventFired`,`Network.responseReceived`,`Network.loadingFinished`,`Network.requestWillBeSent`]){let r=e=>{if(e.sessionId!==t||!this.remoteCDPSessions.has(t))return;let{sessionId:r,...i}=e;this.sync.send({type:`cdp.event`,method:n,params:i,sessionId:t})};e.on(n,r),this.cdpEventCleanups.push(()=>e.off(n,r))}}cleanupCDPEventForwarding(){for(let e of this.cdpEventCleanups)e();this.cdpEventCleanups.length=0,this.remoteCDPSessions.clear()}routeCDPResponse(e){let t=l(this.cdpChunkBuffers,e);if(t)for(let n of this.remoteTransports.values())n.handleResponse(e.requestId,t.result,t.error)}async executeLocalFs(e,t){let n=this.options.vfs;if(!n){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Follower has no VFS`}});return}let r;try{r=await T(n,t)}catch(t){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:t instanceof Error?t.message:String(t)}});return}for(let t of r)this.sync.send({type:`fs.response`,requestId:e,response:t})}routeFsResponse(e,t){let n=this.fsResolvers.get(e);if(!n)return;n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}sendFsRequest(e,t){let n=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.fsResolvers.set(n,{resolve:r,reject:i,responses:[]}),this.sync.send({type:`fs.request`,requestId:n,targetRuntimeId:e,request:t})})}handleExportLeaderMessage(e){switch(e.type){case`transcript.export.pending`:O.debug(`Transcript export pending`,{requestId:e.requestId}),this.activeExportRequests.get(e.requestId)?.onProgress?.({phase:`collecting`});break;case`transcript.export.denied`:this.handleExportDenied(e.requestId);break;case`transcript.export.start`:O.debug(`Transcript export start`,{requestId:e.requestId}),this.activeExportRequests.get(e.requestId)?.onProgress?.({phase:`packaging`});break;case`transcript.export.chunk`:this.handleExportChunkAsync(e.requestId,e.index,e.data);break;case`transcript.export.complete`:this.handleExportComplete(e.requestId,e.chunks,e.byteLength,e.sha256);break;case`transcript.export.error`:this.handleExportError(e.requestId,e.code);break;case`transcript.export.approve.request`:this.handleExportApprovalRequest(e.requestId,{selector:e.selector,...e.estimatedBytes==null?{}:{estimatedBytes:e.estimatedBytes}});break;default:{let t=d(e);O.warn(`Unknown transcript export leader message — skewed leader?`,{type:t.type});break}}}requestTranscriptExport(e,t,n){if(t.aborted)return Promise.reject(new o(`transfer-aborted`));let r=`te-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=(this.options.makeExportSpool??y)(r);return new Promise((a,s)=>{let c=()=>{let e=this.activeExportRequests.get(r);e&&(e.approvalAbort?.abort(),this.sync.send({type:`transcript.export.cancel`,requestId:r}),this.activeExportRequests.delete(r),e.spool.cancel(),s(new o(`transfer-aborted`)))};if(t.aborted){i.cancel(),s(new o(`transfer-aborted`));return}t.addEventListener(`abort`,c,{once:!0}),this.activeExportRequests.set(r,{resolve:a,reject:s,spool:i,nextExpectedIndex:0,totalBytes:0,signal:t,onAbort:c,onProgress:n}),this.sync.send({type:`transcript.export.request`,requestId:r,selector:e})})}async handleExportApprovalRequest(e,t){let n=this.activeExportRequests.get(e);if(!n){O.warn(`Ignoring approval prompt for an unknown export request`,{requestId:e}),this.sync.send({type:`transcript.export.approve.response`,requestId:e,approved:!1});return}let r=new AbortController;n.approvalAbort=r;let i=!1;try{i=await this.options.onTranscriptExportApprovalRequest?.({...t,signal:r.signal})===!0}catch(t){O.warn(`Transcript export approval dialog failed — denying`,{requestId:e,error:t instanceof Error?t.message:String(t)}),i=!1}if(r.signal.aborted||!this.activeExportRequests.has(e)){this.sync.send({type:`transcript.export.approve.response`,requestId:e,approved:!1});return}this.sync.send({type:`transcript.export.approve.response`,requestId:e,approved:i})}handleExportDenied(e){let t=this.activeExportRequests.get(e);t&&(t.approvalAbort?.abort(),t.signal.removeEventListener(`abort`,t.onAbort),this.activeExportRequests.delete(e),t.spool.cancel(),t.reject(new o(`permission-denied`)))}async handleExportChunkAsync(e,t,n){let r=this.activeExportRequests.get(e);if(!r)return;if(t!==r.nextExpectedIndex){O.warn(`Transcript export chunk out of order`,{requestId:e,expected:r.nextExpectedIndex,got:t}),r.signal.removeEventListener(`abort`,r.onAbort),this.activeExportRequests.delete(e),this.sync.send({type:`transcript.export.cancel`,requestId:e}),r.spool.cancel(),r.reject(new o(`transfer-corrupt`));return}let i=atob(n),a=new Uint8Array(i.length);for(let e=0;e<i.length;e++)a[e]=i.charCodeAt(e);r.totalBytes+=a.byteLength,r.nextExpectedIndex++,r.onProgress?.({phase:`transferring`,processedBytes:r.totalBytes});try{await r.spool.append(a,t)}catch(t){if(!this.activeExportRequests.has(e))return;r.signal.removeEventListener(`abort`,r.onAbort),this.activeExportRequests.delete(e),this.sync.send({type:`transcript.export.cancel`,requestId:e}),r.spool.cancel(),r.reject(new o(`transfer-corrupt`)),O.warn(`Transcript export spool append failed`,{requestId:e,error:t instanceof Error?t.message:String(t)});return}this.activeExportRequests.has(e)&&this.sync.send({type:`transcript.export.ack`,requestId:e,index:t})}async handleExportComplete(e,t,n,r){let i=this.activeExportRequests.get(e);if(!i)return;if(i.signal.removeEventListener(`abort`,i.onAbort),this.activeExportRequests.delete(e),i.nextExpectedIndex!==t){O.warn(`Transcript export chunk count mismatch`,{requestId:e,expected:t,got:i.nextExpectedIndex}),i.spool.cancel(),i.reject(new o(`transfer-corrupt`));return}let a;try{a=await i.spool.finalize(t,n,r)}catch(t){O.warn(`Transcript export spool finalize failed`,{requestId:e,error:t instanceof Error?t.message:String(t)}),i.reject(new o(`transfer-corrupt`));return}i.resolve(a)}handleExportError(e,t){let n=this.activeExportRequests.get(e);if(!n)return;n.approvalAbort?.abort(),n.signal.removeEventListener(`abort`,n.onAbort),this.activeExportRequests.delete(e),n.spool.cancel();let r=a.has(t)?t:`transfer-corrupt`;n.reject(new o(r))}},k=n(`tray-follower`);function A(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function j(e){let t=A(e.joinUrl),n=await R(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return k.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),M(n)}function M(e){let t={trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,action:e.result.action,code:e.result.code,iceServers:e.iceServers};return e.result.action===`wait`?{...t,retryAfterMs:e.result.retryAfterMs}:e.result.action===`signal`?{...t,bootstrap:e.result.bootstrap}:e.result.action===`fail`?{...t,error:e.result.error,...e.result.code===`TRAY_SUPERSEDED`?{supersededByJoinUrl:e.result.joinUrl}:{}}:t}async function N(e){return L(await z(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function P(e){return L(await z(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function F(e){return L(await z(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function I(e){return L(await z(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function L(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function R(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!B(n)){let n=t?t.slice(0,200):`(empty)`;throw k.warn(`Tray follower attach returned an invalid response`,{status:e.status,body:n}),Error(`Tray follower attach returned an invalid response (${e.status}): ${n}`)}return n}async function z(e,t){let n=A(e.joinUrl),r=await(e.fetchImpl??fetch)(n,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),i=await r.json().catch(()=>null);if(!V(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function B(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.trayId!=`string`||typeof t.controllerId!=`string`||t.role!==`follower`||typeof t.participantCount!=`number`)return!1;let n=t.result;if(!n||typeof n!=`object`)return!1;let r=n;return r.action===`wait`?(r.code===`LEADER_NOT_ELECTED`||r.code===`LEADER_NOT_CONNECTED`)&&typeof r.retryAfterMs==`number`:r.action===`signal`?r.code===`LEADER_CONNECTED`&&H(r.bootstrap):r.action===`fail`?r.code===`TRAY_SUPERSEDED`?typeof r.error==`string`&&typeof r.joinUrl==`string`:(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function V(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.trayId==`string`&&typeof t.controllerId==`string`&&t.role===`follower`&&typeof t.participantCount==`number`&&H(t.bootstrap)&&Array.isArray(t.events)}function H(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.controllerId==`string`&&typeof t.bootstrapId==`string`&&typeof t.attempt==`number`&&typeof t.state==`string`&&typeof t.expiresAt==`string`&&typeof t.cursor==`number`&&typeof t.maxRetries==`number`&&typeof t.retriesRemaining==`number`}var U=n(`tray-webrtc`),pe=`tray-control`,me=250,he=5,ge=1e3,_e=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>G(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??pe}setIceServers(e){this.iceServers=e}async handleControlMessage(e){e.type===`follower.join_requested`?(e.iceServers&&!this.iceServers&&(this.iceServers=e.iceServers),await this.handleJoinRequested(e)):e.type===`bootstrap.answer`?await this.peers.get(e.bootstrapId)?.peer.setRemoteDescription(e.answer):e.type===`bootstrap.ice_candidate`&&await this.peers.get(e.bootstrapId)?.peer.addIceCandidate(e.candidate)}getPeers(){return Array.from(this.peers.values()).map(({state:e})=>({...e}))}getChannel(e){return this.peers.get(e)?.channel??null}stop(){for(let e of this.peers.values())e.peer.close();this.peers.clear()}async handleJoinRequested(e){this.closeControllerPeers(e.controllerId);let t=this.peerConnectionFactory(),n={controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,state:`connecting`,connectedAt:null,runtime:e.runtime},r=W(t.createDataChannel(this.dataChannelLabel),t);this.peers.set(e.bootstrapId,{state:n,peer:t,channel:r}),t.addEventListener(`icecandidate`,({candidate:t})=>{let n=q(t);n&&this.options.sendControlMessage({type:`bootstrap.ice_candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:n})}),t.addEventListener(`connectionstatechange`,()=>{let n=this.peers.get(e.bootstrapId);n&&(n.state.state===`connected`?(t.connectionState===`disconnected`||t.connectionState===`failed`)&&(U.warn(`Leader peer connection state changed post-connect`,{bootstrapId:e.bootstrapId,state:t.connectionState}),this.options.onPeerDisconnected?.(e.bootstrapId,`Peer connection ${t.connectionState}`)):t.connectionState===`failed`&&this.failPeer(e,`Leader peer connection failed before the data channel opened`))}),r.addEventListener(`open`,()=>{let t=this.peers.get(e.bootstrapId);!t||t.state.state===`connected`||(t.state.state=`connected`,t.state.connectedAt=new Date().toISOString(),this.options.onPeerConnected?.({...t.state},t.channel))}),r.addEventListener(`close`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(U.warn(`Leader data channel closed post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel closed`)):this.failPeer(e,`Leader data channel closed before opening`))}),r.addEventListener(`error`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(U.warn(`Leader data channel error post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel error`)):this.failPeer(e,`Leader data channel failed before opening`))});try{let n=await t.createOffer();await t.setLocalDescription(n),this.options.sendControlMessage({type:`bootstrap.offer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,offer:K(t.localDescription??n,`offer`)})}catch(t){this.failPeer(e,t instanceof Error?t.message:String(t))}}closeControllerPeers(e){for(let[t,n]of this.peers.entries())n.state.controllerId===e&&(n.peer.close(),this.peers.delete(t))}failPeer(e,t){let n=this.peers.get(e.bootstrapId);if(n){n.peer.close(),this.peers.delete(e.bootstrapId);try{this.options.sendControlMessage({type:`bootstrap.failed`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,code:`WEBRTC_BOOTSTRAP_FAILED`,message:t,retryable:!0,retryAfterMs:1e3})}catch(e){U.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},ve=class{options;fetchImpl;peerConnectionFactory;controllerIdFactory;sleep;pollIntervalMs;iceServers;activePeer=null;stopped=!1;constructor(e){this.options=e,this.fetchImpl=e.fetchImpl??fetch,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>G(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??me}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();f({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),U.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0,r=0;for(;;){J(this.stopped),n++;let t;try{t=await j({joinUrl:this.options.joinUrl,controllerId:e,runtime:this.options.runtime,fetchImpl:this.fetchImpl})}catch(e){let t=e instanceof Error?e.message:String(e);throw f({...m(),attachAttempts:n,lastError:t}),e}if(f({...m(),attachAttempts:n,lastAttachCode:t.code}),this.followSupersededJoinUrl(t,r)){r++,await this.sleep(ge);continue}if(t.action===`wait`){let e=t.retryAfterMs??1e3;U.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&U.warn(`Follower tray attach still waiting after ${n} attempts`,{attempt:n,code:t.code,retryAfterMs:e}),await this.sleep(e);continue}if(t.action===`fail`||!t.bootstrap){let e=t.error??`Tray follower attach failed (${t.code})`;throw f({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),U.warn(`Follower tray attach failed`,{error:e}),Error(e)}t.iceServers&&(this.iceServers=t.iceServers);try{let r=await this.completeBootstrap(t.trayId,e,t.bootstrap);return f({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),U.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw f({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),U.warn(`Follower tray bootstrap failed`,{error:r}),e}}}followSupersededJoinUrl(e,t){if(e.action!==`fail`||e.code!==`TRAY_SUPERSEDED`||!e.supersededByJoinUrl)return!1;if(t>=he)throw Error(`Follower tray attach gave up after ${t} supersede redirects (possible redirect cycle)`);let n;try{n=new URL(e.supersededByJoinUrl)}catch{throw Error(`Follower tray superseded with an invalid joinUrl: ${e.supersededByJoinUrl}`)}return U.info(`Follower tray superseded, following redirect`,{oldJoinUrl:this.options.joinUrl,newJoinUrl:n.toString()}),this.options.joinUrl=n.toString(),this.options.onJoinUrlChanged?.(n.toString()),!0}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,f({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})}async completeBootstrap(e,t,n){let r=n,i=0;for(this.activePeer=this.createFollowerPeer(t,r.bootstrapId);;){if(J(this.stopped),this.activePeer.open&&this.activePeer.channel)return{trayId:e,controllerId:t,bootstrapId:r.bootstrapId,channel:this.activePeer.channel};if(this.activePeer.openError)throw Error(this.activePeer.openError);let n=await N({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,cursor:i,fetchImpl:this.fetchImpl});r=n.bootstrap,i=r.cursor;try{await this.applyBootstrapEvents(n.events,this.activePeer,t,r.bootstrapId)}catch(e){if(r.failure?.retryable&&r.retriesRemaining>0){r=(await I({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,runtime:this.options.runtime,fetchImpl:this.fetchImpl})).bootstrap,i=0,this.activePeer.peer.close(),this.activePeer=this.createFollowerPeer(t,r.bootstrapId);continue}throw e}this.activePeer.open||await this.sleep(this.pollIntervalMs)}}async applyBootstrapEvents(e,t,n,r){for(let i of e)if(i.type===`bootstrap.offer`){await t.peer.setRemoteDescription(i.offer);let e=await t.peer.createAnswer();await t.peer.setLocalDescription(e),await P({joinUrl:this.options.joinUrl,controllerId:n,bootstrapId:r,answer:K(t.peer.localDescription??e,`answer`),fetchImpl:this.fetchImpl})}else if(i.type===`bootstrap.ice_candidate`)await t.peer.addIceCandidate(i.candidate);else if(i.type===`bootstrap.failed`)throw Error(i.failure.message)}createFollowerPeer(e,t){let n=this.peerConnectionFactory(),r={peer:n,channel:null,open:!1,openError:null};return n.addEventListener(`connectionstatechange`,()=>{r.open&&(n.connectionState===`disconnected`||n.connectionState===`failed`)&&(U.warn(`Follower peer connection state changed post-connect`,{bootstrapId:t,state:n.connectionState}),this.options.onDisconnected?.(`Peer connection ${n.connectionState}`))}),n.addEventListener(`datachannel`,({channel:e})=>{r.channel=W(e,n),e.addEventListener(`open`,()=>{r.open=!0}),e.addEventListener(`close`,()=>{r.open?(U.warn(`Follower data channel closed post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel closed`)):r.openError=`Follower data channel closed before opening`}),e.addEventListener(`error`,()=>{r.open?(U.warn(`Follower data channel error post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel error`)):r.openError=`Follower data channel failed before opening`})}),n.addEventListener(`icecandidate`,({candidate:n})=>{let r=q(n);r&&F({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{U.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function ye(e,t){let n=t.baseDelayMs??1e3,r=t.backoffMultiplier??2,i=t.maxDelayMs??3e4,a=t.maxAttempts??10,o=t.sleep??e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=!1,c=!1,l=null,u={cancel(){s=!0,c=!1,l?.stop(),l=null},get reconnecting(){return c}},d=()=>{let t=new ve({...e,sleep:o,onDisconnected:e=>{s||(U.warn(`Follower disconnected, starting reconnect loop`,{reason:e}),p(e))},onJoinUrlChanged:t=>{e.joinUrl=t,e.onJoinUrlChanged?.(t)}});return l=t,{manager:t,connectionPromise:t.start()}},p=async u=>{if(s||c)return;c=!0,l?.stop(),l=null;let p=0,h=n,g=u??`Unknown disconnect`;for(;!s&&p<a&&(p++,t.onReconnecting?.(p),f({...m(),state:`reconnecting`,error:null,reconnectAttempts:p}),U.info(`Reconnect attempt`,{attempt:p,delay:h}),await o(h),!s);){let n=null;try{let r=d();n=r.manager;let i=await r.connectionPromise;if(s){n.stop();break}c=!1,f({...m(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),U.info(`Reconnect successful`,{attempt:p,trayId:i.trayId}),t.onConnected(i);return}catch(e){g=e instanceof Error?e.message:String(e),U.warn(`Reconnect attempt failed`,{attempt:p,error:g}),n?.stop(),l=null}h=Math.min(h*r,i)}s||(c=!1,f({...m(),state:`error`,error:`Reconnect failed after ${p} attempts: ${g}`,reconnectAttempts:p}),U.warn(`Reconnect gave up`,{attempts:p,lastError:g}),t.onGaveUp?.(g))},{connectionPromise:h}=d();return h.then(e=>{s||t.onConnected(e)}).catch(e=>{s||(U.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)}),p(e instanceof Error?e.message:String(e)))}),u}function W(e,t){return e.getMaxMessageSize=()=>t.sctp?.maxMessageSize,e}function G(e){if(typeof RTCPeerConnection>`u`)throw Error(`RTCPeerConnection is not available in this runtime`);let t=e?.length?{iceServers:e}:void 0;return new RTCPeerConnection(t)}function K(e,t){if(!e||e.type!==t||typeof e.sdp!=`string`)throw Error(`Expected a local ${t} description before signaling`);return{type:e.type,sdp:e.sdp}}function q(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.candidate==`string`?{candidate:t.candidate,sdpMid:typeof t.sdpMid==`string`?t.sdpMid:null,sdpMLineIndex:typeof t.sdpMLineIndex==`number`?t.sdpMLineIndex:null,usernameFragment:typeof t.usernameFragment==`string`?t.usernameFragment:null}:null}function J(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}function Y(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}var X=n(`sprinkle-follower`),be=class{sync;addSprinkle;removeSprinkle;zone;openPath;open=new Map;opening=new Set;latestDesiredOpen=new Set;pendingUpdates=new Map;updateListeners=new Map;disposed=!1;constructor(e){this.sync=e.sync,this.addSprinkle=e.addSprinkle,this.removeSprinkle=e.removeSprinkle,this.zone=e.zone,this.openPath=e.open}async updateAvailable(e){if(this.disposed)return;let t=new Map;for(let n of e)n.open&&t.set(n.name,n);this.latestDesiredOpen=new Set(t.keys());for(let e of[...this.open.keys()])t.has(e)||this.closeLocally(e);for(let e of[...this.pendingUpdates.keys()])t.has(e)||this.pendingUpdates.delete(e);let n=[];for(let[e,r]of t)this.open.has(e)||this.opening.has(e)||n.push(this.openLocally(e,r));await Promise.allSettled(n)}handleSprinkleUpdate(e,t){if(this.disposed)return;let n=this.open.get(e);if(n){n.renderer.pushUpdate(t),this.fanOutToListeners(e,t);return}if(this.opening.has(e)){this.pendingUpdates.set(e,t);return}X.debug(`Dropping sprinkle.update for unknown sprinkle`,{sprinkleName:e})}async handleSprinkleReloaded(e){if(this.disposed)return;let t=this.open.get(e);if(!t){this.opening.has(e)&&this.pendingUpdates.delete(e);return}this.updateListeners.delete(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){X.warn(`Failed to fetch sprinkle content for reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.open.has(e))return;try{t.renderer.dispose()}catch(t){X.warn(`Sprinkle dispose threw during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}let r=this.createBridge(e),i=new v(t.container,r);try{await i.render(n,e)}catch(t){X.warn(`Sprinkle re-render failed during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.open.has(e)){i.dispose();return}t.renderer=i,X.info(`Sprinkle reloaded in place`,{sprinkleName:e})}dispose(){if(!this.disposed){this.disposed=!0;for(let e of[...this.open.keys()])this.closeLocally(e);this.pendingUpdates.clear(),this.latestDesiredOpen.clear(),this.updateListeners.clear()}}async openLocally(e,t){this.opening.add(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){this.opening.delete(e),this.pendingUpdates.delete(e),X.warn(`Failed to fetch sprinkle content from leader`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.latestDesiredOpen.has(e)){this.opening.delete(e),this.pendingUpdates.delete(e);return}let r=document.createElement(`div`);r.className=`sprinkle-panel`,r.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,r.dataset.sprinkle=e;let i=new v(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone,{icon:t.icon});try{await i.render(n,e)}catch(t){X.warn(`Sprinkle render failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.latestDesiredOpen.has(e)){this.updateListeners.delete(e),this.opening.delete(e),this.pendingUpdates.delete(e);try{i.dispose()}catch(t){X.warn(`Sprinkle dispose threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}r.remove();try{this.removeSprinkle(e)}catch(t){X.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}this.open.set(e,{renderer:i,container:r}),this.opening.delete(e);let a=this.pendingUpdates.get(e);a!==void 0&&(this.pendingUpdates.delete(e),i.pushUpdate(a),this.fanOutToListeners(e,a))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){X.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){X.warn(`Sprinkle dispose threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}t.container.remove(),this.open.delete(e);try{this.removeSprinkle(e)}catch(t){X.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}}createBridge(e){return{name:e,lick:t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data;this.sync.sendSprinkleLick(e,{action:n,data:r})},on:(t,n)=>{if(t!==`update`)return;let r=this.updateListeners.get(e);r||(r=new Set,this.updateListeners.set(e,r)),r.add(n)},off:(t,n)=>{t===`update`&&this.updateListeners.get(e)?.delete(n)},readFile:()=>Promise.reject(Error(`readFile not supported in follower-rendered sprinkle`)),writeFile:()=>Promise.reject(Error(`writeFile not supported in follower-rendered sprinkle`)),readDir:()=>Promise.reject(Error(`readDir not supported in follower-rendered sprinkle`)),exists:()=>Promise.resolve(!1),stat:()=>Promise.reject(Error(`stat not supported in follower-rendered sprinkle`)),mkdir:()=>Promise.reject(Error(`mkdir not supported in follower-rendered sprinkle`)),rm:()=>Promise.reject(Error(`rm not supported in follower-rendered sprinkle`)),screenshot:()=>Promise.reject(Error(`screenshot not supported in follower-rendered sprinkle`)),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch(t){X.warn(`Sprinkle setState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch(t){return X.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{if(this.openPath){this.openPath(e);return}let t=/^https?:|^chrome-extension:/.test(e)?e:ne(e);window.open(t,`_blank`)},close:()=>this.closeLocally(e),minimize:()=>{},stopCone:()=>{this.sync.sendSprinkleLick(e,{action:`__stopCone__`})},attachImage:()=>{},captureScreen:()=>Promise.reject(Error(`captureScreen not supported in follower-rendered sprinkle`)),exec:Object.assign(()=>Promise.resolve({stdout:``,stderr:`exec not supported in follower-rendered sprinkle
3
- `,exitCode:127}),{spawn:()=>Promise.resolve({stdout:``,stderr:`exec.spawn not supported in follower-rendered sprinkle
4
- `,exitCode:127})}),agent:()=>Promise.resolve({stdout:`agent not supported in follower-rendered sprinkle
5
- `,exitCode:127}),fetch:()=>Promise.reject(Error(`fetch not supported in follower-rendered sprinkle`)),http:{client:()=>{let e=()=>Promise.reject(Error(`http not supported in follower-rendered sprinkle`));return{get:e,post:e,put:e,patch:e,delete:e}}},browser:{findTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),ensureTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),eval:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),evalAsync:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),cookie:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),localStorage:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),fetch:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`))},hid:{list:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),sendReport:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),on:()=>{},off:()=>{}},serial:{list:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`))},usb:{list:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`))},readFileBinary:()=>Promise.reject(Error(`readFileBinary not supported in follower-rendered sprinkle`)),writeFileBinary:()=>Promise.reject(Error(`writeFileBinary not supported in follower-rendered sprinkle`)),fetchToFile:()=>Promise.reject(Error(`fetchToFile not supported in follower-rendered sprinkle`)),_jsh:()=>Promise.reject(Error(`jsh globals not supported in follower-rendered sprinkle`)),_device:()=>Promise.reject(Error(`device ops not supported in follower-rendered sprinkle`))}}},Z=n(`page-follower-tray`);function xe(e,t){return t===`slicc-cherry`?e.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`cherry`,capabilities:{navigate:!0,network:!1,screenshot:!0}})):e.map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}function Se(e){let t=e._refreshIntervalMs??5e3,n=null,r=null,i=null,a=null,o=(t=!0)=>{i&&=(clearInterval(i),null),r&&=(r.dispose(),null),n&&=(e.onForwardingToggle?.(!1),t&&e.onConnectionChange?.(!1),e.browserAPI.setTrayTargetProvider(null),n.close(),null)};return a=ye({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep,onJoinUrlChanged:e.onJoinUrlChanged},{onConnected:a=>{o();let s=Y(a.bootstrapId),c=null,l=new fe(a.channel,{browserTransport:e.browserAPI.getTransport(),browserAPI:e.browserAPI,onSnapshot:e.onSnapshot,onUserMessage:e.onUserMessage,onStatus:e.onStatus,onCherrySliccEvent:e.onCherrySliccEvent,onScoopsList:e.onScoopsList,onTranscriptExportApprovalRequest:e.onTranscriptExportApprovalRequest,selfRuntimeId:s,onTargetsChanged:()=>void d(),onSprinklesList:t=>{e.onSprinklesList?.(t),c?.updateAvailable(t)},onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t),onSprinkleReloaded:e=>void c?.handleSprinkleReloaded(e),onLeaderStalled:t=>e.onLeaderStalled?.(t),onDisconnect:e=>{Z.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new be({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle,open:e.onOpen}),r=c);let u=new b(Z,{failureMessage:`Follower CDP target listing failed (best-effort, throttled)`,recoveryMessage:`Follower CDP target listing recovered (stable for debounce window)`}),d=async()=>{if(e.advertisesCdpTargets===!1)return;let t;try{t=await e.browserAPI.listPages()}catch(e){u.reportFailure(e);return}if(n===l){u.reportSuccess();try{l.advertiseTargets(xe(t,e.runtime??`slicc-standalone`),s)}catch(e){Z.error(`Follower target advertisement broadcast failed (sync.advertiseTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}};n=l,e.browserAPI.setTrayTargetProvider(l),e.setChatAgent(l),e.onForwardingToggle?.(!0),e.onConnectionChange?.(!0),l.requestSnapshot(),e.advertisesCdpTargets!==!1&&(i=setInterval(()=>void d(),t),d()),Z.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{Z.info(`Follower reconnecting`,{attempt:e})},onGaveUp:t=>{Z.warn(`Follower reconnect gave up`,{lastError:t}),o(!1),e.onGaveUp?.(t)},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null,f({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})},get currentSync(){return n}}}function Ce(e){let t=Q(_()),n=$(m()),r=()=>{e.toggleAttribute(`online`,t||n)},i=te(e=>{t=Q(e),r()}),a=h(e=>{n=$(e),r()});return r(),()=>{i(),a()}}function Q(e){return e.state===`leader`}function $(e){return e.state===`connected`}export{T as a,_e as i,Se as n,C as o,Y as r,b as s,Ce as t};
@@ -1,17 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-DA3HbK_D.js","assets/rolldown-runtime-aKtaBQYM.js","assets/account-store-Cd-tdnVM.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-DoFhVmQT.js","assets/proxied-fetch-CfcFb0B0.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-Baeul5rD.js","assets/secrets-bridge-client-CLRo0NLf.js","assets/port-bridge-client-DdolH4cw.js","assets/tool-ui-DfXu6quJ.js","assets/providers-DG12esho.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/setup-standalone-prelude-DM59hg5k.js","assets/bridge-launch-params-QY3l_LbM.js","assets/electron-overlay-route-CjT6k9Df.js","assets/messages-BD4p8GuF.js","assets/tray-runtime-config-9kTxza5l.js","assets/runtime-mode-BweZnYql.js","assets/setup-sudo-DGndYAJc.js","assets/tray-follower-status-5SqDRLX8.js","assets/telemetry-Dxrv_mDE.js","assets/sha256-DmK25X5D.js","assets/tray-leader-BDMuV-1a.js","assets/db-ysOO0kLr.js","assets/shared-BYVJAPbn.js","assets/mime-types-ugOWOUZ9.js","assets/dictation-priming-DGpw1lUV.js","assets/export-provider-B6K_eHX_.js","assets/dip-BubHLPf_.js","assets/wc-permissions-registry-Blyunq37.js","assets/hid-device-registry-DboUgvzI.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-BQbhk96u.js","assets/usb-device-registry-BOGfZXgp.js","assets/sprinkle-renderer-oLgy--3J.js","assets/theme-C8b_iQ_9.js","assets/theme-engine-jfuTMXZM.js","assets/sprinkle-bridge-DziYRsuS.js","assets/session-freezer-5kKWFNcz.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/icons-C5g936Qd.js","assets/session-store-DQztDoVa.js","assets/wc-shell-CaWIMRFL.js","assets/timestamp-preference-DgrTvVNx.js","assets/src-6TqoULh8.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-scoop-color-CByZNEJo.js","assets/wc-shell-WkeczD9x.css","assets/leader-session-events-m7I5BMZy.js","assets/legacy-styles-DcRu2WCJ.js","assets/wc-transcript-export-B3p8LhYu.js","assets/export-spool-DCxGPg43.js","assets/follower-navigate-watcher-DgusZOpY.js","assets/navigation-watcher-DkN9hU8i.js","assets/handoff-link-Dmaaww5x.js","assets/discovery-preference-C0L_79z7.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{r as n}from"./src-DoFhVmQT.js";import{c as r}from"./tray-sync-protocol-DdoErB3E.js";import{a as i,r as a}from"./wc-live-DA3HbK_D.js";import{n as o}from"./setup-standalone-prelude-DM59hg5k.js";import{c as s,d as c,f as l,n as u,r as d}from"./tray-runtime-config-9kTxza5l.js";import{n as f,o as ee,t as p}from"./tray-follower-status-5SqDRLX8.js";import{n as te}from"./theme-engine-jfuTMXZM.js";import{i as m,r as h}from"./dip-BubHLPf_.js";import{wireWcAttach as g}from"./wc-attach-CYMk5mBA.js";import{i as _}from"./wc-shell-CaWIMRFL.js";import{t as v}from"./wc-scoop-color-CByZNEJo.js";import{n as ne,t as re}from"./wc-floatbar-online-DD7hSYol.js";import{WcSprinkleZone as y}from"./wc-sprinkles-C-q1vy-w.js";var b=t(`follower-switch-out`);function x(e,t){t.stopFollower();try{t.storage.removeItem(u),e.workerBaseUrl===null?t.storage.removeItem(d):t.storage.setItem(d,e.workerBaseUrl)}catch(e){b.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){b.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var S=new Set([`oauth-attempt`,`connect-attempt`,`device-code-decision`]);function C(e){return S.has(e)}var w=`slicc-signin-redirect-style`,T=`wc-signin-redirect`,E=`
3
- .${T}{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
- .${T}__body{flex:1;min-width:0;}
7
- .${T}__title{font-weight:600;margin-bottom:2px;}
8
- .${T}__sub{color:var(--txt-2);}
9
- .${T}__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
- .${T}__open:hover{background:var(--ghost);}
12
- .${T}__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
- .${T}__x:hover{color:var(--ink);}
15
- `;function D(e){if(e.getElementById(w))return;let t=e.createElement(`style`);t.id=w,t.textContent=E,e.head.appendChild(t)}function O(e,t){D(e);let n=e.createElement(`div`);n.className=T,n.setAttribute(`role`,`status`);let r=e.createElement(`div`);r.className=`${T}__body`;let i=e.createElement(`div`);i.className=`${T}__title`,i.textContent=t.title;let a=e.createElement(`div`);a.className=`${T}__sub`,a.textContent=t.sub,r.append(i,a);let o=e.createElement(`button`);if(o.type=`button`,o.className=`${T}__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=`${T}__x`,t.setAttribute(`aria-label`,`Dismiss`),t.textContent=`×`,t.addEventListener(`click`,()=>n.remove()),n.append(t)}return n}function ie(e,t){let n=e.ownerDocument;t.onOpenTab();let r=e.querySelector(`.${T}`);if(r)return r.scrollIntoView?.({block:`nearest`}),r;let i=O(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 ae(e,t){return O(e,{title:`Set up SLICC in the main tab`,sub:`SLICC needs a model connected before it can help. Open the main SLICC tab to finish setup and sign in, then come back to the side panel.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!1})}var k=t(`wc-follower`),A=`/shared/sprinkles/welcome/`,j={sendMessage:()=>{},onEvent:()=>()=>{},stop:()=>{}};function M(e){return e===void 0||e===`active`?{kind:`active`}:e.trim()===``?null:{kind:`frozen`,sessionId:e}}function N(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Could not start follower`;let i=document.createElement(`p`);i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=t,n.append(r,i),e.appendChild(n)}function P(e,t,n,r,i){let a=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};i.files?(e.style.display=`none`,e.parentElement?.append(a(`Files live on the leader. A follower mirrors the leader's chat, sprinkles, and browser tabs - not its filesystem.`))):e.closest(`slicc-surface`)?.remove(),i.terminal?t.append(a(`The shell runs on the leader. A follower has no local terminal - drive the session through chat.`)):t.closest(`slicc-surface`)?.remove(),i.memory?n.append(a(`Memory lives on the leader. A follower has no local memory store.`)):n.closest(`slicc-surface`)?.remove(),i.monitor?(r.style.display=`none`,r.parentElement?.append(a(`Monitor reads the leader's kernel state. A follower has no local kernel.`))):r.closest(`slicc-surface`)?.remove()}var F={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,newSprinkle:!0,monitor:!0,showTimestamps:!0};function I(e){let t=[];for(let[n,r]of[[`terminal`,`term`],[`files`,`files`],[`memory`,`memory`],[`browser`,`browser`],[`monitor`,`monitor`],[`newSprinkle`,`new`]])e[n]||t.push(`slicc-dock-item[data-t="${r}"]`);if(e.modelPicker||t.push(`slicc-composer-meta`),e.history||t.push(`slicc-freezer`),e.nav||t.push(`slicc-nav`),!e.terminal&&!e.files&&!e.memory&&!e.browser&&!e.monitor&&t.push(`slicc-dock .div`,`slicc-dock .grow`),t.length||!e.history){let n=document.createElement(`style`),r=t.length?`${t.join(`,
16
- `)}{display:none!important;}`:``;e.history||(r+=`
17
- .wcui-appcol{padding-left:0!important;}`),n.textContent=r,document.head.append(n)}}function L(e,t){return e&&!t}async function R(t,l,u){let d=u===`cherry`,b=d&&new URLSearchParams(window.location.search).get(`ui-only`)===`1`,S=window.location.ancestorOrigins?.[0],w=d&&(S?.startsWith(`chrome-extension://`)??!1),T;try{T=await o({runtimeMode:u,envBaseUrl:null,window,log:l})}catch(e){let n=e instanceof Error?e.message:String(e);k.error(`follower prelude failed`,{runtimeMode:u,error:n}),N(t,n);return}let E=d?T.cherryJoinUrl:s(window.location.href,window.localStorage);if(!E){k.error(`follower mount with no join URL - falling back to live boot`);let{mountWcUiLive:n}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-DA3HbK_D.js`).then(e=>e.i);return{mountWcUiLive:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]));return n(t,l,`standalone`)}let D=a(t,d?`cherry · follower`:`follower`);d&&T.cherryTransport?.theme&&te(T.cherryTransport.theme);let O=d&&T.cherryTransport?.effortLevel;O?localStorage.setItem(`slicc_locked_effort_level`,O):localStorage.removeItem(`slicc_locked_effort_level`);let R=d&&T.cherryTransport?{...F,...T.cherryTransport.features}:F;P(D.refs.fileTree,D.refs.termSurface,D.refs.memoryHost,D.refs.monitor,R),I(R),e(async()=>{let{applyTimestampVisibility:e,initTimestampPreference:t}=await import(`./timestamp-preference-DgrTvVNx.js`).then(e=>e.a);return{applyTimestampVisibility:e,initTimestampPreference:t}},__vite__mapDeps([57,1])).then(({applyTimestampVisibility:e,initTimestampPreference:t})=>{R.showTimestamps?t():e(!1)}),e(async()=>{let{loadDipStyles:e,loadSprinkleStyles:t}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadDipStyles:e,loadSprinkleStyles:t}},__vite__mapDeps([64,3])).then(({loadDipStyles:e,loadSprinkleStyles:t})=>Promise.all([e(),t()])).catch(()=>void 0);let z=new Map,B=()=>T.cherryTransport?.emitSliccEventToHost(`slicc.open-leader-tab`),V=()=>{w&&ie(D.refs.thread,{onOpenTab:B})},H=e=>{let t=e.querySelectorAll(`img[src^="${A}"]`);return t.length===0?!1:(t.forEach((t,n)=>{n===0?t.replaceWith(ae(e.ownerDocument,{onOpenTab:B})):t.remove()}),!0)},U=(e,t)=>{X.currentSync?.sendSprinkleLick(`inline`,{action:e,data:t}),C(e)&&V()},W=new i({thread:D.refs.thread,agent:j,onQueuedChange:e=>{D.refs.queuedStack.setMessages(e)},onMessageRendered:(e,t)=>{let n=t[0];n&&(w&&H(n),z.set(e.id,m(n,U)))},onMessageDisposed:e=>{let t=z.get(e);t&&(h(t),z.delete(e))},readOnlyToolUi:!0});if(D.setController(W),w)for(let e of[`slicc-error-open-settings`,`slicc-error-login`,`slicc-error-change-model`])D.refs.thread.addEventListener(e,()=>V());let G=`Connecting to leader…`,K=`Ask the leader, or describe a change…`,q=(e,t)=>{D.refs.inputCard.setAttribute(`placeholder`,t),e?D.refs.inputCard.removeAttribute(`disabled`):D.refs.inputCard.setAttribute(`disabled`,``)};q(!1,G),re(D.refs.floatbar),ee(e=>{try{window.localStorage.setItem(p,JSON.stringify(e))}catch{}});try{window.localStorage.setItem(p,JSON.stringify(f()))}catch{}b||D.refs.composer.setAttribute(`ptt`,``);let oe=g({inputCard:D.refs.inputCard,freezer:D.refs.freezer,composer:D.refs.composer,noCamera:b,log:k});D.refs.inputCard.addEventListener(`submit`,e=>{let t=_(e)??``,n=oe.take();(t.trim()||n.length)&&(W.sendUserMessage(t,n),D.refs.inputCard.clear?.())});let J=new y(D.refs).callbacks(),Y=null,X=ne({joinUrl:E,runtime:d?r:`slicc-standalone`,advertisesCdpTargets:L(T.hasLocalCdpSurface,b),browserAPI:T.browser,onSnapshot:e=>W.loadMessages(e),onUserMessage:(e,t,n,r)=>W.addUserMessage(e,r),onStatus:e=>W.setProcessing(e===`processing`),setChatAgent:e=>W.setAgent(e),onTranscriptExportApprovalRequest:async t=>{let{openTranscriptExportApproval:n}=await e(async()=>{let{openTranscriptExportApproval:e}=await import(`./wc-transcript-export-B3p8LhYu.js`);return{openTranscriptExportApproval:e}},__vite__mapDeps([65,3,66,12,34,1])),r=d?T.cherryTransport?.hostOrigin:void 0;return n({delegated:!0,selector:t.selector,signal:t.signal,...r?{hostOrigin:r}:{},...t.estimatedBytes==null?{}:{estimatedBytes:t.estimatedBytes}})},onConnectionChange:e=>{q(e,e?K:G),d&&T.cherryTransport?.emitSliccEventToHost(e?`slicc.follower.ready`:`slicc.follower.disconnected`)},onLeaderStalled:e=>{q(!e,e?`The leader is busy — hang on…`:K)},onGaveUp:e=>{k.error(`follower gave up reaching the leader`,{error:e}),q(!1,`Couldn't reach the leader. Reload to retry.`),d&&T.cherryTransport?.emitSliccEventToHost(`slicc.follower.disconnected`)},...d?{}:{onJoinUrlChanged:e=>{k.info(`follower joinUrl superseded, persisting replacement`,{newJoinUrl:e}),c(window.localStorage,e)}},addSprinkle:J.addSprinkle,removeSprinkle:J.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):k.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},onScoopsList:(e,t)=>{D.refs.switcher.scoops=e.map(e=>({key:e.jid,type:e.isCone?`cone`:`scoop`,color:v(e),label:e.isCone?`sliccy`:e.name,eyes:`open`})),D.refs.switcher.setAttribute(`active`,Y??t)},...d?{onCherrySliccEvent:(e,t)=>T.cherryTransport?.emitSliccEventToHost(e,t)}:{}});for(let e of[`save`,`skip`,`erase`])D.refs.freezer.addEventListener(`new-chat-${e}`,()=>{X.currentSync?.requestNewSession(e)});D.refs.switcher.addEventListener(`slicc-scoop-select`,e=>{let t=e.detail?.key;t&&(Y=t,D.refs.switcher.setAttribute(`active`,t),X.currentSync?.selectScoop(t))}),d&&T.cherryTransport&&(T.cherryTransport.onHostEvent=(e,t)=>X.currentSync?.sendCherryHostEvent(e,t),T.cherryTransport.onExportRequest=(e,t,r,i)=>{let a=X.currentSync;if(!a)return Promise.reject(new n(`transfer-aborted`));let o=M(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-DgusZOpY.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([67,11,13,1,3,14,12,15,16,68,69,70]));Z=t(T.realCdpTransport,()=>X.currentSync)}let Q=!1,$=()=>{D.refs.avatarMenu.items=[{kind:`separator`},{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}]};$(),D.refs.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n===`tray-stop`){window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}));return}if(n===`export-transcript`&&!Q){Q=!0,$();let t=X.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-B3p8LhYu.js`);return{downloadTranscriptBlob:e}},__vite__mapDeps([65,3,66,12,34,1]));await n(t,`slicc-transcript-${new Date().toISOString().slice(0,10)}.zip`)}).catch(e=>{k.error(`follower transcript export failed`,{error:String(e)})}).finally(()=>{Q=!1,$()})}}),window.addEventListener(`slicc:tray-leave`,e=>{x({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{Z?.(),X.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),k.info(`follower mounted`,{runtimeMode:u,isCherry:d})}export{R as mountWcUiFollower};
@@ -1,8 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/provider-settings-DV3qVADA.js","assets/rolldown-runtime-aKtaBQYM.js","assets/account-store-Cd-tdnVM.js","assets/preload-helper-Czpn1I53.js","assets/compat-aVSWLlYQ.js","assets/models-Bnh9VDA1.js","assets/event-stream-qbAZIAKV.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/openrouter.models-DS1_VkCm.js","assets/context-compaction-_UkD06XB.js","assets/logger-DDBAeTLF.js","assets/src-DoFhVmQT.js","assets/proxied-fetch-CfcFb0B0.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-Baeul5rD.js","assets/secrets-bridge-client-CLRo0NLf.js","assets/port-bridge-client-DdolH4cw.js","assets/tool-ui-DfXu6quJ.js","assets/providers-DG12esho.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-CVignIdH.js","assets/transform-messages-wECJwtH0.js","assets/tray-runtime-config-9kTxza5l.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-5SqDRLX8.js","assets/clipboard-DuHpK59o.js","assets/telemetry-Dxrv_mDE.js","assets/tray-join-url-BIvzbiFR.js","assets/quick-llm-BIdwKjMA.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js","assets/new-session-fsGH73gc.js","assets/session-freezer-5kKWFNcz.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/dictation-priming-DGpw1lUV.js","assets/session-store-DQztDoVa.js","assets/export-provider-B6K_eHX_.js","assets/remote-vfs-client-Z2qM01yP.js","assets/writable-vfs-client-Cb6FWsgc.js","assets/wc-onboarding-Bx26DTML.js","assets/welcome-detection-CQY88hjL.js","assets/dip-BubHLPf_.js","assets/wc-permissions-registry-Blyunq37.js","assets/hid-device-registry-DboUgvzI.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-BQbhk96u.js","assets/usb-device-registry-BOGfZXgp.js","assets/sprinkle-renderer-oLgy--3J.js","assets/theme-C8b_iQ_9.js","assets/theme-engine-jfuTMXZM.js","assets/sprinkle-bridge-DziYRsuS.js","assets/shared-BYVJAPbn.js","assets/mime-types-ugOWOUZ9.js","assets/legacy-styles-DcRu2WCJ.js","assets/soundscape-TvriK11t.js","assets/soundscape-cues-5_sT5Un6.js","assets/voice-reply-CkYr1oSF.js","assets/speak-wEvzUJ_4.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-DKadceXA.js","assets/wc-placeholder-Do_J1qRT.js","assets/wc-attach-CYMk5mBA.js","assets/remote-terminal-view-CSnIU2HK.js","assets/picker-approval-CdWaB1mR.js","assets/mount-picker-popup-Bs1o43Z5.js","assets/picker-popup-BvzmBsGL.js","assets/browser-COVn7LPD.js","assets/terminal-session-client-BylrXUky.js","assets/secret-env-Cn-GSA1R.js","assets/wc-permissions-BN3Q_XHM.js","assets/wc-permissions-providers-DMTDytlu.js","assets/timestamp-preference-DgrTvVNx.js","assets/db-ysOO0kLr.js","assets/mount-table-store-CfQUN_2R.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-C-q1vy-w.js","assets/wc-tray-DllMR8uZ.js","assets/tray-sync-protocol-DdoErB3E.js","assets/handoff-link-Dmaaww5x.js","assets/remote-cdp-transport-BWNdvwP2.js","assets/tray-leader-BDMuV-1a.js","assets/synthetic-cdp-transport-DLIt5SkY.js","assets/leader-session-events-m7I5BMZy.js","assets/wc-scoop-color-CByZNEJo.js","assets/wc-floatbar-online-DD7hSYol.js","assets/export-spool-DCxGPg43.js","assets/sha256-DmK25X5D.js","assets/wc-transcript-export-B3p8LhYu.js","assets/wc-nav-Dlamz3gp.js","assets/composer-speech-FeteaFpi.js","assets/speech-C5U8h4In.js","assets/whisper-session-W-6_Qa-h.js","assets/wc-float-label-yV3hzRXJ.js","assets/setup-sudo-DGndYAJc.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{C as t,F as n,I as r,S as i,d as a}from"./account-store-Cd-tdnVM.js";import{t as o}from"./preload-helper-Czpn1I53.js";import{t as s}from"./logger-DDBAeTLF.js";import{n as c,t as l}from"./base64-DpPqYZJF.js";import{a as u,n as d,r as f,t as p}from"./src-DoFhVmQT.js";import{o as m,t as h}from"./proxied-fetch-CfcFb0B0.js";import{t as g}from"./secret-topology-Baeul5rD.js";import{t as _}from"./secrets-bridge-client-CLRo0NLf.js";import{t as v}from"./tool-ui-DfXu6quJ.js";import{a as y,i as ee,n as b,r as x}from"./setup-standalone-prelude-DM59hg5k.js";import{s as S}from"./tray-runtime-config-9kTxza5l.js";import{a as C}from"./tray-follower-status-5SqDRLX8.js";import{c as te,l as ne,n as re,r as ie,s as ae}from"./telemetry-Dxrv_mDE.js";import{t as oe}from"./sha256-DmK25X5D.js";import{r as se}from"./tray-leader-BDMuV-1a.js";import{n as ce}from"./shared-BYVJAPbn.js";import{a as le,n as ue,t as de}from"./dictation-priming-DGpw1lUV.js";import{n as fe}from"./export-provider-B6K_eHX_.js";import{a as pe,i as me,r as he}from"./dip-BubHLPf_.js";import{i as ge,l as _e,o as w,s as ve,t as T}from"./session-freezer-5kKWFNcz.js";import{t as ye}from"./session-store-DQztDoVa.js";import{c as be,d as xe,i as Se,l as Ce,n as we,o as Te,r as Ee,s as De,t as Oe,u as ke}from"./wc-shell-CaWIMRFL.js";import{n as Ae,t as je}from"./leader-session-events-m7I5BMZy.js";import{a as Me,i as Ne}from"./src-6TqoULh8.js";import{t as E}from"./wc-scoop-color-CByZNEJo.js";var Pe=`agent-sessions`,Fe=1,D=`sessions`;function Ie(){return new Promise((e,t)=>{let n=indexedDB.open(Pe,Fe);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(D)||e.createObjectStore(D,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Le=class{dbPromise=null;getDB(){return this.dbPromise||=Ie().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(D,`readwrite`).objectStore(D).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(D,`readonly`).objectStore(D).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(D,`readwrite`).objectStore(D).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async loadAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(D,`readonly`).objectStore(D).getAll();r.onsuccess=()=>t(r.result??[]),r.onerror=()=>n(r.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(D,`readonly`).objectStore(D).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(D,`readwrite`).objectStore(D).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}},Re=`__slicc_binary__`,ze=`b64`;function Be(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[Re]===ze&&typeof t.data==`string`}function O(e){if(e instanceof Uint8Array)return{[Re]:ze,data:c(e)};if(Array.isArray(e))return e.map(O);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=O(r);return t}return e}function k(e){if(Be(e))return l(e.data);if(Array.isArray(e))return e.map(k);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=k(r);return t}return e}var Ve=s(`panel-transport`);function He(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Ue(){return{onMessage:e=>{let t=(t,n,r)=>(He(t)&&e(k(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=O(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{Ve.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var A=s(`offscreen-client`),We=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=new Map;pendingChatMessagesRequests=new Map;pendingStatsRequests=new Map;transport;_selectedScoopJid=null;get selectedScoopJid(){return this._selectedScoopJid}scoopSelectedListeners=new Set;onScoopSelected(e){return this.scoopSelectedListeners.add(e),()=>{this.scoopSelectedListeners.delete(e)}}setSelectedScoopJid(e){if(this._selectedScoopJid!==e&&(this._selectedScoopJid=e,e!==null))for(let t of this.scoopSelectedListeners)try{t(e)}catch(e){A.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??Ue(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){this.send({type:`delete-queued-message`,scoopJid:e,messageId:t})}updateModel(){this.send({type:`refresh-model`})}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t,n){this.send({type:`set-thinking-level`,scoopJid:e,level:t,effortOverride:n})}async clearAllMessages(){let e=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingClearAcks.set(e,t)});this.send({type:`clear-chat`,requestId:e}),await Promise.race([t,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(e)}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}async getScoopTranscript(e){let t=`tr-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingTranscriptRequests.set(t,e)});this.send({type:`request-scoop-transcript`,requestId:t,scoopJid:e});let r=await Promise.race([n,new Promise(e=>setTimeout(()=>e(``),5e3))]);return this.pendingTranscriptRequests.delete(t),r}async getMessagesForScoop(e){let t=`cm-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingChatMessagesRequests.set(t,e)});this.send({type:`request-scoop-chat-messages`,requestId:t,scoopJid:e});let r=!1,i=await Promise.race([n,new Promise(e=>setTimeout(()=>{r=!0,e([])},5e3))]);return this.pendingChatMessagesRequests.delete(t),r&&A.warn(`getMessagesForScoop timed out`,{scoopJid:e}),i}async getSessionStats(){let e=`st-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingStatsRequests.set(e,t)});this.send({type:`request-session-stats`,requestId:e});let n=await Promise.race([t,new Promise(e=>setTimeout(()=>e(null),5e3))]);return this.pendingStatsRequests.delete(e),n}requestState(){this.send({type:`request-state`});let e=0;this.stateRetryTimer=setInterval(()=>{if(e++,this.ready||e>20){this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null);return}A.debug(`Retrying request-state`,{attempt:e}),this.send({type:`request-state`})},500)}isReady(){return this.ready}sprinkleOpHandler=null;forwardLickHandler=null;sendSprinkleLick(e,t,n,r){this.send({type:`sprinkle-lick`,sprinkleName:e,body:t,targetScoop:n,originLabel:r})}sendToolUiAction(e,t,n){this.send({type:`tool-ui-action`,requestId:e,action:t,data:n})}sendWebhookEvent(e,t,n){this.send({type:`lick-webhook-event`,webhookId:e,headers:t,body:n})}sendSetFollowerForwarding(e){this.send({type:`set-follower-forwarding`,enabled:e})}sendForwardedLick(e){this.send({type:`inject-forwarded-lick`,event:e})}setForwardLickHandler(e){this.forwardLickHandler=e}sendCherryHostEvent(e,t,n){this.send({type:`lick-cherry-host-event`,cherryRuntimeId:e,name:t,detail:n})}sendPreviewLick(e){this.send({type:`lick-preview`,event:e})}setSprinkleOpHandler(e){this.sprinkleOpHandler=e}sendRaw(e){this.send(e)}setupMessageListener(){this.transport.onMessage(e=>{if(e.source!==`offscreen`)return;let t=e.payload;t?.type===`sprinkle-op`&&this.sprinkleOpHandler?this.sprinkleOpHandler(t):this.handleOffscreenMessage(e.payload)})}handleOffscreenMessage(e){switch(e.type){case`offscreen-ready`:this.ready?(A.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):A.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`compaction-state`:this.callbacks.onCompactionStateChange?.(e.scoopJid,e.state);break;case`clear-chat-ack`:{let t=this.pendingClearAcks.get(e.requestId);t&&(this.pendingClearAcks.delete(e.requestId),t());break}case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`message-updated`:this.handleMessageUpdated(e);break;case`scoop-messages-replaced`:{let t=e;this.resyncStreamPointer(t.scoopJid,t.messages),this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`scoop-transcript`:{let t=e,n=this.pendingTranscriptRequests.get(t.requestId);n&&(this.pendingTranscriptRequests.delete(t.requestId),n(t.transcript));break}case`scoop-chat-messages`:{let t=e,n=this.pendingChatMessagesRequests.get(t.requestId);n&&(this.pendingChatMessagesRequests.delete(t.requestId),n(t.messages));break}case`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,fills:t.fills,models:t.models??[],scoops:t.scoops??[]}));break}case`tray-runtime-status`:{let t=e;Ge(t.leader,t.follower);break}case`forward-lick`:this.forwardLickHandler?.(e.event);break;case`terminal-status`:case`terminal-output`:case`terminal-media-preview`:case`terminal-exit`:case`terminal-cleared`:for(let t of this.terminalEventListeners)try{t(e)}catch(e){A.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}resyncStreamPointer(e,t){let n;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.role===`assistant`&&r.isStreaming){n=r.id;break}}n===void 0?this.currentMessageId.delete(e):this.currentMessageId.set(e,n)}handleAgentEvent(e){switch(e.eventType){case`text_delta`:case`tool_start`:case`tool_ui`:case`turn_end`:this.callbacks.onScoopActivity?.(e.scoopJid);break}if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${j()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${j()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${j()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${j()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){A.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&Ge(e.trayRuntimeStatus.leader,e.trayRuntimeStatus.follower);let t=!this.ready;t&&(this.ready=!0,this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null)),this.callbacks.onScoopListUpdate(e.scoops),t&&this.callbacks.onReady?.()}handleError(e){e.scoopJid===this.selectedScoopJid&&this.emitToUI({type:`error`,error:e.error})}handleIncomingMessage(e){this.callbacks.onIncomingMessage(e.scoopJid,e.message)}handleMessageUpdated(e){this.callbacks.onMessageUpdate?.(e.scoopJid,{messageId:e.messageId,lickId:e.lickId,lickState:e.lickState})}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){A.error(`Listener error`,{error:e instanceof Error?e.message:String(e)})}}send(e){if(this.locked){this.emitToUI({type:`error`,error:`This window is detached. Close it and use the detached tab.`});return}this.transport.send(e)}};function j(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Ge(e,t){se({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),C({state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime})}function M(e){return!e.includes(`\0`)}function Ke(e){if(typeof window>`u`||window.localStorage===void 0)return()=>void 0;let t=window.localStorage,n=typeof Storage<`u`&&t instanceof Storage,r=n?Storage.prototype.setItem:t.setItem.bind(t),i=n?Storage.prototype.removeItem:t.removeItem.bind(t),a=n?Storage.prototype.clear:t.clear.bind(t);if(n){let n=Storage.prototype;n.setItem=function(n,i){if(r.call(this,n,i),this===t){if(!M(n)){console.warn(`[page-storage-sync] dropping localStorage write with NUL in key`,n);return}e.send({type:`local-storage-set`,key:n,value:i})}},n.removeItem=function(n){if(i.call(this,n),this===t){if(!M(n)){console.warn(`[page-storage-sync] dropping localStorage remove with NUL in key`,n);return}e.send({type:`local-storage-remove`,key:n})}},n.clear=function(){a.call(this),this===t&&e.send({type:`local-storage-clear`})}}else{let n=(e,n)=>{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0,enumerable:!1})};n(`setItem`,(t,n)=>{if(r(t,n),!M(t)){console.warn(`[page-storage-sync] dropping localStorage write with NUL in key`,t);return}e.send({type:`local-storage-set`,key:t,value:n})}),n(`removeItem`,t=>{if(i(t),!M(t)){console.warn(`[page-storage-sync] dropping localStorage remove with NUL in key`,t);return}e.send({type:`local-storage-remove`,key:t})}),n(`clear`,()=>{a(),e.send({type:`local-storage-clear`})})}let o=n=>{if(n.storageArea===t){if(n.key===null){e.send({type:`local-storage-clear`});return}if(M(n.key)){if(n.newValue===null){e.send({type:`local-storage-remove`,key:n.key});return}e.send({type:`local-storage-set`,key:n.key,value:n.newValue})}}};return window.addEventListener(`storage`,o),()=>{if(n)Storage.prototype.setItem=r,Storage.prototype.removeItem=i,Storage.prototype.clear=a;else{let e=(e,n)=>{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0,enumerable:!1})};e(`setItem`,r),e(`removeItem`,i),e(`clear`,a)}window.removeEventListener(`storage`,o)}}var qe=`sync-fs-nonce`;function Je(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:(t,n)=>{n&&n.length>0?e.postMessage(t,n):e.postMessage(t)}}}function Ye(e){let t=Je(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Xe(e,t){let n=Je(e),r=new Map,i=n.onMessage(async e=>{let i=e;if(i?.type){if(i.type===`cdp-cmd`){let r=e;try{let e=await t.send(r.method,r.params,r.sessionId);n.send({type:`cdp-response`,id:r.id,result:e})}catch(e){n.send({type:`cdp-response`,id:r.id,error:e instanceof Error?e.message:String(e)})}return}if(i.type===`cdp-subscribe`){let i=e;if(r.has(i.event))return;let a=e=>{n.send({type:`cdp-event`,method:i.event,params:e})};r.set(i.event,a),t.on(i.event,a);return}if(i.type===`cdp-unsubscribe`){let n=e,i=r.get(n.event);if(!i)return;r.delete(n.event),t.off(n.event,i);return}}});return()=>{i();for(let[e,n]of r)t.off(e,n);r.clear()}}function Ze(){let e={};if(typeof localStorage>`u`)return e;for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n===null)continue;let r=localStorage.getItem(n);r!==null&&(e[n]=r)}return e}function Qe(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new We(r,Ye(o.port1));e.onWorkerScriptError&&e.worker.addEventListener?.(`error`,()=>e.onWorkerScriptError());let l=Xe(s.port1,n),u=null,d=new Promise((e,t)=>{let n=null,r=null,a=()=>{n!==null&&(clearTimeout(n),n=null)};u=()=>{r!==null&&(o.port1.removeEventListener(`message`,r),r=null),a()},r=t=>{t.data?.type===`kernel-worker-ready`&&(u?.(),e())},o.port1.addEventListener(`message`,r),a(),n=setTimeout(()=>{u?.(),t(Error(`Kernel worker did not signal ready within ${i}ms`))},i)}),f={type:`kernel-worker-init`,kernelPort:o.port2,cdpPort:s.port2,localStorageSeed:a,instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl??null,bridgeToken:e.bridgeToken??null,syncFsBridgeEnabled:e.syncFsBridgeEnabled??!1,syncFsChannelNonce:e.syncFsChannelNonce??null,localLickWsUrl:e.localLickWsUrl??null,extensionDelegateId:e.extensionDelegateId??null};t.postMessage(f,[o.port2,s.port2]);let p=!1;return{client:c,ready:d,dispose(){if(!p){p=!0,u?.(),l();try{t.postMessage({type:`kernel-worker-shutdown`})}catch{}t.terminate(),o.port1.close(),s.port1.close()}}}}function $e(e){return Qe({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-BPvDXoE4.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Ze(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,syncFsBridgeEnabled:e.syncFsBridgeEnabled,syncFsChannelNonce:e.syncFsChannelNonce,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId,onWorkerScriptError:e.onWorkerScriptError})}var et=1*1024*1024,tt=`r`;function nt(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function N(e,t,n){if(typeof e==`string`){n.push({pointer:t,value:e});return}if(Array.isArray(e)){for(let r=0;r<e.length;r++)N(e[r],`${t}/${r}`,n);return}if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))N(i,`${t}/${nt(r)}`,n)}function rt(e,t,n){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=P(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}function it(e,t,n){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=P(o,`${t}/${nt(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}function P(e,t,n){return typeof e==`string`?n.get(t)??e:Array.isArray(e)?rt(e,t,n):typeof e==`object`&&e?it(e,t,n):e}function at(e){let t=new Map;for(let n of e.matchAll(/⟦REDACTED:([^:⟧]+):([^⟧]+)⟧/g)){let e=n[0],r=t.get(e);r?r.count++:t.set(e,{category:n[1],id:n[2],count:1})}return t}async function ot(e,t,n){let r=[],i=0;for(;i<e.length;){if(n?.aborted)throw new f(`redaction-unavailable`);let a=0,o=i;for(;o<e.length;){let t=e[o].length;if(o>i&&a+t>et)break;a+=t,o++}let s=e.slice(i,o),c;try{c=await t.redact(s,n)}catch{throw new f(`redaction-unavailable`)}if(c.length!==s.length)throw new f(`redaction-unavailable`);r.push(...c),i=o}return r}function st(e,t,n,r){let i=[],a=at(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=at(t);for(let[e,{category:t,id:r,count:s}]of o)s>(a.get(e)?.count??0)&&i.push({id:r,category:t,detector:`known-secret`,target:n});let{text:s,matches:c,nextId:l}=p(t,tt,r);for(let{id:e,category:t}of c)i.push({id:e,category:t,detector:`credential-pattern`,target:n});return{finalText:s,redactions:i,nextId:l}}function ct(e,t,n){for(let{redactions:r}of e)for(let e of r)t.push(e),n[e.category]=(n[e.category]??0)+1}async function lt(e,t,n,r){if(r?.aborted)throw new f(`redaction-unavailable`);let{privacy:i,...a}=e,o=[];N(a,``,o);let s=[...t.entries()],c=await ot([...o.map(e=>e.value),...s.map(([,e])=>e)],n,r),l=[],u={},d=1,p=new Map,m=[];for(let e=0;e<o.length;e++){let t=o[e],n=st(t.value,c[e],{kind:`json`,pointer:t.pointer},d);d=n.nextId,n.finalText!==t.value&&p.set(t.pointer,n.finalText),m.push(n)}ct(m,l,u);let h=new Map,g=o.length,_=[];for(let e=0;e<s.length;e++){let[t,n]=s[e],r=st(n,c[g+e],{kind:`attachment`,attachmentId:t},d);d=r.nextId,h.set(t,r.finalText),_.push(r)}ct(_,l,u);let v=P(e,``,p);return{document:{...v,privacy:{...v.privacy,redactionCounts:u,redactions:l}},textAttachments:h}}function ut(e,t){let n=e.startsWith(`text/`)||e===`application/json`,r=/\.(?:txt|md|json|csv|xml|ya?ml|js|mjs|cjs|ts|tsx|css|html)$/i.test(t);return n||r?`text-redacted`:`binary-unchanged`}async function dt(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}var ft={"image/png":`.png`,"image/jpeg":`.jpg`,"image/gif":`.gif`,"image/webp":`.webp`,"image/svg+xml":`.svg`,"image/bmp":`.bmp`,"application/pdf":`.pdf`,"application/zip":`.zip`,"application/gzip":`.gz`,"application/json":`.json`,"text/plain":`.txt`,"text/markdown":`.md`,"text/csv":`.csv`,"text/html":`.html`,"text/xml":`.xml`,"application/xml":`.xml`};function pt(e,t){return ft[e]??(t===`text-redacted`?`.txt`:`.bin`)}function mt(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${pt(t,n)}`}function F(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 ht(e){let t=[];for(let n of e.conversations){let e=0;for(let r of n.messages){let i=r.role;if(i!==`user`&&i!==`assistant`&&i!==`tool-result`)continue;let a=0;for(let o of r.content)o.type===`attachment-ref`&&(t.push({attachmentId:o.attachmentId,conversationId:n.id,messageId:r.id,role:i,userOrdinal:e,imgIndex:a}),a++);i===`user`&&e++}}return t}async function gt(e,t,n,r,i){let a=ut(e.mimeType,e.name),o={attachmentId:t,originalName:e.name,mimeType:e.mimeType,handling:a,present:!0,sourceConversationId:n,sourceMessageId:r};if(a===`text-redacted`){let t;if(e.text!==void 0)t=e.text;else if(e.data!==void 0)t=new TextDecoder().decode(F(e.data));else if(e.path!==void 0&&i!==void 0)try{t=new TextDecoder().decode(await i(e.path))}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return t===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawText:t}}let s;if(e.data!==void 0)s=F(e.data);else if(e.path!==void 0&&i!==void 0)try{s=await i(e.path)}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return s===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawBytes:s}}function _t(e,t,n,r){let i=[],a=new Set,o=new Set;for(let s of e){if(s.role!==`user`){let e=n.get(s.attachmentId);e===void 0?i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId})):i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`image-${s.imgIndex}`,mimeType:e.mimeType,handling:`binary-unchanged`,rawBytes:F(e.data),present:!0,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let e=(t.get(s.conversationId)??[]).filter(e=>e.role===`user`)[s.userOrdinal];if(e===void 0){a.add(s.conversationId),i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-association-unavailable`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let c=(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:e})=>e.kind===`image`||e.kind===`file`&&e.data!==void 0)[s.imgIndex];if(c===void 0){i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}o.add(`${s.conversationId}:${e.id}:${c.i}`),i.push(gt(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function vt(e,t,n){return(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:r,i})=>(r.kind===`text`||r.kind===`file`&&(r.data!==void 0||r.path!==void 0))&&!n.has(`${t}:${e.id}:${i}`))}function yt(e,t,n,r,i,a,o){let s=vt(t,n,i),c=[];for(let t=0;t<s.length;t++){let{a:i}=s[t],l=`${e.id}-file-${t}`;r.has(l)||(a.push(gt(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function bt(e,t,n,r,i){let a=new Map,o=[];for(let s of e.conversations){let e=(t.get(s.id)??[]).filter(e=>e.role===`user`),c=0;for(let t of s.messages){if(t.role!==`user`)continue;let l=e[c];if(c++,l===void 0)continue;let u=yt(t,l,s.id,n,r,o,i);u.length>0&&(a.has(s.id)||a.set(s.id,new Map),a.get(s.id).set(t.id,[...t.content,...u]))}}return{updates:a,additionalPendingPromises:o}}function xt(e,t){let n=new Map,r=0,i=new Map;for(let t of e)t.handling===`text-redacted`&&t.rawText!==void 0&&n.set(t.attachmentId,t.rawText),t.present&&i.set(t.attachmentId,mt(r++,t.mimeType,t.handling));for(let n of e)!n.present&&n.missingReason!==void 0&&t.add(n.missingReason);return{rawAttachments:e.map(e=>e.present?{id:e.attachmentId,path:i.get(e.attachmentId),originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!0}:{id:e.attachmentId,path:``,originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!1,missingReason:e.missingReason??`attachment-file-missing`}),textMap:n}}async function St(e,t,n,r,i){let{rawAttachments:a,textMap:o}=xt(e,n),s,c;try{let e=await lt({...t,attachments:a},o,r,i);s=e.document,c=e.textAttachments}catch(e){throw e instanceof f?e:new f(`attachment-unreadable`)}let l=new Map;for(let t of e){if(l.has(t.attachmentId))throw new f(`schema-invalid`);l.set(t.attachmentId,t)}let u=new Map,d=await Promise.all(s.attachments.map(async e=>{if(!e.present||!e.path)return e;let t=l.get(e.id);if(t===void 0)throw new f(`schema-invalid`);let n=t.handling===`text-redacted`?new TextEncoder().encode(c.get(t.attachmentId)??t.rawText??``):t.rawBytes,r=await dt(n);return u.set(e.path,n),{...e,byteLength:n.length,sha256:r}}));return{redactedDocument:{...s,attachments:d},bundleFiles:u}}async function I(e){let{document:t,chatMessagesByConversation:n,knownSecrets:r,signal:i}=e,a=e.canonicalImages??new Map,o=e.vfsReader,s=new Set,{pendingPromises:c,mismatchedConvIds:l,processedUiPositions:u}=_t(ht(t),n,a,o);l.size>0&&s.add(`attachment-association-unavailable`);for(let e of t.conversations)e.messages.filter(e=>e.role===`user`).length>(n.get(e.id)??[]).filter(e=>e.role===`user`).length&&s.add(`attachment-association-unavailable`);let d=await Promise.all(c),{updates:f,additionalPendingPromises:p}=bt(t,n,new Set(d.map(e=>e.attachmentId)),u,o),m=await Promise.all(p),h=[...d,...m],g=t;f.size>0&&(g={...t,conversations:t.conversations.map(e=>{let t=f.get(e.id);return t?{...e,messages:e.messages.map(e=>{let n=t.get(e.id);return n?{...e,content:n}:e})}:e})});let{redactedDocument:_,bundleFiles:v}=await St(h,g,s,r,i),y=[..._.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{..._,session:{..._.session,completeness:{status:y.length>0?`partial`:_.session.completeness.status,missing:y}}},bundleFiles:v}}var Ct=50;function wt(e){return e.isCone?`session-cone`:`session-${e.folder}`}function Tt(e,t){return e.map(e=>{let n=t.isProcessing(e.jid)?`1`:`0`,r=t.getAgentMessages(e.jid);if(r===null)return`${e.jid}:${n}:null`;let i=r.length,a=r[i-1],o=a?.role??``,s=a&&`timestamp`in a?a.timestamp:-1,c=a&&`toolCallId`in a?a.toolCallId:``;return`${e.jid}:${n}:${i}:${o}:${s}:${c}`}).join(`,`)}function Et(e,t,n,r){let i=new Map;for(let e of t)i.set(e.id,e);let a=new Map;for(let e of n)a.set(e.id,e);let o=[],s=new Map;for(let t of e){let e=r.getAgentMessages(t.jid)??i.get(t.jid)?.messages??[],n={id:t.jid,kind:t.isCone?`cone`:`scoop`,name:t.name,...t.folder&&!t.isCone?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=wt(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function Dt(e,t){for(;;){let n=e.listScoops();for(;n.some(t=>e.isProcessing(t.jid));)if(t?.aborted||(await e.wait(Ct,t),t?.aborted))throw new f(`transfer-aborted`);let r=Tt(n,e),[i,a]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(t?.aborted)throw new f(`transfer-aborted`);let o=e.listScoops();if(r===Tt(o,e))return Et(o,i,a,e)}}function L(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function R(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function Ot(e,t){if(typeof e==`string`)return e?[{type:`text`,text:e}]:[];let n=[],r=0;for(let i of e)i.type===`text`?i.text&&n.push({type:`text`,text:i.text}):i.type===`image`&&n.push(R(t,r++));return n}function kt(e,t){let n=[],r=new Map,i=0,a=0;for(let o of e)if(o.type===`thinking`)i+=1;else if(o.type===`text`)o.text&&n.push({type:`text`,text:o.text});else if(o.type===`toolCall`)n.push({type:`tool-call`,id:o.id??``,name:o.name??``,input:o.arguments??{}});else if(o.type===`image`){let e=R(t,a++);n.push(e),o.data&&o.mimeType&&r.set(e.attachmentId,{data:o.data,mimeType:o.mimeType})}return{blocks:n,excluded:i,images:r}}function At(e,t){let n=[],r=new Map,i=0;for(let a of e)if(a.type===`text`)a.text&&n.push({type:`text`,text:a.text});else if(a.type===`image`){let e=R(t,i++);n.push(e),a.data&&a.mimeType&&r.set(e.attachmentId,{data:a.data,mimeType:a.mimeType})}return{blocks:n,images:r}}function jt(e,t,n){let r=L(t,n),i=Ot(e.content,r);return{message:{id:r,sequence:n,role:`user`,timestamp:new Date(e.timestamp).toISOString(),content:i},excludedReasoningBlocks:0,images:new Map}}function Mt(e,t,n){let r=L(t,n),{blocks:i,excluded:a,images:o}=kt(e.content,r);return{message:{id:r,sequence:n,role:`assistant`,timestamp:new Date(e.timestamp).toISOString(),content:i,model:{provider:e.provider,id:e.model,api:e.api},usage:e.usage,stopReason:e.stopReason,...e.errorMessage?{error:e.errorMessage}:{}},excludedReasoningBlocks:a,images:o}}function Nt(e,t,n){let r=L(t,n),{blocks:i,images:a}=At(e.content,r);return{message:{id:r,sequence:n,role:`tool-result`,timestamp:new Date(e.timestamp).toISOString(),content:i,toolCallId:e.toolCallId,isError:e.isError},excludedReasoningBlocks:0,images:a}}function Pt(e,t,n){return e.role===`user`?jt(e,t,n):e.role===`assistant`?Mt(e,t,n):e.role===`toolResult`?Nt(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function Ft(e){let t=[];for(let n of e){if(!n.parentConversationId)continue;let e={sourceConversationId:n.parentConversationId,targetConversationId:n.id};n.originToolCallId&&(e.toolCallId=n.originToolCallId),t.push(e)}return t}function It(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=Pt(r,e.id,i+1);t+=a.excludedReasoningBlocks;for(let[e,t]of a.images)n.set(e,t);return a.message?[a.message]:[]});return{id:e.id,kind:e.kind,name:e.name,...e.folder?{folder:e.folder}:{},...e.parentConversationId?{parentConversationId:e.parentConversationId}:{},...e.createdAt?{createdAt:e.createdAt}:{},...e.updatedAt?{updatedAt:e.updatedAt}:{},messages:r}}),delegations:Ft(e),excludedReasoningBlocks:t,canonicalImages:n}}var Lt=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n}return e})();function Rt(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^Lt[(t^e[n])&255];return~t>>>0}var zt=new TextEncoder;function z(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function B(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255,e[t+2]=n>>>16&255,e[t+3]=n>>>24&255}function Bt(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,z(r,4,20),z(r,6,2048),z(r,8,0),z(r,10,0),z(r,12,0),B(r,14,n),B(r,18,t),B(r,22,t),z(r,26,e.length),z(r,28,0),r.set(e,30),r}function Vt(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,z(i,4,20),z(i,6,20),z(i,8,2048),z(i,10,0),z(i,12,0),z(i,14,0),B(i,16,n),B(i,20,t),B(i,24,t),z(i,28,e.length),z(i,30,0),z(i,32,0),z(i,34,0),z(i,36,0),B(i,38,0),B(i,42,r),i.set(e,46),i}function Ht(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,z(r,4,0),z(r,6,0),z(r,8,e),z(r,10,e),B(r,12,t),B(r,16,n),z(r,20,0),r}function Ut(e){if(!e||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))return!1;for(let t of e.split(`/`))if(t===``||t===`.`||t===`..`)return!1;return!0}function Wt(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${e.session.title.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,40)||`transcript`}-${n}.zip`}async function*Gt(e,t,n,r,i){if(n?.aborted)throw i(new f(`transfer-aborted`)),new f(`transfer-aborted`);let a=()=>i(new f(`transfer-aborted`));n?.addEventListener(`abort`,a,{once:!0});let o=oe.create(),s=0,c=0,l=[],u=!1;function*d(e){o.update(e),s+=e.byteLength,c+=e.byteLength,yield e}try{let i=new TextEncoder().encode(JSON.stringify(e,null,2)),a=zt.encode(`transcript.json`),p=Rt(i),m=Bt(a,i.length,p);if(l.push({nameBytes:a,size:i.length,crc:p,localOffset:c}),n?.aborted||(yield*d(m),n?.aborted))throw new f(`transfer-aborted`);yield*d(i);for(let[e,r]of t){if(n?.aborted)throw new f(`transfer-aborted`);let t=zt.encode(e),i=Rt(r),a=Bt(t,r.length,i);if(l.push({nameBytes:t,size:r.length,crc:i,localOffset:c}),yield*d(a),n?.aborted)throw new f(`transfer-aborted`);yield*d(r)}let h=c;for(let e of l){if(n?.aborted)throw new f(`transfer-aborted`);yield*d(Vt(e.nameBytes,e.size,e.crc,e.localOffset))}if(n?.aborted)throw new f(`transfer-aborted`);yield*d(Ht(l.length,c-h,h)),u=!0,r({byteLength:s,sha256:o.hex()})}catch(e){throw u=!0,i(e),e}finally{n?.removeEventListener(`abort`,a),u||(u=!0,i(new f(`transfer-aborted`)))}}var Kt=4294967295,qt=65535;function Jt(e,t,n){for(let e of t.keys())if(!Ut(e))throw new f(`schema-invalid`);if(t.size+1>qt)throw new f(`schema-invalid`);for(let e of t.values())if(e.byteLength>Kt)throw new f(`schema-invalid`);let r,i,a=new Promise((e,t)=>{r=e,i=t});return{filename:Wt(e),chunks:Gt(e,t,n,r,i),completion:a}}function Yt(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:d},session:{id:e,title:t,state:n,completeness:{status:`complete`,missing:[]},...a},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:r.excludedReasoningBlocks,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:r.conversations,delegations:r.delegations,attachments:[]}}function Xt(e,t){let n=[],r=1;for(let i of e){if(i.role!==`user`&&i.role!==`assistant`)continue;let e=`${t}-msg-${String(r).padStart(6,`0`)}`;n.push({id:e,sequence:r++,role:i.role,timestamp:new Date(i.timestamp||0).toISOString(),content:i.content?[{type:`text`,text:i.content}]:[]})}return n}function Zt(e){if(!u(e).ok)throw new f(`schema-invalid`)}function Qt(e,t,n){let r=new Map;for(let i of e)if(!(!i.present||!i.path))if(i.handling===`text-redacted`){let e=t.get(i.id);e!==void 0&&r.set(i.path,new TextEncoder().encode(e))}else{let e=n.get(i.path);e&&r.set(i.path,e)}return r}async function $t(e,t){return Promise.all(e.map(async e=>{if(!e.present||!e.path||e.handling!==`text-redacted`)return e;let n=t.get(e.path);if(!n)return e;let r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=await crypto.subtle.digest(`SHA-256`,r),a=Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``);return{...e,byteLength:n.length,sha256:a}}))}function en(e){let t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return{};let n=t[1],r={},i=n.match(/^createdAt:\s*(\d+)\s*$/m),a=n.match(/^updatedAt:\s*(\d+)\s*$/m);return i&&(r.createdAt=new Date(Number(i[1])).toISOString()),a&&(r.updatedAt=new Date(Number(a[1])).toISOString()),r}var tn=class{deps;constructor(e){this.deps=e}async export(e,t={}){let{signal:n,onProgress:r}=t,i;return i=e.kind===`active`?await this.buildActiveSnapshot(n,r):await this.buildFrozenSnapshot(e.sessionId,n,r),Zt(i.document),r?.({phase:`packaging`}),Jt(i.document,i.bundleFiles,n)}async captureFrozen(e,t){let n=await Dt(this.deps.collection,t),r=It(n.sources),{document:i,bundleFiles:a}=await I({document:Yt(e.sessionId,e.title,`frozen`,r,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:t});Zt(i),await this.deps.snapshotStore.write(e.sessionId,{document:i,attachments:a})}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await Dt(this.deps.collection,e),r=It(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=Yt(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),I({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,t,n){let r=await this.deps.snapshotStore.read(e);return r?(n?.({phase:`redacting`}),this.reredactStoredSnapshot(r,t)):this.buildLegacyPartial(e,t,n)}async reredactStoredSnapshot(e,t){let n=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let r=e.attachments.get(t.path);r&&n.set(t.id,new TextDecoder().decode(r))}let r,i;try{let a=await lt(e.document,n,this.deps.knownSecrets,t);r=a.document,i=a.textAttachments}catch{throw new f(`redaction-unavailable`)}let a=Qt(r.attachments,i,e.attachments),o=await $t(r.attachments,a);return{document:{...r,attachments:o},bundleFiles:a}}async buildLegacyPartial(e,t,n){let r=(await ve(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!r)throw new f(`session-not-found`);let i;try{let e=await this.deps.vfs.readFile(`/sessions/${r.filename}`,{encoding:`utf-8`});i=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new f(`session-not-found`)}let{title:a,messages:o}=w(i),s=`legacy-cone`,c=Xt(o,s),l=en(i),u={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:d},session:{id:e,title:a,state:`frozen`,...r.frozenAt?{frozenAt:r.frozenAt}:{},...l,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:s,kind:`cone`,name:a,messages:c}],delegations:[],attachments:[]},p=new Map([[s,o]]);return n?.({phase:`redacting`}),I({document:u,chatMessagesByConversation:p,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:t})}async readBinaryFromVfs(e){let t=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(t instanceof Uint8Array))throw new f(`attachment-unreadable`);return t}},nn=`/sessions/data`,rn=`document.json`;async function an(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function on(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new f(`session-not-found`)}function sn(e){return`${nn}/${e}`}function cn(e){return`${nn}/.tmp-${e}`}async function V(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function H(e,t){let n;try{n=await e.readDir(t)}catch{return}for(let r of n){let n=`${t}/${r.name}`;r.type===`directory`&&await H(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function ln(e,t,n){await V(e,n);let r=await e.readDir(t);for(let i of r){let r=`${t}/${i.name}`,a=`${n}/${i.name}`;if(i.type===`directory`)await ln(e,r,a);else{let t=await e.readFile(r,{encoding:`binary`});await e.writeFile(a,t)}}}async function un(e,t,n){on(t);let r=cn(t),i=sn(t),a=new Map(n.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of n.attachments)if(!a.has(e))throw new f(`schema-invalid`);await H(e,i),await V(e,r);try{let t=[...n.document.attachments];for(let[e,r]of n.attachments){let n=await an(r),i=a.get(e);if(i!==void 0){let e=t.indexOf(i);e!==-1&&(t[e]={...i,sha256:n,byteLength:r.length})}}let o={...n.document,attachments:t},s=JSON.stringify(o,null,2);if(await e.writeFile(`${r}/${rn}`,s),n.attachments.size>0)for(let[t,i]of n.attachments){let n=`${r}/${t}`,a=t.lastIndexOf(`/`);a!==-1&&await V(e,`${r}/${t.slice(0,a)}`),await e.writeFile(n,i)}await e.flush(),await ln(e,r,i),await e.flush()}catch(t){throw await H(e,r),t}await H(e,r)}async function dn(e,t){on(t);let n=sn(t),r=`${n}/${rn}`,i;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new f(`session-not-found`)}let a;try{a=JSON.parse(i)}catch{throw new f(`schema-invalid`)}if(!u(a).ok)throw new f(`schema-invalid`);let o=new Map;for(let t of a.attachments){if(!t.present||!t.path)continue;let r=`${n}/${t.path}`,i;try{let t=await e.readFile(r,{encoding:`binary`});i=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new f(`transfer-corrupt`)}if(await an(i)!==t.sha256)throw new f(`transfer-corrupt`);o.set(t.path,i)}return{document:a,attachments:o}}function U(){throw new f(`redaction-unavailable`)}function W(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&U(),e.texts}function fn(){return{async redact(e){let t;try{t=await fetch(m(`/api/secrets/redact-export`),{method:`POST`,headers:h({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{U()}t.ok||U();let n;try{n=await t.json()}catch{U()}return W(n,e.length)}}}function pn(){return{async redact(e){let t;try{t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.redact-export`,texts:e},e=>{chrome.runtime.lastError,t(e??null)})})}catch{U()}return typeof t==`object`&&t&&`error`in t&&U(),W(t,e.length)}}}function mn(){return{async redact(e){let t;try{t=await _(`secrets.redact-export`,{texts:e})}catch{U()}return t??U(),typeof t==`object`&&`error`in t&&U(),W(t,e.length)}}}function hn(){return{async redact(e){U()}}}function gn(){let e=g();return e===`connect`?hn():e===`extension-direct`?pn():e===`extension-delegate`?mn():fn()}var _n=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`;function vn(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role===`assistant`&&!n.isStreaming&&!n.queued)return n.content}for(let t=e.length-1;t>=0;t--)if(e[t].role===`assistant`)return e[t].content;return null}function yn(e){let t=e.writeText??(e=>navigator.clipboard.writeText(e)),n=document.createElement(`div`);n.className=`wc-copy-row`,n.style.cssText=`display:flex;justify-content:flex-start;margin:-8px 0 14px;`;let r=document.createElement(`slicc-press-button`);r.setAttribute(`tooltip`,`Copy last response · hold to copy chat`),r.setAttribute(`label`,`Copy last response — hold to copy entire chat`),r.setAttribute(`disable-double-click`,``),r.style.cssText=`color:var(--txt-3);cursor:pointer;display:inline-flex;`;let i=document.createRange();r.append(i.createContextualFragment(_n));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{let n=vn(e.getMessages());await t(n??_e([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=_e([...e.getMessages()]);n&&(await t(n),a())})()}),n.append(r),n}function G(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function bn(e){try{let t=new DOMParser().parseFromString(e,`text/html`).querySelector(`.sprinkle-action-card__header`);if(t){t.querySelector(`.sprinkle-badge`)?.remove(),t.querySelector(`.sprinkle-action-card__meta`)?.remove();let e=t.textContent?.trim();if(e)return e}}catch{}return`Approval requested`}function xn(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Sn(e){return`
3
- <div class="sprinkle-action-card">
4
- <div class="sprinkle-action-card__header">${xn(bn(e))} <span class="sprinkle-badge sprinkle-badge--informative">pending</span></div>
5
- <div class="sprinkle-action-card__body">Waiting for approval on the leader&hellip;</div>
6
- </div>
7
- `}function Cn(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var wn=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g=[];#_=[];#v=new Map;#y=null;#b=null;#x=``;#S=!1;#C=!1;#w=`thinking`;#T=0;#E=null;#D=new Set;#O=new Map;constructor(e){this.#e=e.thread,this.#t=e.agent,this.#n=e.onProcessingChange,this.#r=e.onBusyPhaseChange,this.#i=e.onMessageRendered,this.#a=e.onMessageDisposed,this.#o=e.onTurnComplete,this.#s=e.resolveTelemetryContext,this.#c=e.onQueuedChange,this.#l=e.onQueuedCancel,this.#u=e.onToolUiAction,this.#d=e.readOnlyToolUi??!1,this.#f=e.agent.onEvent(e=>this.#L(e)),this.#h=e=>this.#X(e),this.#e.addEventListener(`slicc-error-retry`,this.#h)}dispose(){this.#f(),this.#e.removeEventListener(`slicc-error-retry`,this.#h);for(let e of[...this.#O.keys()])this.#Y(e)}get processing(){return this.#C}getMessages(){return this.#g.map(e=>({...e}))}setAgent(e){this.#f(),this.#t=e,this.#f=e.onEvent(e=>this.#L(e))}setOnLocalUserMessage(e){this.#p=e}setOnLocalProcessingChange(e){this.#m=e}addUserMessage(e,t){this.#$({id:G(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#_.map(Cn)}removeQueuedMessage(e){let t=this.#_.filter(t=>t.id!==e);t.length!==this.#_.length&&(this.#_=t,this.#A())}#k(){if(this.#_.length===0)return;let e=this.#_;this.#_=[];for(let t of e)this.#$(t);this.#A()}#A(){this.#c?.(this.#_.map(Cn))}addAssistantMessage(e){this.#$({id:G(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#v.keys())this.#a?.(e);for(let e of[...this.#O.keys()])this.#Y(e);if(this.#_.length>0){if(this.#l)for(let e of this.#_)try{this.#l(e.id)}catch(e){console.error(`onQueuedCancel hook threw`,e)}this.#_=[],this.#A()}this.#g=Te(e);let t=[...this.#g].reverse().find(e=>e.isStreaming);this.#y=t?.id??null,t&&(this.#b=t.id),this.#x=``,this.#S=!1,this.#v.clear();let n=[],r=``;for(let e of this.#g){let t=new Date(e.timestamp).toDateString();t!==r&&(n.push(De(e.timestamp)),r=t);let i=this.#Q(e);this.#v.set(e.id,i),n.push(...i)}let i=this.#e;typeof i.replaceContent==`function`?i.replaceContent(...n):i.replaceChildren(...n),this.#re();for(let e of this.#g)e.isStreaming||this.#i?.(e,this.#v.get(e.id)??[]);this.#I(),this.#ae(),this.#j()}#j(){if(this.#e.getAttribute(`context`)!==`cone`||this.#g.length===0||!x()||this.#C)return;let e=this.#g[this.#g.length-1];e.role!==`user`||e.source===`lick`||e.source===`delegation`||e.queued||this.#X(new Event(`slicc-error-retry`))}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#M(r):r,a={id:G(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#C?(this.#_.push(a),this.#A()):this.#$(a),this.#t.sendMessage(i,a.id,a.attachments),this.#N();try{let e=n?.dictation?le(i):i;this.#p?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#M(e){return de(e,ue())}#N(){if(this.#s)try{let e=this.#s();if(!e)return;re(e.scoopName,e.model)}catch{}}addLickMessage(e,t,n,r,i){let a=this.#g[this.#g.length-1];if(!(i||a?.lickId)&&a&&a.source===`lick`&&a.channel===n){a.lickParts=[...a.lickParts??[a.content],t],a.lickCount=a.lickParts.length,a.content+=`\n\n${t}`,this.#ee(a);return}this.#$({id:e,role:`user`,content:t,timestamp:r,source:`lick`,channel:n,lickId:i,lickState:i?`pending`:void 0,queued:this.#C?!0:void 0})}updateLickState(e,t){let n=this.#g.find(t=>t.lickId===e);n&&(n.lickState=t,this.#ee(n))}setProcessing(e){if(this.#C!==e){this.#C=e,e&&(this.#b=null),e&&(this.#T=0,this.#P(`thinking`)),e&&this.#k(),e||this.#I(),this.#n?.(e);try{this.#m?.(e)}catch(e){console.error(`onLocalProcessingChange hook threw`,e)}e||this.#F()}}#P(e){this.#w!==e&&(this.#w=e,this.#r?.(e))}#F(){let e=this.#b;if(this.#b=null,!this.#o)return;let t=e?this.#Z(e):null;this.#o(t?{...t}:null)}#I(){let e=this.#g[this.#g.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#E?.remove();return}this.#E??=yn({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#E)}#L(e){switch(e.type){case`message_start`:this.#R(e.messageId);break;case`content_delta`:this.#z(e.messageId,e.text);break;case`content_done`:this.#V(e.messageId);break;case`tool_use_start`:this.#H(e.messageId,e.toolName,e.toolInput);break;case`tool_result`:this.#U(e.messageId,e.toolName,e.result,e.isError);break;case`tool_ui`:this.#q(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#J(e.requestId);break;case`turn_end`:this.#W(e.messageId);break;case`error`:this.#G(e.error);break;case`screenshot`:case`terminal_output`:break;default:break}}#R(e){this.setProcessing(!0),this.#y=e,this.#b=e,this.#$({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#z(e,t){this.#Z(e)&&(this.#x+=t,!this.#S&&(this.#S=!0,requestAnimationFrame(()=>this.#B(e))))}#B(e){if(this.#S=!1,!this.#x)return;let t=this.#Z(e);t&&(t.content+=this.#x,this.#x=``,this.#ee(t))}#V(e){let t=this.#Z(e);t&&(this.#x&&this.#y===e&&(t.content+=this.#x),this.#x=``,this.#S=!1,t.isStreaming=!1,this.#ee(t))}#H(e,t,n){let r=this.#Z(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:G(),name:t,input:n}),this.#T+=1,this.#P(`tool`),this.#ee(r))}#U(e,t,n,r){let i=this.#Z(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#T=Math.max(0,this.#T-1),this.#T===0&&this.#P(`thinking`),this.#ee(i))}#W(e){let t=this.#Z(e);t?.isStreaming&&(t.isStreaming=!1,this.#ee(t)),this.#y=null,this.setProcessing(!1)}#G(e){this.setProcessing(!1),this.#$({id:G(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#K(e)}#K(e){try{if(ne(e)||te(e)||ae(e))return;ie(`error-card`,e)}catch{}}#q(e,t,n){this.#Y(t);let r=document.createElement(`div`);if(r.className=`msg__dip`,r.setAttribute(`data-tool-ui-request`,t),(this.#e.inner??this.#e).append(r),this.#d){let e=pe(r,Sn(n),()=>{},!1);this.#O.set(t,{instance:e,container:r});return}let i=pe(r,n,(e,n)=>{this.#u?.(t,e,n)},!1);this.#O.set(t,{instance:i,container:r}),this.#u?.(t,v,void 0)}#J(e){this.#Y(e)}#Y(e){let t=this.#O.get(e);if(t){this.#O.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#X(e){if(this.#C)return;let t=e.detail?.messageId??null,n=this.#g.length;if(t){let e=this.#g.findIndex(e=>e.id===t);e>=0&&(n=e)}let r=n>0?this.#g[n-1]:void 0;if(r&&r.source===`lick`&&!r.queued){this.#t.sendMessage(r.content,G(),r.attachments);return}let i;for(let e=n-1;e>=0;e--){let t=this.#g[e];if(t.role===`user`&&t.source!==`lick`&&t.source!==`delegation`&&!t.queued){i=t;break}}i&&this.#t.sendMessage(i.content,G(),i.attachments)}#Z(e){return this.#g.find(t=>t.id===e)}#Q(e){try{return be(e)}catch(t){console.error(`[wc-chat] message render failed — degrading to plain bubble`,t);let n=document.createElement(e.role===`assistant`?`slicc-agent-message`:`slicc-user-message`);return n.setAttribute(`text`,String(e.content??``)),[n]}}#$(e){this.#ne(),this.#g.push(e);let t=this.#Q(e);this.#v.set(e.id,t),this.#e.append(...t),this.#re(),e.isStreaming||this.#i?.(e,t),e.role===`user`?this.#ae():this.#oe()}#ee(e){this.#ne(),this.#a?.(e.id);let t=this.#v.get(e.id)??[],n=this.#Q(e),r=t[0]??null,i=r?.parentNode;if(i){for(let e of n)i.insertBefore(e,r);for(let e of t)e.remove()}else this.#e.append(...n);this.#v.set(e.id,n),this.#re(),e.isStreaming||this.#i?.(e,n),this.#oe()}#te(){return this.#e.inner??this.#e}#ne(){ke(this.#te(),this.#D)}#re(){Ce(this.#te(),{openClusterAnchors:this.#D,toolCallLookup:(e,t)=>this.#ie(e,t)})}#ie(e,t){return this.#g.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#ae(){this.#e.scrollTop=this.#e.scrollHeight}#oe(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#ae()}};function Tn(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function En(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Tn(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Dn(e){let t=new Map;for(let n of e.entries){if(n.icon||n.pendingEnrichment)continue;let r=await e.pickIcon(`"${n.title}" — an archived chat session`);r&&t.set(n.filename,r)}if(t.size===0)return;let n=await K(e.reader);if(n===null||n.length===0)return;let r=n.map(e=>{let n=!e.icon&&t.has(e.filename)?t.get(e.filename):void 0;return n?{...e,icon:n}:e});await e.writer.writeFile(T,JSON.stringify(r,null,2));for(let n of e.freezer.querySelectorAll(`slicc-freezer-card`)){let e=t.get(n.getAttribute(`slug`)??``);e&&!n.hasAttribute(`icon`)&&n.setAttribute(`icon`,e)}}async function K(e){let t=await On(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function On(e){let t;try{let n=await e.readFile(T,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?{kind:`missing`}:{kind:`fault`}}try{let e=JSON.parse(t);return Array.isArray(e)?{kind:`ok`,entries:e}:{kind:`corrupt`}}catch{return{kind:`corrupt`}}}async function kn(e){let t;try{t=(await e.readDir(`/sessions`)).filter(e=>e.type===`file`&&e.name.endsWith(`.md`)).map(e=>e.name)}catch{return[]}let n=[];for(let r of t)try{let t=await e.readFile(`/sessions/${r}`,{encoding:`utf-8`}),i=(typeof t==`string`?t:new TextDecoder().decode(t)).slice(0,2e3),a=/^title:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??r,o=/^frozenAt:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??new Date(0).toISOString(),s=Number(/^messageCount:\s*(\d+)\s*$/m.exec(i)?.[1]??0);n.push({filename:r,title:a,frozenAt:o,messageCount:s,...r.startsWith(`pending-`)?{pendingEnrichment:!0}:{}})}catch{}return n.sort((e,t)=>t.frozenAt.localeCompare(e.frozenAt)),n}function An(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(En))}async function jn(e,t){let n=await e.readFile(ge(t),{encoding:`utf-8`}),r=w(typeof n==`string`?n:new TextDecoder().decode(n));return{title:r.title||t.title,messages:r.messages}}var Mn={".md":`text/markdown`,".txt":`text/plain`,".ts":`text/typescript`,".js":`text/javascript`,".json":`application/json`,".html":`text/html`,".css":`text/css`,".svg":`image/svg+xml`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".webp":`image/webp`,".mp3":`audio/mpeg`,".wav":`audio/wav`,".ogg":`audio/ogg`,".m4a":`audio/mp4`,".mp4":`video/mp4`,".webm":`video/webm`,".mov":`video/quicktime`};function Nn(e){return Mn[e.slice(e.lastIndexOf(`.`)).toLowerCase()]||`application/octet-stream`}function Pn(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.html`||t===`.svg`}async function Fn(e,t,n){let r=await e.readFile(t,{encoding:`binary`}),i=typeof r==`string`?r:Uint8Array.from(r);await e.writeFile(n,i)}async function In(e,t){try{return await e.stat(t),!0}catch{return!1}}function Ln(e){let{fileTree:t,openFs:n,openWriter:r,insertReference:i,toPreviewUrl:a,log:o}=e;t.addEventListener(`file-preview`,async e=>{let{path:t}=e.detail;try{let e=await n(),r=Nn(t),i;if(r.startsWith(`text/`)||r===`application/json`)i=await e.readFile(t,{encoding:`utf-8`});else{let n=await e.readFile(t,{encoding:`binary`}),r=new Uint8Array(n.length);r.set(n),i=r.buffer}Ne.open({path:t,content:i,mimeType:r})}catch(e){o.error(`File preview failed`,e)}}),t.addEventListener(`file-reference`,e=>{let{path:t}=e.detail;i(t)}),t.addEventListener(`file-download`,async e=>{let{path:t}=e.detail;try{let e=await(await n()).readFile(t,{encoding:`binary`}),r=new Uint8Array(e.length);r.set(e);let i=t.split(`/`).pop()||`download`,a=Nn(t),o=new Blob([r],{type:a}),s=URL.createObjectURL(o),c=document.createElement(`a`);c.href=s,c.download=i,c.click(),URL.revokeObjectURL(s)}catch(e){o.error(`File download failed`,e)}}),t.addEventListener(`file-overflow`,e=>{let{path:n,anchor:r}=e.detail,i=[{id:`rename`,label:`Rename`},{id:`duplicate`,label:`Duplicate`},{id:`copy-path`,label:`Copy path`},{id:`open-browser`,label:`Open in browser`,visible:Pn(n)},{id:`delete`,label:`Delete`,destructive:!0}];Me.show({anchor:r,items:i,context:{path:n},dispatchTarget:t})}),t.addEventListener(`overflow-action`,async e=>{let{action:t,context:n}=e.detail,{path:i}=n;try{switch(t){case`copy-path`:await navigator.clipboard.writeText(i);break;case`open-browser`:window.open(a(i),`_blank`);break;case`duplicate`:{let e=i.lastIndexOf(`.`),t=e>0?`${i.slice(0,e)}_copy${i.slice(e)}`:`${i}_copy`,n=await r();if(await In(n,t)&&!confirm(`${t} already exists. Overwrite?`))break;await Fn(n,i,t);break}case`delete`:confirm(`Delete ${i}?`)&&await(await r()).rm(i);break;case`rename`:{let e=i.split(`/`).pop()??``,t=prompt(`Rename ${i} to:`,e)?.trim();if(!t||t===e||t.includes(`/`))break;let n=`${i.slice(0,i.length-e.length)}${t}`,a=await r();if(await In(a,n)&&!confirm(`${n} already exists. Overwrite?`))break;await Fn(a,i,n),await a.rm(i);break}}}catch(e){o.error(`Overflow action "${t}" failed`,e)}})}var Rn=`/workspace/CLAUDE.md`,q=64;function zn(e){if(e.length<=q)return{title:e,summary:``};let t=e.lastIndexOf(` `,q),n=t>q/2?t:q;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function Bn(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(zn(e)),n=null};for(let t of e.split(`
8
- `)){let e=/^\s*[-*]\s+(.*)$/.exec(t);e?(r(),n=[e[1]]):n&&t.trim()&&!t.startsWith(`#`)?n.push(t.trim()):(t.startsWith(`#`)||!t.trim())&&r()}return r(),t.length===0&&e.trim()&&t.push(zn(e.trim())),t}async function Vn(e){let t=``;try{let n=await e.readFile(Rn,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return Bn(t).map(e=>{let t=document.createElement(`slicc-memrow`);return t.setAttribute(`title`,e.title),e.summary&&t.setAttribute(`summary`,e.summary),t.setAttribute(`tag`,`project`),t})}async function Hn(e){let t=e.getScoops(),[n,r,i,a,o,s]=await Promise.all([e.getCronTasks().catch(()=>[]),e.getWebhooks().catch(()=>[]),e.getMounts().catch(()=>[]),e.getMcpServers().catch(()=>({})),e.getSessionStats().catch(()=>null),e.getProcesses().catch(()=>[])]),c=e.getOAuthProviders(),l=Object.entries(a);return[{id:`cost`,label:`Cost`,count:o?.models.length??0,meta:o?`$${o.totalCost.toFixed(2)}`:void 0,rows:o?.models.map(e=>({name:e.model,meta:`$${e.cost.toFixed(4)}`}))??[]},{id:`scoops`,label:`Scoops`,count:t.length,rows:t.map(t=>{let n=t.isCone?`${t.name||`sliccy`} (cone)`:t.name,r=e.isProcessing(t.jid);return{name:n,meta:r?`processing`:`idle`,active:r}})},{id:`processes`,label:`Processes`,count:s.length,rows:s.map(e=>{let t=e.argv.length>40?e.argv.slice(0,37)+`...`:e.argv,n=e.status===`running`;return{name:`${e.pid}`,meta:t,active:n}})},{id:`cron`,label:`Cron Tasks`,count:n.length,rows:n.map(e=>({name:e.name,meta:e.cron,active:e.status===`active`}))},{id:`webhooks`,label:`Webhooks`,count:r.length,rows:r.map(e=>({name:e.name,meta:e.scoop?`→ ${e.scoop}`:`→ cone`}))},{id:`workflows`,label:`Workflows`,count:0,rows:[]},{id:`mounts`,label:`Mounts`,count:i.length,rows:i.map(e=>({name:e.targetPath,meta:e.descriptor.kind,active:e.valid===!0,error:e.valid===!1}))},{id:`mcp`,label:`MCP Servers`,count:l.length,rows:l.map(([e,t])=>{let n=t.tools?.length??0;return{name:e,meta:`${n} tool${n===1?``:`s`}`}})},{id:`oauth`,label:`OAuth`,count:c.length,rows:c.map(e=>({name:e.providerId,meta:``,active:e.valid===!0,error:e.valid===!1}))}]}var Un=[`/workspace`,`/shared`],Wn=3,Gn=200;async function Kn(e,t,n){let r;try{r=await e.readDir(t)}catch{return[]}let i=r.filter(e=>e.type===`directory`).sort((e,t)=>e.name.localeCompare(t.name)),a=r.filter(e=>e.type===`file`).sort((e,t)=>e.name.localeCompare(t.name)),o=[...i,...a].slice(0,Gn),s=o.filter(e=>e.type===`file`).map(e=>`${t}/${e.name}`),c=await Promise.allSettled(s.map(t=>e.stat(t))),l=new Map;s.forEach((e,t)=>{let n=c[t];n?.status===`fulfilled`&&l.set(e,n.value.size)});let u=[];for(let r of o){let i=`${t}/${r.name}`;if(r.type===`directory`)u.push({kind:`dir`,id:i,label:r.name,children:n<Wn?await Kn(e,i,n+1):[]});else{let e=l.get(i);u.push({kind:`file`,id:i,label:r.name,path:i,size:e})}}return u}async function qn(e){let t=[];for(let n of Un)t.push({kind:`dir`,id:n,label:n.slice(1),open:!0,children:await Kn(e,n,1)});return t}function Jn(e){let t=!1,n=null,r=null,i=!1,a=!1,o=()=>{e.openFs().then(async t=>{e.fileTree.items=await qn(t),a||(a=!0,Ln({fileTree:e.fileTree,openFs:e.openFs,openWriter:e.openWriter,insertReference:e.insertReference,toPreviewUrl:ce,log:e.log}))}).catch(t=>e.log.error(`WC file tree refresh failed`,t))},s=()=>{i=!1,n!=null&&(clearInterval(n),n=null),r!=null&&(clearInterval(r),r=null)};return a=>{if(a===`files`){s(),i=!0,e.onKernelReady(()=>{i&&(i=!1,o(),n=setInterval(o,3e3))});return}if(s(),a===`memory`){e.openFs().then(async t=>{e.memoryHost.replaceChildren(...await Vn(t))}).catch(t=>e.log.error(`WC memory refresh failed`,t));return}if(a===`monitor`){r!=null&&clearInterval(r);let t=()=>{(async()=>{try{let t=await Hn(e.getMonitorDeps());e.monitor.sections=t}catch(t){e.log.error(`WC monitor refresh failed`,t)}})()};e.monitor.addEventListener(`slicc-monitor-refresh`,t),t(),r=setInterval(t,5e3);return}a===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))}}var Yn=e({attachWcClient:()=>$,createWcLiveCallbacks:()=>Z,effortOverrideForAgent:()=>tr,makeSprinkleAttachImage:()=>vr,metaThinkingForScoop:()=>nr,mountWcUiLive:()=>yr,parseProcStatLine:()=>er,prepareWcShell:()=>Q,shouldSkipSessionHydration:()=>J,thinkingLevelForAgent:()=>Qn,toSwitcherScoops:()=>X,wireWcChipTips:()=>pr}),Xn={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},Zn={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function Qn(e){return e?Xn[e]:void 0}var $n={R:`running`,S:`pending`,Z:`exited`,K:`killed`};function er(e){return $n[e.trim().split(` `)[2]??``]??`unknown`}function tr(e){return e===`max`?`max`:void 0}function nr(e,t){return t===`max`?`max`:(e&&Zn[e])??`off`}function J(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`||S(t.localStorage)}function Y(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function X(e,t,n){return[...e].sort((e,t)=>Number(t.isCone)-Number(e.isCone)).map(e=>{let r=n?.get(e.jid);return{key:e.jid,type:e.isCone?`cone`:`scoop`,color:E(e),label:e.isCone?`sliccy`:e.name,eyes:Y(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function Z(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=X(t.getScoops(),e.statuses,e.fills))},n=()=>(e.refs.thread.getAttribute(`context`)??``).startsWith(`freezer:`),r=()=>{if(e.getSelected()||n())return;let t=e.getClient()?.getScoops()??[],r=e.pendingUrlContext;if(r?.startsWith(`freezer:`))return;if(r?.startsWith(`scoop:`)){let n=r.slice(6),i=t.find(e=>!e.isCone&&e.name===n);if(i){e.pendingUrlContext=null,e.selectScoop(i);return}}let i=t.find(e=>e.isCone);i&&(e.pendingUrlContext=null,e.selectScoop(i))};return{onStatusChange:(n,r)=>{let i=e.statuses.get(n);e.statuses.set(n,r),Y(i)!==Y(r)&&t(),e.getSelected()?.jid===n&&e.getController()?.setProcessing(r===`processing`)},onScoopCreated:r=>{t(),!e.getSelected()&&!n()&&!e.pendingUrlContext&&e.selectScoop(r)},onScoopListUpdate:()=>{t(),r()},onScoopActivity:t=>{e.refs.switcher.setAttribute(`attention`,t)},onIncomingMessage:(t,n)=>{e.refs.switcher.setAttribute(`attention`,t),e.lastActivity.set(t,String(n.content??``).slice(0,600)),e.getSelected()?.jid===t&&n.channel!==`web`&&xe(n.channel)&&e.getController()?.addLickMessage(n.id,n.content,n.channel,new Date(n.timestamp).getTime(),n.lickId)},onMessageUpdate:(t,n)=>{e.getSelected()?.jid===t&&n.lickId&&n.lickState&&e.getController()?.updateLickState(n.lickId,n.lickState)},onScoopMessagesReplaced:(t,n)=>{e.getSelected()?.jid===t&&e.getController()?.loadMessages(n)},onReady:()=>{t(),r(),e.notifyReady?.()}}}async function rr(e,t){e.thread.setAttribute(`context`,t.isCone?`cone`:`scoop:${t.name}`),e.thread.setAttribute(`accent`,E(t)),we(e,t.isCone?{kind:`cone`}:{kind:`scoop`,accent:E(t)}),e.switcher.setAttribute(`active`,t.jid);let n=localStorage.getItem(`slicc_locked_effort_level`);e.composerMeta.setAttribute(`thinking`,nr(n??t.config?.thinkingLevel,t.config?.effortOverride));try{let{resolveCurrentModel:r,resolveModelById:i}=await o(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./provider-settings-DV3qVADA.js`).then(e=>e.t);return{resolveCurrentModel:e,resolveModelById: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,26,27,28,29,30])),a=t.config?.modelId,s=a?i(a):r();e.composerMeta.setAttribute(`model`,s.name??s.id),e.composerMeta.toggleAttribute(`no-thinking`,s.reasoning!==!0||!!n)}catch{}}function ir(e){let{refs:t,openVfs:n,client:r,getController:i,getSelected:a,clearSelection:s,log:c}=e,l=[],u=null,d=t=>{u=null,e.selectScoop(t)},f=0,p=!1,m=()=>{let e=++f;n().then(async({reader:n,writer:r})=>{let i=await K(n);if(i===null){if((await On(n)).kind!==`corrupt`||(c.warn(`WC freezer index corrupt — rebuilding from archives`),i=await kn(n),i.length===0))return;await r.writeFile(T,JSON.stringify(i,null,2))}e===f&&(l=i,An(t.freezer,i),!p&&i.some(e=>!e.icon&&!e.pendingEnrichment)&&(p=!0,o(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BIdwKjMA.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,32,33])).then(({pickLucideIcon:e})=>Dn({reader:n,writer:r,freezer:t.freezer,entries:i,pickIcon:t=>e({subject:t})})).catch(e=>c.warn(`WC freezer icon enrichment failed`,e)).finally(()=>{p=!1})))}).catch(e=>c.error(`WC freezer refresh failed`,e))},h=!1,g=()=>t.freezer.querySelector(`slicc-freezer-new`),_=e=>{h||(h=!0,g()?.setAttribute(`busy`,``),(async()=>{try{let{writer:t}=await n(),{resetNewSessionTmp:a,runNewSessionFreeze:s,runNewSessionFreezeQuick:c}=await o(async()=>{let{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}=await import(`./new-session-fsGH73gc.js`);return{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}},__vite__mapDeps([34,2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,0,25,26,27,28,29,30,32,35,36,37,33,38,39]));if(e!==`erase`){let n=async e=>{let{getTranscriptExportService:t}=await o(async()=>{let{getTranscriptExportService:e}=await import(`./export-provider-B6K_eHX_.js`).then(e=>e.t);return{getTranscriptExportService:e}},__vite__mapDeps([40,1,12]));await t().captureFrozen({sessionId:e.sessionId??e.archive.id,title:e.archive.title,frozenAt:e.archive.frozenAt,createdAt:e.archive.createdAt,updatedAt:e.archive.updatedAt})};e===`save`?await s({vfs:t,captureCompleteSnapshot:n,onProgress:e=>{let t=g();t&&(e===null?t.removeAttribute(`progress`):t.setAttribute(`progress`,String(e)))},onBackgroundEnriched:()=>m()}):await c({vfs:t,captureCompleteSnapshot:n})}await a(t),await r.clearAllMessages(),i()?.loadMessages([]),window.dispatchEvent(new CustomEvent(je)),o(async()=>{let{resetDictationPriming:e}=await import(`./dictation-priming-DGpw1lUV.js`).then(e=>e.r);return{resetDictationPriming:e}},__vite__mapDeps([38,1])).then(({resetDictationPriming:e})=>e()).catch(()=>void 0),m();let l=r.getScoops().find(e=>e.isCone);l&&d(l)}catch(e){c.error(`WC new session failed`,e)}finally{h=!1;let e=g();e?.removeAttribute(`busy`),e?.removeAttribute(`progress`)}})())};for(let e of[`save`,`skip`,`erase`])t.freezer.addEventListener(`new-chat-${e}`,()=>_(e));window.addEventListener(Ae,e=>{let t=e.detail?.action;(t===`save`||t===`skip`||t===`erase`)&&_(t)});let v=async e=>{try{let{reader:r}=await n(),a=l.find(t=>t.filename===e);a||=(await K(r)??[]).find(t=>t.filename===e);let{messages:o}=await jn(r,a??{filename:e,title:e,frozenAt:``,messageCount:0});t.thread.setAttribute(`context`,`freezer:${a?.filename??e}`),u=a?.sessionId??a?.filename??null,i()?.loadMessages(o),t.thread.setAttribute(`accent`,Oe),we(t,{kind:`freezer`}),t.inputCard.setAttribute(`disabled`,``),t.switcher.removeAttribute(`active`),s()}catch(e){if(c.error(`WC thaw failed`,e),!a()){let e=r.getScoops().find(e=>e.isCone);e&&d(e)}}};return t.freezer.addEventListener(`freezer-card-select`,e=>{let t=e.detail?.slug;t&&v(t)}),{refreshFreezer:m,openFrozen:v,getViewedFrozenSessionId:()=>u}}function Q(e,t){let n=null,r=Ee(e,{messages:[],scoops:[],floatLabel:t,placeholder:`Ask sliccy, or describe a change…`,onSurfaceActivate:e=>n?.(e),urlState:!0}),i=null,a=null,o=null,s=!1,c=new Set,l=e=>{if(o=e,!a)return;let t=a.selectedScoopJid;if(t&&t!==e.jid){let e=i?.getQueuedMessages()??[];for(let n of e)a.deleteQueuedMessage(t,n.id).catch(()=>void 0)}a.setSelectedScoopJid(e.jid),r.inputCard.removeAttribute(`disabled`),rr(r,e),a.requestScoopMessages(e.jid),i?.setProcessing(a.isProcessing(e.jid)),r.switcher.hasAttribute(`attention`)||r.switcher.setAttribute(`attention`,e.jid)};return{refs:r,wiring:{refs:r,statuses:new Map,fills:new Map,lastActivity:new Map,pendingUrlContext:r.thread.urlContext??null,getController:()=>i,getClient:()=>a,getSelected:()=>o,selectScoop:l,notifyReady:()=>{s=!0;for(let e of c)e()}},setClient:e=>{a=e},selectScoop:l,getSelected:()=>o,clearSelection:()=>{o=null},getController:()=>i,setController:e=>{i=e},setActivateSurface:e=>{n=e;let t=r.workbenchBody.getAttribute(`active`);t&&r.shell.hasAttribute(`open`)&&(s?e(t):c.add(()=>e(t)))},onClientReady:e=>{c.add(e),s&&e()}}}function ar(e){let t=null;return()=>(t??=(async()=>{let[{createRemoteVfsClient:t},{createRemoteWritableVfsClient:n}]=await Promise.all([o(()=>import(`./remote-vfs-client-Z2qM01yP.js`),__vite__mapDeps([41,37])),o(()=>import(`./writable-vfs-client-Cb6FWsgc.js`),__vite__mapDeps([42,37]))]);return{reader:t({transport:e.getTransport()}),writer:n({transport:e.getTransport()})}})(),t)}function or(e,t,n,r,i){e.onClientReady(()=>{r.intercept||o(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-Bx26DTML.js`);return{wireWcOnboarding:e}},__vite__mapDeps([43,3,25,12,13,1,14,15,16,26,44,11,45,46,47,48,49,50,51,52,53,54,55,56])).then(({wireWcOnboarding:r})=>r({client:t,getController:()=>e.getController(),openVfs:n,log:i})).then(e=>{r.intercept=e.interceptWelcomeLick}).catch(e=>i.error(`WC onboarding wiring failed`,e))})}function sr(e,t,i,a,s){let c=new Map;o(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadDipStyles:e}},__vite__mapDeps([57,3])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),o(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-C8b_iQ_9.js`).then(e=>e.i);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([52,1,53,11])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0),o(async()=>{let{applyThemeOverrides:e}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{applyThemeOverrides:e}},__vite__mapDeps([53,1,11])).then(({applyThemeOverrides:e})=>e()).catch(()=>void 0);let l=t.createAgentHandle();l.onEvent(e=>{e.type!==`tool_use_start`&&e.type!==`tool_result`||o(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([58,11,59])).then(({playCue:t})=>t(e.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0)});let u=new wn({thread:e.thread,agent:l,resolveTelemetryContext:()=>{let e=i();if(!e)return null;let t=e.isCone?`cone`:e.name;try{let i=e.config?.modelId;return{scoopName:t,model:(i?r(i):n()).id}}catch{return{scoopName:t,model:``}}},onTurnComplete:e=>{o(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-CkYr1oSF.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([60,11,38,1,61,3,15,62,63,13,14,12,16,55,56])).then(async({consumeVoiceSubmission:t,speakReplyMarkdown:n})=>{if(!t())return;let{endVoiceTurn:r,setTtsActive:i}=await o(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([58,11,59]));try{if(e?.content){i(!0);try{await n(e.content)}finally{i(!1)}}}finally{r()}}).catch(()=>void 0)},onProcessingChange:t=>{e.frame.toggleAttribute(`data-processing`,t),e.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,t),t||a?.()},onBusyPhaseChange:t=>{e.inputCard.querySelector(`slicc-send-button`)?.setAttribute(`phase`,t)},onMessageDisposed:e=>{let t=c.get(e);t&&(he(t),c.delete(e))},onMessageRendered:(e,n)=>{let r=n[0];r&&c.set(e.id,me(r,(e,n)=>{let r={type:`sprinkle`,sprinkleName:`inline`,timestamp:new Date().toISOString(),body:{action:e,data:n}};s?.intercept?.(r)||t.sendSprinkleLick(`inline`,{action:e,data:n})}))},onQueuedChange:t=>{e.queuedStack.setMessages(t)},onToolUiAction:(e,n,r)=>{t.sendToolUiAction(e,n,r)},onQueuedCancel:e=>{let n=t.selectedScoopJid;n&&t.deleteQueuedMessage(n,e).catch(()=>void 0)}});return e.queuedStack.addEventListener(`slicc-queued-remove`,e=>{let n=e.detail?.id;if(!n)return;u.removeQueuedMessage(n);let r=t.selectedScoopJid;r&&t.deleteQueuedMessage(r,n).catch(()=>void 0)}),{controller:u,agentHandle:l}}function cr(e){let{boot:t,client:n,agentHandle:r,openReader:i,log:a}=e,{refs:s}=t;o(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-Do_J1qRT.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([64,3,38,1])).then(({createPlaceholderRefresher:n})=>{e.setRefreshPlaceholder(n({inputCard:s.inputCard,getMessages:()=>t.getController()?.getMessages()??[],defaultPlaceholder:s.inputCard.getAttribute(`placeholder`)??`Ask sliccy, or describe a change…`}))}),(async()=>{try{if(J(t.wiring.pendingUrlContext,window))return;let{SessionStore:n}=await o(async()=>{let{SessionStore:e}=await import(`./session-store-DQztDoVa.js`).then(e=>e.n);return{SessionStore:e}},__vite__mapDeps([39,1])),r=new n;await r.init();let i=await r.load(`session-cone`);i&&i.messages.length>0&&!t.getSelected()&&(t.getController()?.loadMessages(i.messages),e.triggerPlaceholder())}catch(e){a.warn(`WC session hydration failed`,e)}})();let c=null;return o(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-CYMk5mBA.js`);return{wireWcAttach:e}},__vite__mapDeps([65,3,14,12,46,1])).then(({wireWcAttach:t})=>{c=t({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:i,openWriter:e.openWriter,listConversations:async()=>{let{readSessionsIndex:e}=await o(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-5kKWFNcz.js`).then(e=>e.c);return{readSessionsIndex:e}},__vite__mapDeps([35,1,3,4,5,6,7,8,9,36,10,11,37,33,38]));return(await e(await i())).map(e=>({id:e.filename,label:e.title,sub:`${e.messageCount} turns`}))},log:a})}).catch(e=>a.error(`WC add-menu wiring failed`,e)),s.inputCard.addEventListener(`submit`,e=>{let n=Se(e);if(!n)return;let r=e.detail?.source===`dictation`;r&&(o(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-CkYr1oSF.js`);return{markVoiceSubmission:e}},__vite__mapDeps([60,11,38,1,61,3,15,62,63,13,14,12,16,55,56])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),o(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([58,11,59])).then(({beginVoiceTurn:e,playCue:t})=>{e(),t(`sent`)}).catch(()=>void 0)),t.getController()?.sendUserMessage(n,c?.take(),{dictation:r}),s.inputCard.clear?.();let i=t.getSelected()?.jid;i&&(s.switcher.setAttribute(`attention`,i),t.wiring.lastActivity.set(i,n.slice(0,600)))}),s.inputCard.addEventListener(`stop`,()=>{t.getController()?.processing&&r.stop()}),o(async()=>{let{wireWcHistoryNav:e}=await import(`./wc-history-nav-C5w8ianG.js`);return{wireWcHistoryNav:e}},[]).then(({wireWcHistoryNav:e})=>e({thread:s.thread,inputCard:s.inputCard})).catch(e=>a.error(`WC history nav wiring failed`,e)),s.composerMeta.addEventListener(`thinking-change`,e=>{if(localStorage.getItem(`slicc_locked_effort_level`))return;let r=e.detail?.thinking,i=Qn(r),a=tr(r),o=t.getSelected();o&&i&&n.setScoopThinkingLevel(o.jid,i,a)}),{getAttachStage:()=>c}}function lr(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(!n)return;e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2));let r=e.refs.floatbar;n.models&&(r.costModels=n.models),n.scoops&&(r.costScoops=n.scoops),e.fills.clear();for(let t of n.fills)e.fills.set(t.jid,t.fill);e.refs.switcher.scoops=X(t.getScoops(),e.statuses,e.fills)})};return setInterval(n,15e3),n}function ur(e,t,n){let r=t.standalone;r&&o(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-BQYjgdk8.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:t})=>t({refs:e.refs,browser:r.browser,log:n})).catch(e=>n.error(`WC browser overlay wiring failed`,e))}function dr(e,t){let{refs:n}=e;n.switcher.addEventListener(`slicc-scoop-select`,n=>{let r=n.detail?.key,i=t.getScoops().find(e=>e.jid===r);i&&i.jid!==e.getSelected()?.jid&&e.selectScoop(i)}),pr({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function fr(e){return()=>{e.triggerPlaceholder(),e.refreshStats();let t=e.boot.getSelected()?.jid;if(!t)return;e.boot.refs.switcher.setAttribute(`attention`,t);let n=e.boot.getController()?.getMessages().filter(e=>e.role===`assistant`).at(-1);n&&e.boot.wiring.lastActivity.set(t,String(n.content??``).slice(0,600))}}function pr(e){let t=new Map,n=new Set;e.switcher.addEventListener(`pointerover`,r=>{let i=r.target?.closest?.(`slicc-pill.scoop`);if(!i||!e.switcher.contains(i))return;let a=i.dataset.k??``,s=e.getScoops().find(e=>e.jid===a);if(!s)return;let c=e.lastActivity.get(a)??``,l=t.get(a);if(l&&l.activity===c){i.title=l.tip;return}i.title||=s.isCone?`sliccy`:s.name,!(!c||n.has(a))&&(n.add(a),(async()=>{try{let n=await(e.labelFn??(await o(async()=>{let{quickLabel:e}=await import(`./quick-llm-BIdwKjMA.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,32,33]))).quickLabel)({system:`One line for a hover tooltip: at most 14 words, present tense, no quotes, no trailing period.`,prompt:`Summarize what this agent has been doing.\nAgent: ${s.isCone?`sliccy (the main agent)`:s.name}\nMost recent activity:\n${c}`,maxTokens:40});n&&(t.set(a,{activity:c,tip:n}),i.title=n)}finally{n.delete(a)}})())})}async function mr(e,t,n){let{RemoteTerminalView:r}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-CSnIU2HK.js`);return{RemoteTerminalView:e}},__vite__mapDeps([66,1,3,20,11,46,67,68,69,15,47,70,48,50,71])),{fetchSecretEnvVars:i}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-Cn-GSA1R.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([72,11,13,1,3,14,12,15,16,17,18,19])),a=await i(),s=new r({client:t,cwd:`/`,env:Object.keys(a).length>0?a:void 0});await new Promise(t=>e.onClientReady(t)),await s.mount(n),globalThis.__slicc_terminal_view=s,window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function hr(e,t,n){let r=r=>{if(r.startsWith(`freezer:`)){n(r.slice(8));return}let i=t.getScoops(),a=r.startsWith(`scoop:`)?i.find(e=>!e.isCone&&e.name===r.slice(6)):i.find(e=>e.isCone);a&&a.jid!==e.getSelected()?.jid&&e.selectScoop(a)};e.refs.thread.addEventListener(`slicc-url-context`,e=>{let t=e.detail?.context;t&&r(t)});let i=e.wiring.pendingUrlContext;i?.startsWith(`freezer:`)&&e.onClientReady(()=>{e.wiring.pendingUrlContext===i&&(e.wiring.pendingUrlContext=null,r(i))})}function gr(e,t,n,r){o(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-BN3Q_XHM.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([73,3,11,46,1])).then(async({installLeaderPermissionsSurface:r,installMountPendingConsumer:i})=>{let a=n.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await o(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-DMTDytlu.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([74,3,15]));r({runtimeMode:a,providers:await s(c()||a===`extension`||a===`extension-detached`)}),i({runShell:_r(e,t)})}).catch(e=>r.warn(`WC permissions surface wiring failed`,e))}function _r(e,t){let n=null,r=()=>(n||=(async()=>{await new Promise(t=>e.onClientReady(t));let{TerminalSessionClient:n}=await o(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-BylrXUky.js`).then(e=>e.n);return{TerminalSessionClient:e}},__vite__mapDeps([71,1])),r=new n({client:t,sid:`mount-drop-${Date.now()}`});return await r.open({cwd:`/workspace`}),r})().catch(e=>{throw n=null,e}),n);return async e=>(await r()).exec(e)}function vr(e,t){return(n,r,i)=>{let a=e.getAttachStage();if(!a){t.warn(`sprinkle attachImage dropped: composer stage not ready yet`);return}let o=n.match(/^data:(image\/[^;]+);base64,([A-Za-z0-9+/=]+)$/),s=o?o[2]:n,c=o?o[1]:i??`image/png`,l=c.split(`/`)[1]?.replace(`jpeg`,`jpg`).replace(`svg+xml`,`svg`)??`png`,u=r??`annotation-${Date.now()}.${l}`;a.add({id:`att-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,name:u,mimeType:c,size:Math.floor(s.length*3/4),kind:`image`,data:s})}}function $(e,n,r,s={}){o(async()=>{let{initTimestampPreference:e}=await import(`./timestamp-preference-DgrTvVNx.js`).then(e=>e.a);return{initTimestampPreference:e}},__vite__mapDeps([75,1])).then(({initTimestampPreference:e})=>e()).catch(()=>void 0);let{refs:c}=e;e.setClient(n);let l=null,u=lr(e.wiring,n),d=()=>l?.(),f={intercept:null},{controller:p,agentHandle:m}=sr(c,n,()=>e.getSelected(),fr({boot:e,triggerPlaceholder:d,refreshStats:u}),f);e.setController(p),e.onClientReady(u);let h=ar(n),g=async()=>(await h()).reader;s.standalone?.runtimeMode!==`cherry`&&s.standalone?.runtimeMode!==`hosted-leader`&&or(e,n,h,f,r);let _=cr({boot:e,client:n,agentHandle:m,setRefreshPlaceholder:e=>{l=e},triggerPlaceholder:d,openReader:g,openWriter:async()=>(await h()).writer,log:r});dr(e,n),ur(e,s,r),gr(e,n,s,r),e.setActivateSurface(Jn({fileTree:c.fileTree,termSurface:c.termSurface,memoryHost:c.memoryHost,monitor:c.monitor,openFs:g,openWriter:async()=>(await h()).writer,onKernelReady:t=>e.onClientReady(t),getMonitorDeps:()=>({getScoops:()=>n.getScoops(),isProcessing:e=>n.isProcessing(e),getCronTasks:async()=>{let{getAllCronTasks:e}=await o(async()=>{let{getAllCronTasks:e}=await import(`./db-ysOO0kLr.js`).then(e=>e.t);return{getAllCronTasks:e}},__vite__mapDeps([76,1]));return e()},getWebhooks:async()=>{let{getAllWebhooks:e}=await o(async()=>{let{getAllWebhooks:e}=await import(`./db-ysOO0kLr.js`).then(e=>e.t);return{getAllWebhooks:e}},__vite__mapDeps([76,1]));return e()},getMounts:async()=>{let{getAllMountEntries:e,loadMountHandle:t}=await o(async()=>{let{getAllMountEntries:e,loadMountHandle:t}=await import(`./mount-table-store-CfQUN_2R.js`).then(e=>e.r);return{getAllMountEntries:e,loadMountHandle:t}},__vite__mapDeps([77,1])),n=await e();return Promise.all(n.map(async e=>{if(e.descriptor.kind!==`local`)return e;try{let n=await(await t(e.descriptor.idbHandleKey))?.queryPermission?.({mode:`readwrite`});return{...e,valid:n===`granted`}}catch{return{...e,valid:!1}}}))},getMcpServers:async()=>{try{let e=await(await g()).readFile(`/workspace/.mcp/servers.json`,{encoding:`utf-8`});return JSON.parse(typeof e==`string`?e:new TextDecoder().decode(e)).servers??{}}catch{return{}}},getOAuthProviders:()=>{try{let e=new Set,n=[];for(let r of a()){if(e.has(r.providerId))continue;if(e.add(r.providerId),!t(r.providerId)?.isOAuth){n.push({providerId:r.providerId});continue}let a=i(r.providerId),o=r.loggedOut?!1:a?!a.expired:!1;n.push({providerId:r.providerId,valid:o})}return n}catch{return[]}},getSessionStats:async()=>n.getSessionStats?.()??null,getProcesses:async()=>{try{let e=await g(),t=await e.readDir(`/proc`),n=[];for(let r of t.filter(e=>e.type===`directory`&&/^\d+$/.test(e.name)))try{let t=await e.readFile(`/proc/${r.name}/stat`,{encoding:`utf-8`}),i=await e.readFile(`/proc/${r.name}/cmdline`,{encoding:`utf-8`});n.push({pid:parseInt(r.name,10),argv:String(i).trim(),status:er(String(t))})}catch{}return n}catch{return[]}}}),mountTerminal:t=>mr(e,n,t),insertReference:e=>{let t=c.inputCard,n=t.value.trim();t.value=n?`${n} @${e}`:`@${e}`,t.focus()},log:r})),c.floatbar.addEventListener(`click`,()=>{c.shell.hasAttribute(`open`)&&c.workbenchBody.getAttribute(`active`)===`monitor`?(c.shell.removeAttribute(`open`),c.dock.removeAttribute(`active`)):c.dock.selectItem(`monitor`)});let{refreshFreezer:v,openFrozen:y,getViewedFrozenSessionId:ee}=ir({refs:c,openVfs:h,client:n,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:r});v(),e.onClientReady(v),hr(e,n,y),h().then(async({reader:e})=>{let{installPreviewVfsResponder:t}=await o(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-Dhck1Brc.js`);return{installPreviewVfsResponder:e}},[]);t({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>e,logger:r})}).catch(e=>r.warn(`WC page-VFS support wiring failed`,e)),h().then(async({reader:t,writer:i})=>{let{createRemoteSprinkleVfs:a}=await o(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([78,37])),{wireWcSprinkles:l}=await o(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-C-q1vy-w.js`);return{wireWcSprinkles:e}},__vite__mapDeps([79,3,15])),u=await l({refs:c,client:n,fs:a({reader:t,writer:i}),instanceId:s.instanceId,onAttachImage:vr(_,r),log:r});if(e.onClientReady(()=>void u.resync()),s.standalone&&s.instanceId){let{wireWcTray:t}=await o(async()=>{let{wireWcTray:e}=await import(`./wc-tray-DllMR8uZ.js`);return{wireWcTray:e}},__vite__mapDeps([80,2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,36,81,25,26,27,0,28,29,30,82,83,70,71,84,76,85,86,87,88,55,56,51,52,53,89,90])),i=u.zone.callbacks();await t({refs:c,client:n,browser:s.standalone.browser,realCdpTransport:s.standalone.realCdpTransport,instanceId:s.instanceId,runtimeMode:s.standalone.runtimeMode,sprinkleManager:u.manager,addSprinkle:(e,t,n)=>i.addSprinkle(e,t,n),removeSprinkle:e=>i.removeSprinkle(e),getController:()=>e.getController(),getSelectedJid:()=>e.getSelected()?.jid??`cone`,agentHandle:m,openFs:g,baseFloatLabel:s.standalone.baseFloatLabel,window,log:r})}}).catch(e=>r.error(`WC sprinkle/tray wiring failed`,e));{let e=new Le,t=new ye,r=fe(new tn({collection:{listScoops:()=>n.getScoops(),isProcessing:e=>n.isProcessing(e),getAgentMessages:()=>null,loadPersistedSessions:()=>e.loadAll(),loadUiChatSessions:async()=>{let e=await t.list();return(await Promise.all(e.map(e=>t.load(e)))).filter(e=>e!==null)},wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:gn(),snapshotStore:{read:async e=>{let{reader:t}=await h();return dn(t,e)},write:async(e,t)=>{let{writer:n}=await h();return un(n,e,t)}},vfs:{readFile:async(e,t)=>(await h()).reader.readFile(e,t),readDir:async e=>(await h()).reader.readDir(e),stat:async e=>(await h()).reader.stat(e)},getActiveSessionInfo:()=>{let e=n.getScoops().find(e=>e.isCone);return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`5.83.0`}));window.addEventListener(`unload`,r,{once:!0})}let b=!1,x=()=>b?Promise.resolve():(b=!0,(async()=>{try{let[{getTranscriptExportService:e},{transcriptZipToBlob:t,downloadTranscriptBlob:n}]=await Promise.all([o(()=>import(`./export-provider-B6K_eHX_.js`).then(e=>e.t),__vite__mapDeps([40,1,12])),o(()=>import(`./wc-transcript-export-B3p8LhYu.js`),__vite__mapDeps([91,3,89,12,90,1]))]),r=ee(),i=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r},a=await e().export(i,{}),{filename:s}=a;await n(await t(a),s)}catch(e){r.error(`Transcript export failed`,e)}finally{b=!1}})());o(async()=>{let{wireWcNav:e}=await import(`./wc-nav-Dlamz3gp.js`);return{wireWcNav:e}},__vite__mapDeps([92,3,15,25,12,13,1,14,16,26,27,28,30,84,11,76])).then(({wireWcNav:e})=>e({refs:c,client:n,log:r,onExportTranscript:x})).catch(e=>r.error(`WC nav wiring failed`,e)),o(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-FeteaFpi.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([93,11,15,46,1,94,62,63,13,3,14,12,16,55,56,95])).then(({getComposerSpeech:e,setComposerSpeechInstanceId:t})=>{let n=c.composer;t(s.instanceId),n.speech=e(),n.setAttribute(`ptt`,``)}).catch(e=>r.error(`WC push-to-talk wiring failed`,e)),o(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-wEvzUJ_4.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([61,3,11,15,62,63,13,1,14,12,16,55,56])).then(({setSpeakAssetsInstanceId:e})=>e(s.instanceId)).catch(e=>r.error(`WC say warmup wiring failed`,e))}async function yr(e,t,n=`standalone`){let{browser:r,realCdpTransport:i,instanceId:a,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:d}=await b({runtimeMode:n,envBaseUrl:null,window,log:t}),{resolveStandaloneFloatLabel:f,DEFAULT_STANDALONE_LABEL:p}=await o(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-yV3hzRXJ.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},__vite__mapDeps([96,13,1,3,14,12,15,16])),m=n===`standalone`||n===`electron-overlay`?await f():p,h=Q(e,m);a&&y(a);let g=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,_=g?crypto.randomUUID():void 0;if(_&&typeof navigator<`u`&&navigator.serviceWorker){let e=navigator.serviceWorker,t={type:qe,nonce:_},n=()=>e.controller?.postMessage(t);n(),e.addEventListener(`controllerchange`,n),e.addEventListener(`message`,e=>{e.data?.type===`sync-fs-need-nonce`&&n()}),typeof document<`u`&&document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&n()}),typeof window<`u`&&window.addEventListener(`focus`,n)}let v=$e({realCdpTransport:i,instanceId:a,callbacks:Z(h.wiring),localApiBaseUrl:s,bridgeToken:c,syncFsBridgeEnabled:g,syncFsChannelNonce:_,localLickWsUrl:l,extensionDelegateId:u,onWorkerScriptError:()=>{ee()}});Ke({send:e=>v.client.sendRaw(e)}),d?.(v.client),$(h,v.client,t,{instanceId:a,standalone:{browser:r,realCdpTransport:i,runtimeMode:n,baseFloatLabel:m}});let{setupSudoStandalone:x}=await o(async()=>{let{setupSudoStandalone:e}=await import(`./setup-sudo-DGndYAJc.js`).then(e=>e.n);return{setupSudoStandalone:e}},__vite__mapDeps([97,1,3]));await x({log:t}),await v.ready,h.wiring.notifyReady?.(),t.info(`WC live shell ready`,{scoops:v.client.getScoops().length});let{consumeAutoPrompt:S}=await o(async()=>{let{consumeAutoPrompt:e}=await import(`./auto-prompt-Mj-vUQeB.js`);return{consumeAutoPrompt:e}},[]),C=S(window.location.search);C&&(h.getController()?.sendUserMessage(C),t.info(`Auto-prompt submitted`,{length:C.length}))}export{wn as a,Yn as i,Z as n,We as o,Q as r,$ as t};