sliccy 6.89.0 → 6.91.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 (84) hide show
  1. package/README.md +1 -1
  2. package/dist/ui/.vite/manifest.json +140 -139
  3. package/dist/ui/assets/{account-store-Bo-yhxpr.js → account-store-C1yfzSh8.js} +1 -1
  4. package/dist/ui/assets/{account-store-CYz2dZdk.js → account-store-WnXgLTc8.js} +1 -1
  5. package/dist/ui/assets/{adobe-DFu35kBc.js → adobe-CI_mfh6W.js} +1 -1
  6. package/dist/ui/assets/{adobe-BABx4YQD.js → adobe-CyU_4QFp.js} +1 -1
  7. package/dist/ui/assets/{apply-layout-DtjqLMjP.js → apply-layout-Ch4rpOGr.js} +1 -1
  8. package/dist/ui/assets/{apps-CvbmIZii.js → apps-pxc-GoM0.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-C47c28Th.js → azure-openai-Ct81BkzM.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-Dn30Odmd.js → azure-openai-HfNUqh5T.js} +1 -1
  11. package/dist/ui/assets/{cerebras-DWI7o4tY.js → cerebras-C0stC2m8.js} +1 -1
  12. package/dist/ui/assets/{cerebras-B2bBHcWG.js → cerebras-C650XqL5.js} +1 -1
  13. package/dist/ui/assets/{connect-surface-Dd462OJJ.js → connect-surface-BQZqnOMC.js} +1 -1
  14. package/dist/ui/assets/{fs-MCOH5KUJ.js → fs-B4qf4l57.js} +2 -2
  15. package/dist/ui/assets/{fs-BHEdp-e-.js → fs-Dnva5HZ3.js} +1 -1
  16. package/dist/ui/assets/{github-C-f5ThxJ.js → github-BGwttSIP.js} +1 -1
  17. package/dist/ui/assets/{github-BbQO4O_c.js → github-BZFgkPO1.js} +2 -2
  18. package/dist/ui/assets/{github-copilot-DXrDbEzB.js → github-copilot-BxH2PYuM.js} +1 -1
  19. package/dist/ui/assets/{github-copilot-Du-Z6Dmn.js → github-copilot-Ch0RZpCi.js} +1 -1
  20. package/dist/ui/assets/{github-install-DbrQX7SM.js → github-install-DpekDVQj.js} +1 -1
  21. package/dist/ui/assets/{github-zip-BRYnSLKK.js → github-zip-0POubY9i.js} +1 -1
  22. package/dist/ui/assets/{js-realm-worker-BZhHEqbx.js → js-realm-worker-DrcpR5sl.js} +1 -1
  23. package/dist/ui/assets/{kernel-worker-CwFqaikq.js → kernel-worker-CC5u39mz.js} +725 -725
  24. package/dist/ui/assets/{local-llm-HluX94rS.js → local-llm-C1Or3Y52.js} +1 -1
  25. package/dist/ui/assets/{local-llm-D4MgnlBK.js → local-llm-djwmLEi-.js} +1 -1
  26. package/dist/ui/assets/{main-BmpPeikS.js → main-CjaIZrJd.js} +3 -3
  27. package/dist/ui/assets/{mount-kkSADJkJ.js → mount-BNyT2nnD.js} +1 -1
  28. package/dist/ui/assets/{mount-B_Yysj_W.js → mount-BRdDn52A.js} +2 -2
  29. package/dist/ui/assets/{mount-recovery-xQgEe0_O.js → mount-recovery-BsWQfSkJ.js} +1 -1
  30. package/dist/ui/assets/{new-session-CEfChDqS.js → new-session-362b6Pml.js} +2 -2
  31. package/dist/ui/assets/{oauth-bootstrap-C9bBExq6.js → oauth-bootstrap-C5IBUZ3l.js} +2 -2
  32. package/dist/ui/assets/{openai-codex-Cs4FnQBb.js → openai-codex-BKMbZQZc.js} +1 -1
  33. package/dist/ui/assets/{openai-codex-QVbVkjdj.js → openai-codex-YDtg8ur-.js} +1 -1
  34. package/dist/ui/assets/{openrouter-D1wpkLTj.js → openrouter-C931t0hQ.js} +1 -1
  35. package/dist/ui/assets/{openrouter-CKoiUQKB.js → openrouter-DkuBgJvP.js} +1 -1
  36. package/dist/ui/assets/{openrouter-oauth-Df_lWai3.js → openrouter-oauth-CMiNl7hg.js} +1 -1
  37. package/dist/ui/assets/{openrouter-oauth-jvPojBWW.js → openrouter-oauth-D7kC0-6w.js} +1 -1
  38. package/dist/ui/assets/{panel-rpc-handlers-Dwk2fvsL.js → panel-rpc-handlers-Dz6tHtwK.js} +2 -2
  39. package/dist/ui/assets/{panelize-shell-DG3fFAS4.js → panelize-shell-Sersv_GI.js} +1 -1
  40. package/dist/ui/assets/{provider-Y9RlYumW.js → provider-DePb9O4W.js} +1 -1
  41. package/dist/ui/assets/{provider-Dq-ruSoi.js → provider-Qy7QIkOc.js} +2 -2
  42. package/dist/ui/assets/{provider-settings-DNJS-V3F.js → provider-settings-DiEr5ZRx.js} +1 -1
  43. package/dist/ui/assets/{provider-settings-CR96H2hU.js → provider-settings-wn9tOS6g.js} +1 -1
  44. package/dist/ui/assets/provider-store-access-CW8iwqLX.js +1 -0
  45. package/dist/ui/assets/{provider-store-access-BIdOJknd.js → provider-store-access-CjMqlHh9.js} +2 -2
  46. package/dist/ui/assets/{providers-DRiRdLO1.js → providers-CdbrXnHp.js} +1 -1
  47. package/dist/ui/assets/{providers-BS5_Cp-0.js → providers-DWSKNmmF.js} +2 -2
  48. package/dist/ui/assets/{quick-llm-9w6VrHaQ.js → quick-llm-CJjhx9Bw.js} +1 -1
  49. package/dist/ui/assets/{recovery-screen-ClVBOtr7.js → recovery-screen-B6XY3sMT.js} +1 -1
  50. package/dist/ui/assets/{redirect-uri-B16gkDfI.js → redirect-uri-Bo2sC4P3.js} +1 -1
  51. package/dist/ui/assets/{session-freezer-BcGQ4XGx.js → session-freezer-Dp9JZe-A.js} +3 -3
  52. package/dist/ui/assets/{setup-feature-flags-remote-8Rvw554i.js → setup-feature-flags-remote-z12X6D4v.js} +1 -1
  53. package/dist/ui/assets/{setup-standalone-prelude-NNpe-m64.js → setup-standalone-prelude-BTj3azbf.js} +1 -1
  54. package/dist/ui/assets/{setup-sudo-CbAhwltm.js → setup-sudo-CErVw53c.js} +2 -2
  55. package/dist/ui/assets/{skills-CDnSEmr6.js → skills-BeciHeJd.js} +1 -1
  56. package/dist/ui/assets/slicc-version-CdTEe-7X.js +1 -0
  57. package/dist/ui/assets/{src-DXdqCrdV.js → src-CUFrGOpV.js} +1 -1
  58. package/dist/ui/assets/{store-BKV5dm_L.js → store-DGOhX8_w.js} +1 -1
  59. package/dist/ui/assets/{store-Bl3OB-Qs.js → store-_EfBoYjW.js} +1 -1
  60. package/dist/ui/assets/{sudo-Bnq6X0me.js → sudo-C8vnwjt-.js} +1 -1
  61. package/dist/ui/assets/{upgrade-detection-BC1ILaMz.js → upgrade-detection-CW8nHgbA.js} +1 -1
  62. package/dist/ui/assets/{wc-attach-CPoS-Z-g.js → wc-attach-Dg3dkg8N.js} +2 -2
  63. package/dist/ui/assets/{wc-extension-pWBTulcf.js → wc-extension-DKIN3f-l.js} +2 -2
  64. package/dist/ui/assets/wc-follower-B9fAW5o_.js +17 -0
  65. package/dist/ui/assets/wc-live-Djx7vpPK.js +8 -0
  66. package/dist/ui/assets/{wc-nav-Co62IQ9D.js → wc-nav-Bo-m8RiK.js} +2 -2
  67. package/dist/ui/assets/{wc-onboarding-CqIwr35s.js → wc-onboarding-DFFKlypy.js} +2 -2
  68. package/dist/ui/assets/{wc-placeholder-CRVvrH3X.js → wc-placeholder-CHx_pcKq.js} +2 -2
  69. package/dist/ui/assets/{wc-settings-Bh5hIzNc.js → wc-settings-CB2nUyx1.js} +2 -2
  70. package/dist/ui/assets/{wc-shell-7mtD7TN_.js → wc-shell-hfLGwN7O.js} +3 -3
  71. package/dist/ui/assets/{wc-sprinkles-wT8iHdRT.js → wc-sprinkles-yYuetahF.js} +2 -2
  72. package/dist/ui/assets/{wc-tray-DxDD8gsB.js → wc-tray-osj-XVdy.js} +2 -2
  73. package/dist/ui/assets/wc-tray-scoops-Bv6lSzxH.js +5 -0
  74. package/dist/ui/assets/{wc-unit-context-C0EqsYUD.js → wc-unit-context-Da9Dpd9y.js} +1 -1
  75. package/dist/ui/assets/{xai-grok-DO4be7QU.js → xai-grok-1GJSyFOo.js} +1 -1
  76. package/dist/ui/assets/{xai-grok-CcoDiPUW.js → xai-grok-BTxvDdNy.js} +1 -1
  77. package/dist/ui/index.html +6 -6
  78. package/dist/ui/packages/webapp/index.html +6 -6
  79. package/package.json +4 -3
  80. package/dist/ui/assets/provider-store-access-HarlSCPD.js +0 -1
  81. package/dist/ui/assets/slicc-version-2zGA6xjX.js +0 -1
  82. package/dist/ui/assets/wc-follower-TQacOT97.js +0 -17
  83. package/dist/ui/assets/wc-live-DlayGhwI.js +0 -8
  84. package/dist/ui/assets/wc-tray-scoops-B7RY-1VN.js +0 -5
