sliccy 5.4.1 → 5.5.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 (76) hide show
  1. package/dist/ui/assets/{account-store-BSWhkeUU.js → account-store-ek-8-vad.js} +2 -2
  2. package/dist/ui/assets/{account-store-CgAAyHLk.js → account-store-uVmUnqVi.js} +2 -2
  3. package/dist/ui/assets/{adobe-DVOKhr5o.js → adobe-B53UUHRQ.js} +1 -1
  4. package/dist/ui/assets/{adobe-Dabz-c1b.js → adobe-CUUUdCzq.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-y6CyddCs.js → adobe-oauth-state-Cv45ZC7F.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-CWox17CS.js → agent-message-to-chat-EX33cDse.js} +1 -1
  7. package/dist/ui/assets/{apps-CyJkA1Ss.js → apps-CAEkkK-h.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-DD0bOrFE.js → azure-openai-BKN7-_r9.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-DStnDWxb.js → azure-openai-DFKLOD9O.js} +1 -1
  10. package/dist/ui/assets/{connect-surface-D-7hiIJH.js → connect-surface-D1ylnSSy.js} +1 -1
  11. package/dist/ui/assets/dip-B7G-yFNh.js +1 -0
  12. package/dist/ui/assets/{dist-CwUZZxjO.js → dist-BykthAQO.js} +1 -1
  13. package/dist/ui/assets/{dist-DDrbeHp-.js → dist-DoIT4K9j.js} +1 -1
  14. package/dist/ui/assets/{ensure-speech-assets-DhvaWMCZ.js → ensure-speech-assets-BAMSo5xy.js} +1 -1
  15. package/dist/ui/assets/esp8266-qZDXfwS_.js +1 -0
  16. package/dist/ui/assets/{esptool-operations-D6AgovRo.js → esptool-operations-Dqz4H39j.js} +2 -2
  17. package/dist/ui/assets/{fs-B0s5DOPm.js → fs-DUiVyDAh.js} +1 -1
  18. package/dist/ui/assets/{fs-CfNmdIYb.js → fs-DhW0sB4P.js} +2 -2
  19. package/dist/ui/assets/{github-JXOuvOgk.js → github-CEb6Ukrf.js} +2 -2
  20. package/dist/ui/assets/{github-DaqFhOZP.js → github-Djvp2KJc.js} +1 -1
  21. package/dist/ui/assets/{github-copilot-CdXKe3Ig.js → github-copilot-CwlFBczV.js} +1 -1
  22. package/dist/ui/assets/{github-copilot-DWSna0qk.js → github-copilot-D_nIJ9c2.js} +1 -1
  23. package/dist/ui/assets/{hear-BvUxceLo.js → hear-CwRsBtKX.js} +1 -1
  24. package/dist/ui/assets/{kernel-worker-J4YngSNJ.js → kernel-worker-BvRAudrx.js} +18 -18
  25. package/dist/ui/assets/{kokoro-engine-zsom_wfq.js → kokoro-engine-BI-6sX56.js} +1 -1
  26. package/dist/ui/assets/{lick-ws-bridge-Ys5bz6tK.js → lick-ws-bridge-CzKvgnBL.js} +1 -1
  27. package/dist/ui/assets/{lick-ws-bridge-BR2JsTcy.js → lick-ws-bridge-mMPXekwg.js} +1 -1
  28. package/dist/ui/assets/{local-llm-BsCfySh9.js → local-llm-fqZ0fO9H.js} +1 -1
  29. package/dist/ui/assets/{main-BYXYn5lL.js → main-FJNMV_71.js} +4 -4
  30. package/dist/ui/assets/{mount-RI83s6cq.js → mount-CuXSlUe4.js} +1 -1
  31. package/dist/ui/assets/{mount-D5aZn5UA.js → mount-DU8rtYg8.js} +2 -2
  32. package/dist/ui/assets/{new-session-D1pUlqr9.js → new-session-RQLW9UpV.js} +2 -2
  33. package/dist/ui/assets/{oauth-bootstrap-DnFRqhTe.js → oauth-bootstrap-BTpmul3n.js} +2 -2
  34. package/dist/ui/assets/{openai-codex-BWS9sBDG.js → openai-codex-BiuU54bP.js} +1 -1
  35. package/dist/ui/assets/{openai-codex-CTCaZUVt.js → openai-codex-Di_Wkz8P.js} +1 -1
  36. package/dist/ui/assets/{page-follower-tray-DCrCjXYf.js → page-follower-tray-eZi5RMQE.js} +1 -1
  37. package/dist/ui/assets/{panel-rpc-handlers-D1fon1hK.js → panel-rpc-handlers-D11yFCCd.js} +1 -1
  38. package/dist/ui/assets/{provider-CwwkGZVJ.js → provider-BG2yHao6.js} +1 -1
  39. package/dist/ui/assets/{provider-C0fCYLH-.js → provider-LWa4i1ss.js} +2 -2
  40. package/dist/ui/assets/provider-store-access-BiIwB6XY.js +1 -0
  41. package/dist/ui/assets/provider-store-access-mtb0ZoHI.js +1 -0
  42. package/dist/ui/assets/{providers-B_eCX3Nu.js → providers-InId80tM.js} +1 -1
  43. package/dist/ui/assets/{quick-llm-m5pdShbE.js → quick-llm-I3lG0JAs.js} +1 -1
  44. package/dist/ui/assets/session-freezer-BBOMQDZu.js +1 -0
  45. package/dist/ui/assets/{speak-CTxSD6c5.js → speak-De8bZX3X.js} +1 -1
  46. package/dist/ui/assets/{sprinkle-manager-DsUKtbgD.js → sprinkle-manager-HrjQYffk.js} +1 -1
  47. package/dist/ui/assets/{store-D0KeVCvq.js → store-BcukSq0d.js} +1 -1
  48. package/dist/ui/assets/{sudo-BOythF7w.js → sudo-DTuVh1ES.js} +1 -1
  49. package/dist/ui/assets/{transformers-env-CiEjooqk.js → transformers-env-CLlJbteI.js} +1 -1
  50. package/dist/ui/assets/{tray-leader-Dm-f62te.js → tray-leader-C0t_8UvQ.js} +1 -1
  51. package/dist/ui/assets/{tray-leave-runtime-BTog2DuL.js → tray-leave-runtime-C0haAPQt.js} +1 -1
  52. package/dist/ui/assets/{upgrade-detection-CnL02iHa.js → upgrade-detection-Cf5EhzTd.js} +1 -1
  53. package/dist/ui/assets/{wc-attach-DvbyWBMw.js → wc-attach-C9_tu3yw.js} +2 -2
  54. package/dist/ui/assets/{wc-detached-9XYAfyPX.js → wc-detached--tazk6dE.js} +1 -1
  55. package/dist/ui/assets/{wc-extension-BhN0fpsk.js → wc-extension-0ostIpBU.js} +2 -2
  56. package/dist/ui/assets/{wc-follower-iuKgs6xl.js → wc-follower-HC4qvoDl.js} +2 -2
  57. package/dist/ui/assets/{wc-live-BIYGig0S.js → wc-live-CC1IJ9qx.js} +5 -5
  58. package/dist/ui/assets/{wc-nav-Cvf1-2nX.js → wc-nav-BGRbM4u_.js} +2 -2
  59. package/dist/ui/assets/{wc-onboarding-CUwGI4YF.js → wc-onboarding-CJV5ViMw.js} +2 -2
  60. package/dist/ui/assets/{wc-placeholder-Bfe2f-DP.js → wc-placeholder-DLEqGc0p.js} +3 -3
  61. package/dist/ui/assets/{wc-settings-CxXvMDY5.js → wc-settings-zWM-erHv.js} +2 -2
  62. package/dist/ui/assets/{wc-shell-BjLcm1xH.js → wc-shell-k8zT_CCv.js} +140 -112
  63. package/dist/ui/assets/{wc-sprinkles-CF-l37VL.js → wc-sprinkles-BtPIBmNQ.js} +2 -2
  64. package/dist/ui/assets/{wc-tray-BG2_SPu3.js → wc-tray-BJZGo5tr.js} +2 -2
  65. package/dist/ui/assets/{whisper-engine-V1cvMrOk.js → whisper-engine-DCpr74_i.js} +1 -1
  66. package/dist/ui/assets/{xai-grok-CuAKXYhq.js → xai-grok-BecRhwSG.js} +1 -1
  67. package/dist/ui/assets/{xai-grok-BUrTSCNQ.js → xai-grok-frRBdi_g.js} +1 -1
  68. package/dist/ui/electron-overlay-entry.js +125 -97
  69. package/dist/ui/index.html +2 -2
  70. package/dist/ui/packages/webapp/index.html +2 -2
  71. package/package.json +1 -1
  72. package/dist/ui/assets/dip-CyGE3IVW.js +0 -1
  73. package/dist/ui/assets/esp8266-ClLgRR2o.js +0 -1
  74. package/dist/ui/assets/provider-store-access-CxKSyOVg.js +0 -1
  75. package/dist/ui/assets/provider-store-access-D6KoHCRf.js +0 -1
  76. package/dist/ui/assets/session-freezer-BxRf88jp.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DqT2FG7c.js","assets/chunk-aKtaBQYM.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,t as i}from"./proxied-fetch-CKDBmEMl.js";import{t as a}from"./quick-llm-m5pdShbE.js";import{installPanelSudoResponder as o,n as s}from"./panel-responder-BKgfV-nl.js";var c=t(`sudo-suggest`),l=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,t as i}from"./proxied-fetch-CKDBmEMl.js";import{t as a}from"./quick-llm-I3lG0JAs.js";import{installPanelSudoResponder as o,n as s}from"./panel-responder-BKgfV-nl.js";var c=t(`sudo-suggest`),l=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
