sliccy 5.1.0 → 5.2.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 (85) hide show
  1. package/README.md +1 -1
  2. package/dist/ui/assets/{account-store-BX9GfGpy.js → account-store-B9L-iw3_.js} +2 -2
  3. package/dist/ui/assets/{account-store-__nJFJuH.js → account-store-J1i56LXB.js} +2 -2
  4. package/dist/ui/assets/{adobe-B1R3D4ax.js → adobe-BE4O6RpW.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-DiYFIv7k.js → adobe-oauth-state-BSzOZOb6.js} +1 -1
  6. package/dist/ui/assets/{adobe-t7lv-7rP.js → adobe-uU9WScyf.js} +1 -1
  7. package/dist/ui/assets/{agent-message-to-chat-DLGwDl9R.js → agent-message-to-chat-BDsWz4XM.js} +1 -1
  8. package/dist/ui/assets/{apps-BRuyTGDt.js → apps-D9vX8Iuh.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BuCmBh8o.js → azure-openai-BANs3KGr.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-DyRw2ox_.js → azure-openai-D6toPyQ8.js} +1 -1
  11. package/dist/ui/assets/{connect-surface-CTakCrLA.js → connect-surface-DAC3CNei.js} +1 -1
  12. package/dist/ui/assets/dip-3VX86RoF.js +1 -0
  13. package/dist/ui/assets/{dist-B-NrvOrF.js → dist--TcGqpJG.js} +1 -1
  14. package/dist/ui/assets/{dist-DA8XNg-Y.js → dist-BWYQOlqM.js} +1 -1
  15. package/dist/ui/assets/{ensure-speech-assets-DfuH4JcH.js → ensure-speech-assets-B-pBwbKb.js} +1 -1
  16. package/dist/ui/assets/esp8266-DEulqnXg.js +1 -0
  17. package/dist/ui/assets/{esptool-operations-BB4rdljh.js → esptool-operations-CP9wpmtB.js} +2 -2
  18. package/dist/ui/assets/extension-bridge-transport-B4WmKl7n.js +1 -0
  19. package/dist/ui/assets/{fs-BB_SAbwd.js → fs-BMm4juUO.js} +2 -2
  20. package/dist/ui/assets/{fs-CifG7P-Y.js → fs-CDxFmHhs.js} +1 -1
  21. package/dist/ui/assets/{github-CY23tpOQ.js → github-Bv3awCy-.js} +2 -2
  22. package/dist/ui/assets/{github-copilot-BkNOwYnI.js → github-copilot-Bo6St-mj.js} +1 -1
  23. package/dist/ui/assets/{github-copilot-R68yFv1B.js → github-copilot-EhpEoXT_.js} +1 -1
  24. package/dist/ui/assets/{github-aGqhwptW.js → github-igAb2Tr3.js} +1 -1
  25. package/dist/ui/assets/{hear-KVAlB2u3.js → hear-CTBETRuZ.js} +1 -1
  26. package/dist/ui/assets/{kernel-worker-D4No74Rn.js → kernel-worker-DU2Lsjyz.js} +18 -18
  27. package/dist/ui/assets/{kokoro-engine-B4NSL__G.js → kokoro-engine-qxvtO16S.js} +1 -1
  28. package/dist/ui/assets/lick-ws-bridge-CAy0-YSl.js +1 -0
  29. package/dist/ui/assets/lick-ws-bridge-D_Q0B4_w.js +1 -0
  30. package/dist/ui/assets/{local-llm-QFAiSycD.js → local-llm-yvkTurpV.js} +1 -1
  31. package/dist/ui/assets/{main-Los951iC.js → main-DYwi5YqO.js} +5 -5
  32. package/dist/ui/assets/{mount-CH65QvHP.js → mount-BMTmsC-u.js} +1 -1
  33. package/dist/ui/assets/{mount-Cip4yCuf.js → mount-C0n7eObT.js} +2 -2
  34. package/dist/ui/assets/new-session-BgzUQaQk.js +2 -0
  35. package/dist/ui/assets/{oauth-bootstrap-h_UbHxpr.js → oauth-bootstrap-B35kl1hZ.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-qKO3SnGT.js → openai-codex-BziCxD0k.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-Drx-sWx6.js → openai-codex-CNXAYokU.js} +1 -1
  38. package/dist/ui/assets/{page-follower-tray-eyqLk3No.js → page-follower-tray-tXYeooU8.js} +1 -1
  39. package/dist/ui/assets/{panel-rpc-handlers-DDn16E6S.js → panel-rpc-handlers-Cxg9OE7o.js} +1 -1
  40. package/dist/ui/assets/{provider-Bk5tR4W8.js → provider-CzdDndd-.js} +2 -2
  41. package/dist/ui/assets/{provider-BDEQqYu6.js → provider-DOAeQgJY.js} +1 -1
  42. package/dist/ui/assets/provider-store-access-02kN2Pzi.js +1 -0
  43. package/dist/ui/assets/provider-store-access-DOOb1KbA.js +1 -0
  44. package/dist/ui/assets/{providers-echBmlIf.js → providers-Kx_BEFqJ.js} +1 -1
  45. package/dist/ui/assets/{quick-llm-0pwkjMlK.js → quick-llm-BW-brmSb.js} +1 -1
  46. package/dist/ui/assets/session-freezer-D6kbwY6i.js +1 -0
  47. package/dist/ui/assets/{speak-XL1dWoHM.js → speak-B8c3oh9Y.js} +1 -1
  48. package/dist/ui/assets/{sprinkle-manager-UbZsrwBz.js → sprinkle-manager-BpLedeCo.js} +1 -1
  49. package/dist/ui/assets/{store-CVZ6ZIji.js → store-Ccl5ODaE.js} +1 -1
  50. package/dist/ui/assets/{sudo-BDZXheEy.js → sudo-D6_01n3k.js} +1 -1
  51. package/dist/ui/assets/{transformers-env-B6C1TC4q.js → transformers-env-D2tn9gLL.js} +1 -1
  52. package/dist/ui/assets/tray-leader-DGFajpwM.js +1 -0
  53. package/dist/ui/assets/{tray-leave-runtime-Co8XC8tK.js → tray-leave-runtime-taK1Ebp7.js} +1 -1
  54. package/dist/ui/assets/{upgrade-detection-D4OMdch4.js → upgrade-detection-DrfEt3Mi.js} +1 -1
  55. package/dist/ui/assets/{wc-attach-CkKgwT4V.js → wc-attach-DBF_z5mw.js} +2 -2
  56. package/dist/ui/assets/{wc-detached-CzW2c8mL.js → wc-detached-Wt3lzK1R.js} +1 -1
  57. package/dist/ui/assets/{wc-extension-C48rbDns.js → wc-extension-DfX8q6Ih.js} +2 -2
  58. package/dist/ui/assets/wc-follower-BVeqP5KF.js +2 -0
  59. package/dist/ui/assets/wc-live-DqgXrP0F.js +253 -0
  60. package/dist/ui/assets/wc-nav-6aYy7HCy.js +2 -0
  61. package/dist/ui/assets/{wc-onboarding-COda-Pq8.js → wc-onboarding-CEjOIdK5.js} +2 -2
  62. package/dist/ui/assets/{wc-placeholder-9oJom_IG.js → wc-placeholder-CHDb9Kuo.js} +3 -3
  63. package/dist/ui/assets/{wc-settings-BbinzQiG.js → wc-settings-qlpR6Q6T.js} +2 -2
  64. package/dist/ui/assets/{wc-shell-BcXdkTTf.js → wc-shell-DTsW2ra1.js} +4 -4
  65. package/dist/ui/assets/{wc-sprinkles-1eY8GtQO.js → wc-sprinkles-D_fwWOq8.js} +2 -2
  66. package/dist/ui/assets/wc-tray-2mdLomRm.js +2 -0
  67. package/dist/ui/assets/{whisper-engine-wTAqjv33.js → whisper-engine-CvJzjL-a.js} +1 -1
  68. package/dist/ui/assets/{xai-grok-D5if0nkQ.js → xai-grok-BoTmSfDH.js} +1 -1
  69. package/dist/ui/assets/{xai-grok-BkSvCOYm.js → xai-grok-U2afiu3-.js} +1 -1
  70. package/dist/ui/electron-overlay-entry.js +51 -51
  71. package/dist/ui/index.html +2 -2
  72. package/dist/ui/packages/webapp/index.html +2 -2
  73. package/package.json +1 -1
  74. package/dist/ui/assets/dip-DPIo9DJ6.js +0 -1
  75. package/dist/ui/assets/esp8266-DBIA5vli.js +0 -1
  76. package/dist/ui/assets/extension-bridge-transport-DYOF2OYC.js +0 -1
  77. package/dist/ui/assets/lick-ws-bridge-Cu_XNsz1.js +0 -1
  78. package/dist/ui/assets/new-session-FPsFIQIp.js +0 -2
  79. package/dist/ui/assets/provider-store-access-BArZuESx.js +0 -1
  80. package/dist/ui/assets/provider-store-access-DzzBbuY1.js +0 -1
  81. package/dist/ui/assets/session-freezer-CehY1SFW.js +0 -1
  82. package/dist/ui/assets/wc-follower-Ch4ryyJH.js +0 -2
  83. package/dist/ui/assets/wc-live-BmYXRpZq.js +0 -253
  84. package/dist/ui/assets/wc-nav-CVU90Xz2.js +0 -2
  85. package/dist/ui/assets/wc-tray-DtDqIPiy.js +0 -2
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/main-Los951iC.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-DYwi5YqO.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
@@ -24,7 +24,7 @@
24
24
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DzB_lMo-.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-9-QEmC9Z.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
27
- <link rel="modulepreload" crossorigin href="/assets/account-store-__nJFJuH.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/account-store-J1i56LXB.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DgFtRQbq.js">
29
29
  </head>
30
30
  <body>
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>slicc</title>
7
7
  <link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
