sliccy 5.40.0 → 5.41.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 (135) hide show
  1. package/dist/ui/assets/account-store-B6ZJJHvy.js +103 -0
  2. package/dist/ui/assets/{account-store-hXYe6llx.js → account-store-Cc0LlOh0.js} +1 -1
  3. package/dist/ui/assets/adobe-B1BRYIRE.js +1 -0
  4. package/dist/ui/assets/adobe-BN-bE_SL.js +2 -0
  5. package/dist/ui/assets/{adobe-oauth-state-DW-IwDjB.js → adobe-oauth-state-Cn7LWTPZ.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-BDP4kUxn.js → agent-message-to-chat-DpqjbP5x.js} +1 -1
  7. package/dist/ui/assets/anthropic-messages-BP_xL8Mh.js +39 -0
  8. package/dist/ui/assets/anthropic-messages-BwBPoNP0.js +39 -0
  9. package/dist/ui/assets/{apps-rQgl-cpB.js → apps-CaQ1gkO4.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-BGD2kY_f.js → azure-openai-CsaPL24q.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-Dw-PBopQ.js → azure-openai-DZpoByWz.js} +1 -1
  12. package/dist/ui/assets/azure-openai-responses-BXDkTtSH.js +1 -0
  13. package/dist/ui/assets/azure-openai-responses-De9pJjBR.js +1 -0
  14. package/dist/ui/assets/bedrock-camp-CZFsedRI.js +1 -0
  15. package/dist/ui/assets/bedrock-camp-Czep_VHL.js +1 -0
  16. package/dist/ui/assets/{cerebras-DlQY_TSV.js → cerebras-CSyaZ_JD.js} +1 -1
  17. package/dist/ui/assets/{cerebras-kLjh5Y4m.js → cerebras-D9qOK7yO.js} +1 -1
  18. package/dist/ui/assets/compat-FrhC6T45.js +2 -0
  19. package/dist/ui/assets/{connect-surface-B9fZF0bW.js → connect-surface-BX9u-44v.js} +1 -1
  20. package/dist/ui/assets/{context-compaction-DaxQExZG.js → context-compaction-LYFtS2_f.js} +1 -1
  21. package/dist/ui/assets/dip-CjRcTAWq.js +1 -0
  22. package/dist/ui/assets/{dist-C4rnF_u9.js → dist-PxfR5esr.js} +1 -1
  23. package/dist/ui/assets/{dist-SCTbiXRc.js → dist-UblS7Ad_.js} +1 -1
  24. package/dist/ui/assets/{ensure-speech-assets-C8wT1Kva.js → ensure-speech-assets-c4Yyh5Hl.js} +1 -1
  25. package/dist/ui/assets/error-body-C0EnfbdK.js +1 -0
  26. package/dist/ui/assets/esp8266-DUadcjG-.js +1 -0
  27. package/dist/ui/assets/{esptool-operations-D0PMNTBy.js → esptool-operations-C6yQIM3h.js} +2 -2
  28. package/dist/ui/assets/{fs-DJdIY3mI.js → fs-Be9_eBTx.js} +2 -2
  29. package/dist/ui/assets/{fs-C9drMRXK.js → fs-r9jcBgqR.js} +1 -1
  30. package/dist/ui/assets/{github-Dr0PBLdJ.js → github-789iE9_f.js} +2 -2
  31. package/dist/ui/assets/{github-DRGaGMIq.js → github-CBrBpJFF.js} +1 -1
  32. package/dist/ui/assets/{github-copilot-DTMNK2iN.js → github-copilot-BpWUXuYW.js} +1 -1
  33. package/dist/ui/assets/{github-copilot-B5MsC-Mh.js → github-copilot-CHXKNa6E.js} +1 -1
  34. package/dist/ui/assets/google-generative-ai-C58ldv83.js +1 -0
  35. package/dist/ui/assets/google-generative-ai-Eq6eGS5h.js +1 -0
  36. package/dist/ui/assets/{google-shared-mehyRjje.js → google-shared-DQbld86Z.js} +1 -1
  37. package/dist/ui/assets/{google-shared-0Fg2dFO2.js → google-shared-DwCjfFnw.js} +1 -1
  38. package/dist/ui/assets/google-vertex-C18Xl3dV.js +1 -0
  39. package/dist/ui/assets/google-vertex-CkkAgSFr.js +1 -0
  40. package/dist/ui/assets/{hear-CtbSNbmL.js → hear-Bag-j0V7.js} +1 -1
  41. package/dist/ui/assets/{kernel-worker-M4OSUjLe.js → kernel-worker-DzzwltLv.js} +1081 -1081
  42. package/dist/ui/assets/{kokoro-engine-CHDadqXT.js → kokoro-engine-BY5-MJ4F.js} +1 -1
  43. package/dist/ui/assets/{lick-ws-bridge-HfRG1D9a.js → lick-ws-bridge-BA7kFq6f.js} +1 -1
  44. package/dist/ui/assets/{lick-ws-bridge-BNbPpvx4.js → lick-ws-bridge-BBONAMUp.js} +1 -1
  45. package/dist/ui/assets/{local-llm-DMeLZ6lb.js → local-llm-CZI41QZ8.js} +1 -1
  46. package/dist/ui/assets/main-BBWzFPQm.js +24 -0
  47. package/dist/ui/assets/{mistral-conversations-CoropYyn.js → mistral-conversations-DKqvekSA.js} +2 -2
  48. package/dist/ui/assets/{mistral-conversations-BD1LHG49.js → mistral-conversations-szVW8BsU.js} +2 -2
  49. package/dist/ui/assets/{mount-DTRYDdBi.js → mount-CB_TFmaj.js} +1 -1
  50. package/dist/ui/assets/{mount-DKLuOjhC.js → mount-x5DyWWmZ.js} +2 -2
  51. package/dist/ui/assets/{new-session-D9geKvL4.js → new-session-bNLCxDOi.js} +2 -2
  52. package/dist/ui/assets/{oauth-bootstrap-pcB_o7_p.js → oauth-bootstrap-CbMHDv7j.js} +2 -2
  53. package/dist/ui/assets/{openai-codex-Bm1P7I1P.js → openai-codex-Bno6nph_.js} +1 -1
  54. package/dist/ui/assets/{openai-codex-B-tq0InW.js → openai-codex-DO53z_Lp.js} +1 -1
  55. package/dist/ui/assets/openai-codex-responses-BDYh8ojD.js +7 -0
  56. package/dist/ui/assets/openai-codex-responses-C7QnNmC0.js +7 -0
  57. package/dist/ui/assets/openai-completions-BnAjXzgN.js +5 -0
  58. package/dist/ui/assets/openai-completions-t-glszMQ.js +5 -0
  59. package/dist/ui/assets/openai-responses-BofM6cmY.js +1 -0
  60. package/dist/ui/assets/openai-responses-o9_kr7GP.js +1 -0
  61. package/dist/ui/assets/openai-responses-shared-79gch22X.js +10 -0
  62. package/dist/ui/assets/openai-responses-shared-DKPwc9Eh.js +10 -0
  63. package/dist/ui/assets/openrouter-images-D0dgD5eX.js +1 -0
  64. package/dist/ui/assets/openrouter-images-PT0FZmkM.js +1 -0
  65. package/dist/ui/assets/{page-follower-tray-CB-5guCo.js → page-follower-tray-BnjUXDPD.js} +1 -1
  66. package/dist/ui/assets/{panel-rpc-handlers-Bw3OaUZN.js → panel-rpc-handlers-B8qUvr10.js} +2 -2
  67. package/dist/ui/assets/{provider-CpPdfI7j.js → provider-DC8kAP4A.js} +2 -2
  68. package/dist/ui/assets/{provider-BLHkVFKJ.js → provider-mu81QxQG.js} +1 -1
  69. package/dist/ui/assets/provider-store-access-BuFw0JKG.js +1 -0
  70. package/dist/ui/assets/provider-store-access-C_kNLQdJ.js +1 -0
  71. package/dist/ui/assets/{providers-ekTC5xpd.js → providers-D8GpXQnB.js} +2 -2
  72. package/dist/ui/assets/{providers-BeDyVcSi.js → providers-Ddxs0W8T.js} +1 -1
  73. package/dist/ui/assets/{quick-llm-crEbkH6q.js → quick-llm-Quagspyf.js} +1 -1
  74. package/dist/ui/assets/session-freezer-ChBPlDLR.js +1 -0
  75. package/dist/ui/assets/{speak-BKhMmu0q.js → speak-OWEJeikh.js} +1 -1
  76. package/dist/ui/assets/{sprinkle-manager-DJEGpbEL.js → sprinkle-manager-BKxGmOIl.js} +1 -1
  77. package/dist/ui/assets/{store-SugE11kf.js → store-CHYvCaH1.js} +1 -1
  78. package/dist/ui/assets/{sudo-8FlHSwPf.js → sudo-D4b0hE0I.js} +1 -1
  79. package/dist/ui/assets/transform-messages-DwI5R8if.js +1 -0
  80. package/dist/ui/assets/{transform-messages-CQuDksPz.js → transform-messages-ZX8cvJiJ.js} +1 -1
  81. package/dist/ui/assets/{transformers-env-Dm6KYkFB.js → transformers-env-1gFISbS1.js} +1 -1
  82. package/dist/ui/assets/{tray-leader-BEuWSPjO.js → tray-leader-CwiLM5-x.js} +1 -1
  83. package/dist/ui/assets/{tray-leave-runtime-xQpmmvcJ.js → tray-leave-runtime-DQafc8zo.js} +1 -1
  84. package/dist/ui/assets/{upgrade-detection-BmINZ5Oh.js → upgrade-detection-487abG_R.js} +1 -1
  85. package/dist/ui/assets/{voice-reply-BVSzlCQd.js → voice-reply-BWuWySTa.js} +1 -1
  86. package/dist/ui/assets/{wc-attach-zuw07y30.js → wc-attach-D0-Z2ZnU.js} +2 -2
  87. package/dist/ui/assets/{wc-extension-DkFWiXyA.js → wc-extension-DPoDkrXB.js} +2 -2
  88. package/dist/ui/assets/{wc-follower-BpVE8bZM.js → wc-follower-CMZy0UC8.js} +3 -3
  89. package/dist/ui/assets/wc-live-B6XBQ3Ph.js +258 -0
  90. package/dist/ui/assets/{wc-nav-D76G_K-8.js → wc-nav-Bip6J07i.js} +2 -2
  91. package/dist/ui/assets/{wc-onboarding-C6hoCgyi.js → wc-onboarding-D0f-t12r.js} +2 -2
  92. package/dist/ui/assets/{wc-placeholder-CCAMhCT0.js → wc-placeholder-C48kBOSX.js} +3 -3
  93. package/dist/ui/assets/{wc-settings-Ds_UySgO.js → wc-settings-kViiUzrv.js} +3 -3
  94. package/dist/ui/assets/{wc-shell-ChVfRkDg.js → wc-shell-C6CXABEp.js} +3 -3
  95. package/dist/ui/assets/{wc-sprinkles-ZlT4-gI3.js → wc-sprinkles-CybsDQpb.js} +2 -2
  96. package/dist/ui/assets/wc-tray-CkppgzxX.js +2 -0
  97. package/dist/ui/assets/{whisper-engine-Dq-ISOvb.js → whisper-engine-D7GZgIFR.js} +1 -1
  98. package/dist/ui/assets/{xai-grok-BeVMpO7i.js → xai-grok-B73mxnXH.js} +1 -1
  99. package/dist/ui/assets/{xai-grok-DpCU3Vf9.js → xai-grok-Bv-1jkIm.js} +1 -1
  100. package/dist/ui/index.html +7 -7
  101. package/dist/ui/packages/webapp/index.html +7 -7
  102. package/package.json +1 -1
  103. package/dist/ui/assets/account-store-CEtbM5ni.js +0 -103
  104. package/dist/ui/assets/adobe-DGmDeCd3.js +0 -2
  105. package/dist/ui/assets/adobe-cPrvHbnb.js +0 -1
  106. package/dist/ui/assets/anthropic-messages-DP3-Xd3J.js +0 -39
  107. package/dist/ui/assets/anthropic-messages-DSmP2_-Q.js +0 -39
  108. package/dist/ui/assets/azure-openai-responses-CEEm6_Xn.js +0 -1
  109. package/dist/ui/assets/azure-openai-responses-YO8iO-Ch.js +0 -1
  110. package/dist/ui/assets/bedrock-camp-DVKDCEuf.js +0 -1
  111. package/dist/ui/assets/bedrock-camp-DbZ6Mjym.js +0 -1
  112. package/dist/ui/assets/compat-DADQxxLV.js +0 -2
  113. package/dist/ui/assets/dip-DLGbA_M8.js +0 -1
  114. package/dist/ui/assets/esp8266-BhWeHRu0.js +0 -1
  115. package/dist/ui/assets/google-generative-ai-Cz3VHJVe.js +0 -1
  116. package/dist/ui/assets/google-generative-ai-DRLjqQHr.js +0 -1
  117. package/dist/ui/assets/google-vertex-C8F4Q-3-.js +0 -1
  118. package/dist/ui/assets/google-vertex-DI_ybVGc.js +0 -1
  119. package/dist/ui/assets/main-C_E1hhV6.js +0 -24
  120. package/dist/ui/assets/openai-codex-responses-DUWTsNB0.js +0 -7
  121. package/dist/ui/assets/openai-codex-responses-DcE8b3Us.js +0 -7
  122. package/dist/ui/assets/openai-completions-2m5htnw8.js +0 -5
  123. package/dist/ui/assets/openai-completions-CPxuOo6h.js +0 -5
  124. package/dist/ui/assets/openai-responses-BIaF8Olv.js +0 -1
  125. package/dist/ui/assets/openai-responses-D3YJWUR5.js +0 -1
  126. package/dist/ui/assets/openai-responses-shared-1KvKQf-4.js +0 -12
  127. package/dist/ui/assets/openai-responses-shared-CEQMR7Nx.js +0 -12
  128. package/dist/ui/assets/openrouter-images-CHaqAs_0.js +0 -1
  129. package/dist/ui/assets/openrouter-images-CIagBWVL.js +0 -1
  130. package/dist/ui/assets/provider-store-access-BGivQpbO.js +0 -1
  131. package/dist/ui/assets/provider-store-access-C4gvtXXH.js +0 -1
  132. package/dist/ui/assets/session-freezer-2cCjCk93.js +0 -1
  133. package/dist/ui/assets/transform-messages-D7OsqBmU.js +0 -1
  134. package/dist/ui/assets/wc-live-DsVoxwUC.js +0 -258
  135. package/dist/ui/assets/wc-tray-3cfbfVP2.js +0 -2