3
3
  `),u=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
4
4
  `);async function d(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?l:u,i=null;try{i=await a({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){c.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return f(i)||n}function f(e){if(!e)return null;let t=(e.split(`
5
5
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}var p=t(`sudo-ext`);function m(e={}){let t=e.suggest??d;return{async requestApproval(e){let n;try{n=await t(e)}catch{n=e.detail}return h({...e,suggestedPattern:n})}}}function h(e){return new Promise(t=>{let n=globalThis.chrome?.runtime;if(!n||typeof n.sendMessage!=`function`){p.warn(`chrome.runtime.sendMessage unavailable — denying`),t({decision:`deny`});return}let r=r=>{let i=n.lastError;if(i){p.warn(`sudo relay lastError — denying`,{error:i.message}),t({decision:`deny`});return}if(!r||typeof r!=`object`){p.warn(`sudo relay empty response — denying`),t({decision:`deny`});return}let a=r;if(!a.ok||!a.decision){p.warn(`sudo relay error response — denying`,{error:a.error}),t({decision:`deny`});return}t(g(a.decision,e.suggestedPattern??e.detail))};try{n.sendMessage({source:`offscreen`,payload:{type:s,request:e}},r)}catch(e){p.warn(`sudo relay threw — denying`,{error:e instanceof Error?e.message:String(e)}),t({decision:`deny`})}})}function g(e,t){return e.decision===`allow`?{decision:`allow`}:e.decision===`always`?{decision:`always`,pattern:typeof e.pattern==`string`&&e.pattern.trim().length>0?e.pattern.trim():t}:{decision:`deny`}}var _=t(`sudo-http`);function v(e={}){let t=e.fetchImpl??globalThis.fetch.bind(globalThis),r=e.path??`/api/sudo-approve`,a=e.suggest??d;return{async requestApproval(e){let o;try{o=await a(e)}catch{o=e.detail}try{let a=await t(n(r),{method:`POST`,headers:i({"Content-Type":`application/json`}),body:JSON.stringify({kind:e.kind,detail:e.detail,suggestedPattern:o})});return a.ok?y(await a.json(),o):(_.warn(`sudo endpoint returned non-OK status — denying`,{status:a.status}),{decision:`deny`})}catch(e){return _.warn(`sudo endpoint request failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function y(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var b=t(`sudo-panel-rpc`),x=6e5;function S(t={}){let n=t.suggest??d,r=t.timeoutMs??x,i=t.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DqT2FG7c.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e){let t;try{t=await n(e)}catch{t=e.detail}let a={...e,suggestedPattern:t},o;try{o=await i()}catch(e){return b.warn(`panel-RPC client lookup threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}if(!o)return b.warn(`panel-RPC client unavailable in worker realm — denying`),{decision:`deny`};try{let{decision:e}=await o.call(`sudo-request`,{request:a},{timeoutMs:r});return C(e,t)}catch(e){return b.warn(`sudo panel-RPC relay failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function C(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var w=t(`sudo`),T=`__slicc_sudo`;function E(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function D(){return typeof chrome>`u`&&r()!==null}function O(){return E()?m():D()?S():v()}function k(e=O()){let t={requestApproval:t=>e.requestApproval(t)};return globalThis[T]=t,w.info(`sudo broker test hook published on globalThis.__slicc_sudo`),t}export{o as installPanelSudoResponder,k as installSudoTestHook};
@@ -1 +1 @@
1
- import{o as e,t}from"./proxied-fetch-CM0jk_Mr.js";import{d as n,f as r}from"./kernel-worker-J4YngSNJ.js";function i(e=()=>Date.now()){let t=new Map,n=null,r=0,i=()=>{let e=0,n=0;for(let r of t.values())e+=r.loaded,n+=r.total;return{loaded:e,total:n}};return{update(a,o,s){t.set(a,{loaded:Math.max(0,o),total:Math.max(t.get(a)?.total??0,s,o)}),n===null&&(n=e(),r=i().loaded)},complete(e){let n=t.get(e);n&&(n.loaded=n.total)},snapshot(){let{loaded:t,total:a}=i(),o=null;if(n!==null&&a>0&&t<a){let i=e()-n,s=t-r;if(i>=1e3&&s>0){let e=s/i;o=(a-t)/e/1e3}}return a>0&&t>=a&&(o=0),{loaded:t,total:a,etaSeconds:o}}}}const a=Symbol.for(`slicc.transformers-env.fetch-wrapped`),o=()=>typeof chrome<`u`&&!!chrome?.runtime?.id,s=`/workspace/node_modules/onnxruntime-web/dist/`,c=`/workspace/models/`;function l(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function u(e){let t=l(e);return t.startsWith(`http://`)||t.startsWith(`https://`)}function d(){return globalThis.location?.origin??null}function f(e){let t=d();if(!t)return!1;try{return new URL(l(e)).origin===t}catch{return!1}}async function p(n,r){let i=l(n),a={};r?.headers&&new Headers(r.headers).forEach((e,t)=>{a[t]=e});let o=t({...a,"X-Target-URL":i}),s=(r?.method??`GET`).toUpperCase(),c={method:s,headers:o,cache:`no-store`};return r?.body&&s!==`GET`&&s!==`HEAD`&&(c.body=r.body),fetch(e(`/api/fetch-proxy`),c)}const m=[`ort-wasm-simd-threaded.jsep.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.jsep.wasm`,`ort-wasm-simd-threaded.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort.wasm`],h=Symbol.for(`slicc.transformers-env.vfs-enoent`);function g(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable in this realm`));let t=new BroadcastChannel(`preview-vfs`),n=`tfx-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,s),t.close(),e()},o=setTimeout(()=>{let t=Error(`ENOENT: ${e} (preview-vfs responder timed out)`);t[h]=!0,a(()=>i(t))},3e4),s=t=>{let s=t.data;if(s?.type!==`preview-vfs-response`||s.id!==n)return;if(clearTimeout(o),typeof s.error==`string`){let e=Error(s.error);s.error.includes(`ENOENT`)&&(e[h]=!0),a(()=>i(e));return}let c=s.content;if(c instanceof Uint8Array){a(()=>r(c));return}if(typeof c==`string`){a(()=>r(new TextEncoder().encode(c)));return}a(()=>i(Error(`Unexpected empty preview-vfs response for ${e}`)))};t.addEventListener(`message`,s),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}function _(e){return!!e?.[h]}function v(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}function y(e,t){return!t||!e.startsWith(t)?null:`${c}${e.slice(t.length).split(`?`)[0].split(`#`)[0]}`}async function b(e,t){let r;try{r=await g(e)}catch(t){if(_(t))return new Response(`Not found: ${e}`,{status:404,headers:{"Content-Type":`text/plain`}});throw t}let i=n(e);return(t?.headers?new Headers(t.headers).get(`range`):null)===`bytes=0-0`?new Response(null,{status:206,headers:{"Content-Type":i,"Content-Length":String(r.byteLength),"Content-Range":`bytes 0-0/${r.byteLength}`}}):new Response(v(r),{status:200,headers:{"Content-Type":i,"Content-Length":String(r.byteLength)}})}let x=null;async function S(){if(typeof URL>`u`||typeof URL.createObjectURL!=`function`)throw Error(`onnxruntime-web blob URLs require URL.createObjectURL (browser realm only)`);let e={};if(await Promise.all(m.map(async t=>{try{let r=await g(`${s}${t}`),i=new Blob([v(r)],{type:n(t)});e[t]=URL.createObjectURL(i)}catch(e){if(!_(e))throw e}})),Object.keys(e).length===0)throw Error("onnxruntime-web is not installed — run `ipk add onnxruntime-web` to stage the wasm runtime in /workspace/node_modules/.");return e}function C(){return x||=S(),x}function w(e){let t=e.backends?.onnx?.wasm;if(t&&(t.wasmPaths=r(s)),e.allowRemoteModels=!1,e.allowLocalModels=!0,e.localModelPath=r(c),o())return;e.allowRemoteModels=!0,e.remoteHost=e.localModelPath,e.remotePathTemplate=`{model}/`,t&&C().then(e=>{t.wasmPaths=e},()=>{});let n=e.fetch;if(n?.[a])return;let i=n,d=e.localModelPath,m=async(e,t)=>{let n=y(l(e),d);return n===null?!u(e)||f(e)?i?i(e,t):fetch(e,t):p(e,t):b(n,t)};m[a]=!0,e.fetch=m}async function T(e){let t=`weights for ${e} are missing — run \`hf download ${e}\` to fetch them into /workspace/models/.`;try{await g(`${c}${e}/config.json`)}catch(e){if(_(e))throw Error(t);let n=e instanceof Error?e.message:String(e);throw Error(`${t} (probe failed: ${n})`)}}export{i as a,w as i,m as n,T as r,s as t};
1
+ import{o as e,t}from"./proxied-fetch-CM0jk_Mr.js";import{d as n,f as r}from"./kernel-worker-BvRAudrx.js";function i(e=()=>Date.now()){let t=new Map,n=null,r=0,i=()=>{let e=0,n=0;for(let r of t.values())e+=r.loaded,n+=r.total;return{loaded:e,total:n}};return{update(a,o,s){t.set(a,{loaded:Math.max(0,o),total:Math.max(t.get(a)?.total??0,s,o)}),n===null&&(n=e(),r=i().loaded)},complete(e){let n=t.get(e);n&&(n.loaded=n.total)},snapshot(){let{loaded:t,total:a}=i(),o=null;if(n!==null&&a>0&&t<a){let i=e()-n,s=t-r;if(i>=1e3&&s>0){let e=s/i;o=(a-t)/e/1e3}}return a>0&&t>=a&&(o=0),{loaded:t,total:a,etaSeconds:o}}}}const a=Symbol.for(`slicc.transformers-env.fetch-wrapped`),o=()=>typeof chrome<`u`&&!!chrome?.runtime?.id,s=`/workspace/node_modules/onnxruntime-web/dist/`,c=`/workspace/models/`;function l(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function u(e){let t=l(e);return t.startsWith(`http://`)||t.startsWith(`https://`)}function d(){return globalThis.location?.origin??null}function f(e){let t=d();if(!t)return!1;try{return new URL(l(e)).origin===t}catch{return!1}}async function p(n,r){let i=l(n),a={};r?.headers&&new Headers(r.headers).forEach((e,t)=>{a[t]=e});let o=t({...a,"X-Target-URL":i}),s=(r?.method??`GET`).toUpperCase(),c={method:s,headers:o,cache:`no-store`};return r?.body&&s!==`GET`&&s!==`HEAD`&&(c.body=r.body),fetch(e(`/api/fetch-proxy`),c)}const m=[`ort-wasm-simd-threaded.jsep.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.jsep.wasm`,`ort-wasm-simd-threaded.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort.wasm`],h=Symbol.for(`slicc.transformers-env.vfs-enoent`);function g(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable in this realm`));let t=new BroadcastChannel(`preview-vfs`),n=`tfx-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,s),t.close(),e()},o=setTimeout(()=>{let t=Error(`ENOENT: ${e} (preview-vfs responder timed out)`);t[h]=!0,a(()=>i(t))},3e4),s=t=>{let s=t.data;if(s?.type!==`preview-vfs-response`||s.id!==n)return;if(clearTimeout(o),typeof s.error==`string`){let e=Error(s.error);s.error.includes(`ENOENT`)&&(e[h]=!0),a(()=>i(e));return}let c=s.content;if(c instanceof Uint8Array){a(()=>r(c));return}if(typeof c==`string`){a(()=>r(new TextEncoder().encode(c)));return}a(()=>i(Error(`Unexpected empty preview-vfs response for ${e}`)))};t.addEventListener(`message`,s),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}function _(e){return!!e?.[h]}function v(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}function y(e,t){return!t||!e.startsWith(t)?null:`${c}${e.slice(t.length).split(`?`)[0].split(`#`)[0]}`}async function b(e,t){let r;try{r=await g(e)}catch(t){if(_(t))return new Response(`Not found: ${e}`,{status:404,headers:{"Content-Type":`text/plain`}});throw t}let i=n(e);return(t?.headers?new Headers(t.headers).get(`range`):null)===`bytes=0-0`?new Response(null,{status:206,headers:{"Content-Type":i,"Content-Length":String(r.byteLength),"Content-Range":`bytes 0-0/${r.byteLength}`}}):new Response(v(r),{status:200,headers:{"Content-Type":i,"Content-Length":String(r.byteLength)}})}let x=null;async function S(){if(typeof URL>`u`||typeof URL.createObjectURL!=`function`)throw Error(`onnxruntime-web blob URLs require URL.createObjectURL (browser realm only)`);let e={};if(await Promise.all(m.map(async t=>{try{let r=await g(`${s}${t}`),i=new Blob([v(r)],{type:n(t)});e[t]=URL.createObjectURL(i)}catch(e){if(!_(e))throw e}})),Object.keys(e).length===0)throw Error("onnxruntime-web is not installed — run `ipk add onnxruntime-web` to stage the wasm runtime in /workspace/node_modules/.");return e}function C(){return x||=S(),x}function w(e){let t=e.backends?.onnx?.wasm;if(t&&(t.wasmPaths=r(s)),e.allowRemoteModels=!1,e.allowLocalModels=!0,e.localModelPath=r(c),o())return;e.allowRemoteModels=!0,e.remoteHost=e.localModelPath,e.remotePathTemplate=`{model}/`,t&&C().then(e=>{t.wasmPaths=e},()=>{});let n=e.fetch;if(n?.[a])return;let i=n,d=e.localModelPath,m=async(e,t)=>{let n=y(l(e),d);return n===null?!u(e)||f(e)?i?i(e,t):fetch(e,t):p(e,t):b(n,t)};m[a]=!0,e.fetch=m}async function T(e){let t=`weights for ${e} are missing — run \`hf download ${e}\` to fetch them into /workspace/models/.`;try{await g(`${c}${e}/config.json`)}catch(e){if(_(e))throw Error(t);let n=e instanceof Error?e.message:String(e);throw Error(`${t} (probe failed: ${n})`)}}export{i as a,w as i,m as n,T as r,s as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{a as t,l as n,t as r,u as i}from"./proxied-fetch-CKDBmEMl.js";import{_ as a}from"./main-BYXYn5lL.js";var o=`slicc-groups`,s=3,c={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},l=null;function u(e){if(!e.objectStoreNames.contains(c.MESSAGES)){let t=e.createObjectStore(c.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(c.SESSIONS)||e.createObjectStore(c.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(c.TASKS)||e.createObjectStore(c.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(c.STATE)||e.createObjectStore(c.STATE,{keyPath:`key`})}function d(e){let t=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function f(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(c.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let t of e)r.put(d(t))};return}t.objectStoreNames.contains(c.SCOOPS)||t.createObjectStore(c.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function p(e){e.objectStoreNames.contains(c.WEBHOOKS)||e.createObjectStore(c.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(c.CRONTASKS)||e.createObjectStore(c.CRONTASKS,{keyPath:`id`})}function m(e){let t=e.target.result,n=e.oldVersion;n<1&&u(t),n<2&&f(e,t),n<3&&p(t)}function h(){if(!l)return null;let e=Object.values(c).every(e=>l.objectStoreNames.contains(e));return l.version===s&&e?l:(l.close(),l=null,null)}function g(e){e.onversionchange=()=>{e.close(),l===e&&(l=null)},e.onclose=()=>{l===e&&(l=null)}}async function _(){return h()||new Promise((e,t)=>{let n=indexedDB.open(o,s);n.onupgradeneeded=m,n.onsuccess=()=>{let t=n.result;g(t),l=t,e(t)},n.onerror=()=>t(n.error)})}async function v(e,t=`readonly`){return(await _()).transaction(e,t).objectStore(e)}async function y(e){let t=await v(c.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function b(e,t){let n=await v(c.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var x=e(`tray-leader`),S=`leader-tray-session`,C=3e4,w=1e4,T=1e3,E=3e4,D=2,O=20,k={state:`inactive`,session:null,error:null};function A(){return{...k,session:k.session?{...k.session}:null}}var j=new Set;function M(e){return j.add(e),()=>{j.delete(e)}}function N(e){if(k={...e,session:e.session?{...e.session}:null},j.size!==0)for(let e of[...j])try{e(A())}catch{}}var P=class{key;constructor(e=S){this.key=e}async load(){return F(await y(this.key))}async save(e){await b(this.key,JSON.stringify(e))}async clear(){await b(this.key,``)}};function F(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var I=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new P,this.fetchImpl=e.fetchImpl??V(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??C,this.connectTimeoutMs=e.connectTimeoutMs??w;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??T,this.reconnectMaxDelayMs=n.maxDelayMs??E,this.reconnectBackoffMultiplier=n.backoffMultiplier??D,this.reconnectMaxAttempts=n.maxAttempts??O,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return N({state:`leader`,session:this.currentSession,error:null}),this.currentSession;N({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();x.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){x.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw N({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,N({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),N({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){x.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,N({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;x.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,N({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),x.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,x.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){x.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),x.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,N({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),x.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!z(t))throw t;return x.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear(),this.claimLeaderSession(null)}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(a(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=B(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){x.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{x.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await L.fromResponse(n);return await n.json()}},L=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}},R=class extends Error{constructor(e){super(e),this.name=`TrayProxyFetchError`}};function z(e){return e instanceof R?!0:e instanceof L?e.status===403||e.status===404||e.status===410||e.status>=500:!1}function B(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function V(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(a,o={})=>{let s=typeof a==`string`?a:a.toString();try{if(new URL(s).origin===window.location.origin)return e(s,{...o,cache:`no-store`})}catch{}let c=new Headers(o.headers);c.set(`X-Target-URL`,s);for(let[e,t]of Object.entries(r()))c.set(e,t);let l=await e(t(`/api/fetch-proxy`),{...o,headers:c,cache:`no-store`});if(n(l))throw new R(await i(l));return l}}export{M as i,A as n,N as r,I as t};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{a as t,l as n,t as r,u as i}from"./proxied-fetch-CKDBmEMl.js";import{_ as a}from"./main-FJNMV_71.js";var o=`slicc-groups`,s=3,c={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},l=null;function u(e){if(!e.objectStoreNames.contains(c.MESSAGES)){let t=e.createObjectStore(c.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(c.SESSIONS)||e.createObjectStore(c.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(c.TASKS)||e.createObjectStore(c.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(c.STATE)||e.createObjectStore(c.STATE,{keyPath:`key`})}function d(e){let t=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function f(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(c.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let t of e)r.put(d(t))};return}t.objectStoreNames.contains(c.SCOOPS)||t.createObjectStore(c.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function p(e){e.objectStoreNames.contains(c.WEBHOOKS)||e.createObjectStore(c.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(c.CRONTASKS)||e.createObjectStore(c.CRONTASKS,{keyPath:`id`})}function m(e){let t=e.target.result,n=e.oldVersion;n<1&&u(t),n<2&&f(e,t),n<3&&p(t)}function h(){if(!l)return null;let e=Object.values(c).every(e=>l.objectStoreNames.contains(e));return l.version===s&&e?l:(l.close(),l=null,null)}function g(e){e.onversionchange=()=>{e.close(),l===e&&(l=null)},e.onclose=()=>{l===e&&(l=null)}}async function _(){return h()||new Promise((e,t)=>{let n=indexedDB.open(o,s);n.onupgradeneeded=m,n.onsuccess=()=>{let t=n.result;g(t),l=t,e(t)},n.onerror=()=>t(n.error)})}async function v(e,t=`readonly`){return(await _()).transaction(e,t).objectStore(e)}async function y(e){let t=await v(c.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function b(e,t){let n=await v(c.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var x=e(`tray-leader`),S=`leader-tray-session`,C=3e4,w=1e4,T=1e3,E=3e4,D=2,O=20,k={state:`inactive`,session:null,error:null};function A(){return{...k,session:k.session?{...k.session}:null}}var j=new Set;function M(e){return j.add(e),()=>{j.delete(e)}}function N(e){if(k={...e,session:e.session?{...e.session}:null},j.size!==0)for(let e of[...j])try{e(A())}catch{}}var P=class{key;constructor(e=S){this.key=e}async load(){return F(await y(this.key))}async save(e){await b(this.key,JSON.stringify(e))}async clear(){await b(this.key,``)}};function F(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var I=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new P,this.fetchImpl=e.fetchImpl??V(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??C,this.connectTimeoutMs=e.connectTimeoutMs??w;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??T,this.reconnectMaxDelayMs=n.maxDelayMs??E,this.reconnectBackoffMultiplier=n.backoffMultiplier??D,this.reconnectMaxAttempts=n.maxAttempts??O,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return N({state:`leader`,session:this.currentSession,error:null}),this.currentSession;N({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();x.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){x.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw N({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,N({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),N({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){x.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,N({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;x.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,N({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),x.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,x.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){x.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),x.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,N({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),x.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!z(t))throw t;return x.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear(),this.claimLeaderSession(null)}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(a(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=B(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){x.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{x.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await L.fromResponse(n);return await n.json()}},L=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}},R=class extends Error{constructor(e){super(e),this.name=`TrayProxyFetchError`}};function z(e){return e instanceof R?!0:e instanceof L?e.status===403||e.status===404||e.status===410||e.status>=500:!1}function B(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function V(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(a,o={})=>{let s=typeof a==`string`?a:a.toString();try{if(new URL(s).origin===window.location.origin)return e(s,{...o,cache:`no-store`})}catch{}let c=new Headers(o.headers);c.set(`X-Target-URL`,s);for(let[e,t]of Object.entries(r()))c.set(e,t);let l=await e(t(`/api/fetch-proxy`),{...o,headers:c,cache:`no-store`});if(n(l))throw new R(await i(l));return l}}export{M as i,A as n,N as r,I as t};
@@ -1 +1 @@
1
- import{h as e,m as t}from"./main-BYXYn5lL.js";async function n(n,i){let a=i.getLeader()?`leader`:i.getFollower()?`follower`:`inactive`,o=i.getLeader();i.setLeader(null);let s=i.getFollower();i.setFollower(null),i.clearLeaderHooks();let{requestId:c}=n;try{o?.stop()}catch(e){i.log.error(`Leader stop threw during tray-leave — resources may have leaked`,{requestId:c,error:e instanceof Error?e.message:String(e)})}try{s?.stop()}catch(e){i.log.error(`Follower stop threw during tray-leave — resources may have leaked`,{requestId:c,error:e instanceof Error?e.message:String(e)})}if(r(()=>i.storage.removeItem(t),i.log,`join-clear`,c),n.workerBaseUrl===null)return r(()=>i.storage.removeItem(e),i.log,`worker-clear`,c),a===`inactive`?{kind:`noop`}:{kind:`left`,previousMode:a};let l=n.workerBaseUrl,u;try{u=i.startLeader(l)}catch(t){throw i.log.error(`startLeader failed during tray-leave — runtime is now dormant`,{workerBaseUrl:l,requestId:c,error:t instanceof Error?t.message:String(t)}),r(()=>i.storage.removeItem(e),i.log,`worker-clear-on-failure`,c),t}return i.setLeader(u),i.wireLeaderHooks(u),r(()=>i.storage.setItem(e,l),i.log,`worker-set`,c),{kind:`switched`,previousMode:a,workerBaseUrl:l}}function r(e,t,n,r){try{e()}catch(e){t.error(`tray-leave storage write failed`,{kind:n,requestId:r,error:e instanceof Error?e.message:String(e)})}}export{n as performTrayLeave};
1
+ import{h as e,m as t}from"./main-FJNMV_71.js";async function n(n,i){let a=i.getLeader()?`leader`:i.getFollower()?`follower`:`inactive`,o=i.getLeader();i.setLeader(null);let s=i.getFollower();i.setFollower(null),i.clearLeaderHooks();let{requestId:c}=n;try{o?.stop()}catch(e){i.log.error(`Leader stop threw during tray-leave — resources may have leaked`,{requestId:c,error:e instanceof Error?e.message:String(e)})}try{s?.stop()}catch(e){i.log.error(`Follower stop threw during tray-leave — resources may have leaked`,{requestId:c,error:e instanceof Error?e.message:String(e)})}if(r(()=>i.storage.removeItem(t),i.log,`join-clear`,c),n.workerBaseUrl===null)return r(()=>i.storage.removeItem(e),i.log,`worker-clear`,c),a===`inactive`?{kind:`noop`}:{kind:`left`,previousMode:a};let l=n.workerBaseUrl,u;try{u=i.startLeader(l)}catch(t){throw i.log.error(`startLeader failed during tray-leave — runtime is now dormant`,{workerBaseUrl:l,requestId:c,error:t instanceof Error?t.message:String(t)}),r(()=>i.storage.removeItem(e),i.log,`worker-clear-on-failure`,c),t}return i.setLeader(u),i.wireLeaderHooks(u),r(()=>i.storage.setItem(e,l),i.log,`worker-set`,c),{kind:`switched`,previousMode:a,workerBaseUrl:l}}function r(e,t,n,r){try{e()}catch(e){t.error(`tray-leave storage write failed`,{kind:n,requestId:r,error:e instanceof Error?e.message:String(e)})}}export{n as performTrayLeave};
@@ -1 +1 @@
1
- import{C as e,w as t}from"./kernel-worker-J4YngSNJ.js";const n=`slicc:last-seen-version`;function r(){return{version:`5.4.1`,releasedAt:`2026-06-25T10:55:23Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};
1
+ import{C as e,w as t}from"./kernel-worker-BvRAudrx.js";const n=`slicc:last-seen-version`;function r(){return{version:`5.5.0`,releasedAt:`2026-06-25T11:34:18Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-BjLcm1xH.js","assets/chunk-aKtaBQYM.js","assets/preload-helper-zJ_50EbN.js","assets/icons-BU6llBsN.js","assets/main-BYXYn5lL.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-CgAAyHLk.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/clipboard-DgFtRQbq.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.js","assets/wc-shell-WkeczD9x.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-k8zT_CCv.js","assets/chunk-aKtaBQYM.js","assets/preload-helper-zJ_50EbN.js","assets/icons-BU6llBsN.js","assets/main-FJNMV_71.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/account-store-uVmUnqVi.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/clipboard-DgFtRQbq.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.js","assets/wc-shell-WkeczD9x.css"])))=>i.map(i=>d[i]);
2
2
  import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./wc-permissions-registry-CR1rTd2H.js";var n=8,r=2e3,i=[`/workspace`,`/shared`,`/tmp`],a=8,o=new Set([`node_modules`,`.git`]),s=1e4,c=/\.(png|jpe?g|gif|webp|svg|avif)$/i,l=4*1024*1024,u=256*1024;function d(){return`att-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function f(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function p(e){return{png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,avif:`image/avif`,md:`text/markdown`,json:`application/json`}[e.toLowerCase().split(`.`).pop()??``]??`text/plain`}function m(e,t){let n={id:d(),name:e,size:t.length};if(c.test(e))return t.length>l?{...n,mimeType:p(e),kind:`image`,error:`image too large to inline`}:{...n,mimeType:p(e),kind:`image`,data:f(t)};let r={...n,mimeType:p(e),kind:`file`};return t.length>u?{...r,error:`file too large to inline`}:r}async function h(e){let t=new Uint8Array(await e.arrayBuffer()),n=m(e.name,t);return e.type?{...n,mimeType:e.type}:n}function g(e,t){let n=t.match(/^data:(image\/[^;]+);base64,(.+)$/);return n?{id:d(),name:e,mimeType:n[1],size:Math.floor(n[2].length*3/4),kind:`image`,data:n[2]}:null}var _=`/tmp/upload`,v=1568;function y(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}async function b(e,t,n){await e.mkdir(_,{recursive:!0}).catch(()=>void 0);let r=`${_}/${Date.now()}-${t.replace(/[^A-Za-z0-9._-]+/g,`_`)}`;return await e.writeFile(r,n),r}async function x(e,t=v){let n=new Image;n.src=e;try{await n.decode()}catch{return e}let r=Math.min(1,t/Math.max(n.naturalWidth,n.naturalHeight,1));if(r>=1)return e;let i=document.createElement(`canvas`);return i.width=Math.round(n.naturalWidth*r),i.height=Math.round(n.naturalHeight*r),i.getContext(`2d`)?.drawImage(n,0,0,i.width,i.height),i.toDataURL(`image/jpeg`,.85)}async function S(e,t,n){let r=g(e,t);if(!r)return null;let i;return n&&r.data&&(i=await b(n,e,y(r.data)).catch(()=>void 0)),{...g(e,await x(t).catch(()=>t))??r,name:e,path:i}}async function C(e,t,n){if(!n)return null;let r=new Uint8Array(await t.arrayBuffer()),i=await b(n,e,r).catch(()=>void 0);return i?{id:d(),name:e,mimeType:t.type||`video/webm`,size:r.length,kind:`file`,path:i}:null}async function w(e){let t=[],n=i.map(e=>({dir:e,depth:0}));for(;n.length>0&&t.length<r;){let{dir:i,depth:s}=n.shift(),c;try{c=await e.readDir(i)}catch{continue}for(let e of c){let c=`${i}/${e.name}`;if(e.type===`directory`)s<a&&!o.has(e.name)&&n.push({dir:c,depth:s+1});else if(t.push(c),t.length>=r)break}}return t}function T(e){let t=null;return async r=>{let i=await e.openReader();(!t||Date.now()-t.at>s)&&(t={at:Date.now(),paths:await w(i)});let a=e=>r===``||e.toLowerCase().includes(r),o=t.paths.filter(e=>a(e)).slice(0,n).map(e=>({id:e,label:e.split(`/`).pop()??e,sub:e.slice(0,e.lastIndexOf(`/`))})),c=[];try{c=(await i.readDir(`/workspace/skills`)).filter(e=>e.type===`directory`&&a(e.name)).slice(0,n).map(e=>({id:e.name,label:e.name}))}catch{}let l=(await e.listConversations().catch(()=>[])).filter(e=>a(e.label)).slice(0,n);return[{kind:`file`,label:`Files`,icon:`file`,entries:o},{kind:`skill`,label:`Skills`,icon:`sparkles`,entries:c},{kind:`conversation`,label:`Conversations`,icon:`message-square`,entries:l}]}}var E=`slicc-wc-attach-style`,D=`
3
3
  .wcatt{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px 0;font-family:var(--ui);}
4
4
  .wcatt:empty{display:none;}
@@ -10,4 +10,4 @@ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./wc-permissions-
10
10
  .wcatt__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
11
11
  font:inherit;padding:0;line-height:1;}
12
12
  .wcatt__x:hover{color:var(--ink);}
13
- `,O=class{#e;#t=[];constructor(e){if(!document.getElementById(E)){let e=document.createElement(`style`);e.id=E,e.textContent=D,document.head.appendChild(e)}this.#e=document.createElement(`div`),this.#e.className=`wcatt`,e.prepend(this.#e)}get items(){return this.#t}add(e){this.#t.push(e),this.#n()}take(){let e=this.#t;return this.#t=[],this.#n(),e}#n(){this.#e.replaceChildren(...this.#t.map(e=>this.#r(e)))}#r(t){let n=document.createElement(`span`);if(n.className=`wcatt__chip`,t.kind===`image`&&t.data){let r=document.createElement(`img`);r.className=`wcatt__thumb`,r.src=`data:${t.mimeType};base64,${t.data}`,r.alt=t.name,r.addEventListener(`click`,()=>{e(async()=>{let{SliccImagePreview:e}=await import(`./wc-shell-BjLcm1xH.js`).then(e=>e.h);return{SliccImagePreview:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])).then(({SliccImagePreview:e})=>e.show(r.src,r))}),n.append(r)}let r=document.createElement(`span`);r.className=`wcatt__name`,r.textContent=t.name;let i=document.createElement(`button`);return i.type=`button`,i.className=`wcatt__x`,i.setAttribute(`aria-label`,`Remove ${t.name}`),i.textContent=`×`,i.addEventListener(`click`,()=>{this.#t=this.#t.filter(e=>e.id!==t.id),this.#n()}),n.append(r,i),n}};async function k(e){let t=document.createElement(`video`);t.srcObject=e,t.muted=!0;try{await t.play(),await new Promise(e=>requestAnimationFrame(()=>e(null)));let e=document.createElement(`canvas`);return e.width=t.videoWidth,e.height=t.videoHeight,e.width===0||e.height===0?null:(e.getContext(`2d`)?.drawImage(t,0,0),e.toDataURL(`image/png`))}finally{for(let t of e.getTracks())t.stop();t.srcObject=null}}async function A(){let e=t();if(e){let t=await e.request(`screenshare`,{constraints:{video:!0}});if(!t)return null;let n=t.stream;return k(n)}return k(await navigator.mediaDevices.getDisplayMedia({video:!0}))}async function j(e,n){let r=t();if(!r)return null;let i=await r.prompt({kinds:e,description:n});for(let e of i.grants)if(e.kind===`camera`||e.kind===`microphone`||e.kind===`screenshare`)for(let t of e.stream.getTracks())t.stop();return i.status===`granted`}var M=`slicc_camera_device`,N=`slicc_microphone_device`,P=[`position:absolute`,`left:50%`,`right:auto`,`transform:translateX(-50%)`,`bottom:56px`,`width:calc(100% - 32px)`,`max-width:680px`,`z-index:3`].join(`;`);async function F(e,t){if(await j([`camera`,`microphone`],`Slicc is requesting access to your camera and microphone to capture a photo or video for this conversation.`)===!1)return null;let n=document.createElement(`slicc-composer-capture`),r=localStorage.getItem(M);r&&n.setAttribute(`preferred-device`,r);let i=localStorage.getItem(N);i&&n.setAttribute(`preferred-audio-device`,i),n.style.cssText=P,n.hidden=!0,n.addEventListener(`slicc-capture-device-change`,e=>{let t=e.detail;if(!t?.deviceId)return;let n=t.kind===`microphone`?N:M;localStorage.setItem(n,t.deviceId)}),e.append(n);try{return await n.open(t)}finally{n.remove()}}async function I(e,t,n){if(!e.dataUrl)return;let r=`photo-${Date.now()}.png`,i=await t.openWriter?.().catch(()=>null)??null,a=await S(r,e.dataUrl,i);a&&n.add(a)}async function L(e,t,n){if(!e.blob)return;let r=/webm/i.test(e.mimeType)?`webm`:`bin`,i=`video-${Date.now()}.${r}`,a=await t.openWriter?.().catch(()=>null)??null,o=await C(i,e.blob,a);o&&n.add(o)}async function R(e,t,n){if(e.mode===`photo`){if(!t.composer){let e=await z();if(!e)return;let r=await S(`photo-${Date.now()}.png`,e,await t.openWriter?.().catch(()=>null)??null);r&&n.add(r);return}let e=await F(t.composer,`photo`);if(!e)return;e.kind===`image`?await I(e,t,n):e.kind===`video`&&await L(e,t,n);return}let r=await A();if(!r)return;let i=await S(`screenshot-${Date.now()}.png`,r,await t.openWriter?.().catch(()=>null)??null);i&&n.add(i)}async function z(){if(await j([`camera`],`Slicc is requesting access to your camera to capture a photo for this conversation.`)===!1)return null;let e=document.createElement(`slicc-camera-dialog`),t=localStorage.getItem(M);t&&e.setAttribute(`preferred-device`,t),e.addEventListener(`slicc-camera-device-change`,e=>{let t=e.detail?.deviceId;t&&localStorage.setItem(M,t)}),document.body.append(e);try{return await e.open()}finally{e.remove()}}async function B(e,t,n){let r=await n.openWriter?.().catch(()=>null)??null,i=r?await b(r,e.name,t).catch(()=>void 0):void 0;return i?{...e,error:void 0,path:i}:e.kind===`image`?e:{...e,error:`could not be saved to the virtual filesystem`}}async function V(e,t,n){let r=e.split(`/`).pop()??e;if(c.test(r)){let i=await(await t.openReader()).readFile(e),a=m(r,typeof i==`string`?new TextEncoder().encode(i):i);n.add({...a,error:void 0,path:e});return}let i=0;try{i=(await(await t.openReader()).stat(e)).size}catch{}n.add({id:d(),name:r,mimeType:p(r),size:i,kind:`file`,path:e})}function H(e,t){let n=t.value??t.getAttribute(`value`)??``,r=n&&!n.endsWith(` `)?` `:``;t.setAttribute(`value`,`${n}${r}Use the "${e}" skill: `)}async function U(e,t,n){if(e.kind===`upload`&&e.file instanceof File){let r=new Uint8Array(await e.file.arrayBuffer());n.add(await B(await h(e.file),r,t))}else e.kind===`capture`?await R(e,t,n):e.kind===`file`&&typeof e.id==`string`?await V(e.id,t,n):e.kind===`skill`&&typeof e.label==`string`?H(e.label,t.inputCard):e.kind===`conversation`&&typeof e.id==`string`&&t.freezer.dispatchEvent(new CustomEvent(`freezer-card-select`,{bubbles:!0,composed:!0,detail:{slug:e.id}}))}function W(e){let{inputCard:t,log:n}=e,r=new O(t),i=t.querySelector(`slicc-add-menu`);return i&&(i.provider=T({openReader:e.openReader,listConversations:e.listConversations}),i.setAttribute(`global-drop`,``)),t.addEventListener(`slicc-add`,t=>{let i=t.detail;i&&U(i,e,r).catch(e=>n.error(`WC add-menu action failed`,e))}),r}export{W as wireWcAttach};
13
+ `,O=class{#e;#t=[];constructor(e){if(!document.getElementById(E)){let e=document.createElement(`style`);e.id=E,e.textContent=D,document.head.appendChild(e)}this.#e=document.createElement(`div`),this.#e.className=`wcatt`,e.prepend(this.#e)}get items(){return this.#t}add(e){this.#t.push(e),this.#n()}take(){let e=this.#t;return this.#t=[],this.#n(),e}#n(){this.#e.replaceChildren(...this.#t.map(e=>this.#r(e)))}#r(t){let n=document.createElement(`span`);if(n.className=`wcatt__chip`,t.kind===`image`&&t.data){let r=document.createElement(`img`);r.className=`wcatt__thumb`,r.src=`data:${t.mimeType};base64,${t.data}`,r.alt=t.name,r.addEventListener(`click`,()=>{e(async()=>{let{SliccImagePreview:e}=await import(`./wc-shell-k8zT_CCv.js`).then(e=>e.h);return{SliccImagePreview:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])).then(({SliccImagePreview:e})=>e.show(r.src,r))}),n.append(r)}let r=document.createElement(`span`);r.className=`wcatt__name`,r.textContent=t.name;let i=document.createElement(`button`);return i.type=`button`,i.className=`wcatt__x`,i.setAttribute(`aria-label`,`Remove ${t.name}`),i.textContent=`×`,i.addEventListener(`click`,()=>{this.#t=this.#t.filter(e=>e.id!==t.id),this.#n()}),n.append(r,i),n}};async function k(e){let t=document.createElement(`video`);t.srcObject=e,t.muted=!0;try{await t.play(),await new Promise(e=>requestAnimationFrame(()=>e(null)));let e=document.createElement(`canvas`);return e.width=t.videoWidth,e.height=t.videoHeight,e.width===0||e.height===0?null:(e.getContext(`2d`)?.drawImage(t,0,0),e.toDataURL(`image/png`))}finally{for(let t of e.getTracks())t.stop();t.srcObject=null}}async function A(){let e=t();if(e){let t=await e.request(`screenshare`,{constraints:{video:!0}});if(!t)return null;let n=t.stream;return k(n)}return k(await navigator.mediaDevices.getDisplayMedia({video:!0}))}async function j(e,n){let r=t();if(!r)return null;let i=await r.prompt({kinds:e,description:n});for(let e of i.grants)if(e.kind===`camera`||e.kind===`microphone`||e.kind===`screenshare`)for(let t of e.stream.getTracks())t.stop();return i.status===`granted`}var M=`slicc_camera_device`,N=`slicc_microphone_device`,P=[`position:absolute`,`left:50%`,`right:auto`,`transform:translateX(-50%)`,`bottom:56px`,`width:calc(100% - 32px)`,`max-width:680px`,`z-index:3`].join(`;`);async function F(e,t){if(await j([`camera`,`microphone`],`Slicc is requesting access to your camera and microphone to capture a photo or video for this conversation.`)===!1)return null;let n=document.createElement(`slicc-composer-capture`),r=localStorage.getItem(M);r&&n.setAttribute(`preferred-device`,r);let i=localStorage.getItem(N);i&&n.setAttribute(`preferred-audio-device`,i),n.style.cssText=P,n.hidden=!0,n.addEventListener(`slicc-capture-device-change`,e=>{let t=e.detail;if(!t?.deviceId)return;let n=t.kind===`microphone`?N:M;localStorage.setItem(n,t.deviceId)}),e.append(n);try{return await n.open(t)}finally{n.remove()}}async function I(e,t,n){if(!e.dataUrl)return;let r=`photo-${Date.now()}.png`,i=await t.openWriter?.().catch(()=>null)??null,a=await S(r,e.dataUrl,i);a&&n.add(a)}async function L(e,t,n){if(!e.blob)return;let r=/webm/i.test(e.mimeType)?`webm`:`bin`,i=`video-${Date.now()}.${r}`,a=await t.openWriter?.().catch(()=>null)??null,o=await C(i,e.blob,a);o&&n.add(o)}async function R(e,t,n){if(e.mode===`photo`){if(!t.composer){let e=await z();if(!e)return;let r=await S(`photo-${Date.now()}.png`,e,await t.openWriter?.().catch(()=>null)??null);r&&n.add(r);return}let e=await F(t.composer,`photo`);if(!e)return;e.kind===`image`?await I(e,t,n):e.kind===`video`&&await L(e,t,n);return}let r=await A();if(!r)return;let i=await S(`screenshot-${Date.now()}.png`,r,await t.openWriter?.().catch(()=>null)??null);i&&n.add(i)}async function z(){if(await j([`camera`],`Slicc is requesting access to your camera to capture a photo for this conversation.`)===!1)return null;let e=document.createElement(`slicc-camera-dialog`),t=localStorage.getItem(M);t&&e.setAttribute(`preferred-device`,t),e.addEventListener(`slicc-camera-device-change`,e=>{let t=e.detail?.deviceId;t&&localStorage.setItem(M,t)}),document.body.append(e);try{return await e.open()}finally{e.remove()}}async function B(e,t,n){let r=await n.openWriter?.().catch(()=>null)??null,i=r?await b(r,e.name,t).catch(()=>void 0):void 0;return i?{...e,error:void 0,path:i}:e.kind===`image`?e:{...e,error:`could not be saved to the virtual filesystem`}}async function V(e,t,n){let r=e.split(`/`).pop()??e;if(c.test(r)){let i=await(await t.openReader()).readFile(e),a=m(r,typeof i==`string`?new TextEncoder().encode(i):i);n.add({...a,error:void 0,path:e});return}let i=0;try{i=(await(await t.openReader()).stat(e)).size}catch{}n.add({id:d(),name:r,mimeType:p(r),size:i,kind:`file`,path:e})}function H(e,t){let n=t.value??t.getAttribute(`value`)??``,r=n&&!n.endsWith(` `)?` `:``;t.setAttribute(`value`,`${n}${r}Use the "${e}" skill: `)}async function U(e,t,n){if(e.kind===`upload`&&e.file instanceof File){let r=new Uint8Array(await e.file.arrayBuffer());n.add(await B(await h(e.file),r,t))}else e.kind===`capture`?await R(e,t,n):e.kind===`file`&&typeof e.id==`string`?await V(e.id,t,n):e.kind===`skill`&&typeof e.label==`string`?H(e.label,t.inputCard):e.kind===`conversation`&&typeof e.id==`string`&&t.freezer.dispatchEvent(new CustomEvent(`freezer-card-select`,{bubbles:!0,composed:!0,detail:{slug:e.id}}))}function W(e){let{inputCard:t,log:n}=e,r=new O(t),i=t.querySelector(`slicc-add-menu`);return i&&(i.provider=T({openReader:e.openReader,listConversations:e.listConversations}),i.setAttribute(`global-drop`,``)),t.addEventListener(`slicc-add`,t=>{let i=t.detail;i&&U(i,e,r).catch(e=>n.error(`WC add-menu action failed`,e))}),r}export{W as wireWcAttach};
@@ -1 +1 @@
1
- import{S as e}from"./main-BYXYn5lL.js";var t=`slicc-detached-overlay`;function n(t){let{client:n,isDetachedSelf:r}=t;chrome.runtime.onMessage.addListener(t=>(!e(t)||t.source!==`service-worker`||t.payload.type!==`detached-active`||r||i(n),!1)),r&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>void 0)}function r(){chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e)})}function i(e){try{window.close()}catch{}e.setLocked(!0),a()}function a(){if(document.getElementById(t))return;let e=document.createElement(`div`);e.id=t,e.style.cssText=`position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center;background:var(--canvas,#fff);color:var(--ink,#111);font:14px/1.5 var(--ui,system-ui)`;let n=document.createElement(`strong`);n.textContent=`SLICC is open in a detached window`;let r=document.createElement(`span`);r.textContent=`This panel yields while the detached window is active.`;let i=document.createElement(`button`);i.textContent=`Close this window`,i.style.cssText=`margin-top:8px;padding:8px 16px;border:none;border-radius:999px;cursor:pointer;background:var(--ink,#111);color:var(--canvas,#fff);font:600 13px var(--ui,system-ui)`,i.addEventListener(`click`,()=>window.close()),e.append(n,r,i),document.body.appendChild(e)}export{r as requestDetachedPopout,n as wireWcDetached};
1
+ import{S as e}from"./main-FJNMV_71.js";var t=`slicc-detached-overlay`;function n(t){let{client:n,isDetachedSelf:r}=t;chrome.runtime.onMessage.addListener(t=>(!e(t)||t.source!==`service-worker`||t.payload.type!==`detached-active`||r||i(n),!1)),r&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>void 0)}function r(){chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e)})}function i(e){try{window.close()}catch{}e.setLocked(!0),a()}function a(){if(document.getElementById(t))return;let e=document.createElement(`div`);e.id=t,e.style.cssText=`position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center;background:var(--canvas,#fff);color:var(--ink,#111);font:14px/1.5 var(--ui,system-ui)`;let n=document.createElement(`strong`);n.textContent=`SLICC is open in a detached window`;let r=document.createElement(`span`);r.textContent=`This panel yields while the detached window is active.`;let i=document.createElement(`button`);i.textContent=`Close this window`,i.style.cssText=`margin-top:8px;padding:8px 16px;border:none;border-radius:999px;cursor:pointer;background:var(--ink,#111);color:var(--canvas,#fff);font:600 13px var(--ui,system-ui)`,i.addEventListener(`click`,()=>window.close()),e.append(n,r,i),document.body.appendChild(e)}export{r as requestDetachedPopout,n as wireWcDetached};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BYXYn5lL.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-CgAAyHLk.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{wireWcDetached as t}from"./wc-detached-9XYAfyPX.js";import{attachWcClient as n,createWcLiveCallbacks as r,n as i,prepareWcShell as a}from"./wc-live-BIYGig0S.js";async function o(o,s,c=!1){let l=a(o,`extension · wc`),u=new i(r(l.wiring));n(l,u,s),t({client:u,isDetachedSelf:c});let{setupSudoExtension:d}=await e(async()=>{let{setupSudoExtension:e}=await import(`./main-BYXYn5lL.js`).then(e=>e.f);return{setupSudoExtension:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));await d({log:s}),u.requestState(),s.info(`WC extension shell connected to offscreen engine`)}export{o as mountWcUiExtension};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-FJNMV_71.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-uVmUnqVi.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/clipboard-DgFtRQbq.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{wireWcDetached as t}from"./wc-detached--tazk6dE.js";import{attachWcClient as n,createWcLiveCallbacks as r,n as i,prepareWcShell as a}from"./wc-live-CC1IJ9qx.js";async function o(o,s,c=!1){let l=a(o,`extension · wc`),u=new i(r(l.wiring));n(l,u,s),t({client:u,isDetachedSelf:c});let{setupSudoExtension:d}=await e(async()=>{let{setupSudoExtension:e}=await import(`./main-FJNMV_71.js`).then(e=>e.f);return{setupSudoExtension:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));await d({log:s}),u.requestState(),s.info(`WC extension shell connected to offscreen engine`)}export{o as mountWcUiExtension};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-BIYGig0S.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-CgAAyHLk.js","assets/chunk-aKtaBQYM.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/wc-shell-BjLcm1xH.js","assets/icons-BU6llBsN.js","assets/main-BYXYn5lL.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.js","assets/wc-shell-WkeczD9x.css","assets/hid-device-registry-D2LsJCRr.js","assets/usb-operations-CkcrNzZw.js","assets/serial-port-registry-Bc4wlwED.js","assets/usb-device-registry-BP58Vi0S.js","assets/tray-leader-Dm-f62te.js","assets/sprinkle-bridge-Du2dCM8G.js","assets/shared-Bn9ltvMZ.js","assets/mime-types-ugOWOUZ9.js","assets/path-utils-DU6QhF_k.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/theme-BBwuyzvz.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/follower-navigate-watcher-CnHWEu_l.js","assets/navigation-watcher-BxAAD5To.js","assets/handoff-link-ywwq4k0t.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{d as n,h as r,m as i,x as a,y as o}from"./main-BYXYn5lL.js";import{n as s}from"./remote-cdp-transport-Cf0sDZ5N.js";import{i as c}from"./wc-shell-BjLcm1xH.js";import{prepareWcShell as l,t as u}from"./wc-live-BIYGig0S.js";import{t as d}from"./page-follower-tray-DCrCjXYf.js";import{WcSprinkleZone as f}from"./wc-sprinkles-CF-l37VL.js";var p=t(`follower-switch-out`);function m(e,t){t.stopFollower();try{t.storage.removeItem(i),e.workerBaseUrl===null?t.storage.removeItem(r):t.storage.setItem(r,e.workerBaseUrl)}catch(e){p.error(`follower switch-out: storage write failed — state may revert on reload`,{error:e instanceof Error?e.message:String(e)})}try{let e=t.getHref(),n=a(e);n!==e&&t.replaceHref(n)}catch(e){p.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var h=t(`wc-follower`),g={sendMessage:()=>{},onEvent:()=>()=>{},stop:()=>{}};function _(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Could not start follower`;let i=document.createElement(`p`);i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=t,n.append(r,i),e.appendChild(n)}function v(e,t,n){let r=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};e.style.display=`none`,e.parentElement?.append(r(`Files live on the leader. A follower mirrors the leader’s chat, sprinkles, and browser tabs — not its filesystem.`)),t.append(r(`The shell runs on the leader. A follower has no local terminal — drive the session through chat.`)),n.append(r(`Memory lives on the leader. A follower has no local memory store.`))}async function y(t,r,i){let a=i===`cherry`,p;try{p=await n({runtimeMode:i,envBaseUrl:null,window,log:r})}catch(e){let n=e instanceof Error?e.message:String(e);h.error(`follower prelude failed`,{runtimeMode:i,error:n}),_(t,n);return}let y=a?p.cherryJoinUrl:o(window.location.href,window.localStorage);if(!y){h.error(`follower mount with no join URL — falling back to live boot`);let{mountWcUiLive:n}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-BIYGig0S.js`);return{mountWcUiLive:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]));return n(t,r,`standalone`)}let b=l(t,a?`cherry · follower`:`follower`);v(b.refs.fileTree,b.refs.termSurface,b.refs.memoryHost);let x=new u({thread:b.refs.thread,agent:g});b.setController(x);let S=`Connecting to leader…`,C=(e,t)=>{b.refs.inputCard.setAttribute(`placeholder`,t),e?b.refs.inputCard.removeAttribute(`disabled`):b.refs.inputCard.setAttribute(`disabled`,``)};C(!1,S),b.refs.inputCard.addEventListener(`submit`,e=>{let t=c(e);t&&x.sendUserMessage(t)});let w=new f(b.refs).callbacks(),T=d({joinUrl:y,runtime:a?s:`slicc-standalone`,browserAPI:p.browser,onSnapshot:e=>x.loadMessages(e),onUserMessage:(e,t,n,r)=>x.addUserMessage(e,r),onStatus:e=>x.setProcessing(e===`processing`),setChatAgent:e=>x.setAgent(e),onConnectionChange:e=>C(e,e?`Ask the leader, or describe a change…`:S),onGaveUp:e=>{h.error(`follower gave up reaching the leader`,{error:e}),C(!1,`Couldn't reach the leader. Reload to retry.`)},addSprinkle:w.addSprinkle,removeSprinkle:w.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):h.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},...a?{onCherrySliccEvent:(e,t)=>p.cherryTransport?.emitSliccEventToHost(e,t)}:{}});a&&p.cherryTransport&&(p.cherryTransport.onHostEvent=(e,t)=>T.currentSync?.sendCherryHostEvent(e,t));let E=null;if(!a){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-CnHWEu_l.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([39,40,9,41]));E=t(p.realCdpTransport,()=>T.currentSync)}b.refs.avatarMenu.items=[{kind:`separator`},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}],b.refs.avatarMenu.addEventListener(`slicc-avatar-action`,e=>{e.detail?.id===`tray-stop`&&window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}))}),window.addEventListener(`slicc:tray-leave`,e=>{m({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{E?.(),T.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),h.info(`follower mounted`,{runtimeMode:i,isCherry:a})}export{y as mountWcUiFollower};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-CC1IJ9qx.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-uVmUnqVi.js","assets/chunk-aKtaBQYM.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/wc-shell-k8zT_CCv.js","assets/icons-BU6llBsN.js","assets/main-FJNMV_71.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.js","assets/wc-shell-WkeczD9x.css","assets/hid-device-registry-D2LsJCRr.js","assets/usb-operations-CkcrNzZw.js","assets/serial-port-registry-Bc4wlwED.js","assets/usb-device-registry-BP58Vi0S.js","assets/tray-leader-C0t_8UvQ.js","assets/sprinkle-bridge-Du2dCM8G.js","assets/shared-Bn9ltvMZ.js","assets/mime-types-ugOWOUZ9.js","assets/path-utils-DU6QhF_k.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/theme-BBwuyzvz.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/follower-navigate-watcher-CnHWEu_l.js","assets/navigation-watcher-BxAAD5To.js","assets/handoff-link-ywwq4k0t.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{d as n,h as r,m as i,x as a,y as o}from"./main-FJNMV_71.js";import{n as s}from"./remote-cdp-transport-Cf0sDZ5N.js";import{i as c}from"./wc-shell-k8zT_CCv.js";import{prepareWcShell as l,t as u}from"./wc-live-CC1IJ9qx.js";import{t as d}from"./page-follower-tray-eZi5RMQE.js";import{WcSprinkleZone as f}from"./wc-sprinkles-BtPIBmNQ.js";var p=t(`follower-switch-out`);function m(e,t){t.stopFollower();try{t.storage.removeItem(i),e.workerBaseUrl===null?t.storage.removeItem(r):t.storage.setItem(r,e.workerBaseUrl)}catch(e){p.error(`follower switch-out: storage write failed — state may revert on reload`,{error:e instanceof Error?e.message:String(e)})}try{let e=t.getHref(),n=a(e);n!==e&&t.replaceHref(n)}catch(e){p.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var h=t(`wc-follower`),g={sendMessage:()=>{},onEvent:()=>()=>{},stop:()=>{}};function _(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Could not start follower`;let i=document.createElement(`p`);i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=t,n.append(r,i),e.appendChild(n)}function v(e,t,n){let r=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};e.style.display=`none`,e.parentElement?.append(r(`Files live on the leader. A follower mirrors the leader’s chat, sprinkles, and browser tabs — not its filesystem.`)),t.append(r(`The shell runs on the leader. A follower has no local terminal — drive the session through chat.`)),n.append(r(`Memory lives on the leader. A follower has no local memory store.`))}async function y(t,r,i){let a=i===`cherry`,p;try{p=await n({runtimeMode:i,envBaseUrl:null,window,log:r})}catch(e){let n=e instanceof Error?e.message:String(e);h.error(`follower prelude failed`,{runtimeMode:i,error:n}),_(t,n);return}let y=a?p.cherryJoinUrl:o(window.location.href,window.localStorage);if(!y){h.error(`follower mount with no join URL — falling back to live boot`);let{mountWcUiLive:n}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-CC1IJ9qx.js`);return{mountWcUiLive:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]));return n(t,r,`standalone`)}let b=l(t,a?`cherry · follower`:`follower`);v(b.refs.fileTree,b.refs.termSurface,b.refs.memoryHost);let x=new u({thread:b.refs.thread,agent:g});b.setController(x);let S=`Connecting to leader…`,C=(e,t)=>{b.refs.inputCard.setAttribute(`placeholder`,t),e?b.refs.inputCard.removeAttribute(`disabled`):b.refs.inputCard.setAttribute(`disabled`,``)};C(!1,S),b.refs.inputCard.addEventListener(`submit`,e=>{let t=c(e);t&&x.sendUserMessage(t)});let w=new f(b.refs).callbacks(),T=d({joinUrl:y,runtime:a?s:`slicc-standalone`,browserAPI:p.browser,onSnapshot:e=>x.loadMessages(e),onUserMessage:(e,t,n,r)=>x.addUserMessage(e,r),onStatus:e=>x.setProcessing(e===`processing`),setChatAgent:e=>x.setAgent(e),onConnectionChange:e=>C(e,e?`Ask the leader, or describe a change…`:S),onGaveUp:e=>{h.error(`follower gave up reaching the leader`,{error:e}),C(!1,`Couldn't reach the leader. Reload to retry.`)},addSprinkle:w.addSprinkle,removeSprinkle:w.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):h.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},...a?{onCherrySliccEvent:(e,t)=>p.cherryTransport?.emitSliccEventToHost(e,t)}:{}});a&&p.cherryTransport&&(p.cherryTransport.onHostEvent=(e,t)=>T.currentSync?.sendCherryHostEvent(e,t));let E=null;if(!a){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-CnHWEu_l.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([39,40,9,41]));E=t(p.realCdpTransport,()=>T.currentSync)}b.refs.avatarMenu.items=[{kind:`separator`},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}],b.refs.avatarMenu.addEventListener(`slicc-avatar-action`,e=>{e.detail?.id===`tray-stop`&&window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}))}),window.addEventListener(`slicc:tray-leave`,e=>{m({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{E?.(),T.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),h.info(`follower mounted`,{runtimeMode:i,isCherry:a})}export{y as mountWcUiFollower};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-picker-popup-Hrvzr69c.js","assets/chunk-aKtaBQYM.js","assets/logger-DDBAeTLF.js","assets/picker-popup-CpulHQsi.js","assets/usb-picker-D_K0weAY.js","assets/serial-picker-B6s4NeaB.js","assets/hid-picker-DUJBI46p.js","assets/usb-device-registry-BP58Vi0S.js","assets/serial-port-registry-Bc4wlwED.js","assets/hid-device-registry-D2LsJCRr.js","assets/quick-llm-m5pdShbE.js","assets/account-store-CgAAyHLk.js","assets/preload-helper-zJ_50EbN.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/icons-BU6llBsN.js","assets/main-BYXYn5lL.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js","assets/new-session-D1pUlqr9.js","assets/session-store-CCH7W8KY.js","assets/wc-shell-BjLcm1xH.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.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-CUwGI4YF.js","assets/welcome-detection-Cr8mNEkt.js","assets/legacy-styles-4PP74ISo.js","assets/theme-BBwuyzvz.js","assets/soundscape-TvriK11t.js","assets/voice-reply-DfKSbOma.js","assets/speak-D9WnbzxD.js","assets/speech-assets-bridge-B8NqCAE8.js","assets/transformers-env-CgaV7qpU.js","assets/shared-Bn9ltvMZ.js","assets/mime-types-ugOWOUZ9.js","assets/path-utils-DU6QhF_k.js","assets/wc-placeholder-Bfe2f-DP.js","assets/wc-attach-DvbyWBMw.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/remote-terminal-view-DIEOCe9M.js","assets/browser-D0vICVpZ.js","assets/terminal-session-client-CbAduNfC.js","assets/picker-approval-Dc390nC7.js","assets/secret-env-DncfFSea.js","assets/wc-permissions-DmHMvdiC.js","assets/wc-permissions-providers-BufEXbhX.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-CF-l37VL.js","assets/wc-tray-BG2_SPu3.js","assets/remote-cdp-transport-Cf0sDZ5N.js","assets/page-follower-tray-DCrCjXYf.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/tray-leader-Dm-f62te.js","assets/wc-nav-Cvf1-2nX.js","assets/wc-voice-erm0EtRv.js","assets/composer-speech-BJF-32Qm.js","assets/whisper-session-Dt-B3KmT.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./dist-BmWy99kl.js";import{t}from"./preload-helper-zJ_50EbN.js";import{F as n,I as r}from"./account-store-CgAAyHLk.js";import{i,n as a,r as o,t as s}from"./context-compaction-CFWyOzX1.js";import{t as c}from"./logger-DDBAeTLF.js";import{t as l}from"./tool-ui-DfXu6quJ.js";import{a as u,d,i as f,u as p,v as m}from"./main-BYXYn5lL.js";import{t as h}from"./wc-permissions-registry-CR1rTd2H.js";import{n as g,r as _}from"./hid-device-registry-D2LsJCRr.js";import{a as ee,i as te}from"./serial-port-registry-Bc4wlwED.js";import{C as ne,D as re,E as ie,S as ae,_ as oe,a as se,g as ce,h as le,k as ue,l as de,m as fe,n as pe,o as me,s as he,w as ge,x as _e,y as ve}from"./usb-operations-CkcrNzZw.js";import{i as ye,r as v}from"./usb-device-registry-BP58Vi0S.js";import{r as be}from"./tray-leader-Dm-f62te.js";import{_ as xe,b as Se,c as Ce,d as we,f as Te,g as Ee,i as De,l as Oe,m as y,n as ke,o as Ae,p as je,r as Me,s as Ne,t as Pe,u as Fe,v as Ie}from"./wc-shell-BjLcm1xH.js";import{t as Le}from"./icons-BU6llBsN.js";import{n as Re}from"./sprinkle-bridge-Du2dCM8G.js";import{i as ze,n as b,t as Be}from"./theme-BBwuyzvz.js";import{n as Ve}from"./sprinkle-renderer-GiRRbdBx.js";var He=typeof chrome<`u`&&!!chrome?.runtime?.id;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 Ue(){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=Ue();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 We=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],Ge=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function Ke(e){return We.some(t=>e.startsWith(t))}function qe(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:Ge.some(t=>e.startsWith(t))}var w=new WeakSet,Je=`,
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-picker-popup-Hrvzr69c.js","assets/chunk-aKtaBQYM.js","assets/logger-DDBAeTLF.js","assets/picker-popup-CpulHQsi.js","assets/usb-picker-D_K0weAY.js","assets/serial-picker-B6s4NeaB.js","assets/hid-picker-DUJBI46p.js","assets/usb-device-registry-BP58Vi0S.js","assets/serial-port-registry-Bc4wlwED.js","assets/hid-device-registry-D2LsJCRr.js","assets/quick-llm-I3lG0JAs.js","assets/account-store-uVmUnqVi.js","assets/preload-helper-zJ_50EbN.js","assets/dist-BmWy99kl.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-CFWyOzX1.js","assets/src-DlEHAkLd.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-bwXIzzAK.js","assets/secrets-bridge-client-BSipj-5f.js","assets/panel-rpc-DqT2FG7c.js","assets/bedrock-camp-9-QEmC9Z.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-DfXu6quJ.js","assets/icons-BU6llBsN.js","assets/main-FJNMV_71.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js","assets/new-session-RQLW9UpV.js","assets/session-store-CCH7W8KY.js","assets/wc-shell-k8zT_CCv.js","assets/soundscape-cues-5_sT5Un6.js","assets/speech-CqQdPtyQ.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-CJV5ViMw.js","assets/welcome-detection-Cr8mNEkt.js","assets/legacy-styles-4PP74ISo.js","assets/theme-BBwuyzvz.js","assets/soundscape-TvriK11t.js","assets/voice-reply-DfKSbOma.js","assets/speak-D9WnbzxD.js","assets/speech-assets-bridge-B8NqCAE8.js","assets/transformers-env-CgaV7qpU.js","assets/shared-Bn9ltvMZ.js","assets/mime-types-ugOWOUZ9.js","assets/path-utils-DU6QhF_k.js","assets/wc-placeholder-DLEqGc0p.js","assets/wc-attach-C9_tu3yw.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/remote-terminal-view-DIEOCe9M.js","assets/browser-D0vICVpZ.js","assets/terminal-session-client-CbAduNfC.js","assets/picker-approval-Dc390nC7.js","assets/secret-env-DncfFSea.js","assets/wc-permissions-DmHMvdiC.js","assets/wc-permissions-providers-BufEXbhX.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-BtPIBmNQ.js","assets/wc-tray-BJZGo5tr.js","assets/remote-cdp-transport-Cf0sDZ5N.js","assets/page-follower-tray-eZi5RMQE.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/tray-leader-C0t_8UvQ.js","assets/wc-nav-BGRbM4u_.js","assets/wc-voice-erm0EtRv.js","assets/composer-speech-BJF-32Qm.js","assets/whisper-session-Dt-B3KmT.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./dist-BmWy99kl.js";import{t}from"./preload-helper-zJ_50EbN.js";import{F as n,I as r}from"./account-store-uVmUnqVi.js";import{i,n as a,r as o,t as s}from"./context-compaction-CFWyOzX1.js";import{t as c}from"./logger-DDBAeTLF.js";import{t as l}from"./tool-ui-DfXu6quJ.js";import{a as u,d,i as f,u as p,v as m}from"./main-FJNMV_71.js";import{t as h}from"./wc-permissions-registry-CR1rTd2H.js";import{n as g,r as _}from"./hid-device-registry-D2LsJCRr.js";import{a as ee,i as te}from"./serial-port-registry-Bc4wlwED.js";import{C as ne,D as re,E as ie,S as ae,_ as oe,a as se,g as ce,h as le,k as ue,l as de,m as fe,n as pe,o as me,s as he,w as ge,x as _e,y as ve}from"./usb-operations-CkcrNzZw.js";import{i as ye,r as v}from"./usb-device-registry-BP58Vi0S.js";import{r as be}from"./tray-leader-C0t_8UvQ.js";import{_ as xe,b as Se,c as Ce,d as we,f as Te,g as Ee,i as De,l as Oe,m as y,n as ke,o as Ae,p as je,r as Me,s as Ne,t as Pe,u as Fe,v as Ie}from"./wc-shell-k8zT_CCv.js";import{t as Le}from"./icons-BU6llBsN.js";import{n as Re}from"./sprinkle-bridge-Du2dCM8G.js";import{i as ze,n as b,t as Be}from"./theme-BBwuyzvz.js";import{n as Ve}from"./sprinkle-renderer-GiRRbdBx.js";var He=typeof chrome<`u`&&!!chrome?.runtime?.id;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 Ue(){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=Ue();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 We=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],Ge=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function Ke(e){return We.some(t=>e.startsWith(t))}function qe(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:Ge.some(t=>e.startsWith(t))}var w=new WeakSet,Je=`,
3
3
  exec: Object.assign(function(cmd) {
4
4
  return _vfsCall('dip-exec', { cmd: cmd }, function(m) { return m.result; });
5
5
  }, { spawn: function(argv) {
@@ -245,9 +245,9 @@ ${r}
245
245
  `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${n}${n.length===0||n.endsWith(`
246
246
  `)?``:`
247
247
  `}${s}\n`}async function Rt(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(kt,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await It(e.vfs),r=Pt(n),i=r*Ot;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 Lt({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(kt,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 I(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?Se(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 L=c(`session-freezer`),zt=4,Bt=2048,R=40,z=`/sessions`,B=`/sessions/index.json`;async function Vt(e){let t=await qt(e.sessionStore);if(!t||t.messages.length<zt)return L.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=Jt(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await Wt(e,n,i);let a=await Gt(e,n,i)||en(t.messages);return await Kt(e,t,a,r,i?await Ht(e,a):void 0)}async function Ht(e,n){try{return Ut(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-m5pdShbE.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,27,28,29,30,31]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){L.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function Ut(e){if(e)return Le(e)?e:void 0}async function Wt(e,t,n){if(!n){L.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:Bt,headers:e.headers})}catch(e){L.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){L.info(`Memory extraction returned no durable memories`);return}try{await rn(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),L.info(`Memory extracted and appended on new-session`)}catch(e){L.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Gt(e,t,n){if(!n)return``;try{return $t(await o({messages:t,instruction:a,model:e.model,apiKey:e.apiKey,maxTokens:R,headers:e.headers}))}catch(e){return L.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Kt(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${nn()}.md`:`${a.replace(/[:.]/g,`-`)}-${tn(n)}.md`,s={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:t.messages},c=Qt(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 an(e.vfs,l),await e.vfs.flush(),L.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...l,archive:s}}catch(e){return L.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function qt(e){try{return await e.load(`session-cone`)}catch(e){return L.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function Jt(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var Yt=`<!-- slicc:session-data
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 L=c(`session-freezer`),zt=4,Bt=2048,R=40,z=`/sessions`,B=`/sessions/index.json`;async function Vt(e){let t=await qt(e.sessionStore);if(!t||t.messages.length<zt)return L.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=Jt(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await Wt(e,n,i);let a=await Gt(e,n,i)||en(t.messages);return await Kt(e,t,a,r,i?await Ht(e,a):void 0)}async function Ht(e,n){try{return Ut(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-I3lG0JAs.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,27,28,29,30,31]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){L.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function Ut(e){if(e)return Le(e)?e:void 0}async function Wt(e,t,n){if(!n){L.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:Bt,headers:e.headers})}catch(e){L.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){L.info(`Memory extraction returned no durable memories`);return}try{await rn(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),L.info(`Memory extracted and appended on new-session`)}catch(e){L.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Gt(e,t,n){if(!n)return``;try{return $t(await o({messages:t,instruction:a,model:e.model,apiKey:e.apiKey,maxTokens:R,headers:e.headers}))}catch(e){return L.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Kt(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${nn()}.md`:`${a.replace(/[:.]/g,`-`)}-${tn(n)}.md`,s={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:t.messages},c=Qt(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 an(e.vfs,l),await e.vfs.flush(),L.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...l,archive:s}}catch(e){return L.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function qt(e){try{return await e.load(`session-cone`)}catch(e){return L.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function Jt(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var Yt=`<!-- slicc:session-data
249
249
  `,Xt=`
250
250
  -->`;function Zt(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 Qt(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=`${Yt}${JSON.stringify(Zt(e.messages)).replace(/-->/g,`-- >`)}${Xt}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+I(e.messages)}function $t(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 en(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 tn(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function nn(){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 rn(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
251
  `)?``:`
252
- `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await Rt({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){L.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function an(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 on(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 sn(e,t,n){if(!t.pendingEnrichment)return null;let r=await ln(e,t);if(r===null)return null;let i=un(t,r);if(i===null)return null;let a=await dn(t,i,n);if(a===null)return null;let o=await cn(n,a.newTitle);return await fn(e,t,a.bullets,n),await pn(e,t,r,a.newTitle,o)}async function cn(e,t){if(e.pickIcon)try{return await Ut(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){L.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function ln(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`?L.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):L.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function un(e,t){let n;try{n=U(t).messages}catch(t){return L.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?(L.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):Jt(n)}async function dn(e,t,n){let r=``;try{r=await o({messages:t,instruction:s,model:n.model,apiKey:n.apiKey,maxTokens:Bt,headers:n.headers})}catch(t){return L.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let i=``;try{i=$t(await o({messages:t,instruction:a,model:n.model,apiKey:n.apiKey,maxTokens:R,headers:n.headers}))}catch(t){return L.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}:(L.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function fn(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await rn(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){L.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function pn(e,t,n,r,i){let a=H(t),o=mn(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${tn(r)}.md`,c=`${z}/${s}`;try{await V(e,z),await e.writeFile(c,o)}catch(e){return L.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 gn(e,t.filename,u)}catch(e){return L.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){L.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return L.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function mn(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 hn=Promise.resolve();async function gn(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=hn.then(r,r);return hn=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:_n(t)}}function _n(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 vn=`__slicc_binary__`,yn=`b64`;function bn(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[vn]===yn&&typeof t.data==`string`}function xn(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function Sn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function W(e){if(e instanceof Uint8Array)return{[vn]:yn,data:xn(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(bn(e))return Sn(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 Cn=c(`panel-transport`);function wn(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Tn(){return{onMessage:e=>{let t=(t,n,r)=>(wn(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=>{Cn.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var K=c(`offscreen-client`),En=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=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??Tn(),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 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})}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`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,fills:t.fills}));break}case`tray-runtime-status`:{let t=e;Dn(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&&Dn(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 Dn(e,t){be({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),p({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 On(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 kn(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 An(e){let t=kn(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function jn(e,t){let n=kn(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 Mn(){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 Nn(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new En(r,An(o.port1)),l=jn(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 Pn(e){return Nn({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-J4YngSNJ.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Mn(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId})}var Fn=`<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 In(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 Ln(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(Fn));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{await t(In(e.getMessages())??I([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=I([...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 Rn(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var zn=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=[];#h=[];#g=new Map;#_=null;#v=null;#y=``;#b=!1;#x=!1;#S=null;#C=new Set;#w=new Map;constructor(e){this.#e=e.thread,this.#t=e.agent,this.#n=e.onProcessingChange,this.#r=e.onMessageRendered,this.#i=e.onMessageDisposed,this.#a=e.onTurnComplete,this.#o=e.resolveTelemetryContext,this.#s=e.onQueuedChange,this.#c=e.onQueuedCancel,this.#l=e.onToolUiAction,this.#u=e.agent.onEvent(e=>this.#j(e)),this.#p=e=>this.#W(e),this.#e.addEventListener(`slicc-error-retry`,this.#p)}dispose(){this.#u(),this.#e.removeEventListener(`slicc-error-retry`,this.#p);for(let e of[...this.#w.keys()])this.#U(e)}get processing(){return this.#x}getMessages(){return this.#m.map(e=>({...e}))}setAgent(e){this.#u(),this.#t=e,this.#u=e.onEvent(e=>this.#j(e))}setOnLocalUserMessage(e){this.#d=e}setOnLocalProcessingChange(e){this.#f=e}addUserMessage(e,t){this.#q({id:Y(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#h.map(Rn)}removeQueuedMessage(e){let t=this.#h.filter(t=>t.id!==e);t.length!==this.#h.length&&(this.#h=t,this.#E())}#T(){if(this.#h.length===0)return;let e=this.#h;this.#h=[];for(let t of e)this.#q(t);this.#E()}#E(){this.#s?.(this.#h.map(Rn))}addAssistantMessage(e){this.#q({id:Y(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#g.keys())this.#i?.(e);for(let e of[...this.#w.keys()])this.#U(e);if(this.#h.length>0){if(this.#c)for(let e of this.#h)try{this.#c(e.id)}catch(e){console.error(`onQueuedCancel hook threw`,e)}this.#h=[],this.#E()}this.#m=Ae(e);let t=[...this.#m].reverse().find(e=>e.isStreaming);this.#_=t?.id??null,t&&(this.#v=t.id),this.#y=``,this.#b=!1,this.#g.clear();let n=[],r=``;for(let e of this.#m){let t=new Date(e.timestamp).toDateString();t!==r&&(n.push(Ne(e.timestamp)),r=t);let i=this.#K(e);this.#g.set(e.id,i),n.push(...i)}let i=this.#e;typeof i.replaceContent==`function`?i.replaceContent(...n):i.replaceChildren(...n),this.#Z();for(let e of this.#m)e.isStreaming||this.#r?.(e,this.#g.get(e.id)??[]);this.#A(),this.#$()}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#D(r):r,a={id:Y(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#x?(this.#h.push(a),this.#E()):this.#q(a),this.#t.sendMessage(i,a.id,a.attachments),this.#O();try{let e=n?.dictation?Se(i):i;this.#d?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#D(e){return xe(e,Ie())}#O(){if(this.#o)try{let e=this.#o();if(!e)return;f(e.scoopName,e.model)}catch{}}addLickMessage(e,t,n,r,i){let a=this.#m[this.#m.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.#J(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.#x?!0:void 0})}updateLickState(e,t){let n=this.#m.find(t=>t.lickId===e);n&&(n.lickState=t,this.#J(n))}setProcessing(e){if(this.#x!==e){this.#x=e,e&&(this.#v=null),e&&this.#T(),e||this.#A(),this.#n?.(e);try{this.#f?.(e)}catch(e){console.error(`onLocalProcessingChange hook threw`,e)}e||this.#k()}}#k(){let e=this.#v;if(this.#v=null,!this.#a)return;let t=e?this.#G(e):null;this.#a(t?{...t}:null)}#A(){let e=this.#m[this.#m.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#S?.remove();return}this.#S??=Ln({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#S)}#j(e){switch(e.type){case`message_start`:this.#M(e.messageId);break;case`content_delta`:this.#N(e.messageId,e.text);break;case`content_done`:this.#F(e.messageId);break;case`tool_use_start`:this.#I(e.messageId,e.toolName,e.toolInput);break;case`tool_result`:this.#L(e.messageId,e.toolName,e.result,e.isError);break;case`tool_ui`:this.#V(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#H(e.requestId);break;case`turn_end`:this.#R(e.messageId);break;case`error`:this.#z(e.error);break;case`screenshot`:case`terminal_output`:break;default:break}}#M(e){this.setProcessing(!0),this.#_=e,this.#v=e,this.#q({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#N(e,t){this.#G(e)&&(this.#y+=t,!this.#b&&(this.#b=!0,requestAnimationFrame(()=>this.#P(e))))}#P(e){if(this.#b=!1,!this.#y)return;let t=this.#G(e);t&&(t.content+=this.#y,this.#y=``,this.#J(t))}#F(e){let t=this.#G(e);t&&(this.#y&&this.#_===e&&(t.content+=this.#y),this.#y=``,this.#b=!1,t.isStreaming=!1,this.#J(t))}#I(e,t,n){let r=this.#G(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:Y(),name:t,input:n}),this.#J(r))}#L(e,t,n,r){let i=this.#G(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#J(i))}#R(e){let t=this.#G(e);t?.isStreaming&&(t.isStreaming=!1,this.#J(t)),this.#_=null,this.setProcessing(!1)}#z(e){this.setProcessing(!1),this.#q({id:Y(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#B(e)}#B(e){try{if(Fe(e)||Oe(e)||Ce(e))return;u(`error-card`,e)}catch{}}#V(e,t,n){this.#U(t);let r=document.createElement(`div`);r.className=`msg__dip`,r.setAttribute(`data-tool-ui-request`,t),(this.#e.inner??this.#e).append(r);let i=j(r,n,(e,n)=>{this.#l?.(t,e,n)},!1);this.#w.set(t,{instance:i,container:r}),this.#l?.(t,l,void 0)}#H(e){this.#U(e)}#U(e){let t=this.#w.get(e);if(t){this.#w.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#W(e){if(this.#x)return;let t=e.detail?.messageId??null,n=this.#m.length;if(t){let e=this.#m.findIndex(e=>e.id===t);e>=0&&(n=e)}let r=n>0?this.#m[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.#m[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)}#G(e){return this.#m.find(t=>t.id===e)}#K(e){try{return we(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.#X(),this.#m.push(e);let t=this.#K(e);this.#g.set(e.id,t),this.#e.append(...t),this.#Z(),e.isStreaming||this.#r?.(e,t),e.role===`user`?this.#$():this.#ee()}#J(e){this.#X(),this.#i?.(e.id);let t=this.#g.get(e.id)??[],n=this.#K(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.#g.set(e.id,n),this.#Z(),e.isStreaming||this.#r?.(e,n),this.#ee()}#Y(){return this.#e.inner??this.#e}#X(){je(this.#Y(),this.#C)}#Z(){Te(this.#Y(),{openClusterAnchors:this.#C,toolCallLookup:(e,t)=>this.#Q(e,t)})}#Q(e,t){return this.#m.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#$(){this.#e.scrollTop=this.#e.scrollHeight}#ee(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#$()}};function Bn(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function Vn(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Bn(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Hn(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 Un(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function Un(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 Wn(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 Gn(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(Vn))}async function Kn(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 qn=`/workspace/CLAUDE.md`,Z=64;function Jn(e){if(e.length<=Z)return{title:e,summary:``};let t=e.lastIndexOf(` `,Z),n=t>Z/2?t:Z;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function Yn(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(Jn(e)),n=null};for(let t of e.split(`
253
- `)){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(Jn(e.trim())),t}async function Xn(e){let t=``;try{let n=await e.readFile(qn,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return Yn(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})}var Zn=[`/workspace`,`/shared`],Qn=3,$n=200;async function er(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=[];for(let r of[...i,...a].slice(0,$n)){let i=`${t}/${r.name}`;r.type===`directory`?o.push({kind:`dir`,id:i,label:r.name,children:n<Qn?await er(e,i,n+1):[]}):o.push({kind:`file`,id:i,label:r.name,path:i})}return o}async function tr(e){let t=[];for(let n of Zn)t.push({kind:`group`,label:`${n.slice(1)}/`}),t.push(...await er(e,n,1));return t}function nr(e){let t=!1;return n=>{if(n===`files`){e.openFs().then(async t=>{e.fileTree.items=await tr(t)}).catch(t=>e.log.error(`WC file tree refresh failed`,t));return}if(n===`memory`){e.openFs().then(async t=>{e.memoryHost.replaceChildren(...await Xn(t))}).catch(t=>e.log.error(`WC memory refresh failed`,t));return}n===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))}}var rr={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},ir={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function ar(e){return e?rr[e]:void 0}function or(e){return(e&&ir[e])??`off`}function sr(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`?!0:m(t.localStorage)}function Q(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:y(e),label:e.isCone?`sliccy`:e.name,eyes:Q(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function $(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),Q(i)!==Q(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`&&Ee(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 lr(e,n){e.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),e.thread.setAttribute(`accent`,y(n)),ke(e,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:y(n)}),e.switcher.setAttribute(`active`,n.jid),e.composerMeta.setAttribute(`thinking`,or(n.config?.thinkingLevel));try{let{resolveCurrentModel:r,resolveModelById:i}=await t(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./main-BYXYn5lL.js`).then(e=>e.t);return{resolveCurrentModel:e,resolveModelById:t}},__vite__mapDeps([28,1,29,12,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30])),a=n.config?.modelId,o=a?i(a):r();e.composerMeta.setAttribute(`model`,o.name??o.id),e.composerMeta.toggleAttribute(`no-thinking`,o.reasoning!==!0)}catch{}}function ur(e){let{refs:n,openVfs:r,client:i,getController:a,getSelected:o,selectScoop:s,clearSelection:c,log:l}=e,u=[],d=0,f=!1,p=()=>{let e=++d;r().then(async({reader:r,writer:i})=>{let a=await X(r);if(a===null){if((await Un(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await Wn(r),a.length===0))return;await i.writeFile(B,JSON.stringify(a,null,2))}e===d&&(u=a,Gn(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-m5pdShbE.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,27,28,29,30,31])).then(({pickLucideIcon:e})=>Hn({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=e=>{m||(m=!0,h()?.setAttribute(`busy`,``),(async()=>{try{if(e!==`erase`){let{writer:n}=await r(),{runNewSessionFreeze:i,runNewSessionFreezeQuick:a}=await t(async()=>{let{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}=await import(`./new-session-D1pUlqr9.js`);return{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}},__vite__mapDeps([32,12,11,1,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,28,29,30,31,33]));e===`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([]),t(async()=>{let{resetDictationPriming:e}=await import(`./wc-shell-BjLcm1xH.js`).then(e=>e.y);return{resetDictationPriming:e}},__vite__mapDeps([34,1,12,27,28,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,35,36,37])).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 Kn(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});a()?.loadMessages(o),n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),n.thread.setAttribute(`accent`,Pe),ke(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=Me(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`),lr(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`)&&e(t)},onClientReady:e=>{c.add(e),s&&e()}}}function fr(e){let n=null;return()=>(n??=(async()=>{let[{createRemoteVfsClient:n},{createRemoteWritableVfsClient:r}]=await Promise.all([t(()=>import(`./remote-vfs-client-Z2qM01yP.js`),__vite__mapDeps([38,39])),t(()=>import(`./writable-vfs-client-BKZGifKZ.js`),__vite__mapDeps([40,39]))]);return{reader:n({transport:e.getTransport()}),writer:r({transport:e.getTransport()})}})(),n)}function pr(e,n,r,i,a){e.onClientReady(()=>{i.intercept||t(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-CUwGI4YF.js`);return{wireWcOnboarding:e}},__vite__mapDeps([41,12,28,1,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,42])).then(({wireWcOnboarding:t})=>t({client:n,getController:()=>e.getController(),openVfs:r,log:a})).then(e=>{i.intercept=e.interceptWelcomeLick}).catch(e=>a.error(`WC onboarding wiring failed`,e))})}function mr(e,i,a,o,s){let c=new Map;t(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadDipStyles:e}},__vite__mapDeps([43,12])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),t(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-BBwuyzvz.js`).then(e=>e.r);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([44,1])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0);let l=i.createAgentHandle();l.onEvent(e=>{e.type!==`tool_use_start`&&e.type!==`tool_result`||t(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([45,2,35])).then(({playCue:t})=>t(e.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0)});let u=new zn({thread:e.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:e=>{t(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-DfKSbOma.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([46,2,47,12,48,49,19,1,20,50,51,52])).then(async({consumeVoiceSubmission:n,speakReplyMarkdown:r})=>{if(!n())return;let{endVoiceTurn:i,setTtsActive:a}=await t(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([45,2,35]));try{if(e?.content){a(!0);try{await r(e.content)}finally{a(!1)}}}finally{i()}}).catch(()=>void 0)},onProcessingChange:t=>{e.frame.toggleAttribute(`data-processing`,t),e.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,t),t||o?.()},onMessageDisposed:e=>{let t=c.get(e);t&&(yt(t),c.delete(e))},onMessageRendered:(e,t)=>{let n=t[0];n&&c.set(e.id,vt(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:t=>{e.queuedStack.setMessages(t)},onToolUiAction:(e,t,n)=>{i.sendToolUiAction(e,t,n)},onQueuedCancel:e=>{let t=i.selectedScoopJid;t&&i.deleteQueuedMessage(t,e).catch(()=>void 0)}});return e.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 hr(e){let{boot:n,client:r,agentHandle:i,openReader:a,log:o}=e,{refs:s}=n;t(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-Bfe2f-DP.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([53,12,34,1,27,28,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,35,36,37])).then(({createPlaceholderRefresher:t})=>{e.setRefreshPlaceholder(t({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 t(async()=>{let{SessionStore:e}=await import(`./session-store-CCH7W8KY.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),e.triggerPlaceholder())}catch(e){o.warn(`WC session hydration failed`,e)}})();let c=null;t(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-DvbyWBMw.js`);return{wireWcAttach:e}},__vite__mapDeps([54,12,55,1])).then(({wireWcAttach:n})=>{c=n({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:a,openWriter:e.openWriter,listConversations:async()=>{let{readSessionsIndex:e}=await t(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-BxRf88jp.js`);return{readSessionsIndex:e}},[]);return(await e(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`,e=>{let r=De(e);if(!r)return;let i=e.detail?.source===`dictation`;i&&(t(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-DfKSbOma.js`);return{markVoiceSubmission:e}},__vite__mapDeps([46,2,47,12,48,49,19,1,20,50,51,52])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),t(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([45,2,35])).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()}),t(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=>{let t=e.detail?.thinking,i=ar(t),a=n.getSelected();a&&i&&r.setScoopThinkingLevel(a.jid,i)})}function gr(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(n){e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2)),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 _r(e,n,r){let i=n.standalone;i&&t(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DunWpcR7.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:t})=>t({refs:e.refs,browser:i.browser,log:r})).catch(e=>r.error(`WC browser overlay wiring failed`,e))}function vr(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)}),br({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function yr(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 br(e){let n=new Map,r=new Set;e.switcher.addEventListener(`pointerover`,i=>{let a=i.target?.closest?.(`slicc-pill.scoop`);if(!a||!e.switcher.contains(a))return;let o=a.dataset.k??``,s=e.getScoops().find(e=>e.jid===o);if(!s)return;let c=e.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(e.labelFn??(await t(async()=>{let{quickLabel:e}=await import(`./quick-llm-m5pdShbE.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,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 xr(e,n,r){let{RemoteTerminalView:i}=await t(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DIEOCe9M.js`);return{RemoteTerminalView:e}},__vite__mapDeps([56,12,57,1,0,2,3,9,8,58,7,6,59,26,5,4,55])),{fetchSecretEnvVars:a}=await t(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DncfFSea.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([60,2,19,1,12,20,21,22])),o=await a(),s=new i({client:n,cwd:`/`,env:Object.keys(o).length>0?o:void 0});await new Promise(t=>e.onClientReady(t)),await s.mount(r),window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function Sr(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 Cr(e,n,r,i){t(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-DmHMvdiC.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([61,12,2,55,1])).then(async({installLeaderPermissionsSurface:i,installMountPendingConsumer:a})=>{let o=r.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await t(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-BufEXbhX.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([62,12]));i({runtimeMode:o,providers:await s(c()||o===`extension`||o===`extension-detached`)}),a({runShell:wr(e,n)})}).catch(e=>i.warn(`WC permissions surface wiring failed`,e))}function wr(e,n){let r=null,i=()=>(r||=(async()=>{await new Promise(t=>e.onClientReady(t));let{TerminalSessionClient:r}=await t(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 Tr(e,n,r,i={}){let{refs:a}=e;e.setClient(n);let o=null,s=gr(e.wiring,n),c=()=>o?.(),l={intercept:null},{controller:u,agentHandle:d}=mr(a,n,()=>e.getSelected(),yr({boot:e,triggerPlaceholder:c,refreshStats:s}),l);e.setController(u),e.onClientReady(s);let f=fr(n),p=async()=>(await f()).reader;i.standalone?.runtimeMode!==`cherry`&&pr(e,n,f,l,r),hr({boot:e,client:n,agentHandle:d,setRefreshPlaceholder:e=>{o=e},triggerPlaceholder:c,openReader:p,openWriter:async()=>(await f()).writer,log:r}),vr(e,n),_r(e,i,r),Cr(e,n,i,r),e.setActivateSurface(nr({fileTree:a.fileTree,termSurface:a.termSurface,memoryHost:a.memoryHost,openFs:p,mountTerminal:t=>xr(e,n,t),log:r}));let{refreshFreezer:m,openFrozen:h}=ur({refs:a,openVfs:f,client:n,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:r});m(),e.onClientReady(m),Sr(e,n,h),f().then(async({reader:e})=>{let{installPreviewVfsResponder:n}=await t(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-CSDC7Oy2.js`);return{installPreviewVfsResponder:e}},[]);n({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>e,logger:r})}).catch(e=>r.warn(`WC page-VFS support wiring failed`,e)),f().then(async({reader:o,writer:s})=>{let{createRemoteSprinkleVfs:c}=await t(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([63,39])),{wireWcSprinkles:l}=await t(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-CF-l37VL.js`);return{wireWcSprinkles:e}},__vite__mapDeps([64,12])),u=await l({refs:a,client:n,fs:c({reader:o,writer:s}),instanceId:i.instanceId,log:r});if(e.onClientReady(()=>void u.resync()),i.standalone&&i.instanceId){let{wireWcTray:o}=await t(async()=>{let{wireWcTray:e}=await import(`./wc-tray-BG2_SPu3.js`);return{wireWcTray:e}},__vite__mapDeps([65,12,11,1,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,57,28,29,30,66,67,50,51,52,68,44,69])),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:()=>e.getController(),getSelectedJid:()=>e.getSelected()?.jid??`cone`,agentHandle:d,openFs:p,baseFloatLabel:i.standalone.baseFloatLabel,window,log:r})}}).catch(e=>r.error(`WC sprinkle/tray wiring failed`,e)),t(async()=>{let{wireWcNav:e}=await import(`./wc-nav-Cvf1-2nX.js`);return{wireWcNav:e}},__vite__mapDeps([70,12,28,1,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,69])).then(({wireWcNav:e})=>e({refs:a,client:n,log:r})).catch(e=>r.error(`WC nav wiring failed`,e)),t(async()=>{let{wireWcVoice:e}=await import(`./wc-voice-erm0EtRv.js`);return{wireWcVoice:e}},__vite__mapDeps([71,12])).then(({wireWcVoice:t})=>t({refs:a,send:t=>e.getController()?.sendUserMessage(t),log:r})).catch(e=>r.error(`WC voice wiring failed`,e)),t(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-BJF-32Qm.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([72,2,48,73,12,49,19,1,20,50,51,52,55,36])).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)),t(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-D9WnbzxD.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([47,12,2,48,49,19,1,20,50,51,52])).then(({setSpeakAssetsInstanceId:e})=>e(i.instanceId)).catch(e=>r.error(`WC say warmup wiring failed`,e))}async function Er(e,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:f}=await d({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:p,DEFAULT_STANDALONE_LABEL:m}=await t(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-dfUH87GD.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},[]),h=r===`standalone`||r===`electron-overlay`?await p():m,g=dr(e,h),_=Pn({realCdpTransport:a,instanceId:o,callbacks:$(g.wiring),localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u});On({send:e=>_.client.sendRaw(e)}),f?.(_.client),Tr(g,_.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,baseFloatLabel:h}});let{setupSudoStandalone:ee}=await t(async()=>{let{setupSudoStandalone:e}=await import(`./main-BYXYn5lL.js`).then(e=>e.f);return{setupSudoStandalone:e}},__vite__mapDeps([28,1,29,12,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30]));await ee({log:n}),await _.ready,g.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:_.client.getScoops().length})}export{Vt as a,Tr as attachWcClient,on as c,$ as createWcLiveCallbacks,M as d,vt as f,sn as i,tt as l,nt as m,Er as mountWcUiLive,En as n,H as o,j as p,dr as prepareWcShell,B as r,U as s,zn as t,yt as u};
252
+ `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await Rt({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){L.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function an(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 on(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 sn(e,t,n){if(!t.pendingEnrichment)return null;let r=await ln(e,t);if(r===null)return null;let i=un(t,r);if(i===null)return null;let a=await dn(t,i,n);if(a===null)return null;let o=await cn(n,a.newTitle);return await fn(e,t,a.bullets,n),await pn(e,t,r,a.newTitle,o)}async function cn(e,t){if(e.pickIcon)try{return await Ut(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){L.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function ln(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`?L.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):L.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function un(e,t){let n;try{n=U(t).messages}catch(t){return L.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?(L.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):Jt(n)}async function dn(e,t,n){let r=``;try{r=await o({messages:t,instruction:s,model:n.model,apiKey:n.apiKey,maxTokens:Bt,headers:n.headers})}catch(t){return L.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let i=``;try{i=$t(await o({messages:t,instruction:a,model:n.model,apiKey:n.apiKey,maxTokens:R,headers:n.headers}))}catch(t){return L.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}:(L.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function fn(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await rn(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){L.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function pn(e,t,n,r,i){let a=H(t),o=mn(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${tn(r)}.md`,c=`${z}/${s}`;try{await V(e,z),await e.writeFile(c,o)}catch(e){return L.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 gn(e,t.filename,u)}catch(e){return L.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){L.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return L.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function mn(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 hn=Promise.resolve();async function gn(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=hn.then(r,r);return hn=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:_n(t)}}function _n(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 vn=`__slicc_binary__`,yn=`b64`;function bn(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[vn]===yn&&typeof t.data==`string`}function xn(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function Sn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function W(e){if(e instanceof Uint8Array)return{[vn]:yn,data:xn(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(bn(e))return Sn(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 Cn=c(`panel-transport`);function wn(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Tn(){return{onMessage:e=>{let t=(t,n,r)=>(wn(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=>{Cn.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var K=c(`offscreen-client`),En=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=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??Tn(),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 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})}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`session-stats`:{let t=e,n=this.pendingStatsRequests.get(t.requestId);n&&(this.pendingStatsRequests.delete(t.requestId),n({totalCost:t.totalCost,fills:t.fills}));break}case`tray-runtime-status`:{let t=e;Dn(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&&Dn(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 Dn(e,t){be({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),p({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 On(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 kn(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 An(e){let t=kn(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function jn(e,t){let n=kn(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 Mn(){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 Nn(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new En(r,An(o.port1)),l=jn(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 Pn(e){return Nn({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-BvRAudrx.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??Mn(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId})}var Fn=`<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 In(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 Ln(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(Fn));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{await t(In(e.getMessages())??I([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=I([...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 Rn(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var zn=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h=[];#g=[];#_=new Map;#v=null;#y=null;#b=``;#x=!1;#S=!1;#C=`thinking`;#w=0;#T=null;#E=new Set;#D=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.agent.onEvent(e=>this.#F(e)),this.#m=e=>this.#J(e),this.#e.addEventListener(`slicc-error-retry`,this.#m)}dispose(){this.#d(),this.#e.removeEventListener(`slicc-error-retry`,this.#m);for(let e of[...this.#D.keys()])this.#q(e)}get processing(){return this.#S}getMessages(){return this.#h.map(e=>({...e}))}setAgent(e){this.#d(),this.#t=e,this.#d=e.onEvent(e=>this.#F(e))}setOnLocalUserMessage(e){this.#f=e}setOnLocalProcessingChange(e){this.#p=e}addUserMessage(e,t){this.#Z({id:Y(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#g.map(Rn)}removeQueuedMessage(e){let t=this.#g.filter(t=>t.id!==e);t.length!==this.#g.length&&(this.#g=t,this.#k())}#O(){if(this.#g.length===0)return;let e=this.#g;this.#g=[];for(let t of e)this.#Z(t);this.#k()}#k(){this.#c?.(this.#g.map(Rn))}addAssistantMessage(e){this.#Z({id:Y(),role:`assistant`,content:e,timestamp:Date.now()})}loadMessages(e){for(let e of this.#_.keys())this.#a?.(e);for(let e of[...this.#D.keys()])this.#q(e);if(this.#g.length>0){if(this.#l)for(let e of this.#g)try{this.#l(e.id)}catch(e){console.error(`onQueuedCancel hook threw`,e)}this.#g=[],this.#k()}this.#h=Ae(e);let t=[...this.#h].reverse().find(e=>e.isStreaming);this.#v=t?.id??null,t&&(this.#y=t.id),this.#b=``,this.#x=!1,this.#_.clear();let n=[],r=``;for(let e of this.#h){let t=new Date(e.timestamp).toDateString();t!==r&&(n.push(Ne(e.timestamp)),r=t);let i=this.#X(e);this.#_.set(e.id,i),n.push(...i)}let i=this.#e;typeof i.replaceContent==`function`?i.replaceContent(...n):i.replaceChildren(...n),this.#te();for(let e of this.#h)e.isStreaming||this.#i?.(e,this.#_.get(e.id)??[]);this.#P(),this.#re()}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#A(r):r,a={id:Y(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#S?(this.#g.push(a),this.#k()):this.#Z(a),this.#t.sendMessage(i,a.id,a.attachments),this.#j();try{let e=n?.dictation?Se(i):i;this.#f?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#A(e){return xe(e,Ie())}#j(){if(this.#s)try{let e=this.#s();if(!e)return;f(e.scoopName,e.model)}catch{}}addLickMessage(e,t,n,r,i){let a=this.#h[this.#h.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.#Q(a);return}this.#Z({id:e,role:`user`,content:t,timestamp:r,source:`lick`,channel:n,lickId:i,lickState:i?`pending`:void 0,queued:this.#S?!0:void 0})}updateLickState(e,t){let n=this.#h.find(t=>t.lickId===e);n&&(n.lickState=t,this.#Q(n))}setProcessing(e){if(this.#S!==e){this.#S=e,e&&(this.#y=null),e&&(this.#w=0,this.#M(`thinking`)),e&&this.#O(),e||this.#P(),this.#n?.(e);try{this.#p?.(e)}catch(e){console.error(`onLocalProcessingChange hook threw`,e)}e||this.#N()}}#M(e){this.#C!==e&&(this.#C=e,this.#r?.(e))}#N(){let e=this.#y;if(this.#y=null,!this.#o)return;let t=e?this.#Y(e):null;this.#o(t?{...t}:null)}#P(){let e=this.#h[this.#h.length-1];if(!(e?.role===`assistant`&&!e.isStreaming)){this.#T?.remove();return}this.#T??=Ln({getMessages:()=>this.getMessages()}),(this.#e.inner??this.#e).append(this.#T)}#F(e){switch(e.type){case`message_start`:this.#I(e.messageId);break;case`content_delta`:this.#L(e.messageId,e.text);break;case`content_done`:this.#z(e.messageId);break;case`tool_use_start`:this.#B(e.messageId,e.toolName,e.toolInput);break;case`tool_result`:this.#V(e.messageId,e.toolName,e.result,e.isError);break;case`tool_ui`:this.#G(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#K(e.requestId);break;case`turn_end`:this.#H(e.messageId);break;case`error`:this.#U(e.error);break;case`screenshot`:case`terminal_output`:break;default:break}}#I(e){this.setProcessing(!0),this.#v=e,this.#y=e,this.#Z({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#L(e,t){this.#Y(e)&&(this.#b+=t,!this.#x&&(this.#x=!0,requestAnimationFrame(()=>this.#R(e))))}#R(e){if(this.#x=!1,!this.#b)return;let t=this.#Y(e);t&&(t.content+=this.#b,this.#b=``,this.#Q(t))}#z(e){let t=this.#Y(e);t&&(this.#b&&this.#v===e&&(t.content+=this.#b),this.#b=``,this.#x=!1,t.isStreaming=!1,this.#Q(t))}#B(e,t,n){let r=this.#Y(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:Y(),name:t,input:n}),this.#w+=1,this.#M(`tool`),this.#Q(r))}#V(e,t,n,r){let i=this.#Y(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#w=Math.max(0,this.#w-1),this.#w===0&&this.#M(`thinking`),this.#Q(i))}#H(e){let t=this.#Y(e);t?.isStreaming&&(t.isStreaming=!1,this.#Q(t)),this.#v=null,this.setProcessing(!1)}#U(e){this.setProcessing(!1),this.#Z({id:Y(),role:`assistant`,content:e,timestamp:Date.now(),error:!0}),this.#W(e)}#W(e){try{if(Fe(e)||Oe(e)||Ce(e))return;u(`error-card`,e)}catch{}}#G(e,t,n){this.#q(t);let r=document.createElement(`div`);r.className=`msg__dip`,r.setAttribute(`data-tool-ui-request`,t),(this.#e.inner??this.#e).append(r);let i=j(r,n,(e,n)=>{this.#u?.(t,e,n)},!1);this.#D.set(t,{instance:i,container:r}),this.#u?.(t,l,void 0)}#K(e){this.#q(e)}#q(e){let t=this.#D.get(e);if(t){this.#D.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#J(e){if(this.#S)return;let t=e.detail?.messageId??null,n=this.#h.length;if(t){let e=this.#h.findIndex(e=>e.id===t);e>=0&&(n=e)}let r=n>0?this.#h[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.#h[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)}#Y(e){return this.#h.find(t=>t.id===e)}#X(e){try{return we(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]}}#Z(e){this.#ee(),this.#h.push(e);let t=this.#X(e);this.#_.set(e.id,t),this.#e.append(...t),this.#te(),e.isStreaming||this.#i?.(e,t),e.role===`user`?this.#re():this.#ie()}#Q(e){this.#ee(),this.#a?.(e.id);let t=this.#_.get(e.id)??[],n=this.#X(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.#_.set(e.id,n),this.#te(),e.isStreaming||this.#i?.(e,n),this.#ie()}#$(){return this.#e.inner??this.#e}#ee(){je(this.#$(),this.#E)}#te(){Te(this.#$(),{openClusterAnchors:this.#E,toolCallLookup:(e,t)=>this.#ne(e,t)})}#ne(e,t){return this.#h.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#re(){this.#e.scrollTop=this.#e.scrollHeight}#ie(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#re()}};function Bn(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function Vn(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,Bn(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Hn(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 Un(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function Un(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 Wn(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 Gn(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(Vn))}async function Kn(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 qn=`/workspace/CLAUDE.md`,Z=64;function Jn(e){if(e.length<=Z)return{title:e,summary:``};let t=e.lastIndexOf(` `,Z),n=t>Z/2?t:Z;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function Yn(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(Jn(e)),n=null};for(let t of e.split(`
253
+ `)){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(Jn(e.trim())),t}async function Xn(e){let t=``;try{let n=await e.readFile(qn,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return Yn(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})}var Zn=[`/workspace`,`/shared`],Qn=3,$n=200;async function er(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=[];for(let r of[...i,...a].slice(0,$n)){let i=`${t}/${r.name}`;r.type===`directory`?o.push({kind:`dir`,id:i,label:r.name,children:n<Qn?await er(e,i,n+1):[]}):o.push({kind:`file`,id:i,label:r.name,path:i})}return o}async function tr(e){let t=[];for(let n of Zn)t.push({kind:`group`,label:`${n.slice(1)}/`}),t.push(...await er(e,n,1));return t}function nr(e){let t=!1;return n=>{if(n===`files`){e.openFs().then(async t=>{e.fileTree.items=await tr(t)}).catch(t=>e.log.error(`WC file tree refresh failed`,t));return}if(n===`memory`){e.openFs().then(async t=>{e.memoryHost.replaceChildren(...await Xn(t))}).catch(t=>e.log.error(`WC memory refresh failed`,t));return}n===`term`&&!t&&(t=!0,e.mountTerminal(e.termSurface).catch(n=>{t=!1,e.log.error(`WC terminal mount failed`,n)}))}}var rr={off:`off`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`,max:`xhigh`},ir={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function ar(e){return e?rr[e]:void 0}function or(e){return(e&&ir[e])??`off`}function sr(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`?!0:m(t.localStorage)}function Q(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:y(e),label:e.isCone?`sliccy`:e.name,eyes:Q(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function $(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),Q(i)!==Q(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`&&Ee(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 lr(e,n){e.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),e.thread.setAttribute(`accent`,y(n)),ke(e,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:y(n)}),e.switcher.setAttribute(`active`,n.jid),e.composerMeta.setAttribute(`thinking`,or(n.config?.thinkingLevel));try{let{resolveCurrentModel:r,resolveModelById:i}=await t(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./main-FJNMV_71.js`).then(e=>e.t);return{resolveCurrentModel:e,resolveModelById:t}},__vite__mapDeps([28,1,29,12,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30])),a=n.config?.modelId,o=a?i(a):r();e.composerMeta.setAttribute(`model`,o.name??o.id),e.composerMeta.toggleAttribute(`no-thinking`,o.reasoning!==!0)}catch{}}function ur(e){let{refs:n,openVfs:r,client:i,getController:a,getSelected:o,selectScoop:s,clearSelection:c,log:l}=e,u=[],d=0,f=!1,p=()=>{let e=++d;r().then(async({reader:r,writer:i})=>{let a=await X(r);if(a===null){if((await Un(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await Wn(r),a.length===0))return;await i.writeFile(B,JSON.stringify(a,null,2))}e===d&&(u=a,Gn(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-I3lG0JAs.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,27,28,29,30,31])).then(({pickLucideIcon:e})=>Hn({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=e=>{m||(m=!0,h()?.setAttribute(`busy`,``),(async()=>{try{if(e!==`erase`){let{writer:n}=await r(),{runNewSessionFreeze:i,runNewSessionFreezeQuick:a}=await t(async()=>{let{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}=await import(`./new-session-RQLW9UpV.js`);return{runNewSessionFreeze:e,runNewSessionFreezeQuick:t}},__vite__mapDeps([32,12,11,1,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,28,29,30,31,33]));e===`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([]),t(async()=>{let{resetDictationPriming:e}=await import(`./wc-shell-k8zT_CCv.js`).then(e=>e.y);return{resetDictationPriming:e}},__vite__mapDeps([34,1,12,27,28,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,35,36,37])).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 Kn(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});a()?.loadMessages(o),n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),n.thread.setAttribute(`accent`,Pe),ke(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=Me(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`),lr(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`)&&e(t)},onClientReady:e=>{c.add(e),s&&e()}}}function fr(e){let n=null;return()=>(n??=(async()=>{let[{createRemoteVfsClient:n},{createRemoteWritableVfsClient:r}]=await Promise.all([t(()=>import(`./remote-vfs-client-Z2qM01yP.js`),__vite__mapDeps([38,39])),t(()=>import(`./writable-vfs-client-BKZGifKZ.js`),__vite__mapDeps([40,39]))]);return{reader:n({transport:e.getTransport()}),writer:r({transport:e.getTransport()})}})(),n)}function pr(e,n,r,i,a){e.onClientReady(()=>{i.intercept||t(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-CJV5ViMw.js`);return{wireWcOnboarding:e}},__vite__mapDeps([41,12,28,1,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,42])).then(({wireWcOnboarding:t})=>t({client:n,getController:()=>e.getController(),openVfs:r,log:a})).then(e=>{i.intercept=e.interceptWelcomeLick}).catch(e=>a.error(`WC onboarding wiring failed`,e))})}function mr(e,i,a,o,s){let c=new Map;t(async()=>{let{loadDipStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadDipStyles:e}},__vite__mapDeps([43,12])).then(({loadDipStyles:e})=>e()).catch(()=>void 0),t(async()=>{let{watchSprinkleThemeBroadcast:e}=await import(`./theme-BBwuyzvz.js`).then(e=>e.r);return{watchSprinkleThemeBroadcast:e}},__vite__mapDeps([44,1])).then(({watchSprinkleThemeBroadcast:e})=>e()).catch(()=>void 0);let l=i.createAgentHandle();l.onEvent(e=>{e.type!==`tool_use_start`&&e.type!==`tool_result`||t(async()=>{let{playCue:e}=await import(`./soundscape-TvriK11t.js`);return{playCue:e}},__vite__mapDeps([45,2,35])).then(({playCue:t})=>t(e.type===`tool_use_start`?`tool-start`:`tool-finish`)).catch(()=>void 0)});let u=new zn({thread:e.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:e=>{t(async()=>{let{consumeVoiceSubmission:e,speakReplyMarkdown:t}=await import(`./voice-reply-DfKSbOma.js`);return{consumeVoiceSubmission:e,speakReplyMarkdown:t}},__vite__mapDeps([46,2,47,12,48,49,19,1,20,50,51,52])).then(async({consumeVoiceSubmission:n,speakReplyMarkdown:r})=>{if(!n())return;let{endVoiceTurn:i,setTtsActive:a}=await t(async()=>{let{endVoiceTurn:e,setTtsActive:t}=await import(`./soundscape-TvriK11t.js`);return{endVoiceTurn:e,setTtsActive:t}},__vite__mapDeps([45,2,35]));try{if(e?.content){a(!0);try{await r(e.content)}finally{a(!1)}}}finally{i()}}).catch(()=>void 0)},onProcessingChange:t=>{e.frame.toggleAttribute(`data-processing`,t),e.inputCard.querySelector(`slicc-send-button`)?.toggleAttribute(`busy`,t),t||o?.()},onBusyPhaseChange:t=>{e.inputCard.querySelector(`slicc-send-button`)?.setAttribute(`phase`,t)},onMessageDisposed:e=>{let t=c.get(e);t&&(yt(t),c.delete(e))},onMessageRendered:(e,t)=>{let n=t[0];n&&c.set(e.id,vt(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:t=>{e.queuedStack.setMessages(t)},onToolUiAction:(e,t,n)=>{i.sendToolUiAction(e,t,n)},onQueuedCancel:e=>{let t=i.selectedScoopJid;t&&i.deleteQueuedMessage(t,e).catch(()=>void 0)}});return e.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 hr(e){let{boot:n,client:r,agentHandle:i,openReader:a,log:o}=e,{refs:s}=n;t(async()=>{let{createPlaceholderRefresher:e}=await import(`./wc-placeholder-DLEqGc0p.js`);return{createPlaceholderRefresher:e}},__vite__mapDeps([53,12,34,1,27,28,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,35,36,37])).then(({createPlaceholderRefresher:t})=>{e.setRefreshPlaceholder(t({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 t(async()=>{let{SessionStore:e}=await import(`./session-store-CCH7W8KY.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),e.triggerPlaceholder())}catch(e){o.warn(`WC session hydration failed`,e)}})();let c=null;t(async()=>{let{wireWcAttach:e}=await import(`./wc-attach-C9_tu3yw.js`);return{wireWcAttach:e}},__vite__mapDeps([54,12,55,1])).then(({wireWcAttach:n})=>{c=n({inputCard:s.inputCard,freezer:s.freezer,composer:s.composer,openReader:a,openWriter:e.openWriter,listConversations:async()=>{let{readSessionsIndex:e}=await t(async()=>{let{readSessionsIndex:e}=await import(`./session-freezer-BBOMQDZu.js`);return{readSessionsIndex:e}},[]);return(await e(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`,e=>{let r=De(e);if(!r)return;let i=e.detail?.source===`dictation`;i&&(t(async()=>{let{markVoiceSubmission:e}=await import(`./voice-reply-DfKSbOma.js`);return{markVoiceSubmission:e}},__vite__mapDeps([46,2,47,12,48,49,19,1,20,50,51,52])).then(({markVoiceSubmission:e})=>e()).catch(()=>void 0),t(async()=>{let{beginVoiceTurn:e,playCue:t}=await import(`./soundscape-TvriK11t.js`);return{beginVoiceTurn:e,playCue:t}},__vite__mapDeps([45,2,35])).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()}),t(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=>{let t=e.detail?.thinking,i=ar(t),a=n.getSelected();a&&i&&r.setScoopThinkingLevel(a.jid,i)})}function gr(e,t){let n=()=>{t.getSessionStats?.().then(n=>{if(n){e.refs.floatbar.setAttribute(`spent`,n.totalCost.toFixed(2)),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 _r(e,n,r){let i=n.standalone;i&&t(async()=>{let{wireWcBrowser:e}=await import(`./wc-browser-DunWpcR7.js`);return{wireWcBrowser:e}},[]).then(({wireWcBrowser:t})=>t({refs:e.refs,browser:i.browser,log:r})).catch(e=>r.error(`WC browser overlay wiring failed`,e))}function vr(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)}),br({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function yr(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 br(e){let n=new Map,r=new Set;e.switcher.addEventListener(`pointerover`,i=>{let a=i.target?.closest?.(`slicc-pill.scoop`);if(!a||!e.switcher.contains(a))return;let o=a.dataset.k??``,s=e.getScoops().find(e=>e.jid===o);if(!s)return;let c=e.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(e.labelFn??(await t(async()=>{let{quickLabel:e}=await import(`./quick-llm-I3lG0JAs.js`).then(e=>e.n);return{quickLabel:e}},__vite__mapDeps([10,1,11,12,13,14,15,16,17,2,18,19,20,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 xr(e,n,r){let{RemoteTerminalView:i}=await t(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DIEOCe9M.js`);return{RemoteTerminalView:e}},__vite__mapDeps([56,12,57,1,0,2,3,9,8,58,7,6,59,26,5,4,55])),{fetchSecretEnvVars:a}=await t(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DncfFSea.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([60,2,19,1,12,20,21,22])),o=await a(),s=new i({client:n,cwd:`/`,env:Object.keys(o).length>0?o:void 0});await new Promise(t=>e.onClientReady(t)),await s.mount(r),window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0})}function Sr(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 Cr(e,n,r,i){t(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-DmHMvdiC.js`);return{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}},__vite__mapDeps([61,12,2,55,1])).then(async({installLeaderPermissionsSurface:i,installMountPendingConsumer:a})=>{let o=r.standalone?.runtimeMode??`standalone`,{buildLeaderPermissionProviders:s,isExtensionRuntime:c}=await t(async()=>{let{buildLeaderPermissionProviders:e,isExtensionRuntime:t}=await import(`./wc-permissions-providers-BufEXbhX.js`);return{buildLeaderPermissionProviders:e,isExtensionRuntime:t}},__vite__mapDeps([62,12]));i({runtimeMode:o,providers:await s(c()||o===`extension`||o===`extension-detached`)}),a({runShell:wr(e,n)})}).catch(e=>i.warn(`WC permissions surface wiring failed`,e))}function wr(e,n){let r=null,i=()=>(r||=(async()=>{await new Promise(t=>e.onClientReady(t));let{TerminalSessionClient:r}=await t(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 Tr(e,n,r,i={}){let{refs:a}=e;e.setClient(n);let o=null,s=gr(e.wiring,n),c=()=>o?.(),l={intercept:null},{controller:u,agentHandle:d}=mr(a,n,()=>e.getSelected(),yr({boot:e,triggerPlaceholder:c,refreshStats:s}),l);e.setController(u),e.onClientReady(s);let f=fr(n),p=async()=>(await f()).reader;i.standalone?.runtimeMode!==`cherry`&&pr(e,n,f,l,r),hr({boot:e,client:n,agentHandle:d,setRefreshPlaceholder:e=>{o=e},triggerPlaceholder:c,openReader:p,openWriter:async()=>(await f()).writer,log:r}),vr(e,n),_r(e,i,r),Cr(e,n,i,r),e.setActivateSurface(nr({fileTree:a.fileTree,termSurface:a.termSurface,memoryHost:a.memoryHost,openFs:p,mountTerminal:t=>xr(e,n,t),log:r}));let{refreshFreezer:m,openFrozen:h}=ur({refs:a,openVfs:f,client:n,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:r});m(),e.onClientReady(m),Sr(e,n,h),f().then(async({reader:e})=>{let{installPreviewVfsResponder:n}=await t(async()=>{let{installPreviewVfsResponder:e}=await import(`./preview-vfs-responder-CSDC7Oy2.js`);return{installPreviewVfsResponder:e}},[]);n({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>e,logger:r})}).catch(e=>r.warn(`WC page-VFS support wiring failed`,e)),f().then(async({reader:o,writer:s})=>{let{createRemoteSprinkleVfs:c}=await t(async()=>{let{createRemoteSprinkleVfs:e}=await import(`./remote-sprinkle-vfs-e81pZJKo.js`);return{createRemoteSprinkleVfs:e}},__vite__mapDeps([63,39])),{wireWcSprinkles:l}=await t(async()=>{let{wireWcSprinkles:e}=await import(`./wc-sprinkles-BtPIBmNQ.js`);return{wireWcSprinkles:e}},__vite__mapDeps([64,12])),u=await l({refs:a,client:n,fs:c({reader:o,writer:s}),instanceId:i.instanceId,log:r});if(e.onClientReady(()=>void u.resync()),i.standalone&&i.instanceId){let{wireWcTray:o}=await t(async()=>{let{wireWcTray:e}=await import(`./wc-tray-BJZGo5tr.js`);return{wireWcTray:e}},__vite__mapDeps([65,12,11,1,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,57,28,29,30,66,67,50,51,52,68,44,69])),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:()=>e.getController(),getSelectedJid:()=>e.getSelected()?.jid??`cone`,agentHandle:d,openFs:p,baseFloatLabel:i.standalone.baseFloatLabel,window,log:r})}}).catch(e=>r.error(`WC sprinkle/tray wiring failed`,e)),t(async()=>{let{wireWcNav:e}=await import(`./wc-nav-BGRbM4u_.js`);return{wireWcNav:e}},__vite__mapDeps([70,12,28,1,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30,69])).then(({wireWcNav:e})=>e({refs:a,client:n,log:r})).catch(e=>r.error(`WC nav wiring failed`,e)),t(async()=>{let{wireWcVoice:e}=await import(`./wc-voice-erm0EtRv.js`);return{wireWcVoice:e}},__vite__mapDeps([71,12])).then(({wireWcVoice:t})=>t({refs:a,send:t=>e.getController()?.sendUserMessage(t),log:r})).catch(e=>r.error(`WC voice wiring failed`,e)),t(async()=>{let{getComposerSpeech:e,setComposerSpeechInstanceId:t}=await import(`./composer-speech-BJF-32Qm.js`);return{getComposerSpeech:e,setComposerSpeechInstanceId:t}},__vite__mapDeps([72,2,48,73,12,49,19,1,20,50,51,52,55,36])).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)),t(async()=>{let{setSpeakAssetsInstanceId:e}=await import(`./speak-D9WnbzxD.js`);return{setSpeakAssetsInstanceId:e}},__vite__mapDeps([47,12,2,48,49,19,1,20,50,51,52])).then(({setSpeakAssetsInstanceId:e})=>e(i.instanceId)).catch(e=>r.error(`WC say warmup wiring failed`,e))}async function Er(e,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u,attachLickForwardingClient:f}=await d({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:p,DEFAULT_STANDALONE_LABEL:m}=await t(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-dfUH87GD.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},[]),h=r===`standalone`||r===`electron-overlay`?await p():m,g=dr(e,h),_=Pn({realCdpTransport:a,instanceId:o,callbacks:$(g.wiring),localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u});On({send:e=>_.client.sendRaw(e)}),f?.(_.client),Tr(g,_.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,baseFloatLabel:h}});let{setupSudoStandalone:ee}=await t(async()=>{let{setupSudoStandalone:e}=await import(`./main-FJNMV_71.js`).then(e=>e.f);return{setupSudoStandalone:e}},__vite__mapDeps([28,1,29,12,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30]));await ee({log:n}),await _.ready,g.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:_.client.getScoops().length})}export{Vt as a,Tr as attachWcClient,on as c,$ as createWcLiveCallbacks,M as d,vt as f,sn as i,tt as l,nt as m,Er as mountWcUiLive,En as n,H as o,j as p,dr as prepareWcShell,B as r,U as s,zn as t,yt as u};