8
- <script type="module" crossorigin src="/assets/main-Los951iC.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-DYwi5YqO.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
@@ -24,7 +24,7 @@
24
24
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DzB_lMo-.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-9-QEmC9Z.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-DfXu6quJ.js">
27
- <link rel="modulepreload" crossorigin href="/assets/account-store-__nJFJuH.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/account-store-J1i56LXB.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DgFtRQbq.js">
29
29
  </head>
30
30
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- import{_ as e}from"./wc-live-BmYXRpZq.js";export{e as setDipExecHandler};
@@ -1 +0,0 @@
1
- import{t as e}from"./esptool-operations-BB4rdljh.js";export{e as ESP8266ROM};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./cdp-bridge-CUqQUcaF.js";var n=`slicc.cdp-bridge`,r=new Set([`handshake.hello`,`handshake.welcome`,`handshake.rejected`,`cdp.request`,`cdp.response`,`cdp.event`]);function i(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.bridge===1&&typeof t.channelId==`string`&&typeof t.kind==`string`&&r.has(t.kind)}var a=e(`cdp:extension-bridge`),o=1e4;function s(e,t){let n=globalThis.chrome?.runtime;if(!n?.connect)throw Error(`chrome.runtime.connect is not available in this realm — the page must be in the extension externally_connectable allowlist`);return n.connect(e,t)}var c=class extends t{isExtensionBridge=!0;bridgeOpts;channelId;portHolder;resolveWelcome=null;rejectWelcome=null;welcomeTimer=null;intentionalDisconnect=!1;constructor(e){let t=`bridge-${crypto.randomUUID()}`,n={port:null};super(l(t,n)),this.bridgeOpts=e,this.channelId=t,this.portHolder=n}async connect(e){this.intentionalDisconnect=!1;let t=(this.bridgeOpts.connect??s)(this.bridgeOpts.extensionId,{name:n});this.portHolder.port=t;let r=new Promise((e,t)=>{this.resolveWelcome=e,this.rejectWelcome=t});t.onMessage.addListener(e=>this.handleHandshake(e)),t.onDisconnect.addListener(()=>this.handlePortDisconnect(t)),t.postMessage({bridge:1,channelId:this.channelId,kind:`handshake.hello`});let i=e?.timeout??this.bridgeOpts.handshakeTimeoutMs??o;this.welcomeTimer=setTimeout(()=>{if(this.rejectWelcome){this.rejectWelcome(Error(`Extension bridge handshake timed out after ${i}ms`)),this.cleanupHandshake();try{t.disconnect()}catch{}this.portHolder.port=null}},i),await r,await super.connect(e)}disconnect(){this.intentionalDisconnect=!0,this.cleanupHandshake();let e=this.portHolder.port;if(e){try{e.disconnect()}catch{}this.portHolder.port=null}super.disconnect()}handlePortDisconnect(e){if(!(this.portHolder.port!==e&&this.portHolder.port!==null)){if(this.portHolder.port=null,this.rejectWelcome){this.rejectWelcome(Error(`Extension bridge port disconnected before welcome`)),this.cleanupHandshake();return}!this.intentionalDisconnect&&this.state===`connected`&&super.disconnect()}}__test_receive(e){this.handleHandshake(e)}handleHandshake(e){if(!i(e))return;let t=e;if(t.channelId===this.channelId){if(t.kind===`handshake.welcome`){this.resolveWelcome?.(),this.cleanupHandshake();return}t.kind===`handshake.rejected`&&(a.warn(`Extension bridge handshake rejected`,{reason:t.reason}),this.rejectWelcome?.(Error(`Extension bridge handshake rejected: ${t.reason}`)),this.cleanupHandshake())}}cleanupHandshake(){this.welcomeTimer!==null&&(clearTimeout(this.welcomeTimer),this.welcomeTimer=null),this.resolveWelcome=null,this.rejectWelcome=null}};function l(e,t){return{label:`ExtensionBridgeTransport`,buildCommandEnvelope:(t,n,r,i)=>({bridge:1,channelId:e,kind:`cdp.request`,id:t,method:n,params:r,sessionId:i}),sendEnvelope:async e=>{let n=t.port;if(!n)throw Error(`Extension bridge port not connected`);n.postMessage(e)},subscribeIncoming:e=>{let n=t.port;if(!n)throw Error(`Extension bridge subscribeIncoming called without an open port`);return n.onMessage.addListener(t=>e(t)),()=>{}},parseResponse:t=>{if(!i(t))return null;let n=t;return n.channelId!==e||n.kind!==`cdp.response`?null:{id:n.id,result:n.result,error:n.error}},parseEvent:t=>{if(!i(t))return null;let n=t;if(n.channelId!==e||n.kind!==`cdp.event`)return null;let r=n.sessionId?{...n.params??{},sessionId:n.sessionId}:n.params;return{method:n.method,params:r}},onListenerError:(e,t)=>{a.warn(`Extension bridge listener error`,{event:e,error:t instanceof Error?t.message:String(t)})}}}export{c as ExtensionBridgeTransport};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{b as t,n,r,t as i,y as a}from"./kernel-worker-D4No74Rn.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await p(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){d(e.lickManager,r);return}r.type===`navigate_event`&&f(e.lickManager,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n){o.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)});return}let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{e.handleWebhookEvent(n,r,t.body)}catch(e){o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)})}}function f(e,t){let n=typeof t.verb==`string`?t.verb:null,r=typeof t.target==`string`?t.target:null,i=typeof t.url==`string`&&t.url.length>0?t.url:null;if(n!==`handoff`&&n!==`upskill`||!r||!i){o.debug(`navigate_event dropped — invalid payload`,{hasVerb:!!n,hasTarget:!!r,hasUrl:!!i});return}let a={url:i,verb:n,target:r};typeof t.instruction==`string`&&(a.instruction=t.instruction),typeof t.branch==`string`&&(a.branch=t.branch),typeof t.path==`string`&&(a.path=t.path),typeof t.title==`string`&&(a.title=t.title),e.emitEvent({type:`navigate`,navigateUrl:i,targetScoop:void 0,timestamp:typeof t.timestamp==`string`?t.timestamp:new Date().toISOString(),body:a})}async function p(e,t,n){let{lickManager:r}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:n,data:r.listWebhooks().map(t=>({...t,url:m(e,t.id)}))};case`create_webhook`:{let i=await r.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:n,data:{...i,url:m(e,i.id)}}}case`delete_webhook`:return await r.deleteWebhook(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:n,data:r.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:n,data:await r.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await r.deleteCronTask(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Cron task not found`}};case`tray_status`:{let e=a();return{type:`response`,requestId:n,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:n,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:n,error:e instanceof Error?e.message:String(e)}}}function m(e,i){let a=t().session;return a?.webhookUrl?n(a.webhookUrl,i):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${i}`:r(e.options.locationHref,i)}function h(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function g(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:i(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let a={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return s(a),{stop(){h(a)}}}export{g as startLickWsBridge};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-0pwkjMlK.js","assets/chunk-aKtaBQYM.js","assets/account-store-__nJFJuH.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/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/icons-BU6llBsN.js","assets/main-Los951iC.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{F as t,m as n}from"./account-store-__nJFJuH.js";import{t as r}from"./logger-DDBAeTLF.js";import"./main-Los951iC.js";import{t as i}from"./llm-session-id-DVmZ9C2t.js";import{SessionStore as a}from"./session-store-CCH7W8KY.js";import{c as o,s}from"./wc-live-BmYXRpZq.js";var c=r(`new-session`),l=`ui-new-session`,u=2e4,d=250;async function f(r){let d=r.enrichmentRaceMs??u,f=n()??void 0,m;try{m=t()}catch(e){c.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let h=m?.provider===`adobe`?{"X-Session-Id":i(l)}:void 0,g=new a;try{await g.init()}catch(e){return c.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}let _=await o({sessionStore:g,vfs:r.vfs,mode:`quick`});if(!_)return null;if(!f||!m)return c.info(`Frozen without enrichment (no LLM credentials) — left pending`,{filename:_.filename}),_;let v=m,y=s(r.vfs,_,{model:v,apiKey:f,headers:h,pickIcon:t=>e(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-0pwkjMlK.js`).then(e=>e.n);return{pickLucideIcon: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])).then(({pickLucideIcon:e})=>e(t))}).catch(e=>(c.warn(`Single-click enrichment threw (entry stays pending)`,{filename:_.filename,error:e instanceof Error?e.message:String(e)}),null)),b=await p(y,d,r.onProgress);return b.kind===`llm`?b.updated?{...b.updated,archive:_.archive}:_:(y.then(e=>{c.info(`Background enrichment resolved after race window`,{filename:_.filename,enriched:e?.filename??null}),r.onBackgroundEnriched?.(e)}),_)}async function p(e,t,n){let r=Date.now(),i,a;n?.(0),n&&(i=setInterval(()=>{n(Math.min(1,(Date.now()-r)/t))},d));let o=new Promise(e=>{a=setTimeout(()=>e({kind:`timer`}),t)}),s=e.then(e=>({kind:`llm`,updated:e}));try{return await Promise.race([s,o])}finally{i&&clearInterval(i),a&&clearTimeout(a),n?.(null)}}async function m(e){let t=new a;try{await t.init()}catch(e){return c.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return o({sessionStore:t,vfs:e.vfs,mode:`quick`})}export{f as runNewSessionFreeze,m as runNewSessionFreezeQuick};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-CVZ6ZIji.js";import"./provider-BDEQqYu6.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-Bk5tR4W8.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{d as e}from"./wc-live-BmYXRpZq.js";export{e as readSessionsIndex};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-live-BmYXRpZq.js","assets/preload-helper-zJ_50EbN.js","assets/account-store-__nJFJuH.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-BcXdkTTf.js","assets/icons-BU6llBsN.js","assets/main-Los951iC.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/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{b as n,m as r,p as i,u as a,v as o}from"./main-Los951iC.js";import{n as s}from"./remote-cdp-transport-Cf0sDZ5N.js";import{i as c}from"./wc-shell-BcXdkTTf.js";import{prepareWcShell as l,t as u}from"./wc-live-BmYXRpZq.js";import{t as d}from"./page-follower-tray-eyqLk3No.js";import{WcSprinkleZone as f}from"./wc-sprinkles-1eY8GtQO.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(),r=n(e);r!==e&&t.replaceHref(r)}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,n,r){let i=r===`cherry`,p;try{p=await a({runtimeMode:r,envBaseUrl:null,window,log:n})}catch(e){let n=e instanceof Error?e.message:String(e);h.error(`follower prelude failed`,{runtimeMode:r,error:n}),_(t,n);return}let y=i?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:r}=await e(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-BmYXRpZq.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]));return r(t,n,`standalone`)}let b=l(t,i?`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:i?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})},...i?{onCherrySliccEvent:(e,t)=>p.cherryTransport?.emitSliccEventToHost(e,t)}:{}});i&&p.cherryTransport&&(p.cherryTransport.onHostEvent=(e,t)=>T.currentSync?.sendCherryHostEvent(e,t));let E=null;if(!i){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-CnHWEu_l.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([38,39,9,40]));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:r,isCherry:i})}export{y as mountWcUiFollower};
@@ -1,253 +0,0 @@
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-0pwkjMlK.js","assets/account-store-__nJFJuH.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-Los951iC.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/clipboard-DgFtRQbq.js","assets/llm-session-id-DVmZ9C2t.js","assets/new-session-FPsFIQIp.js","assets/session-store-CCH7W8KY.js","assets/wc-shell-BcXdkTTf.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-COda-Pq8.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-9oJom_IG.js","assets/wc-attach-CkKgwT4V.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/remote-terminal-view-DMnqOfIb.js","assets/browser-D0vICVpZ.js","assets/terminal-session-client-CbAduNfC.js","assets/picker-approval-Dc390nC7.js","assets/secret-env-DncfFSea.js","assets/wc-permissions-Wqap3kzM.js","assets/wc-permissions-providers-BufEXbhX.js","assets/remote-sprinkle-vfs-e81pZJKo.js","assets/wc-sprinkles-1eY8GtQO.js","assets/wc-tray-DtDqIPiy.js","assets/remote-cdp-transport-Cf0sDZ5N.js","assets/page-follower-tray-eyqLk3No.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/wc-nav-CVU90Xz2.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-__nJFJuH.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{a as l,l as u,t as d,u as f}from"./proxied-fetch-CKDBmEMl.js";import{t as p}from"./tool-ui-DfXu6quJ.js";import{_ as m,g as h,i as g,l as _,u as ee}from"./main-Los951iC.js";import{t as te}from"./wc-permissions-registry-CR1rTd2H.js";import{n as ne,r as re}from"./hid-device-registry-D2LsJCRr.js";import{a as ie,i as ae}from"./serial-port-registry-Bc4wlwED.js";import{C as oe,D as se,E as ce,S as le,_ as ue,a as de,g as fe,h as pe,k as me,l as he,m as ge,n as _e,o as ve,s as ye,w as be,x as xe,y as Se}from"./usb-operations-CkcrNzZw.js";import{i as Ce,r as we}from"./usb-device-registry-BP58Vi0S.js";import{_ as Te,c as Ee,d as v,h as De,i as Oe,l as ke,m as Ae,n as je,o as Me,p as Ne,r as Pe,s as Fe,t as Ie,u as Le}from"./wc-shell-BcXdkTTf.js";import{t as Re}from"./icons-BU6llBsN.js";import{n as ze}from"./sprinkle-bridge-Du2dCM8G.js";import{i as Be,n as y,t as Ve}from"./theme-BBwuyzvz.js";import{n as He}from"./sprinkle-renderer-GiRRbdBx.js";var Ue=typeof chrome<`u`&&!!chrome?.runtime?.id;async function b(e,t){if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);let n=await S(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 x=null;function We(){if(x)return x;if(typeof BroadcastChannel>`u`)return null;try{x=new BroadcastChannel(`preview-vfs`)}catch{return null}return x}async function S(e,t,n){let r=We();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 Ge=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],Ke=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function qe(e){return Ge.some(t=>e.startsWith(t))}function Je(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:Ke.some(t=>e.startsWith(t))}var C=new WeakSet,Ye=`,
3
- exec: Object.assign(function(cmd) {
4
- return _vfsCall('dip-exec', { cmd: cmd }, function(m) { return m.result; });
5
- }, { spawn: function(argv) {
6
- return _vfsCall('dip-jsh', { op: 'spawn', args: [argv] }, function(m) { return m.result; });
7
- } }),
8
- agent: function(prompt, opts) {
9
- return _vfsCall('dip-agent', { prompt: prompt, opts: opts || null },
10
- function(m) { return m.result; });
11
- }`,Xe=`,
12
- fetch: function(url, init) {
13
- return _vfsCall('dip-jsh', { op: 'fetch', args: [url, init || null] }, function(m) { return m.result; });
14
- },
15
- http: { client: function(cfg) {
16
- function mk(method) { return function(path, opts) { return _vfsCall('dip-jsh', { op: 'http', args: [cfg, method, path, opts || null] }, function(m) { return m.result; }); }; }
17
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
18
- } },
19
- browser: {
20
- findTab: function(q) { return _vfsCall('dip-jsh', { op: 'browser', args: ['findTab', q] }, function(m) { return m.result; }); },
21
- ensureTab: function(url, options) { return _vfsCall('dip-jsh', { op: 'browser', args: ['ensureTab', url, options || {}] }, function(m) { return m.result; }); },
22
- eval: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['eval', tab, code] }, function(m) { return m.result; }); },
23
- evalAsync: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['evalAsync', tab, code] }, function(m) { return m.result; }); },
24
- cookie: function(tab, name) { return _vfsCall('dip-jsh', { op: 'browser', args: ['cookie', tab, name] }, function(m) { return m.result; }); },
25
- localStorage: function(tab, key) { return _vfsCall('dip-jsh', { op: 'browser', args: ['localStorage', tab, key] }, function(m) { return m.result; }); },
26
- fetch: function(tab, url, opts) { return _vfsCall('dip-jsh', { op: 'browser', args: ['fetch', tab, url, opts || {}] }, function(m) { return m.result; }); }
27
- },
28
- fetchToFile: function(url, path) {
29
- return _vfsCall('dip-jsh', { op: 'fetchToFile', args: [url, path] }, function(m) { return m.result; });
30
- }`,Ze=`,
31
- _device: function(channel, op, args) {
32
- return _vfsCall('dip-device-op',
33
- { channel: channel, op: op, args: args || [] },
34
- function(m) { return m.result; });
35
- },
36
- hid: {
37
- list: function() { return _vfsCall('dip-device-op', { channel: 'hid', op: 'list', args: [] }, function(m) { return m.result; }); },
38
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
39
- open: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
40
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
41
- sendReport: function(handle, reportId, data) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'sendReport', args: [handle, reportId, data] }, function(m) { return m.result; }).then(function() {}); },
42
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
43
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.delete(cb); }
44
- },
45
- serial: {
46
- list: function() { return _vfsCall('dip-device-op', { channel: 'serial', op: 'list', args: [] }, function(m) { return m.result; }); },
47
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
48
- open: function(handle, options) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'open', args: [handle, options] }, function(m) { return m.result; }).then(function() {}); },
49
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
50
- },
51
- usb: {
52
- list: function() { return _vfsCall('dip-device-op', { channel: 'usb', op: 'list', args: [] }, function(m) { return m.result; }); },
53
- request: function(filters) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
54
- open: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
55
- close: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
56
- }`;function Qe(e){return`(function() {
57
- var _cbId = 0;
58
- var _callbacks = {};
59
- var _hidInputReportListeners = new Set();
60
-
61
- function _vfsCall(type, params, extractResult) {
62
- return new Promise(function(resolve, reject) {
63
- var id = ++_cbId;
64
- _callbacks[id] = function(msg) {
65
- if (msg.error) reject(new Error(msg.error));
66
- else resolve(extractResult ? extractResult(msg) : undefined);
67
- };
68
- var m = { type: type, id: id };
69
- if (params) { for (var k in params) m[k] = params[k]; }
70
- parent.postMessage(m, '*');
71
- });
72
- }
73
-
74
- window.slicc = window.bridge = {
75
- lick: function(event) {
76
- var action = typeof event === 'string' ? event : event.action;
77
- var data = typeof event === 'string' ? undefined : ('data' in event ? event.data : event);
78
- parent.postMessage({ type: 'dip-lick', action: action, data: data }, '*');
79
- },
80
- /* Read-only VFS access. Mirrors the sprinkle bridge so dips can
81
- check onboarding markers, profiles, etc. without a parent-side
82
- handshake. */
83
- readFile: function(path) {
84
- return _vfsCall('dip-readfile', { path: path }, function(m) { return m.content; });
85
- },
86
- exists: function(path) {
87
- return _vfsCall('dip-exists', { path: path }, function(m) { return m.exists; });
88
- },
89
- stat: function(path) {
90
- return _vfsCall('dip-stat', { path: path }, function(m) { return m.stat; });
91
- }${e?Ye:``}${e?Xe:``}${e?Ze:``}
92
- };
93
- function reportHeight() {
94
- parent.postMessage({ type: 'dip-height',
95
- height: document.documentElement.scrollHeight }, '*');
96
- }
97
- window.addEventListener('message', function(e) {
98
- if (!e.data || typeof e.data.type !== 'string') return;
99
- if (e.data.type === 'slicc-theme') {
100
- document.documentElement.classList.toggle('theme-light', !!e.data.isLight);
101
- return;
102
- }
103
- /* Pushed device events (currently 'hid:inputreport'). The host
104
- attaches the underlying listener on slicc.hid.open(handle) for
105
- this dip; teardown happens automatically on dispose. */
106
- if (e.data.type === 'dip-device-event' && e.data.channel === 'hid:inputreport') {
107
- _hidInputReportListeners.forEach(function(cb) {
108
- try { cb(e.data.payload); } catch(ex) {}
109
- });
110
- return;
111
- }
112
- /* VFS callback responses target the originating call by id. */
113
- if (e.data.id && _callbacks[e.data.id]) {
114
- var cb = _callbacks[e.data.id];
115
- delete _callbacks[e.data.id];
116
- cb(e.data);
117
- return;
118
- }
119
- /* Forward any other slicc-* message to in-page listeners via a
120
- CustomEvent. Dips can opt in with
121
- window.addEventListener('slicc-message', (ev) => ev.detail). */
122
- if (e.data.type.indexOf('slicc-') === 0) {
123
- try {
124
- document.dispatchEvent(new CustomEvent('slicc-message', { detail: e.data }));
125
- } catch (ex) {}
126
- }
127
- });
128
- window.addEventListener('load', function() {
129
- reportHeight();
130
- new ResizeObserver(reportHeight).observe(document.body);
131
- });
132
- /* Support data-action attributes (Tool UI compat) — auto-lick on click.
133
- Also intercept <a href> clicks and relay to the parent so links open
134
- despite the iframe sandbox blocking top-level navigation. */
135
- document.addEventListener('click', function(e) {
136
- var el = e.target;
137
- while (el && el !== document.body) {
138
- if (el.dataset && el.dataset.action) {
139
- var actionData = el.dataset.actionData;
140
- if (actionData) { try { actionData = JSON.parse(actionData); } catch(ex) {} }
141
- /* Picker hint (e.g. data-picker="directory") needs the parent to
142
- run File System Access API on the click activation chain.
143
- Forward as a separate message so the parent can run
144
- showDirectoryPicker, stash the handle in IDB, then dispatch
145
- the lick with the IDB key. */
146
- var picker = el.dataset.picker;
147
- if (picker) {
148
- parent.postMessage({
149
- type: 'dip-picker-action',
150
- action: el.dataset.action,
151
- data: actionData || null,
152
- picker: picker,
153
- }, '*');
154
- } else {
155
- window.slicc.lick({ action: el.dataset.action, data: actionData || null });
156
- }
157
- e.preventDefault();
158
- e.stopPropagation();
159
- return;
160
- }
161
- if (el.tagName === 'A' && el.getAttribute('href')) {
162
- var href = el.getAttribute('href');
163
- /* Allow in-iframe anchor navigation (#foo). Skip javascript: for safety. */
164
- if (href.charAt(0) === '#') return;
165
- if (/^javascript:/i.test(href)) { e.preventDefault(); return; }
166
- /* Resolve relative URLs against the iframe's base. */
167
- var resolved;
168
- try { resolved = new URL(href, document.baseURI).href; } catch(ex) { resolved = href; }
169
- parent.postMessage({ type: 'dip-open-link', url: resolved }, '*');
170
- e.preventDefault();
171
- e.stopPropagation();
172
- return;
173
- }
174
- el = el.parentElement;
175
- }
176
- });
177
- })();`}var $e=`html,body{margin:0;padding:0;overflow:hidden;background:transparent;box-sizing:border-box}
178
- *,*::before,*::after{box-sizing:inherit}
179
- /* Vertical breathing room around dip content. Horizontal padding is owned
180
- by the dip's own content (e.g. .sprinkle-action-card__body) so shtml
181
- widgets that already pad themselves don't end up double-indented. The
182
- ResizeObserver on document.body reports the post-padding scrollHeight
183
- correctly, so auto-height continues to work. The .sprinkle-inline rule
184
- (set on the iframe body) carries 2px of horizontal padding so the 1px
185
- focus ring (box-shadow:0 0 0 1px on inputs/select below) doesn't get
186
- clipped at the iframe paint boundary. */
187
- body{padding:12px 0;font-family:var(--s2-font-family, sans-serif);font-size:13px;color:var(--s2-content-default)}
188
- .sprinkle-inline{padding:var(--s2-spacing-100) 2px}
189
- .sprinkle-inline .sprinkle-btn{padding:4px 12px;font-size:12px;height:28px;box-shadow:none}
190
- .sprinkle-inline .sprinkle-btn:not([class*="sprinkle-btn--"]){background:var(--s2-bg-elevated)}
191
- .sprinkle-inline .sprinkle-card{box-shadow:none;margin:0}
192
- .sprinkle-inline .sprinkle-action-card{margin:0;width:100%}
193
- .sprinkle-inline .sprinkle-action-card .sprinkle-table{width:100%}
194
- .sprinkle-inline .sprinkle-grid{width:100%}
195
- input[type="range"]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--s2-gray-300);border-radius:2px;outline:none;cursor:default}
196
- input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
197
- input[type="range"]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
198
- input[type="text"],input[type="number"],textarea{width:100%;padding:7px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;box-sizing:border-box}
199
- input[type="text"]:focus,input[type="number"]:focus,textarea:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
200
- input[type="text"]::placeholder,textarea::placeholder{color:var(--s2-content-disabled,var(--s2-gray-400))}
201
- select{padding:6px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;cursor:default}
202
- select:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
203
- button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:4px 12px;border:1px solid var(--s2-border-default,var(--s2-gray-300));border-radius:9999px;background:transparent;color:var(--s2-content-default);font-size:12px;font-weight:700;font-family:var(--s2-font-family,sans-serif);cursor:default;transition:background 130ms ease}
204
- button:hover{background:color-mix(in srgb,var(--s2-content-default) 6%,transparent)}
205
- button:disabled{opacity:0.4;pointer-events:none}
206
- canvas{display:block;width:100%;border-radius:8px}
207
- mark{background:color-mix(in srgb,var(--s2-accent) 25%,transparent);color:inherit;border-radius:2px;padding:0 2px}
208
- .c-purple{background:#3C3489;color:#EEEDFE}.c-teal{background:#085041;color:#E1F5EE}
209
- .c-coral{background:#712B13;color:#FAECE7}.c-pink{background:#72243E;color:#FBEAF0}
210
- .c-gray{background:#444441;color:#F1EFE8}.c-blue{background:#0C447C;color:#E6F1FB}
211
- .c-amber{background:#633806;color:#FAEEDA}.c-red{background:#791F1F;color:#FCEBEB}
212
- .c-green{background:#27500A;color:#EAF3DE}`,et=`(function(){
213
- window.addEventListener('message', function(e){
214
- if (!e.data || e.data.type !== 'dip-draft-update') return;
215
- var content = typeof e.data.content === 'string' ? e.data.content : '';
216
- document.body.innerHTML = content;
217
- if (window.lucide && typeof window.lucide.createIcons === 'function') {
218
- try { window.lucide.createIcons(); } catch(ex){}
219
- }
220
- });
221
- })();`;function tt(e,t,n=!1){let r=He(),i=Ve()?` class="theme-light"`:``,a=t||e.includes(`<slicc-editor`),o=t||e.includes(`<slicc-diff`),s=t?`<script>${et}<\/script>`:``;return`<!DOCTYPE html>
222
- <html${i}><head>
223
- <meta charset="utf-8">
224
- <style>${r}</style>
225
- <style>${$e}</style>
226
- <script>${Qe(n&&!t)}<\/script>
227
- ${s}
228
- ${a?`<script src="/slicc-editor.js"><\/script>`:``}
229
- ${o?`<script src="/slicc-diff.js"><\/script>`:``}
230
- <script src="/lucide-icons.js"><\/script>
231
- </head>
232
- <body class="sprinkle-inline">${e}</body></html>`}var w=new Set;function nt(e){if(typeof e?.type!=`string`||e.type.indexOf(`slicc-`)!==0)throw Error(`broadcastToDips: payload.type must start with 'slicc-'`);for(let t of w)try{t.postMessage(e,`*`)}catch{}}var T;function rt(e){T=e}function E(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function it(e,t){let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];return t?.model&&i.push(`--model`,E(t.model)),t?.thinking&&i.push(`--thinking`,E(t.thinking)),t?.readOnly&&i.push(`--read-only`,E(t.readOnly)),i.push(E(n),E(r),E(e)),i.join(` `)}async function at(e){if(!T)return{stdout:``,stderr:`exec: shell bridge not available
233
- `,exitCode:127};try{return await T(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function ot(e,t){let n=await at(it(e,t));return{stdout:n.stdout||n.stderr,exitCode:n.exitCode}}async function st(e,t){let n=await ze(at,e,t);if(e===`fetch`){let e=n,t=atob(e.bodyBase64),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return{...e,body:new TextDecoder(`utf-8`).decode(r)}}return n}var D=new WeakMap;function ct(e,t){try{e.postMessage({type:`dip-device-event`,channel:`hid:inputreport`,payload:t},`*`)}catch{}}async function lt(e,t){let n=D.get(e);if(n||(n=new Map,D.set(e,n)),n.has(t))return;let r=await le(re(),t,n=>{let r=n.bytes instanceof Uint8Array?n.bytes:new Uint8Array(n.bytes);ct(e,{handle:t,reportId:n.reportId,data:r})});n.set(t,r)}async function ut(e,t){let n=D.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&D.delete(e)}function dt(e){let t=D.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}D.delete(e)}}function ft(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}async function pt(e,t,n){let r=re();switch(t){case`list`:{let e=ne();if(!e)throw Error(`WebHID is unavailable in this browser`);return fe(r,e)}case`request`:{let e=ne();if(!e)throw Error(`WebHID is unavailable in this browser`);return Se(r,e,n[0]??[])}case`info`:return pe(r,n[0]);case`open`:{let t=n[0];return await ue(r,t),await lt(e,t),{ok:!0}}case`close`:{let t=n[0];return await ut(e,t),await ge(r,t),{ok:!0}}case`sendReport`:{let e=n[0],t=n[1],i=ft(n[2]);return await xe(r,e,t,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)),{ok:!0}}default:throw Error(`hid: unknown op '${t}'`)}}async function mt(e,t){let n=ie();switch(e){case`list`:{let e=ae();if(!e)throw Error(`Web Serial is unavailable in this browser`);return ce(n,e)}case`request`:{let e=ae();if(!e)throw Error(`Web Serial is unavailable in this browser`);return me(n,e,t[0]??[])}case`info`:return be(n,t[0]);case`open`:{let e=t[0];return await se(n,e,t[1]??{baudRate:9600}),{ok:!0}}case`close`:return await oe(n,t[0]),{ok:!0};default:throw Error(`serial: unknown op '${e}'`)}}async function ht(e,t){let n=Ce();switch(e){case`list`:{let e=we();if(!e)throw Error(`WebUSB is unavailable in this browser`);return ve(n,e)}case`request`:{let e=we();if(!e)throw Error(`WebUSB is unavailable in this browser`);return he(n,e,t[0]??[])}case`info`:return de(n,t[0]);case`open`:return await ye(n,t[0]),{ok:!0};case`close`:return await _e(n,t[0]),{ok:!0};default:throw Error(`usb: unknown op '${e}'`)}}async function gt(e,t,n,r){switch(t){case`hid`:return pt(e,n,r);case`serial`:return mt(n,r);case`usb`:return ht(n,r);default:throw Error(`unknown device channel '${t}'`)}}async function _t(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return n({type:`dip-device-op-response`,error:`device access not allowed for this dip`}),!0;let r=t.channel;if(r!==`hid`&&r!==`serial`&&r!==`usb`)return n({type:`dip-device-op-response`,error:`unknown device channel '${r}'`}),!0;try{n({type:`dip-device-op-response`,result:await gt(e,r,typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-device-op-response`,error:e instanceof Error?e.message:String(e)})}return!0}async function vt(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return n({type:`${t.type}-response`,error:`exec not allowed for this dip`}),!0;if(t.type===`dip-exec`)return n({type:`dip-exec-response`,result:await at(typeof t.cmd==`string`?t.cmd:``)}),!0;if(t.type===`dip-agent`)return n({type:`dip-agent-response`,result:await ot(typeof t.prompt==`string`?t.prompt:``,t.opts)}),!0;if(t.type===`dip-jsh`){try{n({type:`dip-jsh-response`,result:await st(typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-jsh-response`,error:e instanceof Error?e.message:String(e)})}return!0}return!1}function O(e,t,n,r=!1){let i=tt(t,!1,r);if(Ue)return Ot(e,i,n,r);let a=document.createElement(`iframe`);a.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),a.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,a.srcdoc=i,e.appendChild(a),a.contentWindow&&(y(a.contentWindow),w.add(a.contentWindow),r&&C.add(a.contentWindow)),a.addEventListener(`load`,()=>{y(a.contentWindow),a.contentWindow&&(w.add(a.contentWindow),r&&C.add(a.contentWindow))},{once:!0});let o=e=>{if(e.source!==a.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?a.style.height=t.height+`px`:t.type===`dip-open-link`?bt(t.url):t.type===`dip-picker-action`?k(t,n):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?yt(a.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?vt(a.contentWindow,t):t.type===`dip-device-op`&&_t(a.contentWindow,t))};return window.addEventListener(`message`,o),{dispose(){window.removeEventListener(`message`,o),Be(a.contentWindow),a.contentWindow&&(w.delete(a.contentWindow),C.delete(a.contentWindow),dt(a.contentWindow)),a.remove()}}}async function yt(e,t){if(!e||typeof t.id!=`number`)return!1;let n=typeof t.path==`string`?t.path:``,r=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!C.has(e))return r({type:`${t.type}-response`,error:`VFS access not allowed for this dip`}),!0;if(!Je(n))return r({type:`${t.type}-response`,error:`VFS path not allowed: ${n}`}),!0;if(t.type===`dip-readfile`){let e=await S(n,!0);return e===null?(r({type:`dip-readfile-response`,error:`Read failed`}),!0):(r({type:`dip-readfile-response`,content:typeof e==`string`?e:new TextDecoder().decode(e)}),!0)}if(t.type===`dip-exists`)return r({type:`dip-exists-response`,exists:await S(n,!0)!==null}),!0;if(t.type===`dip-stat`){let e=await S(n,!1);return e===null?(r({type:`dip-stat-response`,error:`Stat failed`}),!0):(r({type:`dip-stat-response`,stat:{isFile:!0,isDirectory:!1,size:typeof e==`string`?e.length:e.byteLength,mtimeMs:0}}),!0)}return!1}function bt(e){if(!(typeof e!=`string`||!e)&&/^(https?:|mailto:)/i.test(e))try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function xt(e,t){let n=[],r=e.querySelectorAll(`pre > code.language-shtml`);for(let e of r){let r=e.parentElement,i=e.textContent??``,a=document.createElement(`div`);a.className=`msg__dip`,r.replaceWith(a),n.push(O(a,i,t,!1))}let i=e.querySelectorAll(`img[src$=".shtml"]`);for(let e of i){let r=e.getAttribute(`src`);if(!r)continue;let i=document.createElement(`div`);i.className=`msg__dip`,e.alt&&i.setAttribute(`title`,e.alt),e.replaceWith(i);let a=new AbortController,o=null,s=!1;n.push({dispose(){s=!0,a.abort(),o&&=(o.dispose(),null)}});let c=r.startsWith(`/`),l=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,u=c?`/preview${r}`:r,d=async()=>{if(c&&!l)return b(r,a.signal);let e;try{e=await fetch(u,{signal:a.signal})}catch(e){if(e?.name===`AbortError`)throw e;if(c)return b(r,a.signal);throw e}if(e.ok)return e.text();if(c)return b(r,a.signal);throw Error(`HTTP ${e.status}`)},f=c&&qe(r);d().then(e=>{s||!i.isConnected||(o=O(i,e,t,f))}).catch(e=>{s||e?.name===`AbortError`||(i.textContent=`Failed to load dip: ${r}`,i.style.cssText=`padding:8px;font-size:12px;color:var(--s2-negative);font-family:var(--s2-font-mono)`)})}return n}function St(e){for(let t of e)try{t.dispose()}catch{}e.length=0}async function k(e,t){let n=e.data??null,r=Array.isArray(n?.filters)?n.filters:[];if(Ue){await Ct(e.picker,e.action,r,t);return}switch(e.picker){case`directory`:await wt(e.action,t);return;case`usb-device`:await Tt(e.action,r,t);return;case`serial-port`:await Et(e.action,r,t);return;case`hid-device`:await Dt(e.action,r,t);return;default:t(e.action,e.data);return}}async function Ct(e,n,r,i){try{switch(e){case`directory`:{let{openMountPickerPopup:e}=await t(async()=>{let{openMountPickerPopup:e}=await import(`./mount-picker-popup-Hrvzr69c.js`).then(e=>e.n);return{openMountPickerPopup:e}},__vite__mapDeps([0,1,2,3])),r=await e();r.cancelled?i(n,{cancelled:!0}):r.error?i(n,{error:r.error}):r.idbKey?i(n,{handleInIdb:!0,idbKey:r.idbKey,dirName:r.dirName??``}):i(n,{error:`mount picker returned no handle key`});return}case`usb-device`:{let{openUsbPickerPopup:e}=await t(async()=>{let{openUsbPickerPopup:e}=await import(`./usb-picker-D_K0weAY.js`).then(e=>e.t);return{openUsbPickerPopup:e}},__vite__mapDeps([4,1,3])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`serial-port`:{let{openSerialPickerPopup:e}=await t(async()=>{let{openSerialPickerPopup:e}=await import(`./serial-picker-B6s4NeaB.js`).then(e=>e.t);return{openSerialPickerPopup:e}},__vite__mapDeps([5,1,3])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`hid-device`:{let{openHidPickerPopup:e}=await t(async()=>{let{openHidPickerPopup:e}=await import(`./hid-picker-DUJBI46p.js`).then(e=>e.t);return{openHidPickerPopup:e}},__vite__mapDeps([6,1,3])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}default:i(n,{error:`unknown picker kind: ${e??`(none)`}`});return}}catch(e){i(n,{error:e instanceof Error?e.message:String(e)})}}async function A(e,t){let n=te();if(!n)return null;let r={current:null},i=t=>{let n=t.detail;n.kind===e&&(r.current=n)};n.addEventListener(`slicc-permission-deny`,i);try{let i=await n.request(e,t);if(i)return{ok:!0,grant:i};let a=r.current;return{ok:!1,reason:a?.reason??`error`,...a?.message?{message:a.message}:{}}}finally{n.removeEventListener(`slicc-permission-deny`,i)}}function j(e,t,n,r){if(t.reason===`cancelled`){r(e,{cancelled:!0});return}if(t.reason===`unavailable`){r(e,{error:n});return}r(e,{error:t.message??`unknown error`})}async function wt(e,n){let r=await A(`filesystem`);if(!r){n(e,{error:`File System Access API not available`});return}if(!r.ok){j(e,r,`File System Access API not available`,n);return}let i=r.grant.handle,a=`pendingMount:dip-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;try{let{storePendingHandle:e}=await t(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup-Hrvzr69c.js`).then(e=>e.n);return{storePendingHandle:e}},__vite__mapDeps([0,1,2,3]));await e(a,i)}catch(t){n(e,{error:`failed to store directory handle: ${t instanceof Error?t.message:String(t)}`});return}n(e,{handleInIdb:!0,idbKey:a,dirName:i.name})}async function Tt(e,n,r){let i=await A(`usb`,{filters:n});if(!i){r(e,{error:`WebUSB is not available`});return}if(!i.ok){j(e,i,`WebUSB is not available`,r);return}let a=i.grant,{getSharedUsbRegistry:o,deviceToInfo:s}=await t(async()=>{let{getSharedUsbRegistry:e,deviceToInfo:t}=await import(`./usb-device-registry-BP58Vi0S.js`).then(e=>e.a);return{getSharedUsbRegistry:e,deviceToInfo:t}},__vite__mapDeps([7,1])),c=o().register(a.device);r(e,{granted:!0,handle:c,info:s(c,a.device)})}async function Et(e,n,r){let i=await A(`serial`,n.length?{filters:n}:void 0);if(!i){r(e,{error:`Web Serial is not available`});return}if(!i.ok){j(e,i,`Web Serial is not available`,r);return}let a=i.grant,o=await t(()=>import(`./serial-port-registry-Bc4wlwED.js`).then(e=>e.o),__vite__mapDeps([8,1])),s=o.getSharedSerialRegistry(),c=s.register(a.port),l=s.get(c);r(e,{granted:!0,handle:c,info:l?o.deviceToInfo(c,l):{handle:c}})}async function Dt(e,n,r){let i=await A(`hid`,{filters:n});if(!i){r(e,{error:`WebHID is not available`});return}if(!i.ok){j(e,i,`WebHID is not available`,r);return}let a=i.grant,{getSharedHidRegistry:o,hidDeviceToInfo:s}=await t(async()=>{let{getSharedHidRegistry:e,hidDeviceToInfo:t}=await import(`./hid-device-registry-D2LsJCRr.js`).then(e=>e.a);return{getSharedHidRegistry:e,hidDeviceToInfo:t}},__vite__mapDeps([9,1])),c=o(),l=a.devices.map(e=>s(c.register(e),e)),u=l[0];r(e,{granted:!0,handle:u.handle,info:u,devices:l})}function Ot(e,t,n,r=!1){let i=document.createElement(`iframe`);i.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),i.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,e.appendChild(i);let a=e=>{if(e.source!==i.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?i.style.height=t.height+`px`:t.type===`dip-open-link`?bt(t.url):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?yt(i.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?vt(i.contentWindow,t):t.type===`dip-device-op`?_t(i.contentWindow,t):t.type===`dip-picker-action`&&k(t,n))};return window.addEventListener(`message`,a),i.addEventListener(`load`,()=>{y(i.contentWindow),i.contentWindow&&(w.add(i.contentWindow),r&&C.add(i.contentWindow)),i.contentWindow?.postMessage({type:`dip-render`,srcdoc:t,isLight:Ve()},`*`)},{once:!0}),{dispose(){window.removeEventListener(`message`,a),Be(i.contentWindow),i.contentWindow&&(w.delete(i.contentWindow),C.delete(i.contentWindow),dt(i.contentWindow)),i.remove()}}}var M=c(`cone-memory-budget`),kt=4e3,At=2e3,jt=1.25,Mt=`/workspace/CLAUDE.md`,Nt=`/sessions/index.json`,Pt=4096,Ft=/^## Auto-extracted/m,It=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
234
-
235
- Rules:
236
- - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
237
- - One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
238
- - Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
239
- - Be terse. Aim well under the original size.
240
- - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function Lt(e){return Math.round(kt+At*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}function Rt(e){let t=Ft.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function zt(e){try{let t=await e.readFile(Nt,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function Bt(t){let{header:n,autoExtracted:r}=Rt(t.currentContent);if(!r.trim())return t.currentContent;let i=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${t.budget} characters.
241
-
242
- <auto-extracted>
243
- ${r}
244
- </auto-extracted>`,a={role:`user`,content:[{type:`text`,text:It}],timestamp:Date.now()},o=await e(t.model,{systemPrompt:i,messages:[a]},{apiKey:t.apiKey,maxTokens:Pt,headers:t.headers,signal:t.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
245
- `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${n}${n.length===0||n.endsWith(`
246
- `)?``:`
247
- `}${s}\n`}async function Vt(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(Mt,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await zt(e.vfs),r=Lt(n),i=r*jt;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};M.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await Bt({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(Mt,n),M.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return M.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}function N(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?Te(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 P=c(`session-freezer`),Ht=4,Ut=2048,Wt=40,F=`/sessions`,I=`/sessions/index.json`;async function Gt(e){let t=await Zt(e.sessionStore);if(!t||t.messages.length<Ht)return P.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=Qt(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);await Jt(e,n,i);let a=await Yt(e,n,i)||an(t.messages);return await Xt(e,t,a,r,i?await Kt(e,a):void 0)}async function Kt(e,n){try{return qt(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-0pwkjMlK.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){P.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function qt(e){if(e)return Re(e)?e:void 0}async function Jt(e,t,n){if(!n){P.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:Ut,headers:e.headers})}catch(e){P.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){P.info(`Memory extraction returned no durable memories`);return}try{await cn(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),P.info(`Memory extracted and appended on new-session`)}catch(e){P.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Yt(e,t,n){if(!n)return``;try{return rn(await o({messages:t,instruction:a,model:e.model,apiKey:e.apiKey,maxTokens:Wt,headers:e.headers}))}catch(e){return P.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Xt(e,t,n,r,i){let a=new Date().toISOString(),o=r===`quick`?`pending-${sn()}.md`:`${a.replace(/[:.]/g,`-`)}-${on(n)}.md`,s={id:t.id,title:n,frozenAt:a,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:t.messages},c=nn(s),l={filename:o,title:n,frozenAt:a,messageCount:t.messages.length,...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{}};try{return await L(e.vfs,F),await e.vfs.writeFile(`${F}/${o}`,c),await ln(e.vfs,l),await e.vfs.flush(),P.info(`Cone session frozen`,{filename:o,title:n,messageCount:t.messages.length}),{...l,archive:s}}catch(e){return P.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}async function Zt(e){try{return await e.load(`session-cone`)}catch(e){return P.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function Qt(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var $t=`<!-- slicc:session-data
249
- `,en=`
250
- -->`;function tn(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 nn(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=`${$t}${JSON.stringify(tn(e.messages)).replace(/-->/g,`-- >`)}${en}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+N(e.messages)}function rn(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 an(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 on(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function sn(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function L(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function cn(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 L(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
251
- `)?``:`
252
- `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await Vt({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){P.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function ln(e,t){let n=[];try{let t=await e.readFile(I,{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(I,JSON.stringify(r,null,2))}async function un(e){try{let t=await e.readFile(I,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function R(e){return`${F}/${e.filename}`}async function dn(e,t,n){if(!t.pendingEnrichment)return null;let r=await pn(e,t);if(r===null)return null;let i=mn(t,r);if(i===null)return null;let a=await hn(t,i,n);if(a===null)return null;let o=await fn(n,a.newTitle);return await gn(e,t,a.bullets,n),await _n(e,t,r,a.newTitle,o)}async function fn(e,t){if(e.pickIcon)try{return await qt(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){P.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function pn(e,t){try{let n=await e.readFile(R(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?P.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):P.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function mn(e,t){let n;try{n=z(t).messages}catch(t){return P.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?(P.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):Qt(n)}async function hn(e,t,n){let r=``;try{r=await o({messages:t,instruction:s,model:n.model,apiKey:n.apiKey,maxTokens:Ut,headers:n.headers})}catch(t){return P.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let i=``;try{i=rn(await o({messages:t,instruction:a,model:n.model,apiKey:n.apiKey,maxTokens:Wt,headers:n.headers}))}catch(t){return P.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}:(P.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function gn(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await cn(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){P.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function _n(e,t,n,r,i){let a=R(t),o=vn(n,r),s=`${t.frozenAt.replace(/[:.]/g,`-`)}-${on(r)}.md`,c=`${F}/${s}`;try{await L(e,F),await e.writeFile(c,o)}catch(e){return P.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 bn(e,t.filename,u)}catch(e){return P.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){P.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return P.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:s,title:r}),u}function vn(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 yn=Promise.resolve();async function bn(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(I,{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(I,JSON.stringify(a,null,2))},i=yn.then(r,r);return yn=i.then(()=>void 0,()=>void 0),i}function z(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:xn(t)}}function xn(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 Sn=`__slicc_binary__`,Cn=`b64`;function wn(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[Sn]===Cn&&typeof t.data==`string`}function Tn(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 En(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 B(e){if(e instanceof Uint8Array)return{[Sn]:Cn,data:Tn(e)};if(Array.isArray(e))return e.map(B);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=B(r);return t}return e}function V(e){if(wn(e))return En(e.data);if(Array.isArray(e))return e.map(V);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=V(r);return t}return e}var Dn=c(`panel-transport`);function On(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function kn(){return{onMessage:e=>{let t=(t,n,r)=>(On(t)&&e(V(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=B(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{Dn.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var An=`slicc-groups`,jn=3,H={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},U=null;function Mn(e){if(!e.objectStoreNames.contains(H.MESSAGES)){let t=e.createObjectStore(H.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(H.SESSIONS)||e.createObjectStore(H.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(H.TASKS)||e.createObjectStore(H.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(H.STATE)||e.createObjectStore(H.STATE,{keyPath:`key`})}function Nn(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 Pn(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(H.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let t of e)r.put(Nn(t))};return}t.objectStoreNames.contains(H.SCOOPS)||t.createObjectStore(H.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Fn(e){e.objectStoreNames.contains(H.WEBHOOKS)||e.createObjectStore(H.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(H.CRONTASKS)||e.createObjectStore(H.CRONTASKS,{keyPath:`id`})}function In(e){let t=e.target.result,n=e.oldVersion;n<1&&Mn(t),n<2&&Pn(e,t),n<3&&Fn(t)}function Ln(){if(!U)return null;let e=Object.values(H).every(e=>U.objectStoreNames.contains(e));return U.version===jn&&e?U:(U.close(),U=null,null)}function Rn(e){e.onversionchange=()=>{e.close(),U===e&&(U=null)},e.onclose=()=>{U===e&&(U=null)}}async function zn(){return Ln()||new Promise((e,t)=>{let n=indexedDB.open(An,jn);n.onupgradeneeded=In,n.onsuccess=()=>{let t=n.result;Rn(t),U=t,e(t)},n.onerror=()=>t(n.error)})}async function Bn(e,t=`readonly`){return(await zn()).transaction(e,t).objectStore(e)}async function Vn(e){let t=await Bn(H.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 Hn(e,t){let n=await Bn(H.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var W=c(`tray-leader`),Un=`leader-tray-session`,Wn=3e4,Gn=1e4,Kn=1e3,qn=3e4,Jn=2,Yn=20,G={state:`inactive`,session:null,error:null};function Xn(){return{...G,session:G.session?{...G.session}:null}}var K=new Set;function Zn(e){return K.add(e),()=>{K.delete(e)}}function q(e){if(G={...e,session:e.session?{...e.session}:null},K.size!==0)for(let e of[...K])try{e(Xn())}catch{}}var Qn=class{key;constructor(e=Un){this.key=e}async load(){return $n(await Vn(this.key))}async save(e){await Hn(this.key,JSON.stringify(e))}async clear(){await Hn(this.key,``)}};function $n(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 er=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 Qn,this.fetchImpl=e.fetchImpl??ar(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Wn,this.connectTimeoutMs=e.connectTimeoutMs??Gn;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??Kn,this.reconnectMaxDelayMs=n.maxDelayMs??qn,this.reconnectBackoffMultiplier=n.backoffMultiplier??Jn,this.reconnectMaxAttempts=n.maxAttempts??Yn,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return q({state:`leader`,session:this.currentSession,error:null}),this.currentSession;q({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();W.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){W.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw q({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,q({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),q({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){W.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,q({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;W.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++,q({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),W.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,W.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){W.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),W.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,q({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),W.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||!rr(t))throw t;return W.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(h(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=ir(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){W.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=>{W.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 tr.fromResponse(n);return await n.json()}},tr=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})`)}}},nr=class extends Error{constructor(e){super(e),this.name=`TrayProxyFetchError`}};function rr(e){return e instanceof nr?!0:e instanceof tr?e.status===403||e.status===404||e.status===410||e.status>=500:!1}function ir(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function ar(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(t,n={})=>{let r=typeof t==`string`?t:t.toString();try{if(new URL(r).origin===window.location.origin)return e(r,{...n,cache:`no-store`})}catch{}let i=new Headers(n.headers);i.set(`X-Target-URL`,r);for(let[e,t]of Object.entries(d()))i.set(e,t);let a=await e(l(`/api/fetch-proxy`),{...n,headers:i,cache:`no-store`});if(u(a))throw new nr(await f(a));return a}}var J=c(`offscreen-client`),or=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){J.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??kn(),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}J.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?(J.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):J.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;sr(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){J.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}-${Y()}`,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}-${Y()}`,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}-${Y()}`,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}-${Y()}`;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){J.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&&sr(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){J.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 Y(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function sr(e,t){q({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),_({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 X(e){return!e.includes(`\0`)}function cr(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(!X(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(!X(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),!X(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),!X(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(X(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 lr(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 ur(e){let t=lr(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function dr(e,t){let n=lr(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 fr(){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 pr(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.localStorageSeed??{},o=new MessageChannel,s=new MessageChannel,c=new or(r,ur(o.port1)),l=dr(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 mr(e){return pr({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-D4No74Rn.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,localStorageSeed:e.localStorageSeed??fr(),instanceId:e.instanceId,localApiBaseUrl:e.localApiBaseUrl,bridgeToken:e.bridgeToken,localLickWsUrl:e.localLickWsUrl,extensionDelegateId:e.extensionDelegateId})}var hr=`<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 gr(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 _r(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(hr));let a=()=>{r.style.color=`var(--green)`,setTimeout(()=>{r.style.color=`var(--txt-3)`},1500)};return r.addEventListener(`short-click`,()=>{(async()=>{await t(gr(e.getMessages())??N([...e.getMessages()])),a()})()}),r.addEventListener(`long-press`,()=>{(async()=>{let n=N([...e.getMessages()]);n&&(await t(n),a())})()}),n.append(r),n}function Z(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function vr(e){let t={id:e.id,text:e.content};return e.attachments?.length&&(t.attachments=e.attachments.length),t}var yr=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.#U(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.#H(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.#K({id:Z(),role:`user`,content:e,timestamp:Date.now()})}getQueuedMessages(){return this.#h.map(vr)}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.#K(t);this.#E()}#E(){this.#s?.(this.#h.map(vr))}addAssistantMessage(e){this.#K({id:Z(),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.#H(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=Me(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(Fe(e.timestamp)),r=t);let i=this.#G(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.#X();for(let e of this.#m)e.isStreaming||this.#r?.(e,this.#g.get(e.id)??[]);this.#A(),this.#Q()}sendUserMessage(e,t,n){let r=e.trim();if(!r&&!t?.length)return;let i=n?.dictation?this.#D(r):r,a={id:Z(),role:`user`,content:i,timestamp:Date.now(),attachments:t?.length?t:void 0};this.#x?(this.#h.push(a),this.#E()):this.#K(a),this.#t.sendMessage(i,a.id,a.attachments),this.#O();try{let e=n?.dictation?Te(i):i;this.#d?.(e,a.id,a.attachments)}catch(e){console.error(`onLocalUserMessage hook threw`,e)}}#D(e){return Ae(e,De())}#O(){if(this.#o)try{let e=this.#o();if(!e)return;g(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.#q(a);return}this.#K({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.#q(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.#W(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??=_r({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.#B(e.messageId,e.requestId,e.html);break;case`tool_ui_done`:this.#V(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.#K({id:e,role:`assistant`,content:``,timestamp:Date.now(),isStreaming:!0,toolCalls:[]})}#N(e,t){this.#W(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.#W(e);t&&(t.content+=this.#y,this.#y=``,this.#q(t))}#F(e){let t=this.#W(e);t&&(this.#y&&this.#_===e&&(t.content+=this.#y),this.#y=``,this.#b=!1,t.isStreaming=!1,this.#q(t))}#I(e,t,n){let r=this.#W(e);r&&(r.toolCalls=r.toolCalls??[],r.toolCalls.push({id:Z(),name:t,input:n}),this.#q(r))}#L(e,t,n,r){let i=this.#W(e),a=[...i?.toolCalls??[]].reverse().find(e=>e.name===t&&e.result===void 0);!i||!a||(a.result=n,a.isError=r,this.#q(i))}#R(e){let t=this.#W(e);t?.isStreaming&&(t.isStreaming=!1,this.#q(t)),this.#_=null,this.setProcessing(!1)}#z(e){this.setProcessing(!1),this.#K({id:Z(),role:`assistant`,content:e,timestamp:Date.now(),error:!0})}#B(e,t,n){this.#H(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=O(r,n,(e,n)=>{this.#l?.(t,e,n)},!1);this.#w.set(t,{instance:i,container:r}),this.#l?.(t,p,void 0)}#V(e){this.#H(e)}#H(e){let t=this.#w.get(e);if(t){this.#w.delete(e);try{t.instance.dispose()}catch{}t.container.remove()}}#U(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,Z(),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,Z(),i.attachments)}#W(e){return this.#m.find(t=>t.id===e)}#G(e){try{return Ee(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]}}#K(e){this.#Y(),this.#m.push(e);let t=this.#G(e);this.#g.set(e.id,t),this.#e.append(...t),this.#X(),e.isStreaming||this.#r?.(e,t),e.role===`user`?this.#Q():this.#$()}#q(e){this.#Y(),this.#i?.(e.id);let t=this.#g.get(e.id)??[],n=this.#G(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.#X(),e.isStreaming||this.#r?.(e,n),this.#$()}#J(){return this.#e.inner??this.#e}#Y(){Le(this.#J(),this.#C)}#X(){ke(this.#J(),{openClusterAnchors:this.#C,toolCallLookup:(e,t)=>this.#Z(e,t)})}#Z(e,t){return this.#m.find(t=>t.id===e)?.toolCalls?.find(e=>e.id===t)}#Q(){this.#e.scrollTop=this.#e.scrollHeight}#$(){let e=this.#e;typeof e.requestFollow==`function`?e.requestFollow():this.#Q()}};function br(e){return`${new Date(e.frozenAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`})} · ${e.messageCount} turns`}function xr(e){let t=document.createElement(`slicc-freezer-card`);return t.setAttribute(`title`,e.title),t.setAttribute(`meta`,br(e)),t.setAttribute(`slug`,e.filename),e.icon&&t.setAttribute(`icon`,e.icon),t}async function Sr(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 Cr(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(I,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 Cr(e){let t=await wr(e);return t.kind===`ok`?t.entries:t.kind===`missing`?[]:null}async function wr(e){let t;try{let n=await e.readFile(I,{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 Tr(e){let t;try{t=(await e.readDir(`/sessions`)).filter(e=>e.type===`file`&&e.name.endsWith(`.md`)).map(e=>e.name)}catch{return[]}let n=[];for(let r of t)try{let t=await e.readFile(`/sessions/${r}`,{encoding:`utf-8`}),i=(typeof t==`string`?t:new TextDecoder().decode(t)).slice(0,2e3),a=/^title:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??r,o=/^frozenAt:\s*"?(.*?)"?\s*$/m.exec(i)?.[1]??new Date(0).toISOString(),s=Number(/^messageCount:\s*(\d+)\s*$/m.exec(i)?.[1]??0);n.push({filename:r,title:a,frozenAt:o,messageCount:s,...r.startsWith(`pending-`)?{pendingEnrichment:!0}:{}})}catch{}return n.sort((e,t)=>t.frozenAt.localeCompare(e.frozenAt)),n}function Er(e,t){for(let t of Array.from(e.querySelectorAll(`slicc-freezer-card`)))t.remove();e.append(...t.map(xr))}async function Dr(e,t){let n=await e.readFile(R(t),{encoding:`utf-8`}),r=z(typeof n==`string`?n:new TextDecoder().decode(n));return{title:r.title||t.title,messages:r.messages}}var Or=`/workspace/CLAUDE.md`,Q=64;function kr(e){if(e.length<=Q)return{title:e,summary:``};let t=e.lastIndexOf(` `,Q),n=t>Q/2?t:Q;return{title:`${e.slice(0,n)}…`,summary:e.slice(n).trim()}}function Ar(e){let t=[],n=null,r=()=>{if(!n)return;let e=n.join(` `).trim();e&&t.push(kr(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(kr(e.trim())),t}async function jr(e){let t=``;try{let n=await e.readFile(Or,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{t=``}return Ar(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 Mr=[`/workspace`,`/shared`],Nr=3,Pr=200;async function Fr(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,Pr)){let i=`${t}/${r.name}`;r.type===`directory`?o.push({kind:`dir`,id:i,label:r.name,children:n<Nr?await Fr(e,i,n+1):[]}):o.push({kind:`file`,id:i,label:r.name,path:i})}return o}async function Ir(e){let t=[];for(let n of Mr)t.push({kind:`group`,label:`${n.slice(1)}/`}),t.push(...await Fr(e,n,1));return t}function Lr(e){let t=!1;return n=>{if(n===`files`){e.openFs().then(async t=>{e.fileTree.items=await Ir(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 jr(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`},zr={off:`off`,minimal:`low`,low:`low`,medium:`medium`,high:`high`,xhigh:`xhigh`};function Br(e){return e?Rr[e]:void 0}function Vr(e){return(e&&zr[e])??`off`}function Hr(e,t){return e!=null&&e!==`cone`||new URL(t.location.href).searchParams.get(`cherry`)===`1`?!0:m(t.localStorage)}function $(e){return e===`error`?`dead`:e===`initializing`?`none`:`open`}function Ur(e,t,n){return[...e].sort((e,t)=>Number(t.isCone)-Number(e.isCone)).map(e=>{let r=n?.get(e.jid);return{key:e.jid,type:e.isCone?`cone`:`scoop`,color:v(e),label:e.isCone?`sliccy`:e.name,eyes:$(t?.get(e.jid)),fill:typeof r==`number`?Math.round(r*100):void 0}})}function Wr(e){let t=()=>{let t=e.getClient();t&&(e.refs.switcher.scoops=Ur(t.getScoops(),e.statuses,e.fills))},n=()=>(e.refs.thread.getAttribute(`context`)??``).startsWith(`freezer:`),r=()=>{if(e.getSelected()||n())return;let t=e.getClient()?.getScoops()??[],r=e.pendingUrlContext;if(r?.startsWith(`freezer:`))return;if(r?.startsWith(`scoop:`)){let n=r.slice(6),i=t.find(e=>!e.isCone&&e.name===n);if(i){e.pendingUrlContext=null,e.selectScoop(i);return}}let i=t.find(e=>e.isCone);i&&(e.pendingUrlContext=null,e.selectScoop(i))};return{onStatusChange:(n,r)=>{let i=e.statuses.get(n);e.statuses.set(n,r),$(i)!==$(r)&&t(),e.getSelected()?.jid===n&&e.getController()?.setProcessing(r===`processing`)},onScoopCreated:r=>{t(),!e.getSelected()&&!n()&&!e.pendingUrlContext&&e.selectScoop(r)},onScoopListUpdate:()=>{t(),r()},onScoopActivity:t=>{e.refs.switcher.setAttribute(`attention`,t)},onIncomingMessage:(t,n)=>{e.refs.switcher.setAttribute(`attention`,t),e.lastActivity.set(t,String(n.content??``).slice(0,600)),e.getSelected()?.jid===t&&n.channel!==`web`&&Ne(n.channel)&&e.getController()?.addLickMessage(n.id,n.content,n.channel,new Date(n.timestamp).getTime(),n.lickId)},onMessageUpdate:(t,n)=>{e.getSelected()?.jid===t&&n.lickId&&n.lickState&&e.getController()?.updateLickState(n.lickId,n.lickState)},onScoopMessagesReplaced:(t,n)=>{e.getSelected()?.jid===t&&e.getController()?.loadMessages(n)},onReady:()=>{t(),r(),e.notifyReady?.()}}}async function Gr(e,n){e.thread.setAttribute(`context`,n.isCone?`cone`:`scoop:${n.name}`),e.thread.setAttribute(`accent`,v(n)),je(e,n.isCone?{kind:`cone`}:{kind:`scoop`,accent:v(n)}),e.switcher.setAttribute(`active`,n.jid),e.composerMeta.setAttribute(`thinking`,Vr(n.config?.thinkingLevel));try{let{resolveCurrentModel:r,resolveModelById:i}=await t(async()=>{let{resolveCurrentModel:e,resolveModelById:t}=await import(`./main-Los951iC.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 Kr(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 Cr(r);if(a===null){if((await wr(r)).kind!==`corrupt`||(l.warn(`WC freezer index corrupt — rebuilding from archives`),a=await Tr(r),a.length===0))return;await i.writeFile(I,JSON.stringify(a,null,2))}e===d&&(u=a,Er(n.freezer,a),!f&&a.some(e=>!e.icon&&!e.pendingEnrichment)&&(f=!0,t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-0pwkjMlK.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})=>Sr({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-FPsFIQIp.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-BcXdkTTf.js`).then(e=>e.g);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 Cr(t)??[]).find(t=>t.filename===e);let{messages:o}=await Dr(t,i??{filename:e,title:e,frozenAt:``,messageCount:0});a()?.loadMessages(o),n.thread.setAttribute(`context`,`freezer:${i?.filename??e}`),n.thread.setAttribute(`accent`,Ie),je(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 qr(e,t){let n=null,r=Pe(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`),Gr(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 Jr(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 Yr(e,n,r,i,a){e.onClientReady(()=>{i.intercept||t(async()=>{let{wireWcOnboarding:e}=await import(`./wc-onboarding-COda-Pq8.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 Xr(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 yr({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&&(St(t),c.delete(e))},onMessageRendered:(e,t)=>{let n=t[0];n&&c.set(e.id,xt(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 Zr(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-9oJom_IG.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(Hr(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-CkKgwT4V.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-CehY1SFW.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=Oe(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=Br(t),a=n.getSelected();a&&i&&r.setScoopThinkingLevel(a.jid,i)})}function Qr(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=Ur(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 ei(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)}),ni({switcher:n.switcher,getScoops:()=>t.getScoops(),lastActivity:e.wiring.lastActivity})}function ti(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 ni(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-0pwkjMlK.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 ri(e,n,r){let{RemoteTerminalView:i}=await t(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DMnqOfIb.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 ii(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 ai(e,n,r,i){t(async()=>{let{installLeaderPermissionsSurface:e,installMountPendingConsumer:t}=await import(`./wc-permissions-Wqap3kzM.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:oi(e,n)})}).catch(e=>i.warn(`WC permissions surface wiring failed`,e))}function oi(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 si(e,n,r,i={}){let{refs:a}=e;e.setClient(n);let o=null,s=Qr(e.wiring,n),c=()=>o?.(),l={intercept:null},{controller:u,agentHandle:d}=Xr(a,n,()=>e.getSelected(),ti({boot:e,triggerPlaceholder:c,refreshStats:s}),l);e.setController(u),e.onClientReady(s);let f=Jr(n),p=async()=>(await f()).reader;i.standalone?.runtimeMode!==`cherry`&&Yr(e,n,f,l,r),Zr({boot:e,client:n,agentHandle:d,setRefreshPlaceholder:e=>{o=e},triggerPlaceholder:c,openReader:p,openWriter:async()=>(await f()).writer,log:r}),ei(e,n),$r(e,i,r),ai(e,n,i,r),e.setActivateSurface(Lr({fileTree:a.fileTree,termSurface:a.termSurface,memoryHost:a.memoryHost,openFs:p,mountTerminal:t=>ri(e,n,t),log:r}));let{refreshFreezer:m,openFrozen:h}=Kr({refs:a,openVfs:f,client:n,getController:()=>e.getController(),getSelected:()=>e.getSelected(),selectScoop:e.selectScoop,clearSelection:e.clearSelection,log:r});m(),e.onClientReady(m),ii(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-1eY8GtQO.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-DtDqIPiy.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])),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-CVU90Xz2.js`);return{wireWcNav:e}},__vite__mapDeps([69,12,28,1,29,11,13,14,15,16,17,2,18,19,20,21,22,23,24,25,26,30])).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([70,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([71,2,48,72,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 ci(e,n,r=`standalone`){let{browser:i,realCdpTransport:a,instanceId:o,localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u}=await ee({runtimeMode:r,envBaseUrl:null,window,log:n}),{resolveStandaloneFloatLabel:d,DEFAULT_STANDALONE_LABEL:f}=await t(async()=>{let{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}=await import(`./wc-float-label-dfUH87GD.js`);return{resolveStandaloneFloatLabel:e,DEFAULT_STANDALONE_LABEL:t}},[]),p=r===`standalone`||r===`electron-overlay`?await d():f,m=qr(e,p),h=mr({realCdpTransport:a,instanceId:o,callbacks:Wr(m.wiring),localApiBaseUrl:s,bridgeToken:c,localLickWsUrl:l,extensionDelegateId:u});cr({send:e=>h.client.sendRaw(e)}),si(m,h.client,n,{instanceId:o,standalone:{browser:i,realCdpTransport:a,runtimeMode:r,baseFloatLabel:p}});let{setupSudoStandalone:g}=await t(async()=>{let{setupSudoStandalone:e}=await import(`./main-Los951iC.js`).then(e=>e.d);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 g({log:n}),await h.ready,m.wiring.notifyReady?.(),n.info(`WC live shell ready`,{scoops:h.client.getScoops().length})}export{rt as _,Zn as a,si as attachWcClient,Gt as c,Wr as createWcLiveCallbacks,un as d,nt as f,O as g,xt as h,Xn as i,R as l,k as m,ci as mountWcUiLive,or as n,I as o,St as p,qr as prepareWcShell,er as r,dn as s,yr as t,z as u};