@@ -1,258 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-picker-popup-Bs1o43Z5.js","assets/rolldown-runtime-aKtaBQYM.js","assets/logger-DDBAeTLF.js","assets/picker-popup-BvzmBsGL.js","assets/runtime-env-DH4NDw4t.js","assets/usb-picker-DJjZemi7.js","assets/serial-picker-bJGym01W.js","assets/hid-picker-Cp7Sp5N-.js","assets/usb-device-registry-k6vTKonT.js","assets/serial-port-registry-DsPZvGpT.js","assets/hid-device-registry-6w-g8ZpF.js","assets/quick-llm-crEbkH6q.js","assets/compat-DADQxxLV.js","assets/models-ByRUWfA-.js","assets/preload-helper-CZgWQFsJ.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/account-store-hXYe6llx.js","assets/context-compaction-DaxQExZG.js","assets/src-CAHYy5iz.js","assets/proxied-fetch-D_z2v-ZE.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-C29BvT4E.js","assets/secrets-bridge-client-Br74C9hX.js","assets/port-bridge-client-BnzDL5Fz.js","assets/tool-ui-DfXu6quJ.js","assets/providers-ekTC5xpd.js","assets/panel-rpc-DmJSNs0I.js","assets/bedrock-camp-DbZ6Mjym.js","assets/transform-messages-D7OsqBmU.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-C5g936Qd.js","assets/main-C_E1hhV6.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/messages-BD4p8GuF.js","assets/clipboard-DuHpK59o.js","assets/new-session-D9geKvL4.js","assets/session-store-DAM8GRJ0.js","assets/wc-shell-ChVfRkDg.js","assets/speech-C5U8h4In.js","assets/soundscape-cues-5_sT5Un6.js","assets/wc-shell-WkeczD9x.css","assets/remote-vfs-client-Z2qM01yP.js","assets/types-idfTVsM8.js","assets/writable-vfs-client-BKZGifKZ.js","assets/wc-onboarding-C6hoCgyi.js","assets/welcome-detection-CQY88hjL.js","assets/legacy-styles-CuB1P3LZ.js","assets/theme-BWT6ZRD3.js","assets/theme-engine-BEk-Upnk.js","assets/soundscape-TvriK11t.js","assets/voice-reply-BVSzlCQd.js","assets/speak-nvJ9brr6.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-BlOLPtGr.js","assets/shared-Cq5Q0noX.js","assets/mime-types-ugOWOUZ9.js","assets/wc-placeholder-CCAMhCT0.js","assets/wc-attach-zuw07y30.js","assets/wc-permissions-registry-Blyunq37.js","assets/remote-terminal-view-DddvZDMC.js","assets/picker-approval-Dc390nC7.js","assets/browser-2wdq8OwU.js","assets/terminal-session-client-CbAduNfC.js","assets/secret-env-C5wufPdt.js","assets/wc-permissions-CKtVglvh.js","assets/wc-permissions-providers-CbkqRh4J.js","assets/tray-leader-BEuWSPjO.js","assets/mount-table-store-CfQUN_2R.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-ZlT4-gI3.js","assets/wc-tray-3cfbfVP2.js","assets/remote-cdp-transport-m_T16Bkr.js","assets/synthetic-cdp-transport-DLIt5SkY.js","assets/page-follower-tray-CB-5guCo.js","assets/sprinkle-renderer-Cx1zoxx1.js","assets/wc-nav-D76G_K-8.js","assets/composer-speech-HWEPGUzG.js","assets/whisper-session-HYYDJgwO.js","assets/wc-float-label-DTyHQboN.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-CZgWQFsJ.js";import{t}from"./compat-DADQxxLV.js";import{F as n,I as r}from"./account-store-hXYe6llx.js";import{i,n as a,r as o,t as s}from"./context-compaction-DaxQExZG.js";import{t as c}from"./logger-DDBAeTLF.js";import{d as l,f as u}from"./src-CAHYy5iz.js";import{n as d}from"./runtime-env-DH4NDw4t.js";import{t as f}from"./tool-ui-DfXu6quJ.js";import{C as p,a as m,c as h,g,i as _,l as ee,m as te,u as ne}from"./main-C_E1hhV6.js";import{t as re}from"./wc-permissions-registry-Blyunq37.js";import{n as ie,r as ae}from"./hid-device-registry-6w-g8ZpF.js";import{a as oe,i as se}from"./serial-port-registry-DsPZvGpT.js";import{C as ce,D as le,E as ue,S as de,_ as fe,a as pe,g as me,h as he,k as ge,l as _e,m as ve,n as ye,o as be,s as xe,w as Se,x as Ce,y as we}from"./usb-operations-D-YdmmuG.js";import{i as Te,r as Ee}from"./usb-device-registry-k6vTKonT.js";import{t as De}from"./icons-C5g936Qd.js";import{r as Oe}from"./tray-leader-BEuWSPjO.js";import{n as ke}from"./shared-Cq5Q0noX.js";import{C as Ae,b as je,c as Me,d as v,h as Ne,i as Pe,l as Fe,m as Ie,n as Le,o as Re,p as ze,r as Be,s as Ve,t as He,u as Ue,y as We}from"./wc-shell-ChVfRkDg.js";import{i as Ge,n as Ke,r as y}from"./sprinkle-renderer-Cx1zoxx1.js";import{n as qe}from"./sprinkle-bridge-C0ycYX8f.js";import{a as Je,n as Ye,r as b}from"./theme-BWT6ZRD3.js";var Xe=d();async function x(e,t){if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);let n=await C(e,!0,t);if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);if(n===null)throw Error(`VFS read failed: ${e}`);return typeof n==`string`?n:new TextDecoder().decode(n)}var S=null;function Ze(){if(S)return S;if(typeof BroadcastChannel>`u`)return null;try{S=new BroadcastChannel(`preview-vfs`)}catch{return null}return S}async function C(e,t,n){let r=Ze();if(!r)return null;let i=`dip-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise(a=>{let o=!1,s=()=>{r.removeEventListener(`message`,c),n?.removeEventListener(`abort`,l)},c=e=>{if(!o&&!(e.data?.type!==`preview-vfs-response`||e.data.id!==i)){if(o=!0,s(),e.data.error){a(null);return}a(e.data.content??null)}},l=()=>{o||(o=!0,s(),a(null))};r.addEventListener(`message`,c),n?.addEventListener(`abort`,l),setTimeout(()=>{o||(o=!0,s(),a(null))},5e3),r.postMessage({type:`preview-vfs-read`,id:i,path:e,asText:t})})}var Qe=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],$e=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function et(e){return Qe.some(t=>e.startsWith(t))}function tt(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:$e.some(t=>e.startsWith(t))}var w=new WeakSet,nt=`,
3
- exec: Object.assign(function(cmd) {
4
- return _vfsCall('dip-exec', { cmd: cmd }, function(m) { return m.result; });
5
- }, { spawn: function(argv) {
6
- return _vfsCall('dip-jsh', { op: 'spawn', args: [argv] }, function(m) { return m.result; });
7
- } }),
8
- agent: function(prompt, opts) {
9
- return _vfsCall('dip-agent', { prompt: prompt, opts: opts || null },
10
- function(m) { return m.result; });
11
- }`,rt=`,
12
- fetch: function(url, init) {
13
- return _vfsCall('dip-jsh', { op: 'fetch', args: [url, init || null] }, function(m) { return m.result; });
14
- },
15
- http: { client: function(cfg) {
16
- function mk(method) { return function(path, opts) { return _vfsCall('dip-jsh', { op: 'http', args: [cfg, method, path, opts || null] }, function(m) { return m.result; }); }; }
17
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
18
- } },
19
- browser: {
20
- findTab: function(q) { return _vfsCall('dip-jsh', { op: 'browser', args: ['findTab', q] }, function(m) { return m.result; }); },
21
- ensureTab: function(url, options) { return _vfsCall('dip-jsh', { op: 'browser', args: ['ensureTab', url, options || {}] }, function(m) { return m.result; }); },
22
- eval: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['eval', tab, code] }, function(m) { return m.result; }); },
23
- evalAsync: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['evalAsync', tab, code] }, function(m) { return m.result; }); },
24
- cookie: function(tab, name) { return _vfsCall('dip-jsh', { op: 'browser', args: ['cookie', tab, name] }, function(m) { return m.result; }); },
25
- localStorage: function(tab, key) { return _vfsCall('dip-jsh', { op: 'browser', args: ['localStorage', tab, key] }, function(m) { return m.result; }); },
26
- fetch: function(tab, url, opts) { return _vfsCall('dip-jsh', { op: 'browser', args: ['fetch', tab, url, opts || {}] }, function(m) { return m.result; }); }
27
- },
28
- fetchToFile: function(url, path) {
29
- return _vfsCall('dip-jsh', { op: 'fetchToFile', args: [url, path] }, function(m) { return m.result; });
30
- }`,it=`,
31
- _device: function(channel, op, args) {
32
- return _vfsCall('dip-device-op',
33
- { channel: channel, op: op, args: args || [] },
34
- function(m) { return m.result; });
35
- },
36
- hid: {
37
- list: function() { return _vfsCall('dip-device-op', { channel: 'hid', op: 'list', args: [] }, function(m) { return m.result; }); },
38
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
39
- open: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
40
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
41
- sendReport: function(handle, reportId, data) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'sendReport', args: [handle, reportId, data] }, function(m) { return m.result; }).then(function() {}); },
42
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
43
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.delete(cb); }
44
- },
45
- serial: {
46
- list: function() { return _vfsCall('dip-device-op', { channel: 'serial', op: 'list', args: [] }, function(m) { return m.result; }); },
47
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
48
- open: function(handle, options) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'open', args: [handle, options] }, function(m) { return m.result; }).then(function() {}); },
49
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
50
- },
51
- usb: {
52
- list: function() { return _vfsCall('dip-device-op', { channel: 'usb', op: 'list', args: [] }, function(m) { return m.result; }); },
53
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
54
- open: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
55
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
56
- }`;function at(e){return`(function() {
57
- var _cbId = 0;
58
- var _callbacks = {};
59
- var _hidInputReportListeners = new Set();
60
-
61
- function _vfsCall(type, params, extractResult) {
62
- return new Promise(function(resolve, reject) {
63
- var id = ++_cbId;
64
- _callbacks[id] = function(msg) {
65
- if (msg.error) reject(new Error(msg.error));
66
- else resolve(extractResult ? extractResult(msg) : undefined);
67
- };
68
- var m = { type: type, id: id };
69
- if (params) { for (var k in params) m[k] = params[k]; }
70
- parent.postMessage(m, '*');
71
- });
72
- }
73
-
74
- window.slicc = window.bridge = {
75
- lick: function(event) {
76
- var action = typeof event === 'string' ? event : event.action;
77
- var data = typeof event === 'string' ? undefined : ('data' in event ? event.data : event);
78
- parent.postMessage({ type: 'dip-lick', action: action, data: data }, '*');
79
- },
80
- /* Read-only VFS access. Mirrors the sprinkle bridge so dips can
81
- check onboarding markers, profiles, etc. without a parent-side
82
- handshake. */
83
- readFile: function(path) {
84
- return _vfsCall('dip-readfile', { path: path }, function(m) { return m.content; });
85
- },
86
- exists: function(path) {
87
- return _vfsCall('dip-exists', { path: path }, function(m) { return m.exists; });
88
- },
89
- stat: function(path) {
90
- return _vfsCall('dip-stat', { path: path }, function(m) { return m.stat; });
91
- }${e?nt:``}${e?rt:``}${e?it:``}
92
- };
93
- function reportHeight() {
94
- parent.postMessage({ type: 'dip-height',
95
- height: document.documentElement.scrollHeight }, '*');
96
- }
97
- window.addEventListener('message', function(e) {
98
- if (!e.data || typeof e.data.type !== 'string') return;
99
- if (e.data.type === 'slicc-theme') {
100
- document.documentElement.classList.toggle('theme-light', !!e.data.isLight);
101
- return;
102
- }
103
- /* Pushed device events (currently 'hid:inputreport'). The host
104
- attaches the underlying listener on slicc.hid.open(handle) for
105
- this dip; teardown happens automatically on dispose. */
106
- if (e.data.type === 'dip-device-event' && e.data.channel === 'hid:inputreport') {
107
- _hidInputReportListeners.forEach(function(cb) {
108
- try { cb(e.data.payload); } catch(ex) {}
109
- });
110
- return;
111
- }
112
- /* VFS callback responses target the originating call by id. */
113
- if (e.data.id && _callbacks[e.data.id]) {
114
- var cb = _callbacks[e.data.id];
115
- delete _callbacks[e.data.id];
116
- cb(e.data);
117
- return;
118
- }
119
- /* Forward any other slicc-* message to in-page listeners via a
120
- CustomEvent. Dips can opt in with
121
- window.addEventListener('slicc-message', (ev) => ev.detail). */
122
- if (e.data.type.indexOf('slicc-') === 0) {
123
- try {
124
- document.dispatchEvent(new CustomEvent('slicc-message', { detail: e.data }));
125
- } catch (ex) {}
126
- }
127
- });
128
- window.addEventListener('load', function() {
129
- reportHeight();
130
- new ResizeObserver(reportHeight).observe(document.body);
131
- });
132
- /* Support data-action attributes (Tool UI compat) — auto-lick on click.
133
- Also intercept <a href> clicks and relay to the parent so links open
134
- despite the iframe sandbox blocking top-level navigation. */
135
- document.addEventListener('click', function(e) {
136
- var el = e.target;
137
- while (el && el !== document.body) {
138
- if (el.dataset && el.dataset.action) {
139
- var actionData = el.dataset.actionData;
140
- if (actionData) { try { actionData = JSON.parse(actionData); } catch(ex) {} }
141
- /* Picker hint (e.g. data-picker="directory") needs the parent to
142
- run File System Access API on the click activation chain.
143
- Forward as a separate message so the parent can run
144
- showDirectoryPicker, stash the handle in IDB, then dispatch
145
- the lick with the IDB key. */
146
- var picker = el.dataset.picker;
147
- if (picker) {
148
- parent.postMessage({
149
- type: 'dip-picker-action',
150
- action: el.dataset.action,
151
- data: actionData || null,
152
- picker: picker,
153
- }, '*');
154
- } else {
155
- window.slicc.lick({ action: el.dataset.action, data: actionData || null });
156
- }
157
- e.preventDefault();
158
- e.stopPropagation();
159
- return;
160
- }
161
- if (el.tagName === 'A' && el.getAttribute('href')) {
162
- var href = el.getAttribute('href');
163
- /* Allow in-iframe anchor navigation (#foo). Skip javascript: for safety. */
164
- if (href.charAt(0) === '#') return;
165
- if (/^javascript:/i.test(href)) { e.preventDefault(); return; }
166
- /* Resolve relative URLs against the iframe's base. */
167
- var resolved;
168
- try { resolved = new URL(href, document.baseURI).href; } catch(ex) { resolved = href; }
169
- parent.postMessage({ type: 'dip-open-link', url: resolved }, '*');
170
- e.preventDefault();
171
- e.stopPropagation();
172
- return;
173
- }
174
- el = el.parentElement;
175
- }
176
- });
177
- })();`}var ot=`html,body{margin:0;padding:0;overflow:hidden;background:transparent;box-sizing:border-box}
178
- *,*::before,*::after{box-sizing:inherit}
179
- /* Vertical breathing room around dip content. Horizontal padding is owned
180
- by the dip's own content (e.g. .sprinkle-action-card__body) so shtml
181
- widgets that already pad themselves don't end up double-indented. The
182
- ResizeObserver on document.body reports the post-padding scrollHeight
183
- correctly, so auto-height continues to work. The .sprinkle-inline rule
184
- (set on the iframe body) carries 2px of horizontal padding so the 1px
185
- focus ring (box-shadow:0 0 0 1px on inputs/select below) doesn't get
186
- clipped at the iframe paint boundary. */
187
- body{padding:12px 0;font-family:var(--s2-font-family, sans-serif);font-size:13px;color:var(--s2-content-default)}
188
- .sprinkle-inline{padding:var(--s2-spacing-100) 2px}
189
- .sprinkle-inline .sprinkle-btn{padding:4px 12px;font-size:12px;height:28px;box-shadow:none}
190
- .sprinkle-inline .sprinkle-btn:not([class*="sprinkle-btn--"]){background:var(--s2-bg-elevated)}
191
- .sprinkle-inline .sprinkle-card{box-shadow:none;margin:0}
192
- .sprinkle-inline .sprinkle-action-card{margin:0;width:100%}
193
- .sprinkle-inline .sprinkle-action-card .sprinkle-table{width:100%}
194
- .sprinkle-inline .sprinkle-grid{width:100%}
195
- input[type="range"]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--s2-gray-300);border-radius:2px;outline:none;cursor:default}
196
- input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
197
- input[type="range"]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
198
- input[type="text"],input[type="number"],textarea{width:100%;padding:7px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;box-sizing:border-box}
199
- input[type="text"]:focus,input[type="number"]:focus,textarea:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
200
- input[type="text"]::placeholder,textarea::placeholder{color:var(--s2-content-disabled,var(--s2-gray-400))}
201
- select{padding:6px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;cursor:default}
202
- select:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
203
- button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:4px 12px;border:1px solid var(--s2-border-default,var(--s2-gray-300));border-radius:9999px;background:transparent;color:var(--s2-content-default);font-size:12px;font-weight:700;font-family:var(--s2-font-family,sans-serif);cursor:default;transition:background 130ms ease}
204
- button:hover{background:color-mix(in srgb,var(--s2-content-default) 6%,transparent)}
205
- button:disabled{opacity:0.4;pointer-events:none}
206
- canvas{display:block;width:100%;border-radius:8px}
207
- mark{background:color-mix(in srgb,var(--s2-accent) 25%,transparent);color:inherit;border-radius:2px;padding:0 2px}
208
- .c-purple{background:#3C3489;color:#EEEDFE}.c-teal{background:#085041;color:#E1F5EE}
209
- .c-coral{background:#712B13;color:#FAECE7}.c-pink{background:#72243E;color:#FBEAF0}
210
- .c-gray{background:#444441;color:#F1EFE8}.c-blue{background:#0C447C;color:#E6F1FB}
211
- .c-amber{background:#633806;color:#FAEEDA}.c-red{background:#791F1F;color:#FCEBEB}
212
- .c-green{background:#27500A;color:#EAF3DE}`,st=`(function(){
213
- window.addEventListener('message', function(e){
214
- if (!e.data || e.data.type !== 'dip-draft-update') return;
215
- var content = typeof e.data.content === 'string' ? e.data.content : '';
216
- document.body.innerHTML = content;
217
- if (window.lucide && typeof window.lucide.createIcons === 'function') {
218
- try { window.lucide.createIcons(); } catch(ex){}
219
- }
220
- });
221
- })();`;function ct(e,t,n=!1){let r=Ke(),i=Ye()?` class="theme-light"`:``,a=t||e.includes(`<slicc-editor`),o=t||e.includes(`<slicc-diff`),s=t?`<script>${st}<\/script>`:``;return`<!DOCTYPE html>
222
- <html${i}><head>
223
- <meta charset="utf-8">
224
- <style>${r}</style>
225
- <style>${ot}</style>
226
- <script>${at(n&&!t)}<\/script>
227
- ${s}
228
- ${a?`<script src="/slicc-editor.js"><\/script>`:``}
229
- ${o?`<script src="/slicc-diff.js"><\/script>`:``}
230
- <script src="/lucide-icons.js"><\/script>
231
- </head>
232
- <body class="sprinkle-inline">${e}</body></html>`}var T=new Set;function lt(e){if(typeof e?.type!=`string`||e.type.indexOf(`slicc-`)!==0)throw Error(`broadcastToDips: payload.type must start with 'slicc-'`);for(let t of T)try{t.postMessage(e,`*`)}catch{}}var E;function ut(e){E=e}function D(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function dt(e,t){let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];return t?.model&&i.push(`--model`,D(t.model)),t?.thinking&&i.push(`--thinking`,D(t.thinking)),t?.readOnly&&i.push(`--read-only`,D(t.readOnly)),i.push(D(n),D(r),D(e)),i.join(` `)}async function O(e){if(!E)return{stdout:``,stderr:`exec: shell bridge not available
233
- `,exitCode:127};try{return await E(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function ft(e,t){let n=await O(dt(e,t));return{stdout:n.stdout||n.stderr,exitCode:n.exitCode}}async function pt(e,t){let n=await qe(O,e,t);if(e===`fetch`){let e=n,t=atob(e.bodyBase64),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return{...e,body:new TextDecoder(`utf-8`).decode(r)}}return n}var k=new WeakMap;function mt(e,t){try{e.postMessage({type:`dip-device-event`,channel:`hid:inputreport`,payload:t},`*`)}catch{}}async function ht(e,t){let n=k.get(e);if(n||(n=new Map,k.set(e,n)),n.has(t))return;let r=await de(ae(),t,n=>{let r=n.bytes instanceof Uint8Array?n.bytes:new Uint8Array(n.bytes);mt(e,{handle:t,reportId:n.reportId,data:r})});n.set(t,r)}async function gt(e,t){let n=k.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&k.delete(e)}function _t(e){let t=k.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}k.delete(e)}}function vt(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}async function yt(e,t,n){let r=ae();switch(t){case`list`:{let e=ie();if(!e)throw Error(`WebHID is unavailable in this browser`);return me(r,e)}case`request`:{let e=ie();if(!e)throw Error(`WebHID is unavailable in this browser`);return we(r,e,n[0]??[])}case`info`:return he(r,n[0]);case`open`:{let t=n[0];return await fe(r,t),await ht(e,t),{ok:!0}}case`close`:{let t=n[0];return await gt(e,t),await ve(r,t),{ok:!0}}case`sendReport`:{let e=n[0],t=n[1],i=vt(n[2]);return await Ce(r,e,t,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)),{ok:!0}}default:throw Error(`hid: unknown op '${t}'`)}}async function bt(e,t){let n=oe();switch(e){case`list`:{let e=se();if(!e)throw Error(`Web Serial is unavailable in this browser`);return ue(n,e)}case`request`:{let e=se();if(!e)throw Error(`Web Serial is unavailable in this browser`);return ge(n,e,t[0]??[])}case`info`:return Se(n,t[0]);case`open`:{let e=t[0];return await le(n,e,t[1]??{baudRate:9600}),{ok:!0}}case`close`:return await ce(n,t[0]),{ok:!0};default:throw Error(`serial: unknown op '${e}'`)}}async function xt(e,t){let n=Te();switch(e){case`list`:{let e=Ee();if(!e)throw Error(`WebUSB is unavailable in this browser`);return be(n,e)}case`request`:{let e=Ee();if(!e)throw Error(`WebUSB is unavailable in this browser`);return _e(n,e,t[0]??[])}case`info`:return pe(n,t[0]);case`open`:return await xe(n,t[0]),{ok:!0};case`close`:return await ye(n,t[0]),{ok:!0};default:throw Error(`usb: unknown op '${e}'`)}}async function St(e,t,n,r){switch(t){case`hid`:return yt(e,n,r);case`serial`:return bt(n,r);case`usb`:return xt(n,r);default:throw Error(`unknown device channel '${t}'`)}}async function A(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!w.has(e))return n({type:`dip-device-op-response`,error:`device access not allowed for this dip`}),!0;let r=t.channel;if(r!==`hid`&&r!==`serial`&&r!==`usb`)return n({type:`dip-device-op-response`,error:`unknown device channel '${r}'`}),!0;try{n({type:`dip-device-op-response`,result:await St(e,r,typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-device-op-response`,error:e instanceof Error?e.message:String(e)})}return!0}async function Ct(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!w.has(e))return n({type:`${t.type}-response`,error:`exec not allowed for this dip`}),!0;if(t.type===`dip-exec`)return n({type:`dip-exec-response`,result:await O(typeof t.cmd==`string`?t.cmd:``)}),!0;if(t.type===`dip-agent`)return n({type:`dip-agent-response`,result:await ft(typeof t.prompt==`string`?t.prompt:``,t.opts)}),!0;if(t.type===`dip-jsh`){try{n({type:`dip-jsh-response`,result:await pt(typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-jsh-response`,error:e instanceof Error?e.message:String(e)})}return!0}return!1}function j(e,t,n,r=!1){let i=ct(t,!1,r);if(Xe)return Nt(e,i,n,r);let a=document.createElement(`iframe`);a.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),a.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,a.srcdoc=i,e.appendChild(a),a.contentWindow&&(b(a.contentWindow),T.add(a.contentWindow),r&&w.add(a.contentWindow)),a.addEventListener(`load`,()=>{b(a.contentWindow),a.contentWindow&&(T.add(a.contentWindow),r&&w.add(a.contentWindow)),y()&&Ge(a)},{once:!0});let o=e=>{if(e.source!==a.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?a.style.height=t.height+`px`:t.type===`dip-open-link`?Tt(t.url):t.type===`dip-picker-action`?M(t,n):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?wt(a.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?Ct(a.contentWindow,t):t.type===`dip-device-op`&&A(a.contentWindow,t))};window.addEventListener(`message`,o);let s=null;if(y()&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(a),Ge(a,()=>{e=!0,t.observe(a)})}});s=t,t.observe(a)}return{dispose(){s?.disconnect(),window.removeEventListener(`message`,o),Je(a.contentWindow),a.contentWindow&&(T.delete(a.contentWindow),w.delete(a.contentWindow),_t(a.contentWindow)),a.remove()}}}async function wt(e,t){if(!e||typeof t.id!=`number`)return!1;let n=typeof t.path==`string`?t.path:``,r=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!w.has(e))return r({type:`${t.type}-response`,error:`VFS access not allowed for this dip`}),!0;if(!tt(n))return r({type:`${t.type}-response`,error:`VFS path not allowed: ${n}`}),!0;if(t.type===`dip-readfile`){let e=await C(n,!0);return e===null?(r({type:`dip-readfile-response`,error:`Read failed`}),!0):(r({type:`dip-readfile-response`,content:typeof e==`string`?e:new TextDecoder().decode(e)}),!0)}if(t.type===`dip-exists`)return r({type:`dip-exists-response`,exists:await C(n,!0)!==null}),!0;if(t.type===`dip-stat`){let e=await C(n,!1);return e===null?(r({type:`dip-stat-response`,error:`Stat failed`}),!0):(r({type:`dip-stat-response`,stat:{isFile:!0,isDirectory:!1,size:typeof e==`string`?e.length:e.byteLength,mtimeMs:0}}),!0)}return!1}function Tt(e){if(!(typeof e!=`string`||!e)&&/^(https?:|mailto:)/i.test(e))try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function Et(e,t){let n=[],r=e.querySelectorAll(`pre > code.language-shtml`);for(let e of r){let r=e.parentElement,i=e.textContent??``,a=document.createElement(`div`);a.className=`msg__dip`,r.replaceWith(a),n.push(j(a,i,t,!1))}let i=e.querySelectorAll(`img[src$=".shtml"]`);for(let e of i){let r=e.getAttribute(`src`);if(!r)continue;let i=document.createElement(`div`);i.className=`msg__dip`,e.alt&&i.setAttribute(`title`,e.alt),e.replaceWith(i);let a=new AbortController,o=null,s=!1;n.push({dispose(){s=!0,a.abort(),o&&=(o.dispose(),null)}});let c=r.startsWith(`/`),l=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,u=c?`/preview${r}`:r,d=async()=>{if(c&&!l)return x(r,a.signal);let e;try{e=await fetch(u,{signal:a.signal})}catch(e){if(e?.name===`AbortError`)throw e;if(c)return x(r,a.signal);throw e}if(e.ok)return e.text();if(c)return x(r,a.signal);throw Error(`HTTP ${e.status}`)},f=c&&et(r);d().then(e=>{s||!i.isConnected||(o=j(i,e,t,f))}).catch(e=>{s||e?.name===`AbortError`||(i.textContent=`Failed to load dip: ${r}`,i.style.cssText=`padding:8px;font-size:12px;color:var(--s2-negative);font-family:var(--s2-font-mono)`)})}return n}function Dt(e){for(let t of e)try{t.dispose()}catch{}e.length=0}async function M(e,t){let n=e.data??null,r=Array.isArray(n?.filters)?n.filters:[];if(Xe){await Ot(e.picker,e.action,r,t);return}switch(e.picker){case`directory`:await kt(e.action,t);return;case`usb-device`:await At(e.action,r,t);return;case`serial-port`:await jt(e.action,r,t);return;case`hid-device`:await Mt(e.action,r,t);return;default:t(e.action,e.data);return}}async function Ot(t,n,r,i){try{switch(t){case`directory`:{let{openMountPickerPopup:t}=await e(async()=>{let{openMountPickerPopup:e}=await import(`./mount-picker-popup-Bs1o43Z5.js`).then(e=>e.n);return{openMountPickerPopup:e}},__vite__mapDeps([0,1,2,3,4])),r=await t();r.cancelled?i(n,{cancelled:!0}):r.error?i(n,{error:r.error}):r.idbKey?i(n,{handleInIdb:!0,idbKey:r.idbKey,dirName:r.dirName??``}):i(n,{error:`mount picker returned no handle key`});return}case`usb-device`:{let{openUsbPickerPopup:t}=await e(async()=>{let{openUsbPickerPopup:e}=await import(`./usb-picker-DJjZemi7.js`).then(e=>e.t);return{openUsbPickerPopup:e}},__vite__mapDeps([5,1,3,4])),a=await t(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`serial-port`:{let{openSerialPickerPopup:t}=await e(async()=>{let{openSerialPickerPopup:e}=await import(`./serial-picker-bJGym01W.js`).then(e=>e.t);return{openSerialPickerPopup:e}},__vite__mapDeps([6,1,3,4])),a=await t(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`hid-device`:{let{openHidPickerPopup:t}=await e(async()=>{let{openHidPickerPopup:e}=await import(`./hid-picker-Cp7Sp5N-.js`).then(e=>e.t);return{openHidPickerPopup:e}},__vite__mapDeps([7,1,3,4])),a=await t(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}default:i(n,{error:`unknown picker kind: ${t??`(none)`}`});return}}catch(e){i(n,{error:e instanceof Error?e.message:String(e)})}}async function N(e,t){let n=re();if(!n)return null;let r={current:null},i=t=>{let n=t.detail;n.kind===e&&(r.current=n)};n.addEventListener(`slicc-permission-deny`,i);try{let i=await n.request(e,t);if(i)return{ok:!0,grant:i};let a=r.current;return{ok:!1,reason:a?.reason??`error`,...a?.message?{message:a.message}:{}}}finally{n.removeEventListener(`slicc-permission-deny`,i)}}function P(e,t,n,r){if(t.reason===`cancelled`){r(e,{cancelled:!0});return}if(t.reason===`unavailable`){r(e,{error:n});return}r(e,{error:t.message??`unknown error`})}async function kt(t,n){let r=await N(`filesystem`);if(!r){n(t,{error:`File System Access API not available`});return}if(!r.ok){P(t,r,`File System Access API not available`,n);return}let i=r.grant.handle,a=`pendingMount:dip-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;try{let{storePendingHandle:t}=await e(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup-Bs1o43Z5.js`).then(e=>e.n);return{storePendingHandle:e}},__vite__mapDeps([0,1,2,3,4]));await t(a,i)}catch(e){n(t,{error:`failed to store directory handle: ${e instanceof Error?e.message:String(e)}`});return}n(t,{handleInIdb:!0,idbKey:a,dirName:i.name})}async function At(t,n,r){let i=await N(`usb`,{filters:n});if(!i){r(t,{error:`WebUSB is not available`});return}if(!i.ok){P(t,i,`WebUSB is not available`,r);return}let a=i.grant,{getSharedUsbRegistry:o,deviceToInfo:s}=await e(async()=>{let{getSharedUsbRegistry:e,deviceToInfo:t}=await import(`./usb-device-registry-k6vTKonT.js`).then(e=>e.a);return{getSharedUsbRegistry:e,deviceToInfo:t}},__vite__mapDeps([8,1])),c=o().register(a.device);r(t,{granted:!0,handle:c,info:s(c,a.device)})}async function jt(t,n,r){let i=await N(`serial`,n.length?{filters:n}:void 0);if(!i){r(t,{error:`Web Serial is not available`});return}if(!i.ok){P(t,i,`Web Serial is not available`,r);return}let a=i.grant,o=await e(()=>import(`./serial-port-registry-DsPZvGpT.js`).then(e=>e.o),__vite__mapDeps([9,1])),s=o.getSharedSerialRegistry(),c=s.register(a.port),l=s.get(c);r(t,{granted:!0,handle:c,info:l?o.deviceToInfo(c,l):{handle:c}})}async function Mt(t,n,r){let i=await N(`hid`,{filters:n});if(!i){r(t,{error:`WebHID is not available`});return}if(!i.ok){P(t,i,`WebHID is not available`,r);return}let a=i.grant,{getSharedHidRegistry:o,hidDeviceToInfo:s}=await e(async()=>{let{getSharedHidRegistry:e,hidDeviceToInfo:t}=await import(`./hid-device-registry-6w-g8ZpF.js`).then(e=>e.a);return{getSharedHidRegistry:e,hidDeviceToInfo:t}},__vite__mapDeps([10,1])),c=o(),l=a.devices.map(e=>s(c.register(e),e)),u=l[0];r(t,{granted:!0,handle:u.handle,info:u,devices:l})}function Nt(e,t,n,r=!1){let i=document.createElement(`iframe`);i.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),i.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,e.appendChild(i);let a=e=>{if(e.source!==i.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?i.style.height=t.height+`px`:t.type===`dip-open-link`?Tt(t.url):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?wt(i.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?Ct(i.contentWindow,t):t.type===`dip-device-op`?A(i.contentWindow,t):t.type===`dip-picker-action`&&M(t,n))};return window.addEventListener(`message`,a),i.addEventListener(`load`,()=>{b(i.contentWindow),i.contentWindow&&(T.add(i.contentWindow),r&&w.add(i.contentWindow)),i.contentWindow?.postMessage({type:`dip-render`,srcdoc:t,isLight:Ye()},`*`)},{once:!0}),{dispose(){window.removeEventListener(`message`,a),Je(i.contentWindow),i.contentWindow&&(T.delete(i.contentWindow),w.delete(i.contentWindow),_t(i.contentWindow)),i.remove()}}}var F=c(`cone-memory-budget`),Pt=4e3,Ft=2e3,It=1.25,I=`/workspace/CLAUDE.md`,Lt=`/sessions/index.json`,Rt=4096,zt=/^## Auto-extracted/m,Bt=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
234
-
235
- Rules:
236
- - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
237
- - One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
238
- - Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
239
- - Be terse. Aim well under the original size.
240
- - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function Vt(e){return Math.round(Pt+Ft*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function Ht(e){let t=zt.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function Ut(e){try{let t=await e.readFile(Lt,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function Wt(e){let{header:n,autoExtracted:r}=Ht(e.currentContent);if(!r.trim())return e.currentContent;let i=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
241
-
242
- <auto-extracted>
243
- ${r}
244
- </auto-extracted>`,a={role:`user`,content:[{type:`text`,text:Bt}],timestamp:Date.now()},o=await t(e.model,{systemPrompt:i,messages:[a]},{apiKey:e.apiKey,maxTokens:Rt,headers:e.headers,signal:e.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
245
- `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${n}${n.length===0||n.endsWith(`
246
- `)?``:`
247
- `}${s}\n`}async function Gt(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(I,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await Ut(e.vfs),r=Vt(n),i=r*It;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};F.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await Wt({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(I,n),F.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return F.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}function L(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?Ae(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${i(e)}`).join(`
248
- `)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var R=c(`session-freezer`),Kt=4,qt=2048,Jt=40,z=`/sessions`,B=`/sessions/index.json`;async function Yt(e){let t=await tn(e.sessionStore);if(!t||t.messages.length<Kt)return R.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=nn(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await Qt(e,n,i);let a=await $t(e,n,i)||ln(t.messages);return await en(e,t,a,r,i?await Xt(e,a):void 0)}async function Xt(t,n){try{return Zt(await(t.pickIcon??(await e(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-crEbkH6q.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([11,1,12,13,14,15,16,17,18,2,19,20,4,21,22,23,24,25,26,27,28,29,30,31]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){R.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function Zt(e){if(e)return De(e)?e:void 0}async function Qt(e,t,n){if(!n){R.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await o({messages:t,instruction:s,model:e.model,apiKey:e.apiKey,maxTokens:qt,headers:e.headers})}catch(e){R.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){R.info(`Memory extraction returned no durable memories`);return}try{await fn(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),R.info(`Memory extracted and appended on new-session`)}catch(e){R.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function $t(e,t,n){if(!n)return``;try{return cn(await o({messages:t,instruction:a,model:e.model,apiKey:e.apiKey,maxTokens:Jt,headers:e.headers}))}catch(e){return R.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function en(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${dn()}.md`:`${a.replace(/[:.]/g,`-`)}-${un(n)}.md`,s={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:t.messages},c=sn(s),l={filename:o,title:n,frozenAt:a,messageCount:t.messages.length,...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{}};try{return await V(e.vfs,z),await e.vfs.writeFile(`${z}/${o}`,c),await pn(e.vfs,l),await e.vfs.flush(),R.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...l,archive:s}}catch(e){return R.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function tn(e){try{return await e.load(`session-cone`)}catch(e){return R.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function nn(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var rn=`<!-- slicc:session-data
249
- `,an=`
250
- -->`;function on(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function sn(e){let t=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n---\n\n`,n=`${rn}${JSON.stringify(on(e.messages)).replace(/-->/g,`-- >`)}${an}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+L(e.messages)}function cn(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function ln(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function un(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function dn(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function V(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function fn(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch{await V(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
251
- `)?``:`
252
- `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await Gt({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){R.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function pn(e,t){let n=[];try{let t=await e.readFile(B,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(B,JSON.stringify(r,null,2))}async function mn(e){try{let t=await e.readFile(B,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function H(e){return`${z}/${e.filename}`}async function hn(e,t,n){if(!t.pendingEnrichment)return null;let r=await _n(e,t);if(r===null)return null;let i=vn(t,r);if(i===null)return null;let a=await yn(t,i,n);if(a===null)return null;let o=await gn(n,a.newTitle);return await bn(e,t,a.bullets,n),await xn(e,t,r,a.newTitle,o)}async function gn(e,t){if(e.pickIcon)try{return await Zt(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){R.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function _n(e,t){try{let n=await e.readFile(H(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?R.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):R.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function vn(e,t){let n;try{n=U(t).messages}catch(t){return R.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(R.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):nn(n)}async function yn(e,t,n){let r=``;try{r=await o({messages:t,instruction:s,model:n.model,apiKey:n.apiKey,maxTokens:qt,headers:n.headers})}catch(t){return R.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let i=``;try{i=cn(await o({messages:t,instruction:a,model:n.model,apiKey:n.apiKey,maxTokens:Jt,headers:n.headers}))}catch(t){return R.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return i?{bullets:r,newTitle:i}:(R.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function bn(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await fn(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){R.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function xn(e,t,n,r,i){let a=H(t),o=Sn(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${un(r)}.md`,c=`${z}/${s}`;try{await V(e,z),await e.writeFile(c,o)}catch(e){return R.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let l=i??t.icon,u={filename:s,title:r,frozenAt:t.frozenAt,messageCount:t.messageCount,...l?{icon:l}:{}};try{await wn(e,t.filename,u)}catch(e){return R.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(c!==a)try{await e.rm(a)}catch(e){R.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return R.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function Sn(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var Cn=Promise.resolve();async function wn(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(B,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(B,JSON.stringify(a,null,2))},i=Cn.then(r,r);return Cn=i.then(()=>void 0,()=>void 0),i}function U(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:Tn(t)}}function Tn(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}var En=`__slicc_binary__`,Dn=`b64`;function On(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[En]===Dn&&typeof t.data==`string`}function W(e){if(e instanceof Uint8Array)return{[En]:Dn,data:u(e)};if(Array.isArray(e))return e.map(W);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=W(r);return t}return e}function G(e){if(On(e))return l(e.data);if(Array.isArray(e))return e.map(G);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=G(r);return t}return e}var kn=c(`panel-transport`);function An(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function jn(){return{onMessage:e=>{let t=(t,n,r)=>(An(t)&&e(G(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=W(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{kn.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var K=c(`offscreen-client`),Mn=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=new Map;pendingChatMessagesRequests=new Map;pendingStatsRequests=new Map;transport;_selectedScoopJid=null;get selectedScoopJid(){return this._selectedScoopJid}scoopSelectedListeners=new Set;onScoopSelected(e){return this.scoopSelectedListeners.add(e),()=>{this.scoopSelectedListeners.delete(e)}}setSelectedScoopJid(e){if(this._selectedScoopJid!==e&&(this._selectedScoopJid=e,e!==null))for(let t of this.scoopSelectedListeners)try{t(e)}catch(e){K.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??jn(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){this.send({type:`delete-queued-message`,scoopJid:e,messageId:t})}updateModel(){this.send({type:`refresh-model`})}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t){this.send({type:`set-thinking-level`,scoopJid:e,level:t})}async clearAllMessages(){let e=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingClearAcks.set(e,t)});this.send({type:`clear-chat`,requestId:e}),await Promise.race([t,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(e)}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}async getScoopTranscript(e){let t=`tr-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingTranscriptRequests.set(t,e)});this.send({type:`request-scoop-transcript`,requestId:t,scoopJid:e});let r=await Promise.race([n,new Promise(e=>setTimeout(()=>e(``),5e3))]);return this.pendingTranscriptRequests.delete(t),r}async getMessagesForScoop(e){let t=`cm-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingChatMessagesRequests.set(t,e)});this.send({type:`request-scoop-chat-messages`,requestId:t,scoopJid:e});let r=!1,i=await Promise.race([n,new Promise(e=>setTimeout(()=>{r=!0,e([])},5e3))]);return this.pendingChatMessagesRequests.delete(t),r&&K.warn(`getMessagesForScoop timed out`,{scoopJid:e}),i}async getSessionStats(){let e=`st-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingStatsRequests.set(e,t)});this.send({type:`request-session-stats`,requestId:e});let n=await Promise.race([t,new Promise(e=>setTimeout(()=>e(null),5e3))]);return this.pendingStatsRequests.delete(e),n}requestState(){this.send({type:`request-state`});let e=0;this.stateRetryTimer=setInterval(()=>{if(e++,this.ready||e>20){this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null);return}K.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?(K.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):K.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`compaction-state`:this.callbacks.onCompactionStateChange?.(e.scoopJid,e.state);break;case`clear-chat-ack`:{let t=this.pendingClearAcks.get(e.requestId);t&&(this.pendingClearAcks.delete(e.requestId),t());break}case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`message-updated`:this.handleMessageUpdated(e);break;case`scoop-messages-replaced`:{let t=e;this.resyncStreamPointer(t.scoopJid,t.messages),this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`scoop-transcript`:{let t=e,n=this.pendingTranscriptRequests.get(t.requestId);n&&(this.pendingTranscriptRequests.delete(t.requestId),n(t.transcript));break}case`scoop-chat-messages`:{let t=e,n=this.pendingChatMessagesRequests.get(t.requestId);n&&(this.pendingChatMessagesRequests.delete(t.requestId),n(t.messages));break}case`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,fills:t.fills,models:t.models??[],scoops:t.scoops??[]}));break}case`tray-runtime-status`:{let t=e;Nn(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){K.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}resyncStreamPointer(e,t){let n;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.role===`assistant`&&r.isStreaming){n=r.id;break}}n===void 0?this.currentMessageId.delete(e):this.currentMessageId.set(e,n)}handleAgentEvent(e){switch(e.eventType){case`text_delta`:case`tool_start`:case`tool_ui`:case`turn_end`:this.callbacks.onScoopActivity?.(e.scoopJid);break}if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${q()}`,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}-${q()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${q()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${q()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){K.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&Nn(e.trayRuntimeStatus.leader,e.trayRuntimeStatus.follower);let t=!this.ready;t&&(this.ready=!0,this.stateRetryTimer&&=(clearInterval(this.stateRetryTimer),null)),this.callbacks.onScoopListUpdate(e.scoops),t&&this.callbacks.onReady?.()}handleError(e){e.scoopJid===this.selectedScoopJid&&this.emitToUI({type:`error`,error:e.error})}handleIncomingMessage(e){this.callbacks.onIncomingMessage(e.scoopJid,e.message)}handleMessageUpdated(e){this.callbacks.onMessageUpdate?.(e.scoopJid,{messageId:e.messageId,lickId:e.lickId,lickState:e.lickState})}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){K.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 q(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Nn(e,t){Oe({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),te({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 J(e){return!e.includes(`\0`)}function Pn(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(!J(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(!J(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),!J(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),!J(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(J(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 Fn(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 In(e){let t=Fn(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Ln(e,t){let n=Fn(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 Rn(){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 zn(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new Mn(r,In(o.port1)),l=Ln(s.port1,n),u=null,d=new Promise((e,t)=>{let n=null,r=null,a=()=>{n!==null&&(clearTimeout(n),n=null)};u=()=>{r!==null&&(o.port1.removeEventListener(`message`,r),r=null),a()},r=t=>{t.data?.type===`kernel-worker-ready`&&(u?.(),e())},o.port1.addEventListener(`message`,r),a(),n=setTimeout(()=>{u?.(),t(Error(`Kernel worker did not signal ready within ${i}ms`))},i)}),f={type:`kernel-worker-init`,kernelPort:o.port2,cdpPort:s.port2,localStorageSeed:a,instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl??null,bridgeToken:e.bridgeToken??null,localLickWsUrl:e.localLickWsUrl??null,extensionDelegateId:e.extensionDelegateId??null};t.postMessage(f,[o.port2,s.port2]);let p=!1;return{client:c,ready:d,dispose(){if(!p){p=!0,u?.(),l();try{t.postMessage({type:`kernel-worker-shutdown`})}catch{}t.terminate(),o.port1.close(),s.port1.close()}}}}function Bn(e){return zn({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-M4OSUjLe.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Rn(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId})}var Vn=`<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 Hn(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 Un(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(Vn));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{await t(Hn(e.getMessages())??L([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=L([...e.getMessages()]);n&&(await t(n),a())})()}),n.append(r),n}function Y(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function Wn(e){try{let t=new DOMParser().parseFromString(e,`text/html`).querySelector(`.sprinkle-action-card__header`);if(t){t.querySelector(`.sprinkle-badge`)?.remove();let e=t.textContent?.trim();if(e)return e}}catch{}return`Approval requested`}function Gn(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function Kn(e){return`
253
- <div class="sprinkle-action-card">
254
- <div class="sprinkle-action-card__header">${Gn(Wn(e))} <span class="sprinkle-badge sprinkle-badge--informative">pending</span></div>
255
- <div class="sprinkle-action-card__body">Waiting for approval on the leader&hellip;</div>
256
- </div>
257
- `}function qn(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var Jn=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g=[];#_=[];#v=new Map;#y=null;#b=null;#x=``;#S=!1;#C=!1;#w=`thinking`;#T=0;#E=null;#D=new Set;#O=new Map;constructor(e){this.#e=e.thread,this.#t=e.agent,this.#n=e.onProcessingChange,this.#r=e.onBusyPhaseChange,this.#i=e.onMessageRendered,this.#a=e.onMessageDisposed,this.#o=e.onTurnComplete,this.#s=e.resolveTelemetryContext,this.#c=e.onQueuedChange,this.#l=e.onQueuedCancel,this.#u=e.onToolUiAction,this.#d=e.readOnlyToolUi??!1,this.#f=e.agent.onEvent(e=>this.#I(e)),this.#h=e=>this.#Y(e),this.#e.addEventListener(`slicc-error-retry`,this.#h)}dispose(){this.#f(),this.#e.removeEventListener(`slicc-error-retry`,this.#h);for(let e of[...this.#O.keys()])this.#J(e)}get processing(){return this.#C}getMessages(){return this.#g.map(e=>({...e}))}setAgent(e){this.#f(),this.#t=e,this.#f=e.onEvent(e=>this.#I(e))}setOnLocalUserMessage(e){this.#p=e}setOnLocalProcessingChange(e){this.#m=e}addUserMessage(e,t){this.#Q({id:Y(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#_.map(qn)}removeQueuedMessage(e){let t=this.#_.filter(t=>t.id!==e);t.length!==this.#_.length&&(this.#_=t,this.#A())}#k(){if(this.#_.length===0)return;let e=this.#_;this.#_=[];for(let t of e)this.#Q(t);this.#A()}#A(){this.#c?.(this.#_.map(qn))}addAssistantMessage(e){this.#Q({id:Y(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#v.keys())this.#a?.(e);for(let e of[...this.#O.keys()])this.#J(e);if(this.#_.length>0){if(this.#l)for(let e of this.#_)try{this.#l(e.id)}catch(e){console.error(`onQueuedCancel hook threw`,e)}this.#_=[],this.#A()}this.#g=Re(e);let t=[...this.#g].reverse().find(e=>e.isStreaming);this.#y=t?.id??null,t&&(this.#b=t.id),this.#x=``,this.#S=!1,this.#v.clear();let n=[],r=``;for(let e of this.#g){let t=new Date(e.timestamp).toDateString();t!==r&&(n.push(Ve(e.timestamp)),r=t);let i=this.#Z(e);this.#v.set(e.id,i),n.push(...i)}let i=this.#e;typeof i.replaceContent==`function`?i.replaceContent(...n):i.replaceChildren(...n),this.#ne();for(let e of this.#g)e.isStreaming||this.#i?.(e,this.#v.get(e.id)??[]);this.#F(),this.#ie()}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#j(r):r,a={id:Y(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#C?(this.#_.push(a),this.#A()):this.#Q(a),this.#t.sendMessage(i,a.id,a.attachments),this.#M();try{let e=n?.dictation?Ae(i):i;this.#p?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#j(e){return We(e,je())}#M(){if(this.#s)try{let e=this.#s();if(!e)return;_(e.scoopName,e.model)}catch{}}addLickMessage(e,t,n,r,i){let a=this.#g[this.#g.length-1];if(!(i||a?.lickId)&&a&&a.source===`lick`&&a.channel===n){a.lickParts=[...a.lickParts??[a.content],t],a.lickCount=a.lickParts.length,a.content+=`\n\n${t}`,this.#$(a);return}this.#Q({id:e,role:`user`,content:t,timestamp:r,source:`lick`,channel:n,lickId:i,lickState:i?`pending`:void 0,queued:this.#C?!0:void 0})}updateLickState(e,t){let n=this.#g.find(t=>t.lickId===e);n&&(n.lickState=t,this.#$(n))}setProcessing(e){if(this.#C!==e){this.#C=e,e&&(this.#b=null),e&&(this.#T=0,this.#N(`thinking`)),e&&this.#k(),e||this.#F(),this.#n?.(e);try{this.#m?.(e)}catch(e){console.error(`onLocalProcessingChange hook threw`,e)}e||this.#P()}}#N(e){this.#w!==e&&(this.#w=e,this.#r?.(e))}#P(){let e=this.#b;if(this.#b=null,!this.#o)return;let t=e?this.#X(e):null;this.#o(t?{...t}:null)}#F(){let e=this.#g[this.#g.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#E?.remove();return}this.#E??=Un({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#E)}#I(e){switch(e.type){case`message_start`:this.#L(e.messageId);break;case`content_delta`:this.#R(e.messageId,e.text);break;case`content_done`:this.#B(e.messageId);break;case`tool_use_start`:this.#V(e.messageId,e.toolName,e.toolInput);break;case`tool_result`:this.#H(e.messageId,e.toolName,e.result,e.isError);break;case`tool_ui`:this.#K(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#q(e.requestId);break;case`turn_end`:this.#U(e.messageId);break;case`error`:this.#W(e.error);break;case`screenshot`:case`terminal_output`:break;default:break}}#L(e){this.setProcessing(!0),this.#y=e,this.#b=e,this.#Q({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#R(e,t){this.#X(e)&&(this.#x+=t,!this.#S&&(this.#S=!0,requestAnimationFrame(()=>this.#z(e))))}#z(e){if(this.#S=!1,!this.#x)return;let t=this.#X(e);t&&(t.content+=this.#x,this.#x=``,this.#$(t))}#B(e){let t=this.#X(e);t&&(this.#x&&this.#y===e&&(t.content+=this.#x),this.#x=``,this.#S=!1,t.isStreaming=!1,this.#$(t))}#V(e,t,n){let r=this.#X(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:Y(),name:t,input:n}),this.#T+=1,this.#N(`tool`),this.#$(r))}#H(e,t,n,r){let i=this.#X(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#T=Math.max(0,this.#T-1),this.#T===0&&this.#N(`thinking`),this.#$(i))}#U(e){let t=this.#X(e);t?.isStreaming&&(t.isStreaming=!1,this.#$(t)),this.#y=null,this.setProcessing(!1)}#W(e){this.setProcessing(!1),this.#Q({id:Y(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#G(e)}#G(e){try{if(ne(e)||ee(e)||h(e))return;m(`error-card`,e)}catch{}}#K(e,t,n){this.#J(t);let r=document.createElement(`div`);if(r.className=`msg__dip`,r.setAttribute(`data-tool-ui-request`,t),(this.#e.inner??this.#e).append(r),this.#d){let e=j(r,Kn(n),()=>{},!1);this.#O.set(t,{instance:e,container:r});return}let i=j(r,n,(e,n)=>{this.#u?.(t,e,n)},!1);this.#O.set(t,{instance:i,container:r}),this.#u?.(t,f,void 0)}#q(e){this.#J(e)}#J(e){let t=this.#O.get(e);if(t){this.#O.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#Y(e){if(this.#C)return;let t=e.detail?.messageId??null,n=this.#g.length;if(t){let e=this.#g.findIndex(e=>e.id===t);e>=0&&(n=e)}let r=n>0?this.#g[n-1]:void 0;if(r&&r.source===`lick`&&!r.queued){this.#t.sendMessage(r.content,Y(),r.attachments);return}let i;for(let e=n-1;e>=0;e--){let t=this.#g[e];if(t.role===`user`&&t.source!==`lick`&&t.source!==`delegation`&&!t.queued){i=t;break}}i&&this.#t.sendMessage(i.content,Y(),i.attachments)}#X(e){return this.#g.find(t=>t.id===e)}#Z(e){try{return Me(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]}}#Q(e){this.#te(),this.#g.push(e);let t=this.#Z(e);this.#v.set(e.id,t),this.#e.append(...t),this.#ne(),e.isStreaming||this.#i?.(e,t),e.role===`user`?this.#ie():this.#ae()}#$(e){this.#te(),this.#a?.(e.id);let t=this.#v.get(e.id)??[],n=this.#Z(e),r=t[0]??null,i=r?.parentNode;if(i){for(let e of n)i.insertBefore(e,r);for(let e of t)e.remove()}else this.#e.append(...n);this.#v.set(e.id,n),this.#ne(),e.isStreaming||this.#i?.(e,n),this.#ae()}#ee(){return this.#e.inner??this.#e}#te(){Ue(this.#ee(),this.#D)}#ne(){Fe(this.#ee(),{openClusterAnchors:this.#D,toolCallLookup:(e,t)=>this.#re(e,t)})}#re(e,t){return this.#g.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#ie(){this.#e.scrollTop=this.#e.scrollHeight}#ae(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#ie()}};function Yn(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function Xn(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Yn(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Zn(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 X(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(B,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 X(e){let t=await Qn(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function Qn(e){let t;try{let n=await e.readFile(B,{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 $n(e){let t;try{t=(await e.readDir(`/sessions`)).filter(e=>e.type===`file`&&e.name.endsWith(`.md`)).map(e=>e.name)}catch{return[]}let n=[];for(let r of t)try{let t=await e.readFile(`/sessions/${r}`,{encoding:`utf-8`}),i=(typeof t==`string`?t:new TextDecoder().decode(t)).slice(0,2e3),a=/^title:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??r,o=/^frozenAt:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??new Date(0).toISOString(),s=Number(/^messageCount:\s*(\d+)\s*$/m.exec(i)?.[1]??0);n.push({filename:r,title:a,frozenAt:o,messageCount:s,...r.startsWith(`pending-`)?{pendingEnrichment:!0}:{}})}catch{}return n.sort((e,t)=>t.frozenAt.localeCompare(e.frozenAt)),n}function er(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(Xn))}async function tr(e,t){let n=await e.readFile(H(t),{encoding:`utf-8`}),r=U(typeof n==`string`?n:new TextDecoder().decode(n));return{title:r.title||t.title,messages:r.messages}}var nr={".md":`text/markdown`,".txt":`text/plain`,".ts":`text/typescript`,".js":`text/javascript`,".json":`application/json`,".html":`text/html`,".css":`text/css`,".svg":`image/svg+xml`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".webp":`image/webp`,".mp3":`audio/mpeg`,".wav":`audio/wav`,".ogg":`audio/ogg`,".m4a":`audio/mp4`,".mp4":`video/mp4`,".webm":`video/webm`,".mov":`video/quicktime`};function rr(e){return nr[e.slice(e.lastIndexOf(`.`)).toLowerCase()]||`application/octet-stream`}function ir(e){let t=e.slice(e.lastIndexOf(`.`)).toLowerCase();return t===`.html`||t===`.svg`}async function ar(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 Z(e,t){try{return await e.stat(t),!0}catch{return!1}}function or(e){let{fileTree:t,openFs:n,openWriter:r,insertReference:i,toPreviewUrl:a,log:o}=e;t.addEventListener(`file-preview`,async e=>{let{path:t}=e.detail;try{let e=await n(),r=rr(t),i;if(r.startsWith(`text/`)||r===`application/json`)i=await e.readFile(t,{encoding:`utf-8`});else{let n=await e.readFile(t,{encoding:`binary`}),r=new Uint8Array(n.length);r.set(n),i=r.buffer}ze.open({path:t,content:i,mimeType:r})}catch(e){o.error(`File preview failed`,e)}}),t.addEventListener(`file-reference`,e=>{let{path:t}=e.detail;i(t)}),t.addEventListener(`file-download`,async e=>{let{path:t}=e.detail;try{let e=await(await n()).readFile(t,{encoding:`binary`}),r=new Uint8Array(e.length);r.set(e);let i=t.split(`/`).pop()||`download`,a=rr(t),o=new Blob([r],{type:a}),s=URL.createObjectURL(o),c=document.createElement(`a`);c.href=s,c.download=i,c.click(),URL.revokeObjectURL(s)}catch(e){o.error(`File download failed`,e)}}),t.addEventListener(`file-overflow`,e=>{let{path:n,anchor:r}=e.detail,i=[{id:`rename`,label:`Rename`},{id:`duplicate`,label:`Duplicate`},{id:`copy-path`,label:`Copy path`},{id:`open-browser`,label:`Open in browser`,visible:ir(n)},{id:`delete`,label:`Delete`,destructive:!0}];Ie.show({anchor:r,items:i,context:{path:n},dispatchTarget:t})}),t.addEventListener(`overflow-action`,async e=>{let{action:t,context:n}=e.detail,{path:i}=n;try{switch(t){case`copy-path`:await navigator.clipboard.writeText(i);break;case`open-browser`:window.open(a(i),`_blank`);break;case`duplicate`:{let e=i.lastIndexOf(`.`),t=e>0?`${i.slice(0,e)}_copy${i.slice(e)}`:`${i}_copy`,n=await r();if(await Z(n,t)&&!confirm(`${t} already exists. Overwrite?`))break;await ar(n,i,t);break}case`delete`:confirm(`Delete ${i}?`)&&await(await r()).rm(i);break;case`rename`:{let e=i.split(`/`).pop()??``,t=prompt(`Rename ${i} to:`,e)?.trim();if(!t||t===e||t.includes(`/`))break;let n=`${i.slice(0,i.length-e.length)}${t}`,a=await r();if(await Z(a,n)&&!confirm(`${n} already exists. Overwrite?`))break;await ar(a,i,n),await a.rm(i);break}}}catch(e){o.error(`Overflow action "${t}" failed`,e)}})}var sr=`/workspace/CLAUDE.md`,Q=64;function cr(e){if(e.length<=Q)return{title:e,summary:``};let t=e.lastIndexOf(` `,Q),n=t>Q/2?t:Q;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function lr(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(cr(e)),n=null};for(let t of e.split(`
258
- `)){let e=/^\s*[-*]\s+(.*)$/.exec(t);e?(r(),n=[e[1]]):n&&t.trim()&&!t.startsWith(`#`)?n.push(t.trim()):(t.startsWith(`#`)||!t.trim())&&r()}return r(),t.length===0&&e.trim()&&t.push(cr(e.trim())),t}async function ur(e){let t=``;try{let n=await e.readFile(sr,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return lr(t).map(e=>{let t=document.createElement(`slicc-memrow`);return t.setAttribute(`title`,e.title),e.summary&&t.setAttribute(`summary`,e.summary),t.setAttribute(`tag`,`project`),t})}async function dr(e){let t=e.getScoops(),[n,r,i,a,o,s]=await Promise.all([e.getCronTasks().catch(()=>[]),e.getWebhooks().catch(()=>[]),e.getMounts().catch(()=>[]),e.getMcpServers().catch(()=>({})),e.getSessionStats().catch(()=>null),e.getProcesses().catch(()=>[])]),c=e.getOAuthProviders(),l=Object.entries(a);return[{id:`cost`,label:`Cost`,count:o?.models.length??0,meta:o?`$${o.totalCost.toFixed(2)}`:void 0,rows:o?.models.map(e=>({name:e.model,meta:`$${e.cost.toFixed(4)}`}))??[]},{id:`scoops`,label:`Scoops`,count:t.length,rows:t.map(t=>{let n=t.isCone?`${t.name||`sliccy`} (cone)`:t.name,r=e.isProcessing(t.jid);return{name:n,meta:r?`processing`:`idle`,active:r}})},{id:`processes`,label:`Processes`,count:s.length,rows:s.map(e=>{let t=e.argv.length>40?e.argv.slice(0,37)+`...`:e.argv,n=e.status===`running`;return{name:`${e.pid}`,meta:t,active:n}})},{id:`cron`,label:`Cron Tasks`,count:n.length,rows:n.map(e=>({name:e.name,meta:e.cron,active:e.status===`active`}))},{id:`webhooks`,label:`Webhooks`,count:r.length,rows:r.map(e=>({name:e.name,meta:e.scoop?`→ ${e.scoop}`:`→ cone`}))},{id:`workflows`,label:`Workflows`,count:0,rows:[]},{id:`mounts`,label:`Mounts`,count:i.length,rows:i.map(e=>({name:e.targetPath,meta:e.descriptor.kind}))},{id:`mcp`,label:`MCP Servers`,count:l.length,rows:l.map(([e,t])=>{let n=t.tools?.length??0;return{name:e,meta:`${n} tool${n===1?``:`s`}`}})},{id:`oauth`,label:`OAuth`,count:c.length,rows:c.map(e=>({name:e,meta:``}))}]}var fr=[`/workspace`,`/shared`],pr=3,mr=200;async function hr(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,mr),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<pr?await hr(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 gr(e){let t=[];for(let n of fr)t.push({kind:`dir`,id:n,label:n.slice(1),open:!0,children:await hr(e,n,1)});return t}function _r(e){let t=!1,n=null,r=null,i=!1,a=!1,o=()=>{e.openFs().then(async t=>{e.fileTree.items=await gr(t),a||(a=!0,or({fileTree:e.fileTree,openFs:e.openFs,openWriter:e.openWriter,insertReference:e.insertReference,toPreviewUrl:ke,log:e.log}))}).catch(t=>e.log.error(`WC file tree refresh failed`,t))},s=()=>{i=!1,n!=null&&(clearInterval(n),n=null),r!=null&&(clearInterval(r),r=null)};return a=>{if(a===`files`){s(),i=!0,e.onKernelReady(()=>{i&&(i=!1,o(),n=setInterval(o,3e3))});return}if(s(),a===`memory`){e.openFs().then(async t=>{e.memoryHost.replaceChildren(...await ur(t))}).catch(t=>e.log.error(`WC memory refresh failed`,t));return}if(a===`monitor`){r!=null&&clearInterval(r);let t=()=>{(async()=>{try{let t=await dr(e.getMonitorDeps());e.monitor.sections=t}catch(t){e.log.error(`WC monitor refresh failed`,t)}})()};e.monitor.addEventListener(`slicc-monitor-refresh`,t),t(),r=setInterval(t,5e3);return}a===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))}}var vr={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},yr={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function br(e){return e?vr[e]:void 0}function xr(e){return(e&&yr[e])??`off`}function Sr(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`?!0:p(t.localStorage)}function $(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function Cr(e,t,n){return[...e].sort((e,t)=>Number(t.isCone)-Number(e.isCone)).map(e=>{let r=n?.get(e.jid);return{key:e.jid,type:e.isCone?`cone`:`scoop`,color:v(e),label:e.isCone?`sliccy`:e.name,eyes:$(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function wr(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=Cr(t.getScoops(),e.statuses,e.fills))},n=()=>(e.refs.thread.getAttribute(`context`)??``).startsWith(`freezer:`),r=()=>{if(e.getSelected()||n())return;let t=e.getClient()?.getScoops()??[],r=e.pendingUrlContext;if(r?.startsWith(`freezer:`))return;if(r?.startsWith(`scoop:`)){let n=r.slice(6),i=t.find(e=>!e.isCone&&e.name===n);if(i){e.pendingUrlContext=null,e.selectScoop(i);return}}let i=t.find(e=>e.isCone);i&&(e.pendingUrlContext=null,e.selectScoop(i))};return{onStatusChange:(n,r)=>{let i=e.statuses.get(n);e.statuses.set(n,r),$(i)!==$(r)&&t(),e.getSelected()?.jid===n&&e.getController()?.setProcessing(r===`processing`)},onScoopCreated:r=>{t(),!e.getSelected()&&!n()&&!e.pendingUrlContext&&e.selectScoop(r)},onScoopListUpdate:()=>{t(),r()},onScoopActivity:t=>{e.refs.switcher.setAttribute(`attention`,t)},onIncomingMessage:(t,n)=>{e.refs.switcher.setAttribute(`attention`,t),e.lastActivity.set(t,String(n.content??``).slice(0,600)),e.getSelected()?.jid===t&&n.channel!==`web`&&Ne(n.channel)&&e.getController()?.addLickMessage(n.id,n.content,n.channel,new Date(n.timestamp).getTime(),n.lickId)},onMessageUpdate:(t,n)=>{e.getSelected()?.jid===t&&n.lickId&&n.lickState&&e.getController()?.updateLickState(n.lickId,n.lickState)},onScoopMessagesReplaced:(t,n)=>{e.getSelected()?.jid===t&&e.getController()?.loadMessages(n)},onReady:()=>{t(),r(),e.notifyReady?.()}}}async function Tr(t,n){t.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),t.thread.setAttribute(`accent`,v(n)),Le(t,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:v(n)}),t.switcher.setAttribute(`active`,n.jid);let r=localStorage.getItem(`slicc_locked_effort_level`);t.composerMeta.setAttribute(`thinking`,xr(r??n.config?.thinkingLevel));try{let{resolveCurrentModel:i,resolveModelById:a}=await e(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./main-C_E1hhV6.js`).then(e=>e.t);return{resolveCurrentModel:e,resolveModelById:t}},__vite__mapDeps([32,1,33,14,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35])),o=n.config?.modelId,s=o?a(o):i();t.composerMeta.setAttribute(`model`,s.name??s.id),t.composerMeta.toggleAttribute(`no-thinking`,s.reasoning!==!0||!!r)}catch{}}function Er(t){let{refs:n,openVfs:r,client:i,getController:a,getSelected:o,selectScoop:s,clearSelection:c,log:l}=t,u=[],d=0,f=!1,p=()=>{let t=++d;r().then(async({reader:r,writer:i})=>{let a=await X(r);if(a===null){if((await Qn(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await $n(r),a.length===0))return;await i.writeFile(B,JSON.stringify(a,null,2))}t===d&&(u=a,er(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,e(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-crEbkH6q.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([11,1,12,13,14,15,16,17,18,2,19,20,4,21,22,23,24,25,26,27,28,29,30,31])).then(({pickLucideIcon:e})=>Zn({reader:r,writer:i,freezer:n.freezer,entries:a,pickIcon:t=>e({subject:t})})).catch(e=>l.warn(`WC freezer icon enrichment failed`,e)).finally(()=>{f=!1})))}).catch(e=>l.error(`WC freezer refresh failed`,e))},m=!1,h=()=>n.freezer.querySelector(`slicc-freezer-new`),g=t=>{m||(m=!0,h()?.setAttribute(`busy`,``),(async()=>{try{if(t!==`erase`){let{writer:n}=await r(),{runNewSessionFreeze:i,runNewSessionFreezeQuick:a}=await e(async()=>{let{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}=await import(`./new-session-D9geKvL4.js`);return{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}},__vite__mapDeps([36,14,17,1,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,32,33,34,35,30,37]));t===`save`?await i({vfs:n,onProgress:e=>{let t=h();t&&(e===null?t.removeAttribute(`progress`):t.setAttribute(`progress`,String(e)))},onBackgroundEnriched:()=>p()}):await a({vfs:n})}await i.clearAllMessages(),a()?.loadMessages([]),e(async()=>{let{resetDictationPriming:e}=await import(`./wc-shell-ChVfRkDg.js`).then(e=>e.x);return{resetDictationPriming:e}},__vite__mapDeps([38,1,14,32,33,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35,31,39,40,41])).then(({resetDictationPriming:e})=>e()).catch(()=>void 0),p();let n=i.getScoops().find(e=>e.isCone);n&&s(n)}catch(e){l.error(`WC new session failed`,e)}finally{m=!1;let e=h();e?.removeAttribute(`busy`),e?.removeAttribute(`progress`)}})())};for(let e of[`save`,`skip`,`erase`])n.freezer.addEventListener(`new-chat-${e}`,()=>g(e));let _=async e=>{try{let{reader:t}=await r(),i=u.find(t=>t.filename===e);i||=(await X(t)??[]).find(t=>t.filename===e);let{messages:o}=await tr(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});a()?.loadMessages(o),n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),n.thread.setAttribute(`accent`,He),Le(n,{kind:`freezer`}),n.inputCard.setAttribute(`disabled`,``),n.switcher.removeAttribute(`active`),c()}catch(e){if(l.error(`WC thaw failed`,e),!o()){let e=i.getScoops().find(e=>e.isCone);e&&s(e)}}};return n.freezer.addEventListener(`freezer-card-select`,e=>{let t=e.detail?.slug;t&&_(t)}),{refreshFreezer:p,openFrozen:_}}function Dr(e,t){let n=null,r=Be(e,{messages:[],scoops:[],floatLabel:t,placeholder:`Ask sliccy, or describe a change…`,onSurfaceActivate:e=>n?.(e),urlState:!0}),i=null,a=null,o=null,s=!1,c=new Set,l=e=>{if(o=e,!a)return;let t=a.selectedScoopJid;if(t&&t!==e.jid){let e=i?.getQueuedMessages()??[];for(let n of e)a.deleteQueuedMessage(t,n.id).catch(()=>void 0)}a.setSelectedScoopJid(e.jid),r.inputCard.removeAttribute(`disabled`),Tr(r,e),a.requestScoopMessages(e.jid),i?.setProcessing(a.isProcessing(e.jid)),r.switcher.hasAttribute(`attention`)||r.switcher.setAttribute(`attention`,e.jid)};return{refs:r,wiring:{refs:r,statuses:new Map,fills:new Map,lastActivity:new Map,pendingUrlContext:r.thread.urlContext??null,getController:()=>i,getClient:()=>a,getSelected:()=>o,selectScoop:l,notifyReady:()=>{s=!0;for(let e of c)e()}},setClient:e=>{a=e},selectScoop:l,getSelected:()=>o,clearSelection:()=>{o=null},getController:()=>i,setController:e=>{i=e},setActivateSurface:e=>{n=e;let t=r.workbenchBody.getAttribute(`active`);t&&r.shell.hasAttribute(`open`)&&(s?e(t):c.add(()=>e(t)))},onClientReady:e=>{c.add(e),s&&e()}}}function Or(t){let n=null;return()=>(n??=(async()=>{let[{createRemoteVfsClient:n},{createRemoteWritableVfsClient:r}]=await Promise.all([e(()=>import(`./remote-vfs-client-Z2qM01yP.js`),__vite__mapDeps([42,43])),e(()=>import(`./writable-vfs-client-BKZGifKZ.js`),__vite__mapDeps([44,43]))]);return{reader:n({transport:t.getTransport()}),writer:r({transport:t.getTransport()})}})(),n)}function kr(t,n,r,i,a){t.onClientReady(()=>{i.intercept||e(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-C6hoCgyi.js`);return{wireWcOnboarding:e}},__vite__mapDeps([45,14,32,1,33,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35,46])).then(({wireWcOnboarding:e})=>e({client:n,getController:()=>t.getController(),openVfs:r,log:a})).then(e=>{i.intercept=e.interceptWelcomeLick}).catch(e=>a.error(`WC onboarding wiring failed`,e))})}function Ar(t,i,a,o,s){let c=new Map;e(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-CuB1P3LZ.js`);return{loadDipStyles:e}},__vite__mapDeps([47,14])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),e(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-BWT6ZRD3.js`).then(e=>e.i);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([48,1,49,2])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0),e(async()=>{let{applyThemeOverrides:e}=await import(`./theme-engine-BEk-Upnk.js`).then(e=>e.p);return{applyThemeOverrides:e}},__vite__mapDeps([49,1,2])).then(({applyThemeOverrides:e})=>e()).catch(()=>void 0);let l=i.createAgentHandle();l.onEvent(t=>{t.type!==`tool_use_start`&&t.type!==`tool_result`||e(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([50,2,40])).then(({playCue:e})=>e(t.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0)});let u=new Jn({thread:t.thread,agent:l,resolveTelemetryContext:()=>{let e=a();if(!e)return null;let t=e.isCone?`cone`:e.name;try{let i=e.config?.modelId;return{scoopName:t,model:(i?r(i):n()).id}}catch{return{scoopName:t,model:``}}},onTurnComplete:t=>{e(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-BVSzlCQd.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([51,2,38,1,14,32,33,17,12,13,15,16,18,19,20,4,21,22,23,24,25,26,27,28,29,34,35,31,39,40,41,52,53,54,55,56])).then(async({consumeVoiceSubmission:n,speakReplyMarkdown:r})=>{if(!n())return;let{endVoiceTurn:i,setTtsActive:a}=await e(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([50,2,40]));try{if(t?.content){a(!0);try{await r(t.content)}finally{a(!1)}}}finally{i()}}).catch(()=>void 0)},onProcessingChange:e=>{t.frame.toggleAttribute(`data-processing`,e),t.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,e),e||o?.()},onBusyPhaseChange:e=>{t.inputCard.querySelector(`slicc-send-button`)?.setAttribute(`phase`,e)},onMessageDisposed:e=>{let t=c.get(e);t&&(Dt(t),c.delete(e))},onMessageRendered:(e,t)=>{let n=t[0];n&&c.set(e.id,Et(n,(e,t)=>{let n={type:`sprinkle`,sprinkleName:`inline`,timestamp:new Date().toISOString(),body:{action:e,data:t}};s?.intercept?.(n)||i.sendSprinkleLick(`inline`,{action:e,data:t})}))},onQueuedChange:e=>{t.queuedStack.setMessages(e)},onToolUiAction:(e,t,n)=>{i.sendToolUiAction(e,t,n)},onQueuedCancel:e=>{let t=i.selectedScoopJid;t&&i.deleteQueuedMessage(t,e).catch(()=>void 0)}});return t.queuedStack.addEventListener(`slicc-queued-remove`,e=>{let t=e.detail?.id;if(!t)return;u.removeQueuedMessage(t);let n=i.selectedScoopJid;n&&i.deleteQueuedMessage(n,t).catch(()=>void 0)}),{controller:u,agentHandle:l}}function jr(t){let{boot:n,client:r,agentHandle:i,openReader:a,log:o}=t,{refs:s}=n;e(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-CCAMhCT0.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([57,14,38,1,32,33,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35,31,39,40,41])).then(({createPlaceholderRefresher:e})=>{t.setRefreshPlaceholder(e({inputCard:s.inputCard,getMessages:()=>n.getController()?.getMessages()??[],defaultPlaceholder:s.inputCard.getAttribute(`placeholder`)??`Ask sliccy, or describe a change…`}))}),(async()=>{try{if(Sr(n.wiring.pendingUrlContext,window))return;let{SessionStore:r}=await e(async()=>{let{SessionStore:e}=await import(`./session-store-DAM8GRJ0.js`);return{SessionStore:e}},[]),i=new r;await i.init();let a=await i.load(`session-cone`);a&&a.messages.length>0&&!n.getSelected()&&(n.getController()?.loadMessages(a.messages),t.triggerPlaceholder())}catch(e){o.warn(`WC session hydration failed`,e)}})();let c=null;return e(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-zuw07y30.js`);return{wireWcAttach:e}},__vite__mapDeps([58,14,19,59,1])).then(({wireWcAttach:n})=>{c=n({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:a,openWriter:t.openWriter,listConversations:async()=>{let{readSessionsIndex:t}=await e(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-2cCjCk93.js`);return{readSessionsIndex:e}},[]);return(await t(await a())).map(e=>({id:e.filename,label:e.title,sub:`${e.messageCount} turns`}))},log:o})}).catch(e=>o.error(`WC add-menu wiring failed`,e)),s.inputCard.addEventListener(`submit`,t=>{let r=Pe(t);if(!r)return;let i=t.detail?.source===`dictation`;i&&(e(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-BVSzlCQd.js`);return{markVoiceSubmission:e}},__vite__mapDeps([51,2,38,1,14,32,33,17,12,13,15,16,18,19,20,4,21,22,23,24,25,26,27,28,29,34,35,31,39,40,41,52,53,54,55,56])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),e(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([50,2,40])).then(({beginVoiceTurn:e,playCue:t})=>{e(),t(`sent`)}).catch(()=>void 0)),n.getController()?.sendUserMessage(r,c?.take(),{dictation:i}),s.inputCard.clear?.();let a=n.getSelected()?.jid;a&&(s.switcher.setAttribute(`attention`,a),n.wiring.lastActivity.set(a,r.slice(0,600)))}),s.inputCard.addEventListener(`stop`,()=>{n.getController()?.processing&&i.stop()}),e(async()=>{let{wireWcHistoryNav:e}=await import(`./wc-history-nav-C5w8ianG.js`);return{wireWcHistoryNav:e}},[]).then(({wireWcHistoryNav:e})=>e({thread:s.thread,inputCard:s.inputCard})).catch(e=>o.error(`WC history nav wiring failed`,e)),s.composerMeta.addEventListener(`thinking-change`,e=>{if(localStorage.getItem(`slicc_locked_effort_level`))return;let t=e.detail?.thinking,i=br(t),a=n.getSelected();a&&i&&r.setScoopThinkingLevel(a.jid,i)}),{getAttachStage:()=>c}}function Mr(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(!n)return;e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2));let r=e.refs.floatbar;n.models&&(r.costModels=n.models),n.scoops&&(r.costScoops=n.scoops),e.fills.clear();for(let t of n.fills)e.fills.set(t.jid,t.fill);e.refs.switcher.scoops=Cr(t.getScoops(),e.statuses,e.fills)})};return setInterval(n,15e3),n}function Nr(t,n,r){let i=n.standalone;i&&e(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DunWpcR7.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:e})=>e({refs:t.refs,browser:i.browser,log:r})).catch(e=>r.error(`WC browser overlay wiring failed`,e))}function Pr(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)}),Ir({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function Fr(e){return()=>{e.triggerPlaceholder(),e.refreshStats();let t=e.boot.getSelected()?.jid;if(!t)return;e.boot.refs.switcher.setAttribute(`attention`,t);let n=e.boot.getController()?.getMessages().filter(e=>e.role===`assistant`).at(-1);n&&e.boot.wiring.lastActivity.set(t,String(n.content??``).slice(0,600))}}function Ir(t){let n=new Map,r=new Set;t.switcher.addEventListener(`pointerover`,i=>{let a=i.target?.closest?.(`slicc-pill.scoop`);if(!a||!t.switcher.contains(a))return;let o=a.dataset.k??``,s=t.getScoops().find(e=>e.jid===o);if(!s)return;let c=t.lastActivity.get(o)??``,l=n.get(o);if(l&&l.activity===c){a.title=l.tip;return}a.title||=s.isCone?`sliccy`:s.name,!(!c||r.has(o))&&(r.add(o),(async()=>{try{let r=await(t.labelFn??(await e(async()=>{let{quickLabel:e}=await import(`./quick-llm-crEbkH6q.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([11,1,12,13,14,15,16,17,18,2,19,20,4,21,22,23,24,25,26,27,28,29,30,31]))).quickLabel)({system:`One line for a hover tooltip: at most 14 words, present tense, no quotes, no trailing period.`,prompt:`Summarize what this agent has been doing.\nAgent: ${s.isCone?`sliccy (the main agent)`:s.name}\nMost recent activity:\n${c}`,maxTokens:40});r&&(n.set(o,{activity:c,tip:r}),a.title=r)}finally{r.delete(o)}})())})}async function Lr(t,n,r){let{RemoteTerminalView:i}=await e(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DddvZDMC.js`);return{RemoteTerminalView:e}},__vite__mapDeps([60,1,14,25,2,59,61,0,3,4,10,62,9,6,7,8,5,63])),{fetchSecretEnvVars:a}=await e(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-C5wufPdt.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([64,2,20,1,14,19,4,21,22,23,24])),o=await a(),s=new i({client:n,cwd:`/`,env:Object.keys(o).length>0?o:void 0});await new Promise(e=>t.onClientReady(e)),await s.mount(r),globalThis.__slicc_terminal_view=s,window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function Rr(e,t,n){let r=r=>{if(r.startsWith(`freezer:`)){n(r.slice(8));return}let i=t.getScoops(),a=r.startsWith(`scoop:`)?i.find(e=>!e.isCone&&e.name===r.slice(6)):i.find(e=>e.isCone);a&&a.jid!==e.getSelected()?.jid&&e.selectScoop(a)};e.refs.thread.addEventListener(`slicc-url-context`,e=>{let t=e.detail?.context;t&&r(t)});let i=e.wiring.pendingUrlContext;i?.startsWith(`freezer:`)&&e.onClientReady(()=>{e.wiring.pendingUrlContext===i&&(e.wiring.pendingUrlContext=null,r(i))})}function zr(t,n,r,i){e(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-CKtVglvh.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([65,14,2,59,1])).then(async({installLeaderPermissionsSurface:i,installMountPendingConsumer:a})=>{let o=r.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await e(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-CbkqRh4J.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([66,14,4]));i({runtimeMode:o,providers:await s(c()||o===`extension`||o===`extension-detached`)}),a({runShell:Br(t,n)})}).catch(e=>i.warn(`WC permissions surface wiring failed`,e))}function Br(t,n){let r=null,i=()=>(r||=(async()=>{await new Promise(e=>t.onClientReady(e));let{TerminalSessionClient:r}=await e(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-CbAduNfC.js`);return{TerminalSessionClient:e}},[]),i=new r({client:n,sid:`mount-drop-${Date.now()}`});return await i.open({cwd:`/workspace`}),i})().catch(e=>{throw r=null,e}),r);return async e=>(await i()).exec(e)}function Vr(e,t){return(n,r,i)=>{let a=e.getAttachStage();if(!a){t.warn(`sprinkle attachImage dropped: composer stage not ready yet`);return}let o=n.match(/^data:(image\/[^;]+);base64,([A-Za-z0-9+/=]+)$/),s=o?o[2]:n,c=o?o[1]:i??`image/png`,l=c.split(`/`)[1]?.replace(`jpeg`,`jpg`).replace(`svg+xml`,`svg`)??`png`,u=r??`annotation-${Date.now()}.${l}`;a.add({id:`att-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,name:u,mimeType:c,size:Math.floor(s.length*3/4),kind:`image`,data:s})}}function Hr(t,n,r,i={}){e(async()=>{let{initTimestampPreference:e}=await import(`./wc-shell-ChVfRkDg.js`).then(e=>e.v);return{initTimestampPreference:e}},__vite__mapDeps([38,1,14,32,33,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35,31,39,40,41])).then(({initTimestampPreference:e})=>e()).catch(()=>void 0);let{refs:a}=t;t.setClient(n);let o=null,s=Mr(t.wiring,n),c=()=>o?.(),l={intercept:null},{controller:u,agentHandle:d}=Ar(a,n,()=>t.getSelected(),Fr({boot:t,triggerPlaceholder:c,refreshStats:s}),l);t.setController(u),t.onClientReady(s);let f=Or(n),p=async()=>(await f()).reader;i.standalone?.runtimeMode!==`cherry`&&i.standalone?.runtimeMode!==`hosted-leader`&&kr(t,n,f,l,r);let m=jr({boot:t,client:n,agentHandle:d,setRefreshPlaceholder:e=>{o=e},triggerPlaceholder:c,openReader:p,openWriter:async()=>(await f()).writer,log:r});Pr(t,n),Nr(t,i,r),zr(t,n,i,r),t.setActivateSurface(_r({fileTree:a.fileTree,termSurface:a.termSurface,memoryHost:a.memoryHost,monitor:a.monitor,openFs:p,openWriter:async()=>(await f()).writer,onKernelReady:e=>t.onClientReady(e),getMonitorDeps:()=>({getScoops:()=>n.getScoops(),isProcessing:e=>n.isProcessing(e),getCronTasks:async()=>{let{getAllCronTasks:t}=await e(async()=>{let{getAllCronTasks:e}=await import(`./tray-leader-BEuWSPjO.js`).then(e=>e.o);return{getAllCronTasks:e}},__vite__mapDeps([67,1,2,20,14,19,4,21,32,33,17,12,13,15,16,18,22,23,24,25,26,27,28,29,34,35]));return t()},getWebhooks:async()=>{let{getAllWebhooks:t}=await e(async()=>{let{getAllWebhooks:e}=await import(`./tray-leader-BEuWSPjO.js`).then(e=>e.o);return{getAllWebhooks:e}},__vite__mapDeps([67,1,2,20,14,19,4,21,32,33,17,12,13,15,16,18,22,23,24,25,26,27,28,29,34,35]));return t()},getMounts:async()=>{let{getAllMountEntries:t}=await e(async()=>{let{getAllMountEntries:e}=await import(`./mount-table-store-CfQUN_2R.js`).then(e=>e.r);return{getAllMountEntries:e}},__vite__mapDeps([68,1]));return t()},getMcpServers:async()=>{try{let e=await(await p()).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=localStorage.getItem(`slicc_accounts`);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.map(e=>e.providerId).filter(e=>typeof e==`string`);return[...new Set(n)]}catch{return[]}},getSessionStats:async()=>n.getSessionStats?.()??null,getProcesses:async()=>{try{let e=await p(),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}/status`,{encoding:`utf-8`}),i=await e.readFile(`/proc/${r.name}/cmdline`,{encoding:`utf-8`});n.push({pid:parseInt(r.name,10),argv:String(i).trim(),status:String(t).trim()})}catch{}return n}catch{return[]}}}),mountTerminal:e=>Lr(t,n,e),insertReference:e=>{let t=a.inputCard,n=t.value.trim();t.value=n?`${n} @${e}`:`@${e}`,t.focus()},log:r})),a.floatbar.addEventListener(`click`,()=>{a.shell.hasAttribute(`open`)&&a.workbenchBody.getAttribute(`active`)===`monitor`?(a.shell.removeAttribute(`open`),a.dock.removeAttribute(`active`)):a.dock.selectItem(`monitor`)});let{refreshFreezer:h,openFrozen:g}=Er({refs:a,openVfs:f,client:n,getController:()=>t.getController(),getSelected:()=>t.getSelected(),selectScoop:t.selectScoop,clearSelection:t.clearSelection,log:r});h(),t.onClientReady(h),Rr(t,n,g),f().then(async({reader:t})=>{let{installPreviewVfsResponder:n}=await e(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-Dhck1Brc.js`);return{installPreviewVfsResponder:e}},[]);n({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>t,logger:r})}).catch(e=>r.warn(`WC page-VFS support wiring failed`,e)),f().then(async({reader:o,writer:s})=>{let{createRemoteSprinkleVfs:c}=await e(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([69,43])),{wireWcSprinkles:l}=await e(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-ZlT4-gI3.js`);return{wireWcSprinkles:e}},__vite__mapDeps([70,14,4])),u=await l({refs:a,client:n,fs:c({reader:o,writer:s}),instanceId:i.instanceId,onAttachImage:Vr(m,r),log:r});if(t.onClientReady(()=>void u.resync()),i.standalone&&i.instanceId){let{wireWcTray:o}=await e(async()=>{let{wireWcTray:e}=await import(`./wc-tray-3cfbfVP2.js`);return{wireWcTray:e}},__vite__mapDeps([71,14,17,1,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,32,33,34,35,72,62,67,38,31,39,40,41,73,74,55,56,75,48,49])),s=u.zone.callbacks();await o({refs:a,client:n,browser:i.standalone.browser,realCdpTransport:i.standalone.realCdpTransport,instanceId:i.instanceId,runtimeMode:i.standalone.runtimeMode,sprinkleManager:u.manager,addSprinkle:(e,t,n)=>s.addSprinkle(e,t,n),removeSprinkle:e=>s.removeSprinkle(e),getController:()=>t.getController(),getSelectedJid:()=>t.getSelected()?.jid??`cone`,agentHandle:d,openFs:p,baseFloatLabel:i.standalone.baseFloatLabel,window,log:r})}}).catch(e=>r.error(`WC sprinkle/tray wiring failed`,e)),e(async()=>{let{wireWcNav:e}=await import(`./wc-nav-D76G_K-8.js`);return{wireWcNav:e}},__vite__mapDeps([76,14,4,35,1,32,33,17,12,13,15,16,18,2,19,20,21,22,23,24,25,26,27,28,29,34,67])).then(({wireWcNav:e})=>e({refs:a,client:n,log:r})).catch(e=>r.error(`WC nav wiring failed`,e)),e(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-HWEPGUzG.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([77,2,4,59,1,39,53,54,20,14,19,21,55,56,78])).then(({getComposerSpeech:e,setComposerSpeechInstanceId:t})=>{let n=a.composer;t(i.instanceId),n.speech=e(),n.setAttribute(`ptt`,``)}).catch(e=>r.error(`WC push-to-talk wiring failed`,e)),e(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-nvJ9brr6.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([52,14,2,4,53,54,20,1,19,21,55,56])).then(({setSpeakAssetsInstanceId:e})=>e(i.instanceId)).catch(e=>r.error(`WC say warmup wiring failed`,e))}async function Ur(t,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:d}=await g({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:f,DEFAULT_STANDALONE_LABEL:p}=await e(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-DTyHQboN.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},__vite__mapDeps([79,20,1,14,19,4,21])),m=r===`standalone`||r===`electron-overlay`?await f():p,h=Dr(t,m),_=Bn({realCdpTransport:a,instanceId:o,callbacks:wr(h.wiring),localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u});Pn({send:e=>_.client.sendRaw(e)}),d?.(_.client),Hr(h,_.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,baseFloatLabel:m}});let{setupSudoStandalone:ee}=await e(async()=>{let{setupSudoStandalone:e}=await import(`./main-C_E1hhV6.js`).then(e=>e._);return{setupSudoStandalone:e}},__vite__mapDeps([32,1,33,14,17,12,13,15,16,18,2,19,20,4,21,22,23,24,25,26,27,28,29,34,35]));await ee({log:n}),await _.ready,h.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:_.client.getScoops().length})}export{Yt as a,Hr as attachWcClient,mn as c,wr as createWcLiveCallbacks,M as d,Et as f,hn as i,lt as l,ut as m,Ur as mountWcUiLive,Mn as n,H as o,j as p,Dr as prepareWcShell,B as r,U as s,Jn as t,Dt as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DmJSNs0I.js","assets/rolldown-runtime-aKtaBQYM.js","assets/panel-rpc-handlers-Bw3OaUZN.js","assets/preload-helper-CZgWQFsJ.js","assets/account-store-hXYe6llx.js","assets/compat-DADQxxLV.js","assets/models-ByRUWfA-.js","assets/provider-env-D37PhSJu.js","assets/__vite-browser-external-SwrSgYTf.js","assets/context-compaction-DaxQExZG.js","assets/logger-DDBAeTLF.js","assets/src-CAHYy5iz.js","assets/proxied-fetch-D_z2v-ZE.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-C29BvT4E.js","assets/secrets-bridge-client-Br74C9hX.js","assets/port-bridge-client-BnzDL5Fz.js","assets/tool-ui-DfXu6quJ.js","assets/providers-ekTC5xpd.js","assets/bedrock-camp-DbZ6Mjym.js","assets/transform-messages-D7OsqBmU.js","assets/main-C_E1hhV6.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/messages-BD4p8GuF.js","assets/clipboard-DuHpK59o.js","assets/hid-device-registry-6w-g8ZpF.js","assets/serial-port-registry-DsPZvGpT.js","assets/usb-operations-D-YdmmuG.js","assets/usb-device-registry-k6vTKonT.js","assets/wc-permissions-registry-Blyunq37.js","assets/tray-leader-BEuWSPjO.js","assets/remote-cdp-transport-m_T16Bkr.js","assets/hosted-config-apply-uAym2aS5.js","assets/theme-engine-BEk-Upnk.js","assets/legacy-styles-CuB1P3LZ.js","assets/tray-leave-runtime-xQpmmvcJ.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-CZgWQFsJ.js";import{P as t,R as n,d as r}from"./account-store-hXYe6llx.js";import{a as i}from"./context-compaction-DaxQExZG.js";import{t as a}from"./logger-DDBAeTLF.js";import{f as o,n as s,r as c}from"./src-CAHYy5iz.js";import{a as l,t as u}from"./proxied-fetch-D_z2v-ZE.js";import{r as d}from"./panel-rpc-DmJSNs0I.js";import{E as f,b as p,d as m,f as h,h as g,x as _,y as v}from"./main-C_E1hhV6.js";import{i as y,o as b,r as x,s as ee,t as S}from"./remote-cdp-transport-m_T16Bkr.js";import"./browser-2wdq8OwU.js";import{i as te,n as C,t as ne}from"./tray-leader-BEuWSPjO.js";import{d as re}from"./wc-shell-ChVfRkDg.js";import{t as w}from"./synthetic-cdp-transport-DLIt5SkY.js";import{a as ie,i as T,n as ae,o as E,r as D,t as O}from"./page-follower-tray-CB-5guCo.js";a(`scoops.tray-leave`),a(`scoops.tray-join`);var k=null;function A(e){k=e}function j(){return k?.()??[]}var M=`slicc.leaderTrayFollowers`;function N(e,t=globalThis.localStorage){try{t?.setItem(M,JSON.stringify(e))}catch{}}function P(e){if(e.userName)return`${e.providerId}:${e.userName}`;if(e.accessToken)try{let t=JSON.parse(atob(e.accessToken.split(`.`)[1].replace(/-/g,`+`).replace(/_/g,`/`))),n=t.email??t.user_id??t.sub;if(n)return`${e.providerId}:${n}`}catch{}return null}async function F(){try{let e=r().filter(e=>!e.loggedOut),t=[`adobe`,`github`].map(t=>e.find(e=>e.providerId===t)).find(Boolean)??e[0],n=t?P(t):null;if(!n)return`00000000`;let i=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(n));return Array.from(new Uint8Array(i,0,4),e=>e.toString(16).padStart(2,`0`)).join(``)}catch{return`00000000`}}async function I(t){let{instanceId:n,browser:r,remoteCdpBridge:i,remoteCdpPushChannel:a,getLeader:o,performTrayLeaveLocally:s,window:c}=t,{installPanelRpcHandler:l,createPanelRpcEventEmitter:u}=await e(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await import(`./panel-rpc-DmJSNs0I.js`).then(e=>e.i);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},__vite__mapDeps([0,1])),{createStandalonePanelRpcHandlers:d}=await e(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-Bw3OaUZN.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([2,3,4,1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,20,21,22,23,24,25,26,27,28,29])),{getLeaderPermissionsSurface:p}=await e(async()=>{let{getLeaderPermissionsSurface:e}=await import(`./wc-permissions-registry-Blyunq37.js`).then(e=>e.r);return{getLeaderPermissionsSurface:e}},__vite__mapDeps([30,1])),m=u({instanceId:n}),h=l({instanceId:n,handlers:d({resetTray:async()=>{let e=o();if(!e)throw Error(`no active tray session to reset`);return await e.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await s({workerBaseUrl:e,requestId:t}),joinTray:({joinUrl:e})=>(f(c.localStorage,e),c.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e}})),{joinUrl:e}),emitEvent:(e,t)=>m.emit(e,t),emitCherrySliccEvent:(e,t,n)=>o()?.sync.emitCherrySliccEvent(e,t,n)??!1,mintPreview:async({entryPath:t,servedRoot:n,bridge:r,noBridge:i,maxTabs:a,quiet:s,webhookId:c})=>{let l=o()?.currentLeaderSync;if(!l)throw Error(`serve: no active leader tray; cannot mint preview`);let{getLeaderTrayRuntimeStatus:u}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-BEuWSPjO.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([31,1,10,12,3,11,13,14,22,23,4,5,6,7,8,9,15,16,17,18,19,0,20,21,24,25])),d=u().session;if(!d)throw Error(`serve: leader tray has no active session`);let f=new URL(d.controllerUrl).pathname.split(`/`).pop()??``,{CHERRY_RUNTIME_TAG:p}=await e(async()=>{let{CHERRY_RUNTIME_TAG:e}=await import(`./remote-cdp-transport-m_T16Bkr.js`).then(e=>e.c);return{CHERRY_RUNTIME_TAG:e}},__vite__mapDeps([32,1,10,11])),{mintPreviewViaWorker:m}=await e(async()=>{let{mintPreviewViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{mintPreviewViaWorker:e}},[]),h=l.getConnectedFollowers().some(e=>e.runtime===p),g=!i&&(r||h),_=!i&&r,v=await F(),{url:y,previewToken:b}=await m({workerBaseUrl:d.workerBaseUrl,trayId:d.trayId,controllerToken:f,servedRoot:n,entryPath:t,allowLive:g,bridge:_,maxTabs:a,webhookId:c,userHash:v}),x=t?t.split(`/`).pop()??`Preview`:`Preview`;return l.registerMintedPreview(b,{url:y,title:x,quiet:s??!1}),l.broadcastPreviewOpen(y),{url:y,pushed:l.getConnectedFollowers().length,previewToken:b}},revokePreview:async({previewToken:t})=>{let n=o()?.currentLeaderSync;if(!n)throw Error(`serve --stop: no active leader tray; cannot revoke preview`);let{getLeaderTrayRuntimeStatus:r}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-BEuWSPjO.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([31,1,10,12,3,11,13,14,22,23,4,5,6,7,8,9,15,16,17,18,19,0,20,21,24,25])),i=r().session;if(!i)throw Error(`serve --stop: leader tray has no active session`);let a=new URL(i.controllerUrl).pathname.split(`/`).pop()??``,{revokePreviewViaWorker:s}=await e(async()=>{let{revokePreviewViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{revokePreviewViaWorker:e}},[]),c=await s({workerBaseUrl:i.workerBaseUrl,trayId:i.trayId,controllerToken:a,previewToken:t});return n.dropMintedPreview(t),c},listPreviews:async()=>{let{getLeaderTrayRuntimeStatus:t}=await e(async()=>{let{getLeaderTrayRuntimeStatus:e}=await import(`./tray-leader-BEuWSPjO.js`).then(e=>e.a);return{getLeaderTrayRuntimeStatus:e}},__vite__mapDeps([31,1,10,12,3,11,13,14,22,23,4,5,6,7,8,9,15,16,17,18,19,0,20,21,24,25])),n=t().session;if(!n)throw Error(`serve: leader tray has no active session`);let r=new URL(n.controllerUrl).pathname.split(`/`).pop()??``,{listPreviewsViaWorker:i}=await e(async()=>{let{listPreviewsViaWorker:e}=await import(`./preview-mint-client-CNzSnbyh.js`);return{listPreviewsViaWorker:e}},[]);return await i({workerBaseUrl:n.workerBaseUrl,trayId:n.trayId,controllerToken:r})},listRemoteTargets:()=>r.listAllTargets(),remoteCdp:i,getPermissionsSurface:()=>p()})});c.addEventListener(`beforeunload`,()=>{h(),m.dispose(),i.disposeAll(),a?.close()},{once:!0})}async function L(r){let{log:i}=r;await new Promise(e=>setTimeout(e,5e3));try{let r=await fetch(l(`/api/hosted-bootstrap`),{signal:AbortSignal.timeout(1e4),headers:u()});if(!r.ok)return;let a=await r.json(),o=a.accounts??(a.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:a.adobeImsToken}]:[]);a.model?localStorage.setItem(`selected-model`,a.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`),a.effortLevel?localStorage.setItem(`slicc_locked_effort_level`,a.effortLevel):localStorage.removeItem(`slicc_locked_effort_level`);let[{applyHostedAccounts:s,prewarmHostedModels:c},d]=await Promise.all([e(()=>import(`./hosted-config-apply-uAym2aS5.js`),__vite__mapDeps([33,10])),e(()=>import(`./main-C_E1hhV6.js`).then(e=>e.t),__vite__mapDeps([22,1,23,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,20,21,24,25]))]);await c(o,{getRefreshModels:e=>d.getProviderConfig(e).refreshModels});let f=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await s(o,{saveOAuthAccount:n,addAccount:d.addAccount,removeAccount:t,currentProviderIds:()=>d.getAccounts().map(e=>e.providerId),previouslyManaged:()=>f}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(o.map(e=>e.providerId))),i.info(`hosted-leader: cone config applied`,{count:o.length})}catch(e){i.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}}function R(e,t){if(!e||!t||!e.startsWith(`/`)||t===`/`||/%2[eE]/.test(e)||e.split(`/`).some(e=>e===`.`||e===`..`))return!1;let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n?!0:e.startsWith(n+`/`)}var z=64*1024;async function B(e,t,n){let{reqId:r,servedRoot:i,asText:a}=e,s=e.vfsPath;if(!R(s,i)){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}try{if((await n.stat(s)).type===`directory`&&(s=s.replace(/\/?$/,`/`)+`index.html`,!R(s,i))){t.send({type:`preview.response`,reqId:r,ok:!1,status:403});return}}catch{}let c,l;try{a?(c=await n.readFile(s,{encoding:`utf-8`}),l=`utf-8`):(c=o(await n.readFile(s,{encoding:`binary`})),l=`base64`)}catch(e){e?.code===`ENOENT`?t.send({type:`preview.response`,reqId:r,ok:!1,status:404}):t.send({type:`preview.response`,reqId:r,ok:!1,status:500,reason:String(e?.message??e)});return}let u=H(s),d=V(c,z);for(let e=0;e<d.length;e++)t.send({type:`preview.response`,reqId:r,ok:!0,mime:u,chunkIndex:e,totalChunks:d.length,content:d[e],encoding:l})}function V(e,t){if(e.length<=t)return[e];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function H(e){return/\.html?$/i.test(e)?`text/html`:/\.css$/i.test(e)?`text/css`:/\.m?js$/i.test(e)?`application/javascript`:/\.json$/i.test(e)?`application/json`:/\.svg$/i.test(e)?`image/svg+xml`:/\.png$/i.test(e)?`image/png`:/\.jpe?g$/i.test(e)?`image/jpeg`:/\.gif$/i.test(e)?`image/gif`:/\.webp$/i.test(e)?`image/webp`:/\.ico$/i.test(e)?`image/x-icon`:/\.woff2$/i.test(e)?`font/woff2`:/\.woff$/i.test(e)?`font/woff`:/\.ttf$/i.test(e)?`font/ttf`:/\.mp4$/i.test(e)?`video/mp4`:/\.webm$/i.test(e)?`video/webm`:/\.mp3$/i.test(e)?`audio/mpeg`:/\.pdf$/i.test(e)?`application/pdf`:/\.xml$/i.test(e)?`application/xml`:/\.wasm$/i.test(e)?`application/wasm`:`application/octet-stream`}var U=3e4,W={target:`preview-target`,session:`preview-session`,frame:`preview-frame`,loader:`preview-loader`},G=class extends w{connId;sendToWorker;nextId=1;pending=new Map;constructor(e){super({targetUrl:e.targetUrl,targetOrigin:e.targetOrigin,title:e.title,ids:e.ids??W}),this.connId=e.connId,this.sendToWorker=e.send}async connect(e){this._state=`connected`}onCloseTarget(){this.sendToWorker({type:`bridge.close`,connId:this.connId})}disconnect(){for(let[e,t]of this.pending)clearTimeout(t.timer),t.reject(Error(`PreviewBridgeCdpTransport disconnected`));this.pending.clear(),this._state=`disconnected`}async forward(e,t,n,r=U){let i=this.nextId++;return new Promise((a,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`PreviewBridge CDP timed out after ${r}ms: ${e}`))},r);this.pending.set(i,{resolve:e=>{clearTimeout(s),a(e)},reject:e=>{clearTimeout(s),o(e)},timer:s}),this.sendToWorker({type:`bridge.cdp.request`,connId:this.connId,id:i,method:e,params:t,sessionId:n})})}deliverResponse(e,t){let n=this.pending.get(e);n&&(this.pending.delete(e),clearTimeout(n.timer),t.error?n.reject(Error(`PreviewBridge CDP error: ${t.error.message} (${t.error.code})`)):n.resolve(t.result??{}))}};a(`lick-manager`);var K=new Set([`navigate`]),q=class{runtimes=new Map;dirty=!1;setTargets(e,t){this.runtimes.set(e,t),this.dirty=!0}removeRuntime(e){this.runtimes.delete(e)&&(this.dirty=!0)}getEntries(){this.dirty=!1;let e=[];for(let[t,n]of this.runtimes)for(let r of n)e.push({targetId:`${t}:${r.targetId}`,localTargetId:r.targetId,runtimeId:t,title:r.title,url:r.url,isLocal:!1,kind:r.kind??`browser`,capabilities:r.capabilities});return e}hasChanged(){return this.dirty}getRuntimeIds(){return[...this.runtimes.keys()]}},J=a(`tray-leader-sync`);function oe(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function Y(e,t){switch(e){case`extension`:return`extension follower`;case`standalone`:return`standalone follower`;case`electron`:return`Electron follower`;case`ios`:return`iOS follower`;default:return t?`follower (${t})`:`follower`}}function X(e){return e.kind===`cherry`}function se(e,t){return e.filter(e=>e.kind===`preview`?!1:X(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var ce=class e{options;followers=new Map;registry=new q;runtimeToBootstrap=new Map;pendingCDPRoutes=new Map;cdpChunkBuffers=new Map;remoteTransports=new Map;pendingTabOpenRoutes=new Map;tabOpenResolvers=new Map;pendingFsRoutes=new Map;fsResolvers=new Map;mintMap=new Map;bridgeConns=new Map;previewLickLastEmitAt=new Map;static PREVIEW_LICK_THROTTLE_MS=2e3;constructor(e){this.options=e}addFollower(e,t,n){this.removeFollower(e);let r=x(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new ie({sendPing:()=>r.send({type:`ping`}),onDead:()=>{J.warn(`Follower keepalive dead, removing follower`,{bootstrapId:e}),this.removeFollower(e),this.options.onFollowerDead?.(e)}});a.start(),this.followers.set(e,{bootstrapId:e,sync:r,unsubscribe:i,keepalive:a,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:Date.now(),floatType:oe(n?.runtime)}),J.info(`Follower added to sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size),r.send({type:`hello`,protocolVersion:1}),this.sendSnapshotToFollower(e),this.sendScoopsListToFollower(e),this.sendSprinklesListToFollower(e);let o=this.getFollowerBroadcastEntries();o.length>0&&r.send({type:`targets.registry`,targets:o})}removeFollower(e){let t=this.followers.get(e);if(t){t.keepalive.stop(),t.unsubscribe(),t.sync.close(),this.followers.delete(e),this.followerBroadcastErrorLogAt.delete(e);for(let[t,n]of this.runtimeToBootstrap)if(n===e){this.cleanupRemoteTransports(t),this.registry.removeRuntime(t),this.runtimeToBootstrap.delete(t);break}this.registry.hasChanged()&&this.broadcastTargetRegistry(),J.info(`Follower removed from sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size)}}followerBroadcastErrorLogAt=new Map;static BROADCAST_ERROR_THROTTLE_MS=6e4;broadcastToAllFollowers(t){let n=performance.now();for(let[r,i]of this.followers)try{i.sync.send(t),this.followerBroadcastErrorLogAt.delete(r)}catch(i){n-(this.followerBroadcastErrorLogAt.get(r)??-1/0)>e.BROADCAST_ERROR_THROTTLE_MS&&(this.followerBroadcastErrorLogAt.set(r,n),J.error(`Broadcast send to follower failed (channel may be stuck)`,{bootstrapId:r,messageType:t.type,error:i instanceof Error?i.message:String(i)}))}}broadcastEvent(e){if(this.followers.size===0)return;let t={type:`agent_event`,event:e,scoopJid:this.options.getScoopJid()};this.broadcastToAllFollowers(t)}broadcastUserMessage(e,t,n){if(this.followers.size===0)return;let r={type:`user_message_echo`,text:e,messageId:t,scoopJid:this.options.getScoopJid(),attachments:n?.length?i(n):n};this.broadcastToAllFollowers(r)}broadcastStatus(e){if(this.followers.size===0)return;let t={type:`status`,scoopStatus:e};this.broadcastToAllFollowers(t)}async sendSnapshotToFollower(e,t){let n=this.followers.get(e);if(!n)return;let r=t??n.selectedScoopJid??this.options.getScoopJid(),i;if(this.options.getMessagesForScoop&&r!==this.options.getScoopJid())try{i=await Promise.resolve(this.options.getMessagesForScoop(r))}catch(e){J.warn(`getMessagesForScoop failed, falling back to active scoop`,{targetJid:r,error:e instanceof Error?e.message:String(e)}),i=this.options.getMessages()}else i=this.options.getMessages();n.selectedScoopJid=r,ee(n.sync,i,r),J.debug(`Snapshot sent to follower`,{bootstrapId:e,messageCount:i.length,scoopJid:r})}sendScoopsListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getScoops;if(n)try{let e=n(),r=this.options.getScoopJid();t.sync.send({type:`scoops.list`,scoops:e,activeScoopJid:r})}catch(t){J.warn(`Failed to send scoops.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}sendSprinklesListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getSprinkles;if(n)try{let e=n();t.sync.send({type:`sprinkles.list`,sprinkles:e})}catch(t){J.warn(`Failed to send sprinkles.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}broadcastScoopsList(){if(this.followers.size===0)return;let e=this.options.getScoops;if(!e)return;let t;try{t=e()}catch(e){J.warn(`Failed to compute scoops list`,{error:e instanceof Error?e.message:String(e)});return}let n=this.options.getScoopJid(),r={type:`scoops.list`,scoops:t,activeScoopJid:n};this.broadcastToAllFollowers(r)}broadcastSprinklesList(){if(this.followers.size===0)return;let e=this.options.getSprinkles;if(!e)return;let t;try{t=e()}catch(e){J.warn(`Failed to compute sprinkles list`,{error:e instanceof Error?e.message:String(e)});return}let n={type:`sprinkles.list`,sprinkles:t};this.broadcastToAllFollowers(n)}broadcastSprinkleUpdate(e,t){if(this.followers.size===0)return;let n={type:`sprinkle.update`,sprinkleName:e,data:t};this.broadcastToAllFollowers(n)}broadcastTheme(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`theme.apply`,themeJson:e})}broadcastSprinkleReloaded(e){this.followers.size!==0&&this.broadcastToAllFollowers({type:`sprinkle.reloaded`,sprinkleName:e})}broadcastPreviewOpen(e){if(this.followers.size===0)return;let t=`prv-${crypto.randomUUID()}`;this.broadcastToAllFollowers({type:`preview.open`,requestId:t,url:e})}static SPRINKLE_CHUNK_SIZE=32*1024;static SPRINKLE_CHUNK_THRESHOLD=64*1024;async handleSprinkleFetch(t,n,r){let i=this.followers.get(t);if(!i)return;let a=this.options.readSprinkleContent;if(!a){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Leader has no sprinkle content reader`});return}let o=null;try{o=await Promise.resolve(a(r))}catch(e){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:e instanceof Error?e.message:String(e)});return}if(o==null){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Sprinkle not found: ${r}`});return}if(o.length<=e.SPRINKLE_CHUNK_THRESHOLD){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:o});return}let s=e.SPRINKLE_CHUNK_SIZE,c=Math.ceil(o.length/s);for(let e=0;e<c;e++){let t=o.slice(e*s,(e+1)*s);i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:t,chunkIndex:e,totalChunks:c})}}handleFollowerUserMessage(e,t){J.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?i(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n)}handleFollowerSprinkleLick(e,t){J.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=Y(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){J.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerLick(e,t){let n=t.event;if(!n||!K.has(n.type)){J.warn(`Rejecting malformed or non-forwardable lick from follower`,{bootstrapId:e,type:n?.type});return}let r=this.followers.get(e),{targetScoop:i,...a}=n,o={...a,originFollowerId:e,originLabel:Y(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){J.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}handleFollowerTargetsAdvertise(e,t){J.info(`Follower targets advertised`,{bootstrapId:e,runtimeId:t.runtimeId,targetCount:t.targets.length});for(let e of[...this.remoteTransports.keys()]){let n=e.substring(0,e.indexOf(`:`));n!==`leader`&&!this.runtimeToBootstrap.has(n)&&n!==t.runtimeId&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),J.debug(`Cleaned up orphaned remote transport on advertise`,{key:e}))}this.runtimeToBootstrap.set(t.runtimeId,e),this.registry.setTargets(t.runtimeId,t.targets),this.broadcastTargetRegistry()}handleFollowerMessage(e,t){if(t.type!==`hello`){let t=this.followers.get(e);t&&t.peerProtocolVersion===void 0&&!t.legacyPeerLogged&&(t.legacyPeerLogged=!0,J.info(`Follower sent no hello — legacy peer (pre-versioning build)`,{bootstrapId:e}))}switch(t.type){case`user_message`:this.handleFollowerUserMessage(e,t);break;case`abort`:J.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:J.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{J.info(`Follower selected scoop`,{bootstrapId:e,scoopJid:t.scoopJid});let n=this.followers.get(e);n&&(n.selectedScoopJid=t.scoopJid,this.sendSnapshotToFollower(e,t.scoopJid));break}case`sprinkles.refresh`:J.info(`Follower requested sprinkles refresh`,{bootstrapId:e}),this.sendSprinklesListToFollower(e);break;case`sprinkle.fetch`:this.handleSprinkleFetch(e,t.requestId,t.sprinkleName);break;case`sprinkle.lick`:this.handleFollowerSprinkleLick(e,t);break;case`lick`:this.handleFollowerLick(e,t);break;case`targets.advertise`:this.handleFollowerTargetsAdvertise(e,t);break;case`cdp.request`:{let{requestId:n,targetRuntimeId:r,localTargetId:i,method:a,params:o,sessionId:s}=t;r===`leader`?this.executeLocalCDP(n,i,a,o,s,e):this.forwardCDPRequest(n,r,i,a,o,s,e);break}case`cdp.response`:this.handleCDPResponse(t);break;case`cdp.event`:this.handleCDPEvent(e,t.method,t.params,t.sessionId);break;case`tab.open`:{let{requestId:n,targetRuntimeId:r,url:i}=t;r===`leader`?this.executeLocalTabOpen(n,i,e):this.forwardTabOpen(n,r,i,e);break}case`tab.opened`:this.handleTabOpenResponse(t.requestId,t.targetId);break;case`tab.open.error`:this.handleTabOpenError(t.requestId,t.error);break;case`fs.request`:{let{requestId:n,targetRuntimeId:r,request:i}=t;r===`leader`?this.executeLocalFs(n,i,e):this.forwardFsRequest(n,r,i,e);break}case`fs.response`:this.handleFsResponse(t.requestId,t.response);break;case`cherry.host_event`:this.routeCherryHostEvent(e,t);break;case`ping`:{let t=this.followers.get(e);t&&(t.keepalive.receivePing(),t.lastActivity=Date.now(),t.sync.send({type:`pong`}));break}case`pong`:{let t=this.followers.get(e);t&&(t.keepalive.receivePong(),t.lastActivity=Date.now());break}case`hello`:{let n=this.followers.get(e);n&&(n.peerProtocolVersion=t.protocolVersion),t.protocolVersion>1?J.warn(`Follower speaks a newer tray sync protocol — update this build`,{bootstrapId:e,followerVersion:t.protocolVersion,ourVersion:1}):J.info(`Follower hello`,{bootstrapId:e,protocolVersion:t.protocolVersion});break}default:{let n=c(t);J.warn(`Unknown follower message type — skewed follower?`,{bootstrapId:e,type:n.type});break}}}setLocalTargets(e){this.registry.setTargets(`leader`,e),this.registry.hasChanged()&&this.broadcastTargetRegistry()}broadcastTargetRegistry(){if(this.followers.size===0)return;let e={type:`targets.registry`,targets:this.getFollowerBroadcastEntries()};this.broadcastToAllFollowers(e)}getTargets(){return this.getConnectedEntries()}getFollowerBroadcastEntries(){return this.getConnectedEntries().filter(e=>e.kind!==`preview`)}getConnectedEntries(){let e=this.registry.getEntries().filter(e=>{if(e.runtimeId===`leader`)return!0;let t=this.runtimeToBootstrap.get(e.runtimeId);return t?this.followers.has(t):!1}),t=[];for(let[e,n]of this.bridgeConns)t.push({targetId:`preview:${n.previewToken}:${e}`,localTargetId:e,runtimeId:`preview`,title:n.title,url:n.url,isLocal:!1,kind:`preview`});return[...e,...t]}createRemoteTransport(e,t){if(e===`preview`){let e=t.indexOf(`:`);if(e===-1)throw Error(`Invalid preview localTargetId format: expected "<token>:<connId>", got "${t}"`);let n=t.slice(e+1),r=this.getBridgeTransport(n);if(!r)throw Error(`Preview bridge connection "${n}" not found`);return r}let n=new S({sendCDPRequest:(n,r,i,a)=>{let o=this.runtimeToBootstrap.get(e),s=o?this.followers.get(o):void 0;if(!s){this.remoteTransports.get(`${e}:${t}`)?.handleResponse(n,void 0,`Target runtime "${e}" not connected`);return}this.pendingCDPRoutes.set(n,{requesterBootstrapId:`__leader__`,requestId:n}),s.sync.send({type:`cdp.request`,requestId:n,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}cleanupRemoteTransports(e){let t=`${e}:`;for(let e of[...this.remoteTransports.keys()])e.startsWith(t)&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),J.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){J.warn(`onRemoteTransportsCleaned handler threw`,{runtimeId:e,error:t instanceof Error?t.message:String(t)})}}getConnectedFollowers(){return[...this.runtimeToBootstrap.entries()].map(([e,t])=>{let n=this.followers.get(t);return{runtimeId:e,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:n?.lastActivity,floatType:n?.floatType}})}canRuntimeServeTeleport(e,t){if(t.runtime===`slicc-cherry`)return!1;let n=this.registry.getEntries().filter(t=>t.runtimeId===e);return n.length===0?!0:se(n,{requireNetwork:!0}).length>0}getBestFollowerForTeleport(){let e=[];for(let[t,n]of this.runtimeToBootstrap){let r=this.followers.get(n);r&&this.canRuntimeServeTeleport(t,r)&&e.push({runtimeId:t,bootstrapId:n,floatType:r.floatType,lastActivity:r.lastActivity})}if(e.length===0)return null;let t=e.filter(e=>e.floatType===`standalone`),n=t.length>0?t:e;return n.sort((e,t)=>t.lastActivity-e.lastActivity),n[0]}get hasFollowers(){return this.followers.size>0}stop(){for(let e of[...this.followers.keys()])this.removeFollower(e);for(let e of this.bridgeConns.values())e.transport.disconnect();this.bridgeConns.clear(),this.mintMap.clear(),this.previewLickLastEmitAt.clear()}async executeLocalCDP(e,t,n,r,i,a){let o=this.followers.get(a);if(!o)return;let s=this.options.browserTransport;if(!s){o.sync.send({type:`cdp.response`,requestId:e,error:`Leader has no browser transport`});return}try{let t=await s.send(n,r,i);b(o.sync,e,t)}catch(t){o.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardCDPRequest(e,t,n,r,i,a,o){let s=this.runtimeToBootstrap.get(t),c=s?this.followers.get(s):void 0,l=this.followers.get(o);if(!c){l&&l.sync.send({type:`cdp.response`,requestId:e,error:`Target runtime "${t}" not connected`});return}this.pendingCDPRoutes.set(e,{requesterBootstrapId:o,requestId:e}),c.sync.send({type:`cdp.request`,requestId:e,localTargetId:n,method:r,params:i,sessionId:a})}handleCDPResponse(e){let{requestId:t}=e,n=this.pendingCDPRoutes.get(t);if(!n)return;let r=y(this.cdpChunkBuffers,e);if(!r)return;if(this.pendingCDPRoutes.delete(t),n.requesterBootstrapId===`__leader__`){for(let e of this.remoteTransports.values())e.handleResponse(t,r.result,r.error);return}let i=this.followers.get(n.requesterBootstrapId);i&&b(i.sync,t,r.result,r.error)}handleCDPEvent(e,t,n,r){let i;for(let[t,n]of this.runtimeToBootstrap)if(n===e){i=t;break}if(!i)return;let a=`${i}:`;for(let[e,r]of this.remoteTransports)e.startsWith(a)&&r.handleEvent(t,n)}runtimeIdForBootstrap(e){for(let[t,n]of this.runtimeToBootstrap)if(n===e)return t}routeCherryHostEvent(e,t){if(!s(t))return;let n=this.options.onCherryHostEvent;if(!n){J.debug(`cherry.host_event received but no onCherryHostEvent wired`,{bootstrapId:e,name:t.name});return}let r=this.runtimeIdForBootstrap(e);try{n(r,t.name,t.detail)}catch(n){J.warn(`Failed to route cherry.host_event to cone`,{bootstrapId:e,name:t.name,error:n instanceof Error?n.message:String(n)})}}emitCherrySliccEvent(e,t,n){let r=e.indexOf(`:`),i=r>=0?e.slice(0,r):e,a=this.runtimeToBootstrap.get(i),o=a?this.followers.get(a):void 0;return o?o.sync.send({type:`cherry.slicc_event`,targetId:e,name:t,detail:n}):(J.warn(`emitCherrySliccEvent: owning follower not connected`,{targetId:e,name:t}),!1)}canRuntimeOpenTab(e){let t=this.registry.getEntries().filter(t=>t.runtimeId===e);return t.length===0?!0:t.some(e=>!X(e))}openRemoteTab(e,t){let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.reject(Error(`Target runtime "${e}" not connected`));if(!this.canRuntimeOpenTab(e))return Promise.reject(Error(`Target runtime "${e}" is a cherry host that cannot open tabs`));let i=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.tabOpenResolvers.set(i,{resolve:e,reject:n}),this.pendingTabOpenRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i}),r.sync.send({type:`tab.open`,requestId:i,url:t})})}async executeLocalTabOpen(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.browserTransport;if(!i){r.sync.send({type:`tab.open.error`,requestId:e,error:`Leader has no browser transport`});return}try{let n=(await i.send(`Target.createTarget`,{url:t,background:!0})).targetId;r.sync.send({type:`tab.opened`,requestId:e,targetId:`leader:${n}`})}catch(t){r.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardTabOpen(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" not connected`});return}if(!this.canRuntimeOpenTab(t)){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" is a cherry host that cannot open tabs`});return}this.pendingTabOpenRoutes.set(e,{requesterBootstrapId:r,requestId:e}),a.sync.send({type:`tab.open`,requestId:e,url:n})}handleTabOpenResponse(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.resolve(t));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.opened`,requestId:e,targetId:t})}handleTabOpenError(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.reject(Error(t)));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.open.error`,requestId:e,error:t})}async executeLocalFs(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.vfs;if(!i){r.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Leader has no VFS`}});return}let a=await T(i,t);for(let t of a)r.sync.send({type:`fs.response`,requestId:e,response:t})}forwardFsRequest(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Target runtime "${t}" not connected`}});return}this.pendingFsRoutes.set(e,{requesterBootstrapId:r,requestId:e,chunks:[],totalChunks:1}),a.sync.send({type:`fs.request`,requestId:e,request:n})}handleFsResponse(e,t){let n=this.pendingFsRoutes.get(e);if(!n){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}return}if(n.requesterBootstrapId===`__leader__`){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),this.pendingFsRoutes.delete(e),n.resolve(n.responses))}return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`fs.response`,requestId:e,response:t}),n.chunks.push(t),n.totalChunks=t.ok&&t.totalChunks||1,n.chunks.length>=n.totalChunks&&this.pendingFsRoutes.delete(e)}sendFsRequest(e,t){if(e===`leader`){let e=this.options.vfs;return e?T(e,t):Promise.resolve([{ok:!1,error:`Leader has no VFS`}])}let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.resolve([{ok:!1,error:`Target runtime "${e}" not connected`}]);let i=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.fsResolvers.set(i,{resolve:e,reject:n,responses:[]}),this.pendingFsRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i,chunks:[],totalChunks:1}),r.sync.send({type:`fs.request`,requestId:i,request:t})})}registerMintedPreview(e,t){this.mintMap.set(e,t)}dropMintedPreview(e){this.mintMap.delete(e),this.previewLickLastEmitAt.delete(`${e}:connected`),this.previewLickLastEmitAt.delete(`${e}:disconnected`)}onBridgeConnected(e){let{connId:t,previewToken:n,origin:r,userAgent:i,connectedAt:a}=e;if(this.bridgeConns.has(t))return;let o=this.mintMap.get(n),s=o?.url??r,c=o?.title??`Preview`,l=o?.quiet??!1,u=new G({connId:t,targetUrl:s,targetOrigin:r,title:c,send:e=>this.options.sendControl(e)});u.connect(),this.bridgeConns.set(t,{previewToken:n,origin:r,userAgent:i,connectedAt:a,url:s,title:c,quiet:l,transport:u}),J.info(`Preview bridge connected`,{connId:t,previewToken:n,origin:r,userAgent:i}),this.emitPreviewLifecycleLick(`connected`,{connId:t,previewToken:n,origin:r,userAgent:i,connectedAt:a,quiet:l})}onBridgeDisconnected(e){let{connId:t,reason:n}=e,r=this.bridgeConns.get(t);if(!r)return;let{previewToken:i,origin:a,userAgent:o,connectedAt:s,quiet:c}=r;r.transport.disconnect(),this.bridgeConns.delete(t),J.info(`Preview bridge disconnected`,{connId:t,reason:n}),this.emitPreviewLifecycleLick(`disconnected`,{connId:t,previewToken:i,origin:a,userAgent:o,connectedAt:s,quiet:c})}emitPreviewLifecycleLick(t,n){if(n.quiet||!this.options.onPreviewLick)return;let r=`${n.previewToken}:${t}`,i=Date.now();if(i-(this.previewLickLastEmitAt.get(r)??0)<e.PREVIEW_LICK_THROTTLE_MS)return;this.previewLickLastEmitAt.set(r,i);let a={type:`preview`,previewLifecycle:t,previewConnId:n.connId,previewToken:n.previewToken,previewOrigin:n.origin,previewUserAgent:n.userAgent,previewConnectedAt:n.connectedAt,timestamp:new Date().toISOString(),body:{}};try{this.options.onPreviewLick(a)}catch(e){J.warn(`onPreviewLick handler threw`,{error:e instanceof Error?e.message:String(e)})}}onBridgeCdpResponse(e){let{connId:t,id:n,result:r,error:i}=e,a=this.bridgeConns.get(t);if(!a){J.warn(`Received bridge.cdp.response for unknown connId`,{connId:t,id:n});return}a.transport.deliverResponse(n,{result:r,error:i})}getBridgeTransport(e){return this.bridgeConns.get(e)?.transport}},Z=a(`page-leader-tray`);function le(e,t){return new ce({sendControl:e=>t().sendControlMessage(e),getMessages:e.getMessages,getMessagesForScoop:e.getMessagesForScoop,getScoopJid:e.getScoopJid,getScoops:e.getScoops,getSprinkles:e.getSprinkles,readSprinkleContent:e.readSprinkleContent,onSprinkleLick:e.onSprinkleLick,onForwardedLick:e.onForwardedLick,onFollowerMessage:e.onFollowerMessage,onFollowerAbort:e.onFollowerAbort,onFollowerCountChanged:e.onFollowerCountChanged,onRemoteTransportsCleaned:e.onRemoteTransportsCleaned,onCherryHostEvent:e.onCherryHostEvent,onPreviewLick:e.onPreviewLick,browserAPI:e.browserAPI,browserTransport:e.browserTransport,vfs:e.vfs})}function ue(e,t){return new D({sendControlMessage:t=>e().sendControlMessage(t),onPeerConnected:(e,n)=>{Z.info(`Tray follower data channel opened`,{controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,runtime:e.runtime}),t.addFollower(e.bootstrapId,n,{runtime:e.runtime,connectedAt:e.connectedAt??void 0})},onPeerDisconnected:(e,t)=>{Z.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}})}function de(e,t,n,r,i,a){let o=t=>{e.browserTransport?.sendLeaderJoinUrl?.(t)};return new ne({workerBaseUrl:e.workerBaseUrl,runtime:e.runtime??`slicc-standalone`,...e.kind?{kind:e.kind}:{},onLeaderReady:t=>{e.onLeaderReady?.(t),o(t.joinUrl)},fetchImpl:r,...e._storeOverride?{store:e._storeOverride}:{},...e._webSocketFactory?{webSocketFactory:e._webSocketFactory}:{},onControlMessage:r=>{if(r.type===`webhook.event`){e.sendWebhookEvent(r.webhookId,r.headers,r.body);return}if(r.type===`preview.request`){let t=e.vfs;if(!t){a().sendControlMessage({type:`preview.response`,reqId:r.reqId,ok:!1,status:500,reason:`leader has no VFS bound`});return}B(r,{send:e=>a().sendControlMessage(e)},t).catch(e=>{Z.error(`preview.request handling failed`,{error:e instanceof Error?e.message:String(e)})});return}if(r.type===`preview.revoked`){Z.info(`Preview revoked by worker`,{previewToken:r.previewToken}),n.dropMintedPreview(r.previewToken);return}if(r.type===`bridge.connected`){n.onBridgeConnected(r);return}if(r.type===`bridge.disconnected`){n.onBridgeDisconnected(r);return}if(r.type===`bridge.cdp.response`){n.onBridgeCdpResponse(r);return}t.handleControlMessage(r).catch(e=>{Z.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{Z.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{Z.info(`Leader tray reconnected`,{trayId:e.trayId}),i(e),o(e.joinUrl)},onReconnectGaveUp:(e,t)=>{Z.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t}),o(null)}})}function fe(e,t){let n=new E(Z,{failureMessage:`Leader CDP target refresh failed (best-effort, throttled)`,recoveryMessage:`Leader CDP target refresh recovered (stable for debounce window)`});return async()=>{let r;try{r=await e.browserAPI.listPages()}catch(e){n.reportFailure(e);return}n.reportSuccess();try{let e=r.map(e=>({targetId:e.targetId,title:e.title,url:e.url}));t.setLocalTargets(e)}catch(e){Z.error(`Leader target broadcast failed (sync.setLocalTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}}function pe(e,t){return setInterval(()=>{try{e.broadcastScoopsList(),e.broadcastSprinklesList()}catch(e){Z.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t)}function me(e){return t=>{let n=e._historyOverride??he();if(n)try{let e=_(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){Z.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}}function Q(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i=me(e),a=le(e,()=>r);e.browserAPI.setTrayTargetProvider(a);let o=ue(()=>r,a);r=de(e,o,a,n,i,()=>r);let s=e.onAgentEvent(e=>a.broadcastEvent(e)),c=[],l=fe(e,a);c.push(setInterval(l,t)),l(),c.push(pe(a,t));let u=r.start();u.then(i).catch(e=>{Z.error(`Leader tray start failed`,{error:e instanceof Error?e.message:String(e)})});let d=!1;return{ready:u,stop(){d=!0,s();for(let e of c)clearInterval(e);a.stop(),o.stop(),r.stop()},async reset(){return a.stop(),o.stop(),r.stop(),await r.clearSession(),i(await r.start()),C()},leader:r,peers:o,sync:a,get currentLeaderSync(){return d?null:a}}}function he(){return typeof window>`u`||!window.history||!window.location?null:{get href(){return window.location.href},replaceState(e,t,n){window.history.replaceState(e,t,n)}}}function ge(e){let t=new Map,n=(e,t)=>`${e}:${t}`,r=(r,i)=>{let a=n(r,i),o=t.get(a);if(!o){let n=e.getSync();if(!n)throw Error(`remote-cdp: leader tray not started`);o={runtimeId:r,localTargetId:i,transport:n.createRemoteTransport(r,i),forwarders:new Map},t.set(a,o)}return o},i=n=>{let r=t.get(n);if(!r)return;for(let[e,t]of r.forwarders)r.transport.off(e,t.listener);r.forwarders.clear();let i=e.getSync();i?.removeRemoteTransport?i.removeRemoteTransport(r.runtimeId,r.localTargetId):r.transport.disconnect(),t.delete(n)};return{async send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o}){return r(e,t).transport.send(n,i,a,o)},async subscribe({runtimeId:t,localTargetId:n,event:i}){let a=r(t,n),o=a.forwarders.get(i);if(o)return o.count+=1,{ok:!0};let s=r=>e.postEvent({runtimeId:t,localTargetId:n,method:i,params:r});return a.transport.on(i,s),a.forwarders.set(i,{listener:s,count:1}),{ok:!0}},async unsubscribe({runtimeId:e,localTargetId:r,event:i}){let a=t.get(n(e,r)),o=a?.forwarders.get(i);return!a||!o?{ok:!0}:(--o.count,o.count<=0&&(a.transport.off(i,o.listener),a.forwarders.delete(i)),{ok:!0})},async detach({runtimeId:e,localTargetId:t}){return i(n(e,t)),{ok:!0}},async openTab({runtimeId:t,url:n}){let r=e.getSync();if(!r?.openRemoteTab)throw Error(`remote-cdp: openRemoteTab not available`);return{targetId:await r.openRemoteTab(t,n)}},cleanupRuntime(e){let n=`${e}:`;for(let e of[...t.keys()])e.startsWith(n)&&i(e)},disposeAll(){for(let e of[...t.keys()])i(e)}}}function $(e,t){let{browser:n,client:r,getController:i}=e;return{joinUrl:t,onSnapshot:e=>i()?.loadMessages(e),onUserMessage:(e,t,n,r)=>i()?.addUserMessage(e,r),onStatus:e=>i()?.setProcessing(e===`processing`),setChatAgent:e=>i()?.setAgent(e),browserAPI:n,onForwardingToggle:e=>r.sendSetFollowerForwarding(e),addSprinkle:(t,n,r)=>e.addSprinkle(t,n,r),removeSprinkle:t=>e.removeSprinkle(t),onScoopsList:(t,n)=>{e.refs.switcher.scoops=t.map(e=>({key:e.jid,type:e.isCone?`cone`:`scoop`,color:re(e),label:e.isCone?`sliccy`:e.name,eyes:`open`})),e.refs.switcher.setAttribute(`active`,n)}}}function _e(e,t,n){let{client:r,refs:i}=e;return a=>({workerBaseUrl:a,getMessages:()=>e.getController()?.getMessages()??[],getMessagesForScoop:e=>r.getMessagesForScoop(e),getScoopJid:()=>e.getSelectedJid(),getScoops:()=>r.getScoops().map(e=>({jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,trigger:e.trigger})),getSprinkles:()=>{let t=new Set(e.sprinkleManager.opened());return e.sprinkleManager.available().map(e=>({name:e.name,title:e.title,path:e.path,open:t.has(e.name),autoOpen:e.autoOpen}))},readSprinkleContent:async t=>{let n=e.sprinkleManager.available().find(e=>e.name===t);if(!n)return null;try{let t=await(await e.openFs()).readFile(n.path,{encoding:`utf-8`});return typeof t==`string`?t:new TextDecoder(`utf-8`).decode(t)}catch{return null}},onSprinkleLick:(e,t,n,i)=>r.sendSprinkleLick(e,t,n,i),onFollowerMessage:(n,r,i)=>{e.getController()?.addUserMessage(n,i),e.agentHandle.sendMessage(n,r,i),t.leader?.sync.broadcastUserMessage(n,r,i)},onFollowerAbort:()=>e.agentHandle.stop(),onFollowerCountChanged:t=>{i.floatbar.setAttribute(`label`,t>0?`tray · ${t} follower${t===1?``:`s`}`:e.baseFloatLabel??`standalone · live`),N(j())},onRemoteTransportsCleaned:e=>n.cleanupRuntime(e),onForwardedLick:e=>r.sendForwardedLick(e),onCherryHostEvent:(e,t,n)=>r.sendCherryHostEvent(e,t,n),onPreviewLick:e=>r.sendPreviewLick(e),sendWebhookEvent:(e,t,n)=>r.sendWebhookEvent(e,t,n),onAgentEvent:t=>e.agentHandle.onEvent(t),browserAPI:e.browser,browserTransport:e.realCdpTransport,vfs:{async stat(t){return(await e.openFs()).stat(t)},async readFile(t,n){return(await e.openFs()).readFile(t,n)}}})}function ve(t,n){return{wireLeaderHooks:n=>{A(()=>n.peers.getPeers().map(e=>({runtimeId:ae(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))),t.sprinkleManager.setSendToSprinkleHook((e,t)=>n.sync.broadcastSprinkleUpdate(e,t)),t.sprinkleManager.setReloadHook(e=>n.sync.broadcastSprinkleReloaded(e)),t.getController()?.setOnLocalUserMessage((e,t,r)=>n.sync.broadcastUserMessage(e,t,r)),t.getController()?.setOnLocalProcessingChange(e=>n.sync.broadcastStatus(e?`processing`:`ready`)),e(async()=>{let{setThemeChangeListener:e,getActiveThemeId:t}=await import(`./theme-engine-BEk-Upnk.js`).then(e=>e.p);return{setThemeChangeListener:e,getActiveThemeId:t}},__vite__mapDeps([34,1,10])).then(({setThemeChangeListener:e,getActiveThemeId:t})=>{let r;e(e=>{t()!==`__preview`&&(clearTimeout(r),r=setTimeout(()=>n.sync.broadcastTheme(e),150))})})},clearLeaderHooks:()=>{A(null),N([]),t.getController()?.setOnLocalUserMessage(void 0),t.getController()?.setOnLocalProcessingChange(void 0),t.sprinkleManager.setSendToSprinkleHook(void 0),t.sprinkleManager.setReloadHook(void 0),n.disposeAll(),e(async()=>{let{setThemeChangeListener:e}=await import(`./theme-engine-BEk-Upnk.js`).then(e=>e.p);return{setThemeChangeListener:e}},__vite__mapDeps([34,1,10])).then(({setThemeChangeListener:e})=>{e(null)})}}}function ye(e){return{runtime:`slicc-hosted-leader`,kind:`hosted`,onLeaderReady:t=>{fetch(l(`/api/cloud-status`),{method:`POST`,headers:u({"content-type":`application/json`}),body:JSON.stringify({joinUrl:t.joinUrl,trayId:t.trayId,controllerUrl:t.controllerUrl,webhookUrl:t.webhookUrl,runtime:t.runtime,sliccVersion:`5.40.0`}),signal:AbortSignal.timeout(1e4)}).catch(t=>{e.log.error(`failed to POST /api/cloud-status`,{error:String(t)})})}}}function be(e,t,n,r){let{window:i,log:a}=e;if(e.runtimeMode===`hosted-leader`){i.localStorage.removeItem(v);let o=i.localStorage.getItem(p);if(!o){a.error(`hosted-leader: tray worker base URL not seeded`);return}t.leader=Q({...n(o),...ye(e)}),r(t.leader),L({log:a});return}let o=i.localStorage.getItem(v),s=i.localStorage.getItem(p);o?t.follower=O($(e,o)):s&&(t.leader=Q(n(s)),r(t.leader))}function xe(e,t,n,r){let{window:i,log:a}=e;i.addEventListener(`slicc:tray-join`,r=>{let i=r.detail?.joinUrl;if(!i)return;let o=t.leader;t.leader=null,n();let s=t.follower;t.follower=null;try{o?.stop()}catch(e){a.error(`leader stop threw during tray-join switch`,e)}try{s?.stop()}catch(e){a.error(`previous follower stop threw during tray-join switch`,e)}try{t.follower=O($(e,i))}catch(e){a.error(`tray-join failed`,e)}}),i.addEventListener(`slicc:tray-leave`,e=>{let t=e;r({workerBaseUrl:t.detail?.workerBaseUrl??null,requestId:t.detail?.requestId}).catch(e=>a.error(`tray-leave failed`,e))}),i.addEventListener(`beforeunload`,()=>{t.leader?.stop(),t.follower?.stop()},{once:!0})}async function Se(t){let{loadSprinkleStyles:n}=await e(async()=>{let{loadSprinkleStyles:e}=await import(`./legacy-styles-CuB1P3LZ.js`);return{loadSprinkleStyles:e}},__vite__mapDeps([35,3]));await n();let{client:r,instanceId:i,window:a,log:o}=t,s={leader:null,follower:null},c=typeof BroadcastChannel==`function`?new BroadcastChannel(d(i)):null,l=ge({getSync:()=>s.leader?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};c?.postMessage(t)}});r.setForwardLickHandler(e=>{let t=s.follower?.currentSync;t?t.forwardLick(e):o.warn(`forward-lick dropped: no active follower sync`)});let u=_e(t,s,l),{wireLeaderHooks:f,clearLeaderHooks:p}=ve(t,l),_=async t=>{let{performTrayLeave:n}=await e(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-xQpmmvcJ.js`);return{performTrayLeave:e}},__vite__mapDeps([36,22,1,23,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,0,20,21,24,25]));return await n({workerBaseUrl:t.workerBaseUrl,requestId:t.requestId},{getLeader:()=>s.leader,setLeader:e=>{s.leader=e},getFollower:()=>s.follower,setFollower:e=>{s.follower=e},startLeader:e=>Q(u(e)),clearLeaderHooks:p,wireLeaderHooks:f,storage:a.localStorage,log:o})};return await I({instanceId:i,browser:t.browser,remoteCdpBridge:l,remoteCdpPushChannel:c,getLeader:()=>s.leader,performTrayLeaveLocally:_,window:a}),be(t,s,u,f),te(e=>{a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),a.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(C())),g(e=>{a.localStorage.setItem(m,JSON.stringify(e))}),a.localStorage.setItem(m,JSON.stringify(h())),N(j(),a.localStorage),xe(t,s,p,_),{getLeader:()=>s.leader,getFollower:()=>s.follower,performTrayLeaveLocally:_}}export{Se as wireWcTray};