sliccy 5.64.0 → 5.65.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 (71) hide show
  1. package/dist/node-server/_cloud_core/tests/e2b-workerd-patch.test.d.ts +2 -0
  2. package/dist/node-server/_cloud_core/tests/e2b-workerd-patch.test.d.ts.map +1 -0
  3. package/dist/node-server/_cloud_core/tests/e2b-workerd-patch.test.js +27 -0
  4. package/dist/node-server/_shared/tray-sync-protocol.d.ts +15 -0
  5. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  6. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  7. package/dist/ui/assets/{account-store-0KfyaB_Y.js → account-store-CK-N94Ou.js} +1 -1
  8. package/dist/ui/assets/{account-store-O8B4A1Cp.js → account-store-DBH6AYjF.js} +1 -1
  9. package/dist/ui/assets/{adobe-BA1lmOYx.js → adobe-BYSVTvmv.js} +1 -1
  10. package/dist/ui/assets/{adobe-DPWNL1tn.js → adobe-Byh9WsIW.js} +1 -1
  11. package/dist/ui/assets/{apps--X4sn_V2.js → apps-uHATN2fM.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-DWNTc7zl.js → azure-openai-C1XJjbYl.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-DG3rPUFz.js → azure-openai-WkZ8spz3.js} +1 -1
  14. package/dist/ui/assets/{cerebras-D8FzL0rQ.js → cerebras-DA8bHzeO.js} +1 -1
  15. package/dist/ui/assets/{cerebras-_3t84WRb.js → cerebras-d6g3fFrY.js} +1 -1
  16. package/dist/ui/assets/{connect-surface-DaZKS0Lr.js → connect-surface-C-sQsVm2.js} +1 -1
  17. package/dist/ui/assets/{fs-DVjU94G5.js → fs-BAbgPf5q.js} +1 -1
  18. package/dist/ui/assets/{fs-Bu2r8jU8.js → fs-D7BpCwRt.js} +2 -2
  19. package/dist/ui/assets/{github-DBqthTVS.js → github-68iLVdCs.js} +1 -1
  20. package/dist/ui/assets/{github-IAPS6ldF.js → github-BnId_hvT.js} +2 -2
  21. package/dist/ui/assets/{github-copilot-CYCZVUKg.js → github-copilot-CU-jRR03.js} +1 -1
  22. package/dist/ui/assets/{github-copilot-BCnsU1ES.js → github-copilot-Ctek3hky.js} +1 -1
  23. package/dist/ui/assets/{kernel-worker-DwA7Ndre.js → kernel-worker-D2aGb_82.js} +18 -18
  24. package/dist/ui/assets/leader-session-events-m7I5BMZy.js +1 -0
  25. package/dist/ui/assets/{lick-ws-bridge-BkMe-xPV.js → lick-ws-bridge-CJh2_Uld.js} +1 -1
  26. package/dist/ui/assets/{local-llm-BW8Tu5rb.js → local-llm-C00fbHJr.js} +1 -1
  27. package/dist/ui/assets/{local-llm-BaiaM-eK.js → local-llm-CPSWctNS.js} +1 -1
  28. package/dist/ui/assets/{main-BtekKitA.js → main-CmZaYL6M.js} +3 -3
  29. package/dist/ui/assets/{mount-DXVsSVpg.js → mount-BO2basnO.js} +2 -2
  30. package/dist/ui/assets/{mount-YiUVBgZj.js → mount-FCXht0UA.js} +1 -1
  31. package/dist/ui/assets/{mount-recovery-B98mAfuD.js → mount-recovery-Bbg4vjsg.js} +1 -1
  32. package/dist/ui/assets/{new-session-C7oDK2Kk.js → new-session-fSh3JDic.js} +2 -2
  33. package/dist/ui/assets/{oauth-bootstrap-B_ydSM5a.js → oauth-bootstrap-C6MrQSJ4.js} +2 -2
  34. package/dist/ui/assets/{openai-codex-Cx2WiSHz.js → openai-codex-B_EviANH.js} +1 -1
  35. package/dist/ui/assets/{openai-codex-Dx55_uE7.js → openai-codex-Bd8504PC.js} +1 -1
  36. package/dist/ui/assets/page-follower-tray-CuPgRSdw.js +5 -0
  37. package/dist/ui/assets/{panel-rpc-handlers-g-IcBZgz.js → panel-rpc-handlers-rjB40MzJ.js} +2 -2
  38. package/dist/ui/assets/{provider-D7tuUspk.js → provider-DQbRhNCb.js} +2 -2
  39. package/dist/ui/assets/{provider-DlfrkDnN.js → provider-DXYk5b_-.js} +1 -1
  40. package/dist/ui/assets/{provider-settings-DXZqWMxH.js → provider-settings-AHSP9_xw.js} +1 -1
  41. package/dist/ui/assets/{provider-settings-CLFfVTte.js → provider-settings-BAQroSjB.js} +1 -1
  42. package/dist/ui/assets/provider-store-access-CBm2YBYD.js +1 -0
  43. package/dist/ui/assets/{provider-store-access-B48zmrjF.js → provider-store-access-CX6QCCkY.js} +2 -2
  44. package/dist/ui/assets/{providers-DSGqRskI.js → providers-CMlMnOkB.js} +1 -1
  45. package/dist/ui/assets/{providers-C5IxOdJy.js → providers-lerk0za2.js} +2 -2
  46. package/dist/ui/assets/{quick-llm-DEwzmM-S.js → quick-llm-B7BQQiYz.js} +1 -1
  47. package/dist/ui/assets/{session-freezer-DdYYo55y.js → session-freezer-81utLS2y.js} +2 -2
  48. package/dist/ui/assets/{setup-sudo-CpuvPX2I.js → setup-sudo-h7qRDT2t.js} +2 -2
  49. package/dist/ui/assets/{skills-CllGu9dI.js → skills-AlJ6rIGf.js} +1 -1
  50. package/dist/ui/assets/{store-DJbSm8Z_.js → store-D5jYcqHh.js} +1 -1
  51. package/dist/ui/assets/{sudo-xF6nYDZf.js → sudo-FsW0M_G3.js} +1 -1
  52. package/dist/ui/assets/{upgrade-detection-Cein6N3L.js → upgrade-detection-B4owg_Xz.js} +1 -1
  53. package/dist/ui/assets/{wc-extension-D3wWW1XJ.js → wc-extension-7TX44Qkh.js} +2 -2
  54. package/dist/ui/assets/{wc-follower-DwatFMHA.js → wc-follower-C--23seG.js} +3 -3
  55. package/dist/ui/assets/wc-live-CUrQxCqR.js +8 -0
  56. package/dist/ui/assets/{wc-nav-wVpt4FYo.js → wc-nav-BDEr5OE6.js} +2 -2
  57. package/dist/ui/assets/{wc-onboarding-B5Jx6i_M.js → wc-onboarding-2Kx6qZhM.js} +2 -2
  58. package/dist/ui/assets/{wc-placeholder-DJEXeUOp.js → wc-placeholder-DxR1_zlj.js} +2 -2
  59. package/dist/ui/assets/{wc-settings-HdKp6PRa.js → wc-settings-C91mtm3p.js} +2 -2
  60. package/dist/ui/assets/{wc-shell-BcLe36CI.js → wc-shell-BSCmpIWS.js} +2 -2
  61. package/dist/ui/assets/{wc-sprinkles-Ce05-7PD.js → wc-sprinkles-Dn2Fn2mr.js} +2 -2
  62. package/dist/ui/assets/wc-tray-BV5t38Gb.js +2 -0
  63. package/dist/ui/assets/{xai-grok-170AT997.js → xai-grok-CI55pQsA.js} +1 -1
  64. package/dist/ui/assets/{xai-grok-C2qHyLFl.js → xai-grok-EQeZdJC8.js} +1 -1
  65. package/dist/ui/index.html +5 -5
  66. package/dist/ui/packages/webapp/index.html +5 -5
  67. package/package.json +2 -2
  68. package/dist/ui/assets/page-follower-tray-DFeLlotx.js +0 -5
  69. package/dist/ui/assets/provider-store-access-2_FnhYqS.js +0 -1
  70. package/dist/ui/assets/wc-live-DcaNrDBs.js +0 -8
  71. package/dist/ui/assets/wc-tray-CLX4el5K.js +0 -2
