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