@@ -1,8 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/provider-settings-DNJS-V3F.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-Bo-yhxpr.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-DoVrYsKi.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-gbjkpjE_.js","assets/libesm-BI4UHVqp.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-BGeNrvQ4.js","assets/base64-DpPqYZJF.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-DiK91BlA.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-0AWfFTh5.js","assets/secrets-bridge-client-DCQ44RyR.js","assets/port-bridge-client-BhmNRlRv.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-BS5_Cp-0.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/telemetry-BVzuNdvW.js","assets/runtime-env-CgsZ7LTp.js","assets/tray-runtime-config-D7cmCcHJ.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/chat-session-store-pWb1-jNp.js","assets/wc-placeholder-CRVvrH3X.js","assets/dictation-priming-CNllGgNq.js","assets/wc-attach-CPoS-Z-g.js","assets/permissions-surface-registry-CilCRwhh.js","assets/session-freezer-BcGQ4XGx.js","assets/attachments-CByeG2Ru.js","assets/types-idfTVsM8.js","assets/icons-ZLR7gmJ4.js","assets/record-Cy655bTh.js","assets/agent-message-to-chat-_cvF5A5g.js","assets/voice-reply-BNX-jA0G.js","assets/speak-BSK3Souh.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-DPjdc2EQ.js","assets/shared-CddfUR6k.js","assets/mime-types-ugOWOUZ9.js","assets/soundscape-TvriK11t.js","assets/soundscape-cues-5_sT5Un6.js","assets/legacy-styles-DcRu2WCJ.js","assets/theme-CXRqxpw6.js","assets/theme-engine-By4GU_Wc.js","assets/export-provider-BEHTjSYw.js","assets/quick-llm-9w6VrHaQ.js","assets/llm-session-id-bZQs6gBN.js","assets/new-session-CEfChDqS.js","assets/feature-flags-ByMXaIc4.js","assets/db-cKsBsMMN.js","assets/mount-table-store-dY2IfQ5S.js","assets/isomorphic-git-CLcEdT0Q.js","assets/safe-buffer-BwTVRVVo.js","assets/remote-vfs-client-5faRBsEi.js","assets/writable-vfs-client-Dqrpx9iK.js","assets/wc-onboarding-CqIwr35s.js","assets/welcome-detection-DjomEbCT.js","assets/dip-B58NQGEQ.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-B3LG5UIy.js","assets/usb-operations-Cgk-otz-.js","assets/usb-device-registry-CRsCisej.js","assets/sprinkle-renderer-D64E-W2o.js","assets/sprinkle-bridge-CSfksHce.js","assets/wc-browser-DdPBkgaJ.js","assets/slicc-app-url-BsBryEhn.js","assets/tab-teleport-Dhh60nH7.js","assets/teleport-storage-CwYntbOB.js","assets/logger-BoSvu4mW.js","assets/remote-terminal-view-DSUnPeXp.js","assets/picker-approval-D89YhXsA.js","assets/html-B_Hg2WOy.js","assets/mount-picker-popup-Bc3ca2Vl.js","assets/picker-popup-Bwcnocm6.js","assets/browser-DdY1FBRp.js","assets/serial-picker-NxC1kxYI.js","assets/hid-picker-JPu5knyb.js","assets/usb-picker-KMes4Lyb.js","assets/terminal-session-client-ADzaWGFd.js","assets/secret-env-CjwX7z7b.js","assets/wc-permissions-Oq3nX_59.js","assets/wc-permissions-providers-BwYf17R6.js","assets/timestamp-preference-sKwBl5I8.js","assets/panelize-shell-DG3fFAS4.js","assets/virtual-device-paths-9EXC9iPp.js","assets/src-DXdqCrdV.js","assets/speech-C5U8h4In.js","assets/panel-registry-CJdOibpf.js","assets/layout-schema-m9_VAwOw.js","assets/layout-apply-registry-Cw730jao.js","assets/trusted-layer-ghPA1ENf.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-wT8iHdRT.js","assets/wc-unit-context-C0EqsYUD.js","assets/agent-panels-B92KQapO.js","assets/apply-layout-DtjqLMjP.js","assets/wc-tray-DxDD8gsB.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/wc-tray-scoops-B7RY-1VN.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/pending-request-table-Dgn6qYdL.js","assets/tray-leader-iVJTGwuf.js","assets/tray-sync-protocol-DV_QG_Ey.js","assets/wc-scoop-color-ShF3p7L9.js","assets/export-spool-Eul4J1RP.js","assets/src-BWaKqLvQ.js","assets/handoff-link-BM4ctkE8.js","assets/path-utils-DNJG-zQf.js","assets/synthetic-cdp-transport-Ds83IPjw.js","assets/sprinkle-instances-B8n7h-oP.js","assets/follower-presentation-DqBw0YiV.js","assets/host-command-zx0pt9Np.js","assets/leader-session-events-CC6poXIx.js","assets/wc-transcript-export-DKIleW7-.js","assets/wc-nav-Co62IQ9D.js","assets/composer-speech-Cy4g3lh3.js","assets/whisper-session-DpDs0sDL.js","assets/wc-float-label-D7p-4xyd.js","assets/setup-sudo-CbAhwltm.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,L as n,R as r,S as i,d as a}from"./account-store-Bo-yhxpr.js";import{t as o}from"./preload-helper-Czpn1I53.js";import{t as s}from"./logger-DDBAeTLF.js";import{t as c}from"./mime-types-ugOWOUZ9.js";import{n as l,t as u}from"./base64-DpPqYZJF.js";import{a as d,n as f,r as p,t as m}from"./src-CAWTvdAa.js";import"./proxied-fetch-BGeNrvQ4.js";import{a as h,i as g,n as _,r as v}from"./setup-standalone-prelude-NNpe-m64.js";import{i as y,t as b}from"./api-endpoint-GRCyib6X.js";import{n as x}from"./float-topology-DiK91BlA.js";import"./secret-topology-0AWfFTh5.js";import{t as S}from"./secrets-bridge-client-DCQ44RyR.js";import{t as ee}from"./tool-ui-DfXu6quJ.js";import{a as te,c as C,l as ne,n as re,r as ie,u as ae}from"./telemetry-BVzuNdvW.js";import{r as oe}from"./feature-flags-ByMXaIc4.js";import{c as se,h as ce,i as le,l as ue}from"./tray-runtime-config-D7cmCcHJ.js";import{i as de,t as fe}from"./tray-follower-status-BAjnN7Ar.js";import{n as pe}from"./src-BWaKqLvQ.js";import{t as me}from"./html-B_Hg2WOy.js";import{t as he}from"./chat-session-store-pWb1-jNp.js";import{n as ge,r as _e}from"./tray-leader-iVJTGwuf.js";import{a as ve,c as w,i as T,n as ye,o as be,s as xe,u as E}from"./record-Cy655bTh.js";import{n as Se}from"./shared-CddfUR6k.js";import{a as Ce,n as we,t as Te}from"./dictation-priming-CNllGgNq.js";import{n as Ee}from"./export-provider-BEHTjSYw.js";import{a as De,i as Oe,r as ke}from"./dip-B58NQGEQ.js";import{c as D,d as Ae,f as je,l as Me,p as Ne,s as Pe,u as O}from"./session-freezer-BcGQ4XGx.js";import{_ as Fe,a as Ie,c as Le,d as Re,f as ze,g as Be,h as k,i as Ve,l as He,m as Ue,n as We,p as Ge,r as Ke,s as qe,t as Je,u as Ye,v as Xe,y as Ze}from"./wc-shell-7mtD7TN_.js";import{a as Qe,c as $e,i as et,o as tt,s as nt}from"./follower-presentation-DqBw0YiV.js";import{i as rt,o as it}from"./src-DXdqCrdV.js";import{a as at,c as ot,i as st,l as ct,n as lt,o as A,r as ut,s as dt,t as j,u as ft}from"./wc-unit-context-C0EqsYUD.js";import{t as pt}from"./wc-scoop-color-ShF3p7L9.js";import{l as mt,t as ht}from"./host-command-zx0pt9Np.js";import{a as gt,i as _t,n as vt,o as yt,t as bt}from"./leader-session-events-CC6poXIx.js";var xt=`agent-sessions`,St=1,M=`sessions`;function Ct(){return new Promise((e,t)=>{let n=indexedDB.open(xt,St);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(M)||e.createObjectStore(M,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var wt=class{dbPromise=null;getDB(){return this.dbPromise||=Ct().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(M,`readwrite`).objectStore(M).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(M,`readonly`).objectStore(M).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(M,`readwrite`).objectStore(M).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async loadAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(M,`readonly`).objectStore(M).getAll();r.onsuccess=()=>t(r.result??[]),r.onerror=()=>n(r.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(M,`readonly`).objectStore(M).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(M,`readwrite`).objectStore(M).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}},Tt=`__slicc_binary__`,Et=`b64`;function Dt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[Tt]===Et&&typeof t.data==`string`}function N(e){if(e instanceof Uint8Array)return{[Tt]:Et,data:l(e)};if(Array.isArray(e))return e.map(N);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=N(r);return t}return e}function P(e){if(Dt(e))return u(e.data);if(Array.isArray(e))return e.map(P);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=P(r);return t}return e}var Ot=s(`panel-transport`);function kt(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function At(){return{onMessage:e=>{let t=(t,n,r)=>(kt(t)&&e(P(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=N(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{Ot.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var jt=`unknown-parent`,F=s(`offscreen-client`),Mt=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;toolDepth=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingAgentSpawnRequests=new Map;pendingThinkingAcks=new Map;pendingModelAcks=new Map;pendingTranscriptRequests=new Map;pendingChatMessagesRequests=new Map;pendingStatsRequests=new Map;pendingSudoRequests=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){F.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??At(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n,r)=>{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)}`,...r?.steer?{steer:!0}:{}})},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,t={}){if(!w(e))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,...t.description?{description:t.description}:{},...t.prompt?{prompt:t.prompt}:{},...e.model?{model:e.model}:{}})}async unregisterScoop(e){let t=this.scoops.find(t=>t.jid===e);if(t&&w(t)&&E(this.scoops).length<=1)throw Error(`Cannot remove the last cone`);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`})}setScoopModel(e,t){let n=`model-${I()}`,r=new Promise(e=>{this.pendingModelAcks.set(n,e)});return this.send({type:`set-scoop-model`,requestId:n,scoopJid:e,model:t}),Promise.race([r,new Promise(e=>setTimeout(()=>e(!1),5e3))]).finally(()=>this.pendingModelAcks.delete(n))}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t,n){let r=`thinking-${I()}`,i=new Promise(e=>{this.pendingThinkingAcks.set(r,e)});return this.send({type:`set-thinking-level`,requestId:r,scoopJid:e,level:t,effortOverride:n}),Promise.race([i,new Promise(e=>setTimeout(()=>e(!1),5e3))]).finally(()=>this.pendingThinkingAcks.delete(r))}async clearAllMessages(e){let t=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingClearAcks.set(t,e)});this.send({type:`clear-chat`,requestId:t,...e?{scoopJid:e}:{}}),await Promise.race([n,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(t)}spawnAgent(e){let t=`agent-${I()}`,n=new Promise((e,n)=>{this.pendingAgentSpawnRequests.set(t,{resolve:e,reject:n})}),{signal:r,...i}=e;return this.send({type:`agent-spawn-request`,requestId:t,options:i}),r&&(r.aborted?this.send({type:`agent-spawn-abort`,requestId:t}):r.addEventListener(`abort`,()=>this.send({type:`agent-spawn-abort`,requestId:t}),{once:!0})),n}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&&F.warn(`getMessagesForScoop timed out`,{scoopJid:e}),i}async requestSudoApproval(e,t=6e5){let n=`sudo-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=new Promise(e=>{this.pendingSudoRequests.set(n,e)});this.send({type:`request-sudo-approval`,requestId:n,request:e});let i=await Promise.race([r,new Promise(e=>setTimeout(()=>e({decision:`deny`}),t))]);return this.pendingSudoRequests.delete(n),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}F.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?(F.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):F.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),this.renderCompactionNotice(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`agent-spawn-result`:this.handleAgentSpawnResult(e);break;case`set-scoop-model-ack`:this.handleScoopModelAck(e);break;case`set-thinking-level-ack`:this.handleThinkingLevelAck(e);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`lick-backpressure`:this.callbacks.onLickBackpressure?.(e.scoopJid,{count:e.count,waitingMs:e.waitingMs});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`sudo-approval`:{let t=e,n=this.pendingSudoRequests.get(t.requestId);n&&(this.pendingSudoRequests.delete(t.requestId),n(t.decision));break}case`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,burnRate:t.burnRate,fills:t.fills,models:t.models??[],scoops:t.scoops??[]}));break}case`tray-runtime-status`:{let t=e;Nt(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){F.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}}}handleAgentSpawnResult(e){let t=this.pendingAgentSpawnRequests.get(e.requestId);t&&(this.pendingAgentSpawnRequests.delete(e.requestId),e.ok?t.resolve(e.result):t.reject(Error(e.error)))}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)}trackToolPhase(e,t){let n=this.toolDepth.get(e)??0,r=t===null?0:Math.max(0,n+t);r===0?this.toolDepth.delete(e):this.toolDepth.set(e,r),n>0!=r>0&&this.callbacks.onScoopPhaseChange?.(e,r>0?`tool`:`thinking`)}handleToolUiAgentEvent(e){if(e.eventType===`tool_ui`){let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${I()}`,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??``});return}let t=this.currentMessageId.get(e.scoopJid);t&&(e.eventType===`tool_ui_done`?this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``}):e.progress&&this.emitToUI({type:`tool_progress`,messageId:t,toolName:e.toolName??``,progress:e.progress,toolCallId:e.toolCallId}))}handleAgentEvent(e){switch(e.eventType){case`text_delta`:case`tool_start`:case`tool_ui`:case`turn_end`:this.callbacks.onScoopActivity?.(e.scoopJid)}switch(e.eventType){case`tool_start`:this.trackToolPhase(e.scoopJid,1);break;case`tool_end`:this.trackToolPhase(e.scoopJid,-1);break;case`turn_end`:this.trackToolPhase(e.scoopJid,null)}if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${I()}`,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}-${I()}`,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,toolCallId:e.toolCallId});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,toolCallId:e.toolCallId});break}case`tool_ui`:case`tool_ui_done`:case`tool_progress`:this.handleToolUiAgentEvent(e);break;case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t,model:e.model,usage:e.usage}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${I()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}renderCompactionNotice(e,t){if(e!==this.selectedScoopJid)return;let n;if(t===`summarizing`)n=`Context window almost exceeded — compacting history…`;else if(t===`fallback`)n=`Compaction summarization failed — continuing with older messages truncated.`;else return;let r=`compaction-${e}-${I()}`;this.emitToUI({type:`message_start`,messageId:r}),this.emitToUI({type:`content_delta`,messageId:r,text:n}),this.emitToUI({type:`content_done`,messageId:r})}handleScoopStatus(e){let t=this.scoopStatuses.get(e.scoopJid);this.scoopStatuses.set(e.scoopJid,e.status),t!==e.status&&this.trackToolPhase(e.scoopJid,null),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop,this.coneJidFromRecords(this.scoops));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)}handleScoopModelAck(e){if(e.applied){let t=this.getScoop(e.scoopJid);t&&(t.model=e.model?{...e.model}:void 0)}this.pendingModelAcks.get(e.requestId)?.(e.applied)}handleThinkingLevelAck(e){if(e.applied){let t=this.getScoop(e.scoopJid);t&&be(t,e.level===void 0?void 0:{level:e.level,effortOverride:e.effortOverride})}this.pendingThinkingAcks.get(e.requestId)?.(e.applied)}handleScoopList(e){this.scoops=e.scoops.map(t=>this.msgScoopToRegistered(t,this.coneJidFromWire(e.scoops)));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){F.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(t=>this.msgScoopToRegistered(t,this.coneJidFromWire(e.scoops)));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&Nt(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})}coneJidFromRecords(e){return e.find(e=>w(e))?.jid??null}coneJidFromWire(e){return e.find(e=>e.parentId===void 0?e.isCone:e.parentId===null)?.jid??null}msgScoopToRegistered(e,t){return ve({jid:e.jid,name:e.name,folder:e.folder,parentJid:e.parentId===void 0?e.isCone?null:t??jt:e.parentId,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){F.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 I(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Nt(e,t){_e({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),de({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 Pt(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)}}function Ft(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 It(e){let t=Ft(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Lt(e,t){let n=Ft(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 Rt(){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 zt(e){let{worker:t,realCdpTransport:n}=e,r=e.readyTimeoutMs??3e4,i=e.localStorageSeed??{},a=new MessageChannel,o=new MessageChannel,s=It(a.port1),c=e.makeClient(s);e.onWorkerScriptError&&e.worker.addEventListener?.(`error`,()=>e.onWorkerScriptError());let l=Lt(o.port1,n),u=null,d=new Promise((e,t)=>{let n=null,i=null,o=()=>{n!==null&&(clearTimeout(n),n=null)},s=()=>{o(),n=setTimeout(()=>{u?.(),t(Error(`Kernel worker did not signal ready within ${r}ms`))},r)};u=()=>{i!==null&&(a.port1.removeEventListener(`message`,i),i=null),o()},i=n=>{let r=n.data;if(r?.type===`kernel-worker-boot-progress`){s();return}if(r?.type===`kernel-worker-ready`){u?.(),e();return}if(r?.type===`kernel-worker-boot-error`){u?.();let e=r.message??`unknown error`,n=r.code,i=Error(`Kernel worker boot failed: ${e}`);n&&(i.code=n),t(i)}},a.port1.addEventListener(`message`,i),s()}),f={type:`kernel-worker-init`,kernelPort:a.port2,cdpPort:o.port2,localStorageSeed:i,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,pageBuildId:`6.89.0-mt74kxss`,flagFloat:e.flagFloat??null};t.postMessage(f,[a.port2,o.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(),a.port1.close(),o.port1.close()}}}}function Bt(e){return zt({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-CwFqaikq.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,makeClient:e.makeClient,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Rt(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,syncFsBridgeEnabled:e.syncFsBridgeEnabled,syncFsChannelNonce:e.syncFsChannelNonce,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId,flagFloat:e.flagFloat,onWorkerScriptError:e.onWorkerScriptError})}var Vt=1048576,Ht=`r`;function Ut(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function R(e,t,n){if(typeof e==`string`){n.push({pointer:t,value:e});return}if(Array.isArray(e)){for(let r=0;r<e.length;r++)R(e[r],`${t}/${r}`,n);return}if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))R(i,`${t}/${Ut(r)}`,n)}function Wt(e,t,n){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=z(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}function Gt(e,t,n){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=z(o,`${t}/${Ut(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}function z(e,t,n){return typeof e==`string`?n.get(t)??e:Array.isArray(e)?Wt(e,t,n):typeof e==`object`&&e?Gt(e,t,n):e}function Kt(e){let t=new Map;for(let n of e.matchAll(/⟦REDACTED:([^:⟧]+):([^⟧]+)⟧/g)){let e=n[0],r=t.get(e);r?r.count++:t.set(e,{category:n[1],id:n[2],count:1})}return t}async function qt(e,t,n){let r=[],i=0;for(;i<e.length;){if(n?.aborted)throw new p(`redaction-unavailable`);let a=0,o=i;for(;o<e.length;){let t=e[o].length;if(o>i&&a+t>Vt)break;a+=t,o++}let s=e.slice(i,o),c;try{c=await t.redact(s,n)}catch{throw new p(`redaction-unavailable`)}if(c.length!==s.length)throw new p(`redaction-unavailable`);r.push(...c),i=o}return r}function Jt(e,t,n,r){let i=[],a=Kt(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=Kt(t);for(let[e,{category:t,id:r,count:s}]of o)s>(a.get(e)?.count??0)&&i.push({id:r,category:t,detector:`known-secret`,target:n});let{text:s,matches:c,nextId:l}=m(t,Ht,r);for(let{id:e,category:t}of c)i.push({id:e,category:t,detector:`credential-pattern`,target:n});return{finalText:s,redactions:i,nextId:l}}function Yt(e,t,n){for(let{redactions:r}of e)for(let e of r)t.push(e),n[e.category]=(n[e.category]??0)+1}async function Xt(e,t,n,r){if(r?.aborted)throw new p(`redaction-unavailable`);let{privacy:i,...a}=e,o=[];R(a,``,o);let s=[...t.entries()],c=await qt([...o.map(e=>e.value),...s.map(([,e])=>e)],n,r),l=[],u={},d=1,f=new Map,m=[];for(let e=0;e<o.length;e++){let t=o[e],n=Jt(t.value,c[e],{kind:`json`,pointer:t.pointer},d);d=n.nextId,n.finalText!==t.value&&f.set(t.pointer,n.finalText),m.push(n)}Yt(m,l,u);let h=new Map,g=o.length,_=[];for(let e=0;e<s.length;e++){let[t,n]=s[e],r=Jt(n,c[g+e],{kind:`attachment`,attachmentId:t},d);d=r.nextId,h.set(t,r.finalText),_.push(r)}Yt(_,l,u);let v=z(e,``,f);return{document:{...v,privacy:{...v.privacy,redactionCounts:u,redactions:l}},textAttachments:h}}function Zt(e,t){let n=e.startsWith(`text/`)||e===`application/json`,r=/\.(?:txt|md|json|csv|xml|ya?ml|js|mjs|cjs|ts|tsx|css|html)$/i.test(t);return n||r?`text-redacted`:`binary-unchanged`}async function Qt(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}var $t={"image/png":`.png`,"image/jpeg":`.jpg`,"image/gif":`.gif`,"image/webp":`.webp`,"image/svg+xml":`.svg`,"image/bmp":`.bmp`,"application/pdf":`.pdf`,"application/zip":`.zip`,"application/gzip":`.gz`,"application/json":`.json`,"text/plain":`.txt`,"text/markdown":`.md`,"text/csv":`.csv`,"text/html":`.html`,"text/xml":`.xml`,"application/xml":`.xml`};function en(e,t){return $t[e]??(t===`text-redacted`?`.txt`:`.bin`)}function tn(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${en(t,n)}`}function B(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function nn(e){let t=[];for(let n of e.conversations){let e=0;for(let r of n.messages){let i=r.role;if(i!==`user`&&i!==`assistant`&&i!==`tool-result`)continue;let a=0;for(let o of r.content)o.type===`attachment-ref`&&(t.push({attachmentId:o.attachmentId,conversationId:n.id,messageId:r.id,role:i,userOrdinal:e,imgIndex:a}),a++);i===`user`&&e++}}return t}async function rn(e,t,n,r,i){let a=Zt(e.mimeType,e.name),o={attachmentId:t,originalName:e.name,mimeType:e.mimeType,handling:a,present:!0,sourceConversationId:n,sourceMessageId:r};if(a===`text-redacted`){let t;if(e.text!==void 0)t=e.text;else if(e.data!==void 0)t=new TextDecoder().decode(B(e.data));else if(e.path!==void 0&&i!==void 0)try{t=new TextDecoder().decode(await i(e.path))}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return t===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawText:t}}let s;if(e.data!==void 0)s=B(e.data);else if(e.path!==void 0&&i!==void 0)try{s=await i(e.path)}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return s===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawBytes:s}}function an(e,t,n,r){let i=[],a=new Set,o=new Set;for(let s of e){if(s.role!==`user`){let e=n.get(s.attachmentId);e===void 0?i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId})):i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`image-${s.imgIndex}`,mimeType:e.mimeType,handling:`binary-unchanged`,rawBytes:B(e.data),present:!0,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let e=(t.get(s.conversationId)??[]).filter(e=>e.role===`user`)[s.userOrdinal];if(e===void 0){a.add(s.conversationId),i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-association-unavailable`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let c=(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:e})=>e.kind===`image`||e.kind===`file`&&e.data!==void 0)[s.imgIndex];if(c===void 0){i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}o.add(`${s.conversationId}:${e.id}:${c.i}`),i.push(rn(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function on(e,t,n){return(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:r,i})=>(r.kind===`text`||r.kind===`file`&&(r.data!==void 0||r.path!==void 0))&&!n.has(`${t}:${e.id}:${i}`))}function sn(e,t,n,r,i,a,o){let s=on(t,n,i),c=[];for(let t=0;t<s.length;t++){let{a:i}=s[t],l=`${e.id}-file-${t}`;r.has(l)||(a.push(rn(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function cn(e,t,n,r,i){let a=new Map,o=[];for(let s of e.conversations){let e=(t.get(s.id)??[]).filter(e=>e.role===`user`),c=0;for(let t of s.messages){if(t.role!==`user`)continue;let l=e[c];if(c++,l===void 0)continue;let u=sn(t,l,s.id,n,r,o,i);u.length>0&&(a.has(s.id)||a.set(s.id,new Map),a.get(s.id).set(t.id,[...t.content,...u]))}}return{updates:a,additionalPendingPromises:o}}function ln(e,t){let n=new Map,r=0,i=new Map;for(let t of e)t.handling===`text-redacted`&&t.rawText!==void 0&&n.set(t.attachmentId,t.rawText),t.present&&i.set(t.attachmentId,tn(r++,t.mimeType,t.handling));for(let n of e)!n.present&&n.missingReason!==void 0&&t.add(n.missingReason);return{rawAttachments:e.map(e=>e.present?{id:e.attachmentId,path:i.get(e.attachmentId),originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!0}:{id:e.attachmentId,path:``,originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!1,missingReason:e.missingReason??`attachment-file-missing`}),textMap:n}}async function un(e,t,n,r,i){let{rawAttachments:a,textMap:o}=ln(e,n),s,c;try{let e=await Xt({...t,attachments:a},o,r,i);s=e.document,c=e.textAttachments}catch(e){throw e instanceof p?e:new p(`attachment-unreadable`)}let l=new Map;for(let t of e){if(l.has(t.attachmentId))throw new p(`schema-invalid`);l.set(t.attachmentId,t)}let u=new Map,d=await Promise.all(s.attachments.map(async e=>{if(!e.present||!e.path)return e;let t=l.get(e.id);if(t===void 0)throw new p(`schema-invalid`);let n=t.handling===`text-redacted`?new TextEncoder().encode(c.get(t.attachmentId)??t.rawText??``):t.rawBytes,r=await Qt(n);return u.set(e.path,n),{...e,byteLength:n.length,sha256:r}}));return{redactedDocument:{...s,attachments:d},bundleFiles:u}}async function V(e){let{document:t,chatMessagesByConversation:n,knownSecrets:r,signal:i}=e,a=e.canonicalImages??new Map,o=e.vfsReader,s=new Set,{pendingPromises:c,mismatchedConvIds:l,processedUiPositions:u}=an(nn(t),n,a,o);l.size>0&&s.add(`attachment-association-unavailable`);for(let e of t.conversations)e.messages.filter(e=>e.role===`user`).length>(n.get(e.id)??[]).filter(e=>e.role===`user`).length&&s.add(`attachment-association-unavailable`);let d=await Promise.all(c),{updates:f,additionalPendingPromises:p}=cn(t,n,new Set(d.map(e=>e.attachmentId)),u,o),m=await Promise.all(p),h=[...d,...m],g=t;f.size>0&&(g={...t,conversations:t.conversations.map(e=>{let t=f.get(e.id);return t?{...e,messages:e.messages.map(e=>{let n=t.get(e.id);return n?{...e,content:n}:e})}:e})});let{redactedDocument:_,bundleFiles:v}=await un(h,g,s,r,i),y=[..._.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{..._,session:{..._.session,completeness:{status:y.length>0?`partial`:_.session.completeness.status,missing:y}}},bundleFiles:v}}function H(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function U(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function dn(e,t){if(typeof e==`string`)return e?[{type:`text`,text:e}]:[];let n=[],r=0;for(let i of e)i.type===`text`?i.text&&n.push({type:`text`,text:i.text}):i.type===`image`&&n.push(U(t,r++));return n}function fn(e,t){let n=[],r=new Map,i=0,a=0;for(let o of e)if(o.type===`thinking`)i+=1;else if(o.type===`text`)o.text&&n.push({type:`text`,text:o.text});else if(o.type===`toolCall`)n.push({type:`tool-call`,id:o.id??``,name:o.name??``,input:o.arguments??{}});else if(o.type===`image`){let e=U(t,a++);n.push(e),o.data&&o.mimeType&&r.set(e.attachmentId,{data:o.data,mimeType:o.mimeType})}return{blocks:n,excluded:i,images:r}}function pn(e,t){let n=[],r=new Map,i=0;for(let a of e)if(a.type===`text`)a.text&&n.push({type:`text`,text:a.text});else if(a.type===`image`){let e=U(t,i++);n.push(e),a.data&&a.mimeType&&r.set(e.attachmentId,{data:a.data,mimeType:a.mimeType})}return{blocks:n,images:r}}function mn(e,t,n){let r=H(t,n),i=dn(e.content,r);return{message:{id:r,sequence:n,role:`user`,timestamp:new Date(e.timestamp).toISOString(),content:i},excludedReasoningBlocks:0,images:new Map}}function hn(e,t,n){let r=H(t,n),{blocks:i,excluded:a,images:o}=fn(e.content,r);return{message:{id:r,sequence:n,role:`assistant`,timestamp:new Date(e.timestamp).toISOString(),content:i,model:{provider:e.provider,id:e.model,api:e.api},usage:e.usage,stopReason:e.stopReason,...e.errorMessage?{error:e.errorMessage}:{}},excludedReasoningBlocks:a,images:o}}function gn(e,t,n){let r=H(t,n),{blocks:i,images:a}=pn(e.content,r);return{message:{id:r,sequence:n,role:`tool-result`,timestamp:new Date(e.timestamp).toISOString(),content:i,toolCallId:e.toolCallId,isError:e.isError},excludedReasoningBlocks:0,images:a}}function _n(e,t,n){return e.role===`user`?mn(e,t,n):e.role===`assistant`?hn(e,t,n):e.role===`toolResult`?gn(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function vn(e){let t=[];for(let n of e){if(!n.parentConversationId)continue;let e={sourceConversationId:n.parentConversationId,targetConversationId:n.id};n.originToolCallId&&(e.toolCallId=n.originToolCallId),t.push(e)}return t}function yn(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=_n(r,e.id,i+1);t+=a.excludedReasoningBlocks;for(let[e,t]of a.images)n.set(e,t);return a.message?[a.message]:[]});return{id:e.id,kind:e.kind,name:e.name,...e.folder?{folder:e.folder}:{},...e.parentConversationId?{parentConversationId:e.parentConversationId}:{},...e.createdAt?{createdAt:e.createdAt}:{},...e.updatedAt?{updatedAt:e.updatedAt}:{},messages:r}}),delegations:vn(e),excludedReasoningBlocks:t,canonicalImages:n}}var bn=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n}return e})();function xn(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^bn[(t^e[n])&255];return~t>>>0}var Sn=new TextEncoder;function W(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function G(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255,e[t+2]=n>>>16&255,e[t+3]=n>>>24&255}function Cn(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,W(r,4,20),W(r,6,2048),W(r,8,0),W(r,10,0),W(r,12,0),G(r,14,n),G(r,18,t),G(r,22,t),W(r,26,e.length),W(r,28,0),r.set(e,30),r}function wn(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,W(i,4,20),W(i,6,20),W(i,8,2048),W(i,10,0),W(i,12,0),W(i,14,0),G(i,16,n),G(i,20,t),G(i,24,t),W(i,28,e.length),W(i,30,0),W(i,32,0),W(i,34,0),W(i,36,0),G(i,38,0),G(i,42,r),i.set(e,46),i}function Tn(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,W(r,4,0),W(r,6,0),W(r,8,e),W(r,10,e),G(r,12,t),G(r,16,n),W(r,20,0),r}function En(e){if(!e||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))return!1;for(let t of e.split(`/`))if(t===``||t===`.`||t===`..`)return!1;return!0}function Dn(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${e.session.title.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,40)||`transcript`}-${n}.zip`}async function*On(e,t,n,r,i){if(n?.aborted)throw i(new p(`transfer-aborted`)),new p(`transfer-aborted`);let a=()=>i(new p(`transfer-aborted`));n?.addEventListener(`abort`,a,{once:!0});let o=pe.create(),s=0,c=0,l=[],u=!1;function*d(e){o.update(e),s+=e.byteLength,c+=e.byteLength,yield e}try{let i=new TextEncoder().encode(JSON.stringify(e,null,2)),a=Sn.encode(`transcript.json`),f=xn(i),m=Cn(a,i.length,f);if(l.push({nameBytes:a,size:i.length,crc:f,localOffset:c}),n?.aborted||(yield*d(m),n?.aborted))throw new p(`transfer-aborted`);yield*d(i);for(let[e,r]of t){if(n?.aborted)throw new p(`transfer-aborted`);let t=Sn.encode(e),i=xn(r),a=Cn(t,r.length,i);if(l.push({nameBytes:t,size:r.length,crc:i,localOffset:c}),yield*d(a),n?.aborted)throw new p(`transfer-aborted`);yield*d(r)}let h=c;for(let e of l){if(n?.aborted)throw new p(`transfer-aborted`);yield*d(wn(e.nameBytes,e.size,e.crc,e.localOffset))}if(n?.aborted)throw new p(`transfer-aborted`);yield*d(Tn(l.length,c-h,h)),u=!0,r({byteLength:s,sha256:o.hex()})}catch(e){throw u=!0,i(e),e}finally{n?.removeEventListener(`abort`,a),u||(u=!0,i(new p(`transfer-aborted`)))}}var kn=4294967295,An=65535;function jn(e,t,n){for(let e of t.keys())if(!En(e))throw new p(`schema-invalid`);if(t.size+1>An)throw new p(`schema-invalid`);for(let e of t.values())if(e.byteLength>kn)throw new p(`schema-invalid`);let r,i,a=new Promise((e,t)=>{r=e,i=t});return{filename:Dn(e),chunks:On(e,t,n,r,i),completion:a}}function Mn(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:f},session:{id:e,title:t,state:n,completeness:{status:`complete`,missing:[]},...a},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:r.excludedReasoningBlocks,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:r.conversations,delegations:r.delegations,attachments:[]}}function Nn(e,t){let n=[],r=1;for(let i of e){if(i.role!==`user`&&i.role!==`assistant`)continue;let e=`${t}-msg-${String(r).padStart(6,`0`)}`;n.push({id:e,sequence:r++,role:i.role,timestamp:new Date(i.timestamp||0).toISOString(),content:i.content?[{type:`text`,text:i.content}]:[]})}return n}function Pn(e){if(!d(e).ok)throw new p(`schema-invalid`)}function Fn(e,t,n){let r=new Map;for(let i of e)if(!(!i.present||!i.path))if(i.handling===`text-redacted`){let e=t.get(i.id);e!==void 0&&r.set(i.path,new TextEncoder().encode(e))}else{let e=n.get(i.path);e&&r.set(i.path,e)}return r}async function In(e,t){return Promise.all(e.map(async e=>{if(!e.present||!e.path||e.handling!==`text-redacted`)return e;let n=t.get(e.path);if(!n)return e;let r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=await crypto.subtle.digest(`SHA-256`,r),a=Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``);return{...e,byteLength:n.length,sha256:a}}))}function Ln(e){let t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return{};let n=t[1],r={},i=n.match(/^createdAt:\s*(\d+)\s*$/m),a=n.match(/^updatedAt:\s*(\d+)\s*$/m);return i&&(r.createdAt=new Date(Number(i[1])).toISOString()),a&&(r.updatedAt=new Date(Number(a[1])).toISOString()),r}var Rn=class{deps;constructor(e){this.deps=e}async export(e,t={}){let{signal:n,onProgress:r}=t,i;return i=e.kind===`active`?await this.buildActiveSnapshot(n,r):await this.buildFrozenSnapshot(e.sessionId,n,r),Pn(i.document),r?.({phase:`packaging`}),jn(i.document,i.bundleFiles,n)}async captureFrozen(e,t){let n=await ft(this.deps.collection,t,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&n.sources.length===0)return;let r=yn(n.sources),{document:i,bundleFiles:a}=await V({document:Mn(e.sessionId,e.title,`frozen`,r,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:t});Pn(i),await this.deps.snapshotStore.write(e.sessionId,{document:i,attachments:a})}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await ft(this.deps.collection,e),r=yn(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=Mn(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),V({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,t,n){let r=await this.deps.snapshotStore.read(e);return r?(n?.({phase:`redacting`}),this.reredactStoredSnapshot(r,t)):this.buildLegacyPartial(e,t,n)}async reredactStoredSnapshot(e,t){let n=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let r=e.attachments.get(t.path);r&&n.set(t.id,new TextDecoder().decode(r))}let r,i;try{let a=await Xt(e.document,n,this.deps.knownSecrets,t);r=a.document,i=a.textAttachments}catch{throw new p(`redaction-unavailable`)}let a=Fn(r.attachments,i,e.attachments),o=await In(r.attachments,a);return{document:{...r,attachments:o},bundleFiles:a}}async buildLegacyPartial(e,t,n){let r=(await Ae(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!r)throw new p(`session-not-found`);let i;try{let e=await this.deps.vfs.readFile(`/sessions/${r.filename}`,{encoding:`utf-8`});i=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new p(`session-not-found`)}let{title:a,messages:o}=O(i),s=`legacy-cone`,c=Nn(o,s),l=Ln(i),u={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:f},session:{id:e,title:a,state:`frozen`,...r.frozenAt?{frozenAt:r.frozenAt}:{},...l,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:s,kind:`cone`,name:a,messages:c}],delegations:[],attachments:[]},d=new Map([[s,o]]);return n?.({phase:`redacting`}),V({document:u,chatMessagesByConversation:d,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:t})}async readBinaryFromVfs(e){let t=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(t instanceof Uint8Array))throw new p(`attachment-unreadable`);return t}},zn=`/sessions/data`,Bn=`document.json`;async function Vn(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function Hn(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new p(`session-not-found`)}function Un(e){return`${zn}/${e}`}function Wn(e){return`${zn}/.tmp-${e}`}async function K(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function q(e,t){let n;try{n=await e.readDir(t)}catch{return}for(let r of n){let n=`${t}/${r.name}`;r.type===`directory`&&await q(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function Gn(e,t,n){await K(e,n);let r=await e.readDir(t);for(let i of r){let r=`${t}/${i.name}`,a=`${n}/${i.name}`;if(i.type===`directory`)await Gn(e,r,a);else{let t=await e.readFile(r,{encoding:`binary`});await e.writeFile(a,t)}}}async function Kn(e,t,n){Hn(t);let r=Wn(t),i=Un(t),a=new Map(n.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of n.attachments)if(!a.has(e))throw new p(`schema-invalid`);await q(e,i),await K(e,r);try{let t=[...n.document.attachments];for(let[e,r]of n.attachments){let n=await Vn(r),i=a.get(e);if(i!==void 0){let e=t.indexOf(i);e!==-1&&(t[e]={...i,sha256:n,byteLength:r.length})}}let o={...n.document,attachments:t},s=JSON.stringify(o,null,2);if(await e.writeFile(`${r}/${Bn}`,s),n.attachments.size>0)for(let[t,i]of n.attachments){let n=`${r}/${t}`,a=t.lastIndexOf(`/`);a!==-1&&await K(e,`${r}/${t.slice(0,a)}`),await e.writeFile(n,i)}await e.flush(),await Gn(e,r,i),await e.flush()}catch(t){throw await q(e,r),t}await q(e,r)}async function qn(e,t){Hn(t);let n=Un(t),r=`${n}/${Bn}`,i;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new p(`session-not-found`)}let a;try{a=JSON.parse(i)}catch{throw new p(`schema-invalid`)}if(!d(a).ok)throw new p(`schema-invalid`);let o=new Map;for(let t of a.attachments){if(!t.present||!t.path)continue;let r=`${n}/${t.path}`,i;try{let t=await e.readFile(r,{encoding:`binary`});i=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new p(`transfer-corrupt`)}if(await Vn(i)!==t.sha256)throw new p(`transfer-corrupt`);o.set(t.path,i)}return{document:a,attachments:o}}function J(){throw new p(`redaction-unavailable`)}function Y(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&J(),e.texts}function Jn(){return{async redact(e){let t;try{t=await fetch(y(`/api/secrets/redact-export`),{method:`POST`,headers:b({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{J()}t.ok||J();let n;try{n=await t.json()}catch{J()}return Y(n,e.length)}}}function Yn(){return{async redact(e){let t;try{t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.redact-export`,texts:e},e=>{chrome.runtime.lastError,t(e??null)})})}catch{J()}return typeof t==`object`&&t&&`error`in t&&J(),Y(t,e.length)}}}function Xn(){return{async redact(e){let t;try{t=await S(`secrets.redact-export`,{texts:e})}catch{J()}return t??J(),typeof t==`object`&&`error`in t&&J(),Y(t,e.length)}}}function Zn(){return{async redact(e){J()}}}function Qn(){let e=x();return e===`connect`?Zn():e===`extension-direct`?Yn():e===`extension-delegate`?Xn():Jn()}function $n(e,t=Date.now){let n=e.parentId===null,r=e.folder??e.name,i={jid:e.id??(n?`cone_${t()}`:`scoop_${r}_${t()}`),name:e.name,folder:r,requiresTrigger:!n,assistantLabel:n?`sliccy`:r,addedAt:new Date(t()).toISOString(),parentJid:e.parentId,...e.config?{config:e.config,configSchemaVersion:3}:{},...e.notifyOnComplete===!1?{notifyOnComplete:!1}:{}};return n||(i.trigger=`@${r}`),i}var er=`padding:0.5rem 1.25rem;border-radius:0.375rem;cursor:pointer;font:inherit;font-size:0.875rem;`,tr=`${er}border:none;background:var(--s2-accent-color,#0265dc);color:#fff;`,nr=`${er}border:none;background:#d23;color:#fff;`,rr=`${er}background:transparent;border:1px solid var(--s2-border-color,#e0e0e0);color:inherit;`;function ir(e,t,n){return{...$n({parentId:null,name:e,folder:`cone-pending-${t.length+1}`}),assistantLabel:e,...n?{model:n}:{}}}function ar(e,t){let n=e.createElement(`slicc-dialog`);n.setAttribute(`heading`,t.heading),n.append(t.body);for(let r of t.actions){let t=e.createElement(`button`);t.setAttribute(`slot`,`footer`),t.type=`button`,t.dataset.coneAction=r.data,t.textContent=r.text,t.style.cssText=r.style,t.addEventListener(`click`,r.onClick),n.append(t)}return n.addEventListener(`slicc-dialog-close`,()=>t.onDismiss(n)),n}function or(e,t){let n=e.createElement(`form`);n.style.cssText=`display:flex;flex-direction:column;gap:0.5rem;padding:0.25rem 0;`;let r=`font-size:0.9375rem;padding:0.5rem 0.625rem;border:1px solid var(--s2-border-color,#e0e0e0);border-radius:0.375rem;background:transparent;color:inherit;font-family:inherit;`,i=e.createElement(`input`);i.type=`text`,i.name=`name`,i.placeholder=`Name`,i.setAttribute(`aria-label`,`Cone name`),i.maxLength=40,i.autocomplete=`off`,i.required=!0,i.style.cssText=r;let a=e.createElement(`textarea`);a.name=`brief`,a.placeholder=`What should it work on? (optional)`,a.setAttribute(`aria-label`,`What the cone should work on`),a.rows=3,a.style.cssText=`${r}resize:vertical;`,n.append(i,a);let o=()=>({name:i.value.trim(),brief:a.value.trim()});return n.addEventListener(`submit`,e=>{e.preventDefault(),t(o())}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),t(o()))}),n.readDraft=o,n}function sr(e){let{freezer:t,client:n,log:r}=e,i=t.ownerDocument,a=null,o=!1,s=null,c=()=>t.querySelector(`slicc-freezer-new`),l=()=>at(n.getScoops(),e.getSelected()),u=()=>{if(!s)return;let e=s;s=null,e.hide?.(),e.remove()},d=e=>{u();let t=ar(i,{...e,onDismiss:e=>{s===e&&(s=null),e.remove()}});s=t,i.body.append(t),t.show?.()},f=e=>{if(!e.name)return;u();let t=l(),i=ir(e.name,n.getScoops(),t?T(t):void 0);a=e.name,n.registerScoop(i,e.brief?{description:e.brief,prompt:e.brief}:{}).catch(e=>r.warn(`WC cone create failed`,e)),g()},p=()=>{let e=or(i,f);d({heading:`New cone`,body:e,actions:[{text:`Create`,style:tr,data:`create`,onClick:()=>f(e.readDraft())},{text:`Cancel`,style:rr,data:`cancel`,onClick:u}]}),queueMicrotask(()=>e.querySelector(`input`)?.focus())},m=t=>{u();let i=E(n.getScoops()),a=i.find(e=>e.jid===t);if(!a||i.length<=1||o){g();return}o=!0,g(),(async()=>{try{await e.freezeCone(a)}catch(e){r.warn(`WC cone freeze before drop failed`,e)}let t=l()?.jid===a.jid;try{await n.unregisterScoop(a.jid)}catch(e){r.warn(`WC cone drop failed`,e)}if(t){let t=E(n.getScoops()).find(e=>e.jid!==a.jid);t&&e.selectScoop(t)}o=!1,g()})()},h=e=>{let t=A(e),n=i.createElement(`p`);n.textContent=`Its chat goes to the Freezer.`,n.style.cssText=`font-size:0.875rem;margin:0;`,d({heading:`Drop ${t}?`,body:n,actions:[{text:`Drop`,style:nr,data:`drop`,onClick:()=>m(e.jid)},{text:`Cancel`,style:rr,data:`cancel`,onClick:u}]})},g=()=>{let t=E(n.getScoops());if(a!==null){let n=t.find(e=>e.name===a&&!e.folder.startsWith(`cone-pending-`));n&&(a=null,e.getSelected()?.jid!==n.jid&&e.selectScoop(n))}let r=c();r?.setAttribute(`cones`,String(t.length)),r?.toggleAttribute(`busy`,o)};return t.addEventListener(`new-cone`,p),t.addEventListener(`drop-cone`,()=>{let e=l();!e||E(n.getScoops()).length<=1||o||h(e)}),g(),{refresh:g,dialog:()=>s}}function X(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function cr(e){switch(e){case`processing`:return`working`;case`error`:return`broken`;case`initializing`:return`initializing`;case`ready`:case void 0:return`idle`}return`idle`}function lr(e,t,n,r,i,a){return lt(e,a).map(e=>{let a=n?.get(e.jid),o=t?.get(e.jid);return{key:e.jid,type:w(e)?`cone`:`scoop`,color:pt({isRoot:w(e),name:e.name}),label:A(e),eyes:X(o),state:cr(o),fill:typeof a==`number`?Math.round(a*100):void 0,phase:o===`processing`?r?.get(e.jid):void 0,awaiting:i===e.jid||void 0}})}function ur(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=lr(t.getScoops(),e.statuses,e.fills,e.phases,e.awaitingInput,e.getSelected()?.jid)),e.refreshConeActions?.()};e.refreshScoops=t;let 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:`)||r?.startsWith(`cone:`)){let n=ot(t,r);if(n){e.pendingUrlContext=null,e.selectScoop(n);return}}let i=j(t);i&&(e.pendingUrlContext=null,e.selectScoop(i))};return{onStatusChange:(n,r)=>{let i=e.statuses.get(n),a=r;e.statuses.set(n,a),a!==`ready`&&e.awaitingInput===n&&(e.awaitingInput=null),(X(i)!==X(a)||cr(i)!==cr(a))&&(t(),e.notifyScoopStateChanged?.()),e.getSelected()?.jid===n&&e.getController()?.setProcessing(r===`processing`)},onScoopCreated:r=>{t(),!e.getSelected()&&!n()&&!e.pendingUrlContext&&e.selectScoop(r)},onScoopListUpdate:n=>{let i=new Set(n.map(e=>e.jid));for(let t of e.lickBackpressure.keys())i.has(t)||e.lickBackpressure.delete(t);t(),r()},onScoopActivity:t=>{e.refs.switcher.setAttribute(`attention`,t)},onScoopPhaseChange:(n,r)=>{e.phases.set(n,r),t(),e.notifyScoopStateChanged?.()},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`&&Ze(n.channel)&&e.getController()?.addLickMessage(n.id,n.content,n.channel,new Date(n.timestamp).getTime(),n.lickId)},onLickBackpressure:(t,n)=>{n.count<=0?e.lickBackpressure.delete(t):e.lickBackpressure.set(t,n);let r=e.getSelected();if(r?.jid!==t)return;let i=ct(r);e.getController()?.setLickBackpressure(n.count,n.waitingMs,i)},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 dr(e,t,n,r,i=mt){let a=await e.setScoopThinkingLevel(t,n,r);return a&&i(),a}function fr(e,t){return ut(e)===null||new URL(t.location.href).searchParams.get(`cherry`)===`1`||se(t.localStorage)}async function pr(e,t,n=[]){e.thread.setAttribute(`context`,dt(t));let r=w(t),i=pt({isRoot:r,name:t.name});e.thread.setAttribute(`accent`,i),e.switcher.setAttribute(`active`,t.jid),We(e,r?{kind:`cone`}:{kind:`scoop`,accent:i});let a=localStorage.getItem(`slicc_locked_effort_level`),s=xe(t);e.composerMeta.setAttribute(`thinking`,gt(a??s.level,s.effortOverride));try{let{resolveCurrentModel:r,resolveModelById:i}=await o(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./provider-settings-DNJS-V3F.js`).then(e=>e.t);return{resolveCurrentModel:e,resolveModelById:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),s=T(at(n,t)??t),c=s?i(s.id,s.provider):r();e.composerMeta.setAttribute(`model`,c.name??c.id),e.composerMeta.toggleAttribute(`no-thinking`,c.reasoning!==!0||!!a)}catch{}}async function mr(e){if(fr(e.pendingUrlContext,e.win))return;let t=ut(e.pendingUrlContext);if(t===null)return;let{SessionStore:n}=await o(async()=>{let{SessionStore:e}=await import(`./chat-session-store-pWb1-jNp.js`).then(e=>e.n);return{SessionStore:e}},__vite__mapDeps([35,1])),r=new n;await r.init();let i=await r.load(ye({folder:t}));i&&i.messages.length>0&&!e.hasSelection()&&(e.loadMessages(i.messages),e.onHydrated())}function hr(e){let{boot:t,client:n,agentHandle:r,openReader:i,log:a}=e,{refs:s}=t;o(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-CRVvrH3X.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([36,3,37,1])).then(({createPlaceholderRefresher:n})=>{e.setRefreshPlaceholder(n({inputCard:s.inputCard,getMessages:()=>t.getController()?.getMessages()??[],defaultPlaceholder:s.inputCard.getAttribute(`placeholder`)??`Ask sliccy, or describe a change…`}))}),mr({pendingUrlContext:t.wiring.pendingUrlContext,win:window,hasSelection:()=>!!t.getSelected(),loadMessages:e=>t.getController()?.loadMessages(e),onHydrated:e.triggerPlaceholder}).catch(e=>a.warn(`WC session hydration failed`,e));let c=null;return o(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-CPoS-Z-g.js`);return{wireWcAttach:e}},__vite__mapDeps([38,3,14,12,39])).then(({wireWcAttach:t})=>{c=t({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:i,openWriter:e.openWriter,listConversations:async()=>{let{readSessionsIndex:e}=await o(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-BcGQ4XGx.js`).then(e=>e.o);return{readSessionsIndex:e}},__vite__mapDeps([40,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,41,42,43,44,37,45]));return(await e(await i())).map(e=>({id:e.filename,label:e.title,sub:`${e.messageCount} turns`}))},log:a})}).catch(e=>a.error(`WC add-menu wiring failed`,e)),s.switcher.setAttribute(`gaze-target`,`slicc-input-card`),s.inputCard.addEventListener(`input`,()=>{s.switcher.scrutinize(),s.switcher.wake()}),s.inputCard.addEventListener(`submit`,e=>{let n=Ie(e);if(!n)return;t.wiring.awaitingInput=null,t.wiring.refreshScoops?.(),t.wiring.notifyScoopStateChanged?.();let r=e.detail?.source===`dictation`;r&&(o(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-BNX-jA0G.js`);return{markVoiceSubmission:e}},__vite__mapDeps([46,11,37,1,47,3,15,29,19,12,48,49,13,14,16,17,50,51])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),o(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([52,11,53])).then(({beginVoiceTurn:e,playCue:t})=>{e(),t(`sent`)}).catch(()=>void 0)),t.getController()?.sendUserMessage(n,c?.take(),{dictation:r,steer:Ve(e)}),s.inputCard.clear?.();let i=t.getSelected()?.jid;i&&(s.switcher.setAttribute(`attention`,i),t.wiring.lastActivity.set(i,n.slice(0,600)))}),s.inputCard.addEventListener(`stop`,()=>{t.getController()?.processing&&r.stop()}),o(async()=>{let{wireWcHistoryNav:e}=await import(`./wc-history-nav-C5w8ianG.js`);return{wireWcHistoryNav:e}},[]).then(({wireWcHistoryNav:e})=>e({thread:s.thread,inputCard:s.inputCard})).catch(e=>a.error(`WC history nav wiring failed`,e)),s.composerMeta.addEventListener(`thinking-change`,e=>{if(localStorage.getItem(`slicc_locked_effort_level`))return;let r=e.detail?.thinking,i=yt(r),o=_t(r),s=t.getSelected();s&&i&&dr(n,s.jid,i,o).catch(e=>a.warn(`local thinking update failed`,e))}),{getAttachStage:()=>c}}var gr=`<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 _r(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 vr(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(gr));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{let n=_r(e.getMessages());await t(n??Pe([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=Pe([...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 yr(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 br(e){return`
3
- <div class="sprinkle-action-card">
4
- <div class="sprinkle-action-card__header">${me(yr(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 xr(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var Sr=class e{#e;#t;#n;#r;#i;#a=null;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;#y=[];#b=[];#x=null;#S=new Map;#C=null;#w=null;#T=``;#E=!1;#D=!1;#O=`thinking`;#k=0;#A=null;#j=new Set;#M=new Map;#N=new Map;#P=new Set;constructor(e){this.#e=e.thread,this.#t=e.agent,this.#n=e.onProcessingChange,this.#r=e.onBusyPhaseChange,this.#i=e.onToolProgressChange,this.#o=e.onMessageRendered,this.#s=e.onMessageDisposed,this.#c=e.onTurnComplete,this.#l=e.resolveTelemetryContext,this.#u=e.onQueuedChange,this.#d=e.onLickBackpressureChange,this.#f=e.onQueuedCancel,this.#p=e.onToolUiAction,this.#m=e.readOnlyToolUi??!1,this.#h=e.agent.onEvent(e=>this.#W(e)),this.#v=e=>this.#le(e),this.#e.addEventListener(`slicc-error-retry`,this.#v)}dispose(){this.#h(),this.#e.removeEventListener(`slicc-error-retry`,this.#v);for(let e of[...this.#M.keys()])this.#ce(e);this.#N.clear(),this.#P.clear(),this.#se()}get processing(){return this.#D}getMessages(){return this.#y.map(e=>({...e}))}setAgent(e){this.#h(),this.#t=e,this.#h=e.onEvent(e=>this.#W(e))}setOnLocalUserMessage(e){this.#g=e}setOnLocalProcessingChange(e){this.#_=e}addUserMessage(e,t){this.#fe({id:Z(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#b.map(xr)}removeQueuedMessage(e){let t=this.#b.filter(t=>t.id!==e);t.length!==this.#b.length&&(this.#b=t,this.#I())}#F(){if(this.#b.length===0)return;let e=this.#b;this.#b=[];for(let t of e)this.#fe(t);this.#I()}#I(){this.#u?.(this.#b.map(xr))}#L(){this.#d?.(this.#x)}setLickBackpressure(e,t,n){if(e<=0){if(!this.#x)return;this.#x=null,this.#L();return}this.#x={text:`${e} events waiting for the current turn`},this.#L();try{te(n,t)}catch{}}addAssistantMessage(e){this.#fe({id:Z(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#S.keys())this.#s?.(e);for(let e of[...this.#M.keys()])this.#ce(e);this.#N.clear(),this.#P.clear(),this.#se();let t=this.#b.length>0;if(this.#b.length>0){if(this.#f)for(let e of this.#b)try{this.#f(e.id)}catch(e){console.error(`onQueuedCancel hook threw`,e)}this.#b=[]}t&&this.#I(),this.#y=Ye(e);let n=[...this.#y].reverse().find(e=>e.isStreaming);this.#C=n?.id??null,n&&(this.#w=n.id),this.#T=``,this.#E=!1,this.#S.clear();let r=[],i=``;for(let e of this.#y){let t=new Date(e.timestamp).toDateString();t!==i&&(r.push(Re(e.timestamp)),i=t);let n=this.#de(e);this.#S.set(e.id,n),r.push(...n)}let a=this.#e;typeof a.replaceContent==`function`?a.replaceContent(...r):a.replaceChildren(...r),this.#ge();for(let e of this.#y)e.isStreaming||this.#o?.(e,this.#S.get(e.id)??[]);this.#U(),this.#ve(),this.#R()}#R(){if(this.#e.getAttribute(`context`)!==`cone`||this.#y.length===0||!v()||this.#D)return;let e=this.#y[this.#y.length-1];e.role!==`user`||e.source===`lick`||e.source===`delegation`||e.queued||this.#le(new Event(`slicc-error-retry`))}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#z(r):r,a={id:Z(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#D&&!n?.steer?(this.#b.push(a),this.#I()):this.#fe(a),n?.steer?this.#t.sendMessage(i,a.id,a.attachments,{steer:!0}):this.#t.sendMessage(i,a.id,a.attachments),this.#B();try{let e=n?.dictation?Ce(i):i;this.#g?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#z(e){return Te(e,we())}#B(){if(this.#l)try{let e=this.#l();if(!e)return;re(e.scoopName,e.model)}catch{}}addLickMessage(e,t,n,r,i){let a=this.#y[this.#y.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.#pe(a);return}this.#fe({id:e,role:`user`,content:t,timestamp:r,source:`lick`,channel:n,lickId:i,lickState:i?`pending`:void 0,queued:this.#D?!0:void 0})}updateLickState(e,t){let n=this.#y.find(t=>t.lickId===e);n&&(n.lickState=t,this.#pe(n))}setProcessing(e){if(this.#D!==e){this.#D=e,e&&(this.#w=null),e&&(this.#k=0,this.#V(`thinking`)),e&&this.#F(),e||(this.#x&&(this.#x=null,this.#L()),this.#U()),this.#n?.(e);try{this.#_?.(e)}catch(e){console.error(`onLocalProcessingChange hook threw`,e)}e||this.#H()}}#V(e){this.#O!==e&&(this.#O=e,this.#r?.(e))}#H(){let e=this.#w;if(this.#w=null,!this.#c)return;let t=e?this.#ue(e):null;this.#c(t?{...t}:null)}#U(){let e=this.#y[this.#y.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#A?.remove();return}this.#A??=vr({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#A)}#W(e){switch(e.type){case`message_start`:this.#G(e.messageId);break;case`content_delta`:this.#K(e.messageId,e.text);break;case`content_done`:this.#J(e.messageId,e.model,e.usage);break;case`tool_use_start`:this.#X(e.messageId,e.toolName,e.toolInput,e.toolCallId);break;case`tool_result`:this.#Q(e.messageId,e.toolName,e.result,e.isError,e.toolCallId);break;case`tool_ui`:this.#ne(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#re(e.requestId);break;case`tool_progress`:this.#ie(e.messageId,e.toolName,e.progress,e.toolCallId);break;case`turn_end`:this.#$(e.messageId);break;case`error`:this.#ee(e.error)}}#G(e){this.setProcessing(!0),this.#C=e,this.#w=e,this.#fe({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#K(e,t){this.#ue(e)&&(this.#T+=t,!this.#E&&(this.#E=!0,requestAnimationFrame(()=>this.#q(e))))}#q(e){if(this.#E=!1,!this.#T)return;let t=this.#ue(e);t&&(t.content+=this.#T,this.#T=``,this.#pe(t))}#J(e,t,n){let r=this.#ue(e);r&&(t&&(r.model=t),n&&(r.usage=n),this.#T&&this.#C===e&&(r.content+=this.#T),this.#T=``,this.#E=!1,r.isStreaming=!1,this.#pe(r))}static#Y(e,t){return`${e}:${t}`}#X(t,n,r,i){let a=this.#ue(t);if(!a)return;a.toolCalls=a.toolCalls??[];let o=i?e.#Y(t,i):Z();this.#P.add(o),a.toolCalls.push({id:o,name:n,input:r}),this.#k+=1,this.#V(`tool`),this.#pe(a)}#Z(t,n,r){let i=t?.toolCalls??[];if(r){let n=t?e.#Y(t.id,r):void 0;return i.find(e=>e.id===n)??i.find(e=>e.id===r)}return[...i].reverse().find(e=>e.name===n&&e.result===void 0)}#Q(e,t,n,r,i){let a=this.#ue(e),o=this.#Z(a,t,i);!a||!o||(o.result=n,o.isError=r,o.id&&(this.#N.delete(o.id),this.#se()),this.#k=Math.max(0,this.#k-1),this.#k===0&&this.#V(`thinking`),this.#pe(a))}#$(e){let t=this.#ue(e);t?.isStreaming&&(t.isStreaming=!1,this.#pe(t)),this.#C=null,this.setProcessing(!1)}#ee(e){this.setProcessing(!1),this.#fe({id:Z(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#te(e)}#te(e){try{if(ae(e)||ne(e)||C(e))return;ie(`error-card`,e)}catch{}}#ne(e,t,n){this.#ce(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.#m){let e=De(r,br(n),()=>{},!1);this.#M.set(t,{instance:e,container:r});return}let i=De(r,n,(e,n)=>{this.#p?.(t,e,n)},!1);this.#M.set(t,{instance:i,container:r}),this.#p?.(t,ee,void 0)}#re(e){this.#ce(e)}#ie(e,t,n,r){let i=this.#ue(e),a=this.#Z(i,t,r);a?.id&&(n.phase===`end`?this.#N.delete(a.id):this.#N.set(a.id,n),this.#ae(a.id),this.#se())}#ae(e){let t=this.#e.querySelector(`slicc-action-row[data-tool-id="${CSS.escape(e)}"]`);t&&He(t,this.#N.get(e)??null),this.#oe()}#oe(){let e=this.#e.querySelectorAll(`slicc-tool-cluster`);for(let t of e){let e=[...t.querySelectorAll(`slicc-action-row[data-tool-id]`)].filter(e=>e.dataset.toolId&&this.#P.has(e.dataset.toolId)).map(e=>{let t=e.dataset.toolId,n=e.getAttribute(`result`);return{done:n!==null&&n!==`…`,fraction:this.#N.get(t)?.fraction}});Le(t,qe(e))}}#se(){let e=null,t=[...this.#N.values()];t.length>0&&t.every(e=>typeof e.fraction==`number`)&&(e=t.reduce((e,t)=>e+t.fraction,0)/t.length),e!==this.#a&&(this.#a=e,this.#i?.(e))}#ce(e){let t=this.#M.get(e);if(t){this.#M.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#le(e){if(this.#D)return;let t=e.detail?.messageId??null,n=this.#y.length;if(t){let e=this.#y.findIndex(e=>e.id===t);e>=0&&(n=e)}let r=n>0?this.#y[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.#y[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)}#ue(e){return this.#y.find(t=>t.id===e)}#de(e){try{return ze(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]}}#fe(e){this.#he(),this.#y.push(e);let t=this.#de(e);this.#S.set(e.id,t),this.#e.append(...t),this.#ge(),e.isStreaming||this.#o?.(e,t),e.role===`user`?this.#ve():this.#ye()}#pe(e){this.#he(),this.#s?.(e.id);let t=this.#S.get(e.id)??[],n=this.#de(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.#S.set(e.id,n);for(let t of e.toolCalls??[])t.id&&this.#N.has(t.id)&&this.#ae(t.id);this.#ge(),this.#oe(),e.isStreaming||this.#o?.(e,n),this.#ye()}#me(){return this.#e.inner??this.#e}#he(){Ue(this.#me(),this.#j)}#ge(){Ge(this.#me(),{openClusterAnchors:this.#j,toolCallLookup:(e,t)=>this.#_e(e,t)})}#_e(e,t){return this.#y.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#ve(){this.#e.scrollTop=this.#e.scrollHeight}#ye(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#ve()}};function Cr(e,t,i,a,s){let c=new Map;o(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-DcRu2WCJ.js`);return{loadDipStyles:e}},__vite__mapDeps([54,3])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),o(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-CXRqxpw6.js`).then(e=>e.i);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([55,1,56,11])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0),o(async()=>{let{applyThemeOverrides:e}=await import(`./theme-engine-By4GU_Wc.js`).then(e=>e.p);return{applyThemeOverrides:e}},__vite__mapDeps([56,1,11])).then(({applyThemeOverrides:e})=>e()).catch(()=>void 0);let l=t.createAgentHandle();l.onEvent(t=>{(t.type===`tool_use_start`||t.type===`tool_result`)&&(t.type===`tool_result`&&t.isError&&e.switcher.glower(),o(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([52,11,53])).then(({playCue:e})=>e(t.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0))});let u=new Sr({thread:e.thread,agent:l,resolveTelemetryContext:()=>{let e=i();if(!e)return null;let t=ct(e);try{let i=T(e);return{scoopName:t,model:(i?r(i.id,i.provider):n()).id}}catch{return{scoopName:t,model:``}}},onTurnComplete:e=>{o(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-BNX-jA0G.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([46,11,37,1,47,3,15,29,19,12,48,49,13,14,16,17,50,51])).then(async({consumeVoiceSubmission:t,speakReplyMarkdown:n})=>{if(!t())return;let{endVoiceTurn:r,setTtsActive:i}=await o(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([52,11,53]));try{if(e?.content){i(!0);try{await n(e.content)}finally{i(!1)}}}finally{r()}}).catch(()=>void 0)},onProcessingChange:t=>{e.frame.toggleAttribute(`data-processing`,t),e.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,t),t||a?.()},onBusyPhaseChange:t=>{e.inputCard.querySelector(`slicc-send-button`)?.setAttribute(`phase`,t)},onToolProgressChange:t=>{let n=e.inputCard.querySelector(`slicc-send-button`);n&&(t===null?n.removeAttribute(`progress`):n.setAttribute(`progress`,t.toFixed(3)))},onMessageDisposed:e=>{let t=c.get(e);t&&(ke(t),c.delete(e))},onMessageRendered:(e,n)=>{let r=n[0];r&&c.set(e.id,Oe(r,(e,n)=>{let r={type:`sprinkle`,sprinkleName:`inline`,timestamp:new Date().toISOString(),body:{action:e,data:n}};s?.intercept?.(r)||t.sendSprinkleLick(`inline`,{action:e,data:n})}))},onQueuedChange:t=>e.queuedStack.setMessages(t),onLickBackpressureChange:t=>{e.lickBackpressureNotice.textContent=t?.text??``,e.lickBackpressureNotice.toggleAttribute(`hidden`,t===null)},onToolUiAction:(e,n,r)=>{t.sendToolUiAction(e,n,r)},onQueuedCancel:e=>{let n=t.selectedScoopJid;n&&t.deleteQueuedMessage(n,e).catch(()=>void 0)}});return e.queuedStack.addEventListener(`slicc-queued-remove`,e=>{let n=e.detail?.id;if(!n)return;u.removeQueuedMessage(n);let r=t.selectedScoopJid;r&&t.deleteQueuedMessage(r,n).catch(()=>void 0)}),{controller:u,agentHandle:l}}function wr(e){if(!(!e.cone||e.cone===`cone`))return e.coneLabel||e.cone.replace(/^cone-/,``)}function Tr(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function Er(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Tr(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Dr(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 Or(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(D,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 Or(e){let t=await kr(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function kr(e){let t;try{let n=await e.readFile(D,{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 Ar(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),a=i.slice(0,2e3),o=/^title:\s*"?(.*?)"?\s*$/m.exec(a)?.[1]??r,s=/^frozenAt:\s*"?(.*?)"?\s*$/m.exec(a)?.[1]??new Date(0).toISOString(),c=Number(/^messageCount:\s*(\d+)\s*$/m.exec(a)?.[1]??0),l=O(i);n.push({filename:r,title:o,frozenAt:s,messageCount:c,...l.cost?{cost:l.cost}:{},...l.models?{models:l.models}:{},...l.cone?{cone:l.cone}:{},...l.coneLabel?{coneLabel:l.coneLabel}:{},...l.memorySkipped?{memorySkipped:!0}:{},...r.startsWith(`pending-`)?{pendingEnrichment:!0}:{}})}catch{}return n.sort((e,t)=>t.frozenAt.localeCompare(e.frozenAt)),n}function jr(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(Er))}async function Mr(e,t){let n=await e.readFile(Me(t),{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=O(r);return{title:i.title||t.title,messages:i.messages}}async function Nr(e,t){let{getTranscriptExportService:n}=await o(async()=>{let{getTranscriptExportService:e}=await import(`./export-provider-BEHTjSYw.js`).then(e=>e.t);return{getTranscriptExportService:e}},__vite__mapDeps([57,1,12]));await n().captureFrozen({sessionId:t.sessionId??t.archive.id,title:t.archive.title,frozenAt:t.archive.frozenAt,createdAt:t.archive.createdAt,updatedAt:t.archive.updatedAt,...e?{rootJid:e.jid}:{}})}async function Pr(e){let{root:t}=e,n=t?{folder:t.folder,label:A(t),jid:t.jid}:void 0,r=e=>Nr(t,e);if(e.action!==`save`){await e.runNewSessionFreezeQuick({vfs:e.writer,cone:n,captureCompleteSnapshot:r});return}await e.runNewSessionFreeze({vfs:e.writer,cone:n,agenticMemorySpawn:t=>e.client.spawnAgent(t),captureCompleteSnapshot:r,onProgress:t=>{let n=e.freezerNew();n&&(t===null?n.removeAttribute(`progress`):n.setAttribute(`progress`,String(t)))},onBackgroundEnriched:e.refreshFreezer})}function Fr(e,t){let n=t?wr(t):void 0,r=e.createElement(`slicc-day-separator`);return r.setAttribute(`label`,n?`Frozen chat · from cone ${n}`:`Frozen chat`),r.setAttribute(`data-frozen-provenance`,n??``),r}function Ir(e){let{refs:t,openVfs:n,client:r,getController:i,getSelected:a,clearSelection:s,log:c}=e,l=[],u=null,d=t=>{u=null,e.selectScoop(t)},f=0,p=!1,m=()=>{let e=++f;n().then(async({reader:n,writer:r})=>{let i=await Or(n);if(i===null){if((await kr(n)).kind!==`corrupt`||(c.warn(`WC freezer index corrupt — rebuilding from archives`),i=await Ar(n),i.length===0))return;await r.writeFile(D,JSON.stringify(i,null,2))}e===f&&(l=i,jr(t.freezer,i),!p&&i.some(e=>!e.icon&&!e.pendingEnrichment)&&(p=!0,o(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-9w6VrHaQ.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([58,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,59,43])).then(({pickLucideIcon:e})=>Dr({reader:n,writer:r,freezer:t.freezer,entries:i,pickIcon:t=>e({subject:t})})).catch(e=>c.warn(`WC freezer icon enrichment failed`,e)).finally(()=>{p=!1})))}).catch(e=>c.error(`WC freezer refresh failed`,e))},h=!1,g=()=>t.freezer.querySelector(`slicc-freezer-new`),_=e=>{h||(h=!0,g()?.setAttribute(`busy`,``),(async()=>{let t=at(r.getScoops(),a());try{let{writer:a}=await n(),{resetNewSessionTmp:s,runNewSessionFreeze:c,runNewSessionFreezeQuick:l}=await o(async()=>{let{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}=await import(`./new-session-CEfChDqS.js`);return{resetNewSessionTmp:e,runNewSessionFreeze:t,runNewSessionFreezeQuick:n}},__vite__mapDeps([60,2,1,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,61,0,28,29,30,31,32,33,34,59,35,40,41,42,43,44,37,45]));e!==`erase`&&await Pr({action:e,writer:a,root:t,client:r,freezerNew:g,refreshFreezer:m,runNewSessionFreeze:c,runNewSessionFreezeQuick:l}),await s(a),await r.clearAllMessages(t?.jid),i()?.loadMessages([]),window.dispatchEvent(new CustomEvent(bt)),o(async()=>{let{resetDictationPriming:e}=await import(`./dictation-priming-CNllGgNq.js`).then(e=>e.r);return{resetDictationPriming:e}},__vite__mapDeps([37,1])).then(({resetDictationPriming:e})=>e()).catch(()=>void 0),m();let u=r.getScoops().find(e=>e.jid===t?.jid)??j(r.getScoops());u&&d(u)}catch(e){c.error(`WC new session failed`,e)}finally{h=!1;let e=g();e?.removeAttribute(`busy`),e?.removeAttribute(`progress`)}})())};for(let e of[`save`,`skip`,`erase`])t.freezer.addEventListener(`new-chat-${e}`,()=>_(e));let v=async e=>{let{writer:t}=await n(),{runNewSessionArchiveOnly:r}=await o(async()=>{let{runNewSessionArchiveOnly:e}=await import(`./new-session-CEfChDqS.js`);return{runNewSessionArchiveOnly:e}},__vite__mapDeps([60,2,1,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,61,0,28,29,30,31,32,33,34,59,35,40,41,42,43,44,37,45]));await r({vfs:t,cone:{folder:e.folder,label:A(e),jid:e.jid},captureCompleteSnapshot:t=>Nr(e,t)}),m()};oe(`agentic-memory`)&&g()?.setAttribute(`no-skip`,``),window.addEventListener(vt,e=>{let t=e.detail?.action;(t===`save`||t===`skip`||t===`erase`)&&_(t)});let y=async e=>{let o=l.find(t=>t.filename===e);try{let{reader:r}=await n();o||=(await Or(r)??[]).find(t=>t.filename===e);let{messages:a}=await Mr(r,o??{filename:e,title:e,frozenAt:``,messageCount:0});t.thread.setAttribute(`context`,`freezer:${o?.filename??e}`),u=o?.sessionId??o?.filename??null,i()?.loadMessages(a),(t.thread.inner??t.thread).prepend(Fr(t.thread.ownerDocument,o)),t.thread.setAttribute(`accent`,Je),We(t,{kind:`freezer`}),t.inputCard.setAttribute(`disabled`,``),t.switcher.removeAttribute(`active`),s()}catch(e){if(c.error(`WC thaw failed`,e),!a()){let e=st(r.getScoops(),o?.cone);e&&d(e)}}};return t.freezer.addEventListener(`freezer-card-select`,e=>{let t=e.detail?.slug;t&&y(t)}),{refreshFreezer:m,openFrozen:y,getViewedFrozenSessionId:()=>u,freezeCone:v}}var Lr={R:`running`,S:`pending`,Z:`exited`,K:`killed`};function Rr(e){return Lr[e.trim().split(` `)[2]??``]??`unknown`}function zr(e){let t=fe();if(t.state!==`inactive`)return{role:`follower`,state:t.state,joinUrl:t.joinUrl,sessionId:t.trayId,workerBaseUrl:ue(t.joinUrl)?.workerBaseUrl??null,stalled:t.stalled};let n=ge();if(n.state!==`inactive`)return{role:`leader`,state:n.state,joinUrl:n.session?.joinUrl,sessionId:n.session?.trayId,workerBaseUrl:n.session?.workerBaseUrl};let r=null;try{r=ce(e.getItem(le))}catch{}return{role:`standalone`,state:`inactive`,workerBaseUrl:r}}function Br(e){let{client:n,openReader:r,storage:s}=e;return{getScoops:()=>n.getScoops(),isProcessing:e=>n.isProcessing(e),getCronTasks:async()=>{let{getAllCronTasks:e}=await o(async()=>{let{getAllCronTasks:e}=await import(`./db-cKsBsMMN.js`).then(e=>e.t);return{getAllCronTasks:e}},__vite__mapDeps([62,1]));return e()},getWebhooks:async()=>{let{getAllWebhooks:e}=await o(async()=>{let{getAllWebhooks:e}=await import(`./db-cKsBsMMN.js`).then(e=>e.t);return{getAllWebhooks:e}},__vite__mapDeps([62,1]));return e()},getMounts:async()=>{let{getAllMountEntries:e,loadMountHandle:t}=await o(async()=>{let{getAllMountEntries:e,loadMountHandle:t}=await import(`./mount-table-store-dY2IfQ5S.js`).then(e=>e.r);return{getAllMountEntries:e,loadMountHandle:t}},__vite__mapDeps([63,1])),n=await e();return Promise.all(n.map(async e=>{if(e.descriptor.kind!==`local`)return e;try{let n=await(await t(e.descriptor.idbHandleKey))?.queryPermission?.({mode:`readwrite`});return{...e,valid:n===`granted`}}catch{return{...e,valid:!1}}}))},getMcpServers:async()=>{try{let e=await(await r()).readFile(`/workspace/.mcp/servers.json`,{encoding:`utf-8`});return JSON.parse(typeof e==`string`?e:new TextDecoder().decode(e)).servers??{}}catch{return{}}},getOAuthProviders:()=>{try{let e=new Set,n=[];for(let r of a()){if(e.has(r.providerId))continue;if(e.add(r.providerId),!t(r.providerId)?.isOAuth){n.push({providerId:r.providerId});continue}let a=i(r.providerId),o=r.loggedOut?!1:a?!a.expired:!1;n.push({providerId:r.providerId,valid:o})}return n}catch{return[]}},getSessionStats:async()=>n.getSessionStats?.()??null,getProcesses:async()=>{try{let e=await r(),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:Number.parseInt(r.name,10),argv:String(i).trim(),status:Rr(String(t))})}catch{}return n}catch{return[]}},getTrayInfo:()=>zr(s),getConnectedFollowers:ht}}var Vr=`sync-fs-nonce`;function Hr(e={}){let t=e.navigator??(typeof navigator<`u`?navigator:void 0),n=e.document??(typeof document<`u`?document:void 0),r=e.window??(typeof window<`u`?window:void 0),i=e.randomUUID??(()=>crypto.randomUUID()),a=!!t?.serviceWorker?.controller,o=a?i():void 0;if(!o||!t?.serviceWorker)return{syncFsBridgeEnabled:a,syncFsChannelNonce:o};let s=t.serviceWorker,c={type:Vr,nonce:o},l=()=>s.controller?.postMessage(c);return l(),s.addEventListener(`controllerchange`,l),s.addEventListener(`message`,e=>{e.data?.type===`sync-fs-need-nonce`&&l()}),n?.addEventListener(`visibilitychange`,()=>{n.visibilityState===`visible`&&l()}),r?.addEventListener(`focus`,l),{syncFsBridgeEnabled:a,syncFsChannelNonce:o}}var Q=e=>Array.from(e,e=>e.charCodeAt(0)),Ur=[{offset:0,bytes:[137,80,78,71,13,10,26,10],mime:`image/png`},{offset:0,bytes:[255,216,255],mime:`image/jpeg`},{offset:0,bytes:Q(`GIF87a`),mime:`image/gif`},{offset:0,bytes:Q(`GIF89a`),mime:`image/gif`},{offset:0,bytes:Q(`BM`),mime:`image/bmp`},{offset:0,bytes:Q(`RIFF`),also:{offset:8,bytes:Q(`WEBP`)},mime:`image/webp`},{offset:4,bytes:Q(`ftypavif`),mime:`image/avif`},{offset:0,bytes:[0,0,1,0],mime:`image/x-icon`},{offset:0,bytes:Q(`RIFF`),also:{offset:8,bytes:Q(`WAVE`)},mime:`audio/wav`},{offset:0,bytes:Q(`ID3`),mime:`audio/mpeg`},{offset:0,bytes:Q(`fLaC`),mime:`audio/flac`},{offset:4,bytes:Q(`ftypM4A`),mime:`audio/mp4`},{offset:4,bytes:Q(`ftypisom`),mime:`video/mp4`},{offset:4,bytes:Q(`ftypmp42`),mime:`video/mp4`},{offset:4,bytes:Q(`ftypqt`),mime:`video/quicktime`},{offset:0,bytes:[26,69,223,163],mime:`video/webm`},{offset:0,bytes:Q(`%PDF-`),mime:`application/pdf`},{offset:0,bytes:[0,97,115,109],mime:`application/wasm`},{offset:0,bytes:Q(`PK`),mime:`application/zip`},{offset:0,bytes:[31,139],mime:`application/gzip`},{offset:0,bytes:[127,69,76,70],mime:`application/x-executable`},{offset:0,bytes:[202,254,186,190],mime:`application/x-mach-binary`}],Wr=Q(`OggS`);function Gr(e,t,n){if(t+n.length>e.length)return!1;for(let r=0;r<n.length;r+=1)if(e[t+r]!==n[r])return!1;return!0}function Kr(e){let t=[...Ur].sort((e,t)=>t.bytes.length+(t.also?.bytes.length??0)-(e.bytes.length+(e.also?.bytes.length??0)));for(let n of t)if(Gr(e,n.offset,n.bytes)&&!(n.also&&!Gr(e,n.also.offset,n.also.bytes)))return n.mime;if(Gr(e,0,Wr)){let t=qr(e.subarray(0,64));return/theora|VP8/.test(t)?`video/ogg`:`audio/ogg`}return null}function qr(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return t}var Jr=4096;function Yr(e){if(e.length===0)return!0;let t=e.subarray(0,Math.min(e.length,Jr));if(t.includes(0))return!1;let n=t.length;if(n===Jr)for(let e=0;e<4&&n>0;e+=1){let e=t[n-1]??0;if(!(e&128)||(--n,(e&192)==192))break}try{let e=new TextDecoder(`utf-8`,{fatal:!0}).decode(t.subarray(0,n)),r=0;for(let t of e){let e=t.codePointAt(0)??0;e!==9&&e!==10&&e!==13&&e!==12&&e!==27&&(e<32||e===127)&&(r+=1)}return r<=e.length*.05}catch{return!1}}function Xr(e,t){if(t&&t.length>0){let e=Kr(t);if(e)return{mime:e,text:Zr(e),source:`magic`}}let n=c(e);return n===`application/octet-stream`?t&&Yr(t)?{mime:`text/plain`,text:!0,source:`content`}:{mime:`application/octet-stream`,text:!1,source:t?`content`:`unknown`}:{mime:n,text:Zr(n),source:`extension`}}function Zr(e){if(e.startsWith(`text/`))return!0;let t=e.split(`;`,1)[0]?.trim()??e;return t===`application/json`||t===`application/xml`||t===`application/javascript`||t===`application/ecmascript`||t===`image/svg+xml`||t.endsWith(`+json`)||t.endsWith(`+xml`)}var Qr=new Set([`md`,`markdown`,`mdown`,`mkd`,`mkdn`,`mdwn`]);function $r(e,t){let n=t.split(`;`,1)[0]?.trim()??t;if(n===`text/html`)return`html`;if(n===`text/markdown`||n===`text/x-markdown`)return`markdown`;let r=e.lastIndexOf(`.`),i=r>0?e.slice(r+1).toLowerCase():``;return Qr.has(i)?`markdown`:i===`html`||i===`htm`?`html`:null}var ei=24;async function ti(e,t){let n=t.slice(0,Math.max(t.lastIndexOf(`/`),0))||`/`;for(let t=0;t<ei;t+=1){try{return await e.stat(n===`/`?`/.git`:`${n}/.git`),n===``?`/`:n}catch{}if(n===`/`||n===``)return null;n=n.slice(0,Math.max(n.lastIndexOf(`/`),0))||`/`}return null}function ni(e){let t=async t=>{let n=await e.stat(t),r=n.type===`directory`;return{type:r?`dir`:`file`,mode:r?16877:33188,size:n.size,ino:0,mtimeMs:n.mtime,ctimeMs:n.ctime,uid:1,gid:1,dev:1,isFile:()=>!r,isDirectory:()=>r,isSymbolicLink:()=>n.isSymlink===!0}};return{promises:{readFile:(t,n)=>{let r=typeof n==`string`?n:n?.encoding;return e.readFile(t,r===`utf8`?{encoding:`utf-8`}:{encoding:`binary`})},readdir:async t=>(await e.readDir(t)).map(e=>e.name),stat:t,lstat:t,readlink:async t=>(await e.stat(t)).symlinkTarget??``}}}async function ri(e,t,n){let r=await ti(e,t);if(!r)return null;let i=t.slice(r===`/`?1:r.length+1);if(i.length===0)return null;try{let t=await o(()=>import(`./isomorphic-git-CLcEdT0Q.js`),__vite__mapDeps([64,1,65])),a=ni(e),s=await t.resolveRef({fs:a,dir:r,ref:`HEAD`}),{blob:c}=await t.readBlob({fs:a,dir:r,oid:s,filepath:i}),l=new TextDecoder().decode(c);return l===n?null:{baseContent:l,status:`modified`,repoRoot:r}}catch{return null}}function ii(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.html`||t===`.svg`}async function ai(e,t){let n=await e.readFile(t,{encoding:`binary`}),r=new Uint8Array(new ArrayBuffer(n.length));r.set(n);let{mime:i,text:a}=Xr(t,r);return{mime:i,text:a,bytes:r}}var oi=524288;function si(e,t,n){if(n.length>oi)return null;switch($r(e,t)){case`markdown`:return{mount:`inline`,html:k(n)};case`html`:return{mount:`sandbox`,html:n};default:return null}}async function ci(e,t,n={}){let{mime:r,text:i,bytes:a}=await ai(e,t);if(!i){rt.open({path:t,content:a.buffer,mimeType:r,text:!1});return}let o=new TextDecoder().decode(a),s=await ri(e,t,o),c=si(t,r,o);rt.open({path:t,content:o,mimeType:r,text:!0,...s?{baseContent:s.baseContent,gitStatus:s.status}:{},...c?{rendered:c}:{},...n.line===void 0?{}:{line:n.line}})}async function li(e,t){let{mime:n,bytes:r}=await ai(e,t),i=new Blob([r],{type:n}),a=URL.createObjectURL(i);try{let e=document.createElement(`a`);e.href=a,e.download=t.split(`/`).pop()||`download`,e.click()}finally{URL.revokeObjectURL(a)}}async function ui(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 di(e,t){try{return await e.stat(t),!0}catch{return!1}}function fi(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{await ci(await n(),t)}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{await li(await n(),t)}catch(e){o.error(`File download failed`,e)}}),t.addEventListener(`file-overflow`,e=>{let{path:n,anchor:r,kind:i}=e.detail,a=i!==`directory`,o=[{id:`preview`,label:`Preview`,visible:a},{id:`reference`,label:`Reference in chat`,visible:a},{id:`download`,label:`Download`,visible:a},{id:`rename`,label:`Rename`,visible:a},{id:`duplicate`,label:`Duplicate`,visible:a},{id:`copy-path`,label:`Copy path`},{id:`open-browser`,label:`Open in browser`,visible:a&&ii(n)},{id:`delete`,label:`Delete`,destructive:!0,visible:a}];it.show({anchor:r,items:o,context:{path:n},dispatchTarget:t})}),t.addEventListener(`overflow-action`,async e=>{let{action:n,context:i}=e.detail,{path:s}=i;try{switch(n){case`preview`:case`reference`:case`download`:t.dispatchEvent(new CustomEvent(`file-${n}`,{detail:{id:s,path:s},bubbles:!0,composed:!0}));break;case`copy-path`:await navigator.clipboard.writeText(s);break;case`open-browser`:window.open(a(s),`_blank`);break;case`duplicate`:{let e=s.lastIndexOf(`.`),t=e>0?`${s.slice(0,e)}_copy${s.slice(e)}`:`${s}_copy`,n=await r();if(await di(n,t)&&!confirm(`${t} already exists. Overwrite?`))break;await ui(n,s,t);break}case`delete`:confirm(`Delete ${s}?`)&&await(await r()).rm(s);break;case`rename`:{let e=s.split(`/`).pop()??``,t=prompt(`Rename ${s} to:`,e)?.trim();if(!t||t===e||t.includes(`/`))break;let n=`${s.slice(0,s.length-e.length)}${t}`,i=await r();if(await di(i,n)&&!confirm(`${n} already exists. Overwrite?`))break;await ui(i,s,n),await i.rm(s);break}}}catch(e){o.error(`Overflow action "${n}" failed`,e)}})}var pi=64,mi=12,hi=/\b(feedback|reviews?|corrections?|learnings?|observations?|testing|verification)\b/i,gi=/\b(user|preferences?|identit(?:y|ies)|accounts?|personal|interface|working rhythm|keyboard|accessibility)\b/i,_i=/^Auto-extracted \(/;function vi(e){let t=document.createRange();return t.selectNodeContents(document.body),t.createContextualFragment(e)}function yi(e){return(vi(k(e)).textContent??``).replace(/\s+/g,` `).trim()}function bi(e){let t=yi(e);if(t.length<=pi)return{title:t,summary:``,titleEnd:t.length,summaryStart:t.length};let n=[];for(let e of t.matchAll(/[.!?](?:[*_`'")\]]*)\s+|\s+[—–]\s+|[:;](?:[*_`]*)\s+|,\s+(?=(?:and|but|because|while|when|then|so)\b)/g)){let r=/^\s+[—–]|^[:;]/.test(e[0]),i=e.index+(r?0:e[0].trimEnd().length),a=e.index+e[0].length;t.slice(0,i).trim().length>=mi&&i<=96&&t.slice(a).trim()&&n.push({titleEnd:i,summaryStart:a})}let r=n.sort((e,t)=>Math.abs(e.titleEnd-pi)-Math.abs(t.titleEnd-pi))[0];if(r)return{title:t.slice(0,r.titleEnd).trim(),summary:t.slice(r.summaryStart).trim(),titleEnd:r.titleEnd,summaryStart:r.summaryStart};let i=t.slice(0,97).lastIndexOf(` `),a=i>=mi?i:96,o=t.slice(a).trim();return{title:t.slice(0,a).trim(),summary:o,titleEnd:a,summaryStart:t.indexOf(o,a)}}function xi(e,t){let n=yi(e),r=_i.test(t),i=r?n:`${t} ${n}`;return hi.test(i)?`feedback`:gi.test(i)?`user`:r?null:`project`}function Si(e,t){let n=bi(e);return{title:n.title,summary:n.summary,section:t,tag:xi(e,t),bodyHtml:k(e),titleEnd:n.titleEnd,summaryStart:n.summaryStart}}function Ci(e){let t=[],n=`Memory`,r=``,i=``,a=null,o=()=>[r||n,i].filter(Boolean).join(` / `),s=()=>{if(!a)return;let e=a.lines.join(` `).trim();e&&t.push(Si(e,a.section)),a=null};for(let t of e.split(`
8
- `)){let e=/^(#{1,6})\s+(.+?)\s*#*\s*$/.exec(t.trim());if(e){s();let t=yi(e[2]);e[1].length===1?(n=t||n,r=``,i=``):e[1].length===2?(r=t,i=``):e[1].length===3&&(i=t);continue}let c=/^\s*[-*]\s+(.*)$/.exec(t);c?(s(),a={lines:[c[1]],section:o()}):t.trim()?a?a.lines.push(t.trim()):a={lines:[t.trim()],section:o()}:s()}return s(),t}function wi(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=0,i=!1,a=!1,o=null,s=n.nextNode();for(;s;){for(let e=0;e<s.data.length;e+=1){if(/\s/.test(s.data[e])){i&&!a&&(a=!0,o={node:s,offset:e});continue}if(a){if(r===t)return o;r+=1}if(a=!1,o=null,r===t)return{node:s,offset:e};r+=1,i=!0}s=n.nextNode()}return r===t?{node:e,offset:e.childNodes.length}:null}function Ti(e,t,n){let r=vi(e),i=wi(r,t),a=n==null?{node:r,offset:r.childNodes.length}:wi(r,n);if(!i||!a)return document.createDocumentFragment();let o=document.createRange();o.setStart(i.node,i.offset),o.setEnd(a.node,a.offset);let s=o.cloneContents();for(let e of[...s.childNodes])e.nodeType===Node.TEXT_NODE&&!e.textContent?.trim()&&e.remove();let c=s.childNodes.length===1?s.firstChild:null;if(!(c instanceof HTMLParagraphElement))return s;let l=document.createDocumentFragment();return l.append(...c.childNodes),l}function Ei(e){return Ci(e).map(e=>{let t=document.createElement(`slicc-memrow`);return t.setAttribute(`heading`,e.title),e.summary&&t.setAttribute(`summary`,e.summary),t.setAttribute(`section`,e.section),e.tag&&t.setAttribute(`tag`,e.tag),t.setHeadingContent(Ti(e.bodyHtml,0,e.titleEnd)),e.summary&&t.setBodyContent(Ti(e.bodyHtml,e.summaryStart,null)),t})}async function Di(e,t=je.memoryPath){let n=``;try{let r=await e.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{n=``}return Ei(n)}function Oi(e){let t=e.filter(e=>e.health===`stalled`).length,n=e.filter(e=>e.health!==`stalled`&&e.peerState===`connecting`).length,r=e.length-t-n,i=[r>0?`${r} connected`:``,n>0?`${n} connecting`:``,t>0?`${t} stalled`:``].filter(Boolean);return{id:`followers`,label:`Followers`,count:e.filter(e=>e.peerState===`connected`).length,meta:i.join(` · `)||void 0,accent:`cyan`,emptyText:`No followers connected yet. Pair a phone, tablet, or CLI follower to this tray.`,rows:e.map(e=>{let t=e.motd??e.runtime??`Connected follower`,n=e.hostOrigin?`${t} · ${e.hostOrigin}`:t,r=[e.exec?`ssh`:``,e.cdp?`playwright`:``].filter(Boolean);return{name:nt(e),sublabel:n,meta:Qe(e),icon:et(e),badges:r,status:tt(e)}})}}function ki(e){let t=e.stalled?`stalled`:e.state===`leader`?`connected`:e.state,n=e.stalled||e.state===`reconnecting`?`warn`:e.state===`error`?`error`:e.state===`leader`||e.state===`connected`?`active`:`idle`,r=e.sessionId?`Session ${$e(e.sessionId)}`:null,i=e.workerBaseUrl?`Worker · ${e.workerBaseUrl}`:null;return{id:`tray`,label:`Tray`,count:1,meta:`${e.role} · ${t}`,accent:`waffle`,rows:[{name:e.role[0].toUpperCase()+e.role.slice(1),sublabel:[r,i].filter(Boolean).join(` · `)||`No tray session`,meta:t,icon:e.role===`follower`?`radio`:`cloud`,badges:e.joinUrl?[`join URL`]:[],status:n}]}}async function Ai(e){let t=e.getScoops(),n=e.getTrayInfo(),r=e.getConnectedFollowers(),[i,a,o,s,c,l]=await Promise.all([e.getCronTasks().catch(()=>[]),e.getWebhooks().catch(()=>[]),e.getMounts().catch(()=>[]),e.getMcpServers().catch(()=>({})),e.getSessionStats().catch(()=>null),e.getProcesses().catch(()=>[])]),u=e.getOAuthProviders(),d=Object.entries(s);return[ki(n),Oi(r),{id:`cost`,label:`Cost`,count:c?.models.length??0,meta:c?`$${c.totalCost.toFixed(2)}`:void 0,rows:c?.models.map(e=>({name:e.model,meta:`$${e.cost.toFixed(4)}`}))??[]},{id:`scoops`,label:`Scoops`,count:t.length,rows:t.map(t=>{let n=w(t)?`${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:l.length,rows:l.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:i.length,rows:i.map(e=>({name:e.name,meta:e.cron,active:e.status===`active`}))},{id:`webhooks`,label:`Webhooks`,count:a.length,rows:a.map(e=>({name:e.name,meta:e.scoop?`→ ${e.scoop}`:`→ cone`}))},{id:`workflows`,label:`Workflows`,count:0,rows:[]},{id:`mounts`,label:`Mounts`,count:o.length,rows:o.map(e=>({name:e.targetPath,meta:e.descriptor.kind,active:e.valid===!0,error:e.valid===!1}))},{id:`mcp`,label:`MCP Servers`,count:d.length,rows:d.map(([e,t])=>{let n=t.tools?.length??0;return{name:e,meta:`${n} tool${n===1?``:`s`}`}})},{id:`oauth`,label:`OAuth`,count:u.length,rows:u.map(e=>({name:e.providerId,meta:``,active:e.valid===!0,error:e.valid===!1}))}]}var ji=`/shared`,Mi=3,Ni=200;async function Pi(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,Ni),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<Mi?await Pi(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 Fi(e,t=je.root){let n=[];for(let r of[t,ji])n.push({kind:`dir`,id:r,label:r.replace(/^\/(cones\/)?/,``),open:!0,children:await Pi(e,r,1)});return n}function Ii(e){let t=!1,n=!1,r=0,i=null,a=null,o=!1,s=!1,c=()=>{e.openFs().then(async t=>{e.fileTree.items=await Fi(t,e.getWorkspace().root),s||(s=!0,fi({fileTree:e.fileTree,openFs:e.openFs,openWriter:e.openWriter,insertReference:e.insertReference,toPreviewUrl:Se,log:e.log}))}).catch(t=>e.log.error(`WC file tree refresh failed`,t))},l=()=>{o=!1,i!=null&&(clearInterval(i),i=null)},u=()=>{a!=null&&(clearInterval(a),a=null)},d=()=>{let t=++r;e.openFs().then(async n=>{let i=await Di(n,e.getWorkspace().memoryPath);t===r&&(e.memoryHost.setRows?e.memoryHost.setRows(i):e.memoryHost.replaceChildren(...i))}).catch(t=>e.log.error(`WC memory refresh failed`,t))},f=()=>{(async()=>{try{let t=await Ai(e.getMonitorDeps());e.monitor.sections=t}catch(t){e.log.error(`WC monitor refresh failed`,t)}})()};return e.monitor.addEventListener(`slicc-monitor-refresh`,f),{activate(r){if(r===`files`){l(),o=!0,e.onKernelReady(()=>{o&&(o=!1,c(),i=setInterval(c,3e3))});return}if(r===`memory`){n=!0,d();return}if(r===`monitor`){u(),f(),a=setInterval(f,5e3);return}r===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))},deactivate(e){e===`files`?l():e===`monitor`?u():e===`memory`&&(n=!1)},refreshMemory(){n&&d()}}}var Li=[`/workspace`,`/shared`,`/memory`,`/scoops`,`/mnt`],Ri=new Set([`node_modules`,`.git`,`dist`,`build`,`out`,`coverage`,`.cache`,`.venv`,`venv`,`__pycache__`,`target`,`vendor`,`.next`,`.turbo`,`python_wheels`]),zi=2e4,Bi=12,Vi=3e4;function Hi(e){let t=e.trim();for(;t.startsWith(`./`)||t.startsWith(`../`);)t=t.slice(t.startsWith(`./`)?2:3);return t.startsWith(`~/`)&&(t=t.slice(2)),t.replace(/\/{2,}/g,`/`)}function Ui(e){return e.slice(e.lastIndexOf(`/`)+1)}function Wi(e,t){return e===t?!0:e.endsWith(t)?e[e.length-t.length-1]===`/`:!1}function Gi(e,t){let n=Hi(e);return t.includes(`/`)?Wi(n,t):Ui(n)===t}function Ki(e,t){let n=[],r=new Set;for(let i=t.length-1;i>=0;--i){let a=t[i];if(!(a===void 0||r.has(a))&&Gi(a,e)&&(r.add(a),n.push(Hi(a)),n.length>=qi))break}return n}var qi=4,Ji=class{#e;#t;#n;#r;#i;#a;#o=0;#s=null;#c=null;#l=new Map;#u=new Map;constructor(e,t={}){this.#e=e,this.#t=t.roots??Li,this.#n=t.ignoredDirs??Ri,this.#r=t.maxEntries??zi,this.#i=t.maxDepth??Bi,this.#a=t.ttlMs??Vi}resolve(e,t=[]){this.#g();let n=Hi(e),r=this.#d(n),i=Ki(n,t);return i.length===0?r:this.#f(n,r,i)}resolveAll(e,t=[]){return Promise.all(e.map(e=>this.resolve(e,t)))}invalidate(){this.#s=null,this.#c=null,this.#l.clear(),this.#u.clear()}#d(e){let t=this.#l.get(e);if(t)return t;let n=this.#m(e).catch(()=>({query:e,matches:[]}));return this.#l.set(e,n),n}async#f(e,t,n){let{matches:r}=await t,i=new Set(r),a=[];for(let e of n)!e.startsWith(`/`)||i.has(e)||await this.#p(e)&&a.push(e);let o=e=>n.findIndex(t=>Wi(e,t)),s=r.filter(e=>o(e)>=0).sort((e,t)=>o(e)-o(t)),c=new Set(s),l=r.filter(e=>!c.has(e));return{query:e,matches:[...a,...s,...l]}}#p(e){let t=this.#u.get(e);if(t)return t;let n=this.#h(e);return this.#u.set(e,n),n}async#m(e){if(e.startsWith(`/`))return{query:e,matches:await this.#h(e)?[e]:[]};let t=(await this.#_()).get(Ui(e))??[];return e.includes(`/`)?{query:e,matches:t.filter(t=>Wi(t,e)).sort(Yi)}:{query:e,matches:[...t].sort(Yi)}}async#h(e){try{return(await this.#e.stat(e)).type===`file`}catch{return!1}}#g(){!this.#s||this.#a===1/0||Date.now()-this.#o<this.#a||this.invalidate()}#_(){return this.#s?Promise.resolve(this.#s):(this.#c??=this.#v().then(e=>(this.#s=e,this.#o=Date.now(),e)),this.#c)}async#v(){let e=new Map,t={left:this.#r};for(let n of this.#t){if(t.left<=0)break;await this.#y(n,0,e,t)}return e}async#y(e,t,n,r){if(r.left<=0||t>this.#i)return;let i;try{i=await this.#e.readDir(e)}catch{return}let a=this.#b(e,i,n,r);for(let e of a){if(r.left<=0)break;await this.#y(e,t+1,n,r)}}#b(e,t,n,r){let i=[];for(let a of t){if(r.left<=0)break;let t=e===`/`?`/${a.name}`:`${e}/${a.name}`;if(a.type===`directory`){this.#n.has(a.name)||i.push(t);continue}let o=n.get(a.name);o?o.push(t):n.set(a.name,[t]),--r.left}return i}};function Yi(e,t){let n=e.split(`/`).length,r=t.split(`/`).length;return n===r?e.localeCompare(t):n-r}var Xi=`file-mention`,$=`data-file-mentions`;function Zi(e){return`${e.childNodes.length}:${e.textContent?.length??0}`}var Qi=new Set([`A`,`PRE`,`SCRIPT`,`STYLE`,`TEXTAREA`]),$i=`file-mention-open`;async function ea(e,t,n=[]){let r=Zi(e);if(e.getAttribute($)===r)return;let i=ta(e);if(i.length===0){e.setAttribute($,r);return}let a=[],o=new Set;for(let e of i){let t=Xe(e.data);if(t.length!==0){a.push({node:e,mentions:t});for(let e of t)o.add(e.path)}}if(a.length===0){e.setAttribute($,r);return}let s=[...o],c=await t.resolveAll(s,n),l=new Map(s.map((e,t)=>[e,c[t]?.matches??[]]));for(let{node:e,mentions:t}of a){if(!e.isConnected)continue;let n=t.filter(e=>(l.get(e.path)?.length??0)>0);n.length!==0&&na(e,n,l)}e.setAttribute($,Zi(e))}function ta(e){let t=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(t){if(!t.nodeValue||t.nodeValue.trim().length===0)return NodeFilter.FILTER_REJECT;for(let n=t.parentElement;n&&n!==e;n=n.parentElement)if(Qi.has(n.tagName)||n.classList.contains(`file-mention`))return NodeFilter.FILTER_REJECT;return NodeFilter.FILTER_ACCEPT}}),n=[];for(let e=t.nextNode();e!==null;e=t.nextNode())n.push(e);return n}function na(e,t,n){let r=e.ownerDocument,i=e.data,a=r.createDocumentFragment(),o=0;for(let e of t){let t=n.get(e.path)??[],s=t[0];s&&(e.start>o&&a.appendChild(r.createTextNode(i.slice(o,e.start))),a.appendChild(ra(r,i.slice(e.start,e.end),s,t,e.line)),o=e.end)}o<i.length&&a.appendChild(r.createTextNode(i.slice(o))),e.parentNode?.replaceChild(a,e)}function ra(e,t,n,r,i){let a=e.createElement(`a`);return a.className=Xi,a.textContent=t,a.href=`#${n}`,a.dataset.path=n,i!==void 0&&(a.dataset.line=String(i)),a.title=r.length>1?`${n}\n(+${r.length-1} other match${r.length>2?`es`:``})`:n,a.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation();let t={path:n,alternatives:r,...i===void 0?{}:{line:i}};a.dispatchEvent(new CustomEvent($i,{detail:t,bubbles:!0,composed:!0}))}),a}var ia=`slicc-agent-message`,aa=`slicc-action-row[${Be}]`;function oa(e,t){let n=[],r=e.querySelectorAll(aa);for(let e of r){if(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING)break;n.push(e.getAttribute(`data-file-paths`)??``)}return n.slice(-40).flatMap(e=>Fe(e))}function sa(e){let t=globalThis.requestIdleCallback;typeof t==`function`?t(e):setTimeout(e,0)}function ca(e){try{return la(e)}catch(t){return e.log.error(`File mention wiring failed; continuing without it`,t),()=>{}}}function la(e){let{thread:t,openFs:n,log:r}=e;if(!(t instanceof Node))return()=>{};let i=null,a=()=>(i??=n().then(e=>new Ji(e)),i),o=e=>{if(!(e instanceof HTMLElement)||e.hasAttribute(`streaming`))return;let n=e.querySelector(`.body`)??e;Xe(n.textContent??``).length!==0&&sa(()=>{let i=oa(t,e);a().then(e=>ea(n,e,i)).catch(e=>r.error(`File mention linking failed`,e))})},s=e=>{for(let t of e.querySelectorAll(ia))o(t)};s(t);let c=new MutationObserver(e=>{for(let t of e){if(t.type===`attributes`){t.target instanceof HTMLElement&&o(t.target);continue}for(let e of t.addedNodes)e instanceof HTMLElement&&(e.tagName.toLowerCase()===ia?o(e):s(e));let e=t.target?.closest?.(ia);e&&o(e)}});c.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`streaming`]});let l=e=>{let{path:t,line:i}=e.detail;n().then(e=>ci(e,t,i===void 0?{}:{line:i})).catch(e=>r.error(`File mention preview failed`,e))};return t.addEventListener($i,l),()=>{c.disconnect(),t.removeEventListener($i,l)}}var ua=e({DEFAULT_DOCK_TREE_ON_BOOT:()=>wa,DOCK_TREE_STORAGE_KEY:()=>Ca,attachWcClient:()=>Da,makeSprinkleAttachImage:()=>Ea,mountWcUiLive:()=>Oa,prepareWcShell:()=>da,wireDockTreePersistence:()=>Ta,wireWcChipTips:()=>va});function da(e,t){let n=Ke(e,{messages:[],scoops:[],floatLabel:t,placeholder:`Ask sliccy, or describe a change…`,urlState:!0}),r=null,i=null,a=null,o=new Map,s=!1,c=null,l=new Set,u=e=>{if(a=e,!i)return;let t=i.selectedScoopJid;if(t&&t!==e.jid){let e=r?.getQueuedMessages()??[];for(let n of e)i.deleteQueuedMessage(t,n.id).catch(()=>void 0)}let s=o.get(e.jid);r?.setLickBackpressure(s?.count??0,s?.waitingMs??0,ct(e)),i.setSelectedScoopJid(e.jid),n.inputCard.removeAttribute(`disabled`),pr(n,e,i.getScoops()),i.requestScoopMessages(e.jid),r?.setProcessing(i.isProcessing(e.jid)),n.switcher.hasAttribute(`attention`)||n.switcher.setAttribute(`attention`,e.jid),d.refreshScoops?.(),c?.refreshMemory()},d={refs:n,statuses:new Map,fills:new Map,phases:new Map,lickBackpressure:o,lastActivity:new Map,pendingUrlContext:n.thread.urlContext??null,getController:()=>r,getClient:()=>i,getSelected:()=>a,selectScoop:u,notifyReady:()=>{s=!0;for(let e of l)e()}};return{refs:n,wiring:d,setClient:e=>{i=e},selectScoop:u,getSelected:()=>a,clearSelection:()=>{a=null},getController:()=>r,setController:e=>{r=e},setActivateSurface:e=>{c=e;let t=new Set(n.dockTree.getSurfaceIds());for(let n of[`files`,`term`,`memory`,`monitor`])t.has(n)&&(s?e.activate(n):l.add(()=>e.activate(n)))},onClientReady:e=>{l.add(e),s&&e()}}}function fa(e){let t=null;return()=>(t??=(async()=>{let[{createRemoteVfsClient:t},{createRemoteWritableVfsClient:n}]=await Promise.all([o(()=>import(`./remote-vfs-client-5faRBsEi.js`),__vite__mapDeps([66,42])),o(()=>import(`./writable-vfs-client-Dqrpx9iK.js`),__vite__mapDeps([67,42]))]);return{reader:t({transport:e.getTransport()}),writer:n({transport:e.getTransport()})}})(),t)}function pa(e,t,n,r,i){e.onClientReady(()=>{r.intercept||o(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-CqIwr35s.js`);return{wireWcOnboarding:e}},__vite__mapDeps([68,3,30,12,13,1,14,15,16,17,31,69,11,44,70,29,19,39,71,72,73,74,75,55,56,76,50,51])).then(({wireWcOnboarding:r})=>r({client:t,getController:()=>e.getController(),openVfs:n,log:i})).then(e=>{r.intercept=e.interceptWelcomeLick}).catch(e=>i.error(`WC onboarding wiring failed`,e))})}function ma(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(!n)return;e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2)),typeof n.burnRate==`number`&&Number.isFinite(n.burnRate)?e.refs.floatbar.setAttribute(`rate`,n.burnRate.toFixed(2)):e.refs.floatbar.removeAttribute(`rate`);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=lr(t.getScoops(),e.statuses,e.fills,e.phases,e.awaitingInput,e.getSelected()?.jid)})};return setInterval(n,15e3),n}function ha(e,t,n){let r=t.standalone;r&&o(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DdPBkgaJ.js`);return{wireWcBrowser:e}},__vite__mapDeps([77,12,78,79,11,80,81])).then(({wireWcBrowser:t})=>t({refs:e.refs,browser:r.browser,log:n})).catch(e=>n.error(`WC browser overlay wiring failed`,e))}function ga(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)}),va({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function _a(e){return()=>{e.triggerPlaceholder();let t=e.boot.getSelected()?.jid;if(e.boot.wiring.awaitingInput=t??null,e.boot.wiring.refreshScoops?.(),e.boot.wiring.notifyScoopStateChanged?.(),e.refreshStats(),!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 va(e){let t=new Map,n=new Set;e.switcher.addEventListener(`pointerover`,r=>{let i=r.target?.closest?.(`.slicc-agent-tabs__segment`);if(!i||!e.switcher.contains(i))return;let a=i.dataset.k??``,s=e.getScoops().find(e=>e.jid===a);if(!s)return;let c=e.lastActivity.get(a)??``,l=t.get(a);if(l&&l.activity===c){i.title=l.tip;return}i.title||=A(s),!(!c||n.has(a))&&(n.add(a),(async()=>{try{let n=await(e.labelFn??(await o(async()=>{let{quickLabel:e}=await import(`./quick-llm-9w6VrHaQ.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([58,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,59,43]))).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: ${w(s)?`${A(s)} (a main agent)`:s.name}\nMost recent activity:\n${c}`,maxTokens:40});n&&(t.set(a,{activity:c,tip:n}),i.title=n)}finally{n.delete(a)}})())})}async function ya(e,t,n){let{RemoteTerminalView:r}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DSUnPeXp.js`);return{RemoteTerminalView:e}},__vite__mapDeps([82,1,3,24,11,39,83,84,85,81,86,15,29,19,12,71,87,10,72,88,89,74,90,91])),{fetchSecretEnvVars:i}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-CjwX7z7b.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([92,11,13,1,3,14,12,15,16,17,18,19,20,21,22])),a=await i(),s=new r({client:t,cwd:`/`,env:Object.keys(a).length>0?a:void 0});await new Promise(t=>e.onClientReady(t)),await s.mount(n),globalThis.__slicc_terminal_view=s,window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function ba(e,t,n){let r=r=>{if(r.startsWith(`freezer:`)){n(r.slice(8));return}let i=ot(t.getScoops(),r);i&&i.jid!==e.getSelected()?.jid&&e.selectScoop(i)};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 xa(e,t,n,r){o(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-Oq3nX_59.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([93,3,11,39])).then(async({installLeaderPermissionsSurface:r,installMountPendingConsumer:i})=>{let a=n.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await o(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-BwYf17R6.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([94,3,15,29,19,12]));r({runtimeMode:a,providers:await s(c()||a===`extension`||a===`extension-detached`)}),i({runShell:Sa(e,t)})}).catch(e=>r.warn(`WC permissions surface wiring failed`,e))}function Sa(e,t){let n=null,r=()=>(n||=(async()=>{await new Promise(t=>e.onClientReady(t));let{TerminalSessionClient:n}=await o(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-ADzaWGFd.js`).then(e=>e.n);return{TerminalSessionClient:e}},__vite__mapDeps([91,1])),r=new n({client:t,sid:`mount-drop-${Date.now()}`});return await r.open({cwd:`/workspace`}),r})().catch(e=>{throw n=null,e}),n);return async e=>(await r()).exec(e)}var Ca=`slicc-dock-tree:default`,wa={zones:{top:null,left:{type:`leaf`,surfaceId:`chat`},middle:null,right:null,bottom:null},rowFr:{top:1,center:1,bottom:1},colFr:{left:3,middle:1,right:1}};function Ta(e,t){let n=e.dockTree,r=e.dockTree,i=e=>{try{localStorage.setItem(Ca,JSON.stringify(e))}catch{}};n.addEventListener(`dock-tree-change`,e=>{i(e.detail?.tree)}),n.addEventListener(`dock-tree-resize`,e=>{i(e.detail?.tree)});try{let e=localStorage.getItem(Ca);r.setTree(e?JSON.parse(e):wa)}catch(e){t.warn(`WC dock-tree restore failed — seeding the default layout`,e),r.setTree(wa)}}function Ea(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 Da(e,t,n,r={}){o(async()=>{let{initTimestampPreference:e}=await import(`./timestamp-preference-sKwBl5I8.js`).then(e=>e.a);return{initTimestampPreference:e}},__vite__mapDeps([95,1])).then(({initTimestampPreference:e})=>e()).catch(()=>void 0);let{refs:i}=e;e.setClient(t);let a=oe(`panel-layouts`);i.dockTree.tilesMovable=a,a||Ta(i,n);let s=null,c=ma(e.wiring,t),l=()=>s?.(),u={intercept:null},{controller:d,agentHandle:f}=Cr(i,t,()=>e.getSelected(),_a({boot:e,triggerPlaceholder:l,refreshStats:c}),u);e.setController(d),e.onClientReady(c);let p=fa(t),m=async()=>(await p()).reader;r.standalone?.runtimeMode!==`cherry`&&r.standalone?.runtimeMode!==`hosted-leader`&&pa(e,t,p,u,n);let h=hr({boot:e,client:t,agentHandle:f,setRefreshPlaceholder:e=>{s=e},triggerPlaceholder:l,openReader:m,openWriter:async()=>(await p()).writer,log:n});ga(e,t),ha(e,r,n),xa(e,t,r,n);let g=Ii({fileTree:i.fileTree,termSurface:i.termSurface,memoryHost:i.memoryHost,monitor:i.monitor,openFs:m,openWriter:async()=>(await p()).writer,onKernelReady:t=>e.onClientReady(t),getMonitorDeps:()=>Br({client:t,openReader:m,storage:window.localStorage}),getWorkspace:()=>Ne(t.getScoops(),e.getSelected()??void 0),mountTerminal:n=>ya(e,t,n),insertReference:e=>{let t=i.inputCard,n=t.value.trim();t.value=n?`${n} @${e}`:`@${e}`,t.focus()},log:n});e.setActivateSurface(g),a&&o(async()=>{let{panelizeShell:e}=await import(`./panelize-shell-DG3fFAS4.js`);return{panelizeShell:e}},__vite__mapDeps([96,11,97,43,1,98,3,99,53,100,101,102,103])).then(({panelizeShell:e})=>e(i,void 0,void 0,{onToolPanelActivate:e=>g.activate(e),onToolPanelDeactivate:e=>g.deactivate(e)})).catch(e=>n.error(`panelize failed — keeping the classic shell`,e)),ca({thread:i.thread,openFs:m,log:n}),i.floatbar.addEventListener(`click`,()=>{let e=i.dock;e.active===`monitor`?e.collapse():e.selectItem(`monitor`)});let _=Ir({refs:i,openVfs:p,client:t,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:n}),{refreshFreezer:v,openFrozen:y,getViewedFrozenSessionId:b}=_;if(v(),e.onClientReady(v),oe(`multiple-cones`)){let r=sr({freezer:i.freezer,client:t,getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,freezeCone:_.freezeCone,log:n});e.wiring.refreshConeActions=r.refresh,e.onClientReady(r.refresh)}ba(e,t,y),p().then(async({reader:e})=>{let{installPreviewVfsResponder:t}=await o(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-CluNpFQR.js`);return{installPreviewVfsResponder:e}},[]);t({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>e,logger:n})}).catch(e=>n.warn(`WC page-VFS support wiring failed`,e)),p().then(async({reader:a,writer:s})=>{let{createRemoteSprinkleVfs:c}=await o(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([104,42])),l=(await o(async()=>{let{getPanelizedShell:e}=await import(`./panelize-shell-DG3fFAS4.js`);return{getPanelizedShell:e}},__vite__mapDeps([96,11,97,43,1,98,3,99,53,100,101,102,103]))).getPanelizedShell(),{wireWcSprinkles:u}=await o(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-wT8iHdRT.js`);return{wireWcSprinkles:e}},__vite__mapDeps([105,3,15,29,19,12,106,44])),d=await u({refs:i,client:t,fs:c({reader:a,writer:s}),instanceId:r.instanceId,onAttachImage:Ea(h,n),onToolPanelActivate:e=>g.activate(e),onToolPanelDeactivate:e=>g.deactivate(e),hostSprinkleSurface:l?(e,t)=>l.hostSprinkleSurface(e,t):void 0,removeSprinkleSurface:l?e=>l.removeSprinkleSurface(e):void 0,log:n});e.onClientReady(()=>void d.resync());let{getPanelizedShell:_}=await o(async()=>{let{getPanelizedShell:e}=await import(`./panelize-shell-DG3fFAS4.js`);return{getPanelizedShell:e}},__vite__mapDeps([96,11,97,43,1,98,3,99,53,100,101,102,103])),v=_();if(v){let e=c({reader:a,writer:s});v.attachFs(e);let{registerAgentPanels:t}=await o(async()=>{let{registerAgentPanels:e}=await import(`./agent-panels-B92KQapO.js`);return{registerAgentPanels:e}},__vite__mapDeps([107,11,100]));await t(e).catch(e=>n.warn(`agent panel discovery failed`,e))}else{let{setLayoutApplier:e}=await o(async()=>{let{setLayoutApplier:e}=await import(`./layout-apply-registry-Cw730jao.js`);return{setLayoutApplier:e}},[]),{applyLayout:t}=await o(async()=>{let{applyLayout:e}=await import(`./apply-layout-DtjqLMjP.js`);return{applyLayout:e}},__vite__mapDeps([108,105,3,15,29,19,12,106,44]));e(e=>t(d.zone,e))}if(r.standalone&&r.instanceId){let{wireWcTray:a}=await o(async()=>{let{wireWcTray:e}=await import(`./wc-tray-DxDD8gsB.js`);return{wireWcTray:e}},__vite__mapDeps([109,2,1,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,41,78,110,30,31,111,32,112,113,114,29,62,44,115,50,51,75,55,56,116,117,118,0,28,33,34,39,81,119,120,91,80,121,122,123,106,124,87,125])),s=d.zone.callbacks(),c=await a({refs:i,client:t,browser:r.standalone.browser,realCdpTransport:r.standalone.realCdpTransport,instanceId:r.instanceId,runtimeMode:r.standalone.runtimeMode,sprinkleManager:d.manager,addSprinkle:(e,t,n)=>s.addSprinkle(e,t,n),removeSprinkle:e=>s.removeSprinkle(e),getController:()=>e.getController(),getSelectedJid:()=>e.getSelected()?.jid??`cone`,agentHandle:f,openFs:m,openWriter:async()=>(await p()).writer,baseFloatLabel:r.standalone.baseFloatLabel,window,log:n});e.wiring.notifyScoopStateChanged=()=>c.scheduleScoopsListBroadcast()}}).catch(e=>n.error(`WC sprinkle/tray wiring failed`,e));{let e=new wt,n=new he,r=new Rn({collection:{listScoops:()=>t.getScoops(),isProcessing:e=>t.isProcessing(e),getAgentMessages:()=>null,loadPersistedSessions:()=>e.loadAll(),loadUiChatSessions:async()=>{let e=await n.list();return(await Promise.all(e.map(e=>n.load(e)))).filter(e=>e!==null)},wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:Qn(),snapshotStore:{read:async e=>{let{reader:t}=await p();return qn(t,e)},write:async(e,t)=>{let{writer:n}=await p();return Kn(n,e,t)}},vfs:{readFile:async(e,t)=>(await p()).reader.readFile(e,t),readDir:async e=>(await p()).reader.readDir(e),stat:async e=>(await p()).reader.stat(e)},getActiveSessionInfo:()=>{let e=j(t.getScoops());return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.89.0`}),i=Ee(r);window.addEventListener(`unload`,i,{once:!0})}let x=!1,S=()=>x?Promise.resolve():(x=!0,(async()=>{try{let[{getTranscriptExportService:e},{transcriptZipToBlob:t,downloadTranscriptBlob:n}]=await Promise.all([o(()=>import(`./export-provider-BEHTjSYw.js`).then(e=>e.t),__vite__mapDeps([57,1,12])),o(()=>import(`./wc-transcript-export-DKIleW7-.js`),__vite__mapDeps([126,3,117,12,118,1]))]),r=b(),i=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r},a=await e().export(i,{}),{filename:s}=a;await n(await t(a),s)}catch(e){n.error(`Transcript export failed`,e)}finally{x=!1}})());if(o(async()=>{let{wireWcNav:e}=await import(`./wc-nav-Co62IQ9D.js`);return{wireWcNav:e}},__vite__mapDeps([127,3,15,29,19,12,61,30,13,1,14,16,17,31,32,33,34,114,11,62,106,44,124,87,10])).then(({wireWcNav:e})=>e({refs:i,client:t,log:n,onExportTranscript:S})).catch(e=>n.error(`WC nav wiring failed`,e)),o(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-Cy4g3lh3.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([128,11,15,29,19,12,39,99,48,49,13,1,3,14,16,17,50,51,129])).then(({getComposerSpeech:e,setComposerSpeechInstanceId:t})=>{let n=i.composer;t(r.instanceId),n.speech=e(),n.setAttribute(`ptt`,``)}).catch(e=>n.error(`WC push-to-talk wiring failed`,e)),o(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-BSK3Souh.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([47,3,11,15,29,19,12,48,49,13,1,14,16,17,50,51])).then(({setSpeakAssetsInstanceId:e})=>e(r.instanceId)).catch(e=>n.error(`WC say warmup wiring failed`,e)),r.standalone)return()=>{o(async()=>{let{schedulePendingSessionCatchup:e}=await import(`./new-session-CEfChDqS.js`);return{schedulePendingSessionCatchup:e}},__vite__mapDeps([60,2,1,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,61,0,28,29,30,31,32,33,34,59,35,40,41,42,43,44,37,45])).then(({schedulePendingSessionCatchup:e})=>e({openVfs:async()=>(await p()).writer,onComplete:v})).catch(e=>n.warn(`Pending session catch-up scheduling failed`,e))}}async function Oa(e,t,n=`standalone`){let{browser:r,realCdpTransport:i,instanceId:a,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:d}=await _({runtimeMode:n,envBaseUrl:null,window,log:t}),{resolveStandaloneFloatLabel:f,DEFAULT_STANDALONE_LABEL:p}=await o(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-D7p-4xyd.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},__vite__mapDeps([130,13,1,3,14,12,15,16,17])),m=n===`standalone`||n===`electron-overlay`?await f():p,v=da(e,m);a&&h(a);let{syncFsBridgeEnabled:y,syncFsChannelNonce:b}=Hr(),x=Bt({realCdpTransport:i,instanceId:a,makeClient:e=>new Mt(ur(v.wiring),e),localApiBaseUrl:s,bridgeToken:c,syncFsBridgeEnabled:y,syncFsChannelNonce:b,localLickWsUrl:l,extensionDelegateId:u,flagFloat:n,onWorkerScriptError:()=>{g()}});Pt({send:e=>x.client.sendRaw(e)}),d?.(x.client);let S=Da(v,x.client,t,{instanceId:a,standalone:{browser:r,realCdpTransport:i,runtimeMode:n,baseFloatLabel:m}}),{setupSudoStandalone:ee}=await o(async()=>{let{setupSudoStandalone:e}=await import(`./setup-sudo-CbAhwltm.js`).then(e=>e.n);return{setupSudoStandalone:e}},__vite__mapDeps([131,1,3]));await ee({log:t}),await x.ready,v.wiring.notifyReady?.(),t.info(`WC live shell ready`,{scoops:x.client.getScoops().length}),S?.();let{consumeAutoPrompt:te}=await o(async()=>{let{consumeAutoPrompt:e}=await import(`./auto-prompt-Mj-vUQeB.js`);return{consumeAutoPrompt:e}},[]),C=te(window.location.search);C&&(v.getController()?.sendUserMessage(C),t.info(`Auto-prompt submitted`,{length:C.length}))}export{ur as a,Sr as i,da as n,Mt as o,ua as r,Da as t};
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/theme-engine-By4GU_Wc.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/logger-DDBAeTLF.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./attachments-CByeG2Ru.js";import{n as r,t as i}from"./base64-DpPqYZJF.js";import{i as a,r as o}from"./src-CAWTvdAa.js";import{t as s}from"./slicc-app-url-BsBryEhn.js";import{d as c,f as l,p as u}from"./tray-sync-protocol-BZ5yhJH9.js";import{a as d,i as f,n as p,r as m,t as h}from"./tray-follower-status-BAjnN7Ar.js";import{t as g}from"./remote-cdp-transport-CgOXLjZ8.js";import{i as ee,n as te}from"./tray-leader-iVJTGwuf.js";import{c as ne,i as re}from"./record-Cy655bTh.js";import{r as ie,t as ae}from"./tray-sync-protocol-DV_QG_Ey.js";import{n as oe}from"./shared-CddfUR6k.js";import{t as _}from"./sprinkle-renderer-D64E-W2o.js";import{t as v}from"./wc-scoop-color-ShF3p7L9.js";import{t as y}from"./export-spool-Eul4J1RP.js";var b=`slicc.followerTrayStatus`,x=t(`data-channel-keepalive`);function S(e,t){if(!Number.isInteger(t)||t<1)throw RangeError(`DataChannelKeepalive ${e} must be a positive integer; got ${String(t)}`)}var C=class{sendPing;onDead;isTransportOpen;onStalled;onRecovered;intervalMs;maxMissed;hardMaxMissed;timer=null;missedPongs=0;awaitingPong=!1;stopped=!1;stalled=!1;constructor(e){if(this.sendPing=e.sendPing,this.onDead=e.onDead,this.isTransportOpen=e.isTransportOpen??(()=>!1),this.onStalled=e.onStalled,this.onRecovered=e.onRecovered,this.intervalMs=e.intervalMs??1e4,this.maxMissed=e.maxMissed??3,this.hardMaxMissed=e.hardMaxMissed??30,S(`intervalMs`,this.intervalMs),S(`maxMissed`,this.maxMissed),S(`hardMaxMissed`,this.hardMaxMissed),this.hardMaxMissed<this.maxMissed)throw RangeError(`DataChannelKeepalive hardMaxMissed (${this.hardMaxMissed}) must be >= maxMissed (${this.maxMissed})`)}start(){this.timer||this.stopped||(this.timer=setInterval(()=>this.tick(),this.intervalMs))}stop(){this.stopped=!0,this.stalled=!1,this.timer&&=(clearInterval(this.timer),null)}receivePong(){this.stopped||(this.awaitingPong=!1,this.missedPongs=0,this.clearStall())}receivePing(){this.stopped||(this.missedPongs=0,this.awaitingPong=!1,this.clearStall())}get missed(){return this.missedPongs}get isStalled(){return this.stalled}clearStall(){this.stalled&&(this.stalled=!1,x.info(`Peer answered again after a stall`),this.onRecovered?.())}tick(){this.stopped||this.awaitingPong&&(this.missedPongs++,x.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed&&this.declareUnreachable())||(this.awaitingPong=!0,this.sendPing())}declareUnreachable(){return this.missedPongs<this.hardMaxMissed&&this.isTransportOpen()?(this.stalled||(this.stalled=!0,x.warn(`Peer stopped answering but its transport is still open — treating as stalled`,{missedPongs:this.missedPongs,hardMaxMissed:this.hardMaxMissed}),this.onStalled?.()),!1):(x.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead(),!0)}},w=65536;async function T(e,t){try{switch(t.op){case`readFile`:return await se(e,t.path,t.encoding);case`writeFile`:return[await ce(e,t.path,t.content,t.encoding)];case`stat`:return[await le(e,t.path)];case`readDir`:return[await ue(e,t.path)];case`mkdir`:return[await de(e,t.path,t.recursive)];case`rm`:return[await fe(e,t.path,t.recursive)];case`exists`:return[await pe(e,t.path)];case`walk`:return[await me(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[he(e)]}}async function se(e,t,n){if((n??`utf-8`)===`utf-8`)return E(await e.readFile(t,{encoding:`utf-8`}),`utf-8`);let i=await e.readFile(t,{encoding:`binary`});return E(r(i),`base64`)}async function ce(e,t,n,r){if(r===`base64`){let r=i(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function le(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function ue(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function de(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function fe(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function pe(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function me(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function E(e,t){if(e.length<=w)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/w),r=[];for(let i=0;i<n;i++){let a=i*w,o=e.slice(a,a+w);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function he(e){return e instanceof Error&&`code`in e?{ok:!1,error:e.message,code:e.code}:{ok:!1,error:e instanceof Error?e.message:String(e)}}var D=t(`tray-follower-sync`),ge=15e3,_e=6e4;function O(e,t){return e===void 0||e===t}var k=class{options;sync;eventListeners=new Set;unsubscribe;keepalive;latestSnapshot=null;sentMessageIds=new Set;targetEntries=[];remoteTransports=new Map;cdpChunkBuffers=new Map;snapshotChunkBuffer=null;remoteCDPSessions=new Set;cdpEventCleanups=[];oauthPopupAborts=new Map;tabOpenResolvers=new Map;fsResolvers=new Map;leaderProtocolVersion;legacyLeaderLogged=!1;latestSprinkles=[];sprinkleContentCache=new Map;pendingSprinkleFetches=new Map;inflightSprinkleByName=new Map;sprinkleContentWaiters=new Map;cacheEpoch=0;fetchEpoch=new Map;activeExportRequests=new Map;openSudoPrompts=new Map;constructor(e,t={}){this.options=t;let n=t.sprinkleFetchTimeoutMs;if(n!==void 0&&(!Number.isFinite(n)||n<0))throw RangeError(`sprinkleFetchTimeoutMs must be a non-negative finite number (0 disables the timer); got ${n}`);this.sync=ae(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)});let r=this.options.onSudoApprovalRequest?{exec:!1,...this.options.helloCapabilities??{},sudoApproval:!0}:this.options.helloCapabilities;this.sync.send({type:`hello`,protocolVersion:7,...this.options.selfRuntimeId?{runtime:this.options.selfRuntimeId}:{},...r?{capabilities:r}:{}}),this.keepalive=new C({sendPing:()=>this.sync.send({type:`ping`}),isTransportOpen:()=>this.sync.isOpen,onStalled:()=>{D.warn(`Leader stopped answering pings; channel still open, waiting for it to catch up`),m(!0),this.options.onLeaderStalled?.(!0)},onRecovered:()=>{D.info(`Leader is answering pings again`),m(!1),this.options.onLeaderStalled?.(!1)},onDead:()=>{D.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{D.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{D.warn(`Data channel error`),this.handleDisconnect(`Data channel error`)})}sendMessage(e,t,r,i){let a=t??`follower-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.sentMessageIds.add(a);let o=r?.length?n(r):r;this.sync.send({type:`user_message`,text:e,messageId:a,attachments:o,...i?.steer?{steer:!0}:{}}),D.info(`Sent user message to leader`,{messageId:a})}onEvent(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}stop(){this.sync.send({type:`abort`}),D.info(`Sent abort to leader`)}requestSnapshot(e){this.sync.send({type:`request_snapshot`,...e?{scoopJid:e}:{}})}requestNewSession(e){this.sync.send({type:`new_session`,action:e}),D.info(`Sent new_session to leader`,{action:e})}selectScoop(e){this.sync.send({type:`scoops.select`,scoopJid:e})}requestModels(){this.sync.send({type:`models.request`})}selectModel(e,t){this.sync.send({type:`model.select`,modelId:e,...t?{scoopJid:t}:{}})}setThinkingLevel(e,t,n){this.sync.send({type:`thinking.set`,scoopJid:e,thinkingLevel:t,effortOverride:n})}getLatestSnapshot(){return this.latestSnapshot}close(){this.disconnected||(this.disconnected=!0,this.keepalive.stop(),this.unsubscribe(),this.sync.close(),this.eventListeners.clear(),this.cleanupCDPEventForwarding(),this.rejectPendingRequests(`Follower sync closed`),D.info(`Follower sync closed`))}rejectPendingRequests(e){this.rejectPendingSprinkleFetches(e);for(let e of this.oauthPopupAborts.values())e.abort();this.oauthPopupAborts.clear();for(let e of this.openSudoPrompts.values())e.abort();this.openSudoPrompts.clear();let t=Error(e);for(let{reject:e}of this.tabOpenResolvers.values())e(t);this.tabOpenResolvers.clear();for(let{reject:e}of this.fsResolvers.values())e(t);this.fsResolvers.clear(),this.cdpChunkBuffers.clear();for(let e of this.remoteTransports.values())e.disconnect();this.remoteTransports.clear();for(let[,e]of this.activeExportRequests)e.signal.removeEventListener(`abort`,e.onAbort),e.spool.cancel(),e.reject(new o(`transfer-aborted`));this.activeExportRequests.clear()}advertiseTargets(e,t){this.sync.send({type:`targets.advertise`,targets:e,runtimeId:t})}getTargets(){return this.targetEntries}sendCherryHostEvent(e,t){this.sync.send({type:`cherry.host_event`,targetId:this.options.selfRuntimeId??``,name:e,detail:t})}getSprinkles(){return this.latestSprinkles}refreshSprinkles(){this.sync.send({type:`sprinkles.refresh`})}fetchSprinkleContent(e){let t=this.sprinkleContentCache.get(e);if(t!==void 0)return Promise.resolve(t);let n=this.options.sprinkleFetchTimeoutMs??ge;return new Promise((t,r)=>{let i=Symbol(`sprinkle-waiter`),a,o=e=>{a!==void 0&&clearTimeout(a),t(e)},s=e=>{a!==void 0&&clearTimeout(a),r(e)},c=this.sprinkleContentWaiters.get(e)??[];if(c.push({id:i,resolve:o,reject:s}),this.sprinkleContentWaiters.set(e,c),n>0&&(a=setTimeout(()=>{let t=this.sprinkleContentWaiters.get(e);if(t){let r=t.findIndex(e=>e.id===i);r>=0&&t.splice(r,1),t.length===0&&(this.sprinkleContentWaiters.delete(e),this.cancelSprinkleFetch(e,`Sprinkle fetch for "${e}" timed out after ${n}ms`))}r(Error(`Sprinkle fetch for "${e}" timed out after ${n}ms`))},n)),this.inflightSprinkleByName.has(e))return;let l=`sprinkle-fetch-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.inflightSprinkleByName.set(e,l),this.pendingSprinkleFetches.set(l,{sprinkleName:e,chunks:new Map,totalChunks:1}),this.fetchEpoch.set(l,this.cacheEpoch),this.sync.send({type:`sprinkle.fetch`,requestId:l,sprinkleName:e})})}sendSprinkleLick(e,t,n){this.sync.send({type:`sprinkle.lick`,sprinkleName:e,body:t,targetScoop:n})||D.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}reportSprinkleInstances(e){this.sync.send({type:`sprinkle.instances`,sprinkles:e})||D.debug(`reportSprinkleInstances dropped: tray channel closed`)}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||D.warn(`forwardLick dropped: tray channel closed`,{type:e.type}),t}clearSprinkleCache(e){e===void 0?this.sprinkleContentCache.clear():this.sprinkleContentCache.delete(e)}cancelSprinkleFetch(e,t=`fetch cancelled`){let n=this.sprinkleContentWaiters.get(e)??[];this.sprinkleContentWaiters.delete(e);let r=this.inflightSprinkleByName.get(e);if(r!==void 0&&(this.inflightSprinkleByName.delete(e),this.pendingSprinkleFetches.delete(r),this.fetchEpoch.delete(r)),n.length===0)return;let i=Error(t);for(let e of n)e.reject(i)}disconnected=!1;handleDisconnect(e){if(this.disconnected)return;this.disconnected=!0,D.error(`Follower sync disconnected`,{reason:e});let t=h();f({...t,state:`error`,error:e,stalled:!1}),this.keepalive.stop(),this.cleanupCDPEventForwarding(),this.unsubscribe(),this.sync.close(),this.rejectPendingRequests(`Follower sync disconnected: ${e}`),this.options.onDisconnect?.(e)}handleKeepaliveMessage(e){if(e===`ping`){this.keepalive.receivePing(),this.sync.send({type:`pong`});return}this.keepalive.receivePong(),p(Date.now())}handleLeaderHello(e){this.leaderProtocolVersion=e,e>7?D.warn(`Leader speaks a newer tray sync protocol — update this build`,{leaderVersion:e,ourVersion:7}):D.info(`Leader hello`,{protocolVersion:e}),e>=5&&this.requestModels()}noteLegacyLeader(e){e!==`hello`&&this.leaderProtocolVersion===void 0&&(this.legacyLeaderLogged||(this.legacyLeaderLogged=!0,D.info(`Leader sent no hello — legacy peer (pre-versioning build)`)))}handleThemeMessage(e){return e.type===`theme.apply`&&(this.applyLeaderTheme(e.themeJson),!0)}handleLeaderMessage(e){if(this.noteLegacyLeader(e.type),!this.handleThemeMessage(e))switch(e.type){case`snapshot`:D.info(`Snapshot received from leader`,{messageCount:e.messages.length,scoopJid:e.scoopJid}),this.snapshotChunkBuffer=null,this.latestSnapshot={messages:e.messages,scoopJid:e.scoopJid},this.options.onSnapshot?.(e.messages,e.scoopJid);break;case`snapshot_chunk`:{let t=ie(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(D.info(`Chunked snapshot reassembled from leader`,{messageCount:t.result.messages.length,scoopJid:t.result.scoopJid}),this.latestSnapshot=t.result,this.options.onSnapshot?.(t.result.messages,t.result.scoopJid));break}case`agent_event`:this.emitEvent(e.event);break;case`user_message_echo`:this.handleUserMessageEcho(e);break;case`status`:this.options.onStatus?.(e.scoopStatus,e.scoopJid);break;case`error`:D.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:D.info(`Target registry received from leader`,{targetCount:e.targets.length}),this.targetEntries=e.targets,this.options.onTargetsUpdated?.(this.targetEntries);break;case`cdp.request`:{let{requestId:t,localTargetId:n,method:r,params:i,sessionId:a}=e;this.executeLocalCDP(t,n,r,i,a);break}case`cdp.response`:this.routeCDPResponse(e);break;case`cdp.event`:this.routeCDPEvent(e);break;case`tab.open`:case`preview.open`:this.executeLocalTabOpen(e.requestId,e.url);break;case`tab.opened`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.resolve(e.targetId));break}case`tab.open.error`:{let t=this.tabOpenResolvers.get(e.requestId);t&&(this.tabOpenResolvers.delete(e.requestId),t.reject(Error(e.error)));break}case`fs.request`:this.executeLocalFs(e.requestId,e.request);break;case`fs.response`:this.routeFsResponse(e.requestId,e.response);break;case`scoops.list`:this.handleScoopsList(e.scoops,e.activeScoopJid);break;case`models.list`:this.options.onModelsList?.(e.models);break;case`model.state`:this.options.onModelState?.(e.state);break;case`sprinkles.list`:this.handleSprinklesList(e.sprinkles);break;case`sprinkle.content`:this.handleSprinkleContent(e);break;case`sprinkle.update`:this.options.onSprinkleUpdate?.(e.sprinkleName,e.data);break;case`sprinkle.reloaded`:this.handleSprinkleReloaded(e.sprinkleName);break;case`cherry.slicc_event`:this.options.onCherrySliccEvent?.(e.name,e.detail);break;case`transcript.export.pending`:case`transcript.export.denied`:case`transcript.export.start`:case`transcript.export.chunk`:case`transcript.export.complete`:case`transcript.export.error`:this.handleExportLeaderMessage(e);break;case`sudo.approve.request`:case`sudo.approve.cancel`:this.handleSudoLeaderMessage(e);break;case`oauth.popup.request`:this.handleOAuthPopupRequest(e.requestId,e.url);break;case`ping`:case`pong`:this.handleKeepaliveMessage(e.type);break;case`hello`:this.handleLeaderHello(e.protocolVersion);break;case`exec.request`:case`exec.chunk`:case`exec.response`:case`exec.signal`:this.handleExecMessage(e);break;default:{let t=u(e);D.warn(`Unknown leader message type — skewed leader?`,{type:t.type});break}}}handleExecMessage(e){e.type===`exec.request`&&this.sync.send({type:`exec.response`,requestId:e.requestId,exitCode:127,error:`exec is not supported on this follower`})}handleSprinklesList(e){D.info(`Sprinkles list received from leader`,{sprinkleCount:e.length}),this.sprinkleContentCache.clear(),this.cacheEpoch++,this.latestSprinkles=e,this.options.onSprinklesList?.(e)}handleUserMessageEcho(e){if(this.sentMessageIds.has(e.messageId)){this.sentMessageIds.delete(e.messageId),D.debug(`Skipping own message echo`,{messageId:e.messageId});return}D.info(`User message echo received`,{messageId:e.messageId,scoopJid:e.scoopJid}),this.options.onUserMessage?.(e.text,e.messageId,e.scoopJid,e.attachments)}handleScoopsList(e,t){D.info(`Scoops list received from leader`,{scoopCount:e.length}),this.options.onScoopsList?.(e,t)}handleSprinkleReloaded(e){this.sprinkleContentCache.delete(e),this.options.onSprinkleReloaded?.(e)}handleSprinkleContent(e){let{requestId:t,sprinkleName:n,content:r,chunkIndex:i,totalChunks:a,error:o}=e;if(o){D.warn(`sprinkle.content error from leader`,{sprinkleName:n,error:o}),this.pendingSprinkleFetches.delete(t),this.inflightSprinkleByName.delete(n),this.fetchEpoch.delete(t);let e=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let t of e)t.reject(Error(o));return}if(!this.pendingSprinkleFetches.has(t)){D.debug(`Dropping sprinkle.content for unknown requestId`,{sprinkleName:n,requestId:t});return}let s=null;if(i!==void 0&&a!==void 0){if(i<0||i>=a){D.warn(`Dropping sprinkle.content with out-of-range chunkIndex`,{sprinkleName:n,chunkIndex:i,totalChunks:a});return}let e=this.pendingSprinkleFetches.get(t);if(e.totalChunks=a,e.chunks.has(i)?D.warn(`Dropping duplicate sprinkle.content chunk`,{sprinkleName:n,chunkIndex:i}):e.chunks.set(i,r),e.chunks.size>=a){let r=[];for(let t=0;t<a;t++){let i=e.chunks.get(t);if(i===void 0){D.warn(`Chunked sprinkle.content missing chunk after assembly`,{sprinkleName:n,missingIndex:t});return}r.push(i)}s=r.join(``),this.pendingSprinkleFetches.delete(t)}}else s=r,this.pendingSprinkleFetches.delete(t);if(s===null)return;let c=this.fetchEpoch.get(t);this.fetchEpoch.delete(t),c===this.cacheEpoch&&this.sprinkleContentCache.set(n,s),this.inflightSprinkleByName.delete(n);let l=this.sprinkleContentWaiters.get(n)??[];this.sprinkleContentWaiters.delete(n);for(let e of l)e.resolve(s)}rejectPendingSprinkleFetches(e){let t=Error(e);for(let[,e]of this.sprinkleContentWaiters)for(let n of e)n.reject(t);this.sprinkleContentWaiters.clear(),this.pendingSprinkleFetches.clear(),this.inflightSprinkleByName.clear(),this.fetchEpoch.clear()}applyLeaderTheme(e){this.options.onThemeApply?.(e)}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(t){D.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new g({sendCDPRequest:(n,r,i,a)=>{this.sync.send({type:`cdp.request`,requestId:n,targetRuntimeId:e,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}openRemoteTab(e,t){let n=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.tabOpenResolvers.set(n,{resolve:r,reject:i}),this.sync.send({type:`tab.open`,requestId:n,targetRuntimeId:e,url:t})})}requestTabTeleport(e){let t=`tab-teleport-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((n,r)=>{let i=setTimeout(()=>{this.tabOpenResolvers.delete(t)&&r(Error(`tab teleport timed out`))},_e),a=e=>t=>{clearTimeout(i),e(t)};this.tabOpenResolvers.set(t,{resolve:a(n),reject:a(r)}),this.sync.send({type:`tab.teleport.request`,requestId:t,targetId:e})===!1&&(clearTimeout(i),this.tabOpenResolvers.delete(t),r(Error(`not connected to a leader`)))})}getLeaderProtocolVersion(){return this.leaderProtocolVersion}async handleOAuthPopupRequest(e,t){let n=this.options.onOAuthPopupRequest;if(!n){D.warn(`Leader delegated an OAuth popup, but this float cannot show one`,{requestId:e}),this.sync.send({type:`oauth.popup.response`,requestId:e,error:`this follower cannot show an interactive login`});return}let r=new AbortController;this.oauthPopupAborts.set(e,r);try{let i=await n(t,r.signal);this.sync.send({type:`oauth.popup.response`,requestId:e,...i?{redirectUrl:i}:{}})}catch(t){D.warn(`Delegated OAuth popup failed`,{requestId:e,error:String(t)}),this.sync.send({type:`oauth.popup.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}finally{this.oauthPopupAborts.delete(e)}}async executeLocalTabOpen(e,t){let n=this.options.browserTransport;if(!n){this.sync.send({type:`tab.open.error`,requestId:e,error:`Follower has no browser transport`});return}try{let r=(await n.send(`Target.createTarget`,{url:t,background:!0})).targetId;if(typeof r!=`string`||r.length===0){this.sync.send({type:`tab.open.error`,requestId:e,error:`Target.createTarget did not return a usable targetId`});return}this.sync.send({type:`tab.opened`,requestId:e,targetId:r}),this.options.onTargetsChanged?.()}catch(t){this.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}async executeLocalCDP(e,t,n,r,i){let a=this.options.browserTransport;if(!a){this.sync.send({type:`cdp.response`,requestId:e,error:`Follower has no browser transport`});return}try{let t=await a.send(n,r,i);if(n===`Target.attachToTarget`&&t.sessionId){let e=t.sessionId;this.remoteCDPSessions.add(e),this.setupCDPEventForwarding(a,e),D.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),D.debug(`Removed remote CDP session on detach`,{sessionId:i})),l(this.sync,e,t)}catch(t){this.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}setupCDPEventForwarding(e,t){for(let n of[`Page.frameNavigated`,`Page.loadEventFired`,`Page.domContentEventFired`,`Network.responseReceived`,`Network.loadingFinished`,`Network.requestWillBeSent`,`Runtime.executionContextCreated`,`Runtime.executionContextDestroyed`,`Runtime.executionContextsCleared`]){let r=e=>{if(e.sessionId!==t||!this.remoteCDPSessions.has(t))return;let{sessionId:r,...i}=e;this.sync.send({type:`cdp.event`,method:n,params:i,sessionId:t})};e.on(n,r),this.cdpEventCleanups.push(()=>e.off(n,r))}}cleanupCDPEventForwarding(){for(let e of this.cdpEventCleanups)e();this.cdpEventCleanups.length=0,this.remoteCDPSessions.clear()}routeCDPResponse(e){let t=c(this.cdpChunkBuffers,e);if(t)for(let n of this.remoteTransports.values())n.handleResponse(e.requestId,t.result,t.error)}routeCDPEvent(e){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params;for(let n of this.remoteTransports.values())n.handleEvent(e.method,t)}async executeLocalFs(e,t){let n=this.options.vfs;if(!n){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Follower has no VFS`}});return}let r;try{r=await T(n,t)}catch(t){this.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:t instanceof Error?t.message:String(t)}});return}for(let t of r)this.sync.send({type:`fs.response`,requestId:e,response:t})}routeFsResponse(e,t){let n=this.fsResolvers.get(e);if(!n)return;n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}sendFsRequest(e,t){let n=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((r,i)=>{this.fsResolvers.set(n,{resolve:r,reject:i,responses:[]}),this.sync.send({type:`fs.request`,requestId:n,targetRuntimeId:e,request:t})})}handleExportLeaderMessage(e){switch(e.type){case`transcript.export.pending`:D.debug(`Transcript export pending`,{requestId:e.requestId}),this.activeExportRequests.get(e.requestId)?.onProgress?.({phase:`collecting`});break;case`transcript.export.denied`:this.handleExportDenied(e.requestId);break;case`transcript.export.start`:D.debug(`Transcript export start`,{requestId:e.requestId}),this.activeExportRequests.get(e.requestId)?.onProgress?.({phase:`packaging`});break;case`transcript.export.chunk`:this.handleExportChunkAsync(e.requestId,e.index,e.data);break;case`transcript.export.complete`:this.handleExportComplete(e.requestId,e.chunks,e.byteLength,e.sha256);break;case`transcript.export.error`:this.handleExportError(e.requestId,e.code);break;default:{let t=u(e);D.warn(`Unknown transcript export leader message — skewed leader?`,{type:t.type});break}}}requestTranscriptExport(e,t,n){if(t.aborted)return Promise.reject(new o(`transfer-aborted`));let r=`te-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=(this.options.makeExportSpool??y)(r);return new Promise((a,s)=>{let c=()=>{let e=this.activeExportRequests.get(r);e&&(this.sync.send({type:`transcript.export.cancel`,requestId:r}),this.activeExportRequests.delete(r),e.spool.cancel(),s(new o(`transfer-aborted`)))};if(t.aborted){i.cancel(),s(new o(`transfer-aborted`));return}t.addEventListener(`abort`,c,{once:!0}),this.activeExportRequests.set(r,{resolve:a,reject:s,spool:i,nextExpectedIndex:0,totalBytes:0,signal:t,onAbort:c,onProgress:n}),this.sync.send({type:`transcript.export.request`,requestId:r,selector:e})})}handleSudoLeaderMessage(e){if(e.type===`sudo.approve.cancel`){this.openSudoPrompts.get(e.requestId)?.abort();return}this.handleSudoApprovalRequest(e)}async handleSudoApprovalRequest(e){let{requestId:t}=e,n=e=>{this.sync.send({type:`sudo.approve.response`,requestId:t,decision:e.decision,...e.decision===`always`&&e.pattern?{pattern:e.pattern}:{},...e.attestation?{attestation:e.attestation}:{}})},r=this.options.onSudoApprovalRequest;if(!r){D.warn(`No sudo approval handler wired — denying delegated prompt`,{requestId:t}),n({decision:`deny`});return}if(this.openSudoPrompts.has(t))return;let i=new AbortController;this.openSudoPrompts.set(t,i);let a={decision:`deny`};try{a=await r({requestId:t,kind:e.kind,detail:e.detail,...e.suggestedPattern?{suggestedPattern:e.suggestedPattern}:{},...e.scoopName?{scoopName:e.scoopName}:{},expiresAt:e.expiresAt,signal:i.signal})}catch(e){D.warn(`Sudo approval dialog failed — denying`,{requestId:t,error:e instanceof Error?e.message:String(e)}),a={decision:`deny`}}finally{this.openSudoPrompts.delete(t)}if(i.signal.aborted){n({decision:`deny`});return}n(a)}registerPushToken(e){return this.sync.send({type:`push.register`,...e})}handleExportDenied(e){let t=this.activeExportRequests.get(e);t&&(t.signal.removeEventListener(`abort`,t.onAbort),this.activeExportRequests.delete(e),t.spool.cancel(),t.reject(new o(`permission-denied`)))}async handleExportChunkAsync(e,t,n){let r=this.activeExportRequests.get(e);if(!r)return;if(t!==r.nextExpectedIndex){D.warn(`Transcript export chunk out of order`,{requestId:e,expected:r.nextExpectedIndex,got:t}),r.signal.removeEventListener(`abort`,r.onAbort),this.activeExportRequests.delete(e),this.sync.send({type:`transcript.export.cancel`,requestId:e}),r.spool.cancel(),r.reject(new o(`transfer-corrupt`));return}let i=atob(n),a=new Uint8Array(i.length);for(let e=0;e<i.length;e++)a[e]=i.charCodeAt(e);r.totalBytes+=a.byteLength,r.nextExpectedIndex++,r.onProgress?.({phase:`transferring`,processedBytes:r.totalBytes});try{await r.spool.append(a,t)}catch(t){if(!this.activeExportRequests.has(e))return;r.signal.removeEventListener(`abort`,r.onAbort),this.activeExportRequests.delete(e),this.sync.send({type:`transcript.export.cancel`,requestId:e}),r.spool.cancel(),r.reject(new o(`transfer-corrupt`)),D.warn(`Transcript export spool append failed`,{requestId:e,error:t instanceof Error?t.message:String(t)});return}this.activeExportRequests.has(e)&&this.sync.send({type:`transcript.export.ack`,requestId:e,index:t})}async handleExportComplete(e,t,n,r){let i=this.activeExportRequests.get(e);if(!i)return;if(i.signal.removeEventListener(`abort`,i.onAbort),this.activeExportRequests.delete(e),i.nextExpectedIndex!==t){D.warn(`Transcript export chunk count mismatch`,{requestId:e,expected:t,got:i.nextExpectedIndex}),i.spool.cancel(),i.reject(new o(`transfer-corrupt`));return}let a;try{a=await i.spool.finalize(t,n,r)}catch(t){D.warn(`Transcript export spool finalize failed`,{requestId:e,error:t instanceof Error?t.message:String(t)}),i.reject(new o(`transfer-corrupt`));return}i.resolve(a)}handleExportError(e,t){let n=this.activeExportRequests.get(e);if(!n)return;n.signal.removeEventListener(`abort`,n.onAbort),this.activeExportRequests.delete(e),n.spool.cancel();let r=a.has(t)?t:`transfer-corrupt`;n.reject(new o(r))}},A=class{logger;failureMessage;recoveryMessage;throttleMs;sustainedRelogMs;recoveryDebounceTicks;now;lastErrorLogAt=-1/0;inFailingState=!1;consecutiveSuccesses=0;constructor(e,t){if(!t.failureMessage.trim())throw RangeError(`ThrottledErrorTracker: failureMessage must be non-empty`);if(!t.recoveryMessage.trim())throw RangeError(`ThrottledErrorTracker: recoveryMessage must be non-empty`);let n=t.throttleMs??6e4;if(!Number.isFinite(n)||n<0)throw RangeError(`ThrottledErrorTracker: throttleMs must be a non-negative finite number, got ${n}`);let r=t.sustainedRelogMs??3e5;if(!Number.isFinite(r)||r<0)throw RangeError(`ThrottledErrorTracker: sustainedRelogMs must be a non-negative finite number, got ${r}`);let i=t.recoveryDebounceTicks??5;if(!Number.isInteger(i)||i<1)throw RangeError(`ThrottledErrorTracker: recoveryDebounceTicks must be a positive integer, got ${i}`);this.logger=e,this.failureMessage=t.failureMessage,this.recoveryMessage=t.recoveryMessage,this.throttleMs=n,this.sustainedRelogMs=r,this.recoveryDebounceTicks=i,this.now=t.now??(()=>performance.now())}reportFailure(e){let t=this.inFailingState;this.inFailingState=!0,this.consecutiveSuccesses=0;let n=this.now(),r=n-this.lastErrorLogAt;if(r>(t?this.sustainedRelogMs:this.throttleMs)){let i=t,a=i?`${this.failureMessage} (sustained)`:this.failureMessage;try{try{this.logger.error(a,i?{error:e instanceof Error?e.message:String(e),elapsedMs:Math.round(r)}:{error:e instanceof Error?e.message:String(e)})}catch(t){try{console.error(`[throttled-error-tracker] logger.error threw`,t,{originalMessage:a,originalError:e instanceof Error?e.message:String(e)})}catch{}}}finally{this.lastErrorLogAt=n}}}reportSuccess(){if(this.inFailingState&&(this.consecutiveSuccesses++,!(this.consecutiveSuccesses<this.recoveryDebounceTicks)))try{try{this.logger.error(this.recoveryMessage,{kind:`recovery`})}catch(e){try{console.error(`[throttled-error-tracker] logger.error (recovery) threw`,e,{originalMessage:this.recoveryMessage})}catch{}}}finally{this.inFailingState=!1,this.consecutiveSuccesses=0,this.lastErrorLogAt=-1/0}}},j=t(`tray-follower`);function M(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function N(e){let t=M(e.joinUrl),n=await be(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return j.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),P(n)}function P(e){let t={trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,action:e.result.action,code:e.result.code,iceServers:e.iceServers};return e.result.action===`wait`?{...t,retryAfterMs:e.result.retryAfterMs}:e.result.action===`signal`?{...t,bootstrap:e.result.bootstrap}:e.result.action===`fail`?{...t,error:e.result.error,...e.result.code===`TRAY_SUPERSEDED`?{supersededByJoinUrl:e.result.joinUrl}:{}}:t}async function F(e){return L(await R(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function I(e){return L(await R(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function ve(e){return L(await R(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function ye(e){return L(await R(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function L(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function be(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!xe(n)){let n=t?t.slice(0,200):`(empty)`;throw j.warn(`Tray follower attach returned an invalid response`,{status:e.status,body:n}),Error(`Tray follower attach returned an invalid response (${e.status}): ${n}`)}return n}async function R(e,t){let n=M(e.joinUrl),r=await(e.fetchImpl??fetch)(n,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),i=await r.json().catch(()=>null);if(!Se(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function xe(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.trayId!=`string`||typeof t.controllerId!=`string`||t.role!==`follower`||typeof t.participantCount!=`number`)return!1;let n=t.result;if(!n||typeof n!=`object`)return!1;let r=n;return r.action===`wait`?(r.code===`LEADER_NOT_ELECTED`||r.code===`LEADER_NOT_CONNECTED`)&&typeof r.retryAfterMs==`number`:r.action===`signal`?r.code===`LEADER_CONNECTED`&&z(r.bootstrap):r.action===`fail`?r.code===`TRAY_SUPERSEDED`?typeof r.error==`string`&&typeof r.joinUrl==`string`:(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function Se(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.trayId==`string`&&typeof t.controllerId==`string`&&t.role===`follower`&&typeof t.participantCount==`number`&&z(t.bootstrap)&&Array.isArray(t.events)}function z(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.controllerId==`string`&&typeof t.bootstrapId==`string`&&typeof t.attempt==`number`&&typeof t.state==`string`&&typeof t.expiresAt==`string`&&typeof t.cursor==`number`&&typeof t.maxRetries==`number`&&typeof t.retriesRemaining==`number`}var B=t(`tray-webrtc`),Ce=`tray-control`,we=250,Te=5,Ee=1e3,De=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>H(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??Ce}setIceServers(e){this.iceServers=e}async handleControlMessage(e){e.type===`follower.join_requested`?(e.iceServers&&!this.iceServers&&(this.iceServers=e.iceServers),await this.handleJoinRequested(e)):e.type===`bootstrap.answer`?await this.peers.get(e.bootstrapId)?.peer.setRemoteDescription(e.answer):e.type===`bootstrap.ice_candidate`&&await this.peers.get(e.bootstrapId)?.peer.addIceCandidate(e.candidate)}getPeers(){return Array.from(this.peers.values()).map(({state:e})=>({...e}))}getChannel(e){return this.peers.get(e)?.channel??null}stop(){for(let e of this.peers.values())e.peer.close();this.peers.clear(),this.options.onPeersChanged?.()}async handleJoinRequested(e){this.closeControllerPeers(e.controllerId);let t=this.peerConnectionFactory(),n={controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,state:`connecting`,connectedAt:null,runtime:e.runtime},r=V(t.createDataChannel(this.dataChannelLabel),t);this.peers.set(e.bootstrapId,{state:n,peer:t,channel:r}),this.options.onPeersChanged?.(),t.addEventListener(`icecandidate`,({candidate:t})=>{let n=W(t);n&&this.options.sendControlMessage({type:`bootstrap.ice_candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:n})}),t.addEventListener(`connectionstatechange`,()=>{let n=this.peers.get(e.bootstrapId);n&&(n.state.state===`connected`?(t.connectionState===`disconnected`||t.connectionState===`failed`)&&(B.warn(`Leader peer connection state changed post-connect`,{bootstrapId:e.bootstrapId,state:t.connectionState}),this.options.onPeerDisconnected?.(e.bootstrapId,`Peer connection ${t.connectionState}`)):t.connectionState===`failed`&&this.failPeer(e,`Leader peer connection failed before the data channel opened`))}),r.addEventListener(`open`,()=>{let t=this.peers.get(e.bootstrapId);!t||t.state.state===`connected`||(t.state.state=`connected`,t.state.connectedAt=new Date().toISOString(),this.options.onPeerConnected?.({...t.state},t.channel),this.options.onPeersChanged?.())}),r.addEventListener(`close`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(B.warn(`Leader data channel closed post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel closed`),this.options.onPeerTransportClosed?.(e.bootstrapId,`Data channel closed`)):this.failPeer(e,`Leader data channel closed before opening`))}),r.addEventListener(`error`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(B.warn(`Leader data channel error post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(e.bootstrapId,`Data channel error`)):this.failPeer(e,`Leader data channel failed before opening`))});try{let n=await t.createOffer();await t.setLocalDescription(n),this.options.sendControlMessage({type:`bootstrap.offer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,offer:U(t.localDescription??n,`offer`)})}catch(t){this.failPeer(e,t instanceof Error?t.message:String(t))}}closeControllerPeers(e){for(let[t,n]of this.peers.entries())n.state.controllerId===e&&(n.state.state===`connected`&&(this.options.onPeerDisconnected?.(t,`Controller superseded`),this.options.onPeerTransportClosed?.(t,`Controller superseded`)),n.peer.close(),this.peers.delete(t))}failPeer(e,t){let n=this.peers.get(e.bootstrapId);if(n){n.peer.close(),this.peers.delete(e.bootstrapId),this.options.onPeersChanged?.();try{this.options.sendControlMessage({type:`bootstrap.failed`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,code:`WEBRTC_BOOTSTRAP_FAILED`,message:t,retryable:!0,retryAfterMs:1e3})}catch(e){B.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},Oe=class{options;fetchImpl;peerConnectionFactory;controllerIdFactory;sleep;pollIntervalMs;iceServers;activePeer=null;stopped=!1;constructor(e){this.options=e,this.fetchImpl=e.fetchImpl??fetch,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>H(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??we}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();f({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),B.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0,r=0;for(;;){G(this.stopped),n++;let t;try{t=await N({joinUrl:this.options.joinUrl,controllerId:e,runtime:this.options.runtime,fetchImpl:this.fetchImpl})}catch(e){let t=e instanceof Error?e.message:String(e);throw f({...h(),attachAttempts:n,lastError:t}),e}if(f({...h(),attachAttempts:n,lastAttachCode:t.code}),this.followSupersededJoinUrl(t,r)){r++,await this.sleep(Ee);continue}if(t.action===`wait`){let e=t.retryAfterMs??1e3;B.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&B.warn(`Follower tray attach still waiting after ${n} attempts`,{attempt:n,code:t.code,retryAfterMs:e}),await this.sleep(e);continue}if(t.action===`fail`||!t.bootstrap){let e=t.error??`Tray follower attach failed (${t.code})`;throw f({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),B.warn(`Follower tray attach failed`,{error:e}),Error(e)}t.iceServers&&(this.iceServers=t.iceServers);try{let r=await this.completeBootstrap(t.trayId,e,t.bootstrap);return f({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),B.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw f({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),B.warn(`Follower tray bootstrap failed`,{error:r}),e}}}followSupersededJoinUrl(e,t){if(e.action!==`fail`||e.code!==`TRAY_SUPERSEDED`||!e.supersededByJoinUrl)return!1;if(t>=Te)throw Error(`Follower tray attach gave up after ${t} supersede redirects (possible redirect cycle)`);let n;try{n=new URL(e.supersededByJoinUrl)}catch{throw Error(`Follower tray superseded with an invalid joinUrl: ${e.supersededByJoinUrl}`)}return B.info(`Follower tray superseded, following redirect`,{oldJoinUrl:this.options.joinUrl,newJoinUrl:n.toString()}),this.options.joinUrl=n.toString(),this.options.onJoinUrlChanged?.(n.toString()),!0}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,f({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})}async completeBootstrap(e,t,n){let r=n,i=0;for(this.activePeer=this.createFollowerPeer(t,r.bootstrapId);;){if(G(this.stopped),this.activePeer.open&&this.activePeer.channel)return{trayId:e,controllerId:t,bootstrapId:r.bootstrapId,channel:this.activePeer.channel};if(this.activePeer.openError)throw Error(this.activePeer.openError);let n=await F({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,cursor:i,fetchImpl:this.fetchImpl});r=n.bootstrap,i=r.cursor;try{await this.applyBootstrapEvents(n.events,this.activePeer,t,r.bootstrapId)}catch(e){if(r.failure?.retryable&&r.retriesRemaining>0){r=(await ye({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,runtime:this.options.runtime,fetchImpl:this.fetchImpl})).bootstrap,i=0,this.activePeer.peer.close(),this.activePeer=this.createFollowerPeer(t,r.bootstrapId);continue}throw e}this.activePeer.open||await this.sleep(this.pollIntervalMs)}}async applyBootstrapEvents(e,t,n,r){for(let i of e)if(i.type===`bootstrap.offer`){await t.peer.setRemoteDescription(i.offer);let e=await t.peer.createAnswer();await t.peer.setLocalDescription(e),await I({joinUrl:this.options.joinUrl,controllerId:n,bootstrapId:r,answer:U(t.peer.localDescription??e,`answer`),fetchImpl:this.fetchImpl})}else if(i.type===`bootstrap.ice_candidate`)await t.peer.addIceCandidate(i.candidate);else if(i.type===`bootstrap.failed`)throw Error(i.failure.message)}createFollowerPeer(e,t){let n=this.peerConnectionFactory(),r={peer:n,channel:null,open:!1,openError:null};return n.addEventListener(`connectionstatechange`,()=>{r.open&&(n.connectionState===`disconnected`||n.connectionState===`failed`)&&(B.warn(`Follower peer connection state changed post-connect`,{bootstrapId:t,state:n.connectionState}),this.options.onDisconnected?.(`Peer connection ${n.connectionState}`))}),n.addEventListener(`datachannel`,({channel:e})=>{r.channel=V(e,n),e.addEventListener(`open`,()=>{r.open=!0}),e.addEventListener(`close`,()=>{r.open?(B.warn(`Follower data channel closed post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel closed`)):r.openError=`Follower data channel closed before opening`}),e.addEventListener(`error`,()=>{r.open?(B.warn(`Follower data channel error post-connect`,{bootstrapId:t}),this.options.onDisconnected?.(`Data channel error`)):r.openError=`Follower data channel failed before opening`})}),n.addEventListener(`icecandidate`,({candidate:n})=>{let r=W(n);r&&ve({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{B.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function ke(e,t){let n=t.baseDelayMs??1e3,r=t.backoffMultiplier??2,i=t.maxDelayMs??3e4,a=t.maxAttempts??10,o=t.sleep??e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=!1,c=!1,l=null,u={cancel(){s=!0,c=!1,l?.stop(),l=null},get reconnecting(){return c}},d=()=>{let t=new Oe({...e,sleep:o,onDisconnected:e=>{s||(B.warn(`Follower disconnected, starting reconnect loop`,{reason:e}),p(e))},onJoinUrlChanged:t=>{e.joinUrl=t,e.onJoinUrlChanged?.(t)}});return l=t,{manager:t,connectionPromise:t.start()}},p=async u=>{if(s||c)return;c=!0,l?.stop(),l=null;let p=0,m=n,g=u??`Unknown disconnect`;for(;!s&&p<a&&(p++,t.onReconnecting?.(p),f({...h(),state:`reconnecting`,error:null,reconnectAttempts:p}),B.info(`Reconnect attempt`,{attempt:p,delay:m}),await o(m),!s);){let n=null;try{let r=d();n=r.manager;let i=await r.connectionPromise;if(s){n.stop();break}c=!1,f({...h(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),B.info(`Reconnect successful`,{attempt:p,trayId:i.trayId}),t.onConnected(i);return}catch(e){g=e instanceof Error?e.message:String(e),B.warn(`Reconnect attempt failed`,{attempt:p,error:g}),n?.stop(),l=null}m=Math.min(m*r,i)}s||(c=!1,f({...h(),state:`error`,error:`Reconnect failed after ${p} attempts: ${g}`,reconnectAttempts:p}),B.warn(`Reconnect gave up`,{attempts:p,lastError:g}),t.onGaveUp?.(g))},{connectionPromise:m}=d();return m.then(e=>{s||t.onConnected(e)}).catch(e=>{s||(B.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)}),p(e instanceof Error?e.message:String(e)))}),u}function V(e,t){return e.getMaxMessageSize=()=>t.sctp?.maxMessageSize,e}function H(e){if(typeof RTCPeerConnection>`u`)throw Error(`RTCPeerConnection is not available in this runtime`);let t=e?.length?{iceServers:e}:void 0;return new RTCPeerConnection(t)}function U(e,t){if(!e||e.type!==t||typeof e.sdp!=`string`)throw Error(`Expected a local ${t} description before signaling`);return{type:e.type,sdp:e.sdp}}function W(e){if(!e||typeof e!=`object`)return null;let t=e;return typeof t.candidate==`string`?{candidate:t.candidate,sdpMid:typeof t.sdpMid==`string`?t.sdpMid:null,sdpMLineIndex:typeof t.sdpMLineIndex==`number`?t.sdpMLineIndex:null,usernameFragment:typeof t.usernameFragment==`string`?t.usernameFragment:null}:null}function G(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}function K(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}var q=t(`sprinkle-follower`),Ae=class{sync;addSprinkle;removeSprinkle;zone;openPath;open=new Map;opening=new Set;latestDesiredOpen=new Set;pendingUpdates=new Map;updateListeners=new Map;disposed=!1;constructor(e){this.sync=e.sync,this.addSprinkle=e.addSprinkle,this.removeSprinkle=e.removeSprinkle,this.zone=e.zone,this.openPath=e.open}async updateAvailable(e){if(this.disposed)return;let t=new Map;for(let n of e)n.open&&t.set(n.name,n);this.latestDesiredOpen=new Set(t.keys());for(let e of[...this.open.keys()])t.has(e)||this.closeLocally(e);for(let e of[...this.pendingUpdates.keys()])t.has(e)||this.pendingUpdates.delete(e);let n=[];for(let[e,r]of t)this.open.has(e)||this.opening.has(e)||n.push(this.openLocally(e,r));await Promise.allSettled(n),this.reportInstances()}handleSprinkleUpdate(e,t){if(this.disposed)return;let n=this.open.get(e);if(n){n.renderer.pushUpdate(t),this.fanOutToListeners(e,t);return}if(this.opening.has(e)){this.pendingUpdates.set(e,t);return}q.debug(`Dropping sprinkle.update for unknown sprinkle`,{sprinkleName:e})}async handleSprinkleReloaded(e){if(this.disposed)return;let t=this.open.get(e);if(!t){this.opening.has(e)&&this.pendingUpdates.delete(e);return}this.updateListeners.delete(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){q.warn(`Failed to fetch sprinkle content for reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.open.has(e))return;try{t.renderer.dispose()}catch(t){q.warn(`Sprinkle dispose threw during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}let r=this.createBridge(e),i=new _(t.container,r);try{await i.render(n,e)}catch(t){q.warn(`Sprinkle re-render failed during reload`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.open.has(e)){i.dispose();return}t.renderer=i,i.activateBridgeLifecycle(),this.open.has(e)&&q.info(`Sprinkle reloaded in place`,{sprinkleName:e})}dispose(){if(!this.disposed){this.disposed=!0;for(let e of[...this.open.keys()])this.closeLocally(e);this.pendingUpdates.clear(),this.latestDesiredOpen.clear(),this.updateListeners.clear(),this.reportInstances()}}async openLocally(e,t){this.opening.add(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){this.opening.delete(e),this.pendingUpdates.delete(e),q.warn(`Failed to fetch sprinkle content from leader`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.latestDesiredOpen.has(e)){this.opening.delete(e),this.pendingUpdates.delete(e);return}let r=document.createElement(`div`);r.className=`sprinkle-panel`,r.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,r.dataset.sprinkle=e;let i=this.createBridge(e),a=new _(r,i);this.addSprinkle(e,t.title,r,this.zone,{icon:t.icon});try{await a.render(n,e)}catch(t){q.warn(`Sprinkle render failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.latestDesiredOpen.has(e)){this.updateListeners.delete(e),this.opening.delete(e),this.pendingUpdates.delete(e);try{a.dispose()}catch(t){q.warn(`Sprinkle dispose threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}r.remove();try{this.removeSprinkle(e)}catch(t){q.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}if(this.open.set(e,{renderer:a,container:r}),this.opening.delete(e),a.activateBridgeLifecycle(),this.reportInstances(),!this.open.has(e))return;let o=this.pendingUpdates.get(e);o!==void 0&&(this.pendingUpdates.delete(e),a.pushUpdate(o),this.fanOutToListeners(e,o))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){q.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}reportInstances(){try{this.sync.reportSprinkleInstances([...this.open.keys()])}catch(e){q.debug(`Failed to report sprinkle instances`,{error:e instanceof Error?e.message:String(e)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){q.warn(`Sprinkle dispose threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}t.container.remove(),this.open.delete(e);try{this.removeSprinkle(e)}catch(t){q.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}this.reportInstances()}}createBridge(e){return{name:e,lick:t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data;this.sync.sendSprinkleLick(e,{action:n,data:r})},on:(t,n)=>{if(t!==`update`)return;let r=this.updateListeners.get(e);r||(r=new Set,this.updateListeners.set(e,r)),r.add(n)},off:(t,n)=>{t===`update`&&this.updateListeners.get(e)?.delete(n)},readFile:()=>Promise.reject(Error(`readFile not supported in follower-rendered sprinkle`)),writeFile:()=>Promise.reject(Error(`writeFile not supported in follower-rendered sprinkle`)),readDir:()=>Promise.reject(Error(`readDir not supported in follower-rendered sprinkle`)),exists:()=>Promise.resolve(!1),stat:()=>Promise.reject(Error(`stat not supported in follower-rendered sprinkle`)),mkdir:()=>Promise.reject(Error(`mkdir not supported in follower-rendered sprinkle`)),rm:()=>Promise.reject(Error(`rm not supported in follower-rendered sprinkle`)),screenshot:()=>Promise.reject(Error(`screenshot not supported in follower-rendered sprinkle`)),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch(t){q.warn(`Sprinkle setState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch(t){return q.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{if(this.openPath){this.openPath(e);return}let t=/^https?:|^chrome-extension:/.test(e)?e:oe(e);window.open(t,`_blank`)},close:()=>this.closeLocally(e),minimize:()=>{},stopCone:()=>{this.sync.sendSprinkleLick(e,{action:`__stopCone__`})},attachImage:()=>{},captureScreen:()=>Promise.reject(Error(`captureScreen not supported in follower-rendered sprinkle`)),exec:Object.assign(()=>Promise.resolve({stdout:``,stderr:`exec not supported in follower-rendered sprinkle
3
- `,exitCode:127}),{spawn:()=>Promise.resolve({stdout:``,stderr:`exec.spawn not supported in follower-rendered sprinkle
4
- `,exitCode:127})}),agent:()=>Promise.resolve({stdout:`agent not supported in follower-rendered sprinkle
5
- `,exitCode:127}),fetch:()=>Promise.reject(Error(`fetch not supported in follower-rendered sprinkle`)),http:{client:()=>{let e=()=>Promise.reject(Error(`http not supported in follower-rendered sprinkle`));return{get:e,post:e,put:e,patch:e,delete:e}}},browser:{findTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),ensureTab:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),eval:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),evalAsync:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),cookie:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),localStorage:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`)),fetch:()=>Promise.reject(Error(`browser not supported in follower-rendered sprinkle`))},hid:{list:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),sendReport:()=>Promise.reject(Error(`hid not supported in follower-rendered sprinkle`)),on:()=>{},off:()=>{}},serial:{list:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`serial not supported in follower-rendered sprinkle`))},usb:{list:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),request:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),open:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`)),close:()=>Promise.reject(Error(`usb not supported in follower-rendered sprinkle`))},readFileBinary:()=>Promise.reject(Error(`readFileBinary not supported in follower-rendered sprinkle`)),writeFileBinary:()=>Promise.reject(Error(`writeFileBinary not supported in follower-rendered sprinkle`)),fetchToFile:()=>Promise.reject(Error(`fetchToFile not supported in follower-rendered sprinkle`)),_jsh:()=>Promise.reject(Error(`jsh globals not supported in follower-rendered sprinkle`)),_device:()=>Promise.reject(Error(`device ops not supported in follower-rendered sprinkle`))}}},J=t(`page-follower-tray`);function je(){f({state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null})}function Me(e,t){e.browserAPI.setTrayTargetProvider(t),e.setChatAgent(t),e.onForwardingToggle?.(!0),e.onConnectionChange?.(!0),t.requestSnapshot(e.getSelectedScoopJid?.()??void 0)}function Ne(e,t=!1){if(e!==`slicc-cherry`)return{browser:!0,...t?{oauthPopup:!0}:{}}}function Pe(e,t){let n=typeof location<`u`&&location.origin?[location.origin]:void 0,r=e.filter(e=>!s(e.url,{selfOrigins:n}));return t===`slicc-cherry`?r.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`cherry`,capabilities:{navigate:!0,network:!1,screenshot:!0}})):r.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`browser`,capabilities:{navigate:!0,network:!0,screenshot:!0}}))}function Fe(t){e(async()=>{let{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}=await import(`./theme-engine-By4GU_Wc.js`).then(e=>e.p);return{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}},__vite__mapDeps([0,1,2])).then(({importTheme:e,saveCustomTheme:n,setActiveTheme:r,clearActiveTheme:i,applyThemeOverrides:a})=>{if(!t)i();else{let i=e(t);n(i),r(i.id)}a()}).catch(e=>J.error(`Failed to apply leader theme`,{err:e}))}function Ie(e){let t=e._refreshIntervalMs??5e3,n=null,r=null,i=null,a=null,o=(t=!0)=>{i&&=(clearInterval(i),null),r&&=(r.dispose(),null),n&&=(e.onForwardingToggle?.(!1),t&&e.onConnectionChange?.(!1),e.browserAPI.setTrayTargetProvider(null),n.close(),null)};return a=ke({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep,onJoinUrlChanged:e.onJoinUrlChanged},{onConnected:a=>{o();let s=K(a.bootstrapId),c=null,l=new k(a.channel,{browserTransport:e.browserAPI.getTransport(),browserAPI:e.browserAPI,helloCapabilities:Ne(e.runtime,!!e.onOAuthPopupRequest),onOAuthPopupRequest:e.onOAuthPopupRequest,onSnapshot:e.onSnapshot,onUserMessage:e.onUserMessage,onStatus:e.onStatus,onCherrySliccEvent:e.onCherrySliccEvent,onTargetsUpdated:e.onTargetsUpdated,onScoopsList:e.onScoopsList,onModelsList:e.onModelsList,onModelState:e.onModelState,onThemeApply:Fe,onSudoApprovalRequest:e.onSudoApprovalRequest,selfRuntimeId:s,onTargetsChanged:()=>void d(),onSprinklesList:t=>{e.onSprinklesList?.(t),c?.updateAvailable(t)},onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t),onSprinkleReloaded:e=>void c?.handleSprinkleReloaded(e),onLeaderStalled:t=>e.onLeaderStalled?.(t),onDisconnect:e=>{J.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new Ae({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle,open:e.onOpen}),r=c);let u=new A(J,{failureMessage:`Follower CDP target listing failed (best-effort, throttled)`,recoveryMessage:`Follower CDP target listing recovered (stable for debounce window)`}),d=async()=>{if(e.advertisesCdpTargets===!1)return;let t;try{t=await e.browserAPI.listPages()}catch(e){u.reportFailure(e);return}if(n===l){u.reportSuccess();try{l.advertiseTargets(Pe(t,e.runtime??`slicc-standalone`),s)}catch(e){J.error(`Follower target advertisement broadcast failed (sync.advertiseTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}};n=l,Me(e,l),e.advertisesCdpTargets!==!1&&(i=setInterval(()=>void d(),t),d()),J.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{J.info(`Follower reconnecting`,{attempt:e})},onGaveUp:t=>{J.warn(`Follower reconnect gave up`,{lastError:t}),o(!1),e.onGaveUp?.(t)},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null,je()},get currentSync(){return n}}}function Le(e){let t=Y(te()),n=X(h()),r=()=>{e.toggleAttribute(`online`,t||n)},i=ee(e=>{t=Y(e),r()}),a=d(e=>{n=X(e),r()});return r(),()=>{i(),a()}}function Y(e){return e.state===`leader`}function X(e){return e.state===`connected`}var Z=t(`follower-oauth`),Re=`slicc-oauth-relay`,ze=12e4,Be=1500;function Ve(e){try{let t=new URL(e).searchParams.get(`state`);if(!t)return null;let n=JSON.parse(atob(t));return typeof n.nonce==`string`&&n.nonce?n.nonce:null}catch{return null}}function He(e,t,n,r){return new Promise(i=>{let a=[],o=!1,s=t=>{if(!o){o=!0;for(let e of a)e();try{e?.close()}catch{}i(t)}},c=(e,t)=>{if(e?.type===`oauth-callback`&&typeof e.redirectUrl==`string`){if(r&&e.nonce&&e.nonce!==r){Z.debug(`Ignoring an OAuth callback for a different flow`,{via:t});return}Z.info(`Delegated OAuth callback received`,{via:t}),s(e.redirectUrl)}};try{let e=new BroadcastChannel(Re);e.onmessage=e=>c(e.data,`broadcast`),a.push(()=>e.close())}catch(e){Z.warn(`BroadcastChannel unavailable for OAuth delivery`,{error:String(e)})}let l=e=>{e.origin===t.window.location.origin&&c(e.data,`postMessage`)};if(t.window.addEventListener(`message`,l),a.push(()=>t.window.removeEventListener(`message`,l)),e){let t=setInterval(()=>{if(!e.closed)return;clearInterval(t);let n=setTimeout(()=>s(null),Be);a.push(()=>clearTimeout(n))},500);a.push(()=>clearInterval(t))}let u=setTimeout(()=>{Z.warn(`Delegated OAuth popup timed out`),s(null)},ze);a.push(()=>clearTimeout(u));let d=()=>s(null);n.addEventListener(`abort`,d),a.push(()=>n.removeEventListener(`abort`,d)),n.aborted&&s(null)})}async function Q(e,t,n){if(t.aborted)return null;let r=n.getPermissionsSurface();if(!r)throw Error(`no permissions surface available to approve the login`);let i=await r.prompt({kinds:[`popup`],description:`Continue to sign in. A new window will open to the provider.`,grantLabel:`Continue`,requestOptions:{popup:{url:e}}});if(i.status!==`granted`)return null;let a=i.grants.find(e=>e.kind===`popup`);return He(a&&a.kind===`popup`?a.window:null,n,t,Ve(e))}var Ue=new Set([`thinking`,`tool`,`awaiting`]);function We(e){let t=e?.state??`idle`;return t===`working`?{state:t,activity:e?.phase===`tool`?`tool`:`thinking`}:t===`idle`&&e?.awaiting?{state:t,activity:`awaiting`}:{state:t}}function Ge(e){let t=e.state??`idle`,n=Ue.has(e.activity??``)?e.activity:void 0;return t===`working`?{state:t,phase:n===`tool`?`tool`:`thinking`}:t===`idle`&&n===`awaiting`?{state:t,awaiting:!0}:{state:t}}function Ke(e,t){let n=new Map(t.map(e=>[e.key,e]));return e.map(e=>{let t=n.get(e.jid),r=re(e);return{jid:e.jid,name:e.name,folder:e.folder,isCone:ne(e),parentId:e.parentJid,assistantLabel:e.assistantLabel,trigger:e.trigger,...r?{model:r}:{},...We(t),fill:typeof t?.fill==`number`?t.fill:0}})}function $(e){return e.parentId===void 0?e.isCone:e.parentId===null}function qe(e,t){return Je(e,t).map(e=>{let t=Ge(e);return{key:e.jid,type:$(e)?`cone`:`scoop`,color:v({isRoot:$(e),name:e.name}),label:$(e)?e.assistantLabel:e.name,eyes:t.state===`broken`?`dead`:t.state===`initializing`?`none`:`open`,fill:typeof e.fill==`number`?e.fill:0,...t}})}function Je(e,t){if(!e.some(e=>e.parentId!==void 0))return[...e].sort((e,t)=>Number(t.isCone)-Number(e.isCone));let n=new Set,r=(t,i)=>{for(let a of e)a.parentId===t.jid&&!n.has(a.jid)&&(n.add(a.jid),i.push(a),r(a,i));return i},i=e.filter($);for(let e of i)n.add(e.jid);let a=Ye(e,t),o=a?r(a,[]):[],s=i.flatMap(e=>r(e,[])),c=e.filter(e=>!n.has(e.jid));return[...i,...o,...s,...c]}function Ye(e,t){let n=t?e.find(e=>e.jid===t):void 0;for(let t=0;n&&t<=e.length;t++){if($(n))return n;let t=n.parentId;n=e.find(e=>e.jid===t)}}export{Ie as a,A as c,C as d,b as f,Le as i,O as l,Ke as n,K as o,Q as r,De as s,qe as t,T as u};