@@ -1 +0,0 @@
1
- import{t as e}from"./store-DJbSm8Z_.js";export{e as readMcpAuthEntries};
@@ -1,8 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/provider-settings-CLFfVTte.js","assets/rolldown-runtime-aKtaBQYM.js","assets/preload-helper-Czpn1I53.js","assets/account-store-0KfyaB_Y.js","assets/compat-DyT25qXb.js","assets/models-CzSI8IsT.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/context-compaction-dcYYajWb.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-DETjVL-j.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-D2k1IxFk.js","assets/secrets-bridge-client-CONYX8PU.js","assets/port-bridge-client-CdvMlimf.js","assets/tool-ui-DfXu6quJ.js","assets/providers-C5IxOdJy.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-BEi8MYUS.js","assets/transform-messages-fFaW-DLG.js","assets/tray-runtime-config-DJIIJaBR.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-CyJIKXH4.js","assets/clipboard-DuHpK59o.js","assets/telemetry-C8rZr13D.js","assets/tray-join-url-BIvzbiFR.js","assets/quick-llm-DEwzmM-S.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js","assets/new-session-C7oDK2Kk.js","assets/session-freezer-DdYYo55y.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/dictation-priming-DGpw1lUV.js","assets/session-store-DAM8GRJ0.js","assets/remote-vfs-client-Z2qM01yP.js","assets/writable-vfs-client-Cb6FWsgc.js","assets/wc-onboarding-B5Jx6i_M.js","assets/welcome-detection-CQY88hjL.js","assets/dip-BumXS1a9.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-B0y9_9py.js","assets/theme-C8b_iQ_9.js","assets/theme-engine-jfuTMXZM.js","assets/sprinkle-bridge-CmJpELpy.js","assets/shared-Dwjvg8S5.js","assets/mime-types-ugOWOUZ9.js","assets/legacy-styles-DcRu2WCJ.js","assets/soundscape-TvriK11t.js","assets/soundscape-cues-5_sT5Un6.js","assets/voice-reply-DHV6R4En.js","assets/speak-WMi1eHMn.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-sL29_hFb.js","assets/wc-placeholder-DJEXeUOp.js","assets/wc-attach-DU0svqb7.js","assets/remote-terminal-view-C7x7cM1d.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-CbAduNfC.js","assets/secret-env-1E2r2H5F.js","assets/wc-permissions-DW60QZxV.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-Ce05-7PD.js","assets/wc-tray-CLX4el5K.js","assets/tray-sync-protocol-CVdiCvfU.js","assets/handoff-link-CfgH86mb.js","assets/remote-cdp-transport-DOoXIxy3.js","assets/tray-leader-DcLymd_E.js","assets/synthetic-cdp-transport-DLIt5SkY.js","assets/wc-scoop-color-CByZNEJo.js","assets/page-follower-tray-DFeLlotx.js","assets/wc-nav-wVpt4FYo.js","assets/composer-speech-BWsih2Nz.js","assets/speech-C5U8h4In.js","assets/whisper-session-DvjyTCj0.js","assets/wc-float-label-DeQPr3pd.js","assets/setup-sudo-CpuvPX2I.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{C as t,F as n,I as r,S as i,d as a}from"./account-store-0KfyaB_Y.js";import{t as o}from"./logger-DDBAeTLF.js";import{n as s,t as c}from"./base64-DpPqYZJF.js";import"./src-CS5gSDhT.js";import{t as l}from"./tool-ui-DfXu6quJ.js";import{s as u}from"./tray-runtime-config-DJIIJaBR.js";import{i as d}from"./tray-follower-status-CyJIKXH4.js";import{c as f,l as p,n as m,r as h,s as g}from"./telemetry-C8rZr13D.js";import{i as _,n as v,r as y,t as ee}from"./main-BtekKitA.js";import{r as b}from"./tray-leader-DcLymd_E.js";import{n as x}from"./shared-Dwjvg8S5.js";import{a as S,n as C,t as te}from"./dictation-priming-DGpw1lUV.js";import{a as w,i as ne,r as re}from"./dip-BumXS1a9.js";import{a as ie,i as ae,s as T,t as E}from"./session-freezer-DdYYo55y.js";import{c as oe,d as se,i as ce,l as le,n as D,o as ue,r as de,s as fe,t as pe,u as me}from"./wc-shell-BcLe36CI.js";import{a as he,i as ge}from"./src-6TqoULh8.js";import{t as O}from"./wc-scoop-color-CByZNEJo.js";var k=`__slicc_binary__`,A=`b64`;function _e(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[k]===A&&typeof t.data==`string`}function j(e){if(e instanceof Uint8Array)return{[k]:A,data:s(e)};if(Array.isArray(e))return e.map(j);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=j(r);return t}return e}function M(e){if(_e(e))return c(e.data);if(Array.isArray(e))return e.map(M);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=M(r);return t}return e}var ve=o(`panel-transport`);function ye(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function be(){return{onMessage:e=>{let t=(t,n,r)=>(ye(t)&&e(M(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=j(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 N=o(`offscreen-client`),P=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){N.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??be(),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&&N.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}N.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?(N.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):N.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;I(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){N.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}-${F()}`,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}-${F()}`,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}-${F()}`,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}-${F()}`;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){N.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&&I(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){N.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 F(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function I(e,t){b({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),d({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 L(e){return!e.includes(`\0`)}function xe(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(!L(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(!L(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),!L(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),!L(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(L(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 Se=`sync-fs-nonce`;function R(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 Ce(e){let t=R(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function we(e,t){let n=R(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 Te(){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 Ee(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new P(r,Ce(o.port1));e.onWorkerScriptError&&e.worker.addEventListener?.(`error`,()=>e.onWorkerScriptError());let l=we(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 De(e){return Ee({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-DwA7Ndre.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Te(),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 Oe=`<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 ke(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 Ae(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(Oe));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{let n=ke(e.getMessages());await t(n??T([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=T([...e.getMessages()]);n&&(await t(n),a())})()}),n.append(r),n}function z(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function je(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 Me(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Ne(e){return`
3
- <div class="sprinkle-action-card">
4
- <div class="sprinkle-action-card__header">${Me(je(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 B(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var V=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:z(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#_.map(B)}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(B))}addAssistantMessage(e){this.#$({id:z(),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=ue(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(fe(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||!v()||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:z(),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?S(i):i;this.#p?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#M(e){return te(e,C())}#N(){if(this.#s)try{let e=this.#s();if(!e)return;m(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??=Ae({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:z(),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:z(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#K(e)}#K(e){try{if(p(e)||f(e)||g(e))return;h(`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=w(r,Ne(n),()=>{},!1);this.#O.set(t,{instance:e,container:r});return}let i=w(r,n,(e,n)=>{this.#u?.(t,e,n)},!1);this.#O.set(t,{instance:i,container:r}),this.#u?.(t,l,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,z(),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,z(),i.attachments)}#Z(e){return this.#g.find(t=>t.id===e)}#Q(e){try{return oe(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(){me(this.#te(),this.#D)}#re(){le(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 Pe(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function Fe(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Pe(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Ie(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 H(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(E,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 H(e){let t=await U(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function U(e){let t;try{let n=await e.readFile(E,{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 Le(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 Re(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(Fe))}async function ze(e,t){let n=await e.readFile(ae(t),{encoding:`utf-8`}),r=ie(typeof n==`string`?n:new TextDecoder().decode(n));return{title:r.title||t.title,messages:r.messages}}var Be={".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 W(e){return Be[e.slice(e.lastIndexOf(`.`)).toLowerCase()]||`application/octet-stream`}function Ve(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.html`||t===`.svg`}async function G(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 K(e,t){try{return await e.stat(t),!0}catch{return!1}}function He(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=W(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}ge.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=W(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:Ve(n)},{id:`delete`,label:`Delete`,destructive:!0}];he.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 K(n,t)&&!confirm(`${t} already exists. Overwrite?`))break;await G(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 K(a,n)&&!confirm(`${n} already exists. Overwrite?`))break;await G(a,i,n),await a.rm(i);break}}}catch(e){o.error(`Overflow action "${t}" failed`,e)}})}var Ue=`/workspace/CLAUDE.md`,q=64;function J(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 We(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(J(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(J(e.trim())),t}async function Ge(e){let t=``;try{let n=await e.readFile(Ue,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return We(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 Ke(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 qe=[`/workspace`,`/shared`],Je=3,Ye=200;async function Y(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,Ye),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<Je?await Y(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 Xe(e){let t=[];for(let n of qe)t.push({kind:`dir`,id:n,label:n.slice(1),open:!0,children:await Y(e,n,1)});return t}function Ze(e){let t=!1,n=null,r=null,i=!1,a=!1,o=()=>{e.openFs().then(async t=>{e.fileTree.items=await Xe(t),a||(a=!0,He({fileTree:e.fileTree,openFs:e.openFs,openWriter:e.openWriter,insertReference:e.insertReference,toPreviewUrl:x,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 Ge(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 Ke(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 Qe={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},$e={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function et(e){return e?Qe[e]:void 0}var tt={R:`running`,S:`pending`,Z:`exited`,K:`killed`};function nt(e){return tt[e.trim().split(` `)[2]??``]??`unknown`}function rt(e){return e===`max`?`max`:void 0}function it(e,t){return t===`max`?`max`:(e&&$e[e])??`off`}function at(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`||u(t.localStorage)}function X(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function Z(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:O(e),label:e.isCone?`sliccy`:e.name,eyes:X(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function Q(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=Z(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),X(i)!==X(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`&&se(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 ot(t,n){t.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),t.thread.setAttribute(`accent`,O(n)),D(t,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:O(n)}),t.switcher.setAttribute(`active`,n.jid);let r=localStorage.getItem(`slicc_locked_effort_level`);t.composerMeta.setAttribute(`thinking`,it(r??n.config?.thinkingLevel,n.config?.effortOverride));try{let{resolveCurrentModel:i,resolveModelById:a}=await e(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./provider-settings-CLFfVTte.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])),o=n.config?.modelId,s=o?a(o):i();t.composerMeta.setAttribute(`model`,s.name??s.id),t.composerMeta.toggleAttribute(`no-thinking`,s.reasoning!==!0||!!r)}catch{}}function st(t){let{refs:n,openVfs:r,client:i,getController:a,getSelected:o,selectScoop:s,clearSelection:c,log:l}=t,u=[],d=0,f=!1,p=()=>{let t=++d;r().then(async({reader:r,writer:i})=>{let a=await H(r);if(a===null){if((await U(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await Le(r),a.length===0))return;await i.writeFile(E,JSON.stringify(a,null,2))}t===d&&(u=a,Re(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,e(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-DEwzmM-S.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([29,1,4,5,2,6,7,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,30,31])).then(({pickLucideIcon:e})=>Ie({reader:r,writer:i,freezer:n.freezer,entries:a,pickIcon:t=>e({subject:t})})).catch(e=>l.warn(`WC freezer icon enrichment failed`,e)).finally(()=>{f=!1})))}).catch(e=>l.error(`WC freezer refresh failed`,e))},m=!1,h=()=>n.freezer.querySelector(`slicc-freezer-new`),g=t=>{m||(m=!0,h()?.setAttribute(`busy`,``),(async()=>{try{let{writer:n}=await r(),{resetNewSessionTmp:o,runNewSessionFreeze:c,runNewSessionFreezeQuick:l}=await e(async()=>{let{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}=await import(`./new-session-C7oDK2Kk.js`);return{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}},__vite__mapDeps([32,2,3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,0,23,24,25,26,27,28,30,33,34,35,31,36,37]));t!==`erase`&&(t===`save`?await c({vfs:n,onProgress:e=>{let t=h();t&&(e===null?t.removeAttribute(`progress`):t.setAttribute(`progress`,String(e)))},onBackgroundEnriched:()=>p()}):await l({vfs:n})),await o(n),await i.clearAllMessages(),a()?.loadMessages([]),e(async()=>{let{resetDictationPriming:e}=await import(`./dictation-priming-DGpw1lUV.js`).then(e=>e.r);return{resetDictationPriming:e}},__vite__mapDeps([36,1])).then(({resetDictationPriming:e})=>e()).catch(()=>void 0),p();let u=i.getScoops().find(e=>e.isCone);u&&s(u)}catch(e){l.error(`WC new session failed`,e)}finally{m=!1;let e=h();e?.removeAttribute(`busy`),e?.removeAttribute(`progress`)}})())};for(let e of[`save`,`skip`,`erase`])n.freezer.addEventListener(`new-chat-${e}`,()=>g(e));let _=async e=>{try{let{reader:t}=await r(),i=u.find(t=>t.filename===e);i||=(await H(t)??[]).find(t=>t.filename===e);let{messages:o}=await ze(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),a()?.loadMessages(o),n.thread.setAttribute(`accent`,pe),D(n,{kind:`freezer`}),n.inputCard.setAttribute(`disabled`,``),n.switcher.removeAttribute(`active`),c()}catch(e){if(l.error(`WC thaw failed`,e),!o()){let e=i.getScoops().find(e=>e.isCone);e&&s(e)}}};return n.freezer.addEventListener(`freezer-card-select`,e=>{let t=e.detail?.slug;t&&_(t)}),{refreshFreezer:p,openFrozen:_}}function $(e,t){let n=null,r=de(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`),ot(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 ct(t){let n=null;return()=>(n??=(async()=>{let[{createRemoteVfsClient:n},{createRemoteWritableVfsClient:r}]=await Promise.all([e(()=>import(`./remote-vfs-client-Z2qM01yP.js`),__vite__mapDeps([38,35])),e(()=>import(`./writable-vfs-client-Cb6FWsgc.js`),__vite__mapDeps([39,35]))]);return{reader:n({transport:t.getTransport()}),writer:r({transport:t.getTransport()})}})(),n)}function lt(t,n,r,i,a){t.onClientReady(()=>{i.intercept||e(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-B5Jx6i_M.js`);return{wireWcOnboarding:e}},__vite__mapDeps([40,2,23,10,11,1,12,13,14,24,41,9,42,43,44,45,46,47,48,49,50,51,52,53])).then(({wireWcOnboarding:e})=>e({client:n,getController:()=>t.getController(),openVfs:r,log:a})).then(e=>{i.intercept=e.interceptWelcomeLick}).catch(e=>a.error(`WC onboarding wiring failed`,e))})}function ut(t,i,a,o,s){let c=new Map;e(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadDipStyles:e}},__vite__mapDeps([54,2])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),e(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-C8b_iQ_9.js`).then(e=>e.i);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([49,1,50,9])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0),e(async()=>{let{applyThemeOverrides:e}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{applyThemeOverrides:e}},__vite__mapDeps([50,1,9])).then(({applyThemeOverrides:e})=>e()).catch(()=>void 0);let l=i.createAgentHandle();l.onEvent(t=>{t.type!==`tool_use_start`&&t.type!==`tool_result`||e(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([55,9,56])).then(({playCue:e})=>e(t.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0)});let u=new V({thread:t.thread,agent:l,resolveTelemetryContext:()=>{let e=a();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:t=>{e(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-DHV6R4En.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([57,9,36,1,58,2,13,59,60,11,12,10,14,52,53])).then(async({consumeVoiceSubmission:n,speakReplyMarkdown:r})=>{if(!n())return;let{endVoiceTurn:i,setTtsActive:a}=await e(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([55,9,56]));try{if(t?.content){a(!0);try{await r(t.content)}finally{a(!1)}}}finally{i()}}).catch(()=>void 0)},onProcessingChange:e=>{t.frame.toggleAttribute(`data-processing`,e),t.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,e),e||o?.()},onBusyPhaseChange:e=>{t.inputCard.querySelector(`slicc-send-button`)?.setAttribute(`phase`,e)},onMessageDisposed:e=>{let t=c.get(e);t&&(re(t),c.delete(e))},onMessageRendered:(e,t)=>{let n=t[0];n&&c.set(e.id,ne(n,(e,t)=>{let n={type:`sprinkle`,sprinkleName:`inline`,timestamp:new Date().toISOString(),body:{action:e,data:t}};s?.intercept?.(n)||i.sendSprinkleLick(`inline`,{action:e,data:t})}))},onQueuedChange:e=>{t.queuedStack.setMessages(e)},onToolUiAction:(e,t,n)=>{i.sendToolUiAction(e,t,n)},onQueuedCancel:e=>{let t=i.selectedScoopJid;t&&i.deleteQueuedMessage(t,e).catch(()=>void 0)}});return t.queuedStack.addEventListener(`slicc-queued-remove`,e=>{let t=e.detail?.id;if(!t)return;u.removeQueuedMessage(t);let n=i.selectedScoopJid;n&&i.deleteQueuedMessage(n,t).catch(()=>void 0)}),{controller:u,agentHandle:l}}function dt(t){let{boot:n,client:r,agentHandle:i,openReader:a,log:o}=t,{refs:s}=n;e(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-DJEXeUOp.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([61,2,36,1])).then(({createPlaceholderRefresher:e})=>{t.setRefreshPlaceholder(e({inputCard:s.inputCard,getMessages:()=>n.getController()?.getMessages()??[],defaultPlaceholder:s.inputCard.getAttribute(`placeholder`)??`Ask sliccy, or describe a change…`}))}),(async()=>{try{if(at(n.wiring.pendingUrlContext,window))return;let{SessionStore:r}=await e(async()=>{let{SessionStore:e}=await import(`./session-store-DAM8GRJ0.js`);return{SessionStore:e}},[]),i=new r;await i.init();let a=await i.load(`session-cone`);a&&a.messages.length>0&&!n.getSelected()&&(n.getController()?.loadMessages(a.messages),t.triggerPlaceholder())}catch(e){o.warn(`WC session hydration failed`,e)}})();let c=null;return e(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-DU0svqb7.js`);return{wireWcAttach:e}},__vite__mapDeps([62,2,12,10,43,1])).then(({wireWcAttach:n})=>{c=n({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:a,openWriter:t.openWriter,listConversations:async()=>{let{readSessionsIndex:t}=await e(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-DdYYo55y.js`).then(e=>e.o);return{readSessionsIndex:e}},__vite__mapDeps([33,1,2,4,5,6,7,34,8,9,35,31,36]));return(await t(await a())).map(e=>({id:e.filename,label:e.title,sub:`${e.messageCount} turns`}))},log:o})}).catch(e=>o.error(`WC add-menu wiring failed`,e)),s.inputCard.addEventListener(`submit`,t=>{let r=ce(t);if(!r)return;let i=t.detail?.source===`dictation`;i&&(e(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-DHV6R4En.js`);return{markVoiceSubmission:e}},__vite__mapDeps([57,9,36,1,58,2,13,59,60,11,12,10,14,52,53])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),e(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([55,9,56])).then(({beginVoiceTurn:e,playCue:t})=>{e(),t(`sent`)}).catch(()=>void 0)),n.getController()?.sendUserMessage(r,c?.take(),{dictation:i}),s.inputCard.clear?.();let a=n.getSelected()?.jid;a&&(s.switcher.setAttribute(`attention`,a),n.wiring.lastActivity.set(a,r.slice(0,600)))}),s.inputCard.addEventListener(`stop`,()=>{n.getController()?.processing&&i.stop()}),e(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=>o.error(`WC history nav wiring failed`,e)),s.composerMeta.addEventListener(`thinking-change`,e=>{if(localStorage.getItem(`slicc_locked_effort_level`))return;let t=e.detail?.thinking,i=et(t),a=rt(t),o=n.getSelected();o&&i&&r.setScoopThinkingLevel(o.jid,i,a)}),{getAttachStage:()=>c}}function ft(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=Z(t.getScoops(),e.statuses,e.fills)})};return setInterval(n,15e3),n}function pt(t,n,r){let i=n.standalone;i&&e(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DunWpcR7.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:e})=>e({refs:t.refs,browser:i.browser,log:r})).catch(e=>r.error(`WC browser overlay wiring failed`,e))}function mt(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)}),gt({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function ht(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 gt(t){let n=new Map,r=new Set;t.switcher.addEventListener(`pointerover`,i=>{let a=i.target?.closest?.(`slicc-pill.scoop`);if(!a||!t.switcher.contains(a))return;let o=a.dataset.k??``,s=t.getScoops().find(e=>e.jid===o);if(!s)return;let c=t.lastActivity.get(o)??``,l=n.get(o);if(l&&l.activity===c){a.title=l.tip;return}a.title||=s.isCone?`sliccy`:s.name,!(!c||r.has(o))&&(r.add(o),(async()=>{try{let r=await(t.labelFn??(await e(async()=>{let{quickLabel:e}=await import(`./quick-llm-DEwzmM-S.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([29,1,4,5,2,6,7,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,30,31]))).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});r&&(n.set(o,{activity:c,tip:r}),a.title=r)}finally{r.delete(o)}})())})}async function _t(t,n,r){let{RemoteTerminalView:i}=await e(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-C7x7cM1d.js`);return{RemoteTerminalView:e}},__vite__mapDeps([63,1,2,18,9,43,64,65,66,13,44,67,45,47,68])),{fetchSecretEnvVars:a}=await e(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-1E2r2H5F.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([69,9,11,1,2,12,10,13,14,15,16,17])),o=await a(),s=new i({client:n,cwd:`/`,env:Object.keys(o).length>0?o:void 0});await new Promise(e=>t.onClientReady(e)),await s.mount(r),globalThis.__slicc_terminal_view=s,window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function vt(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 yt(t,n,r,i){e(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-DW60QZxV.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([70,2,9,43,1])).then(async({installLeaderPermissionsSurface:i,installMountPendingConsumer:a})=>{let o=r.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await e(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-DMTDytlu.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([71,2,13]));i({runtimeMode:o,providers:await s(c()||o===`extension`||o===`extension-detached`)}),a({runShell:bt(t,n)})}).catch(e=>i.warn(`WC permissions surface wiring failed`,e))}function bt(t,n){let r=null,i=()=>(r||=(async()=>{await new Promise(e=>t.onClientReady(e));let{TerminalSessionClient:r}=await e(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-CbAduNfC.js`);return{TerminalSessionClient:e}},[]),i=new r({client:n,sid:`mount-drop-${Date.now()}`});return await i.open({cwd:`/workspace`}),i})().catch(e=>{throw r=null,e}),r);return async e=>(await i()).exec(e)}function xt(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 St(n,r,o,s={}){e(async()=>{let{initTimestampPreference:e}=await import(`./timestamp-preference-DgrTvVNx.js`).then(e=>e.a);return{initTimestampPreference:e}},__vite__mapDeps([72,1])).then(({initTimestampPreference:e})=>e()).catch(()=>void 0);let{refs:c}=n;n.setClient(r);let l=null,u=ft(n.wiring,r),d=()=>l?.(),f={intercept:null},{controller:p,agentHandle:m}=ut(c,r,()=>n.getSelected(),ht({boot:n,triggerPlaceholder:d,refreshStats:u}),f);n.setController(p),n.onClientReady(u);let h=ct(r),g=async()=>(await h()).reader;s.standalone?.runtimeMode!==`cherry`&&s.standalone?.runtimeMode!==`hosted-leader`&&lt(n,r,h,f,o);let _=dt({boot:n,client:r,agentHandle:m,setRefreshPlaceholder:e=>{l=e},triggerPlaceholder:d,openReader:g,openWriter:async()=>(await h()).writer,log:o});mt(n,r),pt(n,s,o),yt(n,r,s,o),n.setActivateSurface(Ze({fileTree:c.fileTree,termSurface:c.termSurface,memoryHost:c.memoryHost,monitor:c.monitor,openFs:g,openWriter:async()=>(await h()).writer,onKernelReady:e=>n.onClientReady(e),getMonitorDeps:()=>({getScoops:()=>r.getScoops(),isProcessing:e=>r.isProcessing(e),getCronTasks:async()=>{let{getAllCronTasks:t}=await e(async()=>{let{getAllCronTasks:e}=await import(`./db-ysOO0kLr.js`).then(e=>e.t);return{getAllCronTasks:e}},__vite__mapDeps([73,1]));return t()},getWebhooks:async()=>{let{getAllWebhooks:t}=await e(async()=>{let{getAllWebhooks:e}=await import(`./db-ysOO0kLr.js`).then(e=>e.t);return{getAllWebhooks:e}},__vite__mapDeps([73,1]));return t()},getMounts:async()=>{let{getAllMountEntries:t,loadMountHandle:n}=await e(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([74,1])),r=await t();return Promise.all(r.map(async e=>{if(e.descriptor.kind!==`local`)return e;try{let t=await(await n(e.descriptor.idbHandleKey))?.queryPermission?.({mode:`readwrite`});return{...e,valid:t===`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()=>r.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:nt(String(t))})}catch{}return n}catch{return[]}}}),mountTerminal:e=>_t(n,r,e),insertReference:e=>{let t=c.inputCard,n=t.value.trim();t.value=n?`${n} @${e}`:`@${e}`,t.focus()},log:o})),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}=st({refs:c,openVfs:h,client:r,getController:()=>n.getController(),getSelected:()=>n.getSelected(),selectScoop:n.selectScoop,clearSelection:n.clearSelection,log:o});v(),n.onClientReady(v),vt(n,r,y),h().then(async({reader:t})=>{let{installPreviewVfsResponder:n}=await e(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-Dhck1Brc.js`);return{installPreviewVfsResponder:e}},[]);n({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>t,logger:o})}).catch(e=>o.warn(`WC page-VFS support wiring failed`,e)),h().then(async({reader:t,writer:i})=>{let{createRemoteSprinkleVfs:a}=await e(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([75,35])),{wireWcSprinkles:l}=await e(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-Ce05-7PD.js`);return{wireWcSprinkles:e}},__vite__mapDeps([76,2,13])),u=await l({refs:c,client:r,fs:a({reader:t,writer:i}),instanceId:s.instanceId,onAttachImage:xt(_,o),log:o});if(n.onClientReady(()=>void u.resync()),s.standalone&&s.instanceId){let{wireWcTray:t}=await e(async()=>{let{wireWcTray:e}=await import(`./wc-tray-CLX4el5K.js`);return{wireWcTray:e}},__vite__mapDeps([77,2,3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,34,78,23,24,25,0,26,27,28,79,80,67,81,73,82,83,84,52,53,48,49,50])),i=u.zone.callbacks();await t({refs:c,client:r,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:()=>n.getController(),getSelectedJid:()=>n.getSelected()?.jid??`cone`,agentHandle:m,openFs:g,baseFloatLabel:s.standalone.baseFloatLabel,window,log:o})}}).catch(e=>o.error(`WC sprinkle/tray wiring failed`,e)),e(async()=>{let{wireWcNav:e}=await import(`./wc-nav-wVpt4FYo.js`);return{wireWcNav:e}},__vite__mapDeps([85,2,13,23,10,11,1,12,14,24,25,26,28,81,9,73])).then(({wireWcNav:e})=>e({refs:c,client:r,log:o})).catch(e=>o.error(`WC nav wiring failed`,e)),e(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-BWsih2Nz.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([86,9,13,43,1,87,59,60,11,2,12,10,14,52,53,88])).then(({getComposerSpeech:e,setComposerSpeechInstanceId:t})=>{let n=c.composer;t(s.instanceId),n.speech=e(),n.setAttribute(`ptt`,``)}).catch(e=>o.error(`WC push-to-talk wiring failed`,e)),e(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-WMi1eHMn.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([58,2,9,13,59,60,11,1,12,10,14,52,53])).then(({setSpeakAssetsInstanceId:e})=>e(s.instanceId)).catch(e=>o.error(`WC say warmup wiring failed`,e))}async function Ct(t,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:d}=await ee({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:f,DEFAULT_STANDALONE_LABEL:p}=await e(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-DeQPr3pd.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},__vite__mapDeps([89,11,1,2,12,10,13,14])),m=r===`standalone`||r===`electron-overlay`?await f():p,h=$(t,m);o&&_(o);let g=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,v=g?crypto.randomUUID():void 0;if(v&&typeof navigator<`u`&&navigator.serviceWorker){let e=navigator.serviceWorker,t={type:Se,nonce:v},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 b=De({realCdpTransport:a,instanceId:o,callbacks:Q(h.wiring),localApiBaseUrl:s,bridgeToken:c,syncFsBridgeEnabled:g,syncFsChannelNonce:v,localLickWsUrl:l,extensionDelegateId:u,onWorkerScriptError:()=>{y()}});xe({send:e=>b.client.sendRaw(e)}),d?.(b.client),St(h,b.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,baseFloatLabel:m}});let{setupSudoStandalone:x}=await e(async()=>{let{setupSudoStandalone:e}=await import(`./setup-sudo-CpuvPX2I.js`).then(e=>e.n);return{setupSudoStandalone:e}},__vite__mapDeps([90,1,2]));await x({log:n}),await b.ready,h.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:b.client.getScoops().length});let{consumeAutoPrompt:S}=await e(async()=>{let{consumeAutoPrompt:e}=await import(`./auto-prompt-Mj-vUQeB.js`);return{consumeAutoPrompt:e}},[]),C=S(window.location.search);C&&(h.getController()?.sendUserMessage(C),n.info(`Auto-prompt submitted`,{length:C.length}))}export{St as attachWcClient,Q as createWcLiveCallbacks,Ct as mountWcUiLive,P as n,$ as prepareWcShell,V as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DmJSNs0I.js","assets/rolldown-runtime-aKtaBQYM.js","assets/panel-rpc-handlers-g-IcBZgz.js","assets/preload-helper-Czpn1I53.js","assets/account-store-0KfyaB_Y.js","assets/compat-DyT25qXb.js","assets/models-CzSI8IsT.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/context-compaction-dcYYajWb.js","assets/logger-DDBAeTLF.js","assets/src-CS5gSDhT.js","assets/proxied-fetch-DETjVL-j.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-D2k1IxFk.js","assets/secrets-bridge-client-CONYX8PU.js","assets/port-bridge-client-CdvMlimf.js","assets/tool-ui-DfXu6quJ.js","assets/providers-C5IxOdJy.js","assets/bedrock-camp-BEi8MYUS.js","assets/transform-messages-fFaW-DLG.js","assets/provider-settings-CLFfVTte.js","assets/tray-runtime-config-DJIIJaBR.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-CyJIKXH4.js","assets/clipboard-DuHpK59o.js","assets/telemetry-C8rZr13D.js","assets/tray-join-url-BIvzbiFR.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/wc-permissions-registry-Blyunq37.js","assets/tray-leader-DcLymd_E.js","assets/db-ysOO0kLr.js","assets/tray-sync-protocol-CVdiCvfU.js","assets/hosted-config-apply-uAym2aS5.js","assets/theme-engine-jfuTMXZM.js","assets/legacy-styles-DcRu2WCJ.js","assets/tray-leave-runtime-lJcLlwtm.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{P as t,R as n,d as r}from"./account-store-0KfyaB_Y.js";import{n as i}from"./attachments-CByeG2Ru.js";import{t as a}from"./logger-DDBAeTLF.js";import{n as o}from"./base64-DpPqYZJF.js";import{a as s,l as c,n as l,o as u,r as d,u as f}from"./tray-sync-protocol-CVdiCvfU.js";import{o as p,t as m}from"./proxied-fetch-DETjVL-j.js";import{d as h,i as g,n as _,r as v}from"./tray-runtime-config-DJIIJaBR.js";import{r as y}from"./panel-rpc-DmJSNs0I.js";import{a as b,n as x,t as S}from"./tray-follower-status-CyJIKXH4.js";import"./provider-settings-CLFfVTte.js";import"./handoff-link-CfgH86mb.js";import{t as ee}from"./remote-cdp-transport-DOoXIxy3.js";import"./browser-COVn7LPD.js";import{i as C,n as w,t as te}from"./tray-leader-DcLymd_E.js";import{t as ne}from"./synthetic-cdp-transport-DLIt5SkY.js";import{t as re}from"./wc-scoop-color-CByZNEJo.js";import{a as ie,i as T,n as E,o as ae,r as oe,t as D}from"./page-follower-tray-DFeLlotx.js";a(`scoops.tray-leave`),a(`scoops.tray-join`);var O=null;function k(e){O=e}function A(){return O?.()??[]}var se=`slicc.leaderTrayFollowers`;function j(e,t=globalThis.localStorage){try{t?.setItem(se,JSON.stringify(e))}catch{}}function ce(e){if(e.userName)return`${e.providerId}:${e.userName}`;if(e.accessToken)try{let t=JSON.parse(atob(e.accessToken.split(`.`)[1].replace(/-/g,`+`).replace(/_/g,`/`))),n=t.email??t.user_id??t.sub;if(n)return`${e.providerId}:${n}`}catch{}return null}async function le(){try{let e=r().filter(e=>!e.loggedOut),t=[`adobe`,`github`].map(t=>e.find(e=>e.providerId===t)).find(Boolean)??e[0],n=t?ce(t):null;if(!n)return`00000000`;let i=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(n));return Array.from(new Uint8Array(i,0,4),e=>e.toString(16).padStart(2,`0`)).join(``)}catch{return`00000000`}}async function M(t){let{instanceId:n,browser:r,remoteCdpBridge:i,remoteCdpPushChannel:a,getLeader:o,performTrayLeaveLocally:s,window:c}=t,{installPanelRpcHandler:l,createPanelRpcEventEmitter:u}=await e(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await import(`./panel-rpc-DmJSNs0I.js`).then(e=>e.i);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},__vite__mapDeps([0,1])),{createStandalonePanelRpcHandlers:d}=await e(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-g-IcBZgz.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0,21,22,23,24,25,26,27,28,29,30,31,32,33])),{getLeaderPermissionsSurface:f}=await e(async()=>{let{getLeaderPermissionsSurface:e}=await import(`./wc-permissions-registry-Blyunq37.js`).then(e=>e.r);return{getLeaderPermissionsSurface:e}},__vite__mapDeps([34,1])),p=u({instanceId:n}),m=l({instanceId:n,handlers:d({resetTray:async()=>{let e=o();if(!e)throw Error(`no active tray session to reset`);return await e.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await s({workerBaseUrl:e,requestId:t}),joinTray:({joinUrl:e})=>(h(c.localStorage,e),c.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e}})),{joinUrl:e}),emitEvent:(e,t)=>p.emit(e,t),emitCherrySliccEvent:(e,t,n)=>o()?.sync.emitCherrySliccEvent(e,t,n)??!1,mintPreview:async({entryPath:t,servedRoot:n,bridge:r,noBridge:i,maxTabs:a,quiet:s,webhookId:c})=>{let l=o()?.currentLeaderSync;if(!l)throw Error(`serve: no active leader tray; cannot mint preview`);let{getLeaderTrayRuntimeStatus:u}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-DcLymd_E.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([35,1,10,12,3,13,11,14,15,24,25,36])),d=u().session;if(!d)throw Error(`serve: leader tray has no active session`);let f=new URL(d.controllerUrl).pathname.split(`/`).pop()??``,{CHERRY_RUNTIME_TAG:p}=await e(async()=>{let{CHERRY_RUNTIME_TAG:e}=await import(`./tray-sync-protocol-CVdiCvfU.js`).then(e=>e.s);return{CHERRY_RUNTIME_TAG:e}},__vite__mapDeps([37,1,10,11])),{mintPreviewViaWorker:m}=await e(async()=>{let{mintPreviewViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{mintPreviewViaWorker:e}},[]),h=l.getConnectedFollowers().some(e=>e.runtime===p),g=!i&&(r||h),_=!i&&r,v=await le(),{url:y,previewToken:b}=await m({workerBaseUrl:d.workerBaseUrl,trayId:d.trayId,controllerToken:f,servedRoot:n,entryPath:t,allowLive:g,bridge:_,maxTabs:a,webhookId:c,userHash:v}),x=t?t.split(`/`).pop()??`Preview`:`Preview`;return l.registerMintedPreview(b,{url:y,title:x,quiet:s??!1}),l.broadcastPreviewOpen(y),{url:y,pushed:l.getConnectedFollowers().length,previewToken:b}},revokePreview:async({previewToken:t})=>{let n=o()?.currentLeaderSync;if(!n)throw Error(`serve --stop: no active leader tray; cannot revoke preview`);let{getLeaderTrayRuntimeStatus:r}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-DcLymd_E.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([35,1,10,12,3,13,11,14,15,24,25,36])),i=r().session;if(!i)throw Error(`serve --stop: leader tray has no active session`);let a=new URL(i.controllerUrl).pathname.split(`/`).pop()??``,{revokePreviewViaWorker:s}=await e(async()=>{let{revokePreviewViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{revokePreviewViaWorker:e}},[]),c=await s({workerBaseUrl:i.workerBaseUrl,trayId:i.trayId,controllerToken:a,previewToken:t});return n.dropMintedPreview(t),c},listPreviews:async()=>{let{getLeaderTrayRuntimeStatus:t}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-DcLymd_E.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([35,1,10,12,3,13,11,14,15,24,25,36])),n=t().session;if(!n)throw Error(`serve: leader tray has no active session`);let r=new URL(n.controllerUrl).pathname.split(`/`).pop()??``,{listPreviewsViaWorker:i}=await e(async()=>{let{listPreviewsViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{listPreviewsViaWorker:e}},[]);return await i({workerBaseUrl:n.workerBaseUrl,trayId:n.trayId,controllerToken:r})},listRemoteTargets:()=>r.listAllTargets(),remoteCdp:i,getPermissionsSurface:()=>f()})});c.addEventListener(`beforeunload`,()=>{m(),p.dispose(),i.disposeAll(),a?.close()},{once:!0})}async function N(r){let{log:i}=r;await new Promise(e=>setTimeout(e,5e3));try{let r=await fetch(p(`/api/hosted-bootstrap`),{signal:AbortSignal.timeout(1e4),headers:m()});if(!r.ok)return;let a=await r.json(),o=a.accounts??(a.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:a.adobeImsToken}]:[]);a.model?localStorage.setItem(`selected-model`,a.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`),a.effortLevel?localStorage.setItem(`slicc_locked_effort_level`,a.effortLevel):localStorage.removeItem(`slicc_locked_effort_level`);let[{applyHostedAccounts:s,prewarmHostedModels:c},l]=await Promise.all([e(()=>import(`./hosted-config-apply-uAym2aS5.js`),__vite__mapDeps([38,10])),e(()=>import(`./provider-settings-CLFfVTte.js`).then(e=>e.t),__vite__mapDeps([23,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,0,21,22,24,25,26,27,28,29]))]);await c(o,{getRefreshModels:e=>l.getProviderConfig(e).refreshModels});let u=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await s(o,{saveOAuthAccount:n,addAccount:l.addAccount,removeAccount:t,currentProviderIds:()=>l.getAccounts().map(e=>e.providerId),previouslyManaged:()=>u}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(o.map(e=>e.providerId))),i.info(`hosted-leader: cone config applied`,{count:o.length})}catch(e){i.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}}function P(e,t){if(!e||!t||!e.startsWith(`/`)||t===`/`||/%2[eE]/.test(e)||e.split(`/`).some(e=>e===`.`||e===`..`))return!1;let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(n+`/`)}var F=64*1024;async function I(e,t,n){let{reqId:r,servedRoot:i,asText:a}=e,s=e.vfsPath;if(!P(s,i)){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}try{if((await n.stat(s)).type===`directory`&&(s=s.replace(/\/?$/,`/`)+`index.html`,!P(s,i))){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}}catch{}let c,l;try{a?(c=await n.readFile(s,{encoding:`utf-8`}),l=`utf-8`):(c=o(await n.readFile(s,{encoding:`binary`})),l=`base64`)}catch(e){e?.code===`ENOENT`?t.send({type:`preview.response`,reqId:r,ok:!1,status:404}):t.send({type:`preview.response`,reqId:r,ok:!1,status:500,reason:String(e?.message??e)});return}let u=R(s),d=L(c,F);for(let e=0;e<d.length;e++)t.send({type:`preview.response`,reqId:r,ok:!0,mime:u,chunkIndex:e,totalChunks:d.length,content:d[e],encoding:l})}function L(e,t){if(e.length<=t)return[e];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function R(e){return/\.html?$/i.test(e)?`text/html`:/\.css$/i.test(e)?`text/css`:/\.m?js$/i.test(e)?`application/javascript`:/\.json$/i.test(e)?`application/json`:/\.svg$/i.test(e)?`image/svg+xml`:/\.png$/i.test(e)?`image/png`:/\.jpe?g$/i.test(e)?`image/jpeg`:/\.gif$/i.test(e)?`image/gif`:/\.webp$/i.test(e)?`image/webp`:/\.ico$/i.test(e)?`image/x-icon`:/\.woff2$/i.test(e)?`font/woff2`:/\.woff$/i.test(e)?`font/woff`:/\.ttf$/i.test(e)?`font/ttf`:/\.mp4$/i.test(e)?`video/mp4`:/\.webm$/i.test(e)?`video/webm`:/\.mp3$/i.test(e)?`audio/mpeg`:/\.pdf$/i.test(e)?`application/pdf`:/\.xml$/i.test(e)?`application/xml`:/\.wasm$/i.test(e)?`application/wasm`:`application/octet-stream`}var z=3e4,B={target:`preview-target`,session:`preview-session`,frame:`preview-frame`,loader:`preview-loader`},V=class extends ne{connId;sendToWorker;nextId=1;pending=new Map;constructor(e){super({targetUrl:e.targetUrl,targetOrigin:e.targetOrigin,title:e.title,ids:e.ids??B}),this.connId=e.connId,this.sendToWorker=e.send}async connect(e){this._state=`connected`}onCloseTarget(){this.sendToWorker({type:`bridge.close`,connId:this.connId})}disconnect(){for(let[e,t]of this.pending)clearTimeout(t.timer),t.reject(Error(`PreviewBridgeCdpTransport disconnected`));this.pending.clear(),this._state=`disconnected`}async forward(e,t,n,r=z){let i=this.nextId++;return new Promise((a,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`PreviewBridge CDP timed out after ${r}ms: ${e}`))},r);this.pending.set(i,{resolve:e=>{clearTimeout(s),a(e)},reject:e=>{clearTimeout(s),o(e)},timer:s}),this.sendToWorker({type:`bridge.cdp.request`,connId:this.connId,id:i,method:e,params:t,sessionId:n})})}deliverResponse(e,t){let n=this.pending.get(e);n&&(this.pending.delete(e),clearTimeout(n.timer),t.error?n.reject(Error(`PreviewBridge CDP error: ${t.error.message} (${t.error.code})`)):n.resolve(t.result??{}))}};a(`lick-manager`);var H=new Set([`navigate`,`discovery`]),U=class{runtimes=new Map;dirty=!1;setTargets(e,t){this.runtimes.set(e,t),this.dirty=!0}removeRuntime(e){this.runtimes.delete(e)&&(this.dirty=!0)}getEntries(){this.dirty=!1;let e=[];for(let[t,n]of this.runtimes)for(let r of n)e.push({targetId:`${t}:${r.targetId}`,localTargetId:r.targetId,runtimeId:t,title:r.title,url:r.url,isLocal:!1,kind:r.kind??`browser`,capabilities:r.capabilities});return e}hasChanged(){return this.dirty}getRuntimeIds(){return[...this.runtimes.keys()]}},W=a(`tray-leader-sync`);function ue(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function G(e,t){switch(e){case`extension`:return`extension follower`;case`standalone`:return`standalone follower`;case`electron`:return`Electron follower`;case`ios`:return`iOS follower`;default:return t?`follower (${t})`:`follower`}}function K(e){return e.kind===`cherry`}function de(e,t){return e.filter(e=>e.kind===`preview`?!1:!K(e)||!t.requireNetwork||e.capabilities?.network===!0)}var fe=class e{options;followers=new Map;registry=new U;runtimeToBootstrap=new Map;pendingCDPRoutes=new Map;cdpChunkBuffers=new Map;remoteTransports=new Map;pendingTabOpenRoutes=new Map;tabOpenResolvers=new Map;pendingFsRoutes=new Map;fsResolvers=new Map;mintMap=new Map;bridgeConns=new Map;previewLickLastEmitAt=new Map;static PREVIEW_LICK_THROTTLE_MS=2e3;constructor(e){this.options=e}addFollower(e,t,n){this.removeFollower(e);let r=l(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new ie({sendPing:()=>r.send({type:`ping`}),onDead:()=>{W.warn(`Follower keepalive dead, removing follower`,{bootstrapId:e}),this.removeFollower(e),this.options.onFollowerDead?.(e)}});a.start(),this.followers.set(e,{bootstrapId:e,sync:r,unsubscribe:i,keepalive:a,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:Date.now(),floatType:ue(n?.runtime)}),W.info(`Follower added to sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size),r.send({type:`hello`,protocolVersion:1}),this.sendSnapshotToFollower(e),this.sendScoopsListToFollower(e),this.sendSprinklesListToFollower(e);let o=this.getFollowerBroadcastEntries();o.length>0&&r.send({type:`targets.registry`,targets:o})}removeFollower(e){let t=this.followers.get(e);if(t){t.keepalive.stop(),t.unsubscribe(),t.sync.close(),this.followers.delete(e),this.followerBroadcastErrorLogAt.delete(e);for(let[t,n]of this.runtimeToBootstrap)if(n===e){this.cleanupRemoteTransports(t),this.registry.removeRuntime(t),this.runtimeToBootstrap.delete(t);break}this.registry.hasChanged()&&this.broadcastTargetRegistry(),W.info(`Follower removed from sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size)}}followerBroadcastErrorLogAt=new Map;static BROADCAST_ERROR_THROTTLE_MS=6e4;broadcastToAllFollowers(t){let n=performance.now();for(let[r,i]of this.followers)try{i.sync.send(t),this.followerBroadcastErrorLogAt.delete(r)}catch(i){n-(this.followerBroadcastErrorLogAt.get(r)??-1/0)>e.BROADCAST_ERROR_THROTTLE_MS&&(this.followerBroadcastErrorLogAt.set(r,n),W.error(`Broadcast send to follower failed (channel may be stuck)`,{bootstrapId:r,messageType:t.type,error:i instanceof Error?i.message:String(i)}))}}broadcastEvent(e){if(this.followers.size===0)return;let t={type:`agent_event`,event:e,scoopJid:this.options.getScoopJid()};this.broadcastToAllFollowers(t)}broadcastUserMessage(e,t,n){if(this.followers.size===0)return;let r={type:`user_message_echo`,text:e,messageId:t,scoopJid:this.options.getScoopJid(),attachments:n?.length?i(n):n};this.broadcastToAllFollowers(r)}broadcastStatus(e){if(this.followers.size===0)return;let t={type:`status`,scoopStatus:e};this.broadcastToAllFollowers(t)}async sendSnapshotToFollower(e,t){let n=this.followers.get(e);if(!n)return;let r=t??n.selectedScoopJid??this.options.getScoopJid(),i;if(this.options.getMessagesForScoop&&r!==this.options.getScoopJid())try{i=await Promise.resolve(this.options.getMessagesForScoop(r))}catch(e){W.warn(`getMessagesForScoop failed, falling back to active scoop`,{targetJid:r,error:e instanceof Error?e.message:String(e)}),i=this.options.getMessages()}else i=this.options.getMessages();n.selectedScoopJid=r,u(n.sync,i,r),W.debug(`Snapshot sent to follower`,{bootstrapId:e,messageCount:i.length,scoopJid:r})}sendScoopsListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getScoops;if(n)try{let e=n(),r=this.options.getScoopJid();t.sync.send({type:`scoops.list`,scoops:e,activeScoopJid:r})}catch(t){W.warn(`Failed to send scoops.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}sendSprinklesListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getSprinkles;if(n)try{let e=n();t.sync.send({type:`sprinkles.list`,sprinkles:e})}catch(t){W.warn(`Failed to send sprinkles.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}broadcastScoopsList(){if(this.followers.size===0)return;let e=this.options.getScoops;if(!e)return;let t;try{t=e()}catch(e){W.warn(`Failed to compute scoops list`,{error:e instanceof Error?e.message:String(e)});return}let n=this.options.getScoopJid(),r={type:`scoops.list`,scoops:t,activeScoopJid:n};this.broadcastToAllFollowers(r)}broadcastSprinklesList(){if(this.followers.size===0)return;let e=this.options.getSprinkles;if(!e)return;let t;try{t=e()}catch(e){W.warn(`Failed to compute sprinkles list`,{error:e instanceof Error?e.message:String(e)});return}let n={type:`sprinkles.list`,sprinkles:t};this.broadcastToAllFollowers(n)}broadcastSprinkleUpdate(e,t){if(this.followers.size===0)return;let n={type:`sprinkle.update`,sprinkleName:e,data:t};this.broadcastToAllFollowers(n)}broadcastTheme(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`theme.apply`,themeJson:e})}broadcastSprinkleReloaded(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`sprinkle.reloaded`,sprinkleName:e})}broadcastPreviewOpen(e){if(this.followers.size===0)return;let t=`prv-${crypto.randomUUID()}`;this.broadcastToAllFollowers({type:`preview.open`,requestId:t,url:e})}static SPRINKLE_CHUNK_SIZE=32*1024;static SPRINKLE_CHUNK_THRESHOLD=64*1024;async handleSprinkleFetch(t,n,r){let i=this.followers.get(t);if(!i)return;let a=this.options.readSprinkleContent;if(!a){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Leader has no sprinkle content reader`});return}let o=null;try{o=await Promise.resolve(a(r))}catch(e){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:e instanceof Error?e.message:String(e)});return}if(o==null){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Sprinkle not found: ${r}`});return}if(o.length<=e.SPRINKLE_CHUNK_THRESHOLD){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:o});return}let s=e.SPRINKLE_CHUNK_SIZE,c=Math.ceil(o.length/s);for(let e=0;e<c;e++){let t=o.slice(e*s,(e+1)*s);i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:t,chunkIndex:e,totalChunks:c})}}handleFollowerUserMessage(e,t){W.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?i(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n)}handleFollowerSprinkleLick(e,t){W.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=G(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){W.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerLick(e,t){let n=t.event;if(!n||!H.has(n.type)){W.warn(`Rejecting malformed or non-forwardable lick from follower`,{bootstrapId:e,type:n?.type});return}let r=this.followers.get(e),{targetScoop:i,...a}=n,o={...a,originFollowerId:e,originLabel:G(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){W.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerTargetsAdvertise(e,t){W.info(`Follower targets advertised`,{bootstrapId:e,runtimeId:t.runtimeId,targetCount:t.targets.length});for(let e of[...this.remoteTransports.keys()]){let n=e.substring(0,e.indexOf(`:`));n!==`leader`&&!this.runtimeToBootstrap.has(n)&&n!==t.runtimeId&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),W.debug(`Cleaned up orphaned remote transport on advertise`,{key:e}))}this.runtimeToBootstrap.set(t.runtimeId,e),this.registry.setTargets(t.runtimeId,t.targets),this.broadcastTargetRegistry()}handleFollowerMessage(e,t){if(t.type!==`hello`){let t=this.followers.get(e);t&&t.peerProtocolVersion===void 0&&!t.legacyPeerLogged&&(t.legacyPeerLogged=!0,W.info(`Follower sent no hello — legacy peer (pre-versioning build)`,{bootstrapId:e}))}switch(t.type){case`user_message`:this.handleFollowerUserMessage(e,t);break;case`abort`:W.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:W.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{W.info(`Follower selected scoop`,{bootstrapId:e,scoopJid:t.scoopJid});let n=this.followers.get(e);n&&(n.selectedScoopJid=t.scoopJid,this.sendSnapshotToFollower(e,t.scoopJid));break}case`sprinkles.refresh`:W.info(`Follower requested sprinkles refresh`,{bootstrapId:e}),this.sendSprinklesListToFollower(e);break;case`sprinkle.fetch`:this.handleSprinkleFetch(e,t.requestId,t.sprinkleName);break;case`sprinkle.lick`:this.handleFollowerSprinkleLick(e,t);break;case`lick`:this.handleFollowerLick(e,t);break;case`targets.advertise`:this.handleFollowerTargetsAdvertise(e,t);break;case`cdp.request`:{let{requestId:n,targetRuntimeId:r,localTargetId:i,method:a,params:o,sessionId:s}=t;r===`leader`?this.executeLocalCDP(n,i,a,o,s,e):this.forwardCDPRequest(n,r,i,a,o,s,e);break}case`cdp.response`:this.handleCDPResponse(t);break;case`cdp.event`:this.handleCDPEvent(e,t.method,t.params,t.sessionId);break;case`tab.open`:{let{requestId:n,targetRuntimeId:r,url:i}=t;r===`leader`?this.executeLocalTabOpen(n,i,e):this.forwardTabOpen(n,r,i,e);break}case`tab.opened`:this.handleTabOpenResponse(t.requestId,t.targetId);break;case`tab.open.error`:this.handleTabOpenError(t.requestId,t.error);break;case`fs.request`:{let{requestId:n,targetRuntimeId:r,request:i}=t;r===`leader`?this.executeLocalFs(n,i,e):this.forwardFsRequest(n,r,i,e);break}case`fs.response`:this.handleFsResponse(t.requestId,t.response);break;case`cherry.host_event`:this.routeCherryHostEvent(e,t);break;case`ping`:{let t=this.followers.get(e);t&&(t.keepalive.receivePing(),t.lastActivity=Date.now(),t.sync.send({type:`pong`}));break}case`pong`:{let t=this.followers.get(e);t&&(t.keepalive.receivePong(),t.lastActivity=Date.now());break}case`hello`:{let n=this.followers.get(e);n&&(n.peerProtocolVersion=t.protocolVersion),t.protocolVersion>1?W.warn(`Follower speaks a newer tray sync protocol — update this build`,{bootstrapId:e,followerVersion:t.protocolVersion,ourVersion:1}):W.info(`Follower hello`,{bootstrapId:e,protocolVersion:t.protocolVersion});break}default:{let n=f(t);W.warn(`Unknown follower message type — skewed follower?`,{bootstrapId:e,type:n.type});break}}}setLocalTargets(e){this.registry.setTargets(`leader`,e),this.registry.hasChanged()&&this.broadcastTargetRegistry()}broadcastTargetRegistry(){if(this.followers.size===0)return;let e={type:`targets.registry`,targets:this.getFollowerBroadcastEntries()};this.broadcastToAllFollowers(e)}getTargets(){return this.getConnectedEntries()}getFollowerBroadcastEntries(){return this.getConnectedEntries().filter(e=>e.kind!==`preview`)}getConnectedEntries(){let e=this.registry.getEntries().filter(e=>{if(e.runtimeId===`leader`)return!0;let t=this.runtimeToBootstrap.get(e.runtimeId);return t?this.followers.has(t):!1}),t=[];for(let[e,n]of this.bridgeConns)t.push({targetId:`preview:${n.previewToken}:${e}`,localTargetId:e,runtimeId:`preview`,title:n.title,url:n.url,isLocal:!1,kind:`preview`});return[...e,...t]}createRemoteTransport(e,t){if(e===`preview`){let e=t.indexOf(`:`);if(e===-1)throw Error(`Invalid preview localTargetId format: expected "<token>:<connId>", got "${t}"`);let n=t.slice(e+1),r=this.getBridgeTransport(n);if(!r)throw Error(`Preview bridge connection "${n}" not found`);return r}let n=new ee({sendCDPRequest:(n,r,i,a)=>{let o=this.runtimeToBootstrap.get(e),s=o?this.followers.get(o):void 0;if(!s){this.remoteTransports.get(`${e}:${t}`)?.handleResponse(n,void 0,`Target runtime "${e}" not connected`);return}this.pendingCDPRoutes.set(n,{requesterBootstrapId:`__leader__`,requestId:n}),s.sync.send({type:`cdp.request`,requestId:n,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}cleanupRemoteTransports(e){let t=`${e}:`;for(let e of[...this.remoteTransports.keys()])e.startsWith(t)&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),W.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){W.warn(`onRemoteTransportsCleaned handler threw`,{runtimeId:e,error:t instanceof Error?t.message:String(t)})}}getConnectedFollowers(){return[...this.runtimeToBootstrap.entries()].map(([e,t])=>{let n=this.followers.get(t);return{runtimeId:e,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:n?.lastActivity,floatType:n?.floatType}})}canRuntimeServeTeleport(e,t){if(t.runtime===`slicc-cherry`)return!1;let n=this.registry.getEntries().filter(t=>t.runtimeId===e);return n.length===0||de(n,{requireNetwork:!0}).length>0}getBestFollowerForTeleport(){let e=[];for(let[t,n]of this.runtimeToBootstrap){let r=this.followers.get(n);r&&this.canRuntimeServeTeleport(t,r)&&e.push({runtimeId:t,bootstrapId:n,floatType:r.floatType,lastActivity:r.lastActivity})}if(e.length===0)return null;let t=e.filter(e=>e.floatType===`standalone`),n=t.length>0?t:e;return n.sort((e,t)=>t.lastActivity-e.lastActivity),n[0]}get hasFollowers(){return this.followers.size>0}stop(){for(let e of[...this.followers.keys()])this.removeFollower(e);for(let e of this.bridgeConns.values())e.transport.disconnect();this.bridgeConns.clear(),this.mintMap.clear(),this.previewLickLastEmitAt.clear()}async executeLocalCDP(e,t,n,r,i,a){let o=this.followers.get(a);if(!o)return;let c=this.options.browserTransport;if(!c){o.sync.send({type:`cdp.response`,requestId:e,error:`Leader has no browser transport`});return}try{let t=await c.send(n,r,i);s(o.sync,e,t)}catch(t){o.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardCDPRequest(e,t,n,r,i,a,o){let s=this.runtimeToBootstrap.get(t),c=s?this.followers.get(s):void 0,l=this.followers.get(o);if(!c){l&&l.sync.send({type:`cdp.response`,requestId:e,error:`Target runtime "${t}" not connected`});return}this.pendingCDPRoutes.set(e,{requesterBootstrapId:o,requestId:e}),c.sync.send({type:`cdp.request`,requestId:e,localTargetId:n,method:r,params:i,sessionId:a})}handleCDPResponse(e){let{requestId:t}=e,n=this.pendingCDPRoutes.get(t);if(!n)return;let r=d(this.cdpChunkBuffers,e);if(!r)return;if(this.pendingCDPRoutes.delete(t),n.requesterBootstrapId===`__leader__`){for(let e of this.remoteTransports.values())e.handleResponse(t,r.result,r.error);return}let i=this.followers.get(n.requesterBootstrapId);i&&s(i.sync,t,r.result,r.error)}handleCDPEvent(e,t,n,r){let i;for(let[t,n]of this.runtimeToBootstrap)if(n===e){i=t;break}if(!i)return;let a=`${i}:`;for(let[e,r]of this.remoteTransports)e.startsWith(a)&&r.handleEvent(t,n)}runtimeIdForBootstrap(e){for(let[t,n]of this.runtimeToBootstrap)if(n===e)return t}routeCherryHostEvent(e,t){if(!c(t))return;let n=this.options.onCherryHostEvent;if(!n){W.debug(`cherry.host_event received but no onCherryHostEvent wired`,{bootstrapId:e,name:t.name});return}let r=this.runtimeIdForBootstrap(e);try{n(r,t.name,t.detail)}catch(n){W.warn(`Failed to route cherry.host_event to cone`,{bootstrapId:e,name:t.name,error:n instanceof Error?n.message:String(n)})}}emitCherrySliccEvent(e,t,n){let r=e.indexOf(`:`),i=r>=0?e.slice(0,r):e,a=this.runtimeToBootstrap.get(i),o=a?this.followers.get(a):void 0;return o?o.sync.send({type:`cherry.slicc_event`,targetId:e,name:t,detail:n}):(W.warn(`emitCherrySliccEvent: owning follower not connected`,{targetId:e,name:t}),!1)}canRuntimeOpenTab(e){let t=this.registry.getEntries().filter(t=>t.runtimeId===e);return t.length===0||t.some(e=>!K(e))}openRemoteTab(e,t){let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.reject(Error(`Target runtime "${e}" not connected`));if(!this.canRuntimeOpenTab(e))return Promise.reject(Error(`Target runtime "${e}" is a cherry host that cannot open tabs`));let i=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.tabOpenResolvers.set(i,{resolve:e,reject:n}),this.pendingTabOpenRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i}),r.sync.send({type:`tab.open`,requestId:i,url:t})})}async executeLocalTabOpen(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.browserTransport;if(!i){r.sync.send({type:`tab.open.error`,requestId:e,error:`Leader has no browser transport`});return}try{let n=(await i.send(`Target.createTarget`,{url:t,background:!0})).targetId;r.sync.send({type:`tab.opened`,requestId:e,targetId:`leader:${n}`})}catch(t){r.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardTabOpen(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" not connected`});return}if(!this.canRuntimeOpenTab(t)){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" is a cherry host that cannot open tabs`});return}this.pendingTabOpenRoutes.set(e,{requesterBootstrapId:r,requestId:e}),a.sync.send({type:`tab.open`,requestId:e,url:n})}handleTabOpenResponse(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.resolve(t));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.opened`,requestId:e,targetId:t})}handleTabOpenError(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.reject(Error(t)));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.open.error`,requestId:e,error:t})}async executeLocalFs(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.vfs;if(!i){r.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Leader has no VFS`}});return}let a=await T(i,t);for(let t of a)r.sync.send({type:`fs.response`,requestId:e,response:t})}forwardFsRequest(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Target runtime "${t}" not connected`}});return}this.pendingFsRoutes.set(e,{requesterBootstrapId:r,requestId:e,chunks:[],totalChunks:1}),a.sync.send({type:`fs.request`,requestId:e,request:n})}handleFsResponse(e,t){let n=this.pendingFsRoutes.get(e);if(!n){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}return}if(n.requesterBootstrapId===`__leader__`){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),this.pendingFsRoutes.delete(e),n.resolve(n.responses))}return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`fs.response`,requestId:e,response:t}),n.chunks.push(t),n.totalChunks=t.ok&&t.totalChunks||1,n.chunks.length>=n.totalChunks&&this.pendingFsRoutes.delete(e)}sendFsRequest(e,t){if(e===`leader`){let e=this.options.vfs;return e?T(e,t):Promise.resolve([{ok:!1,error:`Leader has no VFS`}])}let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.resolve([{ok:!1,error:`Target runtime "${e}" not connected`}]);let i=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.fsResolvers.set(i,{resolve:e,reject:n,responses:[]}),this.pendingFsRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i,chunks:[],totalChunks:1}),r.sync.send({type:`fs.request`,requestId:i,request:t})})}registerMintedPreview(e,t){this.mintMap.set(e,t)}dropMintedPreview(e){this.mintMap.delete(e),this.previewLickLastEmitAt.delete(`${e}:connected`),this.previewLickLastEmitAt.delete(`${e}:disconnected`)}onBridgeConnected(e){let{connId:t,previewToken:n,origin:r,userAgent:i,connectedAt:a}=e;if(this.bridgeConns.has(t))return;let o=this.mintMap.get(n),s=o?.url??r,c=o?.title??`Preview`,l=o?.quiet??!1,u=new V({connId:t,targetUrl:s,targetOrigin:r,title:c,send:e=>this.options.sendControl(e)});u.connect(),this.bridgeConns.set(t,{previewToken:n,origin:r,userAgent:i,connectedAt:a,url:s,title:c,quiet:l,transport:u}),W.info(`Preview bridge connected`,{connId:t,previewToken:n,origin:r,userAgent:i}),this.emitPreviewLifecycleLick(`connected`,{connId:t,previewToken:n,origin:r,userAgent:i,connectedAt:a,quiet:l})}onBridgeDisconnected(e){let{connId:t,reason:n}=e,r=this.bridgeConns.get(t);if(!r)return;let{previewToken:i,origin:a,userAgent:o,connectedAt:s,quiet:c}=r;r.transport.disconnect(),this.bridgeConns.delete(t),W.info(`Preview bridge disconnected`,{connId:t,reason:n}),this.emitPreviewLifecycleLick(`disconnected`,{connId:t,previewToken:i,origin:a,userAgent:o,connectedAt:s,quiet:c})}emitPreviewLifecycleLick(t,n){if(n.quiet||!this.options.onPreviewLick)return;let r=`${n.previewToken}:${t}`,i=Date.now();if(i-(this.previewLickLastEmitAt.get(r)??0)<e.PREVIEW_LICK_THROTTLE_MS)return;this.previewLickLastEmitAt.set(r,i);let a={type:`preview`,previewLifecycle:t,previewConnId:n.connId,previewToken:n.previewToken,previewOrigin:n.origin,previewUserAgent:n.userAgent,previewConnectedAt:n.connectedAt,timestamp:new Date().toISOString(),body:{}};try{this.options.onPreviewLick(a)}catch(e){W.warn(`onPreviewLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}onBridgeCdpResponse(e){let{connId:t,id:n,result:r,error:i}=e,a=this.bridgeConns.get(t);if(!a){W.warn(`Received bridge.cdp.response for unknown connId`,{connId:t,id:n});return}a.transport.deliverResponse(n,{result:r,error:i})}getBridgeTransport(e){return this.bridgeConns.get(e)?.transport}},q=a(`page-leader-tray`);function pe(e,t){return new fe({sendControl:e=>t().sendControlMessage(e),getMessages:e.getMessages,getMessagesForScoop:e.getMessagesForScoop,getScoopJid:e.getScoopJid,getScoops:e.getScoops,getSprinkles:e.getSprinkles,readSprinkleContent:e.readSprinkleContent,onSprinkleLick:e.onSprinkleLick,onForwardedLick:e.onForwardedLick,onFollowerMessage:e.onFollowerMessage,onFollowerAbort:e.onFollowerAbort,onFollowerCountChanged:e.onFollowerCountChanged,onRemoteTransportsCleaned:e.onRemoteTransportsCleaned,onCherryHostEvent:e.onCherryHostEvent,onPreviewLick:e.onPreviewLick,browserAPI:e.browserAPI,browserTransport:e.browserTransport,vfs:e.vfs})}function me(e,t){return new oe({sendControlMessage:t=>e().sendControlMessage(t),onPeerConnected:(e,n)=>{q.info(`Tray follower data channel opened`,{controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,runtime:e.runtime}),t.addFollower(e.bootstrapId,n,{runtime:e.runtime,connectedAt:e.connectedAt??void 0})},onPeerDisconnected:(e,t)=>{q.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}})}function he(e,t,n,r,i,a){let o=t=>{e.browserTransport?.sendLeaderJoinUrl?.(t)};return new te({workerBaseUrl:e.workerBaseUrl,runtime:e.runtime??`slicc-standalone`,...e.kind?{kind:e.kind}:{},onLeaderReady:t=>{e.onLeaderReady?.(t),o(t.joinUrl)},fetchImpl:r,...e._storeOverride?{store:e._storeOverride}:{},...e._webSocketFactory?{webSocketFactory:e._webSocketFactory}:{},onControlMessage:r=>{if(r.type===`webhook.event`){e.sendWebhookEvent(r.webhookId,r.headers,r.body);return}if(r.type===`preview.request`){let t=e.vfs;if(!t){a().sendControlMessage({type:`preview.response`,reqId:r.reqId,ok:!1,status:500,reason:`leader has no VFS bound`});return}I(r,{send:e=>a().sendControlMessage(e)},t).catch(e=>{q.error(`preview.request handling failed`,{error:e instanceof Error?e.message:String(e)})});return}if(r.type===`preview.revoked`){q.info(`Preview revoked by worker`,{previewToken:r.previewToken}),n.dropMintedPreview(r.previewToken);return}if(r.type===`bridge.connected`){n.onBridgeConnected(r);return}if(r.type===`bridge.disconnected`){n.onBridgeDisconnected(r);return}if(r.type===`bridge.cdp.response`){n.onBridgeCdpResponse(r);return}t.handleControlMessage(r).catch(e=>{q.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{q.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{q.info(`Leader tray reconnected`,{trayId:e.trayId}),i(e),o(e.joinUrl)},onReconnectGaveUp:(e,t)=>{q.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t}),o(null)}})}function ge(e,t){let n=new ae(q,{failureMessage:`Leader CDP target refresh failed (best-effort, throttled)`,recoveryMessage:`Leader CDP target refresh recovered (stable for debounce window)`});return async()=>{let r;try{r=await e.browserAPI.listPages()}catch(e){n.reportFailure(e);return}n.reportSuccess();try{let e=r.map(e=>({targetId:e.targetId,title:e.title,url:e.url}));t.setLocalTargets(e)}catch(e){q.error(`Leader target broadcast failed (sync.setLocalTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}}function _e(e,t){return setInterval(()=>{try{e.broadcastScoopsList(),e.broadcastSprinklesList()}catch(e){q.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t)}function ve(e){return t=>{let n=e._historyOverride??ye();if(n)try{let e=g(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){q.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}}function J(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i=ve(e),a=pe(e,()=>r);e.browserAPI.setTrayTargetProvider(a);let o=me(()=>r,a);r=he(e,o,a,n,i,()=>r);let s=e.onAgentEvent(e=>a.broadcastEvent(e)),c=[],l=ge(e,a);c.push(setInterval(l,t)),l(),c.push(_e(a,t));let u=r.start();u.then(i).catch(e=>{q.error(`Leader tray start failed`,{error:e instanceof Error?e.message:String(e)})});let d=!1;return{ready:u,stop(){d=!0,s();for(let e of c)clearInterval(e);a.stop(),o.stop(),r.stop()},async reset(){a.stop(),o.stop(),r.stop(),await r.clearSession();let e=await r.start();return i(e),w()},leader:r,peers:o,sync:a,get currentLeaderSync(){return d?null:a}}}function ye(){return typeof window>`u`||!window.history||!window.location?null:{get href(){return window.location.href},replaceState(e,t,n){window.history.replaceState(e,t,n)}}}function be(e){let t=new Map,n=(e,t)=>`${e}:${t}`,r=(r,i)=>{let a=n(r,i),o=t.get(a);if(!o){let n=e.getSync();if(!n)throw Error(`remote-cdp: leader tray not started`);o={runtimeId:r,localTargetId:i,transport:n.createRemoteTransport(r,i),forwarders:new Map},t.set(a,o)}return o},i=n=>{let r=t.get(n);if(!r)return;for(let[e,t]of r.forwarders)r.transport.off(e,t.listener);r.forwarders.clear();let i=e.getSync();i?.removeRemoteTransport?i.removeRemoteTransport(r.runtimeId,r.localTargetId):r.transport.disconnect(),t.delete(n)};return{async send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o}){return r(e,t).transport.send(n,i,a,o)},async subscribe({runtimeId:t,localTargetId:n,event:i}){let a=r(t,n),o=a.forwarders.get(i);if(o)return o.count+=1,{ok:!0};let s=r=>e.postEvent({runtimeId:t,localTargetId:n,method:i,params:r});return a.transport.on(i,s),a.forwarders.set(i,{listener:s,count:1}),{ok:!0}},async unsubscribe({runtimeId:e,localTargetId:r,event:i}){let a=t.get(n(e,r)),o=a?.forwarders.get(i);return!a||!o?{ok:!0}:(--o.count,o.count<=0&&(a.transport.off(i,o.listener),a.forwarders.delete(i)),{ok:!0})},async detach({runtimeId:e,localTargetId:t}){return i(n(e,t)),{ok:!0}},async openTab({runtimeId:t,url:n}){let r=e.getSync();if(!r?.openRemoteTab)throw Error(`remote-cdp: openRemoteTab not available`);return{targetId:await r.openRemoteTab(t,n)}},cleanupRuntime(e){let n=`${e}:`;for(let e of[...t.keys()])e.startsWith(n)&&i(e)},disposeAll(){for(let e of[...t.keys()])i(e)}}}var Y=a(`tray-leader-lock`);function xe(e){return`slicc-tray-leader:${e}`}function X(){let e=!1,t=null;return{release:()=>{e||(e=!0,t?.())},heldPromise:new Promise(e=>{t=e})}}async function Z(e,t){if(!t)return{status:`granted`,release:()=>{}};let n=xe(e),r,i=new Promise(e=>{r=e}),a=X();return t.request(n,{mode:`exclusive`,ifAvailable:!0},e=>e===null?(r(!1),Promise.resolve()):(r(!0),a.heldPromise)),await i?{status:`granted`,release:a.release}:{status:`deferred`,waitForPromotion:()=>new Promise(e=>{let r=X();t.request(n,{mode:`exclusive`},()=>(e({release:r.release}),r.heldPromise))})}}async function Se(e){let t=await Z(e.workerBaseUrl,e.lockManager);if(t.status===`granted`){if(!e.shouldLead()){t.release();return}e.onGranted(t.release);return}Y.error(`Another tab is already leading on this tray worker — deferring leader start until the other tab releases the lock.`);let{release:n}=await t.waitForPromotion();if(!e.shouldLead()){n();return}Y.error(`Late promotion: this tab is now the tray leader.`),e.onGranted(n)}function Ce(){return typeof navigator<`u`&&navigator.locks&&typeof navigator.locks.request==`function`?navigator.locks:null}function Q(e,t){let{browser:n,client:r,getController:i}=e;return{joinUrl:t,onSnapshot:e=>i()?.loadMessages(e),onUserMessage:(e,t,n,r)=>i()?.addUserMessage(e,r),onStatus:e=>i()?.setProcessing(e===`processing`),setChatAgent:e=>i()?.setAgent(e),browserAPI:n,onForwardingToggle:e=>r.sendSetFollowerForwarding(e),addSprinkle:(t,n,r)=>e.addSprinkle(t,n,r),removeSprinkle:t=>e.removeSprinkle(t),onScoopsList:(t,n)=>{e.refs.switcher.scoops=t.map(e=>({key:e.jid,type:e.isCone?`cone`:`scoop`,color:re(e),label:e.isCone?`sliccy`:e.name,eyes:`open`})),e.refs.switcher.setAttribute(`active`,n)}}}function $(e,t,n){let{client:r,refs:i}=e;return a=>({workerBaseUrl:a,getMessages:()=>e.getController()?.getMessages()??[],getMessagesForScoop:e=>r.getMessagesForScoop(e),getScoopJid:()=>e.getSelectedJid(),getScoops:()=>r.getScoops().map(e=>({jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,trigger:e.trigger})),getSprinkles:()=>{let t=new Set(e.sprinkleManager.opened());return e.sprinkleManager.available().map(e=>({name:e.name,title:e.title,path:e.path,open:t.has(e.name),autoOpen:e.autoOpen}))},readSprinkleContent:async t=>{let n=e.sprinkleManager.available().find(e=>e.name===t);if(!n)return null;try{let t=await(await e.openFs()).readFile(n.path,{encoding:`utf-8`});return typeof t==`string`?t:new TextDecoder(`utf-8`).decode(t)}catch{return null}},onSprinkleLick:(e,t,n,i)=>r.sendSprinkleLick(e,t,n,i),onFollowerMessage:(n,r,i)=>{e.getController()?.addUserMessage(n,i),e.agentHandle.sendMessage(n,r,i),t.leader?.sync.broadcastUserMessage(n,r,i)},onFollowerAbort:()=>e.agentHandle.stop(),onFollowerCountChanged:t=>{i.floatbar.setAttribute(`label`,t>0?`tray · ${t} follower${t===1?``:`s`}`:e.baseFloatLabel??`standalone · live`),j(A())},onRemoteTransportsCleaned:e=>n.cleanupRuntime(e),onForwardedLick:e=>r.sendForwardedLick(e),onCherryHostEvent:(e,t,n)=>r.sendCherryHostEvent(e,t,n),onPreviewLick:e=>r.sendPreviewLick(e),sendWebhookEvent:(e,t,n)=>r.sendWebhookEvent(e,t,n),onAgentEvent:t=>e.agentHandle.onEvent(t),browserAPI:e.browser,browserTransport:e.realCdpTransport,vfs:{async stat(t){return(await e.openFs()).stat(t)},async readFile(t,n){return(await e.openFs()).readFile(t,n)}}})}function we(t,n){return{wireLeaderHooks:n=>{k(()=>n.peers.getPeers().map(e=>({runtimeId:E(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))),t.sprinkleManager.setSendToSprinkleHook((e,t)=>n.sync.broadcastSprinkleUpdate(e,t)),t.sprinkleManager.setReloadHook(e=>n.sync.broadcastSprinkleReloaded(e)),t.getController()?.setOnLocalUserMessage((e,t,r)=>n.sync.broadcastUserMessage(e,t,r)),t.getController()?.setOnLocalProcessingChange(e=>n.sync.broadcastStatus(e?`processing`:`ready`)),e(async()=>{let{setThemeChangeListener:e,getActiveThemeId:t}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{setThemeChangeListener:e,getActiveThemeId:t}},__vite__mapDeps([39,1,10])).then(({setThemeChangeListener:e,getActiveThemeId:t})=>{let r;e(e=>{t()!==`__preview`&&(clearTimeout(r),r=setTimeout(()=>n.sync.broadcastTheme(e),150))})})},clearLeaderHooks:()=>{k(null),j([]),t.getController()?.setOnLocalUserMessage(void 0),t.getController()?.setOnLocalProcessingChange(void 0),t.sprinkleManager.setSendToSprinkleHook(void 0),t.sprinkleManager.setReloadHook(void 0),n.disposeAll(),e(async()=>{let{setThemeChangeListener:e}=await import(`./theme-engine-jfuTMXZM.js`).then(e=>e.p);return{setThemeChangeListener:e}},__vite__mapDeps([39,1,10])).then(({setThemeChangeListener:e})=>{e(null)})}}}function Te(e){return{runtime:`slicc-hosted-leader`,kind:`hosted`,onLeaderReady:t=>{fetch(p(`/api/cloud-status`),{method:`POST`,headers:m({"content-type":`application/json`}),body:JSON.stringify({joinUrl:t.joinUrl,trayId:t.trayId,controllerUrl:t.controllerUrl,webhookUrl:t.webhookUrl,runtime:t.runtime,sliccVersion:`5.64.0`}),signal:AbortSignal.timeout(1e4)}).catch(t=>{e.log.error(`failed to POST /api/cloud-status`,{error:String(t)})})}}}function Ee(e,t,n,r,i){let{window:a,log:o}=e;if(e.runtimeMode===`hosted-leader`){a.localStorage.removeItem(_);let i=a.localStorage.getItem(v);if(!i){o.error(`hosted-leader: tray worker base URL not seeded`);return}t.leader=J({...n(i),...Te(e)}),r(t.leader),N({log:o});return}let s=a.localStorage.getItem(_),c=a.localStorage.getItem(v);s?t.follower=D(Q(e,s)):c&&De(c,e,t,n,r,i)}function De(e,t,n,r,i,a){Se({workerBaseUrl:e,lockManager:a,shouldLead:()=>!n.leader&&!n.follower&&t.window.localStorage.getItem(`slicc.trayWorkerBaseUrl`)===e,onGranted:t=>{n.lockRelease=t,n.leader=J(r(e)),i(n.leader)}})}function Oe(e,t,n,r){let{window:i,log:a}=e;i.addEventListener(`slicc:tray-join`,r=>{let i=r.detail?.joinUrl;if(!i)return;let o=t.leader,s=t.lockRelease;t.leader=null,t.lockRelease=null,n();let c=t.follower;t.follower=null;try{o?.stop()}catch(e){a.error(`leader stop threw during tray-join switch`,e)}s?.();try{c?.stop()}catch(e){a.error(`previous follower stop threw during tray-join switch`,e)}try{t.follower=D(Q(e,i))}catch(e){a.error(`tray-join failed`,e)}}),i.addEventListener(`slicc:tray-leave`,e=>{let t=e;r({workerBaseUrl:t.detail?.workerBaseUrl??null,requestId:t.detail?.requestId}).catch(e=>a.error(`tray-leave failed`,e))}),i.addEventListener(`beforeunload`,()=>{t.leader?.stop(),t.follower?.stop(),t.lockRelease?.(),t.lockRelease=null},{once:!0})}async function ke(t){let{loadSprinkleStyles:n}=await e(async()=>{let{loadSprinkleStyles:e}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadSprinkleStyles:e}},__vite__mapDeps([40,3]));await n();let{client:r,instanceId:i,window:a,log:o}=t,s={leader:null,follower:null,lockRelease:null},c=Ce(),l=typeof BroadcastChannel==`function`?new BroadcastChannel(y(i)):null,u=be({getSync:()=>s.leader?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};l?.postMessage(t)}});r.setForwardLickHandler(e=>{let t=s.follower?.currentSync;t?t.forwardLick(e):o.warn(`forward-lick dropped: no active follower sync`)});let d=$(t,s,u),{wireLeaderHooks:f,clearLeaderHooks:p}=we(t,u),m=async t=>{let{performTrayLeave:n}=await e(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-lJcLlwtm.js`);return{performTrayLeave:e}},__vite__mapDeps([41,24,11,12,1,3,13,14,15,25])),r=()=>{s.leader||(s.lockRelease?.(),s.lockRelease=null)},i=n({workerBaseUrl:t.workerBaseUrl,requestId:t.requestId},{getLeader:()=>s.leader,setLeader:e=>{s.leader=e},getFollower:()=>s.follower,setFollower:e=>{s.follower=e},startLeader:e=>(s.lockRelease?.(),s.lockRelease=null,Z(e,c).then(e=>{if(e.status===`granted`){if(!s.leader){e.release();return}s.lockRelease=e.release}}),J(d(e))),clearLeaderHooks:p,wireLeaderHooks:f,storage:a.localStorage,log:o});try{let e=await i;return r(),e}catch(e){throw r(),e}};return await M({instanceId:i,browser:t.browser,remoteCdpBridge:u,remoteCdpPushChannel:l,getLeader:()=>s.leader,performTrayLeaveLocally:m,window:a}),Ee(t,s,d,f,c),C(e=>{a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(w())),b(e=>{a.localStorage.setItem(S,JSON.stringify(e))}),a.localStorage.setItem(S,JSON.stringify(x())),j(A(),a.localStorage),Oe(t,s,p,m),{getLeader:()=>s.leader,getFollower:()=>s.follower,performTrayLeaveLocally:m}}export{ke as wireWcTray};