sliccy 3.42.1 → 3.44.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/ui/assets/{adobe-CFs49Ldo.js → adobe-ChVGhtP9.js} +1 -1
- package/dist/ui/assets/{adobe-6HAbKcn4.js → adobe-DfX5Y34s.js} +2 -2
- package/dist/ui/assets/{agent-bridge-CaTifIJb.js → agent-bridge-C5enj1WV.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-DBdPeIAw.js → agent-message-to-chat-FbjZc5O-.js} +1 -1
- package/dist/ui/assets/{apps-C9HoJRHu.js → apps-Crb9N_ly.js} +1 -1
- package/dist/ui/assets/{azure-openai-gbSUirDq.js → azure-openai-C4klGbBq.js} +1 -1
- package/dist/ui/assets/{azure-openai-BUupHoQH.js → azure-openai-z_V4V786.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-D760c-sw.js → bsh-watchdog-X8O_f3CL.js} +1 -1
- package/dist/ui/assets/{cdp-DNq0N1OZ.js → cdp-rsA_ALer.js} +3 -3
- package/dist/ui/assets/{connect-surface-1FUWatlV.js → connect-surface-KLfqgi-g.js} +1 -1
- package/dist/ui/assets/cost-command-JwQpMwfk.js +1 -0
- package/dist/ui/assets/{dist-BCLHnlgq.js → dist-Bm5Z71wh.js} +1 -1
- package/dist/ui/assets/{dist-D7Q91ot4.js → dist-LiJ_YnhF.js} +1 -1
- package/dist/ui/assets/{es-N4-H4LyA.js → es-BJGCk_7v.js} +1 -1
- package/dist/ui/assets/{follower-sprinkle-bridge-C-chIyWh.js → follower-sprinkle-bridge-Q2unDn_f.js} +1 -1
- package/dist/ui/assets/{fs-B_Yiw-gA.js → fs-OBeSd3iT.js} +1 -1
- package/dist/ui/assets/{github-YMmsRSa5.js → github-Ca90QHu7.js} +2 -2
- package/dist/ui/assets/{github-copilot-BexWH_uC.js → github-copilot-BrwsrJ0a.js} +1 -1
- package/dist/ui/assets/{github-copilot-CTrj2O90.js → github-copilot-CwAq3lpN.js} +1 -1
- package/dist/ui/assets/{github-DXENDyDm.js → github-kiWl2pok.js} +1 -1
- package/dist/ui/assets/{kernel-worker-D9uT30rZ.js → kernel-worker-D7kDM6z5.js} +1320 -1003
- package/dist/ui/assets/{lick-ws-bridge-CjOXgOAC.js → lick-ws-bridge-X9yJaxZX.js} +1 -1
- package/dist/ui/assets/{local-llm-DtrX5Uni.js → local-llm-BlEhi-EE.js} +1 -1
- package/dist/ui/assets/{magick-wasm-vsfBoBVf.js → magick-wasm-1dtYEyLr.js} +1 -1
- package/dist/ui/assets/{main-COPO1-7A.js → main-DQNfRwQ_.js} +8 -8
- package/dist/ui/assets/{main-cherry-CIlo3nad.js → main-cherry-zUoPE3cg.js} +1 -1
- package/dist/ui/assets/{migration-run-B4a5MEYh.js → migration-run--a8o7LGm.js} +1 -1
- package/dist/ui/assets/{mount-C4eQjArH.js → mount-B7zmIwVP.js} +1 -1
- package/dist/ui/assets/{nuke-command-BpUsw-m7.js → nuke-command-DlkLMgeD.js} +1 -1
- package/dist/ui/assets/{oauth-bootstrap-rJr6mJXj.js → oauth-bootstrap--CDdXr74.js} +2 -2
- package/dist/ui/assets/{oauth-service-BbkAikCT.js → oauth-service-BcS-bhoB.js} +1 -1
- package/dist/ui/assets/{onboarding-orchestrator-o71LxZLt.js → onboarding-orchestrator-Dpk9ts40.js} +1 -1
- package/dist/ui/assets/{openai-codex-DndhWwHW.js → openai-codex-D1-QVrzy.js} +1 -1
- package/dist/ui/assets/{openai-codex-CAuyH7cW.js → openai-codex-DzqY9hsC.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-AngexUJX.js → panel-rpc-handlers-CnJYQP27.js} +1 -1
- package/dist/ui/assets/{provider-CF53ENSZ.js → provider-BBaMH9k3.js} +1 -1
- package/dist/ui/assets/{provider-wF_CzaeE.js → provider-BiMU6jfy.js} +2 -2
- package/dist/ui/assets/{provider-settings-gNr8eGBz.js → provider-settings-Cg_hqZuj.js} +2 -2
- package/dist/ui/assets/provider-store-access-DumMYBkr.js +1 -0
- package/dist/ui/assets/provider-store-access-k0kSINjn.js +1 -0
- package/dist/ui/assets/{providers-BPe5laJG.js → providers-BHEqlrX_.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-B_AGBn4c.js → proxied-fetch-Czuq7h2B.js} +1 -1
- package/dist/ui/assets/py-realm-worker-C75JGmXR.js +242 -0
- package/dist/ui/assets/{remote-terminal-view-CP8Lf876.js → remote-terminal-view-DkDiLkBM.js} +1 -1
- package/dist/ui/assets/{store-BS4j8ZLu.js → store-DFdPyEaa.js} +1 -1
- package/dist/ui/assets/structured-output-tool-BDaIhclx.js +1 -0
- package/dist/ui/assets/{sudo-DSdWsBdi.js → sudo-CDWHE-XG.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-D89qWVP0.js → tray-leave-runtime-CedcHQX5.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DrqwHzzN.js → upgrade-detection-Bxb3OurB.js} +1 -1
- package/dist/ui/assets/{xai-grok-BQ9_isXE.js → xai-grok-BrDEN2gc.js} +1 -1
- package/dist/ui/assets/{xai-grok-BdtGxsQM.js → xai-grok-CaWgmHbx.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/packages/webapp/index.html +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/cost-command-Dra1U3jF.js +0 -1
- package/dist/ui/assets/provider-store-access-B3i7FLFm.js +0 -1
- package/dist/ui/assets/provider-store-access-BR8F8wd6.js +0 -1
- package/dist/ui/assets/py-realm-worker-DvbMqvZQ.js +0 -23
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/magick-wasm-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/magick-wasm-1dtYEyLr.js","assets/preload-helper-zJ_50EbN.js","assets/azure-openai-C4klGbBq.js","assets/bedrock-camp-CWvhREqw.js","assets/chunk-aKtaBQYM.js","assets/transform-messages-B3Q-Bwv-.js","assets/json-parse-BUunmmNl.js","assets/openai-Cn5LRPCm.js","assets/local-llm-BlEhi-EE.js","assets/openai-completions-B_5Ph3h0.js","assets/github-copilot-headers-DZtWWv8W.js","assets/openai-prompt-cache-DXo9f3w5.js","assets/headers-DO1UzNKu.js","assets/sanitize-unicode-DmIE6hZJ.js","assets/logger-DDBAeTLF.js","assets/adobe-DfX5Y34s.js","assets/oauth-service-BcS-bhoB.js","assets/github-copilot-BrwsrJ0a.js","assets/github-Ca90QHu7.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-DzqY9hsC.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-CaWgmHbx.js","assets/xai-grok-errors-bnlIBeu-.js","assets/slicc-editor-BdfBeQCF.js","assets/dist-k2Xmqc09.js","assets/mount-picker-popup-DncaR5N8.js","assets/hid-device-registry-D2LsJCRr.js","assets/onboarding-orchestrator-Dpk9ts40.js","assets/dist-C6lFkA1A2.js","assets/dist-CvzfEfDj2.js","assets/remote-terminal-view-DkDiLkBM.js","assets/terminal-session-client-C_tYJ1IB.js","assets/picker-approval-tzbkMw-e.js","assets/tool-ui-YOPqzMmL.js","assets/secret-env-DcfTe28K.js","assets/remote-vfs-client-BwJhhtIV.js","assets/types-idfTVsM8.js","assets/writable-vfs-client-DMYsajEE.js","assets/sudo-CDWHE-XG.js","assets/cdp-rsA_ALer.js","assets/main-cherry-zUoPE3cg.js","assets/panel-rpc-handlers-CnJYQP27.js","assets/hosted-config-apply-uAym2aS5.js","assets/agent-bridge-C5enj1WV.js","assets/oauth-bootstrap--CDdXr74.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{n as e,r as t,t as n}from"./chunk-aKtaBQYM.js";import"./modulepreload-polyfill-Dezn_h7o.js";import{a as r,r as i,t as a}from"./bedrock-camp-CWvhREqw.js";import{t as o}from"./preload-helper-zJ_50EbN.js";import{d as s,f as c,l,u}from"./transform-messages-B3Q-Bwv-.js";import{t as d}from"./logger-DDBAeTLF.js";import{n as f,t as p}from"./mime-types-B9LIwKG5.js";import{n as m,t as h}from"./tool-ui-YOPqzMmL.js";import{n as g}from"./clipboard-DgFtRQbq.js";import{i as _,n as v,r as y,t as b}from"./path-utils-DU6QhF_k.js";import{i as x,n as S,r as ee,t as C}from"./hid-device-registry-D2LsJCRr.js";import{i as w,o as te,r as T,t as ne}from"./mount-picker-popup-DncaR5N8.js";import{t as re}from"./picker-approval-tzbkMw-e.js";import{t as E}from"./types-idfTVsM8.js";var ie=Symbol.for(`yaml.alias`),ae=Symbol.for(`yaml.document`),D=Symbol.for(`yaml.map`),oe=Symbol.for(`yaml.pair`),O=Symbol.for(`yaml.scalar`),se=Symbol.for(`yaml.seq`),k=Symbol.for(`yaml.node.type`),ce=e=>!!e&&typeof e==`object`&&e[k]===ie,A=e=>!!e&&typeof e==`object`&&e[k]===ae,le=e=>!!e&&typeof e==`object`&&e[k]===D,j=e=>!!e&&typeof e==`object`&&e[k]===oe,ue=e=>!!e&&typeof e==`object`&&e[k]===O,de=e=>!!e&&typeof e==`object`&&e[k]===se;function fe(e){if(e&&typeof e==`object`)switch(e[k]){case D:case se:return!0}return!1}function pe(e){if(e&&typeof e==`object`)switch(e[k]){case ie:case D:case O:case se:return!0}return!1}var me=e=>(ue(e)||fe(e))&&!!e.anchor,he=Symbol(`break visit`),ge=Symbol(`skip children`),_e=Symbol(`remove node`);function ve(e,t){let n=Se(t);A(e)?ye(null,e.contents,n,Object.freeze([e]))===_e&&(e.contents=null):ye(null,e,n,Object.freeze([]))}ve.BREAK=he,ve.SKIP=ge,ve.REMOVE=_e;function ye(e,t,n,r){let i=Ce(e,t,n,r);if(pe(i)||j(i))return we(e,r,i),ye(e,i,n,r);if(typeof i!=`symbol`){if(fe(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=ye(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===he)return he;else i===_e&&(t.items.splice(e,1),--e)}}else if(j(t)){r=Object.freeze(r.concat(t));let e=ye(`key`,t.key,n,r);if(e===he)return he;e===_e&&(t.key=null);let i=ye(`value`,t.value,n,r);if(i===he)return he;i===_e&&(t.value=null)}}return i}async function be(e,t){let n=Se(t);A(e)?await xe(null,e.contents,n,Object.freeze([e]))===_e&&(e.contents=null):await xe(null,e,n,Object.freeze([]))}be.BREAK=he,be.SKIP=ge,be.REMOVE=_e;async function xe(e,t,n,r){let i=await Ce(e,t,n,r);if(pe(i)||j(i))return we(e,r,i),xe(e,i,n,r);if(typeof i!=`symbol`){if(fe(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await xe(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===he)return he;else i===_e&&(t.items.splice(e,1),--e)}}else if(j(t)){r=Object.freeze(r.concat(t));let e=await xe(`key`,t.key,n,r);if(e===he)return he;e===_e&&(t.key=null);let i=await xe(`value`,t.value,n,r);if(i===he)return he;i===_e&&(t.value=null)}}return i}function Se(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function Ce(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(le(t))return n.Map?.(e,t,r);if(de(t))return n.Seq?.(e,t,r);if(j(t))return n.Pair?.(e,t,r);if(ue(t))return n.Scalar?.(e,t,r);if(ce(t))return n.Alias?.(e,t,r)}function we(e,t,n){let r=t[t.length-1];if(fe(r))r.items[e]=n;else if(j(r))e===`key`?r.key=n:r.value=n;else if(A(r))r.contents=n;else{let e=ce(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}var Te={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},Ee=e=>e.replace(/[!,[\]{}]/g,e=>Te[e]),De=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Ee(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],n=Object.entries(this.tags),r;if(e&&n.length>0&&pe(e.contents)){let t={};ve(e.contents,(e,n)=>{pe(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(let[i,a]of n)i===`!!`&&a===`tag:yaml.org,2002:`||(!e||r.some(e=>e.startsWith(a)))&&t.push(`%TAG ${i} ${a}`);return t.join(`
|
|
3
3
|
`)}};De.defaultYaml={explicit:!1,version:`1.2`},De.defaultTags={"!!":`tag:yaml.org,2002:`};function Oe(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function ke(e,t,n,r){if(r&&typeof r==`object`)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){let n=r[t],i=ke(e,r,String(t),n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(let t of Array.from(r.keys())){let n=r.get(t),i=ke(e,r,t,n);i===void 0?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(let t of Array.from(r)){let n=ke(e,r,t,t);n===void 0?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(let[t,n]of Object.entries(r)){let i=ke(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Ae(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Ae(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!me(e))return e.toJSON(t,n);let r={aliasCount:0,count:1,res:void 0};n.anchors.set(e,r),n.onCreate=e=>{r.res=e,delete n.onCreate};let i=e.toJSON(t,n);return n.onCreate&&n.onCreate(i),i}return typeof e==`bigint`&&!n?.keep?Number(e):e}var je=class{constructor(e){Object.defineProperty(this,k,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!A(e))throw TypeError(`A document argument is required`);let a={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n==`number`?n:100},o=Ae(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?ke(i,{"":o},``,o):o}},Me=class extends je{constructor(e){super(ie),this.source=e,Object.defineProperty(this,"tag",{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],ve(e,{Node:(e,t)=>{(ce(t)||me(t))&&n.push(t)}}),t&&(t.aliasResolveCache=n));let r;for(let e of n){if(e===this)break;e.anchor===this.source&&(r=e)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,a=this.resolve(r,t);if(!a){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let o=n.get(a);if(o||=(Ae(a,null,t),n.get(a)),o?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(o.count+=1,o.aliasCount===0&&(o.aliasCount=Ne(r,a,n)),o.count*o.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return o.res}toString(e,t,n){let r=`*${this.source}`;if(e){if(Oe(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${r} `}return r}};function Ne(e,t,n){if(ce(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(fe(t)){let r=0;for(let i of t.items){let t=Ne(e,i,n);t>r&&(r=t)}return r}else if(j(t)){let r=Ne(e,t.key,n),i=Ne(e,t.value,n);return Math.max(r,i)}return 1}var Pe=e=>!e||typeof e!=`function`&&typeof e!=`object`,Fe=class extends je{constructor(e){super(O),this.value=e}toJSON(e,t){return t?.keep?this.value:Ae(this.value,e,t)}toString(){return String(this.value)}};Fe.BLOCK_FOLDED=`BLOCK_FOLDED`,Fe.BLOCK_LITERAL=`BLOCK_LITERAL`,Fe.PLAIN=`PLAIN`,Fe.QUOTE_DOUBLE=`QUOTE_DOUBLE`,Fe.QUOTE_SINGLE=`QUOTE_SINGLE`;var Ie=`tag:yaml.org,2002:`;function Le(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function Re(e,t,n){if(A(e)&&(e=e.contents),pe(e))return e;if(j(e)){let t=n.schema[D].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:r,onAnchor:i,onTagObj:a,schema:o,sourceObjects:s}=n,c;if(r&&e&&typeof e==`object`){if(c=s.get(e),c)return c.anchor??=i(e),new Me(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=Ie+t.slice(2));let l=Le(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new Fe(e);return c&&(c.node=t),t}l=e instanceof Map?o[D]:Symbol.iterator in Object(e)?o[se]:o[D]}a&&(a(l),delete n.onTagObj);let u=l?.createNode?l.createNode(n.schema,e,n):typeof l?.nodeClass?.from==`function`?l.nodeClass.from(n.schema,e,n):new Fe(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function ze(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){let n=t[e];if(typeof n==`number`&&Number.isInteger(n)&&n>=0){let e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return Re(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}var Be=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done,Ve=class extends je{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>pe(t)||j(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Be(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(fe(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,ze(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){let[t,...n]=e;if(n.length===0)return this.delete(t);let r=this.get(t,!0);if(fe(r))return r.deleteIn(n);throw Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){let[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&ue(i)?i.value:i:fe(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!j(t))return!1;let n=t.value;return n==null||e&&ue(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[t,...n]=e;if(n.length===0)return this.has(t);let r=this.get(t,!0);return fe(r)?r.hasIn(n):!1}setIn(e,t){let[n,...r]=e;if(r.length===0)this.set(n,t);else{let e=this.get(n,!0);if(fe(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,ze(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}},He=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function Ue(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var We=(e,t,n)=>e.endsWith(`
|
|
4
4
|
`)?Ue(n,t):n.includes(`
|
|
@@ -61,7 +61,7 @@ Do NOT continue the conversation. Do NOT answer questions inside the conversatio
|
|
|
61
61
|
<conversation>
|
|
62
62
|
${e}
|
|
63
63
|
</conversation>`}async function Yt(e,t,n,i,a,o,s){let c=await r(e,{systemPrompt:n,messages:[{role:`user`,content:[{type:`text`,text:i}],timestamp:Date.now()}]},{maxTokens:a,apiKey:t,headers:o,signal:s});if(c.stopReason===`error`)throw Error(`Compaction call failed: ${c.errorMessage||`Unknown error`}`);return c.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
64
|
-
`).trim()}async function Xt(e){let t=Jt(Gt(e.messages));return Yt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Zt=qt,Qt=`Generate a short title (3 to 6 words) summarizing what this conversation was about. Output ONLY the title text — no quotes, no punctuation other than what belongs in the title, no preamble.`;d(`secret-scrub`);var $t=`agent-sessions`,en=1,tn=`sessions`;function nn(){return new Promise((e,t)=>{let n=indexedDB.open($t,en);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(tn)||e.createObjectStore(tn,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var rn=class{dbPromise=null;getDB(){return this.dbPromise||=nn(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(tn,`readwrite`).objectStore(tn).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(tn,`readonly`).objectStore(tn).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(tn,`readwrite`).objectStore(tn).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(tn,`readonly`).objectStore(tn).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(tn,`readwrite`).objectStore(tn).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()}}},an=d(`image-processor`),on=3932160,sn=1568,tee=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function cn(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function ln(e){return tee.has(e)}function un(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function dn(e){if(!ln(e.mimeType))return an.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,n=un(e.data,e.mimeType);if(!(t>5242880||n!==null&&(n.width>8e3||n.height>8e3)||n!==null&&Math.max(n.width,n.height)>1568))return e;an.info(`Image needs processing`,{base64Size:t,dimensions:n?`${n.width}x${n.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let r,i;try{let e=await o(()=>import(`./magick-wasm-vsfBoBVf.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return an.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let a;try{a=await r()}catch(e){return an.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let o={data:null,mime:e.mimeType};if(await a.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,a=Math.max(n,r);if(a>1568){let e=sn/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),an.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${o}`})}let s=i[e.mimeType]||`JPEG`;t.write(s,e=>{o.data=new Uint8Array(e)}),o.data&&o.data.length>on&&s!==`JPEG`?(an.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}),o.mime=`image/jpeg`):o.data&&o.data.length>on&&(an.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}))}),!o.data)return an.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>on)return an.warn(`Image still over 5MB after resize+compress`,{size:o.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(o.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<o.data.length;e++)s+=String.fromCharCode(o.data[e]);let c=btoa(s);return an.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return an.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}d(`tool-adapter`);var fn=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function pn(e){let{include:t,exclude:n}=fn;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var mn=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-gbSUirDq.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-CWvhREqw.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-DtrX5Uni.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),hn=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-6HAbKcn4.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-BexWH_uC.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-YMmsRSa5.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-CAuyH7cW.js`),__vite__mapDeps([20,3,4,1,5,6])),"/packages/webapp/providers/xai-grok-errors.ts":()=>o(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok-models.ts":()=>o(()=>import(`./xai-grok-models-CeEBaUMC.js`),[]),"/packages/webapp/providers/xai-grok-sanitize.ts":()=>o(()=>import(`./xai-grok-sanitize-CR2JoOJd.js`),__vite__mapDeps([21,22])),"/packages/webapp/providers/xai-grok.ts":()=>o(()=>import(`./xai-grok-BdtGxsQM.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),gn=new Map,_n=null;function vn(){return _n||(_n=(async()=>{for(let[e,t]of Object.entries(mn)){let e=await t();e.config&&pn(e.config.id)&&(gn.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(hn)){let e=await t();e.config&&(gn.set(e.config.id,e.config),e.register?.())}})(),_n)}function yn(e){return gn.get(e)}function bn(){return[...gn.keys()]}function xn(e){gn.set(e.id,e)}var Sn=`tray`,Cn=`trayWorkerUrl`,wn=`lead`;function Tn(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function En(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=Tn(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Dn(e,t){let n=new URL(e);return n.searchParams.delete(Cn),n.searchParams.delete(wn),n.searchParams.set(Sn,t),n.toString()}var On=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>jn,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Mn,TRAY_JOIN_STORAGE_KEY:()=>An,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>wn,TRAY_QUERY_PARAM:()=>Sn,TRAY_WORKER_QUERY_PARAM:()=>Cn,TRAY_WORKER_STORAGE_KEY:()=>kn,buildTrayLaunchUrl:()=>zn,buildTrayLeadLaunchUrl:()=>Vn,buildTrayLeadValue:()=>Bn,buildTrayUrlValue:()=>Rn,buildTrayWorkerUrl:()=>Nn,fetchRuntimeConfig:()=>Wn,hasStoredTrayJoinUrl:()=>Ln,normalizeTrayWorkerBaseUrl:()=>Tn,parseTrayJoinUrlValue:()=>Fn,parseTrayLeadValue:()=>nee,parseTrayUrlValue:()=>Pn,resolveTrayRuntimeConfig:()=>Hn,resolveTrayWorkerBaseUrl:()=>Un,storeTrayJoinUrl:()=>In}),kn=`slicc.trayWorkerBaseUrl`,An=`slicc.trayJoinUrl`,jn=`https://www.sliccy.ai`,Mn=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Nn(e,t){let n=Tn(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Pn(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return En(t.toString());let i=Tn(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function Fn(e){let t=Pn(e);return t?.joinUrl?t:null}function In(e,t){let n=Fn(t);return n?(e.setItem(An,n.joinUrl),e.setItem(kn,n.workerBaseUrl),n):null}function Ln(e){return!!Fn(e?.getItem(`slicc.trayJoinUrl`)??null)}function Rn(e,t){let n=Tn(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function zn(e,t,n){return Dn(e,Rn(t,n))}function nee(e){return Pn(e)}function Bn(e,t){return Rn(e,t)}function Vn(e,t,n){return zn(e,t,n)}async function Hn(e){let t=Gn(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(An,t.joinUrl),e.storage.setItem(kn,t.workerBaseUrl)),t;let n=Fn(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(kn,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Kn(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(An,r.joinConfig.joinUrl),e.storage.setItem(kn,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=Tn(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=Tn(e.envBaseUrl??null),s=Tn(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(kn,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Un(e){return(await Hn(e))?.workerBaseUrl??null}async function Wn(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function Gn(e){try{let t=new URL(e),n=Pn(t.searchParams.get(Sn));if(n)return n;let r=Pn(t.searchParams.get(wn));if(r)return r;let i=Tn(t.searchParams.get(Cn));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:En(e)||null}catch{return null}}async function Kn(e){let t=await e();if(!t)return null;let n=Fn(t.trayJoinUrl??null);return{workerBaseUrl:Tn(t.trayWorkerBaseUrl??null),joinConfig:n}}function qn(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}var Jn=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],Yn=`chat`,Xn=new Set(Jn.map(e=>e.id));function Zn(e){return Xn.has(e)}var Qn=`slicc-electron-overlay:close`;function $n(e,t){if(t){try{if(new URL(e).searchParams.get(`detached`)===`1`)return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:nr(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function er(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function tr(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&Zn(t)?t:Yn}catch{return Yn}}function nr(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function rr(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function ir(e){let{layout:t,isElectronOverlay:n,window:r,document:i}=e;if(!n)return;let a=tr(r.location.href);t.setActiveTab(a),r.parent===r?t.setShowElectronOverlayClose(null):t.setShowElectronOverlayClose(()=>{r.parent.postMessage({type:Qn},`*`)});let o=i.createElement(`style`);o.id=`slicc-electron-overlay-runtime-style`,o.textContent=`
|
|
64
|
+
`).trim()}async function Xt(e){let t=Jt(Gt(e.messages));return Yt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Zt=qt,Qt=`Generate a short title (3 to 6 words) summarizing what this conversation was about. Output ONLY the title text — no quotes, no punctuation other than what belongs in the title, no preamble.`;d(`secret-scrub`);var $t=`agent-sessions`,en=1,tn=`sessions`;function nn(){return new Promise((e,t)=>{let n=indexedDB.open($t,en);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(tn)||e.createObjectStore(tn,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var rn=class{dbPromise=null;getDB(){return this.dbPromise||=nn(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(tn,`readwrite`).objectStore(tn).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(tn,`readonly`).objectStore(tn).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(tn,`readwrite`).objectStore(tn).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(tn,`readonly`).objectStore(tn).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(tn,`readwrite`).objectStore(tn).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()}}},an=d(`image-processor`),on=3932160,sn=1568,tee=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function cn(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function ln(e){return tee.has(e)}function un(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function dn(e){if(!ln(e.mimeType))return an.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,n=un(e.data,e.mimeType);if(!(t>5242880||n!==null&&(n.width>8e3||n.height>8e3)||n!==null&&Math.max(n.width,n.height)>1568))return e;an.info(`Image needs processing`,{base64Size:t,dimensions:n?`${n.width}x${n.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let r,i;try{let e=await o(()=>import(`./magick-wasm-1dtYEyLr.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return an.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let a;try{a=await r()}catch(e){return an.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let o={data:null,mime:e.mimeType};if(await a.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,a=Math.max(n,r);if(a>1568){let e=sn/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),an.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${o}`})}let s=i[e.mimeType]||`JPEG`;t.write(s,e=>{o.data=new Uint8Array(e)}),o.data&&o.data.length>on&&s!==`JPEG`?(an.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}),o.mime=`image/jpeg`):o.data&&o.data.length>on&&(an.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}))}),!o.data)return an.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>on)return an.warn(`Image still over 5MB after resize+compress`,{size:o.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(o.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<o.data.length;e++)s+=String.fromCharCode(o.data[e]);let c=btoa(s);return an.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return an.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}d(`tool-adapter`);var fn=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function pn(e){let{include:t,exclude:n}=fn;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var mn=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-C4klGbBq.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-CWvhREqw.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-BlEhi-EE.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),hn=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-DfX5Y34s.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-BrwsrJ0a.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-Ca90QHu7.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-DzqY9hsC.js`),__vite__mapDeps([20,3,4,1,5,6])),"/packages/webapp/providers/xai-grok-errors.ts":()=>o(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok-models.ts":()=>o(()=>import(`./xai-grok-models-CeEBaUMC.js`),[]),"/packages/webapp/providers/xai-grok-sanitize.ts":()=>o(()=>import(`./xai-grok-sanitize-CR2JoOJd.js`),__vite__mapDeps([21,22])),"/packages/webapp/providers/xai-grok.ts":()=>o(()=>import(`./xai-grok-CaWgmHbx.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),gn=new Map,_n=null;function vn(){return _n||(_n=(async()=>{for(let[e,t]of Object.entries(mn)){let e=await t();e.config&&pn(e.config.id)&&(gn.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(hn)){let e=await t();e.config&&(gn.set(e.config.id,e.config),e.register?.())}})(),_n)}function yn(e){return gn.get(e)}function bn(){return[...gn.keys()]}function xn(e){gn.set(e.id,e)}var Sn=`tray`,Cn=`trayWorkerUrl`,wn=`lead`;function Tn(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function En(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=Tn(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Dn(e,t){let n=new URL(e);return n.searchParams.delete(Cn),n.searchParams.delete(wn),n.searchParams.set(Sn,t),n.toString()}var On=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>jn,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Mn,TRAY_JOIN_STORAGE_KEY:()=>An,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>wn,TRAY_QUERY_PARAM:()=>Sn,TRAY_WORKER_QUERY_PARAM:()=>Cn,TRAY_WORKER_STORAGE_KEY:()=>kn,buildTrayLaunchUrl:()=>zn,buildTrayLeadLaunchUrl:()=>Vn,buildTrayLeadValue:()=>Bn,buildTrayUrlValue:()=>Rn,buildTrayWorkerUrl:()=>Nn,fetchRuntimeConfig:()=>Wn,hasStoredTrayJoinUrl:()=>Ln,normalizeTrayWorkerBaseUrl:()=>Tn,parseTrayJoinUrlValue:()=>Fn,parseTrayLeadValue:()=>nee,parseTrayUrlValue:()=>Pn,resolveTrayRuntimeConfig:()=>Hn,resolveTrayWorkerBaseUrl:()=>Un,storeTrayJoinUrl:()=>In}),kn=`slicc.trayWorkerBaseUrl`,An=`slicc.trayJoinUrl`,jn=`https://www.sliccy.ai`,Mn=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Nn(e,t){let n=Tn(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Pn(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return En(t.toString());let i=Tn(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function Fn(e){let t=Pn(e);return t?.joinUrl?t:null}function In(e,t){let n=Fn(t);return n?(e.setItem(An,n.joinUrl),e.setItem(kn,n.workerBaseUrl),n):null}function Ln(e){return!!Fn(e?.getItem(`slicc.trayJoinUrl`)??null)}function Rn(e,t){let n=Tn(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function zn(e,t,n){return Dn(e,Rn(t,n))}function nee(e){return Pn(e)}function Bn(e,t){return Rn(e,t)}function Vn(e,t,n){return zn(e,t,n)}async function Hn(e){let t=Gn(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(An,t.joinUrl),e.storage.setItem(kn,t.workerBaseUrl)),t;let n=Fn(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(kn,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Kn(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(An,r.joinConfig.joinUrl),e.storage.setItem(kn,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=Tn(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=Tn(e.envBaseUrl??null),s=Tn(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(kn,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Un(e){return(await Hn(e))?.workerBaseUrl??null}async function Wn(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function Gn(e){try{let t=new URL(e),n=Pn(t.searchParams.get(Sn));if(n)return n;let r=Pn(t.searchParams.get(wn));if(r)return r;let i=Tn(t.searchParams.get(Cn));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:En(e)||null}catch{return null}}async function Kn(e){let t=await e();if(!t)return null;let n=Fn(t.trayJoinUrl??null);return{workerBaseUrl:Tn(t.trayWorkerBaseUrl??null),joinConfig:n}}function qn(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}var Jn=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],Yn=`chat`,Xn=new Set(Jn.map(e=>e.id));function Zn(e){return Xn.has(e)}var Qn=`slicc-electron-overlay:close`;function $n(e,t){if(t){try{if(new URL(e).searchParams.get(`detached`)===`1`)return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:nr(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function er(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function tr(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&Zn(t)?t:Yn}catch{return Yn}}function nr(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function rr(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function ir(e){let{layout:t,isElectronOverlay:n,window:r,document:i}=e;if(!n)return;let a=tr(r.location.href);t.setActiveTab(a),r.parent===r?t.setShowElectronOverlayClose(null):t.setShowElectronOverlayClose(()=>{r.parent.postMessage({type:Qn},`*`)});let o=i.createElement(`style`);o.id=`slicc-electron-overlay-runtime-style`,o.textContent=`
|
|
65
65
|
#app > .tab-bar { display: none !important; }
|
|
66
66
|
#app > .tab-content {
|
|
67
67
|
height: calc(100vh - var(--s2-header-height));
|
|
@@ -69,7 +69,7 @@ ${e}
|
|
|
69
69
|
#app > .tab-content > .tab-content__panel {
|
|
70
70
|
height: 100%;
|
|
71
71
|
}
|
|
72
|
-
`,i.head.appendChild(o),r.addEventListener(`message`,e=>{e.source===r.parent&&rr(e.data)&&t.setActiveTab(tr(`http://localhost/?tab=${e.data.tab??``}`))}),r.addEventListener(`keydown`,e=>{e.code===`Semicolon`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat&&(e.preventDefault(),e.stopPropagation(),r.parent.postMessage({type:`slicc-electron-overlay:toggle`},`*`))},!0)}var ar=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`scoop-notify`,`scoop-idle`,`scoop-wait`]);function or(e){return e!=null&&ar.has(e)}var sr=`__slicc_binary__`,cr=`b64`;function lr(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[sr]===cr&&typeof t.data==`string`}function ur(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function dr(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 fr(e){if(e instanceof Uint8Array)return{[sr]:cr,data:ur(e)};if(Array.isArray(e))return e.map(fr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=fr(r);return t}return e}function pr(e){if(lr(e))return dr(e.data);if(Array.isArray(e))return e.map(pr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=pr(r);return t}return e}var mr=d(`panel-transport`);function hr(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function gr(){return{onMessage:e=>{let t=(t,n,r)=>(hr(t)&&e(pr(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=fr(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{mr.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var _r={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function vr(){return{..._r}}var yr=new Set;function br(){if(yr.size!==0)for(let e of[...yr])try{e({..._r})}catch{}}function xr(e){_r={...e},br()}function Sr(e){_r={..._r,lastPingTime:e},br()}function Cr(e){return e.headers.get(`x-proxy-error`)===`1`}async function wr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Tr(n,t)}function Tr(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}var Er=`slicc-groups`,Dr=3,Or={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},kr=null;async function Ar(){if(kr){let e=Object.values(Or).every(e=>kr.objectStoreNames.contains(e));if(kr.version===Dr&&e)return kr;kr.close(),kr=null}return new Promise((e,t)=>{let n=indexedDB.open(Er,Dr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(Or.MESSAGES)){let e=t.createObjectStore(Or.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(Or.SESSIONS)||t.createObjectStore(Or.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(Or.TASKS)||t.createObjectStore(Or.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(Or.STATE)||t.createObjectStore(Or.STATE,{keyPath:`key`})}if(n<2){let n=e.target.transaction;if(t.objectStoreNames.contains(`groups`)){let e=n.objectStore(`groups`).getAll();e.onsuccess=()=>{let n=e.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(Or.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let e of n){let t=e.isMain??!1,n={jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0};r.put(n)}}}else t.objectStoreNames.contains(Or.SCOOPS)||t.createObjectStore(Or.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(Or.WEBHOOKS)||t.createObjectStore(Or.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(Or.CRONTASKS)||t.createObjectStore(Or.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{kr=n.result,e(kr)},n.onerror=()=>t(n.error)})}async function jr(e,t=`readonly`){return(await Ar()).transaction(e,t).objectStore(e)}async function Mr(){let e=await jr(Or.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Nr(e){let t=await jr(Or.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Pr(e,t){let n=await jr(Or.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var Fr=d(`tray-leader`),Ir=`leader-tray-session`,Lr=3e4,Rr=1e4,zr=1e3,Br=3e4,Vr=2,Hr=20,Ur={state:`inactive`,session:null,error:null};function Wr(){return{...Ur,session:Ur.session?{...Ur.session}:null}}var Gr=new Set;function Kr(e){return Gr.add(e),()=>{Gr.delete(e)}}function qr(e){if(Ur={...e,session:e.session?{...e.session}:null},Gr.size!==0)for(let e of[...Gr])try{e(Wr())}catch{}}var Jr=class{key;constructor(e=Ir){this.key=e}async load(){return Yr(await Nr(this.key))}async save(e){await Pr(this.key,JSON.stringify(e))}async clear(){await Pr(this.key,``)}};function Yr(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var Xr=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new Jr,this.fetchImpl=e.fetchImpl??ei(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Lr,this.connectTimeoutMs=e.connectTimeoutMs??Rr;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??zr,this.reconnectMaxDelayMs=n.maxDelayMs??Br,this.reconnectBackoffMultiplier=n.backoffMultiplier??Vr,this.reconnectMaxAttempts=n.maxAttempts??Hr,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return qr({state:`leader`,session:this.currentSession,error:null}),this.currentSession;qr({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();Fr.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Fr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw qr({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,qr({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),qr({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){Fr.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,qr({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;Fr.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,qr({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),Fr.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,Fr.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Fr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Fr.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,qr({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),Fr.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!Qr(t))throw t;return Fr.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear(),this.claimLeaderSession(null)}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(Nn(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=$r(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Fr.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{Fr.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await Zr.fromResponse(n);return await n.json()}},Zr=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}};function Qr(e){return e instanceof Zr&&[403,404,410].includes(e.status)}function $r(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function ei(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(t,n={})=>{let r=typeof t==`string`?t:t.toString();try{if(new URL(r).origin===window.location.origin)return e(r,{...n,cache:`no-store`})}catch{}let i=new Headers(n.headers);i.set(`X-Target-URL`,r);let a=await e(`/api/fetch-proxy`,{...n,headers:i,cache:`no-store`});if(Cr(a))throw Error(await wr(a));return a}}var ti=d(`offscreen-client`),ni=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=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){ti.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??gr(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){}updateModel(){this.send({type:`refresh-model`})}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t){this.send({type:`set-thinking-level`,scoopJid:e,level:t})}async clearAllMessages(){let e=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingClearAcks.set(e,t)});this.send({type:`clear-chat`,requestId:e}),await Promise.race([t,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(e)}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}async getScoopTranscript(e){let t=`tr-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingTranscriptRequests.set(t,e)});this.send({type:`request-scoop-transcript`,requestId:t,scoopJid:e});let r=await Promise.race([n,new Promise(e=>setTimeout(()=>e(``),5e3))]);return this.pendingTranscriptRequests.delete(t),r}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}ti.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})}sendWebhookEvent(e,t,n){this.send({type:`lick-webhook-event`,webhookId:e,headers:t,body:n})}sendSetFollowerForwarding(e){this.send({type:`set-follower-forwarding`,enabled:e})}sendForwardedLick(e){this.send({type:`inject-forwarded-lick`,event:e})}setForwardLickHandler(e){this.forwardLickHandler=e}sendCherryHostEvent(e,t,n){this.send({type:`lick-cherry-host-event`,cherryRuntimeId:e,name:t,detail:n})}setSprinkleOpHandler(e){this.sprinkleOpHandler=e}sendRaw(e){this.send(e)}setupMessageListener(){this.transport.onMessage(e=>{if(e.source!==`offscreen`)return;let t=e.payload;t?.type===`sprinkle-op`&&this.sprinkleOpHandler?this.sprinkleOpHandler(t):this.handleOffscreenMessage(e.payload)})}handleOffscreenMessage(e){switch(e.type){case`offscreen-ready`:this.ready?(ti.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):ti.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`compaction-state`:this.callbacks.onCompactionStateChange?.(e.scoopJid,e.state);break;case`clear-chat-ack`:{let t=this.pendingClearAcks.get(e.requestId);t&&(this.pendingClearAcks.delete(e.requestId),t());break}case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`scoop-messages-replaced`:{let t=e;this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`scoop-transcript`:{let t=e,n=this.pendingTranscriptRequests.get(t.requestId);n&&(this.pendingTranscriptRequests.delete(t.requestId),n(t.transcript));break}case`tray-runtime-status`:{let t=e;ii(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){ti.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}handleAgentEvent(e){if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${ri()}`,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}-${ri()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${ri()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${ri()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){ti.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&ii(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)}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){ti.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 ri(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function ii(e,t){qr({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),xr({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 ai(e){let{layout:t,log:n,getSelectedScoop:r,setSelectedScoop:i,syncThinkingButtonForScoop:a}=e,o=new Set,s,c=async e=>{i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid),t.setScoopSwitcherSelected?.(e.jid),t.panels.scoops.setSelectedJid(e.jid);let n=e.isCone?`session-cone`:`session-${e.folder}`,r=e.isCone?void 0:e.name;await t.panels.chat.switchToContext(n,!e.isCone,r),s.requestScoopMessages(e.jid),s.isProcessing(e.jid)&&t.panels.chat.setProcessing(!0),a(e)};return s=new ni({onStatusChange:(e,n)=>oi(e,n,t,r),onScoopCreated:e=>{t.panels.scoops.refreshScoops(),t.refreshScoopSwitcher?.(),r()||(i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid))},onScoopListUpdate:()=>{let e=new Set(s.getScoops().map(e=>e.folder));for(let n of o)e.has(n)||t.panels.chat.deleteSessionById(`session-${n}`);if(o=e,t.panels.scoops.refreshScoops(),t.refreshScoopSwitcher?.(),!r()){let e=s.getScoops().find(e=>e.isCone);e&&(i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid))}},onIncomingMessage:(e,n)=>si(e,n,s,t,r),onScoopMessagesReplaced:(e,n)=>{r()?.jid===e&&t.panels.chat.loadMessages(n)},onCompactionStateChange:(e,n)=>{r()?.jid===e&&t.panels.chat.setCompactionState(n)},onReady:async()=>{try{n.info(`Offscreen engine ready, scoop count:`,s.getScoops().length),await ci();let e=r()??s.getScoops().find(e=>e.isCone)??s.getScoops()[0];e&&(i(e),s.setSelectedScoopJid(e.jid),await c(e))}catch(e){n.error(`Failed to initialize on ready`,{error:e instanceof Error?e.message:String(e)})}}}),{client:s,selectScoop:c}}function oi(e,t,n,r){n.panels.scoops.updateScoopStatus(e,t),n.updateScoopSwitcherStatus?.(e,t),r()?.jid===e&&(n.setAgentProcessing(t===`processing`),t===`processing`?n.panels.chat.setProcessing(!0):t===`ready`&&n.panels.chat.setProcessing(!1))}function si(e,t,n,r,i){if(or(t.channel)){let a=new Date(t.timestamp).getTime(),o=t.channel;if(i()?.jid===e)r.panels.chat.addLickMessage(t.id,t.content,o,a);else{let i=n.getScoops().find(t=>t.jid===e),s=i?.isCone?`session-cone`:i?`session-${i.folder}`:`session-${e}`;r.panels.chat.persistLickToSession(s,{id:t.id,content:t.content,channel:o,timestamp:a})}return}if(i()?.jid===e){let e=t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content;r.panels.chat.addUserMessage(e,t.attachments)}}async function ci(){let e=window.localStorage.getItem(An);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(kn)}}).catch(()=>{})}function li(e,t){try{window.close()}catch{}e.setLocked(!0),t.showDetachedActiveOverlay()}function ui(e){let{client:t,layout:n,isDetachedSelf:r}=e;if(chrome.runtime.onMessage.addListener(e=>(!qn(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||r||li(t,n),!1)),r){chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>{});return}n.setShowPopoutButton(!0),n.setPopoutClickHandler(()=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e),n.resetPopoutButton()})})}var di=`slicc:adobe-daily-uuid:`,fi=new Map;function pi(){return new Date().toISOString().slice(0,10)}function mi(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function hi(e){let t=pi(),n=mi(),r=di+e;if(n){let e=null;try{e=n.getItem(r)}catch{e=null}if(e)try{let n=JSON.parse(e);if(n.date===t&&typeof n.uuid==`string`)return n.uuid}catch{}let i=crypto.randomUUID();try{n.setItem(r,JSON.stringify({uuid:i,date:t}))}catch{}return i}let i=fi.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return fi.set(e,{uuid:a,date:t}),a}function gi(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??_i(t.state)??`Mirroring another browser.`}}function _i(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function vi(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var yi=null,bi=!1;function xi(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Si(){if(!bi&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=xi();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(yi=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{Ei(`js`,Oi(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;Ei(`js`,Oi(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),yi=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),bi=!0,yi&&yi(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function Ci(e,t){yi?.(`formsubmit`,{source:e,target:t})}function wi(e){yi?.(`viewblock`,{source:e})}function Ti(e){yi?.(`viewmedia`,{source:e})}function Ei(e,t){yi?.(`error`,{source:e,target:t})}function Di(e){yi?.(`signup`,{source:e})}function Oi(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var ki=`slicc_oauth_extra_domains`;function Ai(e){try{let t=e.getItem(ki);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){if(typeof e!=`string`||!Array.isArray(t))continue;let n=t.filter(e=>typeof e==`string`&&e.length>0);n.length>0&&(r[e]=n)}return r}catch{return{}}}function ji(e,t){try{e.setItem(ki,JSON.stringify(t))}catch(e){throw Error(`Failed to persist OAuth extras (localStorage quota exceeded?): ${e instanceof Error?e.message:String(e)}`)}}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);var Mi=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>Fi,getPanelRpcClient:()=>Li,hasLocalDom:()=>Ri,installPanelRpcHandler:()=>Ii,panelRpcChannelName:()=>Pi}),Ni=`slicc-panel-rpc`;function Pi(e){return e?`${Ni}:${e}`:Ni}function Fi(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Pi(e.instanceId));return{emit(e,n){let r={type:`panel-rpc-event`,channel:e,payload:n};try{t.postMessage(r)}catch(t){console.warn(`panel-rpc: failed to emit event '${e}':`,t instanceof Error?t.message:String(t))}},dispose(){try{t.close()}catch{}}}}function Ii(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Pi(e.instanceId)),n=(e,n,r)=>{let i={type:`panel-rpc-response`,id:e};r===void 0?i.result=n:i.error=r;try{t.postMessage(i)}catch(t){let n=t instanceof Error?t.message:String(t);console.warn(`panel-rpc: failed to post response for id=${e}: ${n}`)}},r=async t=>{let r=t.data;if(r?.type!==`panel-rpc-request`)return;let i=e.handlers[r.op];if(!i){n(r.id,void 0,`panel-rpc: no handler for op '${r.op}'`);return}try{let e=await i(r.payload);n(r.id,e)}catch(e){n(r.id,void 0,e instanceof Error?e.message:String(e))}};return t.addEventListener(`message`,r),()=>{t.removeEventListener(`message`,r);try{t.close()}catch{}}}function Li(){return globalThis.__slicc_panelRpc??null}function Ri(){return typeof window<`u`&&typeof document<`u`}var zi=e({__test__:()=>ea,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Ui,addAccount:()=>xa,applyProviderDefaults:()=>la,clearAllSettings:()=>Ja,clearApiKey:()=>Ha,clearBaseUrl:()=>Ga,clearSelectedProvider:()=>za,describeInvalidJoinUrl:()=>vi,downloadProviders:()=>qa,exportProviders:()=>Ka,getAccounts:()=>ma,getAllAvailableModels:()=>pa,getAllExtraOAuthDomains:()=>va,getApiKey:()=>Ba,getApiKeyForProvider:()=>Aa,getApiVersionForProvider:()=>Na,getAvailableProviders:()=>ta,getBaseUrl:()=>Ua,getBaseUrlForProvider:()=>ja,getDeploymentForProvider:()=>Ma,getExtraOAuthDomains:()=>ha,getOAuthAccountInfo:()=>oa,getProviderConfig:()=>ra,getProviderModels:()=>aa,getRawApiKeyForProvider:()=>ka,getSelectedModelId:()=>Pa,getSelectedProvider:()=>La,isModelHiddenFromPicker:()=>da,logoutOAuthAccount:()=>wa,maskOAuthTokenWithRetry:()=>Ta,migrateLegacyAuthOnlySelection:()=>Qi,persistOAuthMaskViaServiceWorker:()=>Ea,providerOffersLlmModels:()=>na,removeAccount:()=>Ca,resolveCurrentModel:()=>Qa,resolveModelById:()=>Za,saveOAuthAccount:()=>Da,setApiKey:()=>Va,setBaseUrl:()=>Wa,setExtraOAuthDomains:()=>ga,setExtraOAuthDomainsAsync:()=>_a,setSelectedModelId:()=>Fa,setSelectedProvider:()=>Ra,showProviderSettings:()=>no}),Bi=l,Vi=u;function Hi(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function Ui(e,t){return Wi(e,t)}function Wi(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){ca.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}var Gi=`slicc_accounts`,Ki=`selected-model`,qi=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Ji=new Set([`github`]);function Yi(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!pn(e)}var Xi=!1;function Zi(){if(!Xi){Xi=!0;for(let e of qi)try{localStorage.removeItem(e)}catch{}Qi()}}function Qi(){try{let e=localStorage.getItem(Ki);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Ji.has(n)||Yi(n))&&localStorage.removeItem(Ki)}}}catch{}try{let e=localStorage.getItem(Gi);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Yi(e.providerId)));n.length!==t.length&&localStorage.setItem(Gi,JSON.stringify(n))}catch{}}function $i(){Xi=!1}var ea={_resetLegacyCleanup:$i};function ta(){let e=s().filter(pn),t=bn();return[...new Set([...e,...t])].filter(e=>!yn(e)?.hidden)}function na(e){try{if(aa(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=yn(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function ra(e){return yn(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function ia(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function aa(e){try{if(e===`bedrock-camp`){let e=a(ja(`bedrock-camp`));return Vi(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=ra(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return ca.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of s())try{for(let t of Vi(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=Xa(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&ia(o,s),ia(o,n),o})}if(t.isOAuth){let n=Vi(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&ia(i,a),i})}return Vi(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return ca.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function oa(e){let t=ma().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var sa=Object.assign({})[`/packages/webapp/providers.json`]??[],ca=d(`provider-settings`);function la(e=sa){if(e.length===0||ma().length>0)return;let t=new Set(ta());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){ca.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}xa(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Ki)&&localStorage.setItem(Ki,`${n.providerId}:${n.model}`)}var ua=[/haiku/i];function da(e){return ua.some(t=>t.test(e))}function fa(e){return e.filter(e=>!da(e.id))}function pa(){let e=ma();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=ra(n.providerId);if(e.hidden||Yi(n.providerId))continue;let r=fa(aa(n.providerId));if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function ma(){Zi();let e=localStorage.getItem(Gi);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function ha(e){return Ai(localStorage)[e]??[]}function ga(e,t){let n=Ai(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,ji(localStorage,n)}async function _a(e,t){if(Ri()){ga(e,t);return}let n=Li();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:r}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{ji(localStorage,r)}catch(t){ca.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function va(){return Ai(localStorage)}function ya(e){localStorage.setItem(Gi,JSON.stringify(e))}async function ba(e){if(Ri()){ya(e);return}let t=Li();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(Gi,r)}catch(e){ca.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function xa(e,t,n,r,i){let a=ma().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),ya(a)}async function Sa(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(t){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&ca.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&ca.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else{let t=await fetch(`/api/secrets/oauth/${e}`,{method:`DELETE`});!t.ok&&t.status!==404&&ca.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){ca.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Ca(e){let t=ma().find(t=>t.providerId===e),n=ra(e);t&&n?.isOAuth&&await wa(e),await Sa(e),await ba(ma().filter(t=>t.providerId!==e));let r=localStorage.getItem(Ki)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Ki)}async function wa(e){let t=ma().find(t=>t.providerId===e);if(!t)return;let n=ra(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){ca.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(n.getOAuthLogoutUrl){let r=n.getOAuthLogoutUrl(t);if(r){let{openIdpLogoutUrl:t}=await o(async()=>{let{openIdpLogoutUrl:e}=await import(`./oauth-service-BbkAikCT.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{ca.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await ba(ma().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Sa(e)}}async function Ta(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function Ea(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await Ta(()=>t.sendMaskRequest(r),n);if(!i){ca.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function Da(e){let t=ma().find(t=>t.providerId===e.providerId),n=ma().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await ba(n);let r=ra(e.providerId)?.oauthTokenDomains??[],i=ha(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s)await Ea({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&ca.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&ca.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:ma,saveAccounts:ba});else if(!globalThis.__slicc_connect_mode){let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=ma(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await ba(r))}else ca.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){ca.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var Oa=`local`;function ka(e){let t=ma().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function Aa(e){let t=ma().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(ra(e).optionalApiKey?Oa:null):null}function ja(e){return ma().find(t=>t.providerId===e)?.baseUrl??null}function Ma(e){return ma().find(t=>t.providerId===e)?.deployment??null}function Na(e){return ma().find(t=>t.providerId===e)?.apiVersion??null}function Pa(){let e=localStorage.getItem(Ki)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Fa(e){if(e.includes(`:`))localStorage.setItem(Ki,e);else{let t=La();localStorage.setItem(Ki,`${t}:${e}`)}}function Ia(){return localStorage.getItem(Ki)||``}function La(){let e=Ia(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=ma();return n.length>0?n[0].providerId:`anthropic`}function Ra(e){let t=Pa();localStorage.setItem(Ki,`${e}:${t}`)}function za(){let e=Pa();localStorage.setItem(Ki,e)}function Ba(){return Aa(La())}function Va(e){let t=La();xa(t,e,ja(t)??void 0)}async function Ha(){await Ca(La())}function Ua(){return ja(La())}function Wa(e){let t=La(),n=ka(t);n&&xa(t,n,e||void 0)}function Ga(){let e=La(),t=ka(e);t&&xa(e,t)}function Ka(){let e=ma(),t=La(),n=Pa();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}function qa(){let e=JSON.stringify(Ka(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}async function Ja(){let e=ma();await Promise.allSettled(e.map(e=>Ca(e.providerId))),localStorage.removeItem(Gi),localStorage.removeItem(Ki);for(let e of qi)localStorage.removeItem(e)}function Ya(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function Xa(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Ya(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Za(e){if(!e)return Qa();let t=La(),n=ja(t),r=ra(t);try{let i=Bi(r.isOAuth||t===`azure-ai-foundry`?`anthropic`:t===`bedrock-camp`?`amazon-bedrock`:t,e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=aa(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(ca.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=aa(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:Xa(t,e,n)}return Qa()}}function Qa(){let e=La(),t=Pa(),n=ja(e),r=aa(e),i=ra(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=ra(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Bi(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;return t.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){ca.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?Xa(e,o,n):Bi(`anthropic`,`claude-sonnet-4-0`)}}function $a(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function eo(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var to={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]};function no(e){return Di(`button`),new Promise(t=>{let n=localStorage.getItem(Gi)??``,r=document.createElement(`div`);r.className=`dialog-overlay`;let i=document.createElement(`div`);i.className=`dialog`,i.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let a=()=>{e?.startInAddAccount?(r.remove(),t((localStorage.getItem(Gi)??``)!==n)):s()};e?.startInAddAccount?c():ma().length>0?s():e?.autoJoinUrl?l(e.autoJoinUrl):e?.preferTrayJoin?u():c(),r.appendChild(i),document.body.appendChild(r);function s(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Accounts`,i.appendChild(e);let a=ma(),l=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;if(a.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,i.appendChild(e)}else{let e=document.createElement(`div`);e.style.cssText=`margin-bottom: 16px;`;for(let t of a){let n=ra(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a);let u=document.createElement(`div`);u.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,t.loggedOut?(u.textContent=t.userName?`Logged out — was ${t.userName}`:`Logged out`,u.style.color=`var(--s2-content-disabled)`):t.userName?u.textContent=t.userName:t.accessToken?u.textContent=`Logged in`:u.textContent=$a(t.apiKey),t.baseUrl&&(u.textContent+=` • `+t.baseUrl),i.appendChild(u),r.appendChild(i);let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`;let f=document.createElement(`button`);if(f.style.cssText=l,f.setAttribute(`aria-label`,`Edit account`),f.appendChild(eo(to.pen)),f.addEventListener(`mouseenter`,()=>{f.style.color=`var(--s2-accent)`,f.style.borderColor=`var(--s2-accent)`}),f.addEventListener(`mouseleave`,()=>{f.style.color=`var(--s2-content-secondary)`,f.style.borderColor=`var(--s2-border-subtle)`}),f.addEventListener(`click`,()=>{c(t)}),d.appendChild(f),n.isOAuth){let e=t.loggedOut===!0,r=document.createElement(`button`);r.style.cssText=l,e?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(eo(to.login)),r.addEventListener(`mouseenter`,()=>{r.style.color=`var(--s2-accent)`,r.style.borderColor=`var(--s2-accent)`}),r.addEventListener(`mouseleave`,()=>{r.style.color=`var(--s2-content-secondary)`,r.style.borderColor=`var(--s2-border-subtle)`}),r.addEventListener(`click`,async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await o(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-BbkAikCT.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([16,1])),r={forceReauth:!0};if(n.onOAuthLoginIntercepted){let e=await t();e&&await n.onOAuthLoginIntercepted(e,s,r)}else if(n.onOAuthLogin){let t=e();await n.onOAuthLogin(t,s,r)}})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(eo(to.logout)),r.addEventListener(`mouseenter`,()=>{r.style.color=`var(--s2-warning, #f59e0b)`,r.style.borderColor=`var(--s2-warning, #f59e0b)`}),r.addEventListener(`mouseleave`,()=>{r.style.color=`var(--s2-content-secondary)`,r.style.borderColor=`var(--s2-border-subtle)`}),r.addEventListener(`click`,async()=>{await wa(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(eo(to.trash)),p.addEventListener(`mouseenter`,()=>{p.style.color=`var(--s2-negative)`,p.style.borderColor=`var(--s2-negative)`}),p.addEventListener(`mouseleave`,()=>{p.style.color=`var(--s2-content-secondary)`,p.style.borderColor=`var(--s2-border-subtle)`}),p.addEventListener(`click`,async()=>{await Ca(t.providerId),s()}),d.appendChild(p),r.appendChild(d),e.appendChild(r)}i.appendChild(e)}let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 8px;`;let f=document.createElement(`button`);f.className=a.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,f.style.flex=`1`,f.textContent=`Add Account`,f.addEventListener(`click`,()=>c()),d.appendChild(f);let p=document.createElement(`button`);p.className=`dialog__btn dialog__btn--secondary`,p.style.flex=`1`,p.textContent=`Export`,p.addEventListener(`click`,()=>qa()),d.appendChild(p),i.appendChild(d);let m=document.createElement(`hr`);m.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(m);let h=document.createElement(`div`);h.className=`dialog__desc`,h.style.cssText=`font-weight: 600; margin-bottom: 8px;`,h.textContent=`Tray`,i.appendChild(h);let g=vr(),_=g.state!==`inactive`,v=Ln(window.localStorage);if(_||v){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${_?g.state:`configured`}`,g.error&&(e.textContent+=` — ${g.error}`,e.style.color=`var(--slicc-cone)`),i.appendChild(e)}let y=document.createElement(`button`);y.className=`dialog__btn dialog__btn--secondary`,y.textContent=_||v?`Reconnect to other browser`:`Connect to another browser`,y.addEventListener(`click`,()=>u()),i.appendChild(y);let b=document.createElement(`hr`);b.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(b);let x=document.createElement(`button`);x.className=`dialog__btn`,x.textContent=`Get Started`,x.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Gi)??``)!==n)}),i.appendChild(x)}function c(c){i.innerHTML=``;let l=!!c,d=document.createElement(`div`);d.className=`dialog__title`,d.textContent=l?`Edit Account`:`Add Account`,i.appendChild(d);let f=document.createElement(`div`);f.className=`dialog__desc`,f.textContent=`Provider:`,i.appendChild(f);let p=document.createElement(`select`);if(p.className=`dialog__input`,p.style.marginBottom=`8px`,l){let e=ra(c.providerId),t=document.createElement(`option`);t.value=c.providerId,t.textContent=e.name,p.appendChild(t),p.disabled=!0,p.style.opacity=`0.7`}else{let t=document.createElement(`option`);t.value=``,t.textContent=`Select a provider…`,t.disabled=!0,t.selected=!0,t.hidden=!0,p.appendChild(t);let n=ta(),r=new Set(ma().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=ra(e).name,r=ra(t).name;return n.localeCompare(r)});for(let t of i){if(r.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!na(t))continue;let n=ra(t),i=document.createElement(`option`);i.value=t,i.textContent=n.name,p.appendChild(i)}}i.appendChild(p);let m=document.createElement(`div`);m.className=`dialog__desc`,m.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`,i.appendChild(m);let h=document.createElement(`div`);h.style.cssText=`margin-bottom: 16px; display: none;`;let _=document.createElement(`button`);_.className=`dialog__btn`,_.textContent=`Login`,_.style.cssText=`width: 100%; margin-bottom: 8px;`,h.appendChild(_);let v=document.createElement(`div`);v.className=`dialog__desc`,v.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,h.appendChild(v);let y=()=>{let e=h,t=v,n=_;return r=>new Promise(i=>{let a=n.style.display,o=t.style.display;n.style.display=`none`,t.style.display=`none`;let s=document.createElement(`div`);s.setAttribute(`data-slicc-device-code-prompt`,``),s.style.cssText=`display:flex;flex-direction:column;gap:8px`;let c=document.createElement(`div`);c.className=`dialog__desc`,c.textContent=`Verification code`,c.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let l=document.createElement(`div`);l.textContent=r.userCode,l.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let u=document.createElement(`div`);u.className=`dialog__desc`,u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,u.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let d=document.createElement(`div`);d.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let f=document.createElement(`button`);f.type=`button`,f.className=`dialog__btn`,f.textContent=`Cancel`;let p=document.createElement(`button`);p.type=`button`,p.className=`dialog__btn dialog__btn--primary`,p.textContent=`Copy & Continue`;let m=()=>{try{s.remove()}catch{}n.style.display=a,t.style.display=o};f.addEventListener(`click`,()=>{m(),i(`cancel`)}),p.addEventListener(`click`,()=>{(async()=>{try{await g(r.userCode)}catch{}m(),t.style.display=o,t.textContent=`Waiting for you to authorize in the new tab…`,i(`continue`)})()}),d.appendChild(f),d.appendChild(p),s.appendChild(c),s.appendChild(l),s.appendChild(u),s.appendChild(d),e.appendChild(s)})};_.addEventListener(`click`,async()=>{let e=p.value;if(!e)return;let t=ra(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=ma().some(t=>t.providerId===e),r=ja(e);if(t.requiresBaseUrl&&!w.value.trim()&&!r){v.textContent=`Base URL is required.`,v.style.color=`var(--slicc-cone)`,w.focus();return}t.requiresBaseUrl&&w.value.trim()&&xa(e,``,w.value.trim()),v.textContent=`Opening login window...`;try{if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-BbkAikCT.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([16,1])),n=await e();if(!n)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await t.onOAuthLoginIntercepted(n,a,{presentDeviceCode:y()})}else if(t.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BbkAikCT.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await Ca(e)}catch{}ca.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),v.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),l&&c.userName&&(v.textContent=`Logged in as ${c.userName}`,_.textContent=`Re-login`),i.appendChild(h);let b=document.createElement(`div`),x=document.createElement(`div`);x.className=`dialog__desc`,b.appendChild(x);let S=document.createElement(`input`);S.className=`dialog__input`,S.type=`password`,S.autocomplete=`off`,S.spellcheck=!1,l&&(S.value=c.apiKey),b.appendChild(S),i.appendChild(b);let ee=document.createElement(`div`),C=document.createElement(`div`);C.className=`dialog__desc`,C.textContent=`Base URL:`,ee.appendChild(C);let w=document.createElement(`input`);w.className=`dialog__input`,w.type=`text`,w.autocomplete=`off`,w.spellcheck=!1,l&&c.baseUrl&&(w.value=c.baseUrl),ee.appendChild(w);let te=document.createElement(`div`);te.className=`dialog__desc`,te.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,ee.appendChild(te),i.appendChild(ee);let T=document.createElement(`div`);T.style.display=`none`;let ne=document.createElement(`div`);ne.className=`dialog__desc`,ne.textContent=`Deployment:`,T.appendChild(ne);let re=document.createElement(`input`);re.className=`dialog__input`,re.type=`text`,re.autocomplete=`off`,re.spellcheck=!1,l&&c.deployment&&(re.value=c.deployment),T.appendChild(re);let E=document.createElement(`div`);E.className=`dialog__desc`,E.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,T.appendChild(E),i.appendChild(T);let ie=document.createElement(`div`);ie.style.display=`none`;let ae=document.createElement(`div`);ae.className=`dialog__desc`,ae.textContent=`API Version:`,ie.appendChild(ae);let D=document.createElement(`input`);D.className=`dialog__input`,D.type=`text`,D.autocomplete=`off`,D.spellcheck=!1,l&&c.apiVersion&&(D.value=c.apiVersion),ie.appendChild(D);let oe=document.createElement(`div`);oe.className=`dialog__desc`,oe.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,ie.appendChild(oe),i.appendChild(ie);let O=document.createElement(`div`);O.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(O);let se=document.createElement(`button`);se.className=`dialog__btn`,se.textContent=l?`Save`:`Add`;function k(){let e=p.value;if(!e){m.textContent=``,h.style.display=`none`,b.style.display=`none`,ee.style.display=`none`,T.style.display=`none`,ie.style.display=`none`,se.style.display=`none`;return}let t=ra(e);if(m.textContent=t.description,t.isOAuth)h.style.display=``,b.style.display=`none`,ee.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(w.placeholder=t.baseUrlPlaceholder||`https://...`,te.textContent=t.baseUrlDescription||``),_.textContent=`Login with ${t.name}`,se.style.display=`none`;else{h.style.display=`none`,x.textContent=`${t.requiresApiKey?`API Key`:`API Key (optional)`}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,S.placeholder=t.apiKeyPlaceholder||`API key`;let e=t.requiresApiKey||t.optionalApiKey;b.style.display=e?``:`none`,w.placeholder=t.baseUrlPlaceholder||`https://...`,te.textContent=t.baseUrlDescription||``,ee.style.display=t.requiresBaseUrl?``:`none`,se.style.display=``}t.requiresDeployment?(T.style.display=``,re.placeholder=t.deploymentPlaceholder||`deployment-name`,E.textContent=t.deploymentDescription||``):T.style.display=`none`,t.requiresApiVersion?(ie.style.display=``,!D.value&&t.apiVersionDefault&&(D.value=t.apiVersionDefault),D.placeholder=t.apiVersionDefault||`api-version`,oe.textContent=t.apiVersionDescription||``):ie.style.display=`none`}p.addEventListener(`change`,()=>{O.style.display=`none`,k()}),k();function ce(){let e=p.value;if(!e)return;let t=ra(e);if(t.requiresApiKey&&S.value.trim().length<5){O.textContent=`API key is required (at least 5 characters).`,O.style.display=``,S.focus();return}if(t.requiresBaseUrl&&!w.value.trim()){O.textContent=`Base URL is required for this provider.`,O.style.display=``,w.focus();return}if(t.requiresDeployment&&!re.value.trim()){O.textContent=`Deployment name is required for this provider.`,O.style.display=``,re.focus();return}xa(e,S.value.trim(),w.value.trim()||void 0,re.value.trim()||void 0,D.value.trim()||void 0),a()}se.addEventListener(`click`,ce);let A=e=>{e.key===`Enter`&&ce()};S.addEventListener(`keydown`,A),w.addEventListener(`keydown`,A),re.addEventListener(`keydown`,A),D.addEventListener(`keydown`,A),i.appendChild(se);let le=ma().length>0;if(e?.startInAddAccount){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Cancel`,e.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Gi)??``)!==n)}),i.appendChild(e)}else if(!l&&!le){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Connect to another browser`,e.addEventListener(`click`,()=>{u()}),i.appendChild(e)}else if(le){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Back`,e.addEventListener(`click`,()=>{s()}),i.appendChild(e)}requestAnimationFrame(()=>{let e=p.value;if(!e)return;let t=ra(e);t.requiresApiKey?S.focus():t.requiresBaseUrl&&w.focus()})}function l(e){i.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect this browser?`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.marginBottom=`12px`,a.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,o.textContent=e.length>80?e.slice(0,40)+`…`+e.slice(-37):e,i.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,i.appendChild(s);let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let n=In(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(Hi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else Wi(n.joinUrl,s);s.textContent=`Connecting…`,s.style.display=``,s.style.color=`var(--s2-content-secondary)`;let i=setTimeout(()=>{r.remove(),t(!1)},800);s.dataset.dismissTimer=String(i)}),i.appendChild(l);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Set up an account instead`,u.addEventListener(`click`,()=>{c()}),i.appendChild(u)}function u(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Connect to another browser`,i.appendChild(e);let n=document.createElement(`div`);n.className=`dialog__desc`,n.style.marginBottom=`12px`,n.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,i.appendChild(n);let a=document.createElement(`details`);a.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let o=document.createElement(`summary`);o.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,o.textContent=`How do I get the sync URL?`,a.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let l=document.createElement(`ol`);l.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,l.appendChild(t)}s.appendChild(l),a.appendChild(s),i.appendChild(a);let u=document.createElement(`div`);u.className=`dialog__desc`,u.textContent=`Sync URL:`,i.appendChild(u);let d=document.createElement(`input`);d.className=`dialog__input`,d.type=`text`,d.autocomplete=`off`,d.spellcheck=!1,d.placeholder=`https://www.sliccy.ai/join/<token>`,i.appendChild(d);let f=document.createElement(`div`);f.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(f);let p=document.createElement(`div`);p.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let m=document.createElement(`button`);m.className=`dialog__btn`,m.textContent=`Connect`,m.addEventListener(`click`,()=>{let e=d.value.trim();if(!e){f.textContent=`Paste a sync URL to continue.`,f.style.display=``,d.focus();return}let n=In(window.localStorage,e);if(!n){f.textContent=vi(e),f.style.display=``,d.focus();return}if(Hi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else Wi(n.joinUrl,p);p.textContent=`Connecting…`,p.style.display=``,p.style.color=`var(--s2-content-secondary)`;let i=setTimeout(()=>{r.remove(),t(!1)},800);p.dataset.dismissTimer=String(i)}),i.appendChild(m),i.appendChild(p);let h=document.createElement(`button`);h.className=`dialog__btn dialog__btn--secondary`,h.style.marginTop=`8px`,h.textContent=`Back`,h.addEventListener(`click`,()=>{c()}),i.appendChild(h),d.addEventListener(`input`,()=>{f.style.display=`none`}),d.addEventListener(`keydown`,e=>{e.key===`Enter`&&m.click()}),requestAnimationFrame(()=>d.focus())}})}var ro=d(`cone-memory-budget`),io=4e3,ao=2e3,oo=1.25,so=`/workspace/CLAUDE.md`,co=`/sessions/index.json`,lo=4096,uo=/^## Auto-extracted/m,fo=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
|
|
72
|
+
`,i.head.appendChild(o),r.addEventListener(`message`,e=>{e.source===r.parent&&rr(e.data)&&t.setActiveTab(tr(`http://localhost/?tab=${e.data.tab??``}`))}),r.addEventListener(`keydown`,e=>{e.code===`Semicolon`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat&&(e.preventDefault(),e.stopPropagation(),r.parent.postMessage({type:`slicc-electron-overlay:toggle`},`*`))},!0)}var ar=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`scoop-notify`,`scoop-idle`,`scoop-wait`]);function or(e){return e!=null&&ar.has(e)}var sr=`__slicc_binary__`,cr=`b64`;function lr(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[sr]===cr&&typeof t.data==`string`}function ur(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function dr(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 fr(e){if(e instanceof Uint8Array)return{[sr]:cr,data:ur(e)};if(Array.isArray(e))return e.map(fr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=fr(r);return t}return e}function pr(e){if(lr(e))return dr(e.data);if(Array.isArray(e))return e.map(pr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=pr(r);return t}return e}var mr=d(`panel-transport`);function hr(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function gr(){return{onMessage:e=>{let t=(t,n,r)=>(hr(t)&&e(pr(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=fr(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{mr.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}var _r={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function vr(){return{..._r}}var yr=new Set;function br(){if(yr.size!==0)for(let e of[...yr])try{e({..._r})}catch{}}function xr(e){_r={...e},br()}function Sr(e){_r={..._r,lastPingTime:e},br()}function Cr(e){return e.headers.get(`x-proxy-error`)===`1`}async function wr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Tr(n,t)}function Tr(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}var Er=`slicc-groups`,Dr=3,Or={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},kr=null;async function Ar(){if(kr){let e=Object.values(Or).every(e=>kr.objectStoreNames.contains(e));if(kr.version===Dr&&e)return kr;kr.close(),kr=null}return new Promise((e,t)=>{let n=indexedDB.open(Er,Dr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(Or.MESSAGES)){let e=t.createObjectStore(Or.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(Or.SESSIONS)||t.createObjectStore(Or.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(Or.TASKS)||t.createObjectStore(Or.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(Or.STATE)||t.createObjectStore(Or.STATE,{keyPath:`key`})}if(n<2){let n=e.target.transaction;if(t.objectStoreNames.contains(`groups`)){let e=n.objectStore(`groups`).getAll();e.onsuccess=()=>{let n=e.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(Or.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let e of n){let t=e.isMain??!1,n={jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0};r.put(n)}}}else t.objectStoreNames.contains(Or.SCOOPS)||t.createObjectStore(Or.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(Or.WEBHOOKS)||t.createObjectStore(Or.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(Or.CRONTASKS)||t.createObjectStore(Or.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{kr=n.result,e(kr)},n.onerror=()=>t(n.error)})}async function jr(e,t=`readonly`){return(await Ar()).transaction(e,t).objectStore(e)}async function Mr(){let e=await jr(Or.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Nr(e){let t=await jr(Or.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Pr(e,t){let n=await jr(Or.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var Fr=d(`tray-leader`),Ir=`leader-tray-session`,Lr=3e4,Rr=1e4,zr=1e3,Br=3e4,Vr=2,Hr=20,Ur={state:`inactive`,session:null,error:null};function Wr(){return{...Ur,session:Ur.session?{...Ur.session}:null}}var Gr=new Set;function Kr(e){return Gr.add(e),()=>{Gr.delete(e)}}function qr(e){if(Ur={...e,session:e.session?{...e.session}:null},Gr.size!==0)for(let e of[...Gr])try{e(Wr())}catch{}}var Jr=class{key;constructor(e=Ir){this.key=e}async load(){return Yr(await Nr(this.key))}async save(e){await Pr(this.key,JSON.stringify(e))}async clear(){await Pr(this.key,``)}};function Yr(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var Xr=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new Jr,this.fetchImpl=e.fetchImpl??ei(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Lr,this.connectTimeoutMs=e.connectTimeoutMs??Rr;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??zr,this.reconnectMaxDelayMs=n.maxDelayMs??Br,this.reconnectBackoffMultiplier=n.backoffMultiplier??Vr,this.reconnectMaxAttempts=n.maxAttempts??Hr,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return qr({state:`leader`,session:this.currentSession,error:null}),this.currentSession;qr({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();Fr.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Fr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw qr({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,qr({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),qr({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){Fr.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,qr({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;Fr.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,qr({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),Fr.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,Fr.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Fr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Fr.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,qr({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),Fr.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!Qr(t))throw t;return Fr.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear(),this.claimLeaderSession(null)}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(Nn(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=$r(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Fr.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{Fr.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await Zr.fromResponse(n);return await n.json()}},Zr=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}};function Qr(e){return e instanceof Zr&&[403,404,410].includes(e.status)}function $r(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function ei(e=fetch){return typeof chrome<`u`&&chrome?.runtime?.id?(t,n)=>e(t,n):async(t,n={})=>{let r=typeof t==`string`?t:t.toString();try{if(new URL(r).origin===window.location.origin)return e(r,{...n,cache:`no-store`})}catch{}let i=new Headers(n.headers);i.set(`X-Target-URL`,r);let a=await e(`/api/fetch-proxy`,{...n,headers:i,cache:`no-store`});if(Cr(a))throw Error(await wr(a));return a}}var ti=d(`offscreen-client`),ni=class{eventListeners=new Set;callbacks;scoops=[];scoopStatuses=new Map;currentMessageId=new Map;ready=!1;stateRetryTimer=null;localFs=null;pendingClearAcks=new Map;pendingTranscriptRequests=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){ti.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??gr(),this.setupMessageListener()}setLocalFS(e){this.localFs=e}getTransport(){return this.transport}createAgentHandle(){return{sendMessage:(e,t,n)=>{if(!this.selectedScoopJid){this.emitToUI({type:`error`,error:`No scoop selected`});return}this.send({type:`user-message`,scoopJid:this.selectedScoopJid,text:e,attachments:n,messageId:t??`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`})},onEvent:e=>(this.eventListeners.add(e),()=>this.eventListeners.delete(e)),stop:()=>{this.selectedScoopJid&&this.send({type:`abort`,scoopJid:this.selectedScoopJid})}}}getScoops(){return this.scoops}getScoop(e){return this.scoops.find(t=>t.jid===e)}isProcessing(e){return this.scoopStatuses.get(e)===`processing`}async registerScoop(e){if(!e.isCone)throw Error(`OffscreenClient.registerScoop is cone-only; use scoop_scoop for non-cone scoops`);this.scoops.find(t=>t.name===e.name)||(this.scoops.push(e),this.scoopStatuses.set(e.jid,`initializing`)),this.send({type:`cone-create`,name:e.name})}async unregisterScoop(e){this.send({type:`scoop-drop`,scoopJid:e}),this.scoops=this.scoops.filter(t=>t.jid!==e),this.scoopStatuses.delete(e)}createScoopTab(e){}async getGlobalMemory(){if(!this.localFs)return``;try{let e=await this.localFs.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder().decode(e)}catch{return``}}getScoopContext(e){if(this.localFs)return{getFS:()=>this.localFs}}getSharedFS(){return this.localFs}stopScoop(e){this.send({type:`abort`,scoopJid:e})}async clearQueuedMessages(e){}async deleteQueuedMessage(e,t){}updateModel(){this.send({type:`refresh-model`})}setLocked(e){this.locked=e}setScoopThinkingLevel(e,t){this.send({type:`set-thinking-level`,scoopJid:e,level:t})}async clearAllMessages(){let e=`clear-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,t=new Promise(t=>{this.pendingClearAcks.set(e,t)});this.send({type:`clear-chat`,requestId:e}),await Promise.race([t,new Promise(e=>setTimeout(e,5e3))]),this.pendingClearAcks.delete(e)}clearFilesystem(){this.send({type:`clear-filesystem`})}requestScoopMessages(e){this.send({type:`request-scoop-messages`,scoopJid:e})}async getScoopTranscript(e){let t=`tr-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n=new Promise(e=>{this.pendingTranscriptRequests.set(t,e)});this.send({type:`request-scoop-transcript`,requestId:t,scoopJid:e});let r=await Promise.race([n,new Promise(e=>setTimeout(()=>e(``),5e3))]);return this.pendingTranscriptRequests.delete(t),r}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}ti.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})}sendWebhookEvent(e,t,n){this.send({type:`lick-webhook-event`,webhookId:e,headers:t,body:n})}sendSetFollowerForwarding(e){this.send({type:`set-follower-forwarding`,enabled:e})}sendForwardedLick(e){this.send({type:`inject-forwarded-lick`,event:e})}setForwardLickHandler(e){this.forwardLickHandler=e}sendCherryHostEvent(e,t,n){this.send({type:`lick-cherry-host-event`,cherryRuntimeId:e,name:t,detail:n})}setSprinkleOpHandler(e){this.sprinkleOpHandler=e}sendRaw(e){this.send(e)}setupMessageListener(){this.transport.onMessage(e=>{if(e.source!==`offscreen`)return;let t=e.payload;t?.type===`sprinkle-op`&&this.sprinkleOpHandler?this.sprinkleOpHandler(t):this.handleOffscreenMessage(e.payload)})}handleOffscreenMessage(e){switch(e.type){case`offscreen-ready`:this.ready?(ti.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):ti.info(`Offscreen engine ready`),this.send({type:`request-state`});break;case`agent-event`:this.handleAgentEvent(e);break;case`scoop-status`:this.handleScoopStatus(e);break;case`compaction-state`:this.callbacks.onCompactionStateChange?.(e.scoopJid,e.state);break;case`clear-chat-ack`:{let t=this.pendingClearAcks.get(e.requestId);t&&(this.pendingClearAcks.delete(e.requestId),t());break}case`scoop-created`:this.handleScoopCreated(e);break;case`scoop-list`:this.handleScoopList(e);break;case`state-snapshot`:this.handleStateSnapshot(e);break;case`error`:this.handleError(e);break;case`incoming-message`:this.handleIncomingMessage(e);break;case`scoop-messages-replaced`:{let t=e;this.callbacks.onScoopMessagesReplaced?.(t.scoopJid,t.messages);break}case`scoop-transcript`:{let t=e,n=this.pendingTranscriptRequests.get(t.requestId);n&&(this.pendingTranscriptRequests.delete(t.requestId),n(t.transcript));break}case`tray-runtime-status`:{let t=e;ii(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){ti.error(`terminal event listener error`,{error:e instanceof Error?e.message:String(e)})}break}}terminalEventListeners=new Set;onTerminalEvent(e){return this.terminalEventListeners.add(e),()=>this.terminalEventListeners.delete(e)}handleAgentEvent(e){if(e.scoopJid===this.selectedScoopJid)switch(e.eventType){case`text_delta`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${ri()}`,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}-${ri()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_result`,messageId:t,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=this.currentMessageId.get(e.scoopJid);t||(t=`scoop-${e.scoopJid}-${ri()}`,this.currentMessageId.set(e.scoopJid,t),this.emitToUI({type:`message_start`,messageId:t})),this.emitToUI({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&this.emitToUI({type:`tool_ui_done`,messageId:t,requestId:e.requestId??``});break}case`response_done`:{let t=this.currentMessageId.get(e.scoopJid);t&&(this.emitToUI({type:`content_done`,messageId:t}),this.currentMessageId.delete(e.scoopJid));break}case`turn_end`:{let t=this.currentMessageId.get(e.scoopJid)??`done-${e.scoopJid}-${ri()}`;this.currentMessageId.delete(e.scoopJid),this.emitToUI({type:`turn_end`,messageId:t});break}}}handleScoopStatus(e){this.scoopStatuses.set(e.scoopJid,e.status),this.callbacks.onStatusChange(e.scoopJid,e.status)}handleScoopCreated(e){let t=this.msgScoopToRegistered(e.scoop);this.scoops=this.scoops.filter(e=>e.name!==t.name||e.jid===t.jid),this.scoops.find(e=>e.jid===t.jid)||this.scoops.push(t),this.scoopStatuses.set(t.jid,e.scoop.status),this.callbacks.onScoopCreated(t)}handleScoopList(e){this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);this.callbacks.onScoopListUpdate(e.scoops)}handleStateSnapshot(e){ti.info(`Received state snapshot`,{scoopCount:e.scoops.length}),this.scoops=e.scoops.map(e=>this.msgScoopToRegistered(e));for(let t of e.scoops)this.scoopStatuses.set(t.jid,t.status);e.trayRuntimeStatus&&ii(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)}msgScoopToRegistered(e){return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,type:e.isCone?`cone`:`scoop`,requiresTrigger:!e.isCone,assistantLabel:e.assistantLabel,addedAt:new Date().toISOString(),...e.config?{config:{...e.config}}:{}}}emitToUI(e){for(let t of this.eventListeners)try{t(e)}catch(e){ti.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 ri(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function ii(e,t){qr({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),xr({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 ai(e){let{layout:t,log:n,getSelectedScoop:r,setSelectedScoop:i,syncThinkingButtonForScoop:a}=e,o=new Set,s,c=async e=>{i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid),t.setScoopSwitcherSelected?.(e.jid),t.panels.scoops.setSelectedJid(e.jid);let n=e.isCone?`session-cone`:`session-${e.folder}`,r=e.isCone?void 0:e.name;await t.panels.chat.switchToContext(n,!e.isCone,r),s.requestScoopMessages(e.jid),s.isProcessing(e.jid)&&t.panels.chat.setProcessing(!0),a(e)};return s=new ni({onStatusChange:(e,n)=>oi(e,n,t,r),onScoopCreated:e=>{t.panels.scoops.refreshScoops(),t.refreshScoopSwitcher?.(),r()||(i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid))},onScoopListUpdate:()=>{let e=new Set(s.getScoops().map(e=>e.folder));for(let n of o)e.has(n)||t.panels.chat.deleteSessionById(`session-${n}`);if(o=e,t.panels.scoops.refreshScoops(),t.refreshScoopSwitcher?.(),!r()){let e=s.getScoops().find(e=>e.isCone);e&&(i(e),s.setSelectedScoopJid(e.jid),t.panels.memory.setSelectedScoop(e.jid))}},onIncomingMessage:(e,n)=>si(e,n,s,t,r),onScoopMessagesReplaced:(e,n)=>{r()?.jid===e&&t.panels.chat.loadMessages(n)},onCompactionStateChange:(e,n)=>{r()?.jid===e&&t.panels.chat.setCompactionState(n)},onReady:async()=>{try{n.info(`Offscreen engine ready, scoop count:`,s.getScoops().length),await ci();let e=r()??s.getScoops().find(e=>e.isCone)??s.getScoops()[0];e&&(i(e),s.setSelectedScoopJid(e.jid),await c(e))}catch(e){n.error(`Failed to initialize on ready`,{error:e instanceof Error?e.message:String(e)})}}}),{client:s,selectScoop:c}}function oi(e,t,n,r){n.panels.scoops.updateScoopStatus(e,t),n.updateScoopSwitcherStatus?.(e,t),r()?.jid===e&&(n.setAgentProcessing(t===`processing`),t===`processing`?n.panels.chat.setProcessing(!0):t===`ready`&&n.panels.chat.setProcessing(!1))}function si(e,t,n,r,i){if(or(t.channel)){let a=new Date(t.timestamp).getTime(),o=t.channel;if(i()?.jid===e)r.panels.chat.addLickMessage(t.id,t.content,o,a);else{let i=n.getScoops().find(t=>t.jid===e),s=i?.isCone?`session-cone`:i?`session-${i.folder}`:`session-${e}`;r.panels.chat.persistLickToSession(s,{id:t.id,content:t.content,channel:o,timestamp:a})}return}if(i()?.jid===e){let e=t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content;r.panels.chat.addUserMessage(e,t.attachments)}}async function ci(){let e=window.localStorage.getItem(An);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(kn)}}).catch(()=>{})}function li(e,t){try{window.close()}catch{}e.setLocked(!0),t.showDetachedActiveOverlay()}function ui(e){let{client:t,layout:n,isDetachedSelf:r}=e;if(chrome.runtime.onMessage.addListener(e=>(!qn(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||r||li(t,n),!1)),r){chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>{});return}n.setShowPopoutButton(!0),n.setPopoutClickHandler(()=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e),n.resetPopoutButton()})})}var di=`slicc:adobe-daily-uuid:`,fi=new Map;function pi(){return new Date().toISOString().slice(0,10)}function mi(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function hi(e){let t=pi(),n=mi(),r=di+e;if(n){let e=null;try{e=n.getItem(r)}catch{e=null}if(e)try{let n=JSON.parse(e);if(n.date===t&&typeof n.uuid==`string`)return n.uuid}catch{}let i=crypto.randomUUID();try{n.setItem(r,JSON.stringify({uuid:i,date:t}))}catch{}return i}let i=fi.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return fi.set(e,{uuid:a,date:t}),a}function gi(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??_i(t.state)??`Mirroring another browser.`}}function _i(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function vi(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var yi=null,bi=!1;function xi(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Si(){if(!bi&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=xi();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(yi=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{Ei(`js`,Oi(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;Ei(`js`,Oi(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),yi=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),bi=!0,yi&&yi(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function Ci(e,t){yi?.(`formsubmit`,{source:e,target:t})}function wi(e){yi?.(`viewblock`,{source:e})}function Ti(e){yi?.(`viewmedia`,{source:e})}function Ei(e,t){yi?.(`error`,{source:e,target:t})}function Di(e){yi?.(`signup`,{source:e})}function Oi(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var ki=`slicc_oauth_extra_domains`;function Ai(e){try{let t=e.getItem(ki);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){if(typeof e!=`string`||!Array.isArray(t))continue;let n=t.filter(e=>typeof e==`string`&&e.length>0);n.length>0&&(r[e]=n)}return r}catch{return{}}}function ji(e,t){try{e.setItem(ki,JSON.stringify(t))}catch(e){throw Error(`Failed to persist OAuth extras (localStorage quota exceeded?): ${e instanceof Error?e.message:String(e)}`)}}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);var Mi=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>Fi,getPanelRpcClient:()=>Li,hasLocalDom:()=>Ri,installPanelRpcHandler:()=>Ii,panelRpcChannelName:()=>Pi}),Ni=`slicc-panel-rpc`;function Pi(e){return e?`${Ni}:${e}`:Ni}function Fi(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Pi(e.instanceId));return{emit(e,n){let r={type:`panel-rpc-event`,channel:e,payload:n};try{t.postMessage(r)}catch(t){console.warn(`panel-rpc: failed to emit event '${e}':`,t instanceof Error?t.message:String(t))}},dispose(){try{t.close()}catch{}}}}function Ii(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Pi(e.instanceId)),n=(e,n,r)=>{let i={type:`panel-rpc-response`,id:e};r===void 0?i.result=n:i.error=r;try{t.postMessage(i)}catch(t){let n=t instanceof Error?t.message:String(t);console.warn(`panel-rpc: failed to post response for id=${e}: ${n}`)}},r=async t=>{let r=t.data;if(r?.type!==`panel-rpc-request`)return;let i=e.handlers[r.op];if(!i){n(r.id,void 0,`panel-rpc: no handler for op '${r.op}'`);return}try{let e=await i(r.payload);n(r.id,e)}catch(e){n(r.id,void 0,e instanceof Error?e.message:String(e))}};return t.addEventListener(`message`,r),()=>{t.removeEventListener(`message`,r);try{t.close()}catch{}}}function Li(){return globalThis.__slicc_panelRpc??null}function Ri(){return typeof window<`u`&&typeof document<`u`}var zi=e({__test__:()=>ea,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Ui,addAccount:()=>xa,applyProviderDefaults:()=>la,clearAllSettings:()=>Ja,clearApiKey:()=>Ha,clearBaseUrl:()=>Ga,clearSelectedProvider:()=>za,describeInvalidJoinUrl:()=>vi,downloadProviders:()=>qa,exportProviders:()=>Ka,getAccounts:()=>ma,getAllAvailableModels:()=>pa,getAllExtraOAuthDomains:()=>va,getApiKey:()=>Ba,getApiKeyForProvider:()=>Aa,getApiVersionForProvider:()=>Na,getAvailableProviders:()=>ta,getBaseUrl:()=>Ua,getBaseUrlForProvider:()=>ja,getDeploymentForProvider:()=>Ma,getExtraOAuthDomains:()=>ha,getOAuthAccountInfo:()=>oa,getProviderConfig:()=>ra,getProviderModels:()=>aa,getRawApiKeyForProvider:()=>ka,getSelectedModelId:()=>Pa,getSelectedProvider:()=>La,isModelHiddenFromPicker:()=>da,logoutOAuthAccount:()=>wa,maskOAuthTokenWithRetry:()=>Ta,migrateLegacyAuthOnlySelection:()=>Qi,persistOAuthMaskViaServiceWorker:()=>Ea,providerOffersLlmModels:()=>na,removeAccount:()=>Ca,resolveCurrentModel:()=>Qa,resolveModelById:()=>Za,saveOAuthAccount:()=>Da,setApiKey:()=>Va,setBaseUrl:()=>Wa,setExtraOAuthDomains:()=>ga,setExtraOAuthDomainsAsync:()=>_a,setSelectedModelId:()=>Fa,setSelectedProvider:()=>Ra,showProviderSettings:()=>no}),Bi=l,Vi=u;function Hi(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function Ui(e,t){return Wi(e,t)}function Wi(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){ca.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}var Gi=`slicc_accounts`,Ki=`selected-model`,qi=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Ji=new Set([`github`]);function Yi(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!pn(e)}var Xi=!1;function Zi(){if(!Xi){Xi=!0;for(let e of qi)try{localStorage.removeItem(e)}catch{}Qi()}}function Qi(){try{let e=localStorage.getItem(Ki);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Ji.has(n)||Yi(n))&&localStorage.removeItem(Ki)}}}catch{}try{let e=localStorage.getItem(Gi);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Yi(e.providerId)));n.length!==t.length&&localStorage.setItem(Gi,JSON.stringify(n))}catch{}}function $i(){Xi=!1}var ea={_resetLegacyCleanup:$i};function ta(){let e=s().filter(pn),t=bn();return[...new Set([...e,...t])].filter(e=>!yn(e)?.hidden)}function na(e){try{if(aa(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=yn(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function ra(e){return yn(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function ia(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function aa(e){try{if(e===`bedrock-camp`){let e=a(ja(`bedrock-camp`));return Vi(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=ra(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return ca.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of s())try{for(let t of Vi(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=Xa(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&ia(o,s),ia(o,n),o})}if(t.isOAuth){let n=Vi(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&ia(i,a),i})}return Vi(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return ca.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function oa(e){let t=ma().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var sa=Object.assign({})[`/packages/webapp/providers.json`]??[],ca=d(`provider-settings`);function la(e=sa){if(e.length===0||ma().length>0)return;let t=new Set(ta());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){ca.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}xa(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Ki)&&localStorage.setItem(Ki,`${n.providerId}:${n.model}`)}var ua=[/haiku/i];function da(e){return ua.some(t=>t.test(e))}function fa(e){return e.filter(e=>!da(e.id))}function pa(){let e=ma();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=ra(n.providerId);if(e.hidden||Yi(n.providerId))continue;let r=fa(aa(n.providerId));if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function ma(){Zi();let e=localStorage.getItem(Gi);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function ha(e){return Ai(localStorage)[e]??[]}function ga(e,t){let n=Ai(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,ji(localStorage,n)}async function _a(e,t){if(Ri()){ga(e,t);return}let n=Li();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:r}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{ji(localStorage,r)}catch(t){ca.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function va(){return Ai(localStorage)}function ya(e){localStorage.setItem(Gi,JSON.stringify(e))}async function ba(e){if(Ri()){ya(e);return}let t=Li();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(Gi,r)}catch(e){ca.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function xa(e,t,n,r,i){let a=ma().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),ya(a)}async function Sa(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(t){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&ca.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&ca.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else{let t=await fetch(`/api/secrets/oauth/${e}`,{method:`DELETE`});!t.ok&&t.status!==404&&ca.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){ca.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Ca(e){let t=ma().find(t=>t.providerId===e),n=ra(e);t&&n?.isOAuth&&await wa(e),await Sa(e),await ba(ma().filter(t=>t.providerId!==e));let r=localStorage.getItem(Ki)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Ki)}async function wa(e){let t=ma().find(t=>t.providerId===e);if(!t)return;let n=ra(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){ca.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(n.getOAuthLogoutUrl){let r=n.getOAuthLogoutUrl(t);if(r){let{openIdpLogoutUrl:t}=await o(async()=>{let{openIdpLogoutUrl:e}=await import(`./oauth-service-BcS-bhoB.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{ca.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await ba(ma().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Sa(e)}}async function Ta(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function Ea(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await Ta(()=>t.sendMaskRequest(r),n);if(!i){ca.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function Da(e){let t=ma().find(t=>t.providerId===e.providerId),n=ma().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await ba(n);let r=ra(e.providerId)?.oauthTokenDomains??[],i=ha(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s)await Ea({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&ca.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&ca.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:ma,saveAccounts:ba});else if(!globalThis.__slicc_connect_mode){let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=ma(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await ba(r))}else ca.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){ca.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var Oa=`local`;function ka(e){let t=ma().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function Aa(e){let t=ma().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(ra(e).optionalApiKey?Oa:null):null}function ja(e){return ma().find(t=>t.providerId===e)?.baseUrl??null}function Ma(e){return ma().find(t=>t.providerId===e)?.deployment??null}function Na(e){return ma().find(t=>t.providerId===e)?.apiVersion??null}function Pa(){let e=localStorage.getItem(Ki)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Fa(e){if(e.includes(`:`))localStorage.setItem(Ki,e);else{let t=La();localStorage.setItem(Ki,`${t}:${e}`)}}function Ia(){return localStorage.getItem(Ki)||``}function La(){let e=Ia(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=ma();return n.length>0?n[0].providerId:`anthropic`}function Ra(e){let t=Pa();localStorage.setItem(Ki,`${e}:${t}`)}function za(){let e=Pa();localStorage.setItem(Ki,e)}function Ba(){return Aa(La())}function Va(e){let t=La();xa(t,e,ja(t)??void 0)}async function Ha(){await Ca(La())}function Ua(){return ja(La())}function Wa(e){let t=La(),n=ka(t);n&&xa(t,n,e||void 0)}function Ga(){let e=La(),t=ka(e);t&&xa(e,t)}function Ka(){let e=ma(),t=La(),n=Pa();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}function qa(){let e=JSON.stringify(Ka(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}async function Ja(){let e=ma();await Promise.allSettled(e.map(e=>Ca(e.providerId))),localStorage.removeItem(Gi),localStorage.removeItem(Ki);for(let e of qi)localStorage.removeItem(e)}function Ya(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function Xa(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Ya(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Za(e){if(!e)return Qa();let t=La(),n=ja(t),r=ra(t);try{let i=Bi(r.isOAuth||t===`azure-ai-foundry`?`anthropic`:t===`bedrock-camp`?`amazon-bedrock`:t,e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=aa(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(ca.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=aa(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:Xa(t,e,n)}return Qa()}}function Qa(){let e=La(),t=Pa(),n=ja(e),r=aa(e),i=ra(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=ra(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Bi(i,o);if(!a?.id)throw Error(`Model ${o} not found in ${i} registry`);let s=a;return t.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){ca.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?Xa(e,o,n):Bi(`anthropic`,`claude-sonnet-4-0`)}}function $a(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function eo(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var to={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]};function no(e){return Di(`button`),new Promise(t=>{let n=localStorage.getItem(Gi)??``,r=document.createElement(`div`);r.className=`dialog-overlay`;let i=document.createElement(`div`);i.className=`dialog`,i.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let a=()=>{e?.startInAddAccount?(r.remove(),t((localStorage.getItem(Gi)??``)!==n)):s()};e?.startInAddAccount?c():ma().length>0?s():e?.autoJoinUrl?l(e.autoJoinUrl):e?.preferTrayJoin?u():c(),r.appendChild(i),document.body.appendChild(r);function s(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Accounts`,i.appendChild(e);let a=ma(),l=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;if(a.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,i.appendChild(e)}else{let e=document.createElement(`div`);e.style.cssText=`margin-bottom: 16px;`;for(let t of a){let n=ra(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a);let u=document.createElement(`div`);u.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,t.loggedOut?(u.textContent=t.userName?`Logged out — was ${t.userName}`:`Logged out`,u.style.color=`var(--s2-content-disabled)`):t.userName?u.textContent=t.userName:t.accessToken?u.textContent=`Logged in`:u.textContent=$a(t.apiKey),t.baseUrl&&(u.textContent+=` • `+t.baseUrl),i.appendChild(u),r.appendChild(i);let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`;let f=document.createElement(`button`);if(f.style.cssText=l,f.setAttribute(`aria-label`,`Edit account`),f.appendChild(eo(to.pen)),f.addEventListener(`mouseenter`,()=>{f.style.color=`var(--s2-accent)`,f.style.borderColor=`var(--s2-accent)`}),f.addEventListener(`mouseleave`,()=>{f.style.color=`var(--s2-content-secondary)`,f.style.borderColor=`var(--s2-border-subtle)`}),f.addEventListener(`click`,()=>{c(t)}),d.appendChild(f),n.isOAuth){let e=t.loggedOut===!0,r=document.createElement(`button`);r.style.cssText=l,e?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(eo(to.login)),r.addEventListener(`mouseenter`,()=>{r.style.color=`var(--s2-accent)`,r.style.borderColor=`var(--s2-accent)`}),r.addEventListener(`mouseleave`,()=>{r.style.color=`var(--s2-content-secondary)`,r.style.borderColor=`var(--s2-border-subtle)`}),r.addEventListener(`click`,async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await o(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-BcS-bhoB.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([16,1])),r={forceReauth:!0};if(n.onOAuthLoginIntercepted){let e=await t();e&&await n.onOAuthLoginIntercepted(e,s,r)}else if(n.onOAuthLogin){let t=e();await n.onOAuthLogin(t,s,r)}})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(eo(to.logout)),r.addEventListener(`mouseenter`,()=>{r.style.color=`var(--s2-warning, #f59e0b)`,r.style.borderColor=`var(--s2-warning, #f59e0b)`}),r.addEventListener(`mouseleave`,()=>{r.style.color=`var(--s2-content-secondary)`,r.style.borderColor=`var(--s2-border-subtle)`}),r.addEventListener(`click`,async()=>{await wa(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(eo(to.trash)),p.addEventListener(`mouseenter`,()=>{p.style.color=`var(--s2-negative)`,p.style.borderColor=`var(--s2-negative)`}),p.addEventListener(`mouseleave`,()=>{p.style.color=`var(--s2-content-secondary)`,p.style.borderColor=`var(--s2-border-subtle)`}),p.addEventListener(`click`,async()=>{await Ca(t.providerId),s()}),d.appendChild(p),r.appendChild(d),e.appendChild(r)}i.appendChild(e)}let d=document.createElement(`div`);d.style.cssText=`display: flex; gap: 8px;`;let f=document.createElement(`button`);f.className=a.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,f.style.flex=`1`,f.textContent=`Add Account`,f.addEventListener(`click`,()=>c()),d.appendChild(f);let p=document.createElement(`button`);p.className=`dialog__btn dialog__btn--secondary`,p.style.flex=`1`,p.textContent=`Export`,p.addEventListener(`click`,()=>qa()),d.appendChild(p),i.appendChild(d);let m=document.createElement(`hr`);m.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(m);let h=document.createElement(`div`);h.className=`dialog__desc`,h.style.cssText=`font-weight: 600; margin-bottom: 8px;`,h.textContent=`Tray`,i.appendChild(h);let g=vr(),_=g.state!==`inactive`,v=Ln(window.localStorage);if(_||v){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${_?g.state:`configured`}`,g.error&&(e.textContent+=` — ${g.error}`,e.style.color=`var(--slicc-cone)`),i.appendChild(e)}let y=document.createElement(`button`);y.className=`dialog__btn dialog__btn--secondary`,y.textContent=_||v?`Reconnect to other browser`:`Connect to another browser`,y.addEventListener(`click`,()=>u()),i.appendChild(y);let b=document.createElement(`hr`);b.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,i.appendChild(b);let x=document.createElement(`button`);x.className=`dialog__btn`,x.textContent=`Get Started`,x.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Gi)??``)!==n)}),i.appendChild(x)}function c(c){i.innerHTML=``;let l=!!c,d=document.createElement(`div`);d.className=`dialog__title`,d.textContent=l?`Edit Account`:`Add Account`,i.appendChild(d);let f=document.createElement(`div`);f.className=`dialog__desc`,f.textContent=`Provider:`,i.appendChild(f);let p=document.createElement(`select`);if(p.className=`dialog__input`,p.style.marginBottom=`8px`,l){let e=ra(c.providerId),t=document.createElement(`option`);t.value=c.providerId,t.textContent=e.name,p.appendChild(t),p.disabled=!0,p.style.opacity=`0.7`}else{let t=document.createElement(`option`);t.value=``,t.textContent=`Select a provider…`,t.disabled=!0,t.selected=!0,t.hidden=!0,p.appendChild(t);let n=ta(),r=new Set(ma().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=ra(e).name,r=ra(t).name;return n.localeCompare(r)});for(let t of i){if(r.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!na(t))continue;let n=ra(t),i=document.createElement(`option`);i.value=t,i.textContent=n.name,p.appendChild(i)}}i.appendChild(p);let m=document.createElement(`div`);m.className=`dialog__desc`,m.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`,i.appendChild(m);let h=document.createElement(`div`);h.style.cssText=`margin-bottom: 16px; display: none;`;let _=document.createElement(`button`);_.className=`dialog__btn`,_.textContent=`Login`,_.style.cssText=`width: 100%; margin-bottom: 8px;`,h.appendChild(_);let v=document.createElement(`div`);v.className=`dialog__desc`,v.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,h.appendChild(v);let y=()=>{let e=h,t=v,n=_;return r=>new Promise(i=>{let a=n.style.display,o=t.style.display;n.style.display=`none`,t.style.display=`none`;let s=document.createElement(`div`);s.setAttribute(`data-slicc-device-code-prompt`,``),s.style.cssText=`display:flex;flex-direction:column;gap:8px`;let c=document.createElement(`div`);c.className=`dialog__desc`,c.textContent=`Verification code`,c.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let l=document.createElement(`div`);l.textContent=r.userCode,l.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let u=document.createElement(`div`);u.className=`dialog__desc`,u.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,u.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let d=document.createElement(`div`);d.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let f=document.createElement(`button`);f.type=`button`,f.className=`dialog__btn`,f.textContent=`Cancel`;let p=document.createElement(`button`);p.type=`button`,p.className=`dialog__btn dialog__btn--primary`,p.textContent=`Copy & Continue`;let m=()=>{try{s.remove()}catch{}n.style.display=a,t.style.display=o};f.addEventListener(`click`,()=>{m(),i(`cancel`)}),p.addEventListener(`click`,()=>{(async()=>{try{await g(r.userCode)}catch{}m(),t.style.display=o,t.textContent=`Waiting for you to authorize in the new tab…`,i(`continue`)})()}),d.appendChild(f),d.appendChild(p),s.appendChild(c),s.appendChild(l),s.appendChild(u),s.appendChild(d),e.appendChild(s)})};_.addEventListener(`click`,async()=>{let e=p.value;if(!e)return;let t=ra(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=ma().some(t=>t.providerId===e),r=ja(e);if(t.requiresBaseUrl&&!w.value.trim()&&!r){v.textContent=`Base URL is required.`,v.style.color=`var(--slicc-cone)`,w.focus();return}t.requiresBaseUrl&&w.value.trim()&&xa(e,``,w.value.trim()),v.textContent=`Opening login window...`;try{if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-BcS-bhoB.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([16,1])),n=await e();if(!n)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await t.onOAuthLoginIntercepted(n,a,{presentDeviceCode:y()})}else if(t.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BcS-bhoB.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await Ca(e)}catch{}ca.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),v.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),l&&c.userName&&(v.textContent=`Logged in as ${c.userName}`,_.textContent=`Re-login`),i.appendChild(h);let b=document.createElement(`div`),x=document.createElement(`div`);x.className=`dialog__desc`,b.appendChild(x);let S=document.createElement(`input`);S.className=`dialog__input`,S.type=`password`,S.autocomplete=`off`,S.spellcheck=!1,l&&(S.value=c.apiKey),b.appendChild(S),i.appendChild(b);let ee=document.createElement(`div`),C=document.createElement(`div`);C.className=`dialog__desc`,C.textContent=`Base URL:`,ee.appendChild(C);let w=document.createElement(`input`);w.className=`dialog__input`,w.type=`text`,w.autocomplete=`off`,w.spellcheck=!1,l&&c.baseUrl&&(w.value=c.baseUrl),ee.appendChild(w);let te=document.createElement(`div`);te.className=`dialog__desc`,te.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,ee.appendChild(te),i.appendChild(ee);let T=document.createElement(`div`);T.style.display=`none`;let ne=document.createElement(`div`);ne.className=`dialog__desc`,ne.textContent=`Deployment:`,T.appendChild(ne);let re=document.createElement(`input`);re.className=`dialog__input`,re.type=`text`,re.autocomplete=`off`,re.spellcheck=!1,l&&c.deployment&&(re.value=c.deployment),T.appendChild(re);let E=document.createElement(`div`);E.className=`dialog__desc`,E.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,T.appendChild(E),i.appendChild(T);let ie=document.createElement(`div`);ie.style.display=`none`;let ae=document.createElement(`div`);ae.className=`dialog__desc`,ae.textContent=`API Version:`,ie.appendChild(ae);let D=document.createElement(`input`);D.className=`dialog__input`,D.type=`text`,D.autocomplete=`off`,D.spellcheck=!1,l&&c.apiVersion&&(D.value=c.apiVersion),ie.appendChild(D);let oe=document.createElement(`div`);oe.className=`dialog__desc`,oe.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,ie.appendChild(oe),i.appendChild(ie);let O=document.createElement(`div`);O.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(O);let se=document.createElement(`button`);se.className=`dialog__btn`,se.textContent=l?`Save`:`Add`;function k(){let e=p.value;if(!e){m.textContent=``,h.style.display=`none`,b.style.display=`none`,ee.style.display=`none`,T.style.display=`none`,ie.style.display=`none`,se.style.display=`none`;return}let t=ra(e);if(m.textContent=t.description,t.isOAuth)h.style.display=``,b.style.display=`none`,ee.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(w.placeholder=t.baseUrlPlaceholder||`https://...`,te.textContent=t.baseUrlDescription||``),_.textContent=`Login with ${t.name}`,se.style.display=`none`;else{h.style.display=`none`,x.textContent=`${t.requiresApiKey?`API Key`:`API Key (optional)`}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,S.placeholder=t.apiKeyPlaceholder||`API key`;let e=t.requiresApiKey||t.optionalApiKey;b.style.display=e?``:`none`,w.placeholder=t.baseUrlPlaceholder||`https://...`,te.textContent=t.baseUrlDescription||``,ee.style.display=t.requiresBaseUrl?``:`none`,se.style.display=``}t.requiresDeployment?(T.style.display=``,re.placeholder=t.deploymentPlaceholder||`deployment-name`,E.textContent=t.deploymentDescription||``):T.style.display=`none`,t.requiresApiVersion?(ie.style.display=``,!D.value&&t.apiVersionDefault&&(D.value=t.apiVersionDefault),D.placeholder=t.apiVersionDefault||`api-version`,oe.textContent=t.apiVersionDescription||``):ie.style.display=`none`}p.addEventListener(`change`,()=>{O.style.display=`none`,k()}),k();function ce(){let e=p.value;if(!e)return;let t=ra(e);if(t.requiresApiKey&&S.value.trim().length<5){O.textContent=`API key is required (at least 5 characters).`,O.style.display=``,S.focus();return}if(t.requiresBaseUrl&&!w.value.trim()){O.textContent=`Base URL is required for this provider.`,O.style.display=``,w.focus();return}if(t.requiresDeployment&&!re.value.trim()){O.textContent=`Deployment name is required for this provider.`,O.style.display=``,re.focus();return}xa(e,S.value.trim(),w.value.trim()||void 0,re.value.trim()||void 0,D.value.trim()||void 0),a()}se.addEventListener(`click`,ce);let A=e=>{e.key===`Enter`&&ce()};S.addEventListener(`keydown`,A),w.addEventListener(`keydown`,A),re.addEventListener(`keydown`,A),D.addEventListener(`keydown`,A),i.appendChild(se);let le=ma().length>0;if(e?.startInAddAccount){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Cancel`,e.addEventListener(`click`,()=>{r.remove(),t((localStorage.getItem(Gi)??``)!==n)}),i.appendChild(e)}else if(!l&&!le){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Connect to another browser`,e.addEventListener(`click`,()=>{u()}),i.appendChild(e)}else if(le){let e=document.createElement(`button`);e.className=`dialog__btn dialog__btn--secondary`,e.style.marginTop=`8px`,e.textContent=`Back`,e.addEventListener(`click`,()=>{s()}),i.appendChild(e)}requestAnimationFrame(()=>{let e=p.value;if(!e)return;let t=ra(e);t.requiresApiKey?S.focus():t.requiresBaseUrl&&w.focus()})}function l(e){i.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect this browser?`,i.appendChild(n);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.marginBottom=`12px`,a.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,o.textContent=e.length>80?e.slice(0,40)+`…`+e.slice(-37):e,i.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,i.appendChild(s);let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let n=In(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(Hi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else Wi(n.joinUrl,s);s.textContent=`Connecting…`,s.style.display=``,s.style.color=`var(--s2-content-secondary)`;let i=setTimeout(()=>{r.remove(),t(!1)},800);s.dataset.dismissTimer=String(i)}),i.appendChild(l);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Set up an account instead`,u.addEventListener(`click`,()=>{c()}),i.appendChild(u)}function u(){i.innerHTML=``;let e=document.createElement(`div`);e.className=`dialog__title`,e.textContent=`Connect to another browser`,i.appendChild(e);let n=document.createElement(`div`);n.className=`dialog__desc`,n.style.marginBottom=`12px`,n.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,i.appendChild(n);let a=document.createElement(`details`);a.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let o=document.createElement(`summary`);o.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,o.textContent=`How do I get the sync URL?`,a.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let l=document.createElement(`ol`);l.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,l.appendChild(t)}s.appendChild(l),a.appendChild(s),i.appendChild(a);let u=document.createElement(`div`);u.className=`dialog__desc`,u.textContent=`Sync URL:`,i.appendChild(u);let d=document.createElement(`input`);d.className=`dialog__input`,d.type=`text`,d.autocomplete=`off`,d.spellcheck=!1,d.placeholder=`https://www.sliccy.ai/join/<token>`,i.appendChild(d);let f=document.createElement(`div`);f.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(f);let p=document.createElement(`div`);p.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let m=document.createElement(`button`);m.className=`dialog__btn`,m.textContent=`Connect`,m.addEventListener(`click`,()=>{let e=d.value.trim();if(!e){f.textContent=`Paste a sync URL to continue.`,f.style.display=``,d.focus();return}let n=In(window.localStorage,e);if(!n){f.textContent=vi(e),f.style.display=``,d.focus();return}if(Hi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else Wi(n.joinUrl,p);p.textContent=`Connecting…`,p.style.display=``,p.style.color=`var(--s2-content-secondary)`;let i=setTimeout(()=>{r.remove(),t(!1)},800);p.dataset.dismissTimer=String(i)}),i.appendChild(m),i.appendChild(p);let h=document.createElement(`button`);h.className=`dialog__btn dialog__btn--secondary`,h.style.marginTop=`8px`,h.textContent=`Back`,h.addEventListener(`click`,()=>{c()}),i.appendChild(h),d.addEventListener(`input`,()=>{f.style.display=`none`}),d.addEventListener(`keydown`,e=>{e.key===`Enter`&&m.click()}),requestAnimationFrame(()=>d.focus())}})}var ro=d(`cone-memory-budget`),io=4e3,ao=2e3,oo=1.25,so=`/workspace/CLAUDE.md`,co=`/sessions/index.json`,lo=4096,uo=/^## Auto-extracted/m,fo=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
|
|
73
73
|
|
|
74
74
|
Rules:
|
|
75
75
|
- Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
|
|
@@ -595,7 +595,7 @@ Example output: Run a Python sanity check`,prompt:`Label these tool calls (input
|
|
|
595
595
|
`,jH=`
|
|
596
596
|
-->`;function MH(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function NH(e){let t=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n---\n\n`,n=`${AH}${JSON.stringify(MH(e.messages)).replace(/-->/g,`-- >`)}${jH}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+yH(e.messages)}function PH(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function FH(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function IH(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function LH(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function RH(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function zH(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch{await RH(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
|
|
597
597
|
`)?``:`
|
|
598
|
-
`}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await _o({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){xH.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function BH(e,t){let n=[];try{let t=await e.readFile(EH,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(EH,JSON.stringify(r,null,2))}async function VH(e){try{let t=await e.readFile(EH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function HH(e){return`${TH}/${e.filename}`}async function UH(e){return(await VH(e)).filter(e=>e.pendingEnrichment===!0)}async function WH(e,t,n){if(!t.pendingEnrichment)return null;let r=HH(t),i=``;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch(e){return e?.code===`ENOENT`?xH.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):xH.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let a;try{a=JH(i).messages}catch(e){return xH.warn(`Failed to parse pending archive — leaving entry intact`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(a.length===0)return xH.info(`Pending archive has no messages — skipping enrichment`,{filename:t.filename}),null;let o=kH(a),s=``;try{s=await Xt({messages:o,instruction:Zt,model:n.model,apiKey:n.apiKey,maxTokens:CH,headers:n.headers})}catch(e){return xH.warn(`Enrichment memory call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let c=``;try{c=PH(await Xt({messages:o,instruction:Qt,model:n.model,apiKey:n.apiKey,maxTokens:wH,headers:n.headers}))}catch(e){return xH.warn(`Enrichment title call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(!c)return xH.info(`Enrichment title call returned empty — entry stays pending`,{filename:t.filename}),null;let l=s.trim();if(l&&l!==`NONE`)try{await zH(e,l,`pending-enrichment`,{model:n.model,apiKey:n.apiKey,headers:n.headers})}catch(e){xH.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}let u=GH(i,c),d=`${t.frozenAt.replace(/[:.]/g,`-`)}-${IH(c)}.md`,f=`${TH}/${d}`;try{await RH(e,TH),await e.writeFile(f,u)}catch(e){return xH.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let p={filename:d,title:c,frozenAt:t.frozenAt,messageCount:t.messageCount};try{await qH(e,t.filename,p)}catch(e){return xH.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(f!==r)try{await e.rm(r)}catch(e){xH.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:r,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return xH.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:d,title:c}),p}function GH(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var KH=Promise.resolve();async function qH(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(EH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(EH,JSON.stringify(a,null,2))},i=KH.then(r,r);return KH=i.then(()=>void 0,()=>void 0),i}function JH(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}t=t.replace(/^#\s+[^\n]*\n+/,``);let a=[],o=/^## (User|Assistant)\s*\n/gm,s=[],c;for(;(c=o.exec(t))!==null;)s.push({role:c[1]===`User`?`user`:`assistant`,start:c.index,bodyStart:c.index+c[0].length});for(let e=0;e<s.length;e++){let n=e+1<s.length?s[e+1].start:t.length,r=t.slice(s[e].bodyStart,n).trim();a.push({id:`frozen-${e}`,role:s[e].role,content:r,timestamp:0})}return{title:n,messages:a}}var YH=d(`new-session`),XH=`ui-new-session`;async function ZH(e){let t=Ba()??void 0,n;try{n=Qa()}catch(e){YH.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let r=n?.provider===`adobe`?{"X-Session-Id":hi(XH)}:void 0,i=new ZB;try{await i.init()}catch(e){return YH.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}return DH({sessionStore:i,vfs:e.vfs,model:n,apiKey:t,headers:r})}async function QH(e){let t=new ZB;try{await t.init()}catch(e){return YH.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return DH({sessionStore:t,vfs:e.vfs,mode:`quick`})}async function $H(e){let t={found:0,enriched:[]},n=[];try{n=await UH(e.vfs)}catch(e){return YH.warn(`Failed to list pending enrichments`,{error:e instanceof Error?e.message:String(e)}),t}if(t.found=n.length,n.length===0)return t;let r=Ba()??void 0,i;try{i=Qa()}catch(e){return YH.info(`No active model — skipping background enrichment`,{error:e instanceof Error?e.message:String(e)}),t}if(!r||!i)return YH.info(`LLM credentials unavailable — leaving pending entries for later boot`,{pending:n.length}),t;let a=i.provider===`adobe`?{"X-Session-Id":hi(XH)}:void 0;for(let o of n)try{let n=await WH(e.vfs,o,{model:i,apiKey:r,headers:a});n&&t.enriched.push(n)}catch(e){YH.warn(`Background enrichment threw (entry stays pending)`,{filename:o.filename,error:e instanceof Error?e.message:String(e)})}return YH.info(`Background enrichment pass complete`,{found:t.found,enriched:t.enriched.length}),t}function eU(e,t={}){if(t.isWriter===!1){YH.info(`Background enrichment skipped (OPFS follower — read-only tab)`);return}let n=()=>{$H({vfs:e}).catch(()=>{})},r=globalThis.requestIdleCallback;typeof r==`function`?r(n):setTimeout(n,0)}var tU=d(`boot/ui-fixture`);function nU(){try{let e=new URLSearchParams(window.location.search).get(`ui-fixture`);return e===null?!1:e===``||e===`1`||e.toLowerCase()===`true`}catch{return!1}}async function rU(e){let[{createChatFixture:t,FIXTURE_SESSION_ID:n,FIXTURE_SCOOP_NAME:r}]=await Promise.all([o(()=>import(`./chat-fixture-CLDS_yKK.js`),[])]);await e.switchToContext(n,!0,r),e.loadMessages(t());let i=new URLSearchParams(window.location.search).get(`compacting`);(i===`summarizing`||i===`extracting-memory`)&&e.setCompactionState?.(i),tU.info(`Loaded UI fixture session for design iteration`)}async function iU(e){let{client:t,layout:n,sprinkleManager:r,localFs:i,writableFs:a,log:s}=e;if(!i.getWatcher()){let{FsWatcher:e}=await o(async()=>{let{FsWatcher:e}=await Promise.resolve().then(()=>KG);return{FsWatcher:e}},void 0);i.setWatcher(new e)}let c=i.getWatcher();c&&r.setupWatcher(c),!await i.exists(`/shared/.welcomed`)&&localStorage.getItem(`slicc-welcomed`)&&(await i.writeFile(`/shared/.welcomed`,`1`).catch(()=>{}),localStorage.removeItem(`slicc-welcomed`)),t.requestState(),s.info(`Extension UI connected to offscreen agent engine`);let{installNukeReloadListener:l}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-BpUsw-m7.js`);return{installNukeReloadListener:e}},[]);l(),nU()&&await rU(n.panels.chat),Si().catch(()=>{}),eU(a)}async function aU(e){let{layout:t,log:n}=e,{PanelFollowerSprinkleProxy:r}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-C-chIyWh.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:i}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>ioe);return{SprinkleFollowerController:e}},void 0),a={send(e){chrome.runtime.sendMessage(e).catch(e=>{let t=e instanceof Error?e.message:String(e);/receiving end does not exist/i.test(t)||n.error(`Panel → offscreen sendMessage failed`,{error:t})})}},s={onMessage(e){let t=t=>(!t||typeof t!=`object`||!(`source`in t)||!(`payload`in t)||e(t),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)}},c=null;c=new i({sync:new r(a,s,{onSprinklesList:e=>void c?.updateAvailable(e),onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t)}),addSprinkle:(e,n,r,i,a)=>t.addSprinkle(e,n,r,i,a),removeSprinkle:e=>t.removeSprinkle(e)})}function oU(e,t){return!e||typeof e!=`object`||e.type!==t?null:e}var sU=class{sender;listeners;disposed=!1;unsubscribe;pendingResets=new Map;nextResetId=1;constructor(e,t,n){this.sender=e,this.listeners=n,this.unsubscribe=t.onMessage(e=>{if(e.source!==`offscreen`)return;let t=oU(e.payload,`leader-mode-changed`);if(t){this.listeners.onLeaderModeChange?.(t.active);return}let n=oU(e.payload,`leader-tray-reset-response`);if(n){let e=this.pendingResets.get(n.requestId);if(!e)return;this.pendingResets.delete(n.requestId),clearTimeout(e.timer),n.ok?e.resolve(n.status):e.reject(Error(n.error??`leader-tray-reset failed (no error message)`));return}})}pushSprinklesSnapshot(e){if(this.disposed)return;let t={type:`leader-sprinkles-snapshot`,sprinkles:e};this.sender.send({source:`panel`,payload:t})}pushSprinkleUpdate(e,t){if(this.disposed)return;let n={type:`leader-sprinkle-update`,sprinkleName:e,data:t};this.sender.send({source:`panel`,payload:n})}pushUserMessageEcho(e,t,n){if(this.disposed)return;let r={type:`leader-user-message-echo`,text:e,messageId:t,attachments:n};this.sender.send({source:`panel`,payload:r})}pushActiveScoop(e){if(this.disposed)return;let t={type:`leader-active-scoop`,scoopJid:e};this.sender.send({source:`panel`,payload:t})}requestModeState(){this.disposed||this.sender.send({source:`panel`,payload:{type:`leader-request-mode-state`}})}resetTray(e=3e4){if(this.disposed)return Promise.reject(Error(`PanelLeaderSyncProxy disposed`));let t=`tray-reset-${Date.now()}-${this.nextResetId++}`;return new Promise((n,r)=>{let i=setTimeout(()=>{this.pendingResets.delete(t),r(Error(`leader-tray-reset timed out after ${e}ms`))},e);this.pendingResets.set(t,{resolve:n,reject:r,timer:i});let a={type:`leader-tray-reset`,requestId:t};this.sender.send({source:`panel`,payload:a})})}dispose(){if(!this.disposed){this.disposed=!0,this.unsubscribe();for(let e of this.pendingResets.values())clearTimeout(e.timer),e.reject(Error(`PanelLeaderSyncProxy disposed`));this.pendingResets.clear()}}};function cU(e){let{sender:t,subscriber:n,sprinkleManager:r,client:i,chat:a,log:o}=e,s=e._proxyFactory??((e,t,n)=>new sU(e,t,n)),c,l=e=>c.pushActiveScoop(e),u=()=>{let e=new Set(r.opened());c.pushSprinklesSnapshot(r.available().map(t=>({name:t.name,title:t.title,path:t.path,open:e.has(t.name),autoOpen:t.autoOpen})))},d=(e,t)=>c.pushSprinkleUpdate(e,t),f=(e,t,n)=>c.pushUserMessageEcho(e,t,n),p=!1,m=null,h=null,g=!1;function _(){p||g||(p=!0,m=i.onScoopSelected(l),i.selectedScoopJid&&l(i.selectedScoopJid),h=r.onChange(u),r.refresh().then(u).catch(e=>{o.error(`Initial sprinkle refresh after leader-mode activation failed`,{error:e instanceof Error?e.message:String(e)})}),r.setSendToSprinkleHook(d),a.setOnLocalUserMessage(f))}function v(){p&&(p=!1,m?.(),m=null,h?.(),h=null,r.setSendToSprinkleHook(void 0),a.setOnLocalUserMessage(void 0))}return c=s(t,n,{onLeaderModeChange:e=>{e?_():v()}}),c.requestModeState(),{proxy:c,isInstalled:()=>p,dispose(){g||(g=!0,v(),c.dispose())}}}function lU(e){let t=cU({sender:{send(t){chrome.runtime.sendMessage(t).catch(t=>{let n=t instanceof Error?t.message:String(t);/receiving end does not exist/i.test(n)||e.log.error(`Panel → offscreen sendMessage failed (leader)`,{error:n})})}},subscriber:{onMessage(e){let t=t=>(!t||typeof t!=`object`||!(`source`in t)||!(`payload`in t)||e(t),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)}},sprinkleManager:e.sprinkleManager,client:e.client,chat:e.chat,log:e.log});return window.addEventListener(`beforeunload`,()=>t.dispose(),{once:!0}),t}function uU(e){for(let t of[`slicc_accounts`,`selected-model`]){let n=localStorage.getItem(t);n!=null&&e.sendRaw({type:`local-storage-set`,key:t,value:n})}}function dU(e,t,n,r){let i=n(e).filter(e=>!r(e.id)),a=t.defaultModelId?i.find(e=>e.id===t.defaultModelId):void 0,o=t.defaultModelId?i.find(e=>e.id.toLowerCase().includes(t.defaultModelId.toLowerCase())):void 0,s=a??o??i[0];return s?`${e}:${s.id}`:void 0}function fU(e){let t=e.getAvailableProviders().filter(t=>e.providerOffersLlmModels(t)),n=t.map(t=>{let n=e.getProviderConfig(t);return{id:n.id,name:n.name??n.id,description:n.description,requiresApiKey:n.requiresApiKey??!0,requiresBaseUrl:n.requiresBaseUrl??!1,requiresDeployment:!!n.requiresDeployment,requiresApiVersion:!!n.requiresApiVersion,apiKeyPlaceholder:n.apiKeyPlaceholder??void 0,apiKeyEnvVar:n.apiKeyEnvVar??void 0,defaultBaseUrl:n.baseUrlPlaceholder??void 0,baseUrlDescription:n.baseUrlDescription??void 0,deploymentPlaceholder:n.deploymentPlaceholder??void 0,deploymentDescription:n.deploymentDescription??void 0,apiVersionDefault:n.apiVersionDefault??void 0,apiVersionDescription:n.apiVersionDescription??void 0,isOAuth:!!n.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),r={};for(let n of t)try{r[n]=e.getProviderModels(n).filter(t=>!e.isModelHiddenFromPicker(t.id)).map(e=>({id:e.id,name:e.name}))}catch{r[n]=[]}return{providers:n,models:r}}async function pU(e){let{OnboardingOrchestrator:t}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-o71LxZLt.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([29,14])),n=null;return{get:()=>n||(n=new t({fs:e.fs,postSystemMessage:e.postSystemMessage,postDipReference:e.postDipReference,getProviderCatalogue:()=>fU(e.providers),saveAccount:(t,n,r,i,a)=>e.providers.addAccount(t,n,r,i,a),setSelectedModel:t=>e.providers.setSelectedModelId(t),resolveModelLabel:(t,n)=>{try{return e.providers.getProviderModels(t).find(e=>e.id===n)?.name??null}catch{return null}},broadcastToDip:t=>e.broadcastToDip(t),fireFinalLick:t=>e.onFireFinalLick(t),launchOAuth:async(t,n)=>await mU(t,n??null,e)}),n),peek:()=>n,buildCatalogue:()=>fU(e.providers)}}async function mU(e,t,n){try{let r=n.providers.getProviderConfig(e);if(!r.isOAuth||!r.onOAuthLogin&&!r.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(r.requiresBaseUrl&&t&&n.providers.addAccount(e,``,t),r.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-BbkAikCT.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([16,1])),t=await e();if(!t)return{ok:!1,message:`Intercepted OAuth requires the controlled-browser transport — open SLICC in standalone or extension mode.`};await r.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:n.deviceCode.createSprinkleDeviceCodePrompter({broadcastToDip:e=>n.broadcastToDip(e)})})}else if(r.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BbkAikCT.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await r.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:dU(e,r,n.providers.getProviderModels,n.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var hU=300*1e3,gU=Symbol(`mount:timeout`),_U=class e{kind=`local`;source=void 0;profile=void 0;mountId;handle;closed=!1;constructor(e,t){this.handle=e,this.mountId=t.mountId}static fromHandle(t,n){return new e(t,n)}static async create(t){if(t.isScoop())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n;if(t.toolContext){let e=m.generateId(),r=!1,i=h({id:e,html:re(`directory`),onAction:async(e,t)=>{if(e===`approve`){let e=t;if(e?.handleInIdb&&typeof e.idbKey==`string`)try{let t=await ne(e.idbKey);return t?(await w(t),{approved:!0,handle:t}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(e?.cancelled)return{cancelled:!0};if(e?.error)return{error:String(e.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}return{denied:!0}}},t.toolContext.onUpdate).catch(e=>{if(r)return gU;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(gU)},hU)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===gU)throw Error(`mount: timed out after ${Math.round(hU/6e4)} minute(s) waiting for user approval`);if(!s)throw Error(`mount: tool UI not available`);let c=s;if(c.denied)throw Error(`mount: denied by user`);if(c.cancelled)throw Error(`mount: cancelled`);if(c.error)throw Error(`mount: ${c.error}`);if(!c.handle)throw Error(`mount: no directory selected`);n=c.handle}else if(t.isExtension)try{let e=await T();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await ne(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);await w(t),n=t}else throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}else{if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{n=await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}return new e(n,{mountId:t.mountId})}getHandle(){return this.handle}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}splitPath(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(e=>e.length>0)}async resolveDir(e,t=!1){let n=this.splitPath(e),r=this.handle;for(let i of n)try{r=await r.getDirectoryHandle(i,{create:t})}catch(t){throw this.toFsError(t,e)}return r}async resolveFile(e,t=!1){let n=this.splitPath(e);if(n.length===0)throw new E(`EISDIR`,`is a directory`,e);let r=n.pop(),i=this.handle;for(let r of n)try{i=await i.getDirectoryHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}try{return await i.getFileHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}}toFsError(e,t){if(e instanceof E)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new E(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new E(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new E(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new E(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new E(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new E(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new E(`ENOTEMPTY`,`directory not empty`,t)}return new E(`EINVAL`,e instanceof Error?e.message:String(e),t)}async readDir(e){this.assertOpen(e);let t=await this.resolveDir(e),n=[];for await(let[e,r]of t)if(r.kind===`file`){let t=await r.getFile();n.push({name:e,kind:`file`,size:t.size,lastModified:t.lastModified})}else n.push({name:e,kind:`directory`});return n}async readFile(e){this.assertOpen(e);let t=await(await this.resolveFile(e)).getFile();return new Uint8Array(await t.arrayBuffer())}async writeFile(e,t){this.assertOpen(e);let n=await(await this.resolveFile(e,!0)).createWritable();await n.write(t),await n.close()}async stat(e){if(this.assertOpen(e),this.splitPath(e).length===0)return{kind:`directory`,size:0,mtime:0};try{let t=await(await this.resolveFile(e)).getFile();return{kind:`file`,size:t.size,mtime:t.lastModified}}catch{}return await this.resolveDir(e),{kind:`directory`,size:0,mtime:0}}async mkdir(e){this.assertOpen(e),await this.resolveDir(e,!0)}async remove(e,t){this.assertOpen(e);let n=this.splitPath(e);if(n.length===0)throw new E(`EINVAL`,`cannot remove mount root`,e);let r=n.pop(),i=n.join(`/`),a=await this.resolveDir(i||`/`);try{await a.removeEntry(r,{recursive:t?.recursive??!1})}catch(t){throw this.toFsError(t,e)}}async refresh(){return this.assertOpen(`/`),{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:this.handle.name}}async close(){this.closed=!0}};function vU(){return crypto.randomUUID()}var yU=`slicc-pending-mount`,bU=`pendingMount`;async function xU(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(yU,1);n.onupgradeneeded=()=>n.result.createObjectStore(`handles`),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),n=t.transaction(`handles`,`readwrite`);n.objectStore(`handles`).put(e,bU),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function SU(e,t){let n;try{n=await new Promise((e,t)=>{let n=indexedDB.open(yU,1);n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}catch{return}let r=n.transaction(`handles`,`readwrite`),i=await new Promise(e=>{let t=r.objectStore(`handles`).get(bU);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(i){r.objectStore(`handles`).delete(bU),await new Promise(e=>r.oncomplete=()=>e());let n=`/mnt/${i.name}`,a=_U.fromHandle(i,{mountId:vU()});await e.mount(n,a),t.info(`Mounted folder from welcome onboarding`,{name:i.name,path:n})}n.close()}var CU=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),wU=`slicc:welcome-flow-fired`;function TU(){try{let e=typeof localStorage<`u`?localStorage.getItem(wU):null;if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t.map(String):[])}catch{return new Set}}function EU(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(wU,JSON.stringify([...e]))}catch{}}function DU(e,t,n,r,i){if(CU.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}CU.has(e)&&(t.add(e),EU(t)),n()}var OU=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function kU(e){let{firedWelcomeActions:t,getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,contextLabel:l,vfs:u,log:d}=e;return e=>{if(e.type!==`sprinkle`)return!1;let f=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(f&&CU.has(f)){if(t.has(f))return d.debug(`Suppressing duplicate welcome lick (${l})`,{action:f}),!0;t.add(f),EU(t)}if(!f||!OU.has(f))return!1;let p=e.body;return AU(f,p,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:u,log:d})}}function AU(e,t,n){let{getAccounts:r,getProviderConfig:i,resolveDeviceCodeDecision:a,getOnboardingOrchestrator:o,applyPendingMount:s,fastForward:c,onShortcutMigrate:l,vfs:u,log:d}=n;if(e===`device-code-decision`){let e=t?.data?.decision;return a(e===`cancel`?`cancel`:`continue`),!0}if(e===`first-run`)return o().handleFirstRun(),!0;if(e===`onboarding-complete`){let e=o(),n=t?.data??{};return n.mountWorkspace&&s&&s().catch(e=>d.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(n).catch(e=>d.warn(`OnboardingOrchestrator failed`,e)),!0}if(e===`connect-ready`)return jU({getAccounts:r,getProviderConfig:i,getOnboardingOrchestrator:o,fastForward:c,vfs:u,log:d});if(e===`connect-attempt`){let e=t?.data;return e&&o().handleConnectAttempt({provider:String(e.provider??``),apiKey:String(e.apiKey??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null,deployment:typeof e.deployment==`string`&&e.deployment?String(e.deployment):null,apiVersion:typeof e.apiVersion==`string`&&e.apiVersion?String(e.apiVersion):null,model:e.model==null?null:String(e.model)}).catch(e=>d.warn(`handleConnectAttempt failed`,e)),!0}if(e===`oauth-attempt`){let e=t?.data;return e&&o().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>d.warn(`handleOAuthAttempt failed`,e)),!0}return e===`shortcut-migrate`?(l(),!0):!1}function jU(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),MU(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function MU(e,t,n){let{hasOnboardingFinalLickInHistory:r}=await o(async()=>{let{hasOnboardingFinalLickInHistory:e}=await Promise.resolve().then(()=>mq);return{hasOnboardingFinalLickInHistory:e}},void 0);if(await r())return;let i=e?await NU(e):{},{getSelectedModelId:a,getProviderConfig:s,getProviderModels:c}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>zi);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},void 0),l=(()=>{try{return a()||null}catch{return null}})(),u=(()=>{if(!l)return null;try{return c(t).find(e=>e.id===l)?.name??l}catch{return l}})(),d=null;try{d=s(t).name??null}catch{}n({action:`onboarding-complete-with-provider`,data:{profile:i,provider:t,providerName:d,model:l,modelLabel:u,validation:`preexisting`}})}async function NU(e){try{let t=await e.readDir(`/home`),n=null;for(let r of t){if(r.type!==`directory`)continue;let t=`/home/${r.name}/.welcome.json`;try{let r=(await e.stat(t)).mtime??0;if(n&&r<=n.mtime)continue;let i=await e.readFile(t,{encoding:`utf-8`}),a=JSON.parse(typeof i==`string`?i:new TextDecoder().decode(i));a&&typeof a==`object`&&(n={profile:a,mtime:r})}catch{}}return n?.profile??{}}catch{return{}}}async function PU(e){let{client:t,layout:n,localFs:r,firedWelcomeActions:i,log:a}=e,s=await o(()=>Promise.resolve().then(()=>zi),void 0),{getAccounts:c,getProviderConfig:l}=s,{createSprinkleDeviceCodePrompter:u,resolveDeviceCodeDecision:d}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),f=await pU({fs:r,log:a,providers:s,deviceCode:{createSprinkleDeviceCodePrompter:u},postSystemMessage:e=>n.panels.chat.addSystemMessage(e),postDipReference:e=>n.panels.chat.addSystemMessage(e),broadcastToDip:e=>YI(e),onFireFinalLick:e=>{uU(t),DU(String(e?.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-ext`,a)}}),p=kU({firedWelcomeActions:i,getAccounts:c,getProviderConfig:l,resolveDeviceCodeDecision:d,getOnboardingOrchestrator:()=>f.get(),applyPendingMount:()=>SU(r,a),fastForward:{fire:e=>{DU(String(e.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-ext`,a)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return l(e)}catch{return null}})();YI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{r.writeFile(`/shared/.welcomed`,`1`).catch(e=>a.warn(`Failed to persist welcome completion marker`,e))},contextLabel:`ext`,vfs:r,log:a});return n.panels.chat.onDipLick=(e,n)=>{p({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:n}})||t.sendSprinkleLick(`inline`,{action:e,data:n})},{onboardingHandle:f,interceptWelcomeLick:p}}var FU=`/tmp`;function IU(e){let t=e.replace(/[\\/:]+/g,`_`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);return t.length>0?t:`attachment`}function LU(){let e=globalThis.crypto!==void 0&&typeof globalThis.crypto.getRandomValues==`function`?globalThis.crypto:null;if(e){let t=new Uint8Array(4);return e.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}return Math.random().toString(36).slice(2,10)}function RU(e,t,n,r=LU()){let i=IU(e);return`${FU}/attachment-${t.toString(36)}-${n.toString(36)}-${r}-${i}`}function zU(e){let t=0;return async n=>{let r=new Uint8Array(await n.arrayBuffer());t+=1;let i=RU(n.name,Date.now(),t);return await e.mkdir(FU,{recursive:!0}).catch(()=>{}),await e.writeFile(i,r),i}}function BU(e){let{client:t,layout:n,localFs:r,writableFs:i,selectScoop:a,getSelectedScoop:o,log:s}=e;t.setLocalFS(r),n.panels.chat.setAttachmentWriter(zU(r)),n.panels.chat.setAgent(t.createAgentHandle()),n.panels.scoops.setOrchestrator(t),n.panels.memory.setOrchestrator(t),n.setScoopSwitcherOrchestrator?.(t),n.setScoopSwitcherTranscriptSource?.(e=>t.getScoopTranscript(e)),n.setScoopsRailTranscriptSource?.(e=>t.getScoopTranscript(e)),n.onScoopSelect=a;let l=e=>{let t=e.config?.modelId,r=t?Za(t):Qa();n.panels.chat.setModelSupportsReasoning(!!r.reasoning,c(r).includes(`xhigh`)),n.panels.chat.setThinkingLevel(e.config?.thinkingLevel)};return n.onModelChange=e=>{localStorage.setItem(`selected-model`,e),t.updateModel();let n=o();n&&l(n)},n.onThinkingLevelChange=e=>{let n=o();n&&t.setScoopThinkingLevel(n.jid,e)},n.onModelsRefreshed=()=>{let e=o();e&&l(e)},n.onClearChat=async e=>{if(e?.freeze===`quick`)try{await QH({vfs:i})}catch(e){s.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await ZH({vfs:i})}catch(e){s.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else s.info(`New session: freezer skipped (long-press)`);await n.panels.chat.deleteSessionById(`session-cone`),await t.clearAllMessages()},n.onClearFilesystem=async()=>{t.clearFilesystem()},{syncThinkingButtonForScoop:l}}function VU(e,t,n){let r=`----DaMount${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`,i=new TextEncoder,a=i.encode(`--${r}\r\nContent-Disposition: form-data; name="data"; filename="${e}"\r\nContent-Type: ${t}\r\n\r\n`),o=i.encode(`\r\n--${r}--\r\n`),s=new Uint8Array(a.byteLength+n.byteLength+o.byteLength);return s.set(a,0),s.set(n,a.byteLength),s.set(o,a.byteLength+n.byteLength),{contentType:`multipart/form-data; boundary=${r}`,body:s}}function HU(e){return e.split(`/`).pop()||`data`}function UU(e){let t=e.match(/^da:\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid DA source '${e}' — expected da://org/repo[/path]`);return{org:t[1],repo:t[2],path:(t[3]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var WU=5*1024*1024,GU=class{kind=`da`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=UU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??WU,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toSourcePath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/source/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}toListPath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/list/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n&&!this.cache.isStale(n.cachedAt))return n.body;let r={};n&&(r[`if-none-match`]=n.etag);let i=await this.transport({method:`GET`,path:this.toSourcePath(t),headers:r});if(i.status===304&&n)return await this.cache.putBody(t,n.body,n.etag),n.body;if(i.status===404)throw await this.cache.invalidateBody(t),new E(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new E(`EACCES`,`da access denied`,e);if(i.status>=400)throw new E(`EIO`,`da readFile failed: ${i.status}`,e);let a=i.headers.get(`content-length`),o=a?Number(a):void 0;if(o!==void 0&&o>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=i.headers.get(`etag`)??``;return await this.cache.putBody(t,s,c),s}async writeFile(e,t){if(this.assertOpen(e),t.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let n=this.toMountRelative(e),r=await this.cache.getBody(n),i=VU(HU(e),p(e),t),a={"content-type":i.contentType,"content-length":String(i.body.byteLength)};r?.etag?a[`if-match`]=r.etag:r||(a[`if-none-match`]=`*`);let o=()=>this.transport({method:`POST`,path:this.toSourcePath(n),headers:a,body:i.body}),s,c=1;try{s=await o()}catch{c=2,s=await o()}if(s.status===412){if(c===2){let r=await this.transport({method:`HEAD`,path:this.toSourcePath(n)});if(r.status>=400)throw new E(`EIO`,`da reconcile HEAD failed: ${r.status}`,e);let i=r.headers.get(`etag`)??``;await this.cache.putBody(n,t,i);let a=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a);return}await this.cache.invalidateBody(n);try{await this.readFile(e)}catch{}throw new E(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new E(`EACCES`,`da write denied`,e);if(s.status>=400)throw new E(`EIO`,`da writeFile failed: ${s.status}`,e);let l=s.headers.get(`etag`)??``;await this.cache.putBody(n,t,l);let u=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(u)}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.transport({method:`GET`,path:this.toListPath(t)});if(r.status===404)throw new E(`ENOENT`,`no such directory`,e);if(r.status>=400)throw new E(`EIO`,`da list failed: ${r.status}`,e);let i=(await r.json()).map(e=>e.ext?{name:`${e.name}.${e.ext}`,kind:`file`,etag:e.etag,lastModified:e.lastModified}:{name:e.name,kind:`directory`,lastModified:e.lastModified});return await this.cache.putListing(t,i),i}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n)return{kind:`file`,size:n.size,mtime:n.cachedAt,etag:n.etag};let r=t.split(`/`),i=r.pop()??``,a=r.join(`/`),o=await this.cache.getListing(a);if(o&&!this.cache.isStale(o.cachedAt)){let t=o.entries.find(e=>e.name===i);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??o.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??o.cachedAt};if(!t)throw new E(`ENOENT`,`no such file or directory`,e)}let s=await this.transport({method:`HEAD`,path:this.toSourcePath(t)});if(s.status===200){let e=Number(s.headers.get(`content-length`)??`0`),t=s.headers.get(`etag`)??``,n=s.headers.get(`last-modified`),r=n?Date.parse(n):0;if(o){let n=o.entries.map(n=>n.name===i&&n.kind===`file`?{...n,size:e,etag:t,lastModified:r}:n);await this.cache.putListing(a,n)}return{kind:`file`,size:e,mtime:r,etag:t}}if(s.status===404){let n=await this.cache.getListing(t);if(n)return{kind:`directory`,size:0,mtime:n.cachedAt};throw new E(`ENOENT`,`no such file or directory`,e)}throw new E(`EIO`,`da stat failed: ${s.status}`,e)}async mkdir(e){}async remove(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.transport({method:`DELETE`,path:this.toSourcePath(t)});if(n.status===404)throw new E(`ENOENT`,`no such file`,e);if(n.status===401||n.status===403)throw new E(`EACCES`,`da delete denied`,e);if(n.status>=400)throw new E(`EIO`,`da delete failed: ${n.status}`,e);await this.cache.invalidateBody(t);let r=t.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(r)}async refresh(e){this.assertOpen(`/`);let t={added:[],removed:[],changed:[],unchanged:0,errors:[]},n=[``];for(;n.length>0;){let e=n.pop();try{let r=await this.transport({method:`GET`,path:this.toListPath(e)});if(r.status>=400){t.errors.push({path:e,message:`list failed: ${r.status}`});continue}let i=await r.json(),a=[];for(let r of i)if(r.ext){let n=e?`${e}/${r.name}.${r.ext}`:`${r.name}.${r.ext}`;a.push({name:`${r.name}.${r.ext}`,kind:`file`,etag:r.etag,lastModified:r.lastModified});let i=await this.cache.getBody(n);i?r.etag&&i.etag!==r.etag?(await this.cache.invalidateBody(n),t.changed.push(n)):t.unchanged++:t.added.push(n)}else{a.push({name:r.name,kind:`directory`});let t=e?`${e}/${r.name}`:r.name;n.push(t)}await this.cache.putListing(e,a)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}}if(e?.bodies)for(let e of t.changed)try{await this.readFile(e)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}return t}describe(){return{displayName:`${this.parsed.org}/${this.parsed.repo}${this.parsed.path?`/${this.parsed.path}`:``}`,source:this.source,profile:this.profile}}async close(){this.closed||=!0}};function KU(e){let t=e.match(/^s3:\/\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid S3 source '${e}' — expected s3://bucket[/prefix]`);return{bucket:t[1],prefix:(t[2]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var qU=25*1024*1024,JU=class{kind=`s3`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=KU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??qU,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toS3Key(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``);return[this.parsed.prefix,t].filter(e=>e.length>0).join(`/`)}toMountRelativeKey(e){return this.parsed.prefix?e.slice(this.parsed.prefix.length+1):e}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n&&!this.cache.isStale(n.cachedAt))return n.body;let r={};n&&(r[`if-none-match`]=n.etag);let i=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:this.toS3Key(t),headers:r});if(i.status===304&&n)return await this.cache.putBody(t,n.body,n.etag),n.body;if(i.status===404)throw await this.cache.invalidateBody(t),new E(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new E(`EACCES`,`s3 access denied`,e);if(i.status>=400)throw new E(`EIO`,`s3 readFile failed: ${i.status}`,e);let a=i.headers.get(`content-length`),o=a?Number(a):void 0;if(o!==void 0&&o>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes (${o} > ${this.maxBodyBytes})`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=i.headers.get(`etag`)??``;return await this.cache.putBody(t,s,c),s}async writeFile(e,t){this.assertOpen(e);let n=this.toMountRelative(e);if(t.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let r=await this.cache.getBody(n),i={"content-type":`application/octet-stream`,"content-length":String(t.byteLength)};r?i[`if-match`]=r.etag:i[`if-none-match`]=`*`;let a=()=>this.transport({method:`PUT`,bucket:this.parsed.bucket,key:this.toS3Key(n),headers:i,body:t}),o,s=1;try{o=await a()}catch{s=2,o=await a()}if(o.status===412){if(s===2){let r=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(n)});if(r.status>=400)throw new E(`EIO`,`s3 reconcile HEAD failed: ${r.status}`,e);let i=r.headers.get(`etag`)??``;await this.cache.putBody(n,t,i);let a=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a);return}await this.cache.invalidateBody(n);try{await this.readFile(e)}catch{}throw new E(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(o.status===401||o.status===403)throw new E(`EACCES`,`s3 write denied`,e);if(o.status>=400)throw new E(`EIO`,`s3 writeFile failed: ${o.status}`,e);let c=o.headers.get(`etag`)??``;await this.cache.putBody(n,t,c);let l=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(l)}async listObjectsV2(){let e=[],t;do{let n={"list-type":`2`};this.parsed.prefix&&(n.prefix=`${this.parsed.prefix}/`),t&&(n[`continuation-token`]=t);let r=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:``,query:n});if(r.status>=400)throw new E(`EIO`,`s3 list failed: ${r.status}`,`/`);let i=await r.text(),a=this.parseListingXml(i);e.push(...a.contents),t=a.nextContinuationToken}while(t);return e}parseListingXml(e){let t=[];for(let n of e.matchAll(/<Contents>([\s\S]*?)<\/Contents>/g)){let e=n[1],r=e.match(/<Key>([^<]+)<\/Key>/)?.[1]??``,i=e.match(/<ETag>([^<]+)<\/ETag>/)?.[1]??``,a=e.match(/<Size>([^<]+)<\/Size>/)?.[1]??`0`,o=e.match(/<LastModified>([^<]+)<\/LastModified>/)?.[1]??``;t.push({key:r,etag:i,size:Number(a),lastModified:o?Date.parse(o):0})}return{contents:t,nextContinuationToken:e.match(/<IsTruncated>([^<]+)<\/IsTruncated>/)?.[1]===`true`?e.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/)?.[1]:void 0}}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.listObjectsV2(),i=this.groupByDir(r);for(let[e,t]of i)await this.cache.putListing(e,t);return i.get(t)??[]}groupByDir(e){let t=new Map,n=e=>(t.has(e)||t.set(e,[]),t.get(e));n(``);for(let t of e){let e=this.toMountRelativeKey(t.key).split(`/`),r=e.pop();n(e.join(`/`)).push({name:r,kind:`file`,size:t.size,etag:t.etag,lastModified:t.lastModified});let i=``;for(let t of e){let e=i;i=i?`${i}/${t}`:t;let r=n(e);r.find(e=>e.name===t&&e.kind===`directory`)||r.push({name:t,kind:`directory`}),n(i)}}return t}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n)return{kind:`file`,size:n.body.byteLength,mtime:n.cachedAt,etag:n.etag};let r=t.split(`/`),i=r.pop()??``,a=r.join(`/`),o=await this.cache.getListing(a);if(o&&!this.cache.isStale(o.cachedAt)){let t=o.entries.find(e=>e.name===i);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??o.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??o.cachedAt};if(!t)throw new E(`ENOENT`,`no such file or directory`,e)}let s=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(t)});if(s.status===200){let e=Number(s.headers.get(`content-length`)??`0`),t=s.headers.get(`etag`)??``,n=s.headers.get(`last-modified`);return{kind:`file`,size:e,mtime:n?Date.parse(n):0,etag:t}}if(s.status===404){let n=await this.cache.getListing(t);if(n)return{kind:`directory`,size:0,mtime:n.cachedAt};throw new E(`ENOENT`,`no such file or directory`,e)}throw new E(`EIO`,`s3 stat failed: ${s.status}`,e)}async refresh(e){this.assertOpen(`/`);let t=await this.listObjectsV2(),n=new Set(t.map(e=>this.toMountRelativeKey(e.key))),r=new Map(t.map(e=>[this.toMountRelativeKey(e.key),e.etag])),i={added:[],removed:[],changed:[],unchanged:0,errors:[]};for(let e of n){let t=await this.cache.getBody(e),n=r.get(e);t?t.etag===n?i.unchanged++:(await this.cache.invalidateBody(e),i.changed.push(e)):i.added.push(e)}let a=this.groupByDir(t);for(let[e,t]of a)await this.cache.putListing(e,t);if(e?.bodies)for(let e of i.changed)try{await this.readFile(e)}catch(t){i.errors.push({path:e,message:t instanceof Error?t.message:String(t)})}return i}async mkdir(e){}async remove(e,t){this.assertOpen(e);let n=this.toMountRelative(e);if(t?.recursive)throw new E(`EINVAL`,`recursive remove not yet supported on S3`,e);let r=await this.transport({method:`DELETE`,bucket:this.parsed.bucket,key:this.toS3Key(n)});if(r.status===404)throw new E(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new E(`EACCES`,`s3 delete denied`,e);if(r.status>=400)throw new E(`EIO`,`s3 delete failed: ${r.status}`,e);await this.cache.invalidateBody(n);let i=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(i)}describe(){return{displayName:this.parsed.prefix?`${this.parsed.bucket}/${this.parsed.prefix}`:this.parsed.bucket,source:this.source,profile:this.profile}}async close(){this.closed||=!0}},YU=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function XU(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>zi);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new YU(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var ZU=`slicc-mount-cache`,QU=`listings`,$U=`bodies`,eW=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??ZU}isStale(e,t){return Date.now()-e>=(t??this.ttlMs)}async openDb(){return this.dbPromise||=new Promise((e,t)=>{let n=indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(QU)||e.createObjectStore(QU),e.objectStoreNames.contains($U)||e.createObjectStore($U)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),this.dbPromise}key(e){return`${this.mountId}::${e}`}async getListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(QU,`readonly`).objectStore(QU).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putListing(e,t){let n=await this.openDb();return new Promise((r,i)=>{let a=n.transaction(QU,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(QU).put(o,this.key(e)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async invalidateListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(QU,`readwrite`);i.objectStore(QU).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async getBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction($U,`readonly`).objectStore($U).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putBody(e,t,n){let r=await this.openDb(),i={body:t,etag:n,size:t.byteLength,cachedAt:Date.now()};try{await this.txPut(r,$U,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,$U,this.key(e),i)}catch{}return}throw t}}async invalidateBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction($U,`readwrite`);i.objectStore($U).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async clearMount(){let e=await this.openDb(),t=`${this.mountId}::`,n=n=>new Promise((r,i)=>{let a=e.transaction(n,`readwrite`),o=a.objectStore(n),s=o.getAllKeys();s.onsuccess=()=>{for(let e of s.result)typeof e==`string`&&e.startsWith(t)&&o.delete(e)},a.oncomplete=()=>r(),a.onerror=()=>i(a.error)});await Promise.all([n(QU),n($U)])}txPut(e,t,n,r){return new Promise((i,a)=>{let o=e.transaction(t,`readwrite`);o.objectStore(t).put(r,n),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async evictLru(e){let t=await this.openDb(),n=`${this.mountId}::`,r=await new Promise((e,r)=>{let i=t.transaction($U,`readonly`).objectStore($U),a=[],o=i.openCursor();o.onsuccess=()=>{let t=o.result;if(!t){e(a);return}if(typeof t.key==`string`&&t.key.startsWith(n)){let e=t.value;a.push({key:t.key,cachedAt:e.cachedAt})}t.continue()},o.onerror=()=>r(o.error)});r.sort((e,t)=>e.cachedAt-t.cachedAt);let i=Math.max(1,Math.ceil(r.length*e)),a=r.slice(0,i);await new Promise((e,n)=>{let r=t.transaction($U,`readwrite`),i=r.objectStore($U);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function tW(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function nW(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 rW(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var iW=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),aW=new Set([101,103,204,205,304]);function oW(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new E(`EACCES`,e.error):e.errorCode===`invalid_request`?new E(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||iW.has(String(e.errorCode))?new E(`EIO`,e.error):new E(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let t;try{t=nW(e.bodyBase64)}catch(e){throw new E(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=aW.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function sW(e,t){let n;try{n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}catch(e){throw new E(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (SLICC backend at localhost may not be running)`)}try{return await n.json()}catch(e){throw new E(`EIO`,`mount transport: response is not a JSON envelope (status ${n.status}): ${e instanceof Error?e.message:String(e)}`)}}async function cW(e,t){try{return await chrome.runtime.sendMessage({type:e,envelope:t})}catch(e){throw new E(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function lW(e){return async t=>{let n={profile:e,method:t.method,bucket:t.bucket,key:t.key,query:t.query,headers:t.headers,bodyBase64:t.body?rW(t.body):void 0};return oW(tW()?await cW(`mount.s3-sign-and-forward`,n):await sW(`/api/s3-sign-and-forward`,n))}}function uW(e){let t=e?.getImsToken??(async()=>(await XU()).getBearerToken());return async e=>{let n;try{n=await t()}catch(e){throw new E(`EACCES`,`DA mount: ${e instanceof Error?e.message:String(e)}`)}let r={imsToken:n,method:e.method,path:e.path,query:e.query,headers:e.headers,bodyBase64:e.body?rW(e.body):void 0};return oW(tW()?await cW(`mount.da-sign-and-forward`,r):await sW(`/api/da-sign-and-forward`,r))}}var dW=e({DaMountBackend:()=>GU,RemoteMountCache:()=>eW,S3MountBackend:()=>JU,makeSignedFetchDa:()=>uW,makeSignedFetchS3:()=>lW}),fW=`slicc-mount-table`,pW=2,mW=`mounts`,hW=`mount-entries`;function gW(){return new Promise((e,t)=>{let n=indexedDB.open(fW,pW);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(mW)||t.createObjectStore(mW),t.objectStoreNames.contains(hW)||t.createObjectStore(hW),r<2){let e=n.transaction,t=e.objectStore(mW),r=e.objectStore(hW),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:vU(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function _W(e,t){let n=await gW();try{let r=e.descriptor.kind===`local`&&t?[mW,hW]:[hW],i=n.transaction(r,`readwrite`);i.objectStore(hW).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(mW).put(t,e.descriptor.idbHandleKey),await new Promise((e,t)=>{i.oncomplete=()=>e(),i.onerror=()=>t(i.error),i.onabort=()=>t(i.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{n.close()}}async function vW(e){let t=await gW();try{let n=t.transaction([mW,hW],`readwrite`);n.objectStore(hW).delete(e),n.objectStore(mW).delete(e),await new Promise((e,t)=>{n.oncomplete=()=>e(),n.onerror=()=>t(n.error),n.onabort=()=>t(n.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{t.close()}}async function yW(){let e=await gW();try{return await new Promise((t,n)=>{let r=e.transaction(hW,`readonly`),i=r.objectStore(hW).getAll();i.onsuccess=()=>t(i.result),i.onerror=()=>n(i.error),r.onabort=()=>n(r.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{e.close()}}async function bW(e){let t=await gW();try{return await new Promise((n,r)=>{let i=t.transaction(mW,`readonly`).objectStore(mW).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function xW(){let e=await gW();try{let t=e.transaction([mW,hW],`readwrite`);t.objectStore(mW).clear(),t.objectStore(hW).clear(),await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error),t.onabort=()=>n(t.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{e.close()}}async function SW(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await bW(o.idbHandleKey),s=typeof a?.name==`string`?a.name:``;if(!a||!(`queryPermission`in a)){i.push({kind:`local`,path:e,dirName:s});continue}let c;try{c=await a.queryPermission({mode:`readwrite`})}catch(t){n?.warn?.(`queryPermission threw on persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s});continue}if(c!==`granted`){i.push({kind:`local`,path:e,dirName:s});continue}try{let i=_U.fromHandle(a,{mountId:o.mountId});await t.mount(e,i),n?.info?.(`Restored mount from previous session`,{path:e,name:s}),r.push({kind:`local`,path:e,dirName:s})}catch(t){n?.warn?.(`Failed to re-mount persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s})}continue}if(o.kind===`s3`){try{let i=new eW({mountId:o.mountId,ttlMs:3e4}),a=new JU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:lW(o.profile)});await t.mount(e,a),n?.info?.(`Restored S3 mount from previous session`,{path:e,source:o.source}),r.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore S3 mount`,{path:e,error:r}),i.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:r})}continue}if(o.kind===`da`)try{let i=new eW({mountId:o.mountId,ttlMs:3e4}),a=new GU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:uW()});await t.mount(e,a),n?.info?.(`Restored DA mount from previous session`,{path:e,source:o.source}),r.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore DA mount`,{path:e,error:r}),i.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:r})}}return{restored:r,needsRecovery:i}}function CW(e){let{channel:t,getReader:n,logger:r}=e,i=e=>{let i=e.data;if(i?.type!==`preview-vfs-read`)return;let{id:a,path:o,asText:s}=i;(async()=>{try{let e=s?`utf-8`:`binary`,r=await n().readFile(o,{encoding:e});t.postMessage({type:`preview-vfs-response`,id:a,content:r})}catch(e){let n=e instanceof Error?e.message:String(e);n.includes(`ENOENT`)||r?.error(`Preview VFS read failed`,{path:o,error:n}),t.postMessage({type:`preview-vfs-response`,id:a,error:n})}})()};return t.addEventListener(`message`,i),{dispose:()=>t.removeEventListener(`message`,i)}}var wW=Uint8Array,TW=Uint16Array,EW=Int32Array,DW=new wW([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),OW=new wW([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),kW=new wW([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),AW=function(e,t){for(var n=new TW(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new EW(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},jW=AW(DW,2),MW=jW.b,NW=jW.r;MW[28]=258,NW[258]=28;for(var PW=AW(OW,0),FW=PW.b,IW=PW.r,LW=new TW(32768),RW=0;RW<32768;++RW){var zW=(RW&43690)>>1|(RW&21845)<<1;zW=(zW&52428)>>2|(zW&13107)<<2,zW=(zW&61680)>>4|(zW&3855)<<4,LW[RW]=((zW&65280)>>8|(zW&255)<<8)>>1}for(var BW=(function(e,t,n){for(var r=e.length,i=0,a=new TW(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new TW(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new TW(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[LW[d]>>c]=l}else for(s=new TW(r),i=0;i<r;++i)e[i]&&(s[i]=LW[o[e[i]-1]++]>>15-e[i]);return s}),VW=new wW(288),RW=0;RW<144;++RW)VW[RW]=8;for(var RW=144;RW<256;++RW)VW[RW]=9;for(var RW=256;RW<280;++RW)VW[RW]=7;for(var RW=280;RW<288;++RW)VW[RW]=8;for(var HW=new wW(32),RW=0;RW<32;++RW)HW[RW]=5;var UW=BW(VW,9,0),WW=BW(VW,9,1),GW=BW(HW,5,0),KW=BW(HW,5,1),qW=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},JW=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},YW=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},XW=function(e){return(e+7)/8|0},ZW=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new wW(e.subarray(t,n))},QW=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],$W=function(e,t,n){var r=Error(t||QW[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,$W),!n)throw r;return r},eG=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new wW(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new wW(i*3));var l=function(e){var t=n.length;if(e>t){var r=new wW(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=JW(e,d,1);var v=JW(e,d+1,3);if(d+=3,!v){var y=XW(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&$W(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=WW,m=KW,h=9,g=5;else if(v==2){var S=JW(e,d,31)+257,ee=JW(e,d+10,15)+4,C=S+JW(e,d+5,31)+1;d+=14;for(var w=new wW(C),te=new wW(19),T=0;T<ee;++T)te[kW[T]]=JW(e,d+T*3,7);d+=ee*3;for(var ne=qW(te),re=(1<<ne)-1,E=BW(te,ne,1),T=0;T<C;){var ie=E[JW(e,d,re)];d+=ie&15;var y=ie>>4;if(y<16)w[T++]=y;else{var ae=0,D=0;for(y==16?(D=3+JW(e,d,3),d+=2,ae=w[T-1]):y==17?(D=3+JW(e,d,7),d+=3):y==18&&(D=11+JW(e,d,127),d+=7);D--;)w[T++]=ae}}var oe=w.subarray(0,S),O=w.subarray(S);h=qW(oe),g=qW(O),p=BW(oe,h,1),m=BW(O,g,1)}else $W(1);if(d>_){c&&$W(0);break}}s&&l(f+131072);for(var se=(1<<h)-1,k=(1<<g)-1,ce=d;;ce=d){var ae=p[YW(e,d)&se],A=ae>>4;if(d+=ae&15,d>_){c&&$W(0);break}if(ae||$W(2),A<256)n[f++]=A;else if(A==256){ce=d,p=null;break}else{var le=A-254;if(A>264){var T=A-257,j=DW[T];le=JW(e,d,(1<<j)-1)+MW[T],d+=j}var ue=m[YW(e,d)&k],de=ue>>4;ue||$W(3),d+=ue&15;var O=FW[de];if(de>3){var j=OW[de];O+=YW(e,d)&(1<<j)-1,d+=j}if(d>_){c&&$W(0);break}s&&l(f+131072);var fe=f+le;if(f<O){var pe=a-O,me=Math.min(O,fe);for(pe+f<0&&$W(3);f<me;++f)n[f]=r[pe+f]}for(;f<fe;++f)n[f]=n[f-O]}}t.l=p,t.p=ce,t.b=f,t.f=u,p&&(u=1,t.m=h,t.d=m,t.n=g)}while(!u);return f!=n.length&&o?ZW(n,0,f):n.subarray(0,f)},tG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},nG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},rG=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var i=n.length,a=n.slice();if(!i)return{t:uG,l:0};if(i==1){var o=new wW(n[0].s+1);return o[n[0].s]=1,{t:o,l:1}}n.sort(function(e,t){return e.f-t.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=i-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<i;++r)a[r].s>f&&(f=a[r].s);var p=new TW(f+1),m=iG(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<<g;for(a.sort(function(e,t){return p[t.s]-p[e.s]||e.f-t.f});r<i;++r){var v=a[r].s;if(p[v]>t)h+=_-(1<<m-p[v]),p[v]=t;else break}for(h>>=g;h>0;){var y=a[r].s;p[y]<t?h-=1<<t-p[y]++-1:++r}for(;r>=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new wW(p),l:m}},iG=function(e,t,n){return e.s==-1?Math.max(iG(e.l,t,n+1),iG(e.r,t,n+1)):t[e.s]=n},aG=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new TW(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},oG=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},sG=function(e,t,n){var r=n.length,i=XW(t+2);e[i]=r&255,e[i+1]=r>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a<r;++a)e[i+a+4]=n[a];return(i+4+r)*8},cG=function(e,t,n,r,i,a,o,s,c,l,u){tG(t,u++,n),++i[256];for(var d=rG(i,15),f=d.t,p=d.l,m=rG(a,15),h=m.t,g=m.l,_=aG(f),v=_.c,y=_.n,b=aG(h),x=b.c,S=b.n,ee=new TW(19),C=0;C<v.length;++C)++ee[v[C]&31];for(var C=0;C<x.length;++C)++ee[x[C]&31];for(var w=rG(ee,7),te=w.t,T=w.l,ne=19;ne>4&&!te[kW[ne-1]];--ne);var re=l+5<<3,E=oG(i,VW)+oG(a,HW)+o,ie=oG(i,f)+oG(a,h)+o+14+3*ne+oG(ee,te)+2*ee[16]+3*ee[17]+7*ee[18];if(c>=0&&re<=E&&re<=ie)return sG(t,u,e.subarray(c,c+l));var ae,D,oe,O;if(tG(t,u,1+(ie<E)),u+=2,ie<E){ae=BW(f,p,0),D=f,oe=BW(h,g,0),O=h;var se=BW(te,T,0);tG(t,u,y-257),tG(t,u+5,S-1),tG(t,u+10,ne-4),u+=14;for(var C=0;C<ne;++C)tG(t,u+3*C,te[kW[C]]);u+=3*ne;for(var k=[v,x],ce=0;ce<2;++ce)for(var A=k[ce],C=0;C<A.length;++C){var le=A[C]&31;tG(t,u,se[le]),u+=te[le],le>15&&(tG(t,u,A[C]>>5&127),u+=A[C]>>12)}}else ae=UW,D=VW,oe=GW,O=HW;for(var C=0;C<s;++C){var j=r[C];if(j>255){var le=j>>18&31;nG(t,u,ae[le+257]),u+=D[le+257],le>7&&(tG(t,u,j>>23&31),u+=DW[le]);var ue=j&31;nG(t,u,oe[ue]),u+=O[ue],ue>3&&(nG(t,u,j>>5&8191),u+=OW[ue])}else nG(t,u,ae[j]),u+=D[j]}return nG(t,u,ae[256]),u+D[256]},lG=new EW([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),uG=new wW(0),dG=function(e,t,n,r,i,a){var o=a.z||e.length,s=new wW(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=lG[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new TW(32768),g=a.h||new TW(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new EW(25e3),x=new TW(288),S=new TW(32),ee=0,C=0,w=a.i||0,te=0,T=a.w||0,ne=0;w+2<o;++w){var re=y(w),E=w&32767,ie=g[re];if(h[E]=ie,g[re]=E,T<=w){var ae=o-w;if((ee>7e3||te>24576)&&(ae>423||!l)){u=cG(e,c,0,b,x,S,C,te,ne,w-ne,u),te=ee=C=0,ne=w;for(var D=0;D<286;++D)x[D]=0;for(var D=0;D<30;++D)S[D]=0}var oe=2,O=0,se=p,k=E-ie&32767;if(ae>2&&re==y(w-k))for(var ce=Math.min(f,ae)-1,A=Math.min(32767,w),le=Math.min(258,ae);k<=A&&--se&&E!=ie;){if(e[w+oe]==e[w+oe-k]){for(var j=0;j<le&&e[w+j]==e[w+j-k];++j);if(j>oe){if(oe=j,O=k,j>ce)break;for(var ue=Math.min(k,j-2),de=0,D=0;D<ue;++D){var fe=w-k+D&32767,pe=fe-h[fe]&32767;pe>de&&(de=pe,ie=fe)}}}E=ie,ie=h[E],k+=E-ie&32767}if(O){b[te++]=268435456|NW[oe]<<18|IW[O];var me=NW[oe]&31,he=IW[O]&31;C+=DW[me]+OW[he],++x[257+me],++S[he],T=w+oe,++ee}else b[te++]=e[w],++x[e[w]]}}for(w=Math.max(w,T);w<o;++w)b[te++]=e[w],++x[e[w]];u=cG(e,c,l,b,x,S,C,te,ne,w-ne,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=g,a.p=h,a.i=w,a.w=T)}else{for(var w=a.w||0;w<o+l;w+=65535){var ge=w+65535;ge>=o&&(c[u/8|0]=l,ge=o),u=sG(c,u+1,e.subarray(w,ge))}a.i=o}return ZW(s,0,r+XW(u)+i)},fG=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),pG=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=fG[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},mG=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new wW(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return dG(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},hG=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},gG=function(e,t){return e[t]|e[t+1]<<8},_G=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},vG=function(e,t){return _G(e,t)+_G(e,t+4)*4294967296},yG=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};function bG(e,t){return mG(e,t||{},0,0)}function xG(e,t){return eG(e,{i:2},t&&t.out,t&&t.dictionary)}var SG=function(e,t,n,r){for(var i in e){var a=e[i],o=t+i,s=r;Array.isArray(a)&&(s=hG(r,a[1]),a=a[0]),a instanceof wW?n[o]=[a,s]:(n[o+=`/`]=[new wW(0),s],SG(a,o,n,r))}},CG=typeof TextEncoder<`u`&&new TextEncoder,wG=typeof TextDecoder<`u`&&new TextDecoder;try{wG.decode(uG,{stream:!0})}catch{}var TG=function(e){for(var t=``,n=0;;){var r=e[n++],i=(r>127)+(r>223)+(r>239);if(n+i>e.length)return{s:t,r:ZW(e,n-1)};i?i==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function EG(e,t){if(t){for(var n=new wW(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(CG)return CG.encode(e);for(var i=e.length,a=new wW(e.length+(e.length>>1)),o=0,s=function(e){a[o++]=e},r=0;r<i;++r){if(o+5>a.length){var c=new wW(o+8+(i-r<<1));c.set(a),a=c}var l=e.charCodeAt(r);l<128||t?s(l):l<2048?(s(192|l>>6),s(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++r)&1023,s(240|l>>18),s(128|l>>12&63),s(128|l>>6&63),s(128|l&63)):(s(224|l>>12),s(128|l>>6&63),s(128|l&63))}return ZW(a,0,o)}function DG(e,t){if(t){for(var n=``,r=0;r<e.length;r+=16384)n+=String.fromCharCode.apply(null,e.subarray(r,r+16384));return n}else if(wG)return wG.decode(e);else{var i=TG(e),a=i.s,n=i.r;return n.length&&$W(8),a}}var OG=function(e,t){return t+30+gG(e,t+26)+gG(e,t+28)},kG=function(e,t,n){var r=gG(e,t+28),i=DG(e.subarray(t+46,t+46+r),!(gG(e,t+8)&2048)),a=t+46+r,o=_G(e,t+20),s=n&&o==4294967295?AG(e,a):[o,_G(e,t+24),_G(e,t+42)],c=s[0],l=s[1],u=s[2];return[gG(e,t+10),c,l,i,a+gG(e,t+30)+gG(e,t+32),u]},AG=function(e,t){for(;gG(e,t)!=1;t+=4+gG(e,t+2));return[vG(e,t+12),vG(e,t+4),vG(e,t+20)]},jG=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&$W(9),t+=r+4}return t},MG=function(e,t,n,r,i,a,o,s){var c=r.length,l=n.extra,u=s&&s.length,d=jG(l);yG(e,t,o==null?67324752:33639248),t+=4,o!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(a<0&&8),e[t++]=i&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),p=f.getFullYear()-1980;if((p<0||p>119)&&$W(10),yG(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&(yG(e,t,n.crc),yG(e,t+4,a<0?-a-2:a),yG(e,t+8,n.size)),yG(e,t+12,c),yG(e,t+14,d),t+=16,o!=null&&(yG(e,t,u),yG(e,t+6,n.attrs),yG(e,t+10,o),t+=14),e.set(r,t),t+=c,d)for(var m in l){var h=l[m],g=h.length;yG(e,t,+m),yG(e,t+2,g),e.set(h,t+4),t+=4+g}return u&&(e.set(s,t),t+=u),t},NG=function(e,t,n,r,i){yG(e,t,101010256),yG(e,t+8,n),yG(e,t+10,n),yG(e,t+12,r),yG(e,t+16,i)};function PG(e,t){t||={};var n={},r=[];SG(e,``,n,t);var i=0,a=0;for(var o in n){var s=n[o],c=s[0],l=s[1],u=l.level==0?0:8,d=EG(o),f=d.length,p=l.comment,m=p&&EG(p),h=m&&m.length,g=jG(l.extra);f>65535&&$W(11);var _=u?bG(c,l):c,v=_.length,y=pG();y.p(c),r.push(hG(l,{size:c.length,crc:y.d(),c:_,f:d,m,u:f!=o.length||m&&p.length!=h,o:i,compression:u})),i+=30+f+g+v,a+=76+2*(f+g)+(h||0)+v}for(var b=new wW(a+22),x=i,S=a-i,ee=0;ee<r.length;++ee){var d=r[ee];MG(b,d.o,d,d.f,d.u,d.c.length);var C=30+d.f.length+jG(d.extra);b.set(d.c,d.o+C),MG(b,i,d,d.f,d.u,d.c.length,d.o,d.m),i+=16+C+(d.m?d.m.length:0)}return NG(b,i,r.length,S,x),b}function FG(e,t){for(var n={},r=e.length-22;_G(e,r)!=101010256;--r)(!r||e.length-r>65558)&&$W(13);var i=gG(e,r+8);if(!i)return{};var a=_G(e,r+16),o=a==4294967295||i==65535;if(o){var s=_G(e,r-12);o=_G(e,s)==101075792,o&&(i=_G(e,s+32),a=_G(e,s+48))}for(var c=t&&t.filter,l=0;l<i;++l){var u=kG(e,a,o),d=u[0],f=u[1],p=u[2],m=u[3],h=u[4],g=u[5],_=OG(e,g);a=h,(!c||c({name:m,size:f,originalSize:p,compression:d}))&&(d?d==8?n[m]=xG(e.subarray(_,_+f),{out:new wW(p)}):$W(14,`unknown compression type `+d):n[m]=ZW(e,_,_+f))}return n}var IG=d(`fs-watcher`),LG=0;function RG(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var zG=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++LG}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),IG.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),IG.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>RG(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){IG.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),IG.debug(`All watchers disposed`)}get size(){return this.registrations.size}},BG=d(`mount-index`),VG=class{mounts=new Map;listeners=new Set;registerMount(e,t){this.mounts.get(e)?.abortController?.abort();let n=new AbortController,r={handle:t,state:{status:`pending`,indexed:0},files:new Set,directories:new Set,abortController:n};this.mounts.set(e,r),this.notifyListeners(),this.indexMount(e,r,n.signal)}unregisterMount(e){let t=this.mounts.get(e);t&&(t.abortController?.abort(),this.mounts.delete(e),this.notifyListeners())}async refreshMount(e){let t=this.mounts.get(e);if(!t)throw Error(`No mount at ${e}`);t.abortController?.abort();let n=new AbortController;t.abortController=n,t.state={status:`pending`,indexed:0},t.files.clear(),t.directories.clear(),this.notifyListeners(),await this.indexMount(e,t,n.signal)}isReady(e){return this.mounts.get(e)?.state.status===`ready`}isAnyIndexing(){for(let e of this.mounts.values())if(e.state.status===`indexing`||e.state.status===`pending`)return!0;return!1}dispose(){for(let e of this.mounts.values())e.abortController?.abort();this.mounts.clear(),this.listeners.clear()}getState(e){return this.mounts.get(e)?.state}getFiles(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;if(!t)return[...n.files];let r=[];for(let e of n.files)t(e)&&r.push(e);return r}getDirectoryEntries(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;let r=t===`/`?`/`:t+`/`,i=new Map;for(let e of n.files){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`file`)}for(let e of n.directories){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`directory`)}return[...i.entries()].map(([e,t])=>({name:e,type:t}))}hasPath(e,t){let n=this.mounts.get(e);if(n?.state.status===`ready`)return n.files.has(t)||n.directories.has(t)}notifyWrite(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.add(e);let r=e;for(;r!==t;){let e=r.lastIndexOf(`/`);if(e<=0)break;r=r.slice(0,e)||`/`,r.length>=t.length&&n.directories.add(r)}}notifyDelete(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.delete(e),n.directories.delete(e);let r=e+`/`;for(let e of n.files)e.startsWith(r)&&n.files.delete(e);for(let e of n.directories)e.startsWith(r)&&n.directories.delete(e)}notifyRename(e,t){let n=this.findMountForPath(e);if(!n)return;let r=this.mounts.get(n);if(r?.state.status===`ready`){if(r.files.has(e)){r.files.delete(e),r.files.add(t);return}if(r.directories.has(e)){r.directories.delete(e),r.directories.add(t);let n=e+`/`,i=t+`/`;for(let e of[...r.files])e.startsWith(n)&&(r.files.delete(e),r.files.add(i+e.slice(n.length)));for(let e of[...r.directories])e.startsWith(n)&&(r.directories.delete(e),r.directories.add(i+e.slice(n.length)))}}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}findMountForPath(e){let t;for(let n of this.mounts.keys())(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.length)&&(t=n);return t}notifyListeners(){for(let e of this.listeners)try{e()}catch{}}async indexMount(e,t,n){t.state={status:`indexing`,indexed:0},this.notifyListeners();try{if(await this.walkHandle(e,t.handle,t,n),n.aborted)return;t.state={status:`ready`,indexed:t.files.size+t.directories.size,total:t.files.size+t.directories.size},t.abortController=null,BG.info(`Mount indexed`,{path:e,files:t.files.size,directories:t.directories.size})}catch(r){if(n.aborted)return;let i=r instanceof Error?r.message:String(r);t.state={status:`error`,indexed:0,error:i},BG.error(`Mount indexing failed`,{path:e,error:i})}this.notifyListeners()}async walkHandle(e,t,n,r){if(r.aborted)return;n.directories.add(e);let i=t;for await(let[t,a]of i){if(r.aborted)return;let i=e===`/`?`/${t}`:`${e}/${t}`;a.kind===`file`?(n.files.add(i),n.state.indexed++):a.kind===`directory`&&await this.walkHandle(i,a,n,r),n.state.indexed%500==0&&(this.notifyListeners(),await new Promise(e=>setTimeout(e,0)))}}},HG=class{vfs;allowedPrefixes;readOnlyPrefixes;constructor(e,t,n=[]){this.vfs=e;let r=e=>{let t=v(e);return t.endsWith(`/`)?t:t+`/`};this.allowedPrefixes=t.map(r),this.readOnlyPrefixes=n.map(r)}getAllPrefixes(){let e=this.vfs.listMounts().map(e=>e.endsWith(`/`)?e:e+`/`);return[...this.allowedPrefixes,...this.readOnlyPrefixes,...e]}isAllowed(e){let t=v(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e)||t===`/`||e.startsWith(t+`/`))}isAllowedStrict(e){let t=v(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e))}isWritable(e){let t=v(e);return this.allowedPrefixes.some(e=>t===e.slice(0,-1)||t.startsWith(e))}canWrite(e){return this.isWritable(e)}checkWrite(e){if(!this.isWritable(e))throw new E(`EACCES`,`permission denied`,v(e))}async resolveAndCheckRead(e){try{let t=await this.vfs.realpath(e);if(!this.isAllowedStrict(t))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}catch(t){throw t instanceof E?t:new E(`ENOENT`,`no such file or directory`,v(e))}}async resolveAndCheckWrite(e){try{let t=await this.vfs.realpath(e);if(!this.isWritable(t))throw new E(`EACCES`,`permission denied`,v(e));return t}catch(t){throw t instanceof E?t:new E(`EACCES`,`permission denied`,v(e))}}getUnderlyingFS(){return this.vfs}isPathUnderMount(e){return this.vfs.isPathUnderMount(e)}async readFile(e,t){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let n=await this.resolveAndCheckRead(e);return this.vfs.readFile(n,t)}async readDir(e){if(!this.isAllowed(e))return[];let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return[]}let n=await this.vfs.readDir(t);if(!this.isAllowedStrict(e)){let t=v(e);return n.filter(e=>{let n=t===`/`?`/${e.name}`:`${t}/${e.name}`;return this.isAllowed(n)})}return n}async stat(e){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));if(this.isAllowedStrict(e)){let t=await this.resolveAndCheckRead(e);return this.vfs.stat(t)}return this.vfs.stat(e)}scanPathForSymlinks(e,t){let n=v(e);if(n===`/`)return!1;let r=n.slice(1).split(`/`),i=t?r.length:r.length-1,a=``;for(let e=0;e<i;e++){a=a+`/`+r[e];let t=this.vfs.lstatSync(a);if(t===null)return null;if(t.type===`symlink`)return!0}return!1}statSync(e){return!this.isAllowedStrict(e)||this.scanPathForSymlinks(e,!0)!==!1?null:this.vfs.statSync(e)}lstatSync(e){return!this.isAllowed(e)||this.scanPathForSymlinks(e,!1)!==!1?null:this.vfs.lstatSync(e)}readDirSync(e){if(!this.isAllowed(e)||this.scanPathForSymlinks(e,!0)!==!1)return null;let t=this.vfs.readDirSync(e);if(t===null)return null;if(this.isAllowedStrict(e))return t;let n=v(e);return t.filter(e=>{let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;return this.isAllowed(t)})}async realpath(e){let t;try{t=await this.vfs.realpath(e)}catch(t){throw t instanceof E?t:new E(`ENOENT`,`no such file or directory`,v(e))}if(!this.isAllowedStrict(t))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}async exists(e){if(!this.isAllowed(e))return!1;if(this.isAllowedStrict(e))try{await this.resolveAndCheckRead(e)}catch{return!1}return this.vfs.exists(e)}async readTextFile(e){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=await this.resolveAndCheckRead(e);return this.vfs.readTextFile(t)}async*walk(e){if(!this.isAllowed(e))return;let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return}for await(let e of this.vfs.walk(t))this.isAllowed(e)&&(yield e)}async writeFile(e,t,n){this.checkWrite(e);let r=this.vfs.dirname(e),i=this.vfs.basename(e);try{let t=await this.vfs.realpath(r);if(!this.isWritable(t+`/`+i))throw new E(`EACCES`,`permission denied`,v(e))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(e)).type===`symlink`&&await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.writeFile(e,t,n)}async mkdir(e,t){this.checkWrite(e);let n=this.vfs.dirname(e),r=this.vfs.basename(e);try{let t=await this.vfs.realpath(n);if(!this.isWritable(t+`/`+r))throw new E(`EACCES`,`permission denied`,v(e))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.mkdir(e,t)}async rm(e,t){this.checkWrite(e);try{(await this.vfs.lstat(e)).type===`symlink`||await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.rm(e,t)}async rename(e,t){this.checkWrite(e),this.checkWrite(t),await this.resolveAndCheckWrite(e);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.rename(e,t)}async copyFile(e,t){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));this.checkWrite(t);let n=await this.resolveAndCheckRead(e),r=this.vfs.dirname(t),i=this.vfs.basename(t);try{let e=await this.vfs.realpath(r);if(!this.isWritable(e+`/`+i))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(t)).type===`symlink`&&await this.resolveAndCheckWrite(t)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.copyFile(n,t)}async symlink(e,t){this.checkWrite(t);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.symlink(e,t)}async readlink(e){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=await this.vfs.readlink(e),n;if(n=t.startsWith(`/`)?v(t):v(this.vfs.dirname(e)+`/`+t),!this.isAllowedStrict(n))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}async lstat(e){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=v(e),n=this.vfs.dirname(t),r=this.vfs.basename(t),i;if(n===t)i=n;else try{i=await this.vfs.realpath(n)}catch{throw new E(`ENOENT`,`no such file or directory`,t)}let a=i===`/`?`/${r}`:`${i}/${r}`;if(!this.isAllowed(a))throw new E(`ENOENT`,`no such file or directory`,t);return this.vfs.lstat(a)}watch(e,t,n){if(!this.isAllowed(e))throw new E(`EACCES`,`permission denied`,v(e));let r=this.vfs.getWatcher();if(!r)throw new E(`EINVAL`,`no watcher configured`);return r.watch(v(e),t,n)}dirname(e){return this.vfs.dirname(e)}basename(e){return this.vfs.basename(e)}async dispose(){await this.vfs.dispose()}},UG=10;function WG(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`opfs`}catch{}return`memory`}var GG=class e{lfs;lfsSync;rawLfs=null;rawLfsSync=null;_ready;_readyResolved=!1;backend;mountPoints=new Map;opfsBackendFs=null;opfsHandle=null;mountRoot=``;internalMounts=new Set;watcher=null;dbName;mountSyncChannel=null;mountIndex=new VG;constructor(t,n,r,i){if(this.dbName=t,this.backend=r===`opfs`?`opfs`:`memory`,this.lfs=this.makeDeferredLfs(),this.lfsSync=this.makeDeferredLfsSync(),this._ready=this.backend===`opfs`?e.initOpfsBackend(this,i,n===!0):e.initMemoryBackend(this,t,n===!0),this._ready.then(()=>{this._readyResolved=!0},()=>{}),typeof BroadcastChannel<`u`)try{this.mountSyncChannel=new BroadcastChannel(`vfs-mount-sync:${t}`),this.mountSyncChannel.onmessage=e=>{let{type:t,path:n,descriptor:r}=e.data??{};if(t===`mount`&&typeof n==`string`&&r)this.reconstructBackendFromDescriptor(r).then(e=>{this.mountPoints.set(n,e),e.kind===`local`&&this.mountIndex.registerMount(n,e.getHandle()),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}).catch(()=>{});else if(t===`unmount`&&typeof n==`string`){let e=this.mountPoints.get(n);this.mountPoints.delete(n),this.mountIndex.unregisterMount(n),e?.close(),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}}}catch{}}static async initOpfsBackend(t,n,r){let i=n??await e.acquireOpfsHandle(t.dbName,r);await e.seedOpfsMetadataSidecarIfMissing(i);let[a,{WebAccess:s}]=await Promise.all([o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4])),o(()=>import(`./dist-CvzfEfDj2.js`),__vite__mapDeps([31,30,4]))]);await e.ensureRootMount(a);let c=`/__opfs__/${t.dbName}`,l=e.opfsBackends.get(t.dbName);if(l&&r){try{a.umount(c)}catch{}e.opfsBackends.delete(t.dbName),l=void 0}if(!l){let n=await a.resolveMountConfig({backend:s,handle:i,metadata:`/.metadata.json`});try{a.mount(c,n)}catch{}l={backendFs:n,refs:0},e.opfsBackends.set(t.dbName,l)}l.refs+=1,t.opfsBackendFs=l.backendFs.index?l.backendFs:null,t.opfsHandle=i,t.mountRoot=c,t.rawLfs=a.promises,t.rawLfsSync=a}static async initMemoryBackend(t,n,r){let i=await o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4]));await e.ensureRootMount(i);let a=`/__zenfs__/${n}`,s=e.memoryBackends.get(n);if(s&&r){try{i.umount(a)}catch{}e.memoryBackends.delete(n),s=void 0}s||(s={store:i.InMemory.create({label:n}),refs:0},e.memoryBackends.set(n,s)),s.refs+=1;try{i.mount(a,s.store)}catch{}t.mountRoot=a,t.rawLfs=i.promises,t.rawLfsSync=i,t.opfsBackendFs=null,t.opfsHandle=null}static rootMountReady=null;static memoryBackends=new Map;static opfsBackends=new Map;static async ensureRootMount(t){return e.rootMountReady||=(async()=>{await t.configureSingle({backend:t.InMemory,label:`__vfs_root__`})})(),e.rootMountReady}prefix(e){return this.mountRoot?e===`/`?this.mountRoot:this.mountRoot+e:e}unprefix(e){return!this.mountRoot||!e.startsWith(this.mountRoot)?e:e.slice(this.mountRoot.length)||`/`}makeDeferredLfs(){let e=e=>this.prefix(e),t=e=>this.unprefix(e),n=()=>{if(!this.rawLfs)throw Error(`VirtualFS used before init resolved`);return this.rawLfs};return{readFile:(t,r)=>this._readyResolved?n().readFile(e(t),r):this._ready.then(()=>n().readFile(e(t),r)),writeFile:(t,r,i)=>this._readyResolved?n().writeFile(e(t),r,i):this._ready.then(()=>n().writeFile(e(t),r,i)),readdir:t=>this._readyResolved?n().readdir(e(t)):this._ready.then(()=>n().readdir(e(t))),mkdir:(t,r)=>this._readyResolved?n().mkdir(e(t),r):this._ready.then(()=>n().mkdir(e(t),r)),rmdir:t=>this._readyResolved?n().rmdir(e(t)):this._ready.then(()=>n().rmdir(e(t))),unlink:t=>this._readyResolved?n().unlink(e(t)):this._ready.then(()=>n().unlink(e(t))),rename:(t,r)=>this._readyResolved?n().rename(e(t),e(r)):this._ready.then(()=>n().rename(e(t),e(r))),stat:t=>this._readyResolved?n().stat(e(t)):this._ready.then(()=>n().stat(e(t))),lstat:t=>this._readyResolved?n().lstat(e(t)):this._ready.then(()=>n().lstat(e(t))),symlink:(t,r)=>{let i=t.startsWith(`/`)?e(t):t;return this._readyResolved?n().symlink(i,e(r)):this._ready.then(()=>n().symlink(i,e(r)))},readlink:async r=>(this._readyResolved||await this._ready,t(await n().readlink(e(r)))),realpath:async r=>{this._readyResolved||await this._ready;let i=n();return typeof i.realpath==`function`?t(await i.realpath(e(r))):e(r)}}}makeDeferredLfsSync(){let e=e=>this.prefix(e),t=e=>this.unprefix(e);return{readdirSync:t=>{let n=this.rawLfsSync;return n?.readdirSync?n.readdirSync(e(t)):void 0},statSync:t=>{let n=this.rawLfsSync;return n?.statSync?n.statSync(e(t)):void 0},lstatSync:t=>{let n=this.rawLfsSync;return n?.lstatSync?n.lstatSync(e(t)):void 0},readlinkSync:n=>{let r=this.rawLfsSync;return r?.readlinkSync?t(r.readlinkSync(e(n))):void 0}}}static async seedOpfsMetadataSidecarIfMissing(e){let t=`.metadata.json`;try{await e.getFileHandle(t);return}catch(e){if(e?.name!==`NotFoundError`)throw e}let n=await(await e.getFileHandle(t,{create:!0})).createWritable(),r=JSON.stringify({version:1,maxSize:4294967295,entries:{}});await n.write(r),await n.close()}static async acquireOpfsHandle(e,t){let n=navigator.storage;if(!n?.getDirectory)throw new E(`EINVAL`,`OPFS is not available in this environment`);let r=await n.getDirectory();if(t)try{await r.removeEntry(e,{recursive:!0})}catch{}return r.getDirectoryHandle(e,{create:!0})}static async create(t){let n=t?.dbName??`browser-fs`,r=t?.wipe===!0,i=new e(n,r,t?.backend??WG());return await i._ready,r&&await xW().catch(()=>{}),i}async flush(){await this.writeOpfsMetadataSidecar()}async writeOpfsMetadataSidecar(){if(this.backend!==`opfs`)return;let e=this.opfsBackendFs,t=this.opfsHandle;if(!e||!t)return;let n=JSON.stringify(e.index.toJSON()),r=await(await t.getFileHandle(`.metadata.json`,{create:!0})).createWritable();await r.write(n),await r.close()}canWrite(e){return!0}setWatcher(e){this.watcher=e}getWatcher(){return this.watcher}async dispose(){if(this.mountSyncChannel?.close(),this.mountSyncChannel=null,this.watcher?.dispose(),this.watcher=null,this.mountIndex.dispose(),await this.writeOpfsMetadataSidecar(),this.mountRoot){let t=this.backend===`opfs`?e.opfsBackends:e.memoryBackends,n=t.get(this.dbName);if(n&&(--n.refs,n.refs<=0)){t.delete(this.dbName);try{(await o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4]))).umount(this.mountRoot)}catch{}}}}readDirSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.readdirSync!=`function`||typeof n.lstatSync!=`function`)return null;try{let e=n.readdirSync(t),r=[];for(let i of e){let e=t===`/`?`/${i}`:`${t}/${i}`;try{let t=n.lstatSync(e),a=t.isSymbolicLink()?`symlink`:t.isDirectory()?`directory`:`file`;r.push({name:i,type:a})}catch{}}return r}catch{return null}}statSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.statSync!=`function`||typeof n.lstatSync!=`function`||typeof n.readlinkSync!=`function`)return null;let r=t;for(let e=0;e<=UG;e++){let e;try{e=n.lstatSync(r)}catch{return null}if(!e.isSymbolicLink())return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs};let t;try{t=n.readlinkSync(r)}catch{return null}r=t.startsWith(`/`)?v(t):v(b(_(r).dir,t))}return null}lstatSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.lstatSync!=`function`)return null;try{let e=n.lstatSync(t);if(e.isSymbolicLink()){let r=n.readlinkSync?n.readlinkSync(t):``;return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:r}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return null}}async mount(e,t){let n=v(e);if(this.mountPoints.has(n))throw new E(`EEXIST`,`mount point is already mounted`,n);try{if((await this.lstat(n)).type!==`directory`)throw new E(`ENOTDIR`,`mount point must be a directory`,n);if((await this.readDir(n)).length>0)throw new E(`ENOTEMPTY`,`mount point must be empty to avoid shadowing existing files`,n)}catch(e){if(!(e instanceof E)||e.code!==`ENOENT`)throw e}let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),t.kind===`local`&&this.mountIndex.registerMount(n,t.getHandle());let i=t.kind===`local`?{kind:`local`,mountId:t.mountId,idbHandleKey:n}:t.kind===`s3`?{kind:`s3`,mountId:t.mountId,source:t.source,profile:t.profile??`default`}:{kind:`da`,mountId:t.mountId,source:t.source,profile:t.profile??`default`};try{this.mountSyncChannel?.postMessage({type:`mount`,path:n,descriptor:i})}catch{}this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}]);try{await _W({targetPath:n,descriptor:i,createdAt:Date.now()},t.kind===`local`?t.getHandle():void 0)}catch{}}async unmount(e){let t=v(e),n=this.mountPoints.get(t);this.mountPoints.delete(t),this.mountIndex.unregisterMount(t);try{this.mountSyncChannel?.postMessage({type:`unmount`,path:t})}catch{}this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close();try{await vW(t)}catch{}}async reconstructBackendFromDescriptor(e){switch(e.kind){case`local`:{let t=await bW(e.idbHandleKey);if(!t)throw Error(`no handle stored for ${e.idbHandleKey}`);return _U.fromHandle(t,{mountId:e.mountId})}case`s3`:{let{S3MountBackend:t,RemoteMountCache:n,makeSignedFetchS3:r}=await o(async()=>{let{S3MountBackend:e,RemoteMountCache:t,makeSignedFetchS3:n}=await Promise.resolve().then(()=>dW);return{S3MountBackend:e,RemoteMountCache:t,makeSignedFetchS3:n}},void 0),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r(e.profile)})}case`da`:{let{DaMountBackend:t,RemoteMountCache:n,makeSignedFetchDa:r}=await o(async()=>{let{DaMountBackend:e,RemoteMountCache:t,makeSignedFetchDa:n}=await Promise.resolve().then(()=>dW);return{DaMountBackend:e,RemoteMountCache:t,makeSignedFetchDa:n}},void 0),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r()})}}}listMounts(){let e=[];for(let t of this.mountPoints.keys())this.internalMounts.has(t)||e.push(t);return e}listInternalMounts(){return[...this.internalMounts]}async mountInternal(e,t){let n=v(e);if(this.mountPoints.has(n))throw new E(`EEXIST`,`mount point is already mounted`,n);let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),this.internalMounts.add(n),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}async unmountInternal(e){let t=v(e);if(!this.internalMounts.has(t))throw new E(`ENOENT`,`not an internal mount point`,t);let n=this.mountPoints.get(t);this.mountPoints.delete(t),this.internalMounts.delete(t),this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close()}getMountIndex(){return this.mountIndex}async refreshMount(e,t){let n=v(e),r=this.mountPoints.get(n);if(!r)throw new E(`ENOENT`,`not a mount point`,n);let i=await r.refresh(t);return r.kind===`local`&&await this.mountIndex.refreshMount(n),i}isPathUnderMount(e){for(let t of this.mountPoints.keys())if(e===t||e.startsWith(t+`/`))return!0;return!1}static rebrandFsError(e,t){if(e instanceof E){let n=`${e.code}: `,r=e.message;throw r.startsWith(n)&&(r=r.slice(n.length)),e.path&&r.endsWith(` '${e.path}'`)&&(r=r.slice(0,r.length-` '${e.path}'`.length)),new E(e.code,r,t)}throw e}findMount(e){let t=null;for(let[n,r]of this.mountPoints)(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.mountPath.length)&&(t={mountPath:n,backend:r});return t?e===t.mountPath?{path:t.mountPath,backend:t.backend,relParts:[]}:{path:t.mountPath,backend:t.backend,relParts:e.slice(t.mountPath.length+1).split(`/`).filter(Boolean)}:null}async readFile(t,n){let r=v(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new E(`EISDIR`,`is a directory`,r);let t=i.relParts.join(`/`);try{let e=await i.backend.readFile(t);return(n?.encoding??`utf-8`)===`utf-8`?new TextDecoder(`utf-8`).decode(e):e}catch(t){e.rebrandFsError(t,r)}}let a=await this.resolveSymlinks(r);try{return(n?.encoding??`utf-8`)===`utf-8`?await this.lfs.readFile(a,{encoding:`utf8`}):await this.lfs.readFile(a)}catch(e){throw this.convertError(e,r)}}async writeFile(t,n,r){let i=v(t),a=this.findMount(i);if(a){if(a.relParts.length===0)throw new E(`EISDIR`,`is a directory`,i);let t=a.relParts.join(`/`),r=!1;try{await this.stat(i),r=!0}catch{}let o=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);try{await a.backend.writeFile(t,o)}catch(t){e.rebrandFsError(t,i)}this.watcher?.notify([{type:r?`modify`:`create`,path:i,entryType:`file`}]),this.mountIndex.notifyWrite(i);return}let o;try{o=await this.resolveSymlinks(i)}catch{o=i}let s=!1;try{await this.lfs.stat(o),s=!0}catch{}let{dir:c}=_(o);c!==`/`&&await this.mkdir(c,{recursive:!0});try{await this.lfs.writeFile(o,n)}catch(e){throw this.convertError(e,i)}this.watcher?.notify([{type:s?`modify`:`create`,path:o,entryType:`file`}])}async readDir(t){let n=v(t),r=this.findMount(n);if(r){let t=this.mountIndex.getDirectoryEntries(r.path,n);if(t!==void 0){let e=new Map;for(let n of t)e.set(n.name,{name:n.name,type:n.type});let r=n===`/`?`/`:`${n}/`;for(let t of this.mountPoints.keys()){if(t===n||!t.startsWith(r))continue;let i=t.slice(r.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}return[...e.values()]}let i=r.relParts.join(`/`)||`/`,a;try{a=await r.backend.readDir(i)}catch(t){e.rebrandFsError(t,n)}let o=new Map;for(let e of a)o.set(e.name,{name:e.name,type:e.kind===`directory`?`directory`:`file`});let s=n===`/`?`/`:`${n}/`;for(let e of this.mountPoints.keys()){if(e===n||!e.startsWith(s))continue;let t=e.slice(s.length);!t||t.includes(`/`)||o.has(t)||o.set(t,{name:t,type:`directory`})}return[...o.values()]}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.readdir(i),t=[];for(let n of e){let e=i===`/`?`/${n}`:`${i}/${n}`;try{let r=await this.lfs.lstat(e);r.isSymbolicLink()?t.push({name:n,type:`symlink`}):t.push({name:n,type:r.isDirectory()?`directory`:`file`})}catch{}}return t}catch(e){throw this.convertError(e,n)}}async mkdir(t,n){let r=v(t);if(r===`/`)return;let i=this.findMount(r);if(i){if(i.relParts.length===0)return;let t=i.relParts.join(`/`),n=await this.exists(r);try{await i.backend.mkdir(t)}catch(t){e.rebrandFsError(t,r)}n||this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}]);return}if(n?.recursive){let e=r.split(`/`).filter(Boolean),t=``;for(let n of e){t+=`/`+n;try{await this.lfs.mkdir(t)}catch(e){if(e instanceof Error&&!e.message.includes(`EEXIST`))throw this.convertError(e,t)}}}else{try{await this.lfs.mkdir(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}])}}async rm(t,n){let r=v(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new E(`EINVAL`,`cannot remove a mount point — use unmount`,r);let t;try{t=(await this.stat(r)).type}catch{}let a=i.relParts.join(`/`);try{await i.backend.remove(a,{recursive:n?.recursive})}catch(t){e.rebrandFsError(t,r)}this.watcher?.notify([{type:`delete`,path:r,entryType:t}]),this.mountIndex.notifyDelete(r);return}try{let e=await this.lfs.lstat(r);e.isSymbolicLink()?await this.lfs.unlink(r):e.isDirectory()?n?.recursive?await this.rmRecursive(r):await this.lfs.rmdir(r):await this.lfs.unlink(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`delete`,path:r}])}async rmRecursive(e){let t=await this.lfs.readdir(e);for(let n of t){let t=e===`/`?`/${n}`:`${e}/${n}`;(await this.lfs.stat(t)).isDirectory()?await this.rmRecursive(t):await this.lfs.unlink(t)}await this.lfs.rmdir(e)}async stat(t){let n=v(t),r=this.findMount(n);if(r){if(r.relParts.length===0)try{let e=await this.lfs.stat(n);return{type:`directory`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return{type:`directory`,size:0,mtime:Date.now(),ctime:Date.now()}}let t=r.relParts.join(`/`);try{let e=await r.backend.stat(t);return{type:e.kind===`directory`?`directory`:`file`,size:e.size,mtime:e.mtime,ctime:e.mtime}}catch(t){e.rebrandFsError(t,n)}}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.stat(i);return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,n)}}async exists(e){let t=v(e),n=this.findMount(t);if(n){if(n.relParts.length===0)return!0;try{return await this.stat(t),!0}catch{return!1}}try{return await this.stat(t),!0}catch{try{return await this.lfs.lstat(t),!0}catch{return!1}}}async rename(e,t){let n=v(e),r=v(t),i;try{i=(await this.lstat(n)).type}catch{}try{await this.lfs.rename(n,r)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`delete`,path:n,entryType:i},{type:`create`,path:r,entryType:i}]),this.mountIndex.notifyRename(n,r)}async readTextFile(e){return await this.readFile(e,{encoding:`utf-8`})}async*walk(e,t){let n=v(e);if(this.mountPoints.size>0&&this.mountPoints.has(n)&&![...this.mountPoints.keys()].some(e=>e!==n&&e.startsWith(n+`/`))&&this.mountIndex.isReady(n)){let e=this.mountIndex.getFiles(n);if(e){for(let t of e)yield t;return}}let r=t??new Set,i;try{i=await this.realpath(n)}catch{i=n}if(r.has(i))return;r.add(i);let a=await this.readDir(n);for(let e of a){let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;if(e.type===`file`)yield t;else if(e.type===`symlink`)try{let e=await this.stat(t);e.type===`file`?yield t:e.type===`directory`&&(yield*this.walk(t,r))}catch{}else yield*this.walk(t,r)}}async copyFile(e,t){if((await this.stat(e)).type===`directory`)throw new E(`EISDIR`,`is a directory`,e);let n=await this.readFile(e,{encoding:`binary`});await this.writeFile(t,n)}dirname(e){return _(v(e)).dir}basename(e){return _(v(e)).base}async symlink(e,t){let n=v(t);if(this.findMount(n))throw new E(`EINVAL`,`symlinks not supported on mounted filesystems`,n);let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.symlink(e,n)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`create`,path:n,entryType:`symlink`}])}async readlink(e){let t=v(e);try{return await this.lfs.readlink(t)}catch(e){throw this.convertError(e,t)}}async lstat(e){let t=v(e);if(this.findMount(t))return this.stat(t);try{let e=await this.lfs.lstat(t);if(e.isSymbolicLink()){let n=await this.lfs.readlink(t);return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:n}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,t)}}async realpath(e){let t=v(e);if(this.findMount(t))return t;let n=0,r=t.split(`/`).filter(Boolean),i=`/`;for(let e=0;e<r.length;e++){let a=i===`/`?`/${r[e]}`:`${i}/${r[e]}`;for(;;){let o;try{o=await this.lfs.lstat(a)}catch(n){let o=this.convertError(n,t);if(o.code===`ENOENT`&&e===r.length-1)return i=a,i;throw o}if(!o.isSymbolicLink()){i=a;break}if(++n>UG)throw new E(`ELOOP`,`too many symbolic links encountered`,t);let s;try{s=await this.lfs.readlink(a)}catch(e){throw this.convertError(e,t)}a=s.startsWith(`/`)?v(s):v(b(_(a).dir,s))}}return i}async resolveSymlinks(e){return this.findMount(e)?e:this.realpath(e)}convertError(e,t){if(e instanceof E)return e;let n=e?.code;if(typeof n==`string`){let r=n;if([`ENOENT`,`EEXIST`,`ENOTDIR`,`EISDIR`,`ENOTEMPTY`,`EINVAL`,`EACCES`,`ELOOP`,`EBUSY`,`EFBIG`,`EBADF`,`EIO`].includes(r))return new E(r,(e instanceof Error?e.message:String(e))||r,t)}let r=e instanceof Error?e.message:String(e);return r.includes(`ENOENT`)?new E(`ENOENT`,`no such file or directory`,t):r.includes(`EEXIST`)?new E(`EEXIST`,`file already exists`,t):r.includes(`ENOTDIR`)?new E(`ENOTDIR`,`not a directory`,t):r.includes(`EISDIR`)?new E(`EISDIR`,`is a directory`,t):r.includes(`ENOTEMPTY`)?new E(`ENOTEMPTY`,`directory not empty`,t):r.includes(`ELOOP`)?new E(`ELOOP`,`too many levels of symbolic links`,t):new E(`EINVAL`,r,t)}},KG=e({FsError:()=>E,FsWatcher:()=>zG,MountIndex:()=>VG,RestrictedFS:()=>HG,VirtualFS:()=>GG,joinPath:()=>b,normalizePath:()=>v,pathSegments:()=>y,resolveVfsBackendFromEnv:()=>WG,splitPath:()=>_}),qG=`.skill`,JG=1e3,YG=`/workspace/skills`,XG=`SKILL.md`,ZG=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function QG(e){if(e===`__MACOSX`||e.startsWith(`__MACOSX/`))return!0;let t=e.includes(`/`)?e.slice(e.lastIndexOf(`/`)+1):e;return!!(t===`.DS_Store`||t===`Thumbs.db`||t===`desktop.ini`||t.startsWith(`._`))}var $G=class extends Error{};function eK(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function tK(e){if(!ZG.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function nK(e){let t=[];for(let[n,r]of Object.entries(e)){let e=eK(n);e&&(QG(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function rK(e){let t=e.filter(e=>e.path===`SKILL.md`||e.path.endsWith(`/SKILL.md`));if(t.length===0)throw Error(`Skill archive is missing ${XG}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${XG} files.`);return t[0]}function iK(e){let t=0,n=0;return FG(e,{filter(e){if(t++,t>1e3)throw new $G(`Skill archives may contain at most ${JG} entries.`);if(n+=e.originalSize,n>52428800)throw new $G(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function aK(e){return b(YG,`.${e}.tmp-${`${Date.now()}-${Math.random().toString(16).slice(2,8)}`}`)}function oK(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}async function sK(e,t){if(!t.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${qG} archives can be installed with drag and drop.`);if(t.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`);let n;try{n=iK(new Uint8Array(await t.arrayBuffer()))}catch(e){if(e instanceof $G)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}let r=nK(n),i=rK(r),a=oK(t.name,i.path);tK(a);let o=b(YG,a);if(await e.exists(o))throw Error(`Skill "${a}" already exists at ${o}.`);let s=aK(a),c=i.path===`SKILL.md`?``:i.path.slice(0,-(XG.length+1));await e.mkdir(s,{recursive:!0});try{let t=0;for(let n of r){if(c&&(n.path===c||!n.path.startsWith(`${c}/`)))continue;let r=c?n.path.slice(c.length+1):n.path;if(!r)continue;let i=b(s,r),{dir:a}=_(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,n.bytes),t++}return await e.rename(s,o),{skillName:a,destinationPath:o,fileCount:t}}catch(t){throw await e.exists(s)&&await e.rm(s,{recursive:!0}),t}}function cK(e){return e.toLowerCase().endsWith(qG)}function lK(e){return Array.from(e).find(e=>cK(e.name))??null}function uK(e){if(!e)return!1;if(e.items){for(let t of Array.from(e.items))if(t.kind===`file`)return!0}return!1}function dK(e){if(!e)return null;if(e.files){let t=lK(e.files);if(t)return t}if(!e.items)return null;for(let t of Array.from(e.items)){if(t.kind&&t.kind!==`file`)continue;let e=t.getAsFile?.();if(e&&cK(e.name))return e}return null}function fK(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||cK(e.name)||(n.add(e),t.push(e))};if(e.files)for(let t of Array.from(e.files))r(t);if(e.items)for(let t of Array.from(e.items))t.kind&&t.kind!==`file`||r(t.getAsFile?.());return t}function pK(){let e=document.createElement(`div`);e.className=`skill-drop-overlay`;let t=document.createElement(`div`);t.className=`skill-drop-overlay__card`;let n=document.createElement(`div`);n.className=`skill-drop-overlay__title`,t.appendChild(n);let r=document.createElement(`div`);return r.className=`skill-drop-overlay__desc`,t.appendChild(r),e.appendChild(t),document.body.appendChild(e),{show(t,i){n.textContent=t,r.textContent=i,e.classList.add(`skill-drop-overlay--visible`)},hide(){e.classList.remove(`skill-drop-overlay--visible`)}}}function mK(){let e=document.createElement(`div`);return e.className=`skill-drop-toast-container`,document.body.appendChild(e),(t,n)=>{let r=document.createElement(`div`);r.className=`skill-drop-toast skill-drop-toast--${n}`,r.textContent=t,e.appendChild(r),requestAnimationFrame(()=>r.classList.add(`skill-drop-toast--visible`)),window.setTimeout(()=>{r.classList.remove(`skill-drop-toast--visible`),window.setTimeout(()=>r.remove(),180)},4200)}}function hK(e){let{fs:t,onNotice:n,onInstalled:r,onAttachFiles:i}=e,a=pK(),o=0,s=!1,c=()=>{o=0,s||a.hide()};window.addEventListener(`dragenter`,e=>{uK(e.dataTransfer)&&(e.preventDefault(),o+=1,s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{uK(e.dataTransfer)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragleave`,()=>{o!==0&&(o=Math.max(0,o-1),o===0&&!s&&a.hide())}),window.addEventListener(`dragend`,c),window.addEventListener(`blur`,c),window.addEventListener(`drop`,async e=>{let l=dK(e.dataTransfer),u=fK(e.dataTransfer);if(!l&&u.length===0){c();return}if(e.preventDefault(),o=0,l&&s){a.hide(),n(`Another .skill installation is already in progress.`,`error`);return}if(u.length>0&&i)try{await i(u)}catch(e){n(`Failed to attach dropped files: ${e instanceof Error?e.message:String(e)}`,`error`)}if(l){s=!0,a.show(`Installing skill…`,l.name);try{let e=await sK(t,l);await r(),n(`Installed "${e.skillName}" to ${e.destinationPath} (${e.fileCount} files).`,`success`)}catch(e){n(`Failed to install dropped skill: ${e instanceof Error?e.message:String(e)}`,`error`)}finally{s=!1,a.hide()}}else a.hide()})}async function gK(e){let{layout:t,log:n}=e,{VirtualFS:r,resolveVfsBackendFromEnv:i}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>KG);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{warnIfPanelVfsConstructionUnderOpfs:a}=await o(async()=>{let{warnIfPanelVfsConstructionUnderOpfs:e}=await import(`./panel-vfs-guard-1E455_lR.js`);return{warnIfPanelVfsConstructionUnderOpfs:e}},[]),s=i();a(s,n);let c=s===`opfs`,l=await r.create({dbName:`slicc-fs`,...c?{backend:`memory`}:{}});c||(t.panels.fileBrowser.setFs(l),n.info(`File browser wired to shared VFS (local IndexedDB)`)),yW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await SW(e,l,n);t.length!==0&&n.warn(`Some mounts could not be recovered in the panel VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>n.warn(`Failed to restore persisted mounts in panel VFS`,e));let u={current:l};CW({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>u.current,logger:n}),hK({fs:l,onNotice:mK(),onInstalled:async()=>{await t.panels.fileBrowser.refresh()},onAttachFiles:e=>t.panels.chat.addAttachmentsFromFiles(e)});let{registerSessionCostsProvider:d}=await o(async()=>{let{registerSessionCostsProvider:e}=await import(`./cost-command-Dra1U3jF.js`);return{registerSessionCostsProvider:e}},[]);return d(()=>new Promise(e=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`get-session-costs`}},t=>{if(chrome.runtime.lastError||!t?.ok){e([]);return}e(t.costs??[])})})),{localFs:l,useRpcVfs:c,previewVfsReader:u}}function _K(e){let{client:t,layout:n,log:r}=e;(async()=>{try{let{RemoteTerminalView:e}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-CP8Lf876.js`);return{RemoteTerminalView:e}},__vite__mapDeps([32,1,27,4,14,28,33,34,35])),{fetchSecretEnvVars:i}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([36,14])),a=await i(),s=new e({client:t,cwd:`/`,env:Object.keys(a).length>0?a:void 0});await n.panels.terminal.mountRemoteShell(s),window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0}),r.info(`Panel terminal mounted as RemoteTerminalView (offscreen TerminalSessionHost)`)}catch(e){r.warn(`Failed to mount remote terminal view`,e)}})()}function vK(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function yK(e){let{reader:t,writer:n}=e;return{readFile:(e,n)=>t.readFile(e,n),readDir:e=>t.readDir(e),stat:e=>t.stat(e),writeFile:(e,t,r)=>n.writeFile(e,t,r),mkdir:(e,t)=>n.mkdir(e,t),rm:(e,t)=>n.rm(e,t),flush:()=>n.flush(),exists:async e=>{try{return await t.stat(e),!0}catch(e){return e instanceof E&&e.code,!1}},walk:async function*(e){let n=[e],r=new Set;for(;n.length>0;){let e=n.pop();if(r.has(e))continue;r.add(e);let i;try{i=await t.readDir(e)}catch{continue}for(let r of i){let i=vK(e,r.name);if(r.type===`file`)yield i;else if(r.type===`directory`)n.push(i);else if(r.type===`symlink`)try{let e=await t.stat(i);e.type===`file`?yield i:e.type===`directory`&&n.push(i)}catch{}}}}}}var bK=d(`sprinkle-icon`),xK=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">`,SK=`</svg>`,CK=null;function wK(){return CK||=o(()=>Promise.resolve().then(()=>RP).then(e=>e.icons),void 0),CK}function TK(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function EK(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function DK(e){return`${xK}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${EK(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${SK}`}async function OK(e){let t=TK(e),n=(await wK())[t];return n?DK(n):null}function kK(e){return/^\s*<svg\b/i.test(e)}function AK(e){return/^data:/i.test(e)}function jK(e){return e.startsWith(`/`)}function MK(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function NK(e){return/^[a-z][a-z0-9-]*$/.test(e)}function PK(e){return`<img src="${EK(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function FK(e,t){if(!e)return null;if(kK(e))return PK(IK(e));if(AK(e))return PK(e);if(jK(e)&&t){try{if(MK(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=LK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?PK(IK(r)):null}if(MK(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return PK(`data:${RK(e)};base64,${zK(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=LK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return PK(IK(r))}catch(t){bK.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(NK(e)){let t=await OK(e);if(t)return t;bK.warn(`Unknown Lucide icon name`,{spec:e})}return null}function IK(e){return`data:image/svg+xml;base64,${zK(new TextEncoder().encode(e))}`}function LK(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function RK(e){let t=e.toLowerCase();return t.endsWith(`.png`)?`image/png`:t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`image/jpeg`:t.endsWith(`.webp`)?`image/webp`:t.endsWith(`.gif`)?`image/gif`:t.endsWith(`.ico`)?`image/x-icon`:`application/octet-stream`}function zK(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode.apply(null,Array.from(e.subarray(r,r+n)));return typeof btoa<`u`?btoa(t):Buffer.from(t,`binary`).toString(`base64`)}var BK=[`/shared/sprinkles`],VK=new Set([`welcome`,`connect-llm`]);async function HK(e){let t=new Map;for(let n of BK)await e.exists(n)&&await UK(e,n,t);return await UK(e,`/`,t),t}async function UK(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=WK(r);if(!VK.has(t)&&!n.has(t)){let i;try{i=await e.readFile(r,{encoding:`utf-8`})??``}catch{i=``}n.set(t,{name:t,path:r,title:GK(i,t),autoOpen:KK(i),icon:qK(i)})}}}function WK(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function GK(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function KK(e){return/data-sprinkle-autoopen\b/.test(e)}function qK(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=JK(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=YK(i,`href`);if(a!==void 0)return a.trim()}let r=YK(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function JK(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function YK(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var XK=e({SprinkleManager:()=>oq,readOpenSprinklesFromUrl:()=>eq,writeOpenSprinklesToUrl:()=>tq}),ZK=d(`sprinkle-manager`),QK=`slicc-open-sprinkles`,$K=`sprinkles`;function eq(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get($K);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function tq(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete($K):t.searchParams.set($K,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var nq=`slicc-known-sprinkles`,rq=`slicc-autoopened-once`,iq=[`/workspace`,`/shared`,`/scoops`],aq=250,oq=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,n,r,i={}){this.fs=e;let a=async()=>{let e=`image/png`,t=Ri(),n=Li();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);if(t&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let r,i,a;if(t){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),i=n.videoWidth,a=n.videoHeight;let o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);s.drawImage(n,0,0,i,a),r=await(await new Promise((t,n)=>{o.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:5*6e4});r=t.bytes,i=t.width,a=t.height}let o=new Uint8Array(r),s=[],c=8192;for(let e=0;e<o.length;e+=c)s.push(String.fromCharCode(...o.subarray(e,e+c)));return{base64:btoa(s.join(``)),width:i,height:a,mimeType:e}};this.bridge=new sI(e,t,e=>this.close(e),e=>this.minimize(e),r,i.onAttachImage??(()=>{}),a,i.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=n,this.autoOpenBehavior=i.autoOpenBehavior??`activate`,this.onSendToSprinkle=i.onSendToSprinkle,this.inlineSprinkles=i.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&ZK.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=eq();if(e!==null){for(let t of e)try{await this.open(t)}catch{ZK.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(QK);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{ZK.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(QK)}catch{}}else{let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(r.autoOpen&&!t.has(r.name))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{ZK.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}}}catch{}await this.surfaceUnseenSprinkles()}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:i.autoOpen?n:!0}),i.autoOpen&&r.add(i.name),ZK.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{ZK.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){try{let e=localStorage.getItem(nq);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(nq,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(rq);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(rq,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(QK,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,tq([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<aq))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name))if(i=!0,a.autoOpen){if(n.has(a.name)){ZK.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),ZK.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{ZK.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),ZK.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{ZK.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await HK(this.fs),ZK.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){ZK.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){ZK.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){ZK.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){ZK.info(`Sprinkle already open`,{name:e});return}let r=this.availableSprinkles.get(e);if(r||=(await this.refresh(),this.availableSprinkles.get(e)),!r)throw Error(`Sprinkle not found: ${e}`);let i=await this.fs.readFile(r.path,{encoding:`utf-8`});if(i==null)throw Error(`Failed to read sprinkle content: ${r.path} (file may be corrupted or missing)`);let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i),o=document.createElement(`div`);o.className=`sprinkle-panel`,o.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow: hidden;`,o.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:o}),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,r.title,o,t,{...n,icon:r.icon});let s=new DI(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),wi(e),ZK.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),ZK.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){if(this.attentionOnly.has(e)){this.markActivated(e);return}if(!this.openSprinkles.has(e))try{await this.open(e,t)}catch(t){ZK.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),ZK.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),ZK.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=()=>{t||=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{ZK.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=iq.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),n));this.watcherUnsub=()=>{for(let e of r)e();t&&=(clearTimeout(t),null)}}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t){let n=this.openSprinkles.get(e);if(!n){ZK.warn(`Cannot send to closed sprinkle`,{name:e});return}if(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),this.onSendToSprinkle)try{this.onSendToSprinkle(e,t)}catch(t){ZK.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};function sq(e){let t=null,n=Promise.resolve(),r=async()=>{let{TerminalSessionClient:t}=await o(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-C_tYJ1IB.js`);return{TerminalSessionClient:e}},[]),n=new t({client:e,sid:`sprinkle-exec-${Date.now()}`});return await n.open({cwd:`/`}),n},i=()=>(t||=r().catch(e=>{throw t=null,e}),t);return async e=>{let t=n.then(()=>i().then(t=>t.exec(e)),()=>i().then(t=>t.exec(e)));return n=t.catch(()=>void 0),t}}async function cq(e){let{layout:t,client:n,localFs:r,writableFs:i,useRpcVfs:a,inlineSprinkles:o,log:s}=e,c=new oq(a?yK({reader:i,writer:i}):r,async t=>lq(t,c,e),{addSprinkle:(e,n,r,i,a)=>t.addSprinkle(e,n,r,i,a),removeSprinkle:e=>t.removeSprinkle(e),minimizeSprinkle:e=>t.minimizeSprinkle(e),registerSprinkle:(e,n,r)=>t.registerSprinkle(e,n,r?.icon,r?.zone),unregisterSprinkle:e=>t.unregisterSprinkle(e),closeSprinkleContent:e=>t.closeSprinkleContent(e)},()=>{let e=n.getScoops().find(e=>e.isCone);e&&n.stopScoop(e.jid)},{autoOpenBehavior:`attention`,onAttachImage:(e,n,r)=>t.panels.chat.addImageAttachment(e,n,r),inlineSprinkles:o,execHandler:sq(n)});return window.__slicc_sprinkleManager=c,ZI(sq(n)),window.__slicc_reloadSkills=()=>(chrome.runtime.sendMessage({source:`panel`,payload:{type:`reload-skills`}}),Promise.resolve()),n.setSprinkleOpHandler(e=>{let{id:t,op:n,name:r,data:i}=e;dq(c,t,n,r,i)}),await c.refresh(),t.onSprinkleClose=e=>c.close(e),t.onSprinkleActivate=e=>{c.activate(e)},t.getAvailableSprinkles=()=>[],t.onOpenSprinkle=(e,t)=>c.open(e,t),t.resolveSprinkleIcon=e=>FK(e,r),t.updateAddButtons(),await c.restoreOpenSprinkles(),s.info(`SprinkleManager initialized (extension mode)`),c}async function lq(e,t,n){if(e.type===`sprinkle`){if(n.interceptWelcomeLick(e)){e.body?.action===`shortcut-migrate`&&t.close(`welcome`);return}if(e.sprinkleName===`welcome`&&e.body?.action===`request-mount`){await uq(t,n.log);return}n.client.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}}async function uq(e,t){let n=()=>e.sendToSprinkle(`welcome`,{action:`mount-cancelled`});try{let r=await T();if(r.cancelled)return n();if(r.error)return t.warn(`Mount picker popup failed`,r.error),n();if(!r.handleInIdb||typeof r.idbKey!=`string`)return t.warn(`Mount picker popup returned unexpected result`,r),n();let i=await ne(r.idbKey);if(!i)return t.warn(`Mount picker popup did not store a handle`),n();await w(i),await xU(i),e.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:i.name})}catch(e){t.warn(`Mount picker failed`,e),n()}}async function dq(e,t,n,r,i){try{let a;switch(n){case`list`:await e.refresh(),a=e.available();break;case`opened`:a=e.opened();break;case`refresh`:await e.refresh(),a=e.available().length;break;case`open`:await e.open(r),a=!0;break;case`close`:e.close(r),a=!0;break;case`send`:e.sendToSprinkle(r,i),a=!0;break;case`openNewAutoOpen`:await e.openNewAutoOpenSprinkles(),a=!0;break}chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,result:a}}).catch(()=>{})}catch(e){chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,error:e instanceof Error?e.message:String(e)}}).catch(()=>{})}}async function fq(e){let{client:t,layout:n,localFs:r,useRpcVfs:i,log:a}=e;if(!i)return{writableFs:r,previewVfsReader:null};let{createRemoteVfsClient:s}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([37,38])),{createRemoteWritableVfsClient:c}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([39,38])),l=s({transport:t.getTransport()}),u=c({transport:t.getTransport()});return n.panels.fileBrowser.setFs(l),a.info(`File browser + preview-vfs wired to worker VFS RPC`),{writableFs:u,previewVfsReader:l}}function pq(){if(typeof chrome<`u`&&chrome?.runtime?.id)return;let e=new Blob([`
|
|
598
|
+
`}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await _o({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){xH.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function BH(e,t){let n=[];try{let t=await e.readFile(EH,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(EH,JSON.stringify(r,null,2))}async function VH(e){try{let t=await e.readFile(EH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function HH(e){return`${TH}/${e.filename}`}async function UH(e){return(await VH(e)).filter(e=>e.pendingEnrichment===!0)}async function WH(e,t,n){if(!t.pendingEnrichment)return null;let r=HH(t),i=``;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch(e){return e?.code===`ENOENT`?xH.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):xH.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let a;try{a=JH(i).messages}catch(e){return xH.warn(`Failed to parse pending archive — leaving entry intact`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(a.length===0)return xH.info(`Pending archive has no messages — skipping enrichment`,{filename:t.filename}),null;let o=kH(a),s=``;try{s=await Xt({messages:o,instruction:Zt,model:n.model,apiKey:n.apiKey,maxTokens:CH,headers:n.headers})}catch(e){return xH.warn(`Enrichment memory call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let c=``;try{c=PH(await Xt({messages:o,instruction:Qt,model:n.model,apiKey:n.apiKey,maxTokens:wH,headers:n.headers}))}catch(e){return xH.warn(`Enrichment title call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(!c)return xH.info(`Enrichment title call returned empty — entry stays pending`,{filename:t.filename}),null;let l=s.trim();if(l&&l!==`NONE`)try{await zH(e,l,`pending-enrichment`,{model:n.model,apiKey:n.apiKey,headers:n.headers})}catch(e){xH.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}let u=GH(i,c),d=`${t.frozenAt.replace(/[:.]/g,`-`)}-${IH(c)}.md`,f=`${TH}/${d}`;try{await RH(e,TH),await e.writeFile(f,u)}catch(e){return xH.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let p={filename:d,title:c,frozenAt:t.frozenAt,messageCount:t.messageCount};try{await qH(e,t.filename,p)}catch(e){return xH.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(f!==r)try{await e.rm(r)}catch(e){xH.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:r,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return xH.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:d,title:c}),p}function GH(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var KH=Promise.resolve();async function qH(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(EH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(EH,JSON.stringify(a,null,2))},i=KH.then(r,r);return KH=i.then(()=>void 0,()=>void 0),i}function JH(e){let t=e,n=`Untitled`,r=t.match(/^---\n([\s\S]*?)\n---\n+/);if(r){t=t.slice(r[0].length);let e=r[1].match(/^title:\s*(.+?)\s*$/m);if(e){let t=e[1].trim();if(t.startsWith(`"`))try{let e=JSON.parse(t);typeof e==`string`&&(n=e)}catch{n=t.replace(/^"|"$/g,``)}else n=t}}let i=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(i){try{let e=i[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}t=t.replace(/^#\s+[^\n]*\n+/,``);let a=[],o=/^## (User|Assistant)\s*\n/gm,s=[],c;for(;(c=o.exec(t))!==null;)s.push({role:c[1]===`User`?`user`:`assistant`,start:c.index,bodyStart:c.index+c[0].length});for(let e=0;e<s.length;e++){let n=e+1<s.length?s[e+1].start:t.length,r=t.slice(s[e].bodyStart,n).trim();a.push({id:`frozen-${e}`,role:s[e].role,content:r,timestamp:0})}return{title:n,messages:a}}var YH=d(`new-session`),XH=`ui-new-session`;async function ZH(e){let t=Ba()??void 0,n;try{n=Qa()}catch(e){YH.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let r=n?.provider===`adobe`?{"X-Session-Id":hi(XH)}:void 0,i=new ZB;try{await i.init()}catch(e){return YH.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}return DH({sessionStore:i,vfs:e.vfs,model:n,apiKey:t,headers:r})}async function QH(e){let t=new ZB;try{await t.init()}catch(e){return YH.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return DH({sessionStore:t,vfs:e.vfs,mode:`quick`})}async function $H(e){let t={found:0,enriched:[]},n=[];try{n=await UH(e.vfs)}catch(e){return YH.warn(`Failed to list pending enrichments`,{error:e instanceof Error?e.message:String(e)}),t}if(t.found=n.length,n.length===0)return t;let r=Ba()??void 0,i;try{i=Qa()}catch(e){return YH.info(`No active model — skipping background enrichment`,{error:e instanceof Error?e.message:String(e)}),t}if(!r||!i)return YH.info(`LLM credentials unavailable — leaving pending entries for later boot`,{pending:n.length}),t;let a=i.provider===`adobe`?{"X-Session-Id":hi(XH)}:void 0;for(let o of n)try{let n=await WH(e.vfs,o,{model:i,apiKey:r,headers:a});n&&t.enriched.push(n)}catch(e){YH.warn(`Background enrichment threw (entry stays pending)`,{filename:o.filename,error:e instanceof Error?e.message:String(e)})}return YH.info(`Background enrichment pass complete`,{found:t.found,enriched:t.enriched.length}),t}function eU(e,t={}){if(t.isWriter===!1){YH.info(`Background enrichment skipped (OPFS follower — read-only tab)`);return}let n=()=>{$H({vfs:e}).catch(()=>{})},r=globalThis.requestIdleCallback;typeof r==`function`?r(n):setTimeout(n,0)}var tU=d(`boot/ui-fixture`);function nU(){try{let e=new URLSearchParams(window.location.search).get(`ui-fixture`);return e===null?!1:e===``||e===`1`||e.toLowerCase()===`true`}catch{return!1}}async function rU(e){let[{createChatFixture:t,FIXTURE_SESSION_ID:n,FIXTURE_SCOOP_NAME:r}]=await Promise.all([o(()=>import(`./chat-fixture-CLDS_yKK.js`),[])]);await e.switchToContext(n,!0,r),e.loadMessages(t());let i=new URLSearchParams(window.location.search).get(`compacting`);(i===`summarizing`||i===`extracting-memory`)&&e.setCompactionState?.(i),tU.info(`Loaded UI fixture session for design iteration`)}async function iU(e){let{client:t,layout:n,sprinkleManager:r,localFs:i,writableFs:a,log:s}=e;if(!i.getWatcher()){let{FsWatcher:e}=await o(async()=>{let{FsWatcher:e}=await Promise.resolve().then(()=>KG);return{FsWatcher:e}},void 0);i.setWatcher(new e)}let c=i.getWatcher();c&&r.setupWatcher(c),!await i.exists(`/shared/.welcomed`)&&localStorage.getItem(`slicc-welcomed`)&&(await i.writeFile(`/shared/.welcomed`,`1`).catch(()=>{}),localStorage.removeItem(`slicc-welcomed`)),t.requestState(),s.info(`Extension UI connected to offscreen agent engine`);let{installNukeReloadListener:l}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-DlkLMgeD.js`);return{installNukeReloadListener:e}},[]);l(),nU()&&await rU(n.panels.chat),Si().catch(()=>{}),eU(a)}async function aU(e){let{layout:t,log:n}=e,{PanelFollowerSprinkleProxy:r}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-Q2unDn_f.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:i}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>ioe);return{SprinkleFollowerController:e}},void 0),a={send(e){chrome.runtime.sendMessage(e).catch(e=>{let t=e instanceof Error?e.message:String(e);/receiving end does not exist/i.test(t)||n.error(`Panel → offscreen sendMessage failed`,{error:t})})}},s={onMessage(e){let t=t=>(!t||typeof t!=`object`||!(`source`in t)||!(`payload`in t)||e(t),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)}},c=null;c=new i({sync:new r(a,s,{onSprinklesList:e=>void c?.updateAvailable(e),onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t)}),addSprinkle:(e,n,r,i,a)=>t.addSprinkle(e,n,r,i,a),removeSprinkle:e=>t.removeSprinkle(e)})}function oU(e,t){return!e||typeof e!=`object`||e.type!==t?null:e}var sU=class{sender;listeners;disposed=!1;unsubscribe;pendingResets=new Map;nextResetId=1;constructor(e,t,n){this.sender=e,this.listeners=n,this.unsubscribe=t.onMessage(e=>{if(e.source!==`offscreen`)return;let t=oU(e.payload,`leader-mode-changed`);if(t){this.listeners.onLeaderModeChange?.(t.active);return}let n=oU(e.payload,`leader-tray-reset-response`);if(n){let e=this.pendingResets.get(n.requestId);if(!e)return;this.pendingResets.delete(n.requestId),clearTimeout(e.timer),n.ok?e.resolve(n.status):e.reject(Error(n.error??`leader-tray-reset failed (no error message)`));return}})}pushSprinklesSnapshot(e){if(this.disposed)return;let t={type:`leader-sprinkles-snapshot`,sprinkles:e};this.sender.send({source:`panel`,payload:t})}pushSprinkleUpdate(e,t){if(this.disposed)return;let n={type:`leader-sprinkle-update`,sprinkleName:e,data:t};this.sender.send({source:`panel`,payload:n})}pushUserMessageEcho(e,t,n){if(this.disposed)return;let r={type:`leader-user-message-echo`,text:e,messageId:t,attachments:n};this.sender.send({source:`panel`,payload:r})}pushActiveScoop(e){if(this.disposed)return;let t={type:`leader-active-scoop`,scoopJid:e};this.sender.send({source:`panel`,payload:t})}requestModeState(){this.disposed||this.sender.send({source:`panel`,payload:{type:`leader-request-mode-state`}})}resetTray(e=3e4){if(this.disposed)return Promise.reject(Error(`PanelLeaderSyncProxy disposed`));let t=`tray-reset-${Date.now()}-${this.nextResetId++}`;return new Promise((n,r)=>{let i=setTimeout(()=>{this.pendingResets.delete(t),r(Error(`leader-tray-reset timed out after ${e}ms`))},e);this.pendingResets.set(t,{resolve:n,reject:r,timer:i});let a={type:`leader-tray-reset`,requestId:t};this.sender.send({source:`panel`,payload:a})})}dispose(){if(!this.disposed){this.disposed=!0,this.unsubscribe();for(let e of this.pendingResets.values())clearTimeout(e.timer),e.reject(Error(`PanelLeaderSyncProxy disposed`));this.pendingResets.clear()}}};function cU(e){let{sender:t,subscriber:n,sprinkleManager:r,client:i,chat:a,log:o}=e,s=e._proxyFactory??((e,t,n)=>new sU(e,t,n)),c,l=e=>c.pushActiveScoop(e),u=()=>{let e=new Set(r.opened());c.pushSprinklesSnapshot(r.available().map(t=>({name:t.name,title:t.title,path:t.path,open:e.has(t.name),autoOpen:t.autoOpen})))},d=(e,t)=>c.pushSprinkleUpdate(e,t),f=(e,t,n)=>c.pushUserMessageEcho(e,t,n),p=!1,m=null,h=null,g=!1;function _(){p||g||(p=!0,m=i.onScoopSelected(l),i.selectedScoopJid&&l(i.selectedScoopJid),h=r.onChange(u),r.refresh().then(u).catch(e=>{o.error(`Initial sprinkle refresh after leader-mode activation failed`,{error:e instanceof Error?e.message:String(e)})}),r.setSendToSprinkleHook(d),a.setOnLocalUserMessage(f))}function v(){p&&(p=!1,m?.(),m=null,h?.(),h=null,r.setSendToSprinkleHook(void 0),a.setOnLocalUserMessage(void 0))}return c=s(t,n,{onLeaderModeChange:e=>{e?_():v()}}),c.requestModeState(),{proxy:c,isInstalled:()=>p,dispose(){g||(g=!0,v(),c.dispose())}}}function lU(e){let t=cU({sender:{send(t){chrome.runtime.sendMessage(t).catch(t=>{let n=t instanceof Error?t.message:String(t);/receiving end does not exist/i.test(n)||e.log.error(`Panel → offscreen sendMessage failed (leader)`,{error:n})})}},subscriber:{onMessage(e){let t=t=>(!t||typeof t!=`object`||!(`source`in t)||!(`payload`in t)||e(t),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)}},sprinkleManager:e.sprinkleManager,client:e.client,chat:e.chat,log:e.log});return window.addEventListener(`beforeunload`,()=>t.dispose(),{once:!0}),t}function uU(e){for(let t of[`slicc_accounts`,`selected-model`]){let n=localStorage.getItem(t);n!=null&&e.sendRaw({type:`local-storage-set`,key:t,value:n})}}function dU(e,t,n,r){let i=n(e).filter(e=>!r(e.id)),a=t.defaultModelId?i.find(e=>e.id===t.defaultModelId):void 0,o=t.defaultModelId?i.find(e=>e.id.toLowerCase().includes(t.defaultModelId.toLowerCase())):void 0,s=a??o??i[0];return s?`${e}:${s.id}`:void 0}function fU(e){let t=e.getAvailableProviders().filter(t=>e.providerOffersLlmModels(t)),n=t.map(t=>{let n=e.getProviderConfig(t);return{id:n.id,name:n.name??n.id,description:n.description,requiresApiKey:n.requiresApiKey??!0,requiresBaseUrl:n.requiresBaseUrl??!1,requiresDeployment:!!n.requiresDeployment,requiresApiVersion:!!n.requiresApiVersion,apiKeyPlaceholder:n.apiKeyPlaceholder??void 0,apiKeyEnvVar:n.apiKeyEnvVar??void 0,defaultBaseUrl:n.baseUrlPlaceholder??void 0,baseUrlDescription:n.baseUrlDescription??void 0,deploymentPlaceholder:n.deploymentPlaceholder??void 0,deploymentDescription:n.deploymentDescription??void 0,apiVersionDefault:n.apiVersionDefault??void 0,apiVersionDescription:n.apiVersionDescription??void 0,isOAuth:!!n.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),r={};for(let n of t)try{r[n]=e.getProviderModels(n).filter(t=>!e.isModelHiddenFromPicker(t.id)).map(e=>({id:e.id,name:e.name}))}catch{r[n]=[]}return{providers:n,models:r}}async function pU(e){let{OnboardingOrchestrator:t}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-Dpk9ts40.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([29,14])),n=null;return{get:()=>n||(n=new t({fs:e.fs,postSystemMessage:e.postSystemMessage,postDipReference:e.postDipReference,getProviderCatalogue:()=>fU(e.providers),saveAccount:(t,n,r,i,a)=>e.providers.addAccount(t,n,r,i,a),setSelectedModel:t=>e.providers.setSelectedModelId(t),resolveModelLabel:(t,n)=>{try{return e.providers.getProviderModels(t).find(e=>e.id===n)?.name??null}catch{return null}},broadcastToDip:t=>e.broadcastToDip(t),fireFinalLick:t=>e.onFireFinalLick(t),launchOAuth:async(t,n)=>await mU(t,n??null,e)}),n),peek:()=>n,buildCatalogue:()=>fU(e.providers)}}async function mU(e,t,n){try{let r=n.providers.getProviderConfig(e);if(!r.isOAuth||!r.onOAuthLogin&&!r.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(r.requiresBaseUrl&&t&&n.providers.addAccount(e,``,t),r.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-BcS-bhoB.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([16,1])),t=await e();if(!t)return{ok:!1,message:`Intercepted OAuth requires the controlled-browser transport — open SLICC in standalone or extension mode.`};await r.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:n.deviceCode.createSprinkleDeviceCodePrompter({broadcastToDip:e=>n.broadcastToDip(e)})})}else if(r.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-BcS-bhoB.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await r.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:dU(e,r,n.providers.getProviderModels,n.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var hU=300*1e3,gU=Symbol(`mount:timeout`),_U=class e{kind=`local`;source=void 0;profile=void 0;mountId;handle;closed=!1;constructor(e,t){this.handle=e,this.mountId=t.mountId}static fromHandle(t,n){return new e(t,n)}static async create(t){if(t.isScoop())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n;if(t.toolContext){let e=m.generateId(),r=!1,i=h({id:e,html:re(`directory`),onAction:async(e,t)=>{if(e===`approve`){let e=t;if(e?.handleInIdb&&typeof e.idbKey==`string`)try{let t=await ne(e.idbKey);return t?(await w(t),{approved:!0,handle:t}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(e?.cancelled)return{cancelled:!0};if(e?.error)return{error:String(e.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}return{denied:!0}}},t.toolContext.onUpdate).catch(e=>{if(r)return gU;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(gU)},hU)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===gU)throw Error(`mount: timed out after ${Math.round(hU/6e4)} minute(s) waiting for user approval`);if(!s)throw Error(`mount: tool UI not available`);let c=s;if(c.denied)throw Error(`mount: denied by user`);if(c.cancelled)throw Error(`mount: cancelled`);if(c.error)throw Error(`mount: ${c.error}`);if(!c.handle)throw Error(`mount: no directory selected`);n=c.handle}else if(t.isExtension)try{let e=await T();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await ne(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);await w(t),n=t}else throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}else{if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{n=await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}return new e(n,{mountId:t.mountId})}getHandle(){return this.handle}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}splitPath(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(e=>e.length>0)}async resolveDir(e,t=!1){let n=this.splitPath(e),r=this.handle;for(let i of n)try{r=await r.getDirectoryHandle(i,{create:t})}catch(t){throw this.toFsError(t,e)}return r}async resolveFile(e,t=!1){let n=this.splitPath(e);if(n.length===0)throw new E(`EISDIR`,`is a directory`,e);let r=n.pop(),i=this.handle;for(let r of n)try{i=await i.getDirectoryHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}try{return await i.getFileHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}}toFsError(e,t){if(e instanceof E)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new E(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new E(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new E(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new E(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new E(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new E(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new E(`ENOTEMPTY`,`directory not empty`,t)}return new E(`EINVAL`,e instanceof Error?e.message:String(e),t)}async readDir(e){this.assertOpen(e);let t=await this.resolveDir(e),n=[];for await(let[e,r]of t)if(r.kind===`file`){let t=await r.getFile();n.push({name:e,kind:`file`,size:t.size,lastModified:t.lastModified})}else n.push({name:e,kind:`directory`});return n}async readFile(e){this.assertOpen(e);let t=await(await this.resolveFile(e)).getFile();return new Uint8Array(await t.arrayBuffer())}async writeFile(e,t){this.assertOpen(e);let n=await(await this.resolveFile(e,!0)).createWritable();await n.write(t),await n.close()}async stat(e){if(this.assertOpen(e),this.splitPath(e).length===0)return{kind:`directory`,size:0,mtime:0};try{let t=await(await this.resolveFile(e)).getFile();return{kind:`file`,size:t.size,mtime:t.lastModified}}catch{}return await this.resolveDir(e),{kind:`directory`,size:0,mtime:0}}async mkdir(e){this.assertOpen(e),await this.resolveDir(e,!0)}async remove(e,t){this.assertOpen(e);let n=this.splitPath(e);if(n.length===0)throw new E(`EINVAL`,`cannot remove mount root`,e);let r=n.pop(),i=n.join(`/`),a=await this.resolveDir(i||`/`);try{await a.removeEntry(r,{recursive:t?.recursive??!1})}catch(t){throw this.toFsError(t,e)}}async refresh(){return this.assertOpen(`/`),{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:this.handle.name}}async close(){this.closed=!0}};function vU(){return crypto.randomUUID()}var yU=`slicc-pending-mount`,bU=`pendingMount`;async function xU(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(yU,1);n.onupgradeneeded=()=>n.result.createObjectStore(`handles`),n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),n=t.transaction(`handles`,`readwrite`);n.objectStore(`handles`).put(e,bU),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function SU(e,t){let n;try{n=await new Promise((e,t)=>{let n=indexedDB.open(yU,1);n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}catch{return}let r=n.transaction(`handles`,`readwrite`),i=await new Promise(e=>{let t=r.objectStore(`handles`).get(bU);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(i){r.objectStore(`handles`).delete(bU),await new Promise(e=>r.oncomplete=()=>e());let n=`/mnt/${i.name}`,a=_U.fromHandle(i,{mountId:vU()});await e.mount(n,a),t.info(`Mounted folder from welcome onboarding`,{name:i.name,path:n})}n.close()}var CU=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),wU=`slicc:welcome-flow-fired`;function TU(){try{let e=typeof localStorage<`u`?localStorage.getItem(wU):null;if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t.map(String):[])}catch{return new Set}}function EU(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(wU,JSON.stringify([...e]))}catch{}}function DU(e,t,n,r,i){if(CU.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}CU.has(e)&&(t.add(e),EU(t)),n()}var OU=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function kU(e){let{firedWelcomeActions:t,getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,contextLabel:l,vfs:u,log:d}=e;return e=>{if(e.type!==`sprinkle`)return!1;let f=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(f&&CU.has(f)){if(t.has(f))return d.debug(`Suppressing duplicate welcome lick (${l})`,{action:f}),!0;t.add(f),EU(t)}if(!f||!OU.has(f))return!1;let p=e.body;return AU(f,p,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:u,log:d})}}function AU(e,t,n){let{getAccounts:r,getProviderConfig:i,resolveDeviceCodeDecision:a,getOnboardingOrchestrator:o,applyPendingMount:s,fastForward:c,onShortcutMigrate:l,vfs:u,log:d}=n;if(e===`device-code-decision`){let e=t?.data?.decision;return a(e===`cancel`?`cancel`:`continue`),!0}if(e===`first-run`)return o().handleFirstRun(),!0;if(e===`onboarding-complete`){let e=o(),n=t?.data??{};return n.mountWorkspace&&s&&s().catch(e=>d.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(n).catch(e=>d.warn(`OnboardingOrchestrator failed`,e)),!0}if(e===`connect-ready`)return jU({getAccounts:r,getProviderConfig:i,getOnboardingOrchestrator:o,fastForward:c,vfs:u,log:d});if(e===`connect-attempt`){let e=t?.data;return e&&o().handleConnectAttempt({provider:String(e.provider??``),apiKey:String(e.apiKey??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null,deployment:typeof e.deployment==`string`&&e.deployment?String(e.deployment):null,apiVersion:typeof e.apiVersion==`string`&&e.apiVersion?String(e.apiVersion):null,model:e.model==null?null:String(e.model)}).catch(e=>d.warn(`handleConnectAttempt failed`,e)),!0}if(e===`oauth-attempt`){let e=t?.data;return e&&o().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>d.warn(`handleOAuthAttempt failed`,e)),!0}return e===`shortcut-migrate`?(l(),!0):!1}function jU(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),MU(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function MU(e,t,n){let{hasOnboardingFinalLickInHistory:r}=await o(async()=>{let{hasOnboardingFinalLickInHistory:e}=await Promise.resolve().then(()=>mq);return{hasOnboardingFinalLickInHistory:e}},void 0);if(await r())return;let i=e?await NU(e):{},{getSelectedModelId:a,getProviderConfig:s,getProviderModels:c}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>zi);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},void 0),l=(()=>{try{return a()||null}catch{return null}})(),u=(()=>{if(!l)return null;try{return c(t).find(e=>e.id===l)?.name??l}catch{return l}})(),d=null;try{d=s(t).name??null}catch{}n({action:`onboarding-complete-with-provider`,data:{profile:i,provider:t,providerName:d,model:l,modelLabel:u,validation:`preexisting`}})}async function NU(e){try{let t=await e.readDir(`/home`),n=null;for(let r of t){if(r.type!==`directory`)continue;let t=`/home/${r.name}/.welcome.json`;try{let r=(await e.stat(t)).mtime??0;if(n&&r<=n.mtime)continue;let i=await e.readFile(t,{encoding:`utf-8`}),a=JSON.parse(typeof i==`string`?i:new TextDecoder().decode(i));a&&typeof a==`object`&&(n={profile:a,mtime:r})}catch{}}return n?.profile??{}}catch{return{}}}async function PU(e){let{client:t,layout:n,localFs:r,firedWelcomeActions:i,log:a}=e,s=await o(()=>Promise.resolve().then(()=>zi),void 0),{getAccounts:c,getProviderConfig:l}=s,{createSprinkleDeviceCodePrompter:u,resolveDeviceCodeDecision:d}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),f=await pU({fs:r,log:a,providers:s,deviceCode:{createSprinkleDeviceCodePrompter:u},postSystemMessage:e=>n.panels.chat.addSystemMessage(e),postDipReference:e=>n.panels.chat.addSystemMessage(e),broadcastToDip:e=>YI(e),onFireFinalLick:e=>{uU(t),DU(String(e?.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-ext`,a)}}),p=kU({firedWelcomeActions:i,getAccounts:c,getProviderConfig:l,resolveDeviceCodeDecision:d,getOnboardingOrchestrator:()=>f.get(),applyPendingMount:()=>SU(r,a),fastForward:{fire:e=>{DU(String(e.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-ext`,a)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return l(e)}catch{return null}})();YI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{r.writeFile(`/shared/.welcomed`,`1`).catch(e=>a.warn(`Failed to persist welcome completion marker`,e))},contextLabel:`ext`,vfs:r,log:a});return n.panels.chat.onDipLick=(e,n)=>{p({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:n}})||t.sendSprinkleLick(`inline`,{action:e,data:n})},{onboardingHandle:f,interceptWelcomeLick:p}}var FU=`/tmp`;function IU(e){let t=e.replace(/[\\/:]+/g,`_`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);return t.length>0?t:`attachment`}function LU(){let e=globalThis.crypto!==void 0&&typeof globalThis.crypto.getRandomValues==`function`?globalThis.crypto:null;if(e){let t=new Uint8Array(4);return e.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}return Math.random().toString(36).slice(2,10)}function RU(e,t,n,r=LU()){let i=IU(e);return`${FU}/attachment-${t.toString(36)}-${n.toString(36)}-${r}-${i}`}function zU(e){let t=0;return async n=>{let r=new Uint8Array(await n.arrayBuffer());t+=1;let i=RU(n.name,Date.now(),t);return await e.mkdir(FU,{recursive:!0}).catch(()=>{}),await e.writeFile(i,r),i}}function BU(e){let{client:t,layout:n,localFs:r,writableFs:i,selectScoop:a,getSelectedScoop:o,log:s}=e;t.setLocalFS(r),n.panels.chat.setAttachmentWriter(zU(r)),n.panels.chat.setAgent(t.createAgentHandle()),n.panels.scoops.setOrchestrator(t),n.panels.memory.setOrchestrator(t),n.setScoopSwitcherOrchestrator?.(t),n.setScoopSwitcherTranscriptSource?.(e=>t.getScoopTranscript(e)),n.setScoopsRailTranscriptSource?.(e=>t.getScoopTranscript(e)),n.onScoopSelect=a;let l=e=>{let t=e.config?.modelId,r=t?Za(t):Qa();n.panels.chat.setModelSupportsReasoning(!!r.reasoning,c(r).includes(`xhigh`)),n.panels.chat.setThinkingLevel(e.config?.thinkingLevel)};return n.onModelChange=e=>{localStorage.setItem(`selected-model`,e),t.updateModel();let n=o();n&&l(n)},n.onThinkingLevelChange=e=>{let n=o();n&&t.setScoopThinkingLevel(n.jid,e)},n.onModelsRefreshed=()=>{let e=o();e&&l(e)},n.onClearChat=async e=>{if(e?.freeze===`quick`)try{await QH({vfs:i})}catch(e){s.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await ZH({vfs:i})}catch(e){s.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else s.info(`New session: freezer skipped (long-press)`);await n.panels.chat.deleteSessionById(`session-cone`),await t.clearAllMessages()},n.onClearFilesystem=async()=>{t.clearFilesystem()},{syncThinkingButtonForScoop:l}}function VU(e,t,n){let r=`----DaMount${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`,i=new TextEncoder,a=i.encode(`--${r}\r\nContent-Disposition: form-data; name="data"; filename="${e}"\r\nContent-Type: ${t}\r\n\r\n`),o=i.encode(`\r\n--${r}--\r\n`),s=new Uint8Array(a.byteLength+n.byteLength+o.byteLength);return s.set(a,0),s.set(n,a.byteLength),s.set(o,a.byteLength+n.byteLength),{contentType:`multipart/form-data; boundary=${r}`,body:s}}function HU(e){return e.split(`/`).pop()||`data`}function UU(e){let t=e.match(/^da:\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid DA source '${e}' — expected da://org/repo[/path]`);return{org:t[1],repo:t[2],path:(t[3]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var WU=5*1024*1024,GU=class{kind=`da`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=UU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??WU,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toSourcePath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/source/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}toListPath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/list/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n&&!this.cache.isStale(n.cachedAt))return n.body;let r={};n&&(r[`if-none-match`]=n.etag);let i=await this.transport({method:`GET`,path:this.toSourcePath(t),headers:r});if(i.status===304&&n)return await this.cache.putBody(t,n.body,n.etag),n.body;if(i.status===404)throw await this.cache.invalidateBody(t),new E(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new E(`EACCES`,`da access denied`,e);if(i.status>=400)throw new E(`EIO`,`da readFile failed: ${i.status}`,e);let a=i.headers.get(`content-length`),o=a?Number(a):void 0;if(o!==void 0&&o>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=i.headers.get(`etag`)??``;return await this.cache.putBody(t,s,c),s}async writeFile(e,t){if(this.assertOpen(e),t.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let n=this.toMountRelative(e),r=await this.cache.getBody(n),i=VU(HU(e),p(e),t),a={"content-type":i.contentType,"content-length":String(i.body.byteLength)};r?.etag?a[`if-match`]=r.etag:r||(a[`if-none-match`]=`*`);let o=()=>this.transport({method:`POST`,path:this.toSourcePath(n),headers:a,body:i.body}),s,c=1;try{s=await o()}catch{c=2,s=await o()}if(s.status===412){if(c===2){let r=await this.transport({method:`HEAD`,path:this.toSourcePath(n)});if(r.status>=400)throw new E(`EIO`,`da reconcile HEAD failed: ${r.status}`,e);let i=r.headers.get(`etag`)??``;await this.cache.putBody(n,t,i);let a=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a);return}await this.cache.invalidateBody(n);try{await this.readFile(e)}catch{}throw new E(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new E(`EACCES`,`da write denied`,e);if(s.status>=400)throw new E(`EIO`,`da writeFile failed: ${s.status}`,e);let l=s.headers.get(`etag`)??``;await this.cache.putBody(n,t,l);let u=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(u)}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.transport({method:`GET`,path:this.toListPath(t)});if(r.status===404)throw new E(`ENOENT`,`no such directory`,e);if(r.status>=400)throw new E(`EIO`,`da list failed: ${r.status}`,e);let i=(await r.json()).map(e=>e.ext?{name:`${e.name}.${e.ext}`,kind:`file`,etag:e.etag,lastModified:e.lastModified}:{name:e.name,kind:`directory`,lastModified:e.lastModified});return await this.cache.putListing(t,i),i}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n)return{kind:`file`,size:n.size,mtime:n.cachedAt,etag:n.etag};let r=t.split(`/`),i=r.pop()??``,a=r.join(`/`),o=await this.cache.getListing(a);if(o&&!this.cache.isStale(o.cachedAt)){let t=o.entries.find(e=>e.name===i);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??o.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??o.cachedAt};if(!t)throw new E(`ENOENT`,`no such file or directory`,e)}let s=await this.transport({method:`HEAD`,path:this.toSourcePath(t)});if(s.status===200){let e=Number(s.headers.get(`content-length`)??`0`),t=s.headers.get(`etag`)??``,n=s.headers.get(`last-modified`),r=n?Date.parse(n):0;if(o){let n=o.entries.map(n=>n.name===i&&n.kind===`file`?{...n,size:e,etag:t,lastModified:r}:n);await this.cache.putListing(a,n)}return{kind:`file`,size:e,mtime:r,etag:t}}if(s.status===404){let n=await this.cache.getListing(t);if(n)return{kind:`directory`,size:0,mtime:n.cachedAt};throw new E(`ENOENT`,`no such file or directory`,e)}throw new E(`EIO`,`da stat failed: ${s.status}`,e)}async mkdir(e){}async remove(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.transport({method:`DELETE`,path:this.toSourcePath(t)});if(n.status===404)throw new E(`ENOENT`,`no such file`,e);if(n.status===401||n.status===403)throw new E(`EACCES`,`da delete denied`,e);if(n.status>=400)throw new E(`EIO`,`da delete failed: ${n.status}`,e);await this.cache.invalidateBody(t);let r=t.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(r)}async refresh(e){this.assertOpen(`/`);let t={added:[],removed:[],changed:[],unchanged:0,errors:[]},n=[``];for(;n.length>0;){let e=n.pop();try{let r=await this.transport({method:`GET`,path:this.toListPath(e)});if(r.status>=400){t.errors.push({path:e,message:`list failed: ${r.status}`});continue}let i=await r.json(),a=[];for(let r of i)if(r.ext){let n=e?`${e}/${r.name}.${r.ext}`:`${r.name}.${r.ext}`;a.push({name:`${r.name}.${r.ext}`,kind:`file`,etag:r.etag,lastModified:r.lastModified});let i=await this.cache.getBody(n);i?r.etag&&i.etag!==r.etag?(await this.cache.invalidateBody(n),t.changed.push(n)):t.unchanged++:t.added.push(n)}else{a.push({name:r.name,kind:`directory`});let t=e?`${e}/${r.name}`:r.name;n.push(t)}await this.cache.putListing(e,a)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}}if(e?.bodies)for(let e of t.changed)try{await this.readFile(e)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}return t}describe(){return{displayName:`${this.parsed.org}/${this.parsed.repo}${this.parsed.path?`/${this.parsed.path}`:``}`,source:this.source,profile:this.profile}}async close(){this.closed||=!0}};function KU(e){let t=e.match(/^s3:\/\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid S3 source '${e}' — expected s3://bucket[/prefix]`);return{bucket:t[1],prefix:(t[2]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var qU=25*1024*1024,JU=class{kind=`s3`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=KU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??qU,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new E(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toS3Key(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``);return[this.parsed.prefix,t].filter(e=>e.length>0).join(`/`)}toMountRelativeKey(e){return this.parsed.prefix?e.slice(this.parsed.prefix.length+1):e}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n&&!this.cache.isStale(n.cachedAt))return n.body;let r={};n&&(r[`if-none-match`]=n.etag);let i=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:this.toS3Key(t),headers:r});if(i.status===304&&n)return await this.cache.putBody(t,n.body,n.etag),n.body;if(i.status===404)throw await this.cache.invalidateBody(t),new E(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new E(`EACCES`,`s3 access denied`,e);if(i.status>=400)throw new E(`EIO`,`s3 readFile failed: ${i.status}`,e);let a=i.headers.get(`content-length`),o=a?Number(a):void 0;if(o!==void 0&&o>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes (${o} > ${this.maxBodyBytes})`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=i.headers.get(`etag`)??``;return await this.cache.putBody(t,s,c),s}async writeFile(e,t){this.assertOpen(e);let n=this.toMountRelative(e);if(t.byteLength>this.maxBodyBytes)throw new E(`EFBIG`,`body exceeds maxBodyBytes`,e);let r=await this.cache.getBody(n),i={"content-type":`application/octet-stream`,"content-length":String(t.byteLength)};r?i[`if-match`]=r.etag:i[`if-none-match`]=`*`;let a=()=>this.transport({method:`PUT`,bucket:this.parsed.bucket,key:this.toS3Key(n),headers:i,body:t}),o,s=1;try{o=await a()}catch{s=2,o=await a()}if(o.status===412){if(s===2){let r=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(n)});if(r.status>=400)throw new E(`EIO`,`s3 reconcile HEAD failed: ${r.status}`,e);let i=r.headers.get(`etag`)??``;await this.cache.putBody(n,t,i);let a=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a);return}await this.cache.invalidateBody(n);try{await this.readFile(e)}catch{}throw new E(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(o.status===401||o.status===403)throw new E(`EACCES`,`s3 write denied`,e);if(o.status>=400)throw new E(`EIO`,`s3 writeFile failed: ${o.status}`,e);let c=o.headers.get(`etag`)??``;await this.cache.putBody(n,t,c);let l=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(l)}async listObjectsV2(){let e=[],t;do{let n={"list-type":`2`};this.parsed.prefix&&(n.prefix=`${this.parsed.prefix}/`),t&&(n[`continuation-token`]=t);let r=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:``,query:n});if(r.status>=400)throw new E(`EIO`,`s3 list failed: ${r.status}`,`/`);let i=await r.text(),a=this.parseListingXml(i);e.push(...a.contents),t=a.nextContinuationToken}while(t);return e}parseListingXml(e){let t=[];for(let n of e.matchAll(/<Contents>([\s\S]*?)<\/Contents>/g)){let e=n[1],r=e.match(/<Key>([^<]+)<\/Key>/)?.[1]??``,i=e.match(/<ETag>([^<]+)<\/ETag>/)?.[1]??``,a=e.match(/<Size>([^<]+)<\/Size>/)?.[1]??`0`,o=e.match(/<LastModified>([^<]+)<\/LastModified>/)?.[1]??``;t.push({key:r,etag:i,size:Number(a),lastModified:o?Date.parse(o):0})}return{contents:t,nextContinuationToken:e.match(/<IsTruncated>([^<]+)<\/IsTruncated>/)?.[1]===`true`?e.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/)?.[1]:void 0}}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.listObjectsV2(),i=this.groupByDir(r);for(let[e,t]of i)await this.cache.putListing(e,t);return i.get(t)??[]}groupByDir(e){let t=new Map,n=e=>(t.has(e)||t.set(e,[]),t.get(e));n(``);for(let t of e){let e=this.toMountRelativeKey(t.key).split(`/`),r=e.pop();n(e.join(`/`)).push({name:r,kind:`file`,size:t.size,etag:t.etag,lastModified:t.lastModified});let i=``;for(let t of e){let e=i;i=i?`${i}/${t}`:t;let r=n(e);r.find(e=>e.name===t&&e.kind===`directory`)||r.push({name:t,kind:`directory`}),n(i)}}return t}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),n=await this.cache.getBody(t);if(n)return{kind:`file`,size:n.body.byteLength,mtime:n.cachedAt,etag:n.etag};let r=t.split(`/`),i=r.pop()??``,a=r.join(`/`),o=await this.cache.getListing(a);if(o&&!this.cache.isStale(o.cachedAt)){let t=o.entries.find(e=>e.name===i);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??o.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??o.cachedAt};if(!t)throw new E(`ENOENT`,`no such file or directory`,e)}let s=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(t)});if(s.status===200){let e=Number(s.headers.get(`content-length`)??`0`),t=s.headers.get(`etag`)??``,n=s.headers.get(`last-modified`);return{kind:`file`,size:e,mtime:n?Date.parse(n):0,etag:t}}if(s.status===404){let n=await this.cache.getListing(t);if(n)return{kind:`directory`,size:0,mtime:n.cachedAt};throw new E(`ENOENT`,`no such file or directory`,e)}throw new E(`EIO`,`s3 stat failed: ${s.status}`,e)}async refresh(e){this.assertOpen(`/`);let t=await this.listObjectsV2(),n=new Set(t.map(e=>this.toMountRelativeKey(e.key))),r=new Map(t.map(e=>[this.toMountRelativeKey(e.key),e.etag])),i={added:[],removed:[],changed:[],unchanged:0,errors:[]};for(let e of n){let t=await this.cache.getBody(e),n=r.get(e);t?t.etag===n?i.unchanged++:(await this.cache.invalidateBody(e),i.changed.push(e)):i.added.push(e)}let a=this.groupByDir(t);for(let[e,t]of a)await this.cache.putListing(e,t);if(e?.bodies)for(let e of i.changed)try{await this.readFile(e)}catch(t){i.errors.push({path:e,message:t instanceof Error?t.message:String(t)})}return i}async mkdir(e){}async remove(e,t){this.assertOpen(e);let n=this.toMountRelative(e);if(t?.recursive)throw new E(`EINVAL`,`recursive remove not yet supported on S3`,e);let r=await this.transport({method:`DELETE`,bucket:this.parsed.bucket,key:this.toS3Key(n)});if(r.status===404)throw new E(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new E(`EACCES`,`s3 delete denied`,e);if(r.status>=400)throw new E(`EIO`,`s3 delete failed: ${r.status}`,e);await this.cache.invalidateBody(n);let i=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(i)}describe(){return{displayName:this.parsed.prefix?`${this.parsed.bucket}/${this.parsed.prefix}`:this.parsed.bucket,source:this.source,profile:this.profile}}async close(){this.closed||=!0}},YU=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function XU(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>zi);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new YU(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var ZU=`slicc-mount-cache`,QU=`listings`,$U=`bodies`,eW=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??ZU}isStale(e,t){return Date.now()-e>=(t??this.ttlMs)}async openDb(){return this.dbPromise||=new Promise((e,t)=>{let n=indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(QU)||e.createObjectStore(QU),e.objectStoreNames.contains($U)||e.createObjectStore($U)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),this.dbPromise}key(e){return`${this.mountId}::${e}`}async getListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(QU,`readonly`).objectStore(QU).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putListing(e,t){let n=await this.openDb();return new Promise((r,i)=>{let a=n.transaction(QU,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(QU).put(o,this.key(e)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async invalidateListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(QU,`readwrite`);i.objectStore(QU).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async getBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction($U,`readonly`).objectStore($U).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putBody(e,t,n){let r=await this.openDb(),i={body:t,etag:n,size:t.byteLength,cachedAt:Date.now()};try{await this.txPut(r,$U,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,$U,this.key(e),i)}catch{}return}throw t}}async invalidateBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction($U,`readwrite`);i.objectStore($U).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async clearMount(){let e=await this.openDb(),t=`${this.mountId}::`,n=n=>new Promise((r,i)=>{let a=e.transaction(n,`readwrite`),o=a.objectStore(n),s=o.getAllKeys();s.onsuccess=()=>{for(let e of s.result)typeof e==`string`&&e.startsWith(t)&&o.delete(e)},a.oncomplete=()=>r(),a.onerror=()=>i(a.error)});await Promise.all([n(QU),n($U)])}txPut(e,t,n,r){return new Promise((i,a)=>{let o=e.transaction(t,`readwrite`);o.objectStore(t).put(r,n),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async evictLru(e){let t=await this.openDb(),n=`${this.mountId}::`,r=await new Promise((e,r)=>{let i=t.transaction($U,`readonly`).objectStore($U),a=[],o=i.openCursor();o.onsuccess=()=>{let t=o.result;if(!t){e(a);return}if(typeof t.key==`string`&&t.key.startsWith(n)){let e=t.value;a.push({key:t.key,cachedAt:e.cachedAt})}t.continue()},o.onerror=()=>r(o.error)});r.sort((e,t)=>e.cachedAt-t.cachedAt);let i=Math.max(1,Math.ceil(r.length*e)),a=r.slice(0,i);await new Promise((e,n)=>{let r=t.transaction($U,`readwrite`),i=r.objectStore($U);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function tW(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function nW(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 rW(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var iW=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),aW=new Set([101,103,204,205,304]);function oW(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new E(`EACCES`,e.error):e.errorCode===`invalid_request`?new E(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||iW.has(String(e.errorCode))?new E(`EIO`,e.error):new E(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let t;try{t=nW(e.bodyBase64)}catch(e){throw new E(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=aW.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function sW(e,t){let n;try{n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}catch(e){throw new E(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (SLICC backend at localhost may not be running)`)}try{return await n.json()}catch(e){throw new E(`EIO`,`mount transport: response is not a JSON envelope (status ${n.status}): ${e instanceof Error?e.message:String(e)}`)}}async function cW(e,t){try{return await chrome.runtime.sendMessage({type:e,envelope:t})}catch(e){throw new E(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function lW(e){return async t=>{let n={profile:e,method:t.method,bucket:t.bucket,key:t.key,query:t.query,headers:t.headers,bodyBase64:t.body?rW(t.body):void 0};return oW(tW()?await cW(`mount.s3-sign-and-forward`,n):await sW(`/api/s3-sign-and-forward`,n))}}function uW(e){let t=e?.getImsToken??(async()=>(await XU()).getBearerToken());return async e=>{let n;try{n=await t()}catch(e){throw new E(`EACCES`,`DA mount: ${e instanceof Error?e.message:String(e)}`)}let r={imsToken:n,method:e.method,path:e.path,query:e.query,headers:e.headers,bodyBase64:e.body?rW(e.body):void 0};return oW(tW()?await cW(`mount.da-sign-and-forward`,r):await sW(`/api/da-sign-and-forward`,r))}}var dW=e({DaMountBackend:()=>GU,RemoteMountCache:()=>eW,S3MountBackend:()=>JU,makeSignedFetchDa:()=>uW,makeSignedFetchS3:()=>lW}),fW=`slicc-mount-table`,pW=2,mW=`mounts`,hW=`mount-entries`;function gW(){return new Promise((e,t)=>{let n=indexedDB.open(fW,pW);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(mW)||t.createObjectStore(mW),t.objectStoreNames.contains(hW)||t.createObjectStore(hW),r<2){let e=n.transaction,t=e.objectStore(mW),r=e.objectStore(hW),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:vU(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function _W(e,t){let n=await gW();try{let r=e.descriptor.kind===`local`&&t?[mW,hW]:[hW],i=n.transaction(r,`readwrite`);i.objectStore(hW).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(mW).put(t,e.descriptor.idbHandleKey),await new Promise((e,t)=>{i.oncomplete=()=>e(),i.onerror=()=>t(i.error),i.onabort=()=>t(i.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{n.close()}}async function vW(e){let t=await gW();try{let n=t.transaction([mW,hW],`readwrite`);n.objectStore(hW).delete(e),n.objectStore(mW).delete(e),await new Promise((e,t)=>{n.oncomplete=()=>e(),n.onerror=()=>t(n.error),n.onabort=()=>t(n.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{t.close()}}async function yW(){let e=await gW();try{return await new Promise((t,n)=>{let r=e.transaction(hW,`readonly`),i=r.objectStore(hW).getAll();i.onsuccess=()=>t(i.result),i.onerror=()=>n(i.error),r.onabort=()=>n(r.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{e.close()}}async function bW(e){let t=await gW();try{return await new Promise((n,r)=>{let i=t.transaction(mW,`readonly`).objectStore(mW).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function xW(){let e=await gW();try{let t=e.transaction([mW,hW],`readwrite`);t.objectStore(mW).clear(),t.objectStore(hW).clear(),await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error),t.onabort=()=>n(t.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{e.close()}}async function SW(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await bW(o.idbHandleKey),s=typeof a?.name==`string`?a.name:``;if(!a||!(`queryPermission`in a)){i.push({kind:`local`,path:e,dirName:s});continue}let c;try{c=await a.queryPermission({mode:`readwrite`})}catch(t){n?.warn?.(`queryPermission threw on persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s});continue}if(c!==`granted`){i.push({kind:`local`,path:e,dirName:s});continue}try{let i=_U.fromHandle(a,{mountId:o.mountId});await t.mount(e,i),n?.info?.(`Restored mount from previous session`,{path:e,name:s}),r.push({kind:`local`,path:e,dirName:s})}catch(t){n?.warn?.(`Failed to re-mount persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s})}continue}if(o.kind===`s3`){try{let i=new eW({mountId:o.mountId,ttlMs:3e4}),a=new JU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:lW(o.profile)});await t.mount(e,a),n?.info?.(`Restored S3 mount from previous session`,{path:e,source:o.source}),r.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore S3 mount`,{path:e,error:r}),i.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:r})}continue}if(o.kind===`da`)try{let i=new eW({mountId:o.mountId,ttlMs:3e4}),a=new GU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:uW()});await t.mount(e,a),n?.info?.(`Restored DA mount from previous session`,{path:e,source:o.source}),r.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore DA mount`,{path:e,error:r}),i.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:r})}}return{restored:r,needsRecovery:i}}function CW(e){let{channel:t,getReader:n,logger:r}=e,i=e=>{let i=e.data;if(i?.type!==`preview-vfs-read`)return;let{id:a,path:o,asText:s}=i;(async()=>{try{let e=s?`utf-8`:`binary`,r=await n().readFile(o,{encoding:e});t.postMessage({type:`preview-vfs-response`,id:a,content:r})}catch(e){let n=e instanceof Error?e.message:String(e);n.includes(`ENOENT`)||r?.error(`Preview VFS read failed`,{path:o,error:n}),t.postMessage({type:`preview-vfs-response`,id:a,error:n})}})()};return t.addEventListener(`message`,i),{dispose:()=>t.removeEventListener(`message`,i)}}var wW=Uint8Array,TW=Uint16Array,EW=Int32Array,DW=new wW([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),OW=new wW([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),kW=new wW([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),AW=function(e,t){for(var n=new TW(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new EW(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},jW=AW(DW,2),MW=jW.b,NW=jW.r;MW[28]=258,NW[258]=28;for(var PW=AW(OW,0),FW=PW.b,IW=PW.r,LW=new TW(32768),RW=0;RW<32768;++RW){var zW=(RW&43690)>>1|(RW&21845)<<1;zW=(zW&52428)>>2|(zW&13107)<<2,zW=(zW&61680)>>4|(zW&3855)<<4,LW[RW]=((zW&65280)>>8|(zW&255)<<8)>>1}for(var BW=(function(e,t,n){for(var r=e.length,i=0,a=new TW(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new TW(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new TW(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[LW[d]>>c]=l}else for(s=new TW(r),i=0;i<r;++i)e[i]&&(s[i]=LW[o[e[i]-1]++]>>15-e[i]);return s}),VW=new wW(288),RW=0;RW<144;++RW)VW[RW]=8;for(var RW=144;RW<256;++RW)VW[RW]=9;for(var RW=256;RW<280;++RW)VW[RW]=7;for(var RW=280;RW<288;++RW)VW[RW]=8;for(var HW=new wW(32),RW=0;RW<32;++RW)HW[RW]=5;var UW=BW(VW,9,0),WW=BW(VW,9,1),GW=BW(HW,5,0),KW=BW(HW,5,1),qW=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},JW=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},YW=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},XW=function(e){return(e+7)/8|0},ZW=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new wW(e.subarray(t,n))},QW=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],$W=function(e,t,n){var r=Error(t||QW[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,$W),!n)throw r;return r},eG=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new wW(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new wW(i*3));var l=function(e){var t=n.length;if(e>t){var r=new wW(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=JW(e,d,1);var v=JW(e,d+1,3);if(d+=3,!v){var y=XW(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&$W(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=WW,m=KW,h=9,g=5;else if(v==2){var S=JW(e,d,31)+257,ee=JW(e,d+10,15)+4,C=S+JW(e,d+5,31)+1;d+=14;for(var w=new wW(C),te=new wW(19),T=0;T<ee;++T)te[kW[T]]=JW(e,d+T*3,7);d+=ee*3;for(var ne=qW(te),re=(1<<ne)-1,E=BW(te,ne,1),T=0;T<C;){var ie=E[JW(e,d,re)];d+=ie&15;var y=ie>>4;if(y<16)w[T++]=y;else{var ae=0,D=0;for(y==16?(D=3+JW(e,d,3),d+=2,ae=w[T-1]):y==17?(D=3+JW(e,d,7),d+=3):y==18&&(D=11+JW(e,d,127),d+=7);D--;)w[T++]=ae}}var oe=w.subarray(0,S),O=w.subarray(S);h=qW(oe),g=qW(O),p=BW(oe,h,1),m=BW(O,g,1)}else $W(1);if(d>_){c&&$W(0);break}}s&&l(f+131072);for(var se=(1<<h)-1,k=(1<<g)-1,ce=d;;ce=d){var ae=p[YW(e,d)&se],A=ae>>4;if(d+=ae&15,d>_){c&&$W(0);break}if(ae||$W(2),A<256)n[f++]=A;else if(A==256){ce=d,p=null;break}else{var le=A-254;if(A>264){var T=A-257,j=DW[T];le=JW(e,d,(1<<j)-1)+MW[T],d+=j}var ue=m[YW(e,d)&k],de=ue>>4;ue||$W(3),d+=ue&15;var O=FW[de];if(de>3){var j=OW[de];O+=YW(e,d)&(1<<j)-1,d+=j}if(d>_){c&&$W(0);break}s&&l(f+131072);var fe=f+le;if(f<O){var pe=a-O,me=Math.min(O,fe);for(pe+f<0&&$W(3);f<me;++f)n[f]=r[pe+f]}for(;f<fe;++f)n[f]=n[f-O]}}t.l=p,t.p=ce,t.b=f,t.f=u,p&&(u=1,t.m=h,t.d=m,t.n=g)}while(!u);return f!=n.length&&o?ZW(n,0,f):n.subarray(0,f)},tG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},nG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},rG=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var i=n.length,a=n.slice();if(!i)return{t:uG,l:0};if(i==1){var o=new wW(n[0].s+1);return o[n[0].s]=1,{t:o,l:1}}n.sort(function(e,t){return e.f-t.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=i-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<i;++r)a[r].s>f&&(f=a[r].s);var p=new TW(f+1),m=iG(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<<g;for(a.sort(function(e,t){return p[t.s]-p[e.s]||e.f-t.f});r<i;++r){var v=a[r].s;if(p[v]>t)h+=_-(1<<m-p[v]),p[v]=t;else break}for(h>>=g;h>0;){var y=a[r].s;p[y]<t?h-=1<<t-p[y]++-1:++r}for(;r>=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new wW(p),l:m}},iG=function(e,t,n){return e.s==-1?Math.max(iG(e.l,t,n+1),iG(e.r,t,n+1)):t[e.s]=n},aG=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new TW(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},oG=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},sG=function(e,t,n){var r=n.length,i=XW(t+2);e[i]=r&255,e[i+1]=r>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a<r;++a)e[i+a+4]=n[a];return(i+4+r)*8},cG=function(e,t,n,r,i,a,o,s,c,l,u){tG(t,u++,n),++i[256];for(var d=rG(i,15),f=d.t,p=d.l,m=rG(a,15),h=m.t,g=m.l,_=aG(f),v=_.c,y=_.n,b=aG(h),x=b.c,S=b.n,ee=new TW(19),C=0;C<v.length;++C)++ee[v[C]&31];for(var C=0;C<x.length;++C)++ee[x[C]&31];for(var w=rG(ee,7),te=w.t,T=w.l,ne=19;ne>4&&!te[kW[ne-1]];--ne);var re=l+5<<3,E=oG(i,VW)+oG(a,HW)+o,ie=oG(i,f)+oG(a,h)+o+14+3*ne+oG(ee,te)+2*ee[16]+3*ee[17]+7*ee[18];if(c>=0&&re<=E&&re<=ie)return sG(t,u,e.subarray(c,c+l));var ae,D,oe,O;if(tG(t,u,1+(ie<E)),u+=2,ie<E){ae=BW(f,p,0),D=f,oe=BW(h,g,0),O=h;var se=BW(te,T,0);tG(t,u,y-257),tG(t,u+5,S-1),tG(t,u+10,ne-4),u+=14;for(var C=0;C<ne;++C)tG(t,u+3*C,te[kW[C]]);u+=3*ne;for(var k=[v,x],ce=0;ce<2;++ce)for(var A=k[ce],C=0;C<A.length;++C){var le=A[C]&31;tG(t,u,se[le]),u+=te[le],le>15&&(tG(t,u,A[C]>>5&127),u+=A[C]>>12)}}else ae=UW,D=VW,oe=GW,O=HW;for(var C=0;C<s;++C){var j=r[C];if(j>255){var le=j>>18&31;nG(t,u,ae[le+257]),u+=D[le+257],le>7&&(tG(t,u,j>>23&31),u+=DW[le]);var ue=j&31;nG(t,u,oe[ue]),u+=O[ue],ue>3&&(nG(t,u,j>>5&8191),u+=OW[ue])}else nG(t,u,ae[j]),u+=D[j]}return nG(t,u,ae[256]),u+D[256]},lG=new EW([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),uG=new wW(0),dG=function(e,t,n,r,i,a){var o=a.z||e.length,s=new wW(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=lG[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new TW(32768),g=a.h||new TW(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new EW(25e3),x=new TW(288),S=new TW(32),ee=0,C=0,w=a.i||0,te=0,T=a.w||0,ne=0;w+2<o;++w){var re=y(w),E=w&32767,ie=g[re];if(h[E]=ie,g[re]=E,T<=w){var ae=o-w;if((ee>7e3||te>24576)&&(ae>423||!l)){u=cG(e,c,0,b,x,S,C,te,ne,w-ne,u),te=ee=C=0,ne=w;for(var D=0;D<286;++D)x[D]=0;for(var D=0;D<30;++D)S[D]=0}var oe=2,O=0,se=p,k=E-ie&32767;if(ae>2&&re==y(w-k))for(var ce=Math.min(f,ae)-1,A=Math.min(32767,w),le=Math.min(258,ae);k<=A&&--se&&E!=ie;){if(e[w+oe]==e[w+oe-k]){for(var j=0;j<le&&e[w+j]==e[w+j-k];++j);if(j>oe){if(oe=j,O=k,j>ce)break;for(var ue=Math.min(k,j-2),de=0,D=0;D<ue;++D){var fe=w-k+D&32767,pe=fe-h[fe]&32767;pe>de&&(de=pe,ie=fe)}}}E=ie,ie=h[E],k+=E-ie&32767}if(O){b[te++]=268435456|NW[oe]<<18|IW[O];var me=NW[oe]&31,he=IW[O]&31;C+=DW[me]+OW[he],++x[257+me],++S[he],T=w+oe,++ee}else b[te++]=e[w],++x[e[w]]}}for(w=Math.max(w,T);w<o;++w)b[te++]=e[w],++x[e[w]];u=cG(e,c,l,b,x,S,C,te,ne,w-ne,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=g,a.p=h,a.i=w,a.w=T)}else{for(var w=a.w||0;w<o+l;w+=65535){var ge=w+65535;ge>=o&&(c[u/8|0]=l,ge=o),u=sG(c,u+1,e.subarray(w,ge))}a.i=o}return ZW(s,0,r+XW(u)+i)},fG=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),pG=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=fG[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},mG=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new wW(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return dG(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},hG=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},gG=function(e,t){return e[t]|e[t+1]<<8},_G=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},vG=function(e,t){return _G(e,t)+_G(e,t+4)*4294967296},yG=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};function bG(e,t){return mG(e,t||{},0,0)}function xG(e,t){return eG(e,{i:2},t&&t.out,t&&t.dictionary)}var SG=function(e,t,n,r){for(var i in e){var a=e[i],o=t+i,s=r;Array.isArray(a)&&(s=hG(r,a[1]),a=a[0]),a instanceof wW?n[o]=[a,s]:(n[o+=`/`]=[new wW(0),s],SG(a,o,n,r))}},CG=typeof TextEncoder<`u`&&new TextEncoder,wG=typeof TextDecoder<`u`&&new TextDecoder;try{wG.decode(uG,{stream:!0})}catch{}var TG=function(e){for(var t=``,n=0;;){var r=e[n++],i=(r>127)+(r>223)+(r>239);if(n+i>e.length)return{s:t,r:ZW(e,n-1)};i?i==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):i&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function EG(e,t){if(t){for(var n=new wW(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(CG)return CG.encode(e);for(var i=e.length,a=new wW(e.length+(e.length>>1)),o=0,s=function(e){a[o++]=e},r=0;r<i;++r){if(o+5>a.length){var c=new wW(o+8+(i-r<<1));c.set(a),a=c}var l=e.charCodeAt(r);l<128||t?s(l):l<2048?(s(192|l>>6),s(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++r)&1023,s(240|l>>18),s(128|l>>12&63),s(128|l>>6&63),s(128|l&63)):(s(224|l>>12),s(128|l>>6&63),s(128|l&63))}return ZW(a,0,o)}function DG(e,t){if(t){for(var n=``,r=0;r<e.length;r+=16384)n+=String.fromCharCode.apply(null,e.subarray(r,r+16384));return n}else if(wG)return wG.decode(e);else{var i=TG(e),a=i.s,n=i.r;return n.length&&$W(8),a}}var OG=function(e,t){return t+30+gG(e,t+26)+gG(e,t+28)},kG=function(e,t,n){var r=gG(e,t+28),i=DG(e.subarray(t+46,t+46+r),!(gG(e,t+8)&2048)),a=t+46+r,o=_G(e,t+20),s=n&&o==4294967295?AG(e,a):[o,_G(e,t+24),_G(e,t+42)],c=s[0],l=s[1],u=s[2];return[gG(e,t+10),c,l,i,a+gG(e,t+30)+gG(e,t+32),u]},AG=function(e,t){for(;gG(e,t)!=1;t+=4+gG(e,t+2));return[vG(e,t+12),vG(e,t+4),vG(e,t+20)]},jG=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&$W(9),t+=r+4}return t},MG=function(e,t,n,r,i,a,o,s){var c=r.length,l=n.extra,u=s&&s.length,d=jG(l);yG(e,t,o==null?67324752:33639248),t+=4,o!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(a<0&&8),e[t++]=i&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),p=f.getFullYear()-1980;if((p<0||p>119)&&$W(10),yG(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&(yG(e,t,n.crc),yG(e,t+4,a<0?-a-2:a),yG(e,t+8,n.size)),yG(e,t+12,c),yG(e,t+14,d),t+=16,o!=null&&(yG(e,t,u),yG(e,t+6,n.attrs),yG(e,t+10,o),t+=14),e.set(r,t),t+=c,d)for(var m in l){var h=l[m],g=h.length;yG(e,t,+m),yG(e,t+2,g),e.set(h,t+4),t+=4+g}return u&&(e.set(s,t),t+=u),t},NG=function(e,t,n,r,i){yG(e,t,101010256),yG(e,t+8,n),yG(e,t+10,n),yG(e,t+12,r),yG(e,t+16,i)};function PG(e,t){t||={};var n={},r=[];SG(e,``,n,t);var i=0,a=0;for(var o in n){var s=n[o],c=s[0],l=s[1],u=l.level==0?0:8,d=EG(o),f=d.length,p=l.comment,m=p&&EG(p),h=m&&m.length,g=jG(l.extra);f>65535&&$W(11);var _=u?bG(c,l):c,v=_.length,y=pG();y.p(c),r.push(hG(l,{size:c.length,crc:y.d(),c:_,f:d,m,u:f!=o.length||m&&p.length!=h,o:i,compression:u})),i+=30+f+g+v,a+=76+2*(f+g)+(h||0)+v}for(var b=new wW(a+22),x=i,S=a-i,ee=0;ee<r.length;++ee){var d=r[ee];MG(b,d.o,d,d.f,d.u,d.c.length);var C=30+d.f.length+jG(d.extra);b.set(d.c,d.o+C),MG(b,i,d,d.f,d.u,d.c.length,d.o,d.m),i+=16+C+(d.m?d.m.length:0)}return NG(b,i,r.length,S,x),b}function FG(e,t){for(var n={},r=e.length-22;_G(e,r)!=101010256;--r)(!r||e.length-r>65558)&&$W(13);var i=gG(e,r+8);if(!i)return{};var a=_G(e,r+16),o=a==4294967295||i==65535;if(o){var s=_G(e,r-12);o=_G(e,s)==101075792,o&&(i=_G(e,s+32),a=_G(e,s+48))}for(var c=t&&t.filter,l=0;l<i;++l){var u=kG(e,a,o),d=u[0],f=u[1],p=u[2],m=u[3],h=u[4],g=u[5],_=OG(e,g);a=h,(!c||c({name:m,size:f,originalSize:p,compression:d}))&&(d?d==8?n[m]=xG(e.subarray(_,_+f),{out:new wW(p)}):$W(14,`unknown compression type `+d):n[m]=ZW(e,_,_+f))}return n}var IG=d(`fs-watcher`),LG=0;function RG(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var zG=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++LG}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),IG.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),IG.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>RG(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){IG.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),IG.debug(`All watchers disposed`)}get size(){return this.registrations.size}},BG=d(`mount-index`),VG=class{mounts=new Map;listeners=new Set;registerMount(e,t){this.mounts.get(e)?.abortController?.abort();let n=new AbortController,r={handle:t,state:{status:`pending`,indexed:0},files:new Set,directories:new Set,abortController:n};this.mounts.set(e,r),this.notifyListeners(),this.indexMount(e,r,n.signal)}unregisterMount(e){let t=this.mounts.get(e);t&&(t.abortController?.abort(),this.mounts.delete(e),this.notifyListeners())}async refreshMount(e){let t=this.mounts.get(e);if(!t)throw Error(`No mount at ${e}`);t.abortController?.abort();let n=new AbortController;t.abortController=n,t.state={status:`pending`,indexed:0},t.files.clear(),t.directories.clear(),this.notifyListeners(),await this.indexMount(e,t,n.signal)}isReady(e){return this.mounts.get(e)?.state.status===`ready`}isAnyIndexing(){for(let e of this.mounts.values())if(e.state.status===`indexing`||e.state.status===`pending`)return!0;return!1}dispose(){for(let e of this.mounts.values())e.abortController?.abort();this.mounts.clear(),this.listeners.clear()}getState(e){return this.mounts.get(e)?.state}getFiles(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;if(!t)return[...n.files];let r=[];for(let e of n.files)t(e)&&r.push(e);return r}getDirectoryEntries(e,t){let n=this.mounts.get(e);if(n?.state.status!==`ready`)return;let r=t===`/`?`/`:t+`/`,i=new Map;for(let e of n.files){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`file`)}for(let e of n.directories){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`directory`)}return[...i.entries()].map(([e,t])=>({name:e,type:t}))}hasPath(e,t){let n=this.mounts.get(e);if(n?.state.status===`ready`)return n.files.has(t)||n.directories.has(t)}notifyWrite(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.add(e);let r=e;for(;r!==t;){let e=r.lastIndexOf(`/`);if(e<=0)break;r=r.slice(0,e)||`/`,r.length>=t.length&&n.directories.add(r)}}notifyDelete(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(n?.state.status!==`ready`)return;n.files.delete(e),n.directories.delete(e);let r=e+`/`;for(let e of n.files)e.startsWith(r)&&n.files.delete(e);for(let e of n.directories)e.startsWith(r)&&n.directories.delete(e)}notifyRename(e,t){let n=this.findMountForPath(e);if(!n)return;let r=this.mounts.get(n);if(r?.state.status===`ready`){if(r.files.has(e)){r.files.delete(e),r.files.add(t);return}if(r.directories.has(e)){r.directories.delete(e),r.directories.add(t);let n=e+`/`,i=t+`/`;for(let e of[...r.files])e.startsWith(n)&&(r.files.delete(e),r.files.add(i+e.slice(n.length)));for(let e of[...r.directories])e.startsWith(n)&&(r.directories.delete(e),r.directories.add(i+e.slice(n.length)))}}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}findMountForPath(e){let t;for(let n of this.mounts.keys())(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.length)&&(t=n);return t}notifyListeners(){for(let e of this.listeners)try{e()}catch{}}async indexMount(e,t,n){t.state={status:`indexing`,indexed:0},this.notifyListeners();try{if(await this.walkHandle(e,t.handle,t,n),n.aborted)return;t.state={status:`ready`,indexed:t.files.size+t.directories.size,total:t.files.size+t.directories.size},t.abortController=null,BG.info(`Mount indexed`,{path:e,files:t.files.size,directories:t.directories.size})}catch(r){if(n.aborted)return;let i=r instanceof Error?r.message:String(r);t.state={status:`error`,indexed:0,error:i},BG.error(`Mount indexing failed`,{path:e,error:i})}this.notifyListeners()}async walkHandle(e,t,n,r){if(r.aborted)return;n.directories.add(e);let i=t;for await(let[t,a]of i){if(r.aborted)return;let i=e===`/`?`/${t}`:`${e}/${t}`;a.kind===`file`?(n.files.add(i),n.state.indexed++):a.kind===`directory`&&await this.walkHandle(i,a,n,r),n.state.indexed%500==0&&(this.notifyListeners(),await new Promise(e=>setTimeout(e,0)))}}},HG=class{vfs;allowedPrefixes;readOnlyPrefixes;constructor(e,t,n=[]){this.vfs=e;let r=e=>{let t=v(e);return t.endsWith(`/`)?t:t+`/`};this.allowedPrefixes=t.map(r),this.readOnlyPrefixes=n.map(r)}getAllPrefixes(){let e=this.vfs.listMounts().map(e=>e.endsWith(`/`)?e:e+`/`);return[...this.allowedPrefixes,...this.readOnlyPrefixes,...e]}isAllowed(e){let t=v(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e)||t===`/`||e.startsWith(t+`/`))}isAllowedStrict(e){let t=v(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e))}isWritable(e){let t=v(e);return this.allowedPrefixes.some(e=>t===e.slice(0,-1)||t.startsWith(e))}canWrite(e){return this.isWritable(e)}checkWrite(e){if(!this.isWritable(e))throw new E(`EACCES`,`permission denied`,v(e))}async resolveAndCheckRead(e){try{let t=await this.vfs.realpath(e);if(!this.isAllowedStrict(t))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}catch(t){throw t instanceof E?t:new E(`ENOENT`,`no such file or directory`,v(e))}}async resolveAndCheckWrite(e){try{let t=await this.vfs.realpath(e);if(!this.isWritable(t))throw new E(`EACCES`,`permission denied`,v(e));return t}catch(t){throw t instanceof E?t:new E(`EACCES`,`permission denied`,v(e))}}getUnderlyingFS(){return this.vfs}isPathUnderMount(e){return this.vfs.isPathUnderMount(e)}async readFile(e,t){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let n=await this.resolveAndCheckRead(e);return this.vfs.readFile(n,t)}async readDir(e){if(!this.isAllowed(e))return[];let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return[]}let n=await this.vfs.readDir(t);if(!this.isAllowedStrict(e)){let t=v(e);return n.filter(e=>{let n=t===`/`?`/${e.name}`:`${t}/${e.name}`;return this.isAllowed(n)})}return n}async stat(e){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));if(this.isAllowedStrict(e)){let t=await this.resolveAndCheckRead(e);return this.vfs.stat(t)}return this.vfs.stat(e)}scanPathForSymlinks(e,t){let n=v(e);if(n===`/`)return!1;let r=n.slice(1).split(`/`),i=t?r.length:r.length-1,a=``;for(let e=0;e<i;e++){a=a+`/`+r[e];let t=this.vfs.lstatSync(a);if(t===null)return null;if(t.type===`symlink`)return!0}return!1}statSync(e){return!this.isAllowedStrict(e)||this.scanPathForSymlinks(e,!0)!==!1?null:this.vfs.statSync(e)}lstatSync(e){return!this.isAllowed(e)||this.scanPathForSymlinks(e,!1)!==!1?null:this.vfs.lstatSync(e)}readDirSync(e){if(!this.isAllowed(e)||this.scanPathForSymlinks(e,!0)!==!1)return null;let t=this.vfs.readDirSync(e);if(t===null)return null;if(this.isAllowedStrict(e))return t;let n=v(e);return t.filter(e=>{let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;return this.isAllowed(t)})}async realpath(e){let t;try{t=await this.vfs.realpath(e)}catch(t){throw t instanceof E?t:new E(`ENOENT`,`no such file or directory`,v(e))}if(!this.isAllowedStrict(t))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}async exists(e){if(!this.isAllowed(e))return!1;if(this.isAllowedStrict(e))try{await this.resolveAndCheckRead(e)}catch{return!1}return this.vfs.exists(e)}async readTextFile(e){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=await this.resolveAndCheckRead(e);return this.vfs.readTextFile(t)}async*walk(e){if(!this.isAllowed(e))return;let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return}for await(let e of this.vfs.walk(t))this.isAllowed(e)&&(yield e)}async writeFile(e,t,n){this.checkWrite(e);let r=this.vfs.dirname(e),i=this.vfs.basename(e);try{let t=await this.vfs.realpath(r);if(!this.isWritable(t+`/`+i))throw new E(`EACCES`,`permission denied`,v(e))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(e)).type===`symlink`&&await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.writeFile(e,t,n)}async mkdir(e,t){this.checkWrite(e);let n=this.vfs.dirname(e),r=this.vfs.basename(e);try{let t=await this.vfs.realpath(n);if(!this.isWritable(t+`/`+r))throw new E(`EACCES`,`permission denied`,v(e))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.mkdir(e,t)}async rm(e,t){this.checkWrite(e);try{(await this.vfs.lstat(e)).type===`symlink`||await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.rm(e,t)}async rename(e,t){this.checkWrite(e),this.checkWrite(t),await this.resolveAndCheckWrite(e);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.rename(e,t)}async copyFile(e,t){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));this.checkWrite(t);let n=await this.resolveAndCheckRead(e),r=this.vfs.dirname(t),i=this.vfs.basename(t);try{let e=await this.vfs.realpath(r);if(!this.isWritable(e+`/`+i))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(t)).type===`symlink`&&await this.resolveAndCheckWrite(t)}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.copyFile(n,t)}async symlink(e,t){this.checkWrite(t);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new E(`EACCES`,`permission denied`,v(t))}catch(e){if(e instanceof E&&e.code===`EACCES`)throw e}return this.vfs.symlink(e,t)}async readlink(e){if(!this.isAllowedStrict(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=await this.vfs.readlink(e),n;if(n=t.startsWith(`/`)?v(t):v(this.vfs.dirname(e)+`/`+t),!this.isAllowedStrict(n))throw new E(`ENOENT`,`no such file or directory`,v(e));return t}async lstat(e){if(!this.isAllowed(e))throw new E(`ENOENT`,`no such file or directory`,v(e));let t=v(e),n=this.vfs.dirname(t),r=this.vfs.basename(t),i;if(n===t)i=n;else try{i=await this.vfs.realpath(n)}catch{throw new E(`ENOENT`,`no such file or directory`,t)}let a=i===`/`?`/${r}`:`${i}/${r}`;if(!this.isAllowed(a))throw new E(`ENOENT`,`no such file or directory`,t);return this.vfs.lstat(a)}watch(e,t,n){if(!this.isAllowed(e))throw new E(`EACCES`,`permission denied`,v(e));let r=this.vfs.getWatcher();if(!r)throw new E(`EINVAL`,`no watcher configured`);return r.watch(v(e),t,n)}dirname(e){return this.vfs.dirname(e)}basename(e){return this.vfs.basename(e)}async dispose(){await this.vfs.dispose()}},UG=10;function WG(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`opfs`}catch{}return`memory`}var GG=class e{lfs;lfsSync;rawLfs=null;rawLfsSync=null;_ready;_readyResolved=!1;backend;mountPoints=new Map;opfsBackendFs=null;opfsHandle=null;mountRoot=``;internalMounts=new Set;watcher=null;dbName;mountSyncChannel=null;mountIndex=new VG;constructor(t,n,r,i){if(this.dbName=t,this.backend=r===`opfs`?`opfs`:`memory`,this.lfs=this.makeDeferredLfs(),this.lfsSync=this.makeDeferredLfsSync(),this._ready=this.backend===`opfs`?e.initOpfsBackend(this,i,n===!0):e.initMemoryBackend(this,t,n===!0),this._ready.then(()=>{this._readyResolved=!0},()=>{}),typeof BroadcastChannel<`u`)try{this.mountSyncChannel=new BroadcastChannel(`vfs-mount-sync:${t}`),this.mountSyncChannel.onmessage=e=>{let{type:t,path:n,descriptor:r}=e.data??{};if(t===`mount`&&typeof n==`string`&&r)this.reconstructBackendFromDescriptor(r).then(e=>{this.mountPoints.set(n,e),e.kind===`local`&&this.mountIndex.registerMount(n,e.getHandle()),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}).catch(()=>{});else if(t===`unmount`&&typeof n==`string`){let e=this.mountPoints.get(n);this.mountPoints.delete(n),this.mountIndex.unregisterMount(n),e?.close(),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}}}catch{}}static async initOpfsBackend(t,n,r){let i=n??await e.acquireOpfsHandle(t.dbName,r);await e.seedOpfsMetadataSidecarIfMissing(i);let[a,{WebAccess:s}]=await Promise.all([o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4])),o(()=>import(`./dist-CvzfEfDj2.js`),__vite__mapDeps([31,30,4]))]);await e.ensureRootMount(a);let c=`/__opfs__/${t.dbName}`,l=e.opfsBackends.get(t.dbName);if(l&&r){try{a.umount(c)}catch{}e.opfsBackends.delete(t.dbName),l=void 0}if(!l){let n=await a.resolveMountConfig({backend:s,handle:i,metadata:`/.metadata.json`});try{a.mount(c,n)}catch{}l={backendFs:n,refs:0},e.opfsBackends.set(t.dbName,l)}l.refs+=1,t.opfsBackendFs=l.backendFs.index?l.backendFs:null,t.opfsHandle=i,t.mountRoot=c,t.rawLfs=a.promises,t.rawLfsSync=a}static async initMemoryBackend(t,n,r){let i=await o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4]));await e.ensureRootMount(i);let a=`/__zenfs__/${n}`,s=e.memoryBackends.get(n);if(s&&r){try{i.umount(a)}catch{}e.memoryBackends.delete(n),s=void 0}s||(s={store:i.InMemory.create({label:n}),refs:0},e.memoryBackends.set(n,s)),s.refs+=1;try{i.mount(a,s.store)}catch{}t.mountRoot=a,t.rawLfs=i.promises,t.rawLfsSync=i,t.opfsBackendFs=null,t.opfsHandle=null}static rootMountReady=null;static memoryBackends=new Map;static opfsBackends=new Map;static async ensureRootMount(t){return e.rootMountReady||=(async()=>{await t.configureSingle({backend:t.InMemory,label:`__vfs_root__`})})(),e.rootMountReady}prefix(e){return this.mountRoot?e===`/`?this.mountRoot:this.mountRoot+e:e}unprefix(e){return!this.mountRoot||!e.startsWith(this.mountRoot)?e:e.slice(this.mountRoot.length)||`/`}makeDeferredLfs(){let e=e=>this.prefix(e),t=e=>this.unprefix(e),n=()=>{if(!this.rawLfs)throw Error(`VirtualFS used before init resolved`);return this.rawLfs};return{readFile:(t,r)=>this._readyResolved?n().readFile(e(t),r):this._ready.then(()=>n().readFile(e(t),r)),writeFile:(t,r,i)=>this._readyResolved?n().writeFile(e(t),r,i):this._ready.then(()=>n().writeFile(e(t),r,i)),readdir:t=>this._readyResolved?n().readdir(e(t)):this._ready.then(()=>n().readdir(e(t))),mkdir:(t,r)=>this._readyResolved?n().mkdir(e(t),r):this._ready.then(()=>n().mkdir(e(t),r)),rmdir:t=>this._readyResolved?n().rmdir(e(t)):this._ready.then(()=>n().rmdir(e(t))),unlink:t=>this._readyResolved?n().unlink(e(t)):this._ready.then(()=>n().unlink(e(t))),rename:(t,r)=>this._readyResolved?n().rename(e(t),e(r)):this._ready.then(()=>n().rename(e(t),e(r))),stat:t=>this._readyResolved?n().stat(e(t)):this._ready.then(()=>n().stat(e(t))),lstat:t=>this._readyResolved?n().lstat(e(t)):this._ready.then(()=>n().lstat(e(t))),symlink:(t,r)=>{let i=t.startsWith(`/`)?e(t):t;return this._readyResolved?n().symlink(i,e(r)):this._ready.then(()=>n().symlink(i,e(r)))},readlink:async r=>(this._readyResolved||await this._ready,t(await n().readlink(e(r)))),realpath:async r=>{this._readyResolved||await this._ready;let i=n();return typeof i.realpath==`function`?t(await i.realpath(e(r))):e(r)}}}makeDeferredLfsSync(){let e=e=>this.prefix(e),t=e=>this.unprefix(e);return{readdirSync:t=>{let n=this.rawLfsSync;return n?.readdirSync?n.readdirSync(e(t)):void 0},statSync:t=>{let n=this.rawLfsSync;return n?.statSync?n.statSync(e(t)):void 0},lstatSync:t=>{let n=this.rawLfsSync;return n?.lstatSync?n.lstatSync(e(t)):void 0},readlinkSync:n=>{let r=this.rawLfsSync;return r?.readlinkSync?t(r.readlinkSync(e(n))):void 0}}}static async seedOpfsMetadataSidecarIfMissing(e){let t=`.metadata.json`;try{await e.getFileHandle(t);return}catch(e){if(e?.name!==`NotFoundError`)throw e}let n=await(await e.getFileHandle(t,{create:!0})).createWritable(),r=JSON.stringify({version:1,maxSize:4294967295,entries:{}});await n.write(r),await n.close()}static async acquireOpfsHandle(e,t){let n=navigator.storage;if(!n?.getDirectory)throw new E(`EINVAL`,`OPFS is not available in this environment`);let r=await n.getDirectory();if(t)try{await r.removeEntry(e,{recursive:!0})}catch{}return r.getDirectoryHandle(e,{create:!0})}static async create(t){let n=t?.dbName??`browser-fs`,r=t?.wipe===!0,i=new e(n,r,t?.backend??WG());return await i._ready,r&&await xW().catch(()=>{}),i}async flush(){await this.writeOpfsMetadataSidecar()}async writeOpfsMetadataSidecar(){if(this.backend!==`opfs`)return;let e=this.opfsBackendFs,t=this.opfsHandle;if(!e||!t)return;let n=JSON.stringify(e.index.toJSON()),r=await(await t.getFileHandle(`.metadata.json`,{create:!0})).createWritable();await r.write(n),await r.close()}canWrite(e){return!0}setWatcher(e){this.watcher=e}getWatcher(){return this.watcher}async dispose(){if(this.mountSyncChannel?.close(),this.mountSyncChannel=null,this.watcher?.dispose(),this.watcher=null,this.mountIndex.dispose(),await this.writeOpfsMetadataSidecar(),this.mountRoot){let t=this.backend===`opfs`?e.opfsBackends:e.memoryBackends,n=t.get(this.dbName);if(n&&(--n.refs,n.refs<=0)){t.delete(this.dbName);try{(await o(()=>import(`./dist-C6lFkA1A2.js`).then(e=>e.t),__vite__mapDeps([30,4]))).umount(this.mountRoot)}catch{}}}}readDirSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.readdirSync!=`function`||typeof n.lstatSync!=`function`)return null;try{let e=n.readdirSync(t),r=[];for(let i of e){let e=t===`/`?`/${i}`:`${t}/${i}`;try{let t=n.lstatSync(e),a=t.isSymbolicLink()?`symlink`:t.isDirectory()?`directory`:`file`;r.push({name:i,type:a})}catch{}}return r}catch{return null}}statSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.statSync!=`function`||typeof n.lstatSync!=`function`||typeof n.readlinkSync!=`function`)return null;let r=t;for(let e=0;e<=UG;e++){let e;try{e=n.lstatSync(r)}catch{return null}if(!e.isSymbolicLink())return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs};let t;try{t=n.readlinkSync(r)}catch{return null}r=t.startsWith(`/`)?v(t):v(b(_(r).dir,t))}return null}lstatSync(e){let t=v(e);if(this.findMount(t))return null;let n=this.lfsSync;if(typeof n.lstatSync!=`function`)return null;try{let e=n.lstatSync(t);if(e.isSymbolicLink()){let r=n.readlinkSync?n.readlinkSync(t):``;return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:r}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return null}}async mount(e,t){let n=v(e);if(this.mountPoints.has(n))throw new E(`EEXIST`,`mount point is already mounted`,n);try{if((await this.lstat(n)).type!==`directory`)throw new E(`ENOTDIR`,`mount point must be a directory`,n);if((await this.readDir(n)).length>0)throw new E(`ENOTEMPTY`,`mount point must be empty to avoid shadowing existing files`,n)}catch(e){if(!(e instanceof E)||e.code!==`ENOENT`)throw e}let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),t.kind===`local`&&this.mountIndex.registerMount(n,t.getHandle());let i=t.kind===`local`?{kind:`local`,mountId:t.mountId,idbHandleKey:n}:t.kind===`s3`?{kind:`s3`,mountId:t.mountId,source:t.source,profile:t.profile??`default`}:{kind:`da`,mountId:t.mountId,source:t.source,profile:t.profile??`default`};try{this.mountSyncChannel?.postMessage({type:`mount`,path:n,descriptor:i})}catch{}this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}]);try{await _W({targetPath:n,descriptor:i,createdAt:Date.now()},t.kind===`local`?t.getHandle():void 0)}catch{}}async unmount(e){let t=v(e),n=this.mountPoints.get(t);this.mountPoints.delete(t),this.mountIndex.unregisterMount(t);try{this.mountSyncChannel?.postMessage({type:`unmount`,path:t})}catch{}this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close();try{await vW(t)}catch{}}async reconstructBackendFromDescriptor(e){switch(e.kind){case`local`:{let t=await bW(e.idbHandleKey);if(!t)throw Error(`no handle stored for ${e.idbHandleKey}`);return _U.fromHandle(t,{mountId:e.mountId})}case`s3`:{let{S3MountBackend:t,RemoteMountCache:n,makeSignedFetchS3:r}=await o(async()=>{let{S3MountBackend:e,RemoteMountCache:t,makeSignedFetchS3:n}=await Promise.resolve().then(()=>dW);return{S3MountBackend:e,RemoteMountCache:t,makeSignedFetchS3:n}},void 0),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r(e.profile)})}case`da`:{let{DaMountBackend:t,RemoteMountCache:n,makeSignedFetchDa:r}=await o(async()=>{let{DaMountBackend:e,RemoteMountCache:t,makeSignedFetchDa:n}=await Promise.resolve().then(()=>dW);return{DaMountBackend:e,RemoteMountCache:t,makeSignedFetchDa:n}},void 0),i=new n({mountId:e.mountId,ttlMs:3e4});return new t({source:e.source,profile:e.profile,cache:i,mountId:e.mountId,signedFetch:r()})}}}listMounts(){let e=[];for(let t of this.mountPoints.keys())this.internalMounts.has(t)||e.push(t);return e}listInternalMounts(){return[...this.internalMounts]}listMountPoints(){let e=[];for(let[t,n]of this.mountPoints)this.internalMounts.has(t)||e.push({path:t,kind:n.kind});return e}async mountInternal(e,t){let n=v(e);if(this.mountPoints.has(n))throw new E(`EEXIST`,`mount point is already mounted`,n);let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),this.internalMounts.add(n),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])}async unmountInternal(e){let t=v(e);if(!this.internalMounts.has(t))throw new E(`ENOENT`,`not an internal mount point`,t);let n=this.mountPoints.get(t);this.mountPoints.delete(t),this.internalMounts.delete(t),this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]),await n?.close()}getMountIndex(){return this.mountIndex}async refreshMount(e,t){let n=v(e),r=this.mountPoints.get(n);if(!r)throw new E(`ENOENT`,`not a mount point`,n);let i=await r.refresh(t);return r.kind===`local`&&await this.mountIndex.refreshMount(n),i}isPathUnderMount(e){for(let t of this.mountPoints.keys())if(e===t||e.startsWith(t+`/`))return!0;return!1}static rebrandFsError(e,t){if(e instanceof E){let n=`${e.code}: `,r=e.message;throw r.startsWith(n)&&(r=r.slice(n.length)),e.path&&r.endsWith(` '${e.path}'`)&&(r=r.slice(0,r.length-` '${e.path}'`.length)),new E(e.code,r,t)}throw e}findMount(e){let t=null;for(let[n,r]of this.mountPoints)(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.mountPath.length)&&(t={mountPath:n,backend:r});return t?e===t.mountPath?{path:t.mountPath,backend:t.backend,relParts:[]}:{path:t.mountPath,backend:t.backend,relParts:e.slice(t.mountPath.length+1).split(`/`).filter(Boolean)}:null}async readFile(t,n){let r=v(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new E(`EISDIR`,`is a directory`,r);let t=i.relParts.join(`/`);try{let e=await i.backend.readFile(t);return(n?.encoding??`utf-8`)===`utf-8`?new TextDecoder(`utf-8`).decode(e):e}catch(t){e.rebrandFsError(t,r)}}let a=await this.resolveSymlinks(r);try{return(n?.encoding??`utf-8`)===`utf-8`?await this.lfs.readFile(a,{encoding:`utf8`}):await this.lfs.readFile(a)}catch(e){throw this.convertError(e,r)}}async writeFile(t,n,r){let i=v(t),a=this.findMount(i);if(a){if(a.relParts.length===0)throw new E(`EISDIR`,`is a directory`,i);let t=a.relParts.join(`/`),r=!1;try{await this.stat(i),r=!0}catch{}let o=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);try{await a.backend.writeFile(t,o)}catch(t){e.rebrandFsError(t,i)}this.watcher?.notify([{type:r?`modify`:`create`,path:i,entryType:`file`}]),this.mountIndex.notifyWrite(i);return}let o;try{o=await this.resolveSymlinks(i)}catch{o=i}let s=!1;try{await this.lfs.stat(o),s=!0}catch{}let{dir:c}=_(o);c!==`/`&&await this.mkdir(c,{recursive:!0});try{await this.lfs.writeFile(o,n)}catch(e){throw this.convertError(e,i)}this.watcher?.notify([{type:s?`modify`:`create`,path:o,entryType:`file`}])}async readDir(t){let n=v(t),r=this.findMount(n);if(r){let t=this.mountIndex.getDirectoryEntries(r.path,n);if(t!==void 0){let e=new Map;for(let n of t)e.set(n.name,{name:n.name,type:n.type});let r=n===`/`?`/`:`${n}/`;for(let t of this.mountPoints.keys()){if(t===n||!t.startsWith(r))continue;let i=t.slice(r.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}return[...e.values()]}let i=r.relParts.join(`/`)||`/`,a;try{a=await r.backend.readDir(i)}catch(t){e.rebrandFsError(t,n)}let o=new Map;for(let e of a)o.set(e.name,{name:e.name,type:e.kind===`directory`?`directory`:`file`});let s=n===`/`?`/`:`${n}/`;for(let e of this.mountPoints.keys()){if(e===n||!e.startsWith(s))continue;let t=e.slice(s.length);!t||t.includes(`/`)||o.has(t)||o.set(t,{name:t,type:`directory`})}return[...o.values()]}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.readdir(i),t=[];for(let n of e){let e=i===`/`?`/${n}`:`${i}/${n}`;try{let r=await this.lfs.lstat(e);r.isSymbolicLink()?t.push({name:n,type:`symlink`}):t.push({name:n,type:r.isDirectory()?`directory`:`file`})}catch{}}return t}catch(e){throw this.convertError(e,n)}}async mkdir(t,n){let r=v(t);if(r===`/`)return;let i=this.findMount(r);if(i){if(i.relParts.length===0)return;let t=i.relParts.join(`/`),n=await this.exists(r);try{await i.backend.mkdir(t)}catch(t){e.rebrandFsError(t,r)}n||this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}]);return}if(n?.recursive){let e=r.split(`/`).filter(Boolean),t=``;for(let n of e){t+=`/`+n;try{await this.lfs.mkdir(t)}catch(e){if(e instanceof Error&&!e.message.includes(`EEXIST`))throw this.convertError(e,t)}}}else{try{await this.lfs.mkdir(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}])}}async rm(t,n){let r=v(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new E(`EINVAL`,`cannot remove a mount point — use unmount`,r);let t;try{t=(await this.stat(r)).type}catch{}let a=i.relParts.join(`/`);try{await i.backend.remove(a,{recursive:n?.recursive})}catch(t){e.rebrandFsError(t,r)}this.watcher?.notify([{type:`delete`,path:r,entryType:t}]),this.mountIndex.notifyDelete(r);return}try{let e=await this.lfs.lstat(r);e.isSymbolicLink()?await this.lfs.unlink(r):e.isDirectory()?n?.recursive?await this.rmRecursive(r):await this.lfs.rmdir(r):await this.lfs.unlink(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`delete`,path:r}])}async rmRecursive(e){let t=await this.lfs.readdir(e);for(let n of t){let t=e===`/`?`/${n}`:`${e}/${n}`;(await this.lfs.stat(t)).isDirectory()?await this.rmRecursive(t):await this.lfs.unlink(t)}await this.lfs.rmdir(e)}async stat(t){let n=v(t),r=this.findMount(n);if(r){if(r.relParts.length===0)try{let e=await this.lfs.stat(n);return{type:`directory`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return{type:`directory`,size:0,mtime:Date.now(),ctime:Date.now()}}let t=r.relParts.join(`/`);try{let e=await r.backend.stat(t);return{type:e.kind===`directory`?`directory`:`file`,size:e.size,mtime:e.mtime,ctime:e.mtime}}catch(t){e.rebrandFsError(t,n)}}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.stat(i);return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,n)}}async exists(e){let t=v(e),n=this.findMount(t);if(n){if(n.relParts.length===0)return!0;try{return await this.stat(t),!0}catch{return!1}}try{return await this.stat(t),!0}catch{try{return await this.lfs.lstat(t),!0}catch{return!1}}}async rename(e,t){let n=v(e),r=v(t),i;try{i=(await this.lstat(n)).type}catch{}try{await this.lfs.rename(n,r)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`delete`,path:n,entryType:i},{type:`create`,path:r,entryType:i}]),this.mountIndex.notifyRename(n,r)}async readTextFile(e){return await this.readFile(e,{encoding:`utf-8`})}async*walk(e,t){let n=v(e);if(this.mountPoints.size>0&&this.mountPoints.has(n)&&![...this.mountPoints.keys()].some(e=>e!==n&&e.startsWith(n+`/`))&&this.mountIndex.isReady(n)){let e=this.mountIndex.getFiles(n);if(e){for(let t of e)yield t;return}}let r=t??new Set,i;try{i=await this.realpath(n)}catch{i=n}if(r.has(i))return;r.add(i);let a=await this.readDir(n);for(let e of a){let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;if(e.type===`file`)yield t;else if(e.type===`symlink`)try{let e=await this.stat(t);e.type===`file`?yield t:e.type===`directory`&&(yield*this.walk(t,r))}catch{}else yield*this.walk(t,r)}}async copyFile(e,t){if((await this.stat(e)).type===`directory`)throw new E(`EISDIR`,`is a directory`,e);let n=await this.readFile(e,{encoding:`binary`});await this.writeFile(t,n)}dirname(e){return _(v(e)).dir}basename(e){return _(v(e)).base}async symlink(e,t){let n=v(t);if(this.findMount(n))throw new E(`EINVAL`,`symlinks not supported on mounted filesystems`,n);let{dir:r}=_(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.symlink(e,n)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`create`,path:n,entryType:`symlink`}])}async readlink(e){let t=v(e);try{return await this.lfs.readlink(t)}catch(e){throw this.convertError(e,t)}}async lstat(e){let t=v(e);if(this.findMount(t))return this.stat(t);try{let e=await this.lfs.lstat(t);if(e.isSymbolicLink()){let n=await this.lfs.readlink(t);return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:n}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,t)}}async realpath(e){let t=v(e);if(this.findMount(t))return t;let n=0,r=t.split(`/`).filter(Boolean),i=`/`;for(let e=0;e<r.length;e++){let a=i===`/`?`/${r[e]}`:`${i}/${r[e]}`;for(;;){let o;try{o=await this.lfs.lstat(a)}catch(n){let o=this.convertError(n,t);if(o.code===`ENOENT`&&e===r.length-1)return i=a,i;throw o}if(!o.isSymbolicLink()){i=a;break}if(++n>UG)throw new E(`ELOOP`,`too many symbolic links encountered`,t);let s;try{s=await this.lfs.readlink(a)}catch(e){throw this.convertError(e,t)}a=s.startsWith(`/`)?v(s):v(b(_(a).dir,s))}}return i}async resolveSymlinks(e){return this.findMount(e)?e:this.realpath(e)}convertError(e,t){if(e instanceof E)return e;let n=e?.code;if(typeof n==`string`){let r=n;if([`ENOENT`,`EEXIST`,`ENOTDIR`,`EISDIR`,`ENOTEMPTY`,`EINVAL`,`EACCES`,`ELOOP`,`EBUSY`,`EFBIG`,`EBADF`,`EIO`].includes(r))return new E(r,(e instanceof Error?e.message:String(e))||r,t)}let r=e instanceof Error?e.message:String(e);return r.includes(`ENOENT`)?new E(`ENOENT`,`no such file or directory`,t):r.includes(`EEXIST`)?new E(`EEXIST`,`file already exists`,t):r.includes(`ENOTDIR`)?new E(`ENOTDIR`,`not a directory`,t):r.includes(`EISDIR`)?new E(`EISDIR`,`is a directory`,t):r.includes(`ENOTEMPTY`)?new E(`ENOTEMPTY`,`directory not empty`,t):r.includes(`ELOOP`)?new E(`ELOOP`,`too many levels of symbolic links`,t):new E(`EINVAL`,r,t)}},KG=e({FsError:()=>E,FsWatcher:()=>zG,MountIndex:()=>VG,RestrictedFS:()=>HG,VirtualFS:()=>GG,joinPath:()=>b,normalizePath:()=>v,pathSegments:()=>y,resolveVfsBackendFromEnv:()=>WG,splitPath:()=>_}),qG=`.skill`,JG=1e3,YG=`/workspace/skills`,XG=`SKILL.md`,ZG=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function QG(e){if(e===`__MACOSX`||e.startsWith(`__MACOSX/`))return!0;let t=e.includes(`/`)?e.slice(e.lastIndexOf(`/`)+1):e;return!!(t===`.DS_Store`||t===`Thumbs.db`||t===`desktop.ini`||t.startsWith(`._`))}var $G=class extends Error{};function eK(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function tK(e){if(!ZG.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function nK(e){let t=[];for(let[n,r]of Object.entries(e)){let e=eK(n);e&&(QG(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function rK(e){let t=e.filter(e=>e.path===`SKILL.md`||e.path.endsWith(`/SKILL.md`));if(t.length===0)throw Error(`Skill archive is missing ${XG}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${XG} files.`);return t[0]}function iK(e){let t=0,n=0;return FG(e,{filter(e){if(t++,t>1e3)throw new $G(`Skill archives may contain at most ${JG} entries.`);if(n+=e.originalSize,n>52428800)throw new $G(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function aK(e){return b(YG,`.${e}.tmp-${`${Date.now()}-${Math.random().toString(16).slice(2,8)}`}`)}function oK(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}async function sK(e,t){if(!t.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${qG} archives can be installed with drag and drop.`);if(t.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`);let n;try{n=iK(new Uint8Array(await t.arrayBuffer()))}catch(e){if(e instanceof $G)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}let r=nK(n),i=rK(r),a=oK(t.name,i.path);tK(a);let o=b(YG,a);if(await e.exists(o))throw Error(`Skill "${a}" already exists at ${o}.`);let s=aK(a),c=i.path===`SKILL.md`?``:i.path.slice(0,-(XG.length+1));await e.mkdir(s,{recursive:!0});try{let t=0;for(let n of r){if(c&&(n.path===c||!n.path.startsWith(`${c}/`)))continue;let r=c?n.path.slice(c.length+1):n.path;if(!r)continue;let i=b(s,r),{dir:a}=_(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,n.bytes),t++}return await e.rename(s,o),{skillName:a,destinationPath:o,fileCount:t}}catch(t){throw await e.exists(s)&&await e.rm(s,{recursive:!0}),t}}function cK(e){return e.toLowerCase().endsWith(qG)}function lK(e){return Array.from(e).find(e=>cK(e.name))??null}function uK(e){if(!e)return!1;if(e.items){for(let t of Array.from(e.items))if(t.kind===`file`)return!0}return!1}function dK(e){if(!e)return null;if(e.files){let t=lK(e.files);if(t)return t}if(!e.items)return null;for(let t of Array.from(e.items)){if(t.kind&&t.kind!==`file`)continue;let e=t.getAsFile?.();if(e&&cK(e.name))return e}return null}function fK(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||cK(e.name)||(n.add(e),t.push(e))};if(e.files)for(let t of Array.from(e.files))r(t);if(e.items)for(let t of Array.from(e.items))t.kind&&t.kind!==`file`||r(t.getAsFile?.());return t}function pK(){let e=document.createElement(`div`);e.className=`skill-drop-overlay`;let t=document.createElement(`div`);t.className=`skill-drop-overlay__card`;let n=document.createElement(`div`);n.className=`skill-drop-overlay__title`,t.appendChild(n);let r=document.createElement(`div`);return r.className=`skill-drop-overlay__desc`,t.appendChild(r),e.appendChild(t),document.body.appendChild(e),{show(t,i){n.textContent=t,r.textContent=i,e.classList.add(`skill-drop-overlay--visible`)},hide(){e.classList.remove(`skill-drop-overlay--visible`)}}}function mK(){let e=document.createElement(`div`);return e.className=`skill-drop-toast-container`,document.body.appendChild(e),(t,n)=>{let r=document.createElement(`div`);r.className=`skill-drop-toast skill-drop-toast--${n}`,r.textContent=t,e.appendChild(r),requestAnimationFrame(()=>r.classList.add(`skill-drop-toast--visible`)),window.setTimeout(()=>{r.classList.remove(`skill-drop-toast--visible`),window.setTimeout(()=>r.remove(),180)},4200)}}function hK(e){let{fs:t,onNotice:n,onInstalled:r,onAttachFiles:i}=e,a=pK(),o=0,s=!1,c=()=>{o=0,s||a.hide()};window.addEventListener(`dragenter`,e=>{uK(e.dataTransfer)&&(e.preventDefault(),o+=1,s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{uK(e.dataTransfer)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragleave`,()=>{o!==0&&(o=Math.max(0,o-1),o===0&&!s&&a.hide())}),window.addEventListener(`dragend`,c),window.addEventListener(`blur`,c),window.addEventListener(`drop`,async e=>{let l=dK(e.dataTransfer),u=fK(e.dataTransfer);if(!l&&u.length===0){c();return}if(e.preventDefault(),o=0,l&&s){a.hide(),n(`Another .skill installation is already in progress.`,`error`);return}if(u.length>0&&i)try{await i(u)}catch(e){n(`Failed to attach dropped files: ${e instanceof Error?e.message:String(e)}`,`error`)}if(l){s=!0,a.show(`Installing skill…`,l.name);try{let e=await sK(t,l);await r(),n(`Installed "${e.skillName}" to ${e.destinationPath} (${e.fileCount} files).`,`success`)}catch(e){n(`Failed to install dropped skill: ${e instanceof Error?e.message:String(e)}`,`error`)}finally{s=!1,a.hide()}}else a.hide()})}async function gK(e){let{layout:t,log:n}=e,{VirtualFS:r,resolveVfsBackendFromEnv:i}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>KG);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{warnIfPanelVfsConstructionUnderOpfs:a}=await o(async()=>{let{warnIfPanelVfsConstructionUnderOpfs:e}=await import(`./panel-vfs-guard-1E455_lR.js`);return{warnIfPanelVfsConstructionUnderOpfs:e}},[]),s=i();a(s,n);let c=s===`opfs`,l=await r.create({dbName:`slicc-fs`,...c?{backend:`memory`}:{}});c||(t.panels.fileBrowser.setFs(l),n.info(`File browser wired to shared VFS (local IndexedDB)`)),yW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await SW(e,l,n);t.length!==0&&n.warn(`Some mounts could not be recovered in the panel VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>n.warn(`Failed to restore persisted mounts in panel VFS`,e));let u={current:l};CW({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>u.current,logger:n}),hK({fs:l,onNotice:mK(),onInstalled:async()=>{await t.panels.fileBrowser.refresh()},onAttachFiles:e=>t.panels.chat.addAttachmentsFromFiles(e)});let{registerSessionCostsProvider:d}=await o(async()=>{let{registerSessionCostsProvider:e}=await import(`./cost-command-JwQpMwfk.js`);return{registerSessionCostsProvider:e}},[]);return d(()=>new Promise(e=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`get-session-costs`}},t=>{if(chrome.runtime.lastError||!t?.ok){e([]);return}e(t.costs??[])})})),{localFs:l,useRpcVfs:c,previewVfsReader:u}}function _K(e){let{client:t,layout:n,log:r}=e;(async()=>{try{let{RemoteTerminalView:e}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DkDiLkBM.js`);return{RemoteTerminalView:e}},__vite__mapDeps([32,1,27,4,14,28,33,34,35])),{fetchSecretEnvVars:i}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([36,14])),a=await i(),s=new e({client:t,cwd:`/`,env:Object.keys(a).length>0?a:void 0});await n.panels.terminal.mountRemoteShell(s),window.addEventListener(`beforeunload`,()=>s.dispose(),{once:!0}),r.info(`Panel terminal mounted as RemoteTerminalView (offscreen TerminalSessionHost)`)}catch(e){r.warn(`Failed to mount remote terminal view`,e)}})()}function vK(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function yK(e){let{reader:t,writer:n}=e;return{readFile:(e,n)=>t.readFile(e,n),readDir:e=>t.readDir(e),stat:e=>t.stat(e),writeFile:(e,t,r)=>n.writeFile(e,t,r),mkdir:(e,t)=>n.mkdir(e,t),rm:(e,t)=>n.rm(e,t),flush:()=>n.flush(),exists:async e=>{try{return await t.stat(e),!0}catch(e){return e instanceof E&&e.code,!1}},walk:async function*(e){let n=[e],r=new Set;for(;n.length>0;){let e=n.pop();if(r.has(e))continue;r.add(e);let i;try{i=await t.readDir(e)}catch{continue}for(let r of i){let i=vK(e,r.name);if(r.type===`file`)yield i;else if(r.type===`directory`)n.push(i);else if(r.type===`symlink`)try{let e=await t.stat(i);e.type===`file`?yield i:e.type===`directory`&&n.push(i)}catch{}}}}}}var bK=d(`sprinkle-icon`),xK=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">`,SK=`</svg>`,CK=null;function wK(){return CK||=o(()=>Promise.resolve().then(()=>RP).then(e=>e.icons),void 0),CK}function TK(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function EK(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function DK(e){return`${xK}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${EK(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${SK}`}async function OK(e){let t=TK(e),n=(await wK())[t];return n?DK(n):null}function kK(e){return/^\s*<svg\b/i.test(e)}function AK(e){return/^data:/i.test(e)}function jK(e){return e.startsWith(`/`)}function MK(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function NK(e){return/^[a-z][a-z0-9-]*$/.test(e)}function PK(e){return`<img src="${EK(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function FK(e,t){if(!e)return null;if(kK(e))return PK(IK(e));if(AK(e))return PK(e);if(jK(e)&&t){try{if(MK(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=LK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?PK(IK(r)):null}if(MK(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return PK(`data:${RK(e)};base64,${zK(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=LK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return PK(IK(r))}catch(t){bK.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(NK(e)){let t=await OK(e);if(t)return t;bK.warn(`Unknown Lucide icon name`,{spec:e})}return null}function IK(e){return`data:image/svg+xml;base64,${zK(new TextEncoder().encode(e))}`}function LK(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function RK(e){let t=e.toLowerCase();return t.endsWith(`.png`)?`image/png`:t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`image/jpeg`:t.endsWith(`.webp`)?`image/webp`:t.endsWith(`.gif`)?`image/gif`:t.endsWith(`.ico`)?`image/x-icon`:`application/octet-stream`}function zK(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode.apply(null,Array.from(e.subarray(r,r+n)));return typeof btoa<`u`?btoa(t):Buffer.from(t,`binary`).toString(`base64`)}var BK=[`/shared/sprinkles`],VK=new Set([`welcome`,`connect-llm`]);async function HK(e){let t=new Map;for(let n of BK)await e.exists(n)&&await UK(e,n,t);return await UK(e,`/`,t),t}async function UK(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=WK(r);if(!VK.has(t)&&!n.has(t)){let i;try{i=await e.readFile(r,{encoding:`utf-8`})??``}catch{i=``}n.set(t,{name:t,path:r,title:GK(i,t),autoOpen:KK(i),icon:qK(i)})}}}function WK(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function GK(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function KK(e){return/data-sprinkle-autoopen\b/.test(e)}function qK(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=JK(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=YK(i,`href`);if(a!==void 0)return a.trim()}let r=YK(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function JK(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function YK(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var XK=e({SprinkleManager:()=>oq,readOpenSprinklesFromUrl:()=>eq,writeOpenSprinklesToUrl:()=>tq}),ZK=d(`sprinkle-manager`),QK=`slicc-open-sprinkles`,$K=`sprinkles`;function eq(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get($K);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function tq(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete($K):t.searchParams.set($K,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var nq=`slicc-known-sprinkles`,rq=`slicc-autoopened-once`,iq=[`/workspace`,`/shared`,`/scoops`],aq=250,oq=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,n,r,i={}){this.fs=e;let a=async()=>{let e=`image/png`,t=Ri(),n=Li();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);if(t&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let r,i,a;if(t){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),i=n.videoWidth,a=n.videoHeight;let o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);s.drawImage(n,0,0,i,a),r=await(await new Promise((t,n)=>{o.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:5*6e4});r=t.bytes,i=t.width,a=t.height}let o=new Uint8Array(r),s=[],c=8192;for(let e=0;e<o.length;e+=c)s.push(String.fromCharCode(...o.subarray(e,e+c)));return{base64:btoa(s.join(``)),width:i,height:a,mimeType:e}};this.bridge=new sI(e,t,e=>this.close(e),e=>this.minimize(e),r,i.onAttachImage??(()=>{}),a,i.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=n,this.autoOpenBehavior=i.autoOpenBehavior??`activate`,this.onSendToSprinkle=i.onSendToSprinkle,this.inlineSprinkles=i.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&ZK.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=eq();if(e!==null){for(let t of e)try{await this.open(t)}catch{ZK.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(QK);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{ZK.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(QK)}catch{}}else{let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(r.autoOpen&&!t.has(r.name))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{ZK.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}}}catch{}await this.surfaceUnseenSprinkles()}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:i.autoOpen?n:!0}),i.autoOpen&&r.add(i.name),ZK.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{ZK.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){try{let e=localStorage.getItem(nq);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(nq,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(rq);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(rq,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(QK,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,tq([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<aq))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name))if(i=!0,a.autoOpen){if(n.has(a.name)){ZK.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),ZK.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{ZK.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),ZK.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{ZK.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await HK(this.fs),ZK.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){ZK.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){ZK.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){ZK.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){ZK.info(`Sprinkle already open`,{name:e});return}let r=this.availableSprinkles.get(e);if(r||=(await this.refresh(),this.availableSprinkles.get(e)),!r)throw Error(`Sprinkle not found: ${e}`);let i=await this.fs.readFile(r.path,{encoding:`utf-8`});if(i==null)throw Error(`Failed to read sprinkle content: ${r.path} (file may be corrupted or missing)`);let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i),o=document.createElement(`div`);o.className=`sprinkle-panel`,o.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow: hidden;`,o.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:o}),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,r.title,o,t,{...n,icon:r.icon});let s=new DI(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),wi(e),ZK.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),ZK.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){if(this.attentionOnly.has(e)){this.markActivated(e);return}if(!this.openSprinkles.has(e))try{await this.open(e,t)}catch(t){ZK.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),ZK.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),ZK.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=()=>{t||=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{ZK.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=iq.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),n));this.watcherUnsub=()=>{for(let e of r)e();t&&=(clearTimeout(t),null)}}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t){let n=this.openSprinkles.get(e);if(!n){ZK.warn(`Cannot send to closed sprinkle`,{name:e});return}if(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),this.onSendToSprinkle)try{this.onSendToSprinkle(e,t)}catch(t){ZK.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};function sq(e){let t=null,n=Promise.resolve(),r=async()=>{let{TerminalSessionClient:t}=await o(async()=>{let{TerminalSessionClient:e}=await import(`./terminal-session-client-C_tYJ1IB.js`);return{TerminalSessionClient:e}},[]),n=new t({client:e,sid:`sprinkle-exec-${Date.now()}`});return await n.open({cwd:`/`}),n},i=()=>(t||=r().catch(e=>{throw t=null,e}),t);return async e=>{let t=n.then(()=>i().then(t=>t.exec(e)),()=>i().then(t=>t.exec(e)));return n=t.catch(()=>void 0),t}}async function cq(e){let{layout:t,client:n,localFs:r,writableFs:i,useRpcVfs:a,inlineSprinkles:o,log:s}=e,c=new oq(a?yK({reader:i,writer:i}):r,async t=>lq(t,c,e),{addSprinkle:(e,n,r,i,a)=>t.addSprinkle(e,n,r,i,a),removeSprinkle:e=>t.removeSprinkle(e),minimizeSprinkle:e=>t.minimizeSprinkle(e),registerSprinkle:(e,n,r)=>t.registerSprinkle(e,n,r?.icon,r?.zone),unregisterSprinkle:e=>t.unregisterSprinkle(e),closeSprinkleContent:e=>t.closeSprinkleContent(e)},()=>{let e=n.getScoops().find(e=>e.isCone);e&&n.stopScoop(e.jid)},{autoOpenBehavior:`attention`,onAttachImage:(e,n,r)=>t.panels.chat.addImageAttachment(e,n,r),inlineSprinkles:o,execHandler:sq(n)});return window.__slicc_sprinkleManager=c,ZI(sq(n)),window.__slicc_reloadSkills=()=>(chrome.runtime.sendMessage({source:`panel`,payload:{type:`reload-skills`}}),Promise.resolve()),n.setSprinkleOpHandler(e=>{let{id:t,op:n,name:r,data:i}=e;dq(c,t,n,r,i)}),await c.refresh(),t.onSprinkleClose=e=>c.close(e),t.onSprinkleActivate=e=>{c.activate(e)},t.getAvailableSprinkles=()=>[],t.onOpenSprinkle=(e,t)=>c.open(e,t),t.resolveSprinkleIcon=e=>FK(e,r),t.updateAddButtons(),await c.restoreOpenSprinkles(),s.info(`SprinkleManager initialized (extension mode)`),c}async function lq(e,t,n){if(e.type===`sprinkle`){if(n.interceptWelcomeLick(e)){e.body?.action===`shortcut-migrate`&&t.close(`welcome`);return}if(e.sprinkleName===`welcome`&&e.body?.action===`request-mount`){await uq(t,n.log);return}n.client.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}}async function uq(e,t){let n=()=>e.sendToSprinkle(`welcome`,{action:`mount-cancelled`});try{let r=await T();if(r.cancelled)return n();if(r.error)return t.warn(`Mount picker popup failed`,r.error),n();if(!r.handleInIdb||typeof r.idbKey!=`string`)return t.warn(`Mount picker popup returned unexpected result`,r),n();let i=await ne(r.idbKey);if(!i)return t.warn(`Mount picker popup did not store a handle`),n();await w(i),await xU(i),e.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:i.name})}catch(e){t.warn(`Mount picker failed`,e),n()}}async function dq(e,t,n,r,i){try{let a;switch(n){case`list`:await e.refresh(),a=e.available();break;case`opened`:a=e.opened();break;case`refresh`:await e.refresh(),a=e.available().length;break;case`open`:await e.open(r),a=!0;break;case`close`:e.close(r),a=!0;break;case`send`:e.sendToSprinkle(r,i),a=!0;break;case`openNewAutoOpen`:await e.openNewAutoOpenSprinkles(),a=!0;break}chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,result:a}}).catch(()=>{})}catch(e){chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,error:e instanceof Error?e.message:String(e)}}).catch(()=>{})}}async function fq(e){let{client:t,layout:n,localFs:r,useRpcVfs:i,log:a}=e;if(!i)return{writableFs:r,previewVfsReader:null};let{createRemoteVfsClient:s}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([37,38])),{createRemoteWritableVfsClient:c}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([39,38])),l=s({transport:t.getTransport()}),u=c({transport:t.getTransport()});return n.panels.fileBrowser.setFs(l),a.info(`File browser + preview-vfs wired to worker VFS RPC`),{writableFs:u,previewVfsReader:l}}function pq(){if(typeof chrome<`u`&&chrome?.runtime?.id)return;let e=new Blob([`
|
|
599
599
|
let lastPong = Date.now();
|
|
600
600
|
let frozen = false;
|
|
601
601
|
setInterval(() => {
|
|
@@ -615,7 +615,7 @@ Example output: Run a Python sanity check`,prompt:`Label these tool calls (input
|
|
|
615
615
|
}
|
|
616
616
|
}
|
|
617
617
|
};
|
|
618
|
-
`],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var mq=e({detectWelcomeFirstRun:()=>Dq,hasOnboardingFinalLickInHistory:()=>jq,hasWelcomeLickInHistory:()=>Tq,recordWelcomed:()=>Oq}),hq=d(`welcome-detection`),gq=`/shared/.welcomed`,_q=`browser-coding-agent`,vq=1,yq=`sessions`,bq=`session-cone`,xq=`[Sprinkle Event: welcome]`;function Sq(){return new Promise((e,t)=>{let n=indexedDB.open(_q,vq);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(yq)||e.createObjectStore(yq,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function Cq(){return Sq().catch(()=>new Promise((e,t)=>{setTimeout(()=>{Sq().then(e,t)},120)}))}async function wq(){let e=await Cq();try{return await new Promise((t,n)=>{let r=e.transaction(yq,`readonly`).objectStore(yq).get(bq);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function Tq(){try{let e=await wq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Eq(e))}catch(e){return hq.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Eq(e){let t=e.content;return typeof t==`string`?t.includes(xq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(xq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(xq)}return!1}):!1}async function Dq(e){let t=!1;try{t=await e.exists(gq)}catch(e){return hq.warn(`Failed to read welcomed marker`,{path:gq,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await Tq()?{isFirstRun:!1}:{isFirstRun:!0}}async function Oq(e){await e.writeFile(gq,`1`)}var kq=`"action":"onboarding-complete-with-provider"`;function Aq(e){let t=e.content;return typeof t==`string`?t.includes(kq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(kq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(kq)}return!1}):!1}async function jq(){try{let e=await wq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Aq(e))}catch(e){return hq.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Mq(e){let{vfs:t,storage:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:o}=e;Ln(n)||Dq(t).then(e=>{e.isFirstRun&&(r.has(`first-run`)&&(o.info(`Clearing stale welcome dedup entry — install state is fresh`),r.delete(`first-run`),i(r)),r.add(`first-run`),i(r),a().handleFirstRun())}).catch(e=>o.warn(`Welcome detection failed`,e))}async function Nq(e){let{client:t,layout:n,writableFs:r,useRpcVfs:i,opfsLeader:a,stopStorageSync:s,stopSprinkleHandler:c,hostDispose:l,window:u,log:d}=e,{RemoteTerminalView:f}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-CP8Lf876.js`);return{RemoteTerminalView:e}},__vite__mapDeps([32,1,27,4,14,28,33,34,35])),{fetchSecretEnvVars:p}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([36,14])),m=await p(),h=new f({client:t,cwd:`/`,env:Object.keys(m).length>0?m:void 0});n.panels.terminal.mountRemoteShell(h).catch(e=>{d.error(`Failed to mount remote terminal view`,e)});let{installNukeReloadListener:g}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-BpUsw-m7.js`);return{installNukeReloadListener:e}},[]),_=g();u.addEventListener(`beforeunload`,()=>{s(),c(),_(),h.dispose(),l()},{once:!0}),nU()&&await rU(n.panels.chat),Si().catch(()=>{}),eU(r,{isWriter:!i||a.isLeader}),d.info(`Standalone kernel-worker UI ready`)}function Pq(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 Fq(e){let t=Pq(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Iq(e,t){let n=Pq(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 Lq(){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 Rq(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.migrationStallTimeoutMs??6e4,o=e.localStorageSeed??{},s=new MessageChannel,c=new MessageChannel,l=new ni(r,Fq(s.port1)),u=Iq(c.port1,n),d=null,f=new Promise((t,n)=>{let r=null,o=null,c=()=>{r!==null&&(clearTimeout(r),r=null)},l=()=>{c(),r=setTimeout(()=>{d?.(),n(Error(`Kernel worker did not signal ready within ${i}ms`))},i)},u=()=>{c(),r=setTimeout(()=>{d?.(),n(Error(`Kernel worker migration stalled — no progress within ${a}ms`))},a)};d=()=>{o!==null&&(s.port1.removeEventListener(`message`,o),o=null),c()},o=n=>{let r=n.data;if(r?.type===`kernel-migration-started`){c();try{e.onMigrationStart?.()}catch{}return}if(r?.type===`kernel-migration-progress`){u();try{let t=r;e.onMigrationProgress?.({copied:t.copied??0,total:t.total??0})}catch{}return}if(r?.type===`kernel-migration-finished`){l();try{e.onMigrationFinish?.()}catch{}return}r?.type===`kernel-worker-ready`&&(d?.(),t())},s.port1.addEventListener(`message`,o),l()}),p={type:`kernel-worker-init`,kernelPort:s.port2,cdpPort:c.port2,localStorageSeed:o,instanceId:e.instanceId};t.postMessage(p,[s.port2,c.port2]);let m=!1;return{client:l,ready:f,dispose(){if(!m){m=!0,d?.(),u();try{t.postMessage({type:`kernel-worker-shutdown`})}catch{}t.terminate(),s.port1.close(),c.port1.close()}}}}function zq(e){return Rq({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-D9uT30rZ.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,migrationStallTimeoutMs:e.migrationStallTimeoutMs,localStorageSeed:e.localStorageSeed??Lq(),instanceId:e.instanceId,onMigrationStart:e.onMigrationStart,onMigrationProgress:e.onMigrationProgress,onMigrationFinish:e.onMigrationFinish})}var Bq=`slicc-migration-splash`,Vq=`"Adobe Clean", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`;function Hq(e){let t=e.thresholdMs??1e3,n=e.setTimeout??globalThis.setTimeout,r=e.clearTimeout??globalThis.clearTimeout,i=e.message??`Upgrading workspace storage… this only happens once.`,a=e.logger,o=null,s=null,c={copied:0,total:0},l=null,u=null;function d(){if(!s)return;let{copied:e,total:t}=c,n=t>0?Math.max(0,Math.min(100,Math.round(e/t*100))):0;s.fill.style.width=`${n}%`,s.counter.textContent=t>0?`${e} / ${t} files`:`Preparing…`}function f(){if(s)return;let t=e.root.ownerDocument;if(!t)return;let n=t.createElement(`div`);n.id=Bq,n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),n.setAttribute(`aria-modal`,`true`),n.style.position=`fixed`,n.style.inset=`0`,n.style.zIndex=`2147483646`,n.style.display=`flex`,n.style.alignItems=`center`,n.style.justifyContent=`center`,n.style.background=`rgba(20,20,20,0.72)`,n.style.backdropFilter=`blur(4px)`,n.style.webkitBackdropFilter=`blur(4px)`,n.style.pointerEvents=`auto`,n.style.fontFamily=Vq,n.addEventListener(`click`,e=>{e.stopPropagation()});let r=t.defaultView??t,o=e=>{e.stopImmediatePropagation(),e.preventDefault()};r.addEventListener(`keydown`,o,!0),l=o,u=r;let c=t.createElement(`div`);c.style.minWidth=`320px`,c.style.maxWidth=`420px`,c.style.padding=`28px 32px`,c.style.borderRadius=`12px`,c.style.background=`#1e1e1e`,c.style.color=`#e8e8e8`,c.style.boxShadow=`0 12px 32px rgba(0,0,0,0.45)`,c.style.border=`1px solid #3a3a3a`,c.style.textAlign=`center`,c.style.fontFamily=Vq;let f=t.createElement(`div`);f.textContent=i,f.style.fontSize=`16px`,f.style.fontWeight=`500`,f.style.lineHeight=`1.4`,f.style.marginBottom=`18px`;let p=t.createElement(`div`);p.style.height=`6px`,p.style.width=`100%`,p.style.borderRadius=`3px`,p.style.background=`#2c2c2c`,p.style.overflow=`hidden`,p.style.marginBottom=`10px`;let m=t.createElement(`div`);m.setAttribute(`data-slicc-migration-progress-fill`,``),m.style.height=`100%`,m.style.width=`0%`,m.style.background=`#3562ff`,m.style.transition=`width 120ms linear`,p.appendChild(m);let h=t.createElement(`div`);h.setAttribute(`data-slicc-migration-progress-counter`,``),h.style.fontSize=`12px`,h.style.fontVariantNumeric=`tabular-nums`,h.style.color=`#a1a1a1`,c.appendChild(f),c.appendChild(p),c.appendChild(h),n.appendChild(c),e.root.appendChild(n),s={root:n,fill:m,counter:h},d(),a?.debug?.(`[migration-splash] painted`)}function p(){l&&u&&(u.removeEventListener(`keydown`,l,!0),l=null,u=null),s&&(s.root.remove(),s=null,a?.debug?.(`[migration-splash] removed`))}return{arm(){o!==null||s!==null||(a?.debug?.(`[migration-splash] armed (threshold=${t}ms)`),o=n(()=>{o=null,f()},t))},updateProgress(e){c={copied:Math.max(0,e.copied|0),total:Math.max(0,e.total|0)},d()},disarm(){o!==null&&(r(o),o=null,a?.debug?.(`[migration-splash] disarmed before threshold`)),p()},isActive(){return o!==null||s!==null},forceShow(){o!==null&&(r(o),o=null),f()}}}function Uq(e){let{realCdpTransport:t,instanceId:n,layout:r,log:i,getSelectedScoop:a,setSelectedScoop:o}=e,s=e=>{let t=e.config?.modelId,n=t?Za(t):Qa();r.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),r.panels.chat.setThinkingLevel(e.config?.thinkingLevel)},l,u=async e=>{o(e),l.setSelectedScoopJid(e.jid),r.panels.scoops.setSelectedJid(e.jid),r.panels.memory.setSelectedScoop(e.jid),r.setScoopSwitcherSelected?.(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await r.panels.chat.switchToContext(t,!e.isCone,n),l.requestScoopMessages(e.jid),l.isProcessing(e.jid)&&r.panels.chat.setProcessing(!0),s(e)},d=null,f=()=>{d?.disarm()},p=(e=!0)=>{d||(d=Hq({root:document.body,logger:i}),e&&d.arm())},m=zq({realCdpTransport:t,instanceId:n,onMigrationStart:()=>p(!0),onMigrationProgress:e=>{p(!0),d?.updateProgress(e)},onMigrationFinish:()=>{f()},callbacks:{onStatusChange:(e,t)=>Wq(e,t,r,a),onScoopCreated:e=>{r.panels.scoops.refreshScoops(),r.refreshScoopSwitcher?.(),a()||u(e)},onScoopListUpdate:()=>{r.panels.scoops.refreshScoops(),r.refreshScoopSwitcher?.()},onIncomingMessage:(e,t)=>Gq(e,t,r,a),onScoopMessagesReplaced:(e,t)=>{a()?.jid===e&&r.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{a()?.jid===e&&r.panels.chat.setCompactionState(t)},onReady:()=>{i.info(`Kernel worker ready, scoop count:`,l.getScoops().length);let e=l.getScoops().find(e=>e.isCone);e&&!a()&&u(e)}}});return l=m.client,{client:l,hostReady:m.ready,hostDispose:()=>m.dispose(),selectScoop:u,syncThinkingButtonForScoop:s,disarmMigrationSplash:f}}function Wq(e,t,n,r){n.panels.scoops.updateScoopStatus(e,t),n.updateScoopSwitcherStatus?.(e,t),r()?.jid===e&&(n.setAgentProcessing(t===`processing`),t===`processing`?n.panels.chat.setProcessing(!0):t===`ready`&&n.panels.chat.setProcessing(!1))}function Gq(e,t,n,r){r()?.jid===e&&t.channel!==`web`&&or(t.channel)&&n.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())}function Kq(e){let{layout:t,vfs:n,log:r}=e;return t.onFrozenSessionOpen=e=>{(async()=>{try{let r=await n.panelReadVfs.readFile(HH(e),{encoding:`utf-8`}),i=JH(typeof r==`string`?r:new TextDecoder().decode(r)),a=i.title||e.title;await t.panels.chat.displayFrozenSession({contextId:`frozen:${e.filename}`,messages:i.messages,title:a}),t.setThreadHeaderName(`❄ ${a}`),t.setActiveTab(`chat`)}catch(t){r.warn(`Failed to open frozen session`,{filename:e.filename,error:t instanceof Error?t.message:String(t)})}})()},{attachScoopsVfs(){t.panels.scoops.setVfs(n.panelReadVfs)}}}async function qq(e){let{layout:t,log:n}=e,r=WG()===`opfs`,i=await GG.create({dbName:`slicc-fs`,...r?{backend:`memory`}:{}});r||t.panels.fileBrowser.setFs(i);let a={isLeader:!0,dispose:()=>{}};if(r){let{electOpfsLeader:e}=await o(async()=>{let{electOpfsLeader:e}=await import(`./opfs-leader-election-BJDtxHPr.js`);return{electOpfsLeader:e}},[]),{showOpfsReadOnlyBanner:t}=await o(async()=>{let{showOpfsReadOnlyBanner:e}=await import(`./opfs-readonly-banner-BwveszbN.js`);return{showOpfsReadOnlyBanner:e}},[]),r=await e({logger:n});a={isLeader:r.isLeader,dispose:r.dispose},globalThis.__slicc_opfs_leader={isLeader:r.isLeader,self:r.self,leader:r.leader},r.isLeader?n.info(`OPFS leader election: this tab is the writer`,{tabId:r.self.tabId}):(n.warn(`OPFS leader election: another tab is the writer; entering read-only mode`,{self:r.self.tabId,leader:r.leader?.tabId}),t({leaderTabId:r.leader?.tabId}))}yW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await SW(e,i,n);t.length!==0&&n.warn(`Some mounts could not be recovered in the page VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>n.warn(`Failed to restore persisted mounts in page VFS`,e));let s=new BroadcastChannel(`preview-vfs`),c={localFs:i,useRpcVfs:r,opfsLeader:a,previewVfsCh:s,panelReadVfs:i,writableFs:i};return CW({channel:s,getReader:()=>c.panelReadVfs,logger:n}),c}async function Jq(e){let{handle:t,client:n,layout:r,log:i}=e;if(!t.useRpcVfs)return;let{createRemoteVfsClient:a}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([37,38])),s=a({transport:n.getTransport()});if(r.panels.fileBrowser.setFs(s),t.panelReadVfs=s,t.opfsLeader.isLeader){let{createRemoteWritableVfsClient:e}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([39,38]));t.writableFs=e({transport:n.getTransport()}),i.info(`File browser + preview-vfs + writable freezer wired to worker VFS RPC (leader)`)}else i.info(`File browser + preview-vfs wired to worker VFS RPC (follower; freezer uses LFS shadow)`)}function Yq(e){let{layout:t,client:n,vfsHandle:r,selectScoop:i,getSelectedScoop:a,syncThinkingButtonForScoop:o}=e;t.panels.scoops.setOrchestrator(n),t.panels.memory.setOrchestrator(n),t.setScoopSwitcherOrchestrator?.(n),t.setScoopSwitcherTranscriptSource?.(e=>n.getScoopTranscript(e)),t.setScoopsRailTranscriptSource?.(e=>n.getScoopTranscript(e)),t.onScoopSelect=i,t.onClearChat=async()=>{await Mr().catch(()=>{}),await new rn().clearAll().catch(()=>{});let e=n.getScoops();for(let n of e){let e=n.isCone?`session-cone`:`session-${n.folder}`;await t.panels.chat.deleteSessionById(e)}n.clearAllMessages()},t.onModelChange=e=>{localStorage.setItem(`selected-model`,e),n.updateModel();let t=a();t&&o(t)},t.onThinkingLevelChange=e=>{let t=a();t&&n.setScoopThinkingLevel(t.jid,e)},t.onModelsRefreshed=()=>{let e=a();e&&o(e)},n.setLocalFS(r.localFs)}function Xq(e){let{client:t,layout:n,vfsHandle:r,log:i}=e,{useRpcVfs:a,opfsLeader:o}=r;n.onClearChat=async e=>{if(a&&!o.isLeader){i.info(`New session affordance skipped (OPFS follower — read-only tab)`);return}if(e?.freeze===`quick`)try{await QH({vfs:r.writableFs})}catch(e){i.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await ZH({vfs:r.writableFs})}catch(e){i.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else i.info(`New session: freezer skipped (long-press)`);await n.panels.chat.deleteSessionById(`session-cone`),await t.clearAllMessages()}}function Zq(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;n.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=Qa().contextWindow??t}catch{}n.setNewSessionGlow(e/t)};let a=t.createAgentHandle();return n.panels.chat.setAgent(a),n.panels.chat.setAttachmentWriter(zU(r.localFs)),n.panels.chat.setDeleteQueuedMessageCallback(e=>{i.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)}),a}async function ore(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;Yq(e),await Jq({handle:r,client:t,layout:n,log:i}),Xq(e);let a=Kq({layout:n,vfs:r,log:i});return{agentHandle:Zq(e),frozenSessions:a}}async function Qq(e){let{installSudoTestHook:t}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-DSdWsBdi.js`);return{installSudoTestHook:e}},__vite__mapDeps([40,14]));t()}async function $q(e){let{installPanelSudoResponder:t}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-DSdWsBdi.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([40,14]));t()}function eJ(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function tJ(e){let{runtimeMode:t,envBaseUrl:n,window:r,log:i}=e,a=t===`electron-overlay`;i.info(`starting standalone with kernel worker`);let{BrowserAPI:s}=await o(async()=>{let{BrowserAPI:e}=await import(`./cdp-DNq0N1OZ.js`);return{BrowserAPI:e}},__vite__mapDeps([41,1,14]));await Qq({log:i});let c=await Wn(),l=er(a?`electron-overlay`:`standalone`,c!==null)?jn:null;await Hn({locationHref:r.location.href,storage:r.localStorage,envBaseUrl:n,defaultWorkerBaseUrl:l,runtimeConfigFetcher:async()=>c});let u,d,f;if(t===`cherry`){let{setupCherryFollower:e}=await o(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-CIlo3nad.js`);return{setupCherryFollower:e}},__vite__mapDeps([42,41,1,14])),t=await e();u=t.browser,d=t.joinUrl,f=t.transport}else{u=new s;try{await u.connect()}catch(e){i.warn(`Initial CDP connect failed; worker-forwarded commands will retry on demand`,e instanceof Error?e.message:String(e))}}let p=u.getTransport();return globalThis.__slicc_browser=u,{browser:u,realCdpTransport:p,cherryJoinUrl:d,cherryTransport:f,instanceId:eJ(),isElectronOverlay:a}}function nJ(e){let{layout:t,client:n,getFollower:r,interceptWelcomeLick:i,log:a}=e;t.panels.chat.onDipLick=(e,t)=>{if(i({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}}))return;let o=r();if(o){let n=o.currentSync;n?n.sendSprinkleLick(`inline`,{action:e,data:t}):a.warn(`Dip lick dropped: follower sync mid-reconnect`,{action:e});return}n.sendSprinkleLick(`inline`,{action:e,data:t})}}function rJ(e){return!e.includes(`\0`)}function iJ(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(!rJ(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(!rJ(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),!rJ(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),!rJ(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(rJ(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)}}var aJ=new Set([`setItem`,`removeItem`,`clear`]);function oJ(e){let{client:t,localStorage:n}=e,r=iJ({send:e=>t.sendRaw(e)});for(let e=0;e<n.length;e++){let r=n.key(e);if(r!==null&&!aJ.has(r)&&!r.includes(`\0`)){let e=n.getItem(r);e!==null&&t.sendRaw({type:`local-storage-set`,key:r,value:e})}}return{stopStorageSync:r}}async function sJ(e){let{client:t,hostReady:n,disarmMigrationSplash:r,frozenSessions:i,localStorage:a,log:o}=e;try{await n,o.info(`Worker boot handshake complete`)}catch(e){throw o.error(`Worker failed to signal ready`,e),r(),e}return t.requestState(),i.attachScoopsVfs(),oJ({client:t,localStorage:a})}var cJ=d(`welcome-sentinel`),lJ=`/shared/.welcomed`;function uJ(e){if(!e.isWriter){cJ.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(lJ,`1`).catch(e=>cJ.warn(`Failed to persist welcome completion marker`,e))}async function dJ(e){let{client:t,layout:n,localFs:r,writableFs:i,useRpcVfs:a,isOpfsLeader:s,firedWelcomeActions:c,log:l}=e,u=await o(()=>Promise.resolve().then(()=>zi),void 0),{getAccounts:d,getProviderConfig:f}=u,{createSprinkleDeviceCodePrompter:p,resolveDeviceCodeDecision:m}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),h=await pU({fs:r,log:l,providers:u,deviceCode:{createSprinkleDeviceCodePrompter:p},postSystemMessage:e=>n.panels.chat.addSystemMessage(e),postDipReference:e=>n.panels.chat.addSystemMessage(e),broadcastToDip:e=>YI(e),onFireFinalLick:e=>{uU(t),DU(String(e?.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-worker`,l)}});return{onboardingHandle:h,interceptWelcomeLick:kU({firedWelcomeActions:c,getAccounts:d,getProviderConfig:f,resolveDeviceCodeDecision:m,getOnboardingOrchestrator:()=>h.get(),applyPendingMount:()=>SU(r,l),fastForward:{fire:e=>{DU(String(e.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-worker`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return f(e)}catch{return null}})();YI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{uJ({writableFs:i,isWriter:!a||s})},contextLabel:`worker`,vfs:r,log:l})}}var fJ=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}}},pJ=d(`tray-sync`),mJ=`slicc-cherry`;function hJ(e){return typeof e==`object`&&!!e&&e.type===`cherry.host_event`}var gJ=32*1024;function _J(e,t,n,r){if(r||!n)return e.send({type:`cdp.response`,requestId:t,result:n,error:r});let i=JSON.stringify(n);if(i.length<=65536)return e.send({type:`cdp.response`,requestId:t,result:n});let a=Math.ceil(i.length/gJ),o=!0;for(let n=0;n<a;n++){let r=i.slice(n*gJ,(n+1)*gJ);if(!e.send({type:`cdp.response`,requestId:t,chunkData:r,chunkIndex:n,totalChunks:a})){o=!1,e.send({type:`cdp.response`,requestId:t,error:`Failed to send CDP response chunk ${n}/${a} (response was ${i.length} bytes)`});break}}return o}function vJ(e,t){if(t.chunkIndex===void 0||t.totalChunks===void 0)return{result:t.result,error:t.error};if(t.error)return e.delete(t.requestId),{error:t.error};let n=t.requestId,r=e.get(n);if(r||(r={chunks:Array(t.totalChunks),received:0,totalChunks:t.totalChunks},e.set(n,r)),r.chunks[t.chunkIndex]||(r.chunks[t.chunkIndex]=t.chunkData,r.received++),r.received>=r.totalChunks){e.delete(n);try{return{result:JSON.parse(r.chunks.join(``))}}catch(e){return{error:`Failed to reassemble CDP response: ${e instanceof Error?e.message:String(e)}`}}}return null}var yJ=32*1024;function bJ(e,t,n){let r=JSON.stringify({messages:t,scoopJid:n});if(r.length<=65536)return e.send({type:`snapshot`,messages:t,scoopJid:n});let i=Math.ceil(r.length/yJ),a=!0;for(let t=0;t<i;t++){let o=r.slice(t*yJ,(t+1)*yJ);if(!e.send({type:`snapshot_chunk`,chunkData:o,chunkIndex:t,totalChunks:i,scoopJid:n})){a=!1,pJ.error(`Failed to send snapshot chunk`,{chunkIndex:t,totalChunks:i,totalSize:r.length});break}}return pJ.debug(`Snapshot sent in chunks`,{totalChunks:i,totalSize:r.length}),a}function xJ(e,t){if(e||={chunks:Array(t.totalChunks),received:0,totalChunks:t.totalChunks},e.chunks[t.chunkIndex]||(e.chunks[t.chunkIndex]=t.chunkData,e.received++),e.received>=e.totalChunks)try{return{result:JSON.parse(e.chunks.join(``)),buffer:null}}catch(e){return pJ.error(`Failed to reassemble snapshot`,{error:e instanceof Error?e.message:String(e)}),{result:{messages:[],scoopJid:t.scoopJid},buffer:null}}return{result:null,buffer:e}}var SJ=class{channel;listeners=[];closed=!1;constructor(e){this.channel=e,this.channel.addEventListener(`message`,e=>{if(!this.closed)try{let t=JSON.parse(e.data);for(let e of this.listeners)e(t)}catch(e){pJ.warn(`Failed to parse tray sync message`,{error:e instanceof Error?e.message:String(e)})}})}send(e){if(this.closed)return!1;try{return this.channel.send(JSON.stringify(e)),!0}catch(t){return pJ.error(`Failed to send tray sync message`,{type:e.type,error:t instanceof Error?t.message:String(t)}),!1}}onMessage(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}}close(){this.closed=!0,this.listeners.length=0,this.channel.close()}get isOpen(){return!this.closed&&this.channel.readyState===`open`}};function CJ(e){return new SJ(e)}function wJ(e){return new SJ(e)}var TJ=class{sender;timeoutMs;pending=new Map;eventListeners=new Map;chunkBuffers=new Map;_state=`connected`;requestCounter=0;constructor(e,t=3e4){this.sender=e,this.timeoutMs=t}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let[,{reject:e,timer:t}]of this.pending)clearTimeout(t),e(Error(`Transport disconnected`));this.pending.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=`remote-${++this.requestCounter}-${Date.now()}`,a=r??this.timeoutMs;return new Promise((r,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`Remote CDP request timed out after ${a}ms: ${e}`))},a);this.pending.set(i,{resolve:r,reject:o,timer:s}),this.sender.sendCDPRequest(i,e,t,n)})}on(e,t){let n=this.eventListeners.get(e);n||(n=new Set,this.eventListeners.set(e,n)),n.add(t)}off(e,t){this.eventListeners.get(e)?.delete(t)}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a=setTimeout(()=>{this.off(e,o),r(Error(`Remote CDP event timed out: ${e}`))},i),o=t=>{clearTimeout(a),this.off(e,o),n(t)};this.on(e,o)})}handleResponse(e,t,n,r,i,a){let o=this.pending.get(e);if(!o)return;let s=vJ(this.chunkBuffers,{type:`cdp.response`,requestId:e,result:t,error:n,chunkData:r,chunkIndex:i,totalChunks:a});s&&(this.pending.delete(e),clearTimeout(o.timer),s.error?o.reject(Error(s.error)):o.resolve(s.result??{}))}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)e(t)}},EJ=d(`data-channel-keepalive`),DJ=class{sendPing;onDead;intervalMs;maxMissed;timer=null;missedPongs=0;awaitingPong=!1;stopped=!1;constructor(e){this.sendPing=e.sendPing,this.onDead=e.onDead,this.intervalMs=e.intervalMs??1e4,this.maxMissed=e.maxMissed??3}start(){this.timer||this.stopped||(this.timer=setInterval(()=>this.tick(),this.intervalMs))}stop(){this.stopped=!0,this.timer&&=(clearInterval(this.timer),null)}receivePong(){this.awaitingPong=!1,this.missedPongs=0}receivePing(){this.missedPongs=0,this.awaitingPong=!1}get missed(){return this.missedPongs}tick(){if(!this.stopped){if(this.awaitingPong&&(this.missedPongs++,EJ.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){EJ.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}};d(`lick-manager`);var OJ=new Set([`navigate`]),kJ=64*1024;async function AJ(e,t){try{switch(t.op){case`readFile`:return await jJ(e,t.path,t.encoding);case`writeFile`:return[await MJ(e,t.path,t.content,t.encoding)];case`stat`:return[await NJ(e,t.path)];case`readDir`:return[await PJ(e,t.path)];case`mkdir`:return[await FJ(e,t.path,t.recursive)];case`rm`:return[await IJ(e,t.path,t.recursive)];case`exists`:return[await LJ(e,t.path)];case`walk`:return[await RJ(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[BJ(e)]}}async function jJ(e,t,n){return(n??`utf-8`)===`utf-8`?zJ(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):zJ(VJ(await e.readFile(t,{encoding:`binary`})),`base64`)}async function MJ(e,t,n,r){if(r===`base64`){let r=HJ(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function NJ(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function PJ(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function FJ(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function IJ(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function LJ(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function RJ(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function zJ(e,t){if(e.length<=kJ)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/kJ),r=[];for(let i=0;i<n;i++){let a=i*kJ,o=e.slice(a,a+kJ);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function BJ(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)}}function VJ(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function HJ(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}var UJ=class{runtimes=new Map;dirty=!1;setTargets(e,t){this.runtimes.set(e,t),this.dirty=!0}removeRuntime(e){this.runtimes.delete(e)&&(this.dirty=!0)}getEntries(){this.dirty=!1;let e=[];for(let[t,n]of this.runtimes)for(let r of n)e.push({targetId:`${t}:${r.targetId}`,localTargetId:r.targetId,runtimeId:t,title:r.title,url:r.url,isLocal:!1,kind:r.kind??`browser`,capabilities:r.capabilities});return e}hasChanged(){return this.dirty}getRuntimeIds(){return[...this.runtimes.keys()]}},WJ=d(`tray-leader-sync`);function GJ(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function KJ(e,t){switch(e){case`extension`:return`extension follower`;case`standalone`:return`standalone follower`;case`electron`:return`Electron follower`;case`ios`:return`iOS follower`;default:return t?`follower (${t})`:`follower`}}function qJ(e){return e.kind===`cherry`}function JJ(e,t){return e.filter(e=>qJ(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var YJ=class e{options;followers=new Map;registry=new UJ;runtimeToBootstrap=new Map;pendingCDPRoutes=new Map;cdpChunkBuffers=new Map;remoteTransports=new Map;pendingTabOpenRoutes=new Map;tabOpenResolvers=new Map;pendingFsRoutes=new Map;fsResolvers=new Map;constructor(e){this.options=e}addFollower(e,t,n){this.removeFollower(e);let r=CJ(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new DJ({sendPing:()=>r.send({type:`ping`}),onDead:()=>{WJ.warn(`Follower keepalive dead, removing follower`,{bootstrapId:e}),this.removeFollower(e),this.options.onFollowerDead?.(e)}});a.start(),this.followers.set(e,{bootstrapId:e,sync:r,unsubscribe:i,keepalive:a,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:Date.now(),floatType:GJ(n?.runtime)}),WJ.info(`Follower added to sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size),this.sendSnapshotToFollower(e),this.sendScoopsListToFollower(e),this.sendSprinklesListToFollower(e);let o=this.getConnectedEntries();o.length>0&&r.send({type:`targets.registry`,targets:o})}removeFollower(e){let t=this.followers.get(e);if(t){t.keepalive.stop(),t.unsubscribe(),t.sync.close(),this.followers.delete(e),this.followerBroadcastErrorLogAt.delete(e);for(let[t,n]of this.runtimeToBootstrap)if(n===e){this.cleanupRemoteTransports(t),this.registry.removeRuntime(t),this.runtimeToBootstrap.delete(t);break}this.registry.hasChanged()&&this.broadcastTargetRegistry(),WJ.info(`Follower removed from sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size)}}followerBroadcastErrorLogAt=new Map;static BROADCAST_ERROR_THROTTLE_MS=6e4;broadcastToAllFollowers(t){let n=performance.now();for(let[r,i]of this.followers)try{i.sync.send(t),this.followerBroadcastErrorLogAt.delete(r)}catch(i){n-(this.followerBroadcastErrorLogAt.get(r)??-1/0)>e.BROADCAST_ERROR_THROTTLE_MS&&(this.followerBroadcastErrorLogAt.set(r,n),WJ.error(`Broadcast send to follower failed (channel may be stuck)`,{bootstrapId:r,messageType:t.type,error:i instanceof Error?i.message:String(i)}))}}broadcastEvent(e){if(this.followers.size===0)return;let t={type:`agent_event`,event:e,scoopJid:this.options.getScoopJid()};this.broadcastToAllFollowers(t)}broadcastUserMessage(e,t,n){if(this.followers.size===0)return;let r={type:`user_message_echo`,text:e,messageId:t,scoopJid:this.options.getScoopJid(),attachments:n?.length?Wt(n):n};this.broadcastToAllFollowers(r)}broadcastStatus(e){if(this.followers.size===0)return;let t={type:`status`,scoopStatus:e};this.broadcastToAllFollowers(t)}async sendSnapshotToFollower(e,t){let n=this.followers.get(e);if(!n)return;let r=t??n.selectedScoopJid??this.options.getScoopJid(),i;if(this.options.getMessagesForScoop&&r!==this.options.getScoopJid())try{i=await Promise.resolve(this.options.getMessagesForScoop(r))}catch(e){WJ.warn(`getMessagesForScoop failed, falling back to active scoop`,{targetJid:r,error:e instanceof Error?e.message:String(e)}),i=this.options.getMessages()}else i=this.options.getMessages();n.selectedScoopJid=r,bJ(n.sync,i,r),WJ.debug(`Snapshot sent to follower`,{bootstrapId:e,messageCount:i.length,scoopJid:r})}sendScoopsListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getScoops;if(n)try{let e=n(),r=this.options.getScoopJid();t.sync.send({type:`scoops.list`,scoops:e,activeScoopJid:r})}catch(t){WJ.warn(`Failed to send scoops.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}sendSprinklesListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getSprinkles;if(n)try{let e=n();t.sync.send({type:`sprinkles.list`,sprinkles:e})}catch(t){WJ.warn(`Failed to send sprinkles.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}broadcastScoopsList(){if(this.followers.size===0)return;let e=this.options.getScoops;if(!e)return;let t;try{t=e()}catch(e){WJ.warn(`Failed to compute scoops list`,{error:e instanceof Error?e.message:String(e)});return}let n=this.options.getScoopJid(),r={type:`scoops.list`,scoops:t,activeScoopJid:n};this.broadcastToAllFollowers(r)}broadcastSprinklesList(){if(this.followers.size===0)return;let e=this.options.getSprinkles;if(!e)return;let t;try{t=e()}catch(e){WJ.warn(`Failed to compute sprinkles list`,{error:e instanceof Error?e.message:String(e)});return}let n={type:`sprinkles.list`,sprinkles:t};this.broadcastToAllFollowers(n)}broadcastSprinkleUpdate(e,t){if(this.followers.size===0)return;let n={type:`sprinkle.update`,sprinkleName:e,data:t};this.broadcastToAllFollowers(n)}static SPRINKLE_CHUNK_SIZE=32*1024;static SPRINKLE_CHUNK_THRESHOLD=64*1024;async handleSprinkleFetch(t,n,r){let i=this.followers.get(t);if(!i)return;let a=this.options.readSprinkleContent;if(!a){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Leader has no sprinkle content reader`});return}let o=null;try{o=await Promise.resolve(a(r))}catch(e){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:e instanceof Error?e.message:String(e)});return}if(o==null){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Sprinkle not found: ${r}`});return}if(o.length<=e.SPRINKLE_CHUNK_THRESHOLD){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:o});return}let s=e.SPRINKLE_CHUNK_SIZE,c=Math.ceil(o.length/s);for(let e=0;e<c;e++){let t=o.slice(e*s,(e+1)*s);i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:t,chunkIndex:e,totalChunks:c})}}handleFollowerMessage(e,t){switch(t.type){case`user_message`:{WJ.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Wt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:WJ.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:WJ.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{WJ.info(`Follower selected scoop`,{bootstrapId:e,scoopJid:t.scoopJid});let n=this.followers.get(e);n&&(n.selectedScoopJid=t.scoopJid,this.sendSnapshotToFollower(e,t.scoopJid));break}case`sprinkles.refresh`:WJ.info(`Follower requested sprinkles refresh`,{bootstrapId:e}),this.sendSprinklesListToFollower(e);break;case`sprinkle.fetch`:this.handleSprinkleFetch(e,t.requestId,t.sprinkleName);break;case`sprinkle.lick`:{WJ.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=KJ(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){WJ.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!OJ.has(n.type)){WJ.warn(`Rejecting malformed or non-forwardable lick from follower`,{bootstrapId:e,type:n?.type});break}let r=this.followers.get(e),{targetScoop:i,...a}=n,o={...a,originFollowerId:e,originLabel:KJ(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){WJ.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:WJ.info(`Follower targets advertised`,{bootstrapId:e,runtimeId:t.runtimeId,targetCount:t.targets.length});for(let e of[...this.remoteTransports.keys()]){let n=e.substring(0,e.indexOf(`:`));n!==`leader`&&!this.runtimeToBootstrap.has(n)&&n!==t.runtimeId&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),WJ.debug(`Cleaned up orphaned remote transport on advertise`,{key:e}))}this.runtimeToBootstrap.set(t.runtimeId,e),this.registry.setTargets(t.runtimeId,t.targets),this.broadcastTargetRegistry();break;case`cdp.request`:{let{requestId:n,targetRuntimeId:r,localTargetId:i,method:a,params:o,sessionId:s}=t;r===`leader`?this.executeLocalCDP(n,i,a,o,s,e):this.forwardCDPRequest(n,r,i,a,o,s,e);break}case`cdp.response`:this.handleCDPResponse(t);break;case`cdp.event`:this.handleCDPEvent(e,t.method,t.params,t.sessionId);break;case`tab.open`:{let{requestId:n,targetRuntimeId:r,url:i}=t;r===`leader`?this.executeLocalTabOpen(n,i,e):this.forwardTabOpen(n,r,i,e);break}case`tab.opened`:this.handleTabOpenResponse(t.requestId,t.targetId);break;case`tab.open.error`:this.handleTabOpenError(t.requestId,t.error);break;case`fs.request`:{let{requestId:n,targetRuntimeId:r,request:i}=t;r===`leader`?this.executeLocalFs(n,i,e):this.forwardFsRequest(n,r,i,e);break}case`fs.response`:this.handleFsResponse(t.requestId,t.response);break;case`cherry.host_event`:this.routeCherryHostEvent(e,t);break;case`ping`:{let t=this.followers.get(e);t&&(t.keepalive.receivePing(),t.lastActivity=Date.now(),t.sync.send({type:`pong`}));break}case`pong`:{let t=this.followers.get(e);t&&(t.keepalive.receivePong(),t.lastActivity=Date.now());break}}}setLocalTargets(e){this.registry.setTargets(`leader`,e),this.registry.hasChanged()&&this.broadcastTargetRegistry()}broadcastTargetRegistry(){if(this.followers.size===0)return;let e={type:`targets.registry`,targets:this.getConnectedEntries()};this.broadcastToAllFollowers(e)}getTargets(){return this.getConnectedEntries()}getConnectedEntries(){return this.registry.getEntries().filter(e=>{if(e.runtimeId===`leader`)return!0;let t=this.runtimeToBootstrap.get(e.runtimeId);return t?this.followers.has(t):!1})}createRemoteTransport(e,t){let n=new TJ({sendCDPRequest:(n,r,i,a)=>{let o=this.runtimeToBootstrap.get(e),s=o?this.followers.get(o):void 0;if(!s){this.remoteTransports.get(`${e}:${t}`)?.handleResponse(n,void 0,`Target runtime "${e}" not connected`);return}this.pendingCDPRoutes.set(n,{requesterBootstrapId:`__leader__`,requestId:n}),s.sync.send({type:`cdp.request`,requestId:n,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}cleanupRemoteTransports(e){let t=`${e}:`;for(let e of[...this.remoteTransports.keys()])e.startsWith(t)&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),WJ.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){WJ.warn(`onRemoteTransportsCleaned handler threw`,{runtimeId:e,error:t instanceof Error?t.message:String(t)})}}getConnectedFollowers(){return[...this.runtimeToBootstrap.entries()].map(([e,t])=>{let n=this.followers.get(t);return{runtimeId:e,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:n?.lastActivity,floatType:n?.floatType}})}canRuntimeServeTeleport(e,t){if(t.runtime===`slicc-cherry`)return!1;let n=this.registry.getEntries().filter(t=>t.runtimeId===e);return n.length===0?!0:JJ(n,{requireNetwork:!0}).length>0}getBestFollowerForTeleport(){let e=[];for(let[t,n]of this.runtimeToBootstrap){let r=this.followers.get(n);r&&this.canRuntimeServeTeleport(t,r)&&e.push({runtimeId:t,bootstrapId:n,floatType:r.floatType,lastActivity:r.lastActivity})}if(e.length===0)return null;let t=e.filter(e=>e.floatType===`standalone`),n=t.length>0?t:e;return n.sort((e,t)=>t.lastActivity-e.lastActivity),n[0]}get hasFollowers(){return this.followers.size>0}stop(){for(let e of[...this.followers.keys()])this.removeFollower(e)}async executeLocalCDP(e,t,n,r,i,a){let o=this.followers.get(a);if(!o)return;let s=this.options.browserTransport;if(!s){o.sync.send({type:`cdp.response`,requestId:e,error:`Leader has no browser transport`});return}try{let t=await s.send(n,r,i);_J(o.sync,e,t)}catch(t){o.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardCDPRequest(e,t,n,r,i,a,o){let s=this.runtimeToBootstrap.get(t),c=s?this.followers.get(s):void 0,l=this.followers.get(o);if(!c){l&&l.sync.send({type:`cdp.response`,requestId:e,error:`Target runtime "${t}" not connected`});return}this.pendingCDPRoutes.set(e,{requesterBootstrapId:o,requestId:e}),c.sync.send({type:`cdp.request`,requestId:e,localTargetId:n,method:r,params:i,sessionId:a})}handleCDPResponse(e){let{requestId:t}=e,n=this.pendingCDPRoutes.get(t);if(!n)return;let r=vJ(this.cdpChunkBuffers,e);if(!r)return;if(this.pendingCDPRoutes.delete(t),n.requesterBootstrapId===`__leader__`){for(let e of this.remoteTransports.values())e.handleResponse(t,r.result,r.error);return}let i=this.followers.get(n.requesterBootstrapId);i&&_J(i.sync,t,r.result,r.error)}handleCDPEvent(e,t,n,r){let i;for(let[t,n]of this.runtimeToBootstrap)if(n===e){i=t;break}if(!i)return;let a=`${i}:`;for(let[e,r]of this.remoteTransports)e.startsWith(a)&&r.handleEvent(t,n)}runtimeIdForBootstrap(e){for(let[t,n]of this.runtimeToBootstrap)if(n===e)return t}routeCherryHostEvent(e,t){if(!hJ(t))return;let n=this.options.onCherryHostEvent;if(!n){WJ.debug(`cherry.host_event received but no onCherryHostEvent wired`,{bootstrapId:e,name:t.name});return}let r=this.runtimeIdForBootstrap(e);try{n(r,t.name,t.detail)}catch(n){WJ.warn(`Failed to route cherry.host_event to cone`,{bootstrapId:e,name:t.name,error:n instanceof Error?n.message:String(n)})}}emitCherrySliccEvent(e,t,n){let r=e.indexOf(`:`),i=r>=0?e.slice(0,r):e,a=this.runtimeToBootstrap.get(i),o=a?this.followers.get(a):void 0;return o?o.sync.send({type:`cherry.slicc_event`,targetId:e,name:t,detail:n}):(WJ.warn(`emitCherrySliccEvent: owning follower not connected`,{targetId:e,name:t}),!1)}canRuntimeOpenTab(e){let t=this.registry.getEntries().filter(t=>t.runtimeId===e);return t.length===0?!0:t.some(e=>!qJ(e))}openRemoteTab(e,t){let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.reject(Error(`Target runtime "${e}" not connected`));if(!this.canRuntimeOpenTab(e))return Promise.reject(Error(`Target runtime "${e}" is a cherry host that cannot open tabs`));let i=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.tabOpenResolvers.set(i,{resolve:e,reject:n}),this.pendingTabOpenRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i}),r.sync.send({type:`tab.open`,requestId:i,url:t})})}async executeLocalTabOpen(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.browserTransport;if(!i){r.sync.send({type:`tab.open.error`,requestId:e,error:`Leader has no browser transport`});return}try{let n=(await i.send(`Target.createTarget`,{url:t,background:!0})).targetId;r.sync.send({type:`tab.opened`,requestId:e,targetId:`leader:${n}`})}catch(t){r.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardTabOpen(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" not connected`});return}if(!this.canRuntimeOpenTab(t)){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" is a cherry host that cannot open tabs`});return}this.pendingTabOpenRoutes.set(e,{requesterBootstrapId:r,requestId:e}),a.sync.send({type:`tab.open`,requestId:e,url:n})}handleTabOpenResponse(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.resolve(t));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.opened`,requestId:e,targetId:t})}handleTabOpenError(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.reject(Error(t)));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.open.error`,requestId:e,error:t})}async executeLocalFs(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.vfs;if(!i){r.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Leader has no VFS`}});return}let a=await AJ(i,t);for(let t of a)r.sync.send({type:`fs.response`,requestId:e,response:t})}forwardFsRequest(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Target runtime "${t}" not connected`}});return}this.pendingFsRoutes.set(e,{requesterBootstrapId:r,requestId:e,chunks:[],totalChunks:1}),a.sync.send({type:`fs.request`,requestId:e,request:n})}handleFsResponse(e,t){let n=this.pendingFsRoutes.get(e);if(!n){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}return}if(n.requesterBootstrapId===`__leader__`){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),this.pendingFsRoutes.delete(e),n.resolve(n.responses))}return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`fs.response`,requestId:e,response:t}),n.chunks.push(t),n.totalChunks=t.ok&&t.totalChunks||1,n.chunks.length>=n.totalChunks&&this.pendingFsRoutes.delete(e)}sendFsRequest(e,t){if(e===`leader`){let e=this.options.vfs;return e?AJ(e,t):Promise.resolve([{ok:!1,error:`Leader has no VFS`}])}let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.resolve([{ok:!1,error:`Target runtime "${e}" not connected`}]);let i=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.fsResolvers.set(i,{resolve:e,reject:n,responses:[]}),this.pendingFsRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i,chunks:[],totalChunks:1}),r.sync.send({type:`fs.request`,requestId:i,request:t})})}},XJ=d(`tray-follower`);function ZJ(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function QJ(e){let t=ZJ(e.joinUrl),n=await aY(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return XJ.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),$J(n)}function $J(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}:t}async function eY(e){return iY(await oY(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function tY(e){return iY(await oY(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function nY(e){return iY(await oY(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function rY(e){return iY(await oY(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function iY(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function aY(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!sY(n)){let n=t?t.slice(0,200):`(empty)`;throw XJ.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 oY(e,t){let n=ZJ(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(!cY(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function sY(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`&&lY(r.bootstrap):r.action===`fail`?(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function cY(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`&&lY(t.bootstrap)&&Array.isArray(t.events)}function lY(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 uY=d(`tray-webrtc`),dY=`tray-control`,fY=250,pY=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>gY(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??dY}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()}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=t.createDataChannel(this.dataChannelLabel);this.peers.set(e.bootstrapId,{state:n,peer:t,channel:r}),t.addEventListener(`icecandidate`,({candidate:t})=>{let n=vY(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`)&&(uY.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))}),r.addEventListener(`close`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(uY.warn(`Leader data channel closed post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(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`?(uY.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:_Y(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.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);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){uY.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},mY=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??(()=>gY(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??fY}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();xr({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),uY.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0;for(;;){yY(this.stopped),n++;let t;try{t=await QJ({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 xr({...vr(),attachAttempts:n,lastError:t}),e}if(xr({...vr(),attachAttempts:n,lastAttachCode:t.code}),t.action===`wait`){let e=t.retryAfterMs??1e3;uY.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&uY.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 xr({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),uY.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 xr({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),uY.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw xr({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),uY.warn(`Follower tray bootstrap failed`,{error:r}),e}}}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,xr({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(yY(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 eY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,cursor:i,fetchImpl:this.fetchImpl});r=n.bootstrap,i=r.cursor;try{for(let e of n.events)if(e.type===`bootstrap.offer`){await this.activePeer.peer.setRemoteDescription(e.offer);let n=await this.activePeer.peer.createAnswer();await this.activePeer.peer.setLocalDescription(n),await tY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,answer:_Y(this.activePeer.peer.localDescription??n,`answer`),fetchImpl:this.fetchImpl})}else if(e.type===`bootstrap.ice_candidate`)await this.activePeer.peer.addIceCandidate(e.candidate);else if(e.type===`bootstrap.failed`)throw Error(e.failure.message)}catch(e){if(r.failure?.retryable&&r.retriesRemaining>0){r=(await rY({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)}}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`)&&(uY.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=e,e.addEventListener(`open`,()=>{r.open=!0}),e.addEventListener(`close`,()=>{r.open?(uY.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?(uY.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=vY(n);r&&nY({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{uY.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function hY(e,t){let n=t.baseDelayMs??1e3,r=t.backoffMultiplier??2,i=t.maxDelayMs??3e4,a=t.maxAttempts??10,o=t.sleep??e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=!1,c=!1,l=null,u={cancel(){s=!0,c=!1,l?.stop(),l=null},get reconnecting(){return c}},d=()=>{let t=new mY({...e,sleep:o,onDisconnected:e=>{s||(uY.warn(`Follower disconnected, starting reconnect loop`,{reason:e}),f(e))}});return l=t,{manager:t,connectionPromise:t.start()}},f=async u=>{if(s||c)return;c=!0,l?.stop(),l=null;let f=0,p=n,m=u??`Unknown disconnect`;for(;!s&&f<a&&(f++,t.onReconnecting?.(f),xr({...vr(),state:`reconnecting`,error:null,reconnectAttempts:f}),uY.info(`Reconnect attempt`,{attempt:f,delay:p}),await o(p),!s);){let n=null;try{let r=d();n=r.manager;let i=await r.connectionPromise;if(s){n.stop();break}c=!1,xr({...vr(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),uY.info(`Reconnect successful`,{attempt:f,trayId:i.trayId}),t.onConnected(i);return}catch(e){m=e instanceof Error?e.message:String(e),uY.warn(`Reconnect attempt failed`,{attempt:f,error:m}),n?.stop(),l=null}p=Math.min(p*r,i)}s||(c=!1,xr({...vr(),state:`error`,error:`Reconnect failed after ${f} attempts: ${m}`,reconnectAttempts:f}),uY.warn(`Reconnect gave up`,{attempts:f,lastError:m}),t.onGaveUp?.(m))},{connectionPromise:p}=d();return p.then(e=>{s||t.onConnected(e)}).catch(e=>{s||uY.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)})}),u}function gY(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 _Y(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 vY(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 yY(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}var bY=d(`page-leader-tray`);function xY(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new YJ({getMessages:e.getMessages,getMessagesForScoop:e.getMessagesForScoop,getScoopJid:e.getScoopJid,getScoops:e.getScoops,getSprinkles:e.getSprinkles,readSprinkleContent:e.readSprinkleContent,onSprinkleLick:e.onSprinkleLick,onForwardedLick:e.onForwardedLick,onFollowerMessage:e.onFollowerMessage,onFollowerAbort:e.onFollowerAbort,onFollowerCountChanged:e.onFollowerCountChanged,onRemoteTransportsCleaned:e.onRemoteTransportsCleaned,onCherryHostEvent:e.onCherryHostEvent,browserAPI:e.browserAPI,browserTransport:e.browserTransport,vfs:e.vfs}),e.browserAPI.setTrayTargetProvider(a),i=new pY({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{bY.info(`Tray follower data channel opened`,{controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,runtime:e.runtime}),a.addFollower(e.bootstrapId,t,{runtime:e.runtime,connectedAt:e.connectedAt??void 0})},onPeerDisconnected:(e,t)=>{bY.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new Xr({workerBaseUrl:e.workerBaseUrl,runtime:e.runtime??`slicc-standalone`,...e.kind?{kind:e.kind}:{},...e.onLeaderReady?{onLeaderReady:e.onLeaderReady}:{},fetchImpl:n,...e._storeOverride?{store:e._storeOverride}:{},...e._webSocketFactory?{webSocketFactory:e._webSocketFactory}:{},onControlMessage:t=>{if(t.type===`webhook.event`){e.sendWebhookEvent(t.webhookId,t.headers,t.body);return}i.handleControlMessage(t).catch(e=>{bY.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{bY.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{bY.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{bY.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new fJ(bY,{failureMessage:`Leader CDP target refresh failed (best-effort, throttled)`,recoveryMessage:`Leader CDP target refresh recovered (stable for debounce window)`}),l=async()=>{let t;try{t=await e.browserAPI.listPages()}catch(e){c.reportFailure(e);return}c.reportSuccess();try{let e=t.map(e=>({targetId:e.targetId,title:e.title,url:e.url}));a.setLocalTargets(e)}catch(e){bY.error(`Leader target broadcast failed (sync.setLocalTargets threw)`,{error:e instanceof Error?e.message:String(e)})}};s.push(setInterval(l,t)),l(),s.push(setInterval(()=>{try{a.broadcastScoopsList(),a.broadcastSprinklesList()}catch(e){bY.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??SY();if(n)try{let e=zn(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){bY.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{bY.error(`Leader tray start failed`,{error:e instanceof Error?e.message:String(e)})}),{stop(){o();for(let e of s)clearInterval(e);a.stop(),i.stop(),r.stop()},async reset(){return a.stop(),i.stop(),r.stop(),await r.clearSession(),u(await r.start()),Wr()},leader:r,peers:i,sync:a}}function SY(){return typeof window>`u`||!window.history||!window.location?null:{get href(){return window.location.href},replaceState(e,t,n){window.history.replaceState(e,t,n)}}}function CY(e){let t=new Map,n=(e,t)=>`${e}:${t}`,r=(r,i)=>{let a=n(r,i),o=t.get(a);if(!o){let n=e.getSync();if(!n)throw Error(`remote-cdp: leader tray not started`);o={runtimeId:r,localTargetId:i,transport:n.createRemoteTransport(r,i),forwarders:new Map},t.set(a,o)}return o},i=n=>{let r=t.get(n);if(!r)return;for(let[e,t]of r.forwarders)r.transport.off(e,t.listener);r.forwarders.clear();let i=e.getSync();i?.removeRemoteTransport?i.removeRemoteTransport(r.runtimeId,r.localTargetId):r.transport.disconnect(),t.delete(n)};return{async send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o}){return r(e,t).transport.send(n,i,a,o)},async subscribe({runtimeId:t,localTargetId:n,event:i}){let a=r(t,n),o=a.forwarders.get(i);if(o)return o.count+=1,{ok:!0};let s=r=>e.postEvent({runtimeId:t,localTargetId:n,method:i,params:r});return a.transport.on(i,s),a.forwarders.set(i,{listener:s,count:1}),{ok:!0}},async unsubscribe({runtimeId:e,localTargetId:r,event:i}){let a=t.get(n(e,r)),o=a?.forwarders.get(i);return!a||!o?{ok:!0}:(--o.count,o.count<=0&&(a.transport.off(i,o.listener),a.forwarders.delete(i)),{ok:!0})},async detach({runtimeId:e,localTargetId:t}){return i(n(e,t)),{ok:!0}},async openTab({runtimeId:t,url:n}){let r=e.getSync();if(!r?.openRemoteTab)throw Error(`remote-cdp: openRemoteTab not available`);return{targetId:await r.openRemoteTab(t,n)}},cleanupRuntime(e){let n=`${e}:`;for(let e of[...t.keys()])e.startsWith(n)&&i(e)},disposeAll(){for(let e of[...t.keys()])i(e)}}}function wY(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}n((e=>{(function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function n(e){return i(o(e),arguments)}function r(e,t){return n.apply(null,[e].concat(t||[]))}function i(e,r){var i=1,a=e.length,o,s=``,c,l,u,d,f,p,m,h;for(c=0;c<a;c++)if(typeof e[c]==`string`)s+=e[c];else if(typeof e[c]==`object`){if(u=e[c],u.keys)for(o=r[i],l=0;l<u.keys.length;l++){if(o==null)throw Error(n(`[sprintf] Cannot access property "%s" of undefined value "%s"`,u.keys[l],u.keys[l-1]));o=o[u.keys[l]]}else o=u.param_no?r[u.param_no]:r[i++];if(t.not_type.test(u.type)&&t.not_primitive.test(u.type)&&o instanceof Function&&(o=o()),t.numeric_arg.test(u.type)&&typeof o!=`number`&&isNaN(o))throw TypeError(n(`[sprintf] expecting number but found %T`,o));switch(t.number.test(u.type)&&(m=o>=0),u.type){case`b`:o=parseInt(o,10).toString(2);break;case`c`:o=String.fromCharCode(parseInt(o,10));break;case`d`:case`i`:o=parseInt(o,10);break;case`j`:o=JSON.stringify(o,null,u.width?parseInt(u.width):0);break;case`e`:o=u.precision?parseFloat(o).toExponential(u.precision):parseFloat(o).toExponential();break;case`f`:o=u.precision?parseFloat(o).toFixed(u.precision):parseFloat(o);break;case`g`:o=u.precision?String(Number(o.toPrecision(u.precision))):parseFloat(o);break;case`o`:o=(parseInt(o,10)>>>0).toString(8);break;case`s`:o=String(o),o=u.precision?o.substring(0,u.precision):o;break;case`t`:o=String(!!o),o=u.precision?o.substring(0,u.precision):o;break;case`T`:o=Object.prototype.toString.call(o).slice(8,-1).toLowerCase(),o=u.precision?o.substring(0,u.precision):o;break;case`u`:o=parseInt(o,10)>>>0;break;case`v`:o=o.valueOf(),o=u.precision?o.substring(0,u.precision):o;break;case`x`:o=(parseInt(o,10)>>>0).toString(16);break;case`X`:o=(parseInt(o,10)>>>0).toString(16).toUpperCase();break}t.json.test(u.type)?s+=o:(t.number.test(u.type)&&(!m||u.sign)?(h=m?`+`:`-`,o=o.toString().replace(t.sign,``)):h=``,f=u.pad_char?u.pad_char===`0`?`0`:u.pad_char.charAt(1):` `,p=u.width-(h+o).length,d=u.width&&p>0?f.repeat(p):``,s+=u.align?h+o+d:f===`0`?h+d+o:d+h+o)}return s}var a=Object.create(null);function o(e){if(a[e])return a[e];for(var n=e,r,i=[],o=0;n;){if((r=t.text.exec(n))!==null)i.push(r[0]);else if((r=t.modulo.exec(n))!==null)i.push(`%`);else if((r=t.placeholder.exec(n))!==null){if(r[2]){o|=1;var s=[],c=r[2],l=[];if((l=t.key.exec(c))!==null)for(s.push(l[1]);(c=c.substring(l[0].length))!==``;)if((l=t.key_access.exec(c))!==null)s.push(l[1]);else if((l=t.index_access.exec(c))!==null)s.push(l[1]);else throw SyntaxError(`[sprintf] failed to parse named argument key`);else throw SyntaxError(`[sprintf] failed to parse named argument key`);r[2]=s}else o|=2;if(o===3)throw Error(`[sprintf] mixing positional and named placeholders is not (yet) supported`);i.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}else throw SyntaxError(`[sprintf] unexpected placeholder`);n=n.substring(r[0].length)}return a[e]=i}e!==void 0&&(e.sprintf=n,e.vsprintf=r),typeof window<`u`&&(window.sprintf=n,window.vsprintf=r,typeof define==`function`&&define.amd&&define(function(){return{sprintf:n,vsprintf:r}}))})()}))();var TY=(e,t,n)=>{let r=e instanceof RegExp?EY(e,n):e,i=t instanceof RegExp?EY(t,n):t,a=r!==null&&i!=null&&DY(r,i,n);return a&&{start:a[0],end:a[1],pre:n.slice(0,a[0]),body:n.slice(a[0]+r.length,a[1]),post:n.slice(a[1]+i.length)}},EY=(e,t)=>{let n=t.match(e);return n?n[0]:null},DY=(e,t,n)=>{let r,i,a,o,s,c=n.indexOf(e),l=n.indexOf(t,c+1),u=c;if(c>=0&&l>0){if(e===t)return[c,l];for(r=[],a=n.length;u>=0&&!s;){if(u===c)r.push(u),c=n.indexOf(e,u+1);else if(r.length===1){let e=r.pop();e!==void 0&&(s=[e,l])}else i=r.pop(),i!==void 0&&i<a&&(a=i,o=l),l=n.indexOf(t,u+1);u=c<l&&c>=0?c:l}r.length&&o!==void 0&&(s=[a,o])}return s},OY=`\0SLASH`+Math.random()+`\0`,kY=`\0OPEN`+Math.random()+`\0`,AY=`\0CLOSE`+Math.random()+`\0`,jY=`\0COMMA`+Math.random()+`\0`,MY=`\0PERIOD`+Math.random()+`\0`,NY=new RegExp(OY,`g`),PY=new RegExp(kY,`g`),FY=new RegExp(AY,`g`),IY=new RegExp(jY,`g`),LY=new RegExp(MY,`g`),RY=/\\\\/g,zY=/\\{/g,BY=/\\}/g,VY=/\\,/g,HY=/\\\./g,UY=1e5;function WY(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function GY(e){return e.replace(RY,OY).replace(zY,kY).replace(BY,AY).replace(VY,jY).replace(HY,MY)}function KY(e){return e.replace(NY,`\\`).replace(PY,`{`).replace(FY,`}`).replace(IY,`,`).replace(LY,`.`)}function qY(e){if(!e)return[``];let t=[],n=TY(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=qY(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function JY(e,t={}){if(!e)return[];let{max:n=UY}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),$Y(GY(e),n,!0).map(KY)}function YY(e){return`{`+e+`}`}function XY(e){return/^-?0\d/.test(e)}function ZY(e,t){return e<=t}function QY(e,t){return e>=t}function $Y(e,t,n){let r=[],i=TY(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?$Y(i.post,t,!1):[``];if(/\$$/.test(i.pre))for(let e=0;e<o.length&&e<t;e++){let t=a+`{`+i.body+`}`+o[e];r.push(t)}else{let s=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),l=s||c,u=i.body.indexOf(`,`)>=0;if(!l&&!u)return i.post.match(/,(?!,).*\}/)?(e=i.pre+`{`+i.body+AY+i.post,$Y(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=qY(i.body),d.length===1&&d[0]!==void 0&&(d=$Y(d[0],t,!1).map(YY),d.length===1))return o.map(e=>i.pre+d[0]+e);let f;if(l&&d[0]!==void 0&&d[1]!==void 0){let e=WY(d[0]),t=WY(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(WY(d[2])):1,i=ZY;t<e&&(r*=-1,i=QY);let a=d.some(XY);f=[];for(let o=e;i(o,t);o+=r){let e;if(c)e=String.fromCharCode(o),e===`\\`&&(e=``);else if(e=String(o),a){let t=n-e.length;if(t>0){let n=Array(t+1).join(`0`);e=o<0?`-`+n+e.slice(1):n+e}}f.push(e)}}else{f=[];for(let e=0;e<d.length;e++)f.push.apply(f,$Y(d[e],t,!1))}for(let e=0;e<f.length;e++)for(let i=0;i<o.length&&r.length<t;i++){let t=a+f[e]+o[i];(!n||l||t)&&r.push(t)}}return r}var eX=1024*64,tX=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>eX)throw TypeError(`pattern is too long`)},nX={"[:alnum:]":[`\\p{L}\\p{Nl}\\p{Nd}`,!0],"[:alpha:]":[`\\p{L}\\p{Nl}`,!0],"[:ascii:]":[`\\x00-\\x7f`,!1],"[:blank:]":[`\\p{Zs}\\t`,!0],"[:cntrl:]":[`\\p{Cc}`,!0],"[:digit:]":[`\\p{Nd}`,!0],"[:graph:]":[`\\p{Z}\\p{C}`,!0,!0],"[:lower:]":[`\\p{Ll}`,!0],"[:print:]":[`\\p{C}`,!0],"[:punct:]":[`\\p{P}`,!0],"[:space:]":[`\\p{Z}\\t\\r\\n\\v\\f`,!0],"[:upper:]":[`\\p{Lu}`,!0],"[:word:]":[`\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}`,!0],"[:xdigit:]":[`A-Fa-f0-9`,!1]},rX=e=>e.replace(/[[\]\\-]/g,`\\$&`),iX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),aX=e=>e.join(``),oX=(e,t)=>{let n=t;if(e.charAt(n)!==`[`)throw Error(`not in a brace expression`);let r=[],i=[],a=n+1,o=!1,s=!1,c=!1,l=!1,u=n,d=``;WHILE:for(;a<e.length;){let t=e.charAt(a);if((t===`!`||t===`^`)&&a===n+1){l=!0,a++;continue}if(t===`]`&&o&&!c){u=a+1;break}if(o=!0,t===`\\`&&!c){c=!0,a++;continue}if(t===`[`&&!c){for(let[t,[o,c,l]]of Object.entries(nX))if(e.startsWith(t,a)){if(d)return[`$.`,!1,e.length-n,!0];a+=t.length,l?i.push(o):r.push(o),s||=c;continue WHILE}}if(c=!1,d){t>d?r.push(rX(d)+`-`+rX(t)):t===d&&r.push(rX(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push(rX(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push(rX(t)),a++}if(u<a)return[``,!1,0,!1];if(!r.length&&!i.length)return[`$.`,!1,e.length-n,!0];if(i.length===0&&r.length===1&&/^\\?.$/.test(r[0])&&!l)return[iX(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+aX(r)+`]`,p=`[`+(l?``:`^`)+aX(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},sX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!0}={})=>n?t?e.replace(/\[([^\/\\])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^\/\\])\]/g,`$1$2`).replace(/\\([^\/])/g,`$1`):t?e.replace(/\[([^\/\\{}])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^\/\\{}])\]/g,`$1$2`).replace(/\\([^\/{}])/g,`$1`),cX,lX=new Set([`!`,`?`,`+`,`*`,`@`]),uX=e=>lX.has(e),dX=e=>uX(e.type),fX=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),pX=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),mX=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),hX=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),gX=`(?!(?:^|/)\\.\\.?(?:$|/))`,_X=`(?!\\.)`,vX=new Set([`[`,`.`]),yX=new Set([`..`,`.`]),bX=new Set(`().*{}+?[]^$\\!`),xX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),SX=`[^/]`,CX=`[^/]*?`,wX=`[^/]+?`,TX=0,EX=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++TX;get depth(){return(this.#i?.depth??-1)+1}[Symbol.for(`nodejs.util.inspect.custom`)](){return{"@@type":`AST`,id:this.id,type:this.type,root:this.#e.id,parent:this.#i?.id,depth:this.depth,partsLength:this.#r.length,parts:this.#r}}constructor(e,t,n={}){this.type=e,e&&(this.#t=!0),this.#i=t,this.#e=this.#i?this.#i.#e:this,this.#c=this.#e===this?n:this.#e.#c,this.#o=this.#e===this?[]:this.#e.#o,e===`!`&&!this.#e.#s&&this.#o.push(this),this.#a=this.#i?this.#i.#r.length:0}get hasMagic(){if(this.#t!==void 0)return this.#t;for(let e of this.#r)if(typeof e!=`string`&&(e.type||e.hasMagic))return this.#t=!0;return this.#t}toString(){return this.#l===void 0?this.type?this.#l=this.type+`(`+this.#r.map(e=>String(e)).join(`|`)+`)`:this.#l=this.#r.map(e=>String(e)).join(``):this.#l}#d(){if(this!==this.#e)throw Error(`should only call on root`);if(this.#s)return this;this.toString(),this.#s=!0;let e;for(;e=this.#o.pop();){if(e.type!==`!`)continue;let t=e,n=t.#i;for(;n;){for(let r=t.#a+1;!n.type&&r<n.#r.length;r++)for(let t of e.#r){if(typeof t==`string`)throw Error(`string part in extglob AST??`);t.copyIn(n.#r[r])}t=n,n=t.#i}}return this}push(...e){for(let t of e)if(t!==``){if(typeof t!=`string`&&!(t instanceof cX&&t.#i===this))throw Error(`invalid part: `+t);this.#r.push(t)}}toJSON(){let e=this.type===null?this.#r.slice().map(e=>typeof e==`string`?e:e.toJSON()):[this.type,...this.#r.map(e=>e.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#e||this.#e.#s&&this.#i?.type===`!`)&&e.push({}),e}isStart(){if(this.#e===this)return!0;if(!this.#i?.isStart())return!1;if(this.#a===0)return!0;let e=this.#i;for(let t=0;t<this.#a;t++){let n=e.#r[t];if(!(n instanceof cX&&n.type===`!`))return!1}return!0}isEnd(){if(this.#e===this||this.#i?.type===`!`)return!0;if(!this.#i?.isEnd())return!1;if(!this.type)return this.#i?.isEnd();let e=this.#i?this.#i.#r.length:0;return this.#a===e-1}copyIn(e){typeof e==`string`?this.push(e):this.push(e.clone(this))}clone(e){let t=new cX(this.type,e);for(let e of this.#r)t.copyIn(e);return t}static#f(e,t,n,r,i){let a=r.maxExtglobRecursion??2,o=!1,s=!1,c=-1,l=!1;if(t.type===null){let u=n,d=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,d+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),d+=n;continue}else if(n===`[`){s=!0,c=u,l=!1,d+=n;continue}if(!r.noext&&uX(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new cX(n,t);u=cX.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new cX(null,t),f=[],p=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,p+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),p+=n;continue}else if(n===`[`){s=!0,c=u,l=!1,p+=n;continue}if(!r.noext&&uX(n)&&e.charAt(u)===`(`&&(i<=a||t&&t.#h(n))){let a=t&&t.#h(n)?0:1;d.push(p),p=``;let o=new cX(n,d);d.push(o),u=cX.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new cX(null,t);continue}if(n===`)`)return p===``&&t.#r.length===0&&(t.#u=!0),d.push(p),p=``,t.push(...f,d),u;p+=n}return t.type=null,t.#t=void 0,t.#r=[e.substring(n-1)],u}#p(e){return this.#m(e,pX)}#m(e,t=fX){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null)return!1;let n=e.#r[0];return!n||typeof n!=`object`||n.type===null?!1:this.#h(n.type,t)}#h(e,t=mX){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new cX(null,n,this.options);r.#r.push(``),n.push(r),this.#_(e,t)}#_(e,t){let n=e.#r[0];this.#r.splice(t,1,...n.#r);for(let e of n.#r)typeof e==`object`&&(e.#i=this);this.#l=void 0}#v(e){return!!hX.get(this.type)?.has(e)}#y(e){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null||this.#r.length!==1)return!1;let t=e.#r[0];return!t||typeof t!=`object`||t.type===null?!1:this.#v(t.type)}#b(e){let t=hX.get(this.type),n=e.#r[0],r=t?.get(n.type);if(!r)return!1;this.#r=n.#r;for(let e of this.#r)typeof e==`object`&&(e.#i=this);this.type=r,this.#l=void 0,this.#u=!1}static fromGlob(e,t={}){let n=new cX(null,void 0,t);return cX.#f(e,n,0,t,0),n}toMMPattern(){if(this!==this.#e)return this.#e.toMMPattern();let e=this.toString(),[t,n,r,i]=this.toRegExpSource();if(!(r||this.#t||this.#c.nocase&&!this.#c.nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return n;let a=(this.#c.nocase?`i`:``)+(i?`u`:``);return Object.assign(RegExp(`^${t}$`,a),{_src:t,_glob:e})}get options(){return this.#c}toRegExpSource(e){let t=e??!!this.#c.dot;if(this.#e===this&&(this.#x(),this.#d()),!dX(this)){let n=this.isStart()&&this.isEnd()&&!this.#r.some(e=>typeof e!=`string`),r=this.#r.map(t=>{let[r,i,a,o]=typeof t==`string`?cX.#C(t,this.#t,n):t.toRegExpSource(e);return this.#t=this.#t||a,this.#n=this.#n||o,r}).join(``),i=``;if(this.isStart()&&typeof this.#r[0]==`string`&&!(this.#r.length===1&&yX.has(this.#r[0]))){let n=vX,a=t&&n.has(r.charAt(0))||r.startsWith(`\\.`)&&n.has(r.charAt(2))||r.startsWith(`\\.\\.`)&&n.has(r.charAt(4)),o=!t&&!e&&n.has(r.charAt(0));i=a?gX:o?_X:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,sX(r),this.#t=!!this.#t,this.#n]}let n=this.type===`*`||this.type===`+`,r=this.type===`!`?`(?:(?!(?:`:`(?:`,i=this.#S(t);if(this.isStart()&&this.isEnd()&&!i&&this.type!==`!`){let e=this.toString(),t=this;return t.#r=[e],t.type=null,t.#t=void 0,[e,sX(this.toString()),!1,!1]}let a=!n||e||t?``:this.#S(!0);a===i&&(a=``),a&&(i=`(?:${i})(?:${a})*?`);let o=``;if(this.type===`!`&&this.#u)o=(this.isStart()&&!t?_X:``)+wX;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?_X:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,sX(i),this.#t=!!this.#t,this.#n]}#x(){if(dX(this)){let e=0,t=!1;do{t=!0;for(let e=0;e<this.#r.length;e++){let n=this.#r[e];typeof n==`object`&&(n.#x(),this.#m(n)?(t=!1,this.#_(n,e)):this.#p(n)?(t=!1,this.#g(n,e)):this.#y(n)&&(t=!1,this.#b(n)))}}while(!t&&++e<10)}else for(let e of this.#r)typeof e==`object`&&e.#x();this.#l=void 0}#S(e){return this.#r.map(t=>{if(typeof t==`string`)throw Error(`string type in extglob ast??`);let[n,r,i,a]=t.toRegExpSource(e);return this.#n=this.#n||a,n}).filter(e=>!(this.isStart()&&this.isEnd())||!!e).join(`|`)}static#C(e,t,n=!1){let r=!1,i=``,a=!1,o=!1;for(let s=0;s<e.length;s++){let c=e.charAt(s);if(r){r=!1,i+=(bX.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?wX:CX,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=oX(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=SX,t=!0;continue}i+=xX(c)}return[i,sX(e),!!t,a]}};cX=EX;var DX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),OX=(e,t,n={})=>(tX(t),!n.nocomment&&t.charAt(0)===`#`?!1:new aZ(t,n).match(e)),kX=/^\*+([^+@!?\*\[\(]*)$/,AX=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),jX=e=>t=>t.endsWith(e),MX=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),NX=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),PX=/^\*+\.\*+$/,FX=e=>!e.startsWith(`.`)&&e.includes(`.`),IX=e=>e!==`.`&&e!==`..`&&e.includes(`.`),LX=/^\.\*+$/,RX=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),zX=/^\*+$/,BX=e=>e.length!==0&&!e.startsWith(`.`),VX=e=>e.length!==0&&e!==`.`&&e!==`..`,HX=/^\?+([^+@!?\*\[\(]*)?$/,UX=([e,t=``])=>{let n=qX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},WX=([e,t=``])=>{let n=JX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},GX=([e,t=``])=>{let n=JX([e]);return t?e=>n(e)&&e.endsWith(t):n},KX=([e,t=``])=>{let n=qX([e]);return t?e=>n(e)&&e.endsWith(t):n},qX=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},JX=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},YX=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,XX={win32:{sep:`\\`},posix:{sep:`/`}};OX.sep=YX===`win32`?XX.win32.sep:XX.posix.sep;var ZX=Symbol(`globstar **`);OX.GLOBSTAR=ZX;var QX=`[^/]*?`,$X=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,eZ=`(?:(?!(?:\\/|^)\\.).)*?`;OX.filter=(e,t={})=>n=>OX(n,e,t);var tZ=(e,t={})=>Object.assign({},e,t);OX.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return OX;let t=OX;return Object.assign((n,r,i={})=>t(n,r,tZ(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,tZ(e,n))}static defaults(n){return t.defaults(tZ(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,tZ(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,tZ(e,r))}},unescape:(n,r={})=>t.unescape(n,tZ(e,r)),escape:(n,r={})=>t.escape(n,tZ(e,r)),filter:(n,r={})=>t.filter(n,tZ(e,r)),defaults:n=>t.defaults(tZ(e,n)),makeRe:(n,r={})=>t.makeRe(n,tZ(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,tZ(e,r)),match:(n,r,i={})=>t.match(n,r,tZ(e,i)),sep:t.sep,GLOBSTAR:ZX})};var nZ=(e,t={})=>(tX(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:JY(e,{max:t.braceExpandMax}));OX.braceExpand=nZ,OX.makeRe=(e,t={})=>new aZ(e,t).makeRe(),OX.match=(e,t,n={})=>{let r=new aZ(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var rZ=/[?*]|[+@!]\(.*?\)|\[|\]/,iZ=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),aZ=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){tX(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||YX,this.isWindows=this.platform===`win32`,this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,`/`)),this.preserveMultipleSlashes=!!t.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!t.nonegate,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=t.windowsNoMagicRoot===void 0?!!(this.isWindows&&this.nocase):t.windowsNoMagicRoot,this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let t of e)if(typeof t!=`string`)return!0;return!1}debug(...e){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)===`#`){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],t.debug&&(this.debug=(...e)=>console.error(...e)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(e=>this.slashSplit(e));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map((e,t,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){let t=e[0]===``&&e[1]===``&&(e[2]===`?`||!rZ.test(e[2]))&&!rZ.test(e[3]),n=/^[a-z]:/i.test(e[0]);if(t)return[...e.slice(0,4),...e.slice(4).map(e=>this.parse(e))];if(n)return[e[0],...e.slice(1).map(e=>this.parse(e))]}return e.map(e=>this.parse(e))});if(this.debug(this.pattern,r),this.set=r.filter(e=>e.indexOf(!1)===-1),this.isWindows)for(let e=0;e<this.set.length;e++){let t=this.set[e];t[0]===``&&t[1]===``&&this.globParts[e][2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3])&&(t[2]=`?`)}this.debug(this.pattern,this.set)}preprocess(e){if(this.options.noglobstar)for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)e[t][n]===`**`&&(e[t][n]=`*`);let{optimizationLevel:t=1}=this.options;return t>=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):e=t>=1?this.levelOneOptimize(e):this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(e=>{let t=-1;for(;(t=e.indexOf(`**`,t+1))!==-1;){let n=t;for(;e[n+1]===`**`;)n++;n!==t&&e.splice(t,n-t)}return e})}levelOneOptimize(e){return e.map(e=>(e=e.reduce((e,t)=>{let n=e[e.length-1];return t===`**`&&n===`**`?e:t===`..`&&n&&n!==`..`&&n!==`.`&&n!==`**`?(e.pop(),e):(e.push(t),e)},[]),e.length===0?[``]:e))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=!1;do{if(t=!1,!this.preserveMultipleSlashes){for(let n=1;n<e.length-1;n++){let r=e[n];n===1&&r===``&&e[0]===``||(r===`.`||r===``)&&(t=!0,e.splice(n,1),n--)}e[0]===`.`&&e.length===2&&(e[1]===`.`||e[1]===``)&&(t=!0,e.pop())}let n=0;for(;(n=e.indexOf(`..`,n+1))!==-1;){let r=e[n-1];r&&r!==`.`&&r!==`..`&&r!==`**`&&(t=!0,e.splice(n-1,2),n-=2)}}while(t);return e.length===0?[``]:e}firstPhasePreProcess(e){let t=!1;do{t=!1;for(let n of e){let r=-1;for(;(r=n.indexOf(`**`,r+1))!==-1;){let i=r;for(;n[i+1]===`**`;)i++;i>r&&n.splice(r+1,i-r);let a=n[r+1],o=n[r+2],s=n[r+3];if(a!==`..`||!o||o===`.`||o===`..`||!s||s===`.`||s===`..`)continue;t=!0,n.splice(r,1);let c=n.slice(0);c[r]=`**`,e.push(c),r--}if(!this.preserveMultipleSlashes){for(let e=1;e<n.length-1;e++){let r=n[e];e===1&&r===``&&n[0]===``||(r===`.`||r===``)&&(t=!0,n.splice(e,1),e--)}n[0]===`.`&&n.length===2&&(n[1]===`.`||n[1]===``)&&(t=!0,n.pop())}let i=0;for(;(i=n.indexOf(`..`,i+1))!==-1;){let e=n[i-1];if(e&&e!==`.`&&e!==`..`&&e!==`**`){t=!0;let e=i===1&&n[i+1]===`**`?[`.`]:[];n.splice(i-1,2,...e),n.length===0&&n.push(``),i-=2}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let n=t+1;n<e.length;n++){let r=this.partsMatch(e[t],e[n],!this.preserveMultipleSlashes);if(r){e[t]=[],e[n]=r;break}}return e.filter(e=>e.length)}partsMatch(e,t,n=!1){let r=0,i=0,a=[],o=``;for(;r<e.length&&i<t.length;)if(e[r]===t[i])a.push(o===`b`?t[i]:e[r]),r++,i++;else if(n&&e[r]===`**`&&t[i]===e[r+1])a.push(e[r]),r++;else if(n&&t[i]===`**`&&e[r]===t[i+1])a.push(t[i]),i++;else if(e[r]===`*`&&t[i]&&(this.options.dot||!t[i].startsWith(`.`))&&t[i]!==`**`){if(o===`b`)return!1;o=`a`,a.push(e[r]),r++,i++}else if(t[i]===`*`&&e[r]&&(this.options.dot||!e[r].startsWith(`.`))&&e[r]!==`**`){if(o===`a`)return!1;o=`b`,a.push(t[i]),r++,i++}else return!1;return e.length===t.length&&a}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=!1,n=0;for(let r=0;r<e.length&&e.charAt(r)===`!`;r++)t=!t,n++;n&&(this.pattern=e.slice(n)),this.negate=t}matchOne(e,t,n=!1){let r=0,i=0;if(this.isWindows){let n=typeof e[0]==`string`&&/^[a-z]:$/i.test(e[0]),a=!n&&e[0]===``&&e[1]===``&&e[2]===`?`&&/^[a-z]:$/i.test(e[3]),o=typeof t[0]==`string`&&/^[a-z]:$/i.test(t[0]),s=!o&&t[0]===``&&t[1]===``&&t[2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3]),c=a?3:n?0:void 0,l=s?3:o?0:void 0;if(typeof c==`number`&&typeof l==`number`){let[n,a]=[e[c],t[l]];n.toLowerCase()===a.toLowerCase()&&(t[l]=n,i=l,r=c)}}let{optimizationLevel:a=1}=this.options;return a>=2&&(e=this.levelTwoFileOptimize(e)),t.includes(ZX)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(ZX,i),o=t.lastIndexOf(ZX),[s,c,l]=n?[t.slice(i,a),t.slice(a+1),[]]:[t.slice(i,a),t.slice(a+1,o),t.slice(o+1)];if(s.length){let t=e.slice(r,r+s.length);if(!this.#n(t,s,n,0,0))return!1;r+=s.length,i+=s.length}let u=0;if(l.length){if(l.length+r>e.length)return!1;let t=e.length-l.length;if(this.#n(e,l,n,t,0))u=l.length;else{if(e[e.length-1]!==``||r+l.length===e.length||(t--,!this.#n(e,l,n,t,0)))return!1;u=l.length+1}}if(!c.length){let t=!!u;for(let n=r;n<e.length-u;n++){let r=String(e[n]);if(t=!0,r===`.`||r===`..`||!this.options.dot&&r.startsWith(`.`))return!1}return n||t}let d=[[[],0]],f=d[0],p=0,m=[0];for(let e of c)e===ZX?(m.push(p),f=[[],0],d.push(f)):(f[0].push(e),p++);let h=d.length-1,g=e.length-u;for(let e of d)e[1]=g-(m[h--]+e[0].length);return!!this.#t(e,d,r,0,n,0,!!u)}#t(e,t,n,r,i,a,o){let s=t[r];if(!s){for(let t=n;t<e.length;t++){o=!0;let n=e[t];if(n===`.`||n===`..`||!this.options.dot&&n.startsWith(`.`))return!1}return o}let[c,l]=s;for(;n<=l;){if(this.#n(e.slice(0,n+c.length),c,i,n,0)&&a<this.maxGlobstarRecursion){let s=this.#t(e,t,n+c.length,r+1,i,a+1,o);if(s!==!1)return s}let s=e[n];if(s===`.`||s===`..`||!this.options.dot&&s.startsWith(`.`))return!1;n++}return i||null}#n(e,t,n,r,i){let a,o,s,c;for(a=r,o=i,c=e.length,s=t.length;a<c&&o<s;a++,o++){this.debug(`matchOne loop`);let n=t[o],r=e[a];if(this.debug(t,n,r),n===!1||n===ZX)return!1;let i;if(typeof n==`string`?(i=r===n,this.debug(`string match`,n,r,i)):(i=n.test(r),this.debug(`pattern match`,n,r,i)),!i)return!1}if(a===c&&o===s)return!0;if(a===c)return n;if(o===s)return a===c-1&&e[a]===``;throw Error(`wtf?`)}braceExpand(){return nZ(this.pattern,this.options)}parse(e){tX(e);let t=this.options;if(e===`**`)return ZX;if(e===``)return``;let n,r=null;(n=e.match(zX))?r=t.dot?VX:BX:(n=e.match(kX))?r=(t.nocase?t.dot?NX:MX:t.dot?jX:AX)(n[1]):(n=e.match(HX))?r=(t.nocase?t.dot?WX:UX:t.dot?GX:KX)(n):(n=e.match(PX))?r=t.dot?IX:FX:(n=e.match(LX))&&(r=RX);let i=EX.fromGlob(e,this.options).toMMPattern();return r&&typeof i==`object`&&Reflect.defineProperty(i,"test",{value:r}),i}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let t=this.options,n=t.noglobstar?QX:t.dot?$X:eZ,r=new Set(t.nocase?[`i`]:[]),i=e.map(e=>{let t=e.map(e=>{if(e instanceof RegExp)for(let t of e.flags.split(``))r.add(t);return typeof e==`string`?iZ(e):e===ZX?ZX:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==ZX||a===ZX||(a===void 0?i!==void 0&&i!==ZX?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==ZX&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=ZX))});let i=t.filter(e=>e!==ZX);if(this.partial&&i.length>=1){let e=[];for(let t=1;t<=i.length;t++)e.push(i.slice(0,t).join(`/`));return`(?:`+e.join(`|`)+`)`}return i.join(`/`)}).join(`|`),[a,o]=e.length>1?[`(?:`,`)`]:[``,``];i=`^`+a+i+o+`$`,this.partial&&(i=`^(?:\\/|`+a+i.slice(1,-1)+o+`)$`),this.negate&&(i=`^(?!`+i+`).+$`);try{this.regexp=new RegExp(i,[...r].join(``))}catch{this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split(`/`):this.isWindows&&/^\/\/[^\/]+/.test(e)?[``,...e.split(/\/+/)]:e.split(/\/+/)}match(e,t=this.partial){if(this.debug(`match`,e,this.pattern),this.comment)return!1;if(this.empty)return e===``;if(e===`/`&&t)return!0;let n=this.options;this.isWindows&&(e=e.split(`\\`).join(`/`));let r=this.slashSplit(e);this.debug(this.pattern,`split`,r);let i=this.set;this.debug(this.pattern,`set`,i);let a=r[r.length-1];if(!a)for(let e=r.length-2;!a&&e>=0;e--)a=r[e];for(let e=0;e<i.length;e++){let o=i[e],s=r;if(n.matchBase&&o.length===1&&(s=[a]),this.matchOne(s,o,t))return n.flipNegate?!0:!this.negate}return n.flipNegate?!1:this.negate}static defaults(e){return OX.defaults(e).Minimatch}};OX.AST=EX,OX.Minimatch=aZ,OX.escape=DX,OX.unescape=sX;var oZ={};function sZ(){throw Error(`gunzipSync is not available in the browser`)}function cZ(){throw Error(`gzipSync is not available in the browser`)}var lZ=class{diff(e,t,n={}){let r;typeof n==`function`?(r=n,n={}):`callback`in n&&(r=n.callback);let i=this.castInput(e,n),a=this.castInput(t,n),o=this.removeEmpty(this.tokenize(i,n)),s=this.removeEmpty(this.tokenize(a,n));return this.diffWithOptionsObj(o,s,n,r)}diffWithOptionsObj(e,t,n,r){let i=e=>{if(e=this.postProcess(e,n),r){setTimeout(function(){r(e)},0);return}else return e},a=t.length,o=e.length,s=1,c=a+o;n.maxEditLength!=null&&(c=Math.min(c,n.maxEditLength));let l=n.timeout??1/0,u=Date.now()+l,d=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(d[0],t,e,0,n);if(d[0].oldPos+1>=o&&f+1>=a)return i(this.buildValues(d[0].lastComponent,t,e));let p=-1/0,m=1/0,h=()=>{for(let r=Math.max(p,-s);r<=Math.min(m,s);r+=2){let s,c=d[r-1],l=d[r+1];c&&(d[r-1]=void 0);let u=!1;if(l){let e=l.oldPos-r;u=l&&0<=e&&e<a}let h=c&&c.oldPos+1<o;if(!u&&!h){d[r]=void 0;continue}if(s=!h||u&&c.oldPos<l.oldPos?this.addToPath(l,!0,!1,0,n):this.addToPath(c,!1,!0,1,n),f=this.extractCommon(s,t,e,r,n),s.oldPos+1>=o&&f+1>=a)return i(this.buildValues(s.lastComponent,t,e))||!0;d[r]=s,s.oldPos+1>=o&&(m=Math.min(m,r-1)),f+1>=a&&(p=Math.max(p,r+1))}s++};if(r)(function e(){setTimeout(function(){if(s>c||Date.now()>u)return r(void 0);h()||e()},0)})();else for(;s<=c&&Date.now()<=u;){let e=h();if(e)return e}}addToPath(e,t,n,r,i){let a=e.lastComponent;return a&&!i.oneChangePerToken&&a.added===t&&a.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:n,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:a}}}extractCommon(e,t,n,r,i){let a=t.length,o=n.length,s=e.oldPos,c=s-r,l=0;for(;c+1<a&&s+1<o&&this.equals(n[s+1],t[c+1],i);)c++,s++,l++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return l&&!i.oneChangePerToken&&(e.lastComponent={count:l,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=s,c}equals(e,t,n){return n.comparator?n.comparator(e,t):e===t||!!n.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){let t=[];for(let n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join(``)}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,n){let r=[],i;for(;e;)r.push(e),i=e.previousComponent,delete e.previousComponent,e=i;r.reverse();let a=r.length,o=0,s=0,c=0;for(;o<a;o++){let e=r[o];if(e.removed)e.value=this.join(n.slice(c,c+e.count)),c+=e.count;else{if(!e.added&&this.useLongestToken){let r=t.slice(s,s+e.count);r=r.map(function(e,t){let r=n[c+t];return r.length>e.length?r:e}),e.value=this.join(r)}else e.value=this.join(t.slice(s,s+e.count));s+=e.count,e.added||(c+=e.count)}}return r}};new class extends lZ{};function uZ(e,t){let n;for(n=0;n<e.length&&n<t.length;n++)if(e[n]!=t[n])return e.slice(0,n);return e.slice(0,n)}function dZ(e,t){let n;if(!e||!t||e[e.length-1]!=t[t.length-1])return``;for(n=0;n<e.length&&n<t.length;n++)if(e[e.length-(n+1)]!=t[t.length-(n+1)])return e.slice(-n);return e.slice(-n)}function fZ(e,t,n){if(e.slice(0,t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't start with prefix ${JSON.stringify(t)}; this is a bug`);return n+e.slice(t.length)}function pZ(e,t,n){if(!t)return e+n;if(e.slice(-t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't end with suffix ${JSON.stringify(t)}; this is a bug`);return e.slice(0,-t.length)+n}function mZ(e,t){return fZ(e,t,``)}function hZ(e,t){return pZ(e,t,``)}function gZ(e,t){return t.slice(0,_Z(e,t))}function _Z(e,t){let n=0;e.length>t.length&&(n=e.length-t.length);let r=t.length;e.length<t.length&&(r=e.length);let i=Array(r),a=0;i[0]=0;for(let e=1;e<r;e++){for(t[e]==t[a]?i[e]=i[a]:i[e]=a;a>0&&t[e]!=t[a];)a=i[a];t[e]==t[a]&&a++}a=0;for(let r=n;r<e.length;r++){for(;a>0&&e[r]!=t[a];)a=i[a];e[r]==t[a]&&a++}return a}function vZ(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function yZ(e){let t=e.match(/^\s*/);return t?t[0]:``}var bZ=`a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}`,xZ=RegExp(`[${bZ}]+|\\s+|[^${bZ}]`,`ug`);new class extends lZ{equals(e,t,n){return n.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()}tokenize(e,t={}){let n;if(t.intlSegmenter){let r=t.intlSegmenter;if(r.resolvedOptions().granularity!=`word`)throw Error(`The segmenter passed must have a granularity of "word"`);n=[];for(let t of Array.from(r.segment(e))){let e=t.segment;n.length&&/\s/.test(n[n.length-1])&&/\s/.test(e)?n[n.length-1]+=e:n.push(e)}}else n=e.match(xZ)||[];let r=[],i=null;return n.forEach(e=>{/\s/.test(e)?i==null?r.push(e):r.push(r.pop()+e):i!=null&&/\s/.test(i)?r[r.length-1]==i?r.push(r.pop()+e):r.push(i+e):r.push(e),i=e}),r}join(e){return e.map((e,t)=>t==0?e:e.replace(/^\s+/,``)).join(``)}postProcess(e,t){if(!e||t.oneChangePerToken)return e;let n=null,r=null,i=null;return e.forEach(e=>{e.added?r=e:e.removed?i=e:((r||i)&&SZ(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&SZ(n,i,r,null),e}};function SZ(e,t,n,r){if(t&&n){let i=yZ(t.value),a=vZ(t.value),o=yZ(n.value),s=vZ(n.value);if(e){let r=uZ(i,o);e.value=pZ(e.value,o,r),t.value=mZ(t.value,r),n.value=mZ(n.value,r)}if(r){let e=dZ(a,s);r.value=fZ(r.value,s,e),t.value=hZ(t.value,e),n.value=hZ(n.value,e)}}else if(n){if(e){let e=yZ(n.value);n.value=n.value.substring(e.length)}if(r){let e=yZ(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=yZ(r.value),i=yZ(t.value),a=vZ(t.value),o=uZ(n,i);t.value=mZ(t.value,o);let s=dZ(mZ(n,o),a);t.value=hZ(t.value,s),r.value=fZ(r.value,n,s),e.value=pZ(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=yZ(r.value),n=gZ(vZ(t.value),e);t.value=hZ(t.value,n)}else if(e){let n=gZ(vZ(e.value),yZ(t.value));t.value=mZ(t.value,n)}}new class extends lZ{tokenize(e){let t=RegExp(`(\\r?\\n)|[${bZ}]+|[^\\S\\n\\r]+|[^${bZ}]`,`ug`);return e.match(t)||[]}},new class extends lZ{constructor(){super(...arguments),this.tokenize=CZ}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
618
|
+
`],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var mq=e({detectWelcomeFirstRun:()=>Dq,hasOnboardingFinalLickInHistory:()=>jq,hasWelcomeLickInHistory:()=>Tq,recordWelcomed:()=>Oq}),hq=d(`welcome-detection`),gq=`/shared/.welcomed`,_q=`browser-coding-agent`,vq=1,yq=`sessions`,bq=`session-cone`,xq=`[Sprinkle Event: welcome]`;function Sq(){return new Promise((e,t)=>{let n=indexedDB.open(_q,vq);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(yq)||e.createObjectStore(yq,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function Cq(){return Sq().catch(()=>new Promise((e,t)=>{setTimeout(()=>{Sq().then(e,t)},120)}))}async function wq(){let e=await Cq();try{return await new Promise((t,n)=>{let r=e.transaction(yq,`readonly`).objectStore(yq).get(bq);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function Tq(){try{let e=await wq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Eq(e))}catch(e){return hq.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Eq(e){let t=e.content;return typeof t==`string`?t.includes(xq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(xq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(xq)}return!1}):!1}async function Dq(e){let t=!1;try{t=await e.exists(gq)}catch(e){return hq.warn(`Failed to read welcomed marker`,{path:gq,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await Tq()?{isFirstRun:!1}:{isFirstRun:!0}}async function Oq(e){await e.writeFile(gq,`1`)}var kq=`"action":"onboarding-complete-with-provider"`;function Aq(e){let t=e.content;return typeof t==`string`?t.includes(kq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(kq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(kq)}return!1}):!1}async function jq(){try{let e=await wq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Aq(e))}catch(e){return hq.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Mq(e){let{vfs:t,storage:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:o}=e;Ln(n)||Dq(t).then(e=>{e.isFirstRun&&(r.has(`first-run`)&&(o.info(`Clearing stale welcome dedup entry — install state is fresh`),r.delete(`first-run`),i(r)),r.add(`first-run`),i(r),a().handleFirstRun())}).catch(e=>o.warn(`Welcome detection failed`,e))}async function Nq(e){let{client:t,layout:n,writableFs:r,useRpcVfs:i,opfsLeader:a,stopStorageSync:s,stopSprinkleHandler:c,hostDispose:l,window:u,log:d}=e,{RemoteTerminalView:f}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-DkDiLkBM.js`);return{RemoteTerminalView:e}},__vite__mapDeps([32,1,27,4,14,28,33,34,35])),{fetchSecretEnvVars:p}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([36,14])),m=await p(),h=new f({client:t,cwd:`/`,env:Object.keys(m).length>0?m:void 0});n.panels.terminal.mountRemoteShell(h).catch(e=>{d.error(`Failed to mount remote terminal view`,e)});let{installNukeReloadListener:g}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-DlkLMgeD.js`);return{installNukeReloadListener:e}},[]),_=g();u.addEventListener(`beforeunload`,()=>{s(),c(),_(),h.dispose(),l()},{once:!0}),nU()&&await rU(n.panels.chat),Si().catch(()=>{}),eU(r,{isWriter:!i||a.isLeader}),d.info(`Standalone kernel-worker UI ready`)}function Pq(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 Fq(e){let t=Pq(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function Iq(e,t){let n=Pq(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 Lq(){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 Rq(e){let{worker:t,realCdpTransport:n,callbacks:r}=e,i=e.readyTimeoutMs??3e4,a=e.migrationStallTimeoutMs??6e4,o=e.localStorageSeed??{},s=new MessageChannel,c=new MessageChannel,l=new ni(r,Fq(s.port1)),u=Iq(c.port1,n),d=null,f=new Promise((t,n)=>{let r=null,o=null,c=()=>{r!==null&&(clearTimeout(r),r=null)},l=()=>{c(),r=setTimeout(()=>{d?.(),n(Error(`Kernel worker did not signal ready within ${i}ms`))},i)},u=()=>{c(),r=setTimeout(()=>{d?.(),n(Error(`Kernel worker migration stalled — no progress within ${a}ms`))},a)};d=()=>{o!==null&&(s.port1.removeEventListener(`message`,o),o=null),c()},o=n=>{let r=n.data;if(r?.type===`kernel-migration-started`){c();try{e.onMigrationStart?.()}catch{}return}if(r?.type===`kernel-migration-progress`){u();try{let t=r;e.onMigrationProgress?.({copied:t.copied??0,total:t.total??0})}catch{}return}if(r?.type===`kernel-migration-finished`){l();try{e.onMigrationFinish?.()}catch{}return}r?.type===`kernel-worker-ready`&&(d?.(),t())},s.port1.addEventListener(`message`,o),l()}),p={type:`kernel-worker-init`,kernelPort:s.port2,cdpPort:c.port2,localStorageSeed:o,instanceId:e.instanceId};t.postMessage(p,[s.port2,c.port2]);let m=!1;return{client:l,ready:f,dispose(){if(!m){m=!0,d?.(),u();try{t.postMessage({type:`kernel-worker-shutdown`})}catch{}t.terminate(),s.port1.close(),c.port1.close()}}}}function zq(e){return Rq({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-D7kDM6z5.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,migrationStallTimeoutMs:e.migrationStallTimeoutMs,localStorageSeed:e.localStorageSeed??Lq(),instanceId:e.instanceId,onMigrationStart:e.onMigrationStart,onMigrationProgress:e.onMigrationProgress,onMigrationFinish:e.onMigrationFinish})}var Bq=`slicc-migration-splash`,Vq=`"Adobe Clean", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`;function Hq(e){let t=e.thresholdMs??1e3,n=e.setTimeout??globalThis.setTimeout,r=e.clearTimeout??globalThis.clearTimeout,i=e.message??`Upgrading workspace storage… this only happens once.`,a=e.logger,o=null,s=null,c={copied:0,total:0},l=null,u=null;function d(){if(!s)return;let{copied:e,total:t}=c,n=t>0?Math.max(0,Math.min(100,Math.round(e/t*100))):0;s.fill.style.width=`${n}%`,s.counter.textContent=t>0?`${e} / ${t} files`:`Preparing…`}function f(){if(s)return;let t=e.root.ownerDocument;if(!t)return;let n=t.createElement(`div`);n.id=Bq,n.setAttribute(`role`,`status`),n.setAttribute(`aria-live`,`polite`),n.setAttribute(`aria-modal`,`true`),n.style.position=`fixed`,n.style.inset=`0`,n.style.zIndex=`2147483646`,n.style.display=`flex`,n.style.alignItems=`center`,n.style.justifyContent=`center`,n.style.background=`rgba(20,20,20,0.72)`,n.style.backdropFilter=`blur(4px)`,n.style.webkitBackdropFilter=`blur(4px)`,n.style.pointerEvents=`auto`,n.style.fontFamily=Vq,n.addEventListener(`click`,e=>{e.stopPropagation()});let r=t.defaultView??t,o=e=>{e.stopImmediatePropagation(),e.preventDefault()};r.addEventListener(`keydown`,o,!0),l=o,u=r;let c=t.createElement(`div`);c.style.minWidth=`320px`,c.style.maxWidth=`420px`,c.style.padding=`28px 32px`,c.style.borderRadius=`12px`,c.style.background=`#1e1e1e`,c.style.color=`#e8e8e8`,c.style.boxShadow=`0 12px 32px rgba(0,0,0,0.45)`,c.style.border=`1px solid #3a3a3a`,c.style.textAlign=`center`,c.style.fontFamily=Vq;let f=t.createElement(`div`);f.textContent=i,f.style.fontSize=`16px`,f.style.fontWeight=`500`,f.style.lineHeight=`1.4`,f.style.marginBottom=`18px`;let p=t.createElement(`div`);p.style.height=`6px`,p.style.width=`100%`,p.style.borderRadius=`3px`,p.style.background=`#2c2c2c`,p.style.overflow=`hidden`,p.style.marginBottom=`10px`;let m=t.createElement(`div`);m.setAttribute(`data-slicc-migration-progress-fill`,``),m.style.height=`100%`,m.style.width=`0%`,m.style.background=`#3562ff`,m.style.transition=`width 120ms linear`,p.appendChild(m);let h=t.createElement(`div`);h.setAttribute(`data-slicc-migration-progress-counter`,``),h.style.fontSize=`12px`,h.style.fontVariantNumeric=`tabular-nums`,h.style.color=`#a1a1a1`,c.appendChild(f),c.appendChild(p),c.appendChild(h),n.appendChild(c),e.root.appendChild(n),s={root:n,fill:m,counter:h},d(),a?.debug?.(`[migration-splash] painted`)}function p(){l&&u&&(u.removeEventListener(`keydown`,l,!0),l=null,u=null),s&&(s.root.remove(),s=null,a?.debug?.(`[migration-splash] removed`))}return{arm(){o!==null||s!==null||(a?.debug?.(`[migration-splash] armed (threshold=${t}ms)`),o=n(()=>{o=null,f()},t))},updateProgress(e){c={copied:Math.max(0,e.copied|0),total:Math.max(0,e.total|0)},d()},disarm(){o!==null&&(r(o),o=null,a?.debug?.(`[migration-splash] disarmed before threshold`)),p()},isActive(){return o!==null||s!==null},forceShow(){o!==null&&(r(o),o=null),f()}}}function Uq(e){let{realCdpTransport:t,instanceId:n,layout:r,log:i,getSelectedScoop:a,setSelectedScoop:o}=e,s=e=>{let t=e.config?.modelId,n=t?Za(t):Qa();r.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),r.panels.chat.setThinkingLevel(e.config?.thinkingLevel)},l,u=async e=>{o(e),l.setSelectedScoopJid(e.jid),r.panels.scoops.setSelectedJid(e.jid),r.panels.memory.setSelectedScoop(e.jid),r.setScoopSwitcherSelected?.(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await r.panels.chat.switchToContext(t,!e.isCone,n),l.requestScoopMessages(e.jid),l.isProcessing(e.jid)&&r.panels.chat.setProcessing(!0),s(e)},d=null,f=()=>{d?.disarm()},p=(e=!0)=>{d||(d=Hq({root:document.body,logger:i}),e&&d.arm())},m=zq({realCdpTransport:t,instanceId:n,onMigrationStart:()=>p(!0),onMigrationProgress:e=>{p(!0),d?.updateProgress(e)},onMigrationFinish:()=>{f()},callbacks:{onStatusChange:(e,t)=>Wq(e,t,r,a),onScoopCreated:e=>{r.panels.scoops.refreshScoops(),r.refreshScoopSwitcher?.(),a()||u(e)},onScoopListUpdate:()=>{r.panels.scoops.refreshScoops(),r.refreshScoopSwitcher?.()},onIncomingMessage:(e,t)=>Gq(e,t,r,a),onScoopMessagesReplaced:(e,t)=>{a()?.jid===e&&r.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{a()?.jid===e&&r.panels.chat.setCompactionState(t)},onReady:()=>{i.info(`Kernel worker ready, scoop count:`,l.getScoops().length);let e=l.getScoops().find(e=>e.isCone);e&&!a()&&u(e)}}});return l=m.client,{client:l,hostReady:m.ready,hostDispose:()=>m.dispose(),selectScoop:u,syncThinkingButtonForScoop:s,disarmMigrationSplash:f}}function Wq(e,t,n,r){n.panels.scoops.updateScoopStatus(e,t),n.updateScoopSwitcherStatus?.(e,t),r()?.jid===e&&(n.setAgentProcessing(t===`processing`),t===`processing`?n.panels.chat.setProcessing(!0):t===`ready`&&n.panels.chat.setProcessing(!1))}function Gq(e,t,n,r){r()?.jid===e&&t.channel!==`web`&&or(t.channel)&&n.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())}function Kq(e){let{layout:t,vfs:n,log:r}=e;return t.onFrozenSessionOpen=e=>{(async()=>{try{let r=await n.panelReadVfs.readFile(HH(e),{encoding:`utf-8`}),i=JH(typeof r==`string`?r:new TextDecoder().decode(r)),a=i.title||e.title;await t.panels.chat.displayFrozenSession({contextId:`frozen:${e.filename}`,messages:i.messages,title:a}),t.setThreadHeaderName(`❄ ${a}`),t.setActiveTab(`chat`)}catch(t){r.warn(`Failed to open frozen session`,{filename:e.filename,error:t instanceof Error?t.message:String(t)})}})()},{attachScoopsVfs(){t.panels.scoops.setVfs(n.panelReadVfs)}}}async function qq(e){let{layout:t,log:n}=e,r=WG()===`opfs`,i=await GG.create({dbName:`slicc-fs`,...r?{backend:`memory`}:{}});r||t.panels.fileBrowser.setFs(i);let a={isLeader:!0,dispose:()=>{}};if(r){let{electOpfsLeader:e}=await o(async()=>{let{electOpfsLeader:e}=await import(`./opfs-leader-election-BJDtxHPr.js`);return{electOpfsLeader:e}},[]),{showOpfsReadOnlyBanner:t}=await o(async()=>{let{showOpfsReadOnlyBanner:e}=await import(`./opfs-readonly-banner-BwveszbN.js`);return{showOpfsReadOnlyBanner:e}},[]),r=await e({logger:n});a={isLeader:r.isLeader,dispose:r.dispose},globalThis.__slicc_opfs_leader={isLeader:r.isLeader,self:r.self,leader:r.leader},r.isLeader?n.info(`OPFS leader election: this tab is the writer`,{tabId:r.self.tabId}):(n.warn(`OPFS leader election: another tab is the writer; entering read-only mode`,{self:r.self.tabId,leader:r.leader?.tabId}),t({leaderTabId:r.leader?.tabId}))}yW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await SW(e,i,n);t.length!==0&&n.warn(`Some mounts could not be recovered in the page VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>n.warn(`Failed to restore persisted mounts in page VFS`,e));let s=new BroadcastChannel(`preview-vfs`),c={localFs:i,useRpcVfs:r,opfsLeader:a,previewVfsCh:s,panelReadVfs:i,writableFs:i};return CW({channel:s,getReader:()=>c.panelReadVfs,logger:n}),c}async function Jq(e){let{handle:t,client:n,layout:r,log:i}=e;if(!t.useRpcVfs)return;let{createRemoteVfsClient:a}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([37,38])),s=a({transport:n.getTransport()});if(r.panels.fileBrowser.setFs(s),t.panelReadVfs=s,t.opfsLeader.isLeader){let{createRemoteWritableVfsClient:e}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([39,38]));t.writableFs=e({transport:n.getTransport()}),i.info(`File browser + preview-vfs + writable freezer wired to worker VFS RPC (leader)`)}else i.info(`File browser + preview-vfs wired to worker VFS RPC (follower; freezer uses LFS shadow)`)}function Yq(e){let{layout:t,client:n,vfsHandle:r,selectScoop:i,getSelectedScoop:a,syncThinkingButtonForScoop:o}=e;t.panels.scoops.setOrchestrator(n),t.panels.memory.setOrchestrator(n),t.setScoopSwitcherOrchestrator?.(n),t.setScoopSwitcherTranscriptSource?.(e=>n.getScoopTranscript(e)),t.setScoopsRailTranscriptSource?.(e=>n.getScoopTranscript(e)),t.onScoopSelect=i,t.onClearChat=async()=>{await Mr().catch(()=>{}),await new rn().clearAll().catch(()=>{});let e=n.getScoops();for(let n of e){let e=n.isCone?`session-cone`:`session-${n.folder}`;await t.panels.chat.deleteSessionById(e)}n.clearAllMessages()},t.onModelChange=e=>{localStorage.setItem(`selected-model`,e),n.updateModel();let t=a();t&&o(t)},t.onThinkingLevelChange=e=>{let t=a();t&&n.setScoopThinkingLevel(t.jid,e)},t.onModelsRefreshed=()=>{let e=a();e&&o(e)},n.setLocalFS(r.localFs)}function Xq(e){let{client:t,layout:n,vfsHandle:r,log:i}=e,{useRpcVfs:a,opfsLeader:o}=r;n.onClearChat=async e=>{if(a&&!o.isLeader){i.info(`New session affordance skipped (OPFS follower — read-only tab)`);return}if(e?.freeze===`quick`)try{await QH({vfs:r.writableFs})}catch(e){i.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await ZH({vfs:r.writableFs})}catch(e){i.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else i.info(`New session: freezer skipped (long-press)`);await n.panels.chat.deleteSessionById(`session-cone`),await t.clearAllMessages()}}function Zq(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;n.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=Qa().contextWindow??t}catch{}n.setNewSessionGlow(e/t)};let a=t.createAgentHandle();return n.panels.chat.setAgent(a),n.panels.chat.setAttachmentWriter(zU(r.localFs)),n.panels.chat.setDeleteQueuedMessageCallback(e=>{i.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)}),a}async function ore(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;Yq(e),await Jq({handle:r,client:t,layout:n,log:i}),Xq(e);let a=Kq({layout:n,vfs:r,log:i});return{agentHandle:Zq(e),frozenSessions:a}}async function Qq(e){let{installSudoTestHook:t}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-CDWHE-XG.js`);return{installSudoTestHook:e}},__vite__mapDeps([40,14]));t()}async function $q(e){let{installPanelSudoResponder:t}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-CDWHE-XG.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([40,14]));t()}function eJ(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function tJ(e){let{runtimeMode:t,envBaseUrl:n,window:r,log:i}=e,a=t===`electron-overlay`;i.info(`starting standalone with kernel worker`);let{BrowserAPI:s}=await o(async()=>{let{BrowserAPI:e}=await import(`./cdp-rsA_ALer.js`);return{BrowserAPI:e}},__vite__mapDeps([41,1,14]));await Qq({log:i});let c=await Wn(),l=er(a?`electron-overlay`:`standalone`,c!==null)?jn:null;await Hn({locationHref:r.location.href,storage:r.localStorage,envBaseUrl:n,defaultWorkerBaseUrl:l,runtimeConfigFetcher:async()=>c});let u,d,f;if(t===`cherry`){let{setupCherryFollower:e}=await o(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-zUoPE3cg.js`);return{setupCherryFollower:e}},__vite__mapDeps([42,41,1,14])),t=await e();u=t.browser,d=t.joinUrl,f=t.transport}else{u=new s;try{await u.connect()}catch(e){i.warn(`Initial CDP connect failed; worker-forwarded commands will retry on demand`,e instanceof Error?e.message:String(e))}}let p=u.getTransport();return globalThis.__slicc_browser=u,{browser:u,realCdpTransport:p,cherryJoinUrl:d,cherryTransport:f,instanceId:eJ(),isElectronOverlay:a}}function nJ(e){let{layout:t,client:n,getFollower:r,interceptWelcomeLick:i,log:a}=e;t.panels.chat.onDipLick=(e,t)=>{if(i({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}}))return;let o=r();if(o){let n=o.currentSync;n?n.sendSprinkleLick(`inline`,{action:e,data:t}):a.warn(`Dip lick dropped: follower sync mid-reconnect`,{action:e});return}n.sendSprinkleLick(`inline`,{action:e,data:t})}}function rJ(e){return!e.includes(`\0`)}function iJ(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(!rJ(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(!rJ(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),!rJ(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),!rJ(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(rJ(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)}}var aJ=new Set([`setItem`,`removeItem`,`clear`]);function oJ(e){let{client:t,localStorage:n}=e,r=iJ({send:e=>t.sendRaw(e)});for(let e=0;e<n.length;e++){let r=n.key(e);if(r!==null&&!aJ.has(r)&&!r.includes(`\0`)){let e=n.getItem(r);e!==null&&t.sendRaw({type:`local-storage-set`,key:r,value:e})}}return{stopStorageSync:r}}async function sJ(e){let{client:t,hostReady:n,disarmMigrationSplash:r,frozenSessions:i,localStorage:a,log:o}=e;try{await n,o.info(`Worker boot handshake complete`)}catch(e){throw o.error(`Worker failed to signal ready`,e),r(),e}return t.requestState(),i.attachScoopsVfs(),oJ({client:t,localStorage:a})}var cJ=d(`welcome-sentinel`),lJ=`/shared/.welcomed`;function uJ(e){if(!e.isWriter){cJ.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(lJ,`1`).catch(e=>cJ.warn(`Failed to persist welcome completion marker`,e))}async function dJ(e){let{client:t,layout:n,localFs:r,writableFs:i,useRpcVfs:a,isOpfsLeader:s,firedWelcomeActions:c,log:l}=e,u=await o(()=>Promise.resolve().then(()=>zi),void 0),{getAccounts:d,getProviderConfig:f}=u,{createSprinkleDeviceCodePrompter:p,resolveDeviceCodeDecision:m}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),h=await pU({fs:r,log:l,providers:u,deviceCode:{createSprinkleDeviceCodePrompter:p},postSystemMessage:e=>n.panels.chat.addSystemMessage(e),postDipReference:e=>n.panels.chat.addSystemMessage(e),broadcastToDip:e=>YI(e),onFireFinalLick:e=>{uU(t),DU(String(e?.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-worker`,l)}});return{onboardingHandle:h,interceptWelcomeLick:kU({firedWelcomeActions:c,getAccounts:d,getProviderConfig:f,resolveDeviceCodeDecision:m,getOnboardingOrchestrator:()=>h.get(),applyPendingMount:()=>SU(r,l),fastForward:{fire:e=>{DU(String(e.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-worker`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return f(e)}catch{return null}})();YI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{uJ({writableFs:i,isWriter:!a||s})},contextLabel:`worker`,vfs:r,log:l})}}var fJ=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}}},pJ=d(`tray-sync`),mJ=`slicc-cherry`;function hJ(e){return typeof e==`object`&&!!e&&e.type===`cherry.host_event`}var gJ=32*1024;function _J(e,t,n,r){if(r||!n)return e.send({type:`cdp.response`,requestId:t,result:n,error:r});let i=JSON.stringify(n);if(i.length<=65536)return e.send({type:`cdp.response`,requestId:t,result:n});let a=Math.ceil(i.length/gJ),o=!0;for(let n=0;n<a;n++){let r=i.slice(n*gJ,(n+1)*gJ);if(!e.send({type:`cdp.response`,requestId:t,chunkData:r,chunkIndex:n,totalChunks:a})){o=!1,e.send({type:`cdp.response`,requestId:t,error:`Failed to send CDP response chunk ${n}/${a} (response was ${i.length} bytes)`});break}}return o}function vJ(e,t){if(t.chunkIndex===void 0||t.totalChunks===void 0)return{result:t.result,error:t.error};if(t.error)return e.delete(t.requestId),{error:t.error};let n=t.requestId,r=e.get(n);if(r||(r={chunks:Array(t.totalChunks),received:0,totalChunks:t.totalChunks},e.set(n,r)),r.chunks[t.chunkIndex]||(r.chunks[t.chunkIndex]=t.chunkData,r.received++),r.received>=r.totalChunks){e.delete(n);try{return{result:JSON.parse(r.chunks.join(``))}}catch(e){return{error:`Failed to reassemble CDP response: ${e instanceof Error?e.message:String(e)}`}}}return null}var yJ=32*1024;function bJ(e,t,n){let r=JSON.stringify({messages:t,scoopJid:n});if(r.length<=65536)return e.send({type:`snapshot`,messages:t,scoopJid:n});let i=Math.ceil(r.length/yJ),a=!0;for(let t=0;t<i;t++){let o=r.slice(t*yJ,(t+1)*yJ);if(!e.send({type:`snapshot_chunk`,chunkData:o,chunkIndex:t,totalChunks:i,scoopJid:n})){a=!1,pJ.error(`Failed to send snapshot chunk`,{chunkIndex:t,totalChunks:i,totalSize:r.length});break}}return pJ.debug(`Snapshot sent in chunks`,{totalChunks:i,totalSize:r.length}),a}function xJ(e,t){if(e||={chunks:Array(t.totalChunks),received:0,totalChunks:t.totalChunks},e.chunks[t.chunkIndex]||(e.chunks[t.chunkIndex]=t.chunkData,e.received++),e.received>=e.totalChunks)try{return{result:JSON.parse(e.chunks.join(``)),buffer:null}}catch(e){return pJ.error(`Failed to reassemble snapshot`,{error:e instanceof Error?e.message:String(e)}),{result:{messages:[],scoopJid:t.scoopJid},buffer:null}}return{result:null,buffer:e}}var SJ=class{channel;listeners=[];closed=!1;constructor(e){this.channel=e,this.channel.addEventListener(`message`,e=>{if(!this.closed)try{let t=JSON.parse(e.data);for(let e of this.listeners)e(t)}catch(e){pJ.warn(`Failed to parse tray sync message`,{error:e instanceof Error?e.message:String(e)})}})}send(e){if(this.closed)return!1;try{return this.channel.send(JSON.stringify(e)),!0}catch(t){return pJ.error(`Failed to send tray sync message`,{type:e.type,error:t instanceof Error?t.message:String(t)}),!1}}onMessage(e){return this.listeners.push(e),()=>{let t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}}close(){this.closed=!0,this.listeners.length=0,this.channel.close()}get isOpen(){return!this.closed&&this.channel.readyState===`open`}};function CJ(e){return new SJ(e)}function wJ(e){return new SJ(e)}var TJ=class{sender;timeoutMs;pending=new Map;eventListeners=new Map;chunkBuffers=new Map;_state=`connected`;requestCounter=0;constructor(e,t=3e4){this.sender=e,this.timeoutMs=t}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let[,{reject:e,timer:t}]of this.pending)clearTimeout(t),e(Error(`Transport disconnected`));this.pending.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=`remote-${++this.requestCounter}-${Date.now()}`,a=r??this.timeoutMs;return new Promise((r,o)=>{let s=setTimeout(()=>{this.pending.delete(i),o(Error(`Remote CDP request timed out after ${a}ms: ${e}`))},a);this.pending.set(i,{resolve:r,reject:o,timer:s}),this.sender.sendCDPRequest(i,e,t,n)})}on(e,t){let n=this.eventListeners.get(e);n||(n=new Set,this.eventListeners.set(e,n)),n.add(t)}off(e,t){this.eventListeners.get(e)?.delete(t)}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a=setTimeout(()=>{this.off(e,o),r(Error(`Remote CDP event timed out: ${e}`))},i),o=t=>{clearTimeout(a),this.off(e,o),n(t)};this.on(e,o)})}handleResponse(e,t,n,r,i,a){let o=this.pending.get(e);if(!o)return;let s=vJ(this.chunkBuffers,{type:`cdp.response`,requestId:e,result:t,error:n,chunkData:r,chunkIndex:i,totalChunks:a});s&&(this.pending.delete(e),clearTimeout(o.timer),s.error?o.reject(Error(s.error)):o.resolve(s.result??{}))}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)e(t)}},EJ=d(`data-channel-keepalive`),DJ=class{sendPing;onDead;intervalMs;maxMissed;timer=null;missedPongs=0;awaitingPong=!1;stopped=!1;constructor(e){this.sendPing=e.sendPing,this.onDead=e.onDead,this.intervalMs=e.intervalMs??1e4,this.maxMissed=e.maxMissed??3}start(){this.timer||this.stopped||(this.timer=setInterval(()=>this.tick(),this.intervalMs))}stop(){this.stopped=!0,this.timer&&=(clearInterval(this.timer),null)}receivePong(){this.awaitingPong=!1,this.missedPongs=0}receivePing(){this.missedPongs=0,this.awaitingPong=!1}get missed(){return this.missedPongs}tick(){if(!this.stopped){if(this.awaitingPong&&(this.missedPongs++,EJ.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){EJ.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}};d(`lick-manager`);var OJ=new Set([`navigate`]),kJ=64*1024;async function AJ(e,t){try{switch(t.op){case`readFile`:return await jJ(e,t.path,t.encoding);case`writeFile`:return[await MJ(e,t.path,t.content,t.encoding)];case`stat`:return[await NJ(e,t.path)];case`readDir`:return[await PJ(e,t.path)];case`mkdir`:return[await FJ(e,t.path,t.recursive)];case`rm`:return[await IJ(e,t.path,t.recursive)];case`exists`:return[await LJ(e,t.path)];case`walk`:return[await RJ(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[BJ(e)]}}async function jJ(e,t,n){return(n??`utf-8`)===`utf-8`?zJ(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):zJ(VJ(await e.readFile(t,{encoding:`binary`})),`base64`)}async function MJ(e,t,n,r){if(r===`base64`){let r=HJ(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function NJ(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function PJ(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function FJ(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function IJ(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function LJ(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function RJ(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function zJ(e,t){if(e.length<=kJ)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/kJ),r=[];for(let i=0;i<n;i++){let a=i*kJ,o=e.slice(a,a+kJ);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function BJ(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)}}function VJ(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function HJ(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}var UJ=class{runtimes=new Map;dirty=!1;setTargets(e,t){this.runtimes.set(e,t),this.dirty=!0}removeRuntime(e){this.runtimes.delete(e)&&(this.dirty=!0)}getEntries(){this.dirty=!1;let e=[];for(let[t,n]of this.runtimes)for(let r of n)e.push({targetId:`${t}:${r.targetId}`,localTargetId:r.targetId,runtimeId:t,title:r.title,url:r.url,isLocal:!1,kind:r.kind??`browser`,capabilities:r.capabilities});return e}hasChanged(){return this.dirty}getRuntimeIds(){return[...this.runtimes.keys()]}},WJ=d(`tray-leader-sync`);function GJ(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function KJ(e,t){switch(e){case`extension`:return`extension follower`;case`standalone`:return`standalone follower`;case`electron`:return`Electron follower`;case`ios`:return`iOS follower`;default:return t?`follower (${t})`:`follower`}}function qJ(e){return e.kind===`cherry`}function JJ(e,t){return e.filter(e=>qJ(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var YJ=class e{options;followers=new Map;registry=new UJ;runtimeToBootstrap=new Map;pendingCDPRoutes=new Map;cdpChunkBuffers=new Map;remoteTransports=new Map;pendingTabOpenRoutes=new Map;tabOpenResolvers=new Map;pendingFsRoutes=new Map;fsResolvers=new Map;constructor(e){this.options=e}addFollower(e,t,n){this.removeFollower(e);let r=CJ(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new DJ({sendPing:()=>r.send({type:`ping`}),onDead:()=>{WJ.warn(`Follower keepalive dead, removing follower`,{bootstrapId:e}),this.removeFollower(e),this.options.onFollowerDead?.(e)}});a.start(),this.followers.set(e,{bootstrapId:e,sync:r,unsubscribe:i,keepalive:a,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:Date.now(),floatType:GJ(n?.runtime)}),WJ.info(`Follower added to sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size),this.sendSnapshotToFollower(e),this.sendScoopsListToFollower(e),this.sendSprinklesListToFollower(e);let o=this.getConnectedEntries();o.length>0&&r.send({type:`targets.registry`,targets:o})}removeFollower(e){let t=this.followers.get(e);if(t){t.keepalive.stop(),t.unsubscribe(),t.sync.close(),this.followers.delete(e),this.followerBroadcastErrorLogAt.delete(e);for(let[t,n]of this.runtimeToBootstrap)if(n===e){this.cleanupRemoteTransports(t),this.registry.removeRuntime(t),this.runtimeToBootstrap.delete(t);break}this.registry.hasChanged()&&this.broadcastTargetRegistry(),WJ.info(`Follower removed from sync`,{bootstrapId:e,followerCount:this.followers.size}),this.options.onFollowerCountChanged?.(this.followers.size)}}followerBroadcastErrorLogAt=new Map;static BROADCAST_ERROR_THROTTLE_MS=6e4;broadcastToAllFollowers(t){let n=performance.now();for(let[r,i]of this.followers)try{i.sync.send(t),this.followerBroadcastErrorLogAt.delete(r)}catch(i){n-(this.followerBroadcastErrorLogAt.get(r)??-1/0)>e.BROADCAST_ERROR_THROTTLE_MS&&(this.followerBroadcastErrorLogAt.set(r,n),WJ.error(`Broadcast send to follower failed (channel may be stuck)`,{bootstrapId:r,messageType:t.type,error:i instanceof Error?i.message:String(i)}))}}broadcastEvent(e){if(this.followers.size===0)return;let t={type:`agent_event`,event:e,scoopJid:this.options.getScoopJid()};this.broadcastToAllFollowers(t)}broadcastUserMessage(e,t,n){if(this.followers.size===0)return;let r={type:`user_message_echo`,text:e,messageId:t,scoopJid:this.options.getScoopJid(),attachments:n?.length?Wt(n):n};this.broadcastToAllFollowers(r)}broadcastStatus(e){if(this.followers.size===0)return;let t={type:`status`,scoopStatus:e};this.broadcastToAllFollowers(t)}async sendSnapshotToFollower(e,t){let n=this.followers.get(e);if(!n)return;let r=t??n.selectedScoopJid??this.options.getScoopJid(),i;if(this.options.getMessagesForScoop&&r!==this.options.getScoopJid())try{i=await Promise.resolve(this.options.getMessagesForScoop(r))}catch(e){WJ.warn(`getMessagesForScoop failed, falling back to active scoop`,{targetJid:r,error:e instanceof Error?e.message:String(e)}),i=this.options.getMessages()}else i=this.options.getMessages();n.selectedScoopJid=r,bJ(n.sync,i,r),WJ.debug(`Snapshot sent to follower`,{bootstrapId:e,messageCount:i.length,scoopJid:r})}sendScoopsListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getScoops;if(n)try{let e=n(),r=this.options.getScoopJid();t.sync.send({type:`scoops.list`,scoops:e,activeScoopJid:r})}catch(t){WJ.warn(`Failed to send scoops.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}sendSprinklesListToFollower(e){let t=this.followers.get(e);if(!t)return;let n=this.options.getSprinkles;if(n)try{let e=n();t.sync.send({type:`sprinkles.list`,sprinkles:e})}catch(t){WJ.warn(`Failed to send sprinkles.list`,{bootstrapId:e,error:t instanceof Error?t.message:String(t)})}}broadcastScoopsList(){if(this.followers.size===0)return;let e=this.options.getScoops;if(!e)return;let t;try{t=e()}catch(e){WJ.warn(`Failed to compute scoops list`,{error:e instanceof Error?e.message:String(e)});return}let n=this.options.getScoopJid(),r={type:`scoops.list`,scoops:t,activeScoopJid:n};this.broadcastToAllFollowers(r)}broadcastSprinklesList(){if(this.followers.size===0)return;let e=this.options.getSprinkles;if(!e)return;let t;try{t=e()}catch(e){WJ.warn(`Failed to compute sprinkles list`,{error:e instanceof Error?e.message:String(e)});return}let n={type:`sprinkles.list`,sprinkles:t};this.broadcastToAllFollowers(n)}broadcastSprinkleUpdate(e,t){if(this.followers.size===0)return;let n={type:`sprinkle.update`,sprinkleName:e,data:t};this.broadcastToAllFollowers(n)}static SPRINKLE_CHUNK_SIZE=32*1024;static SPRINKLE_CHUNK_THRESHOLD=64*1024;async handleSprinkleFetch(t,n,r){let i=this.followers.get(t);if(!i)return;let a=this.options.readSprinkleContent;if(!a){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Leader has no sprinkle content reader`});return}let o=null;try{o=await Promise.resolve(a(r))}catch(e){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:e instanceof Error?e.message:String(e)});return}if(o==null){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:``,error:`Sprinkle not found: ${r}`});return}if(o.length<=e.SPRINKLE_CHUNK_THRESHOLD){i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:o});return}let s=e.SPRINKLE_CHUNK_SIZE,c=Math.ceil(o.length/s);for(let e=0;e<c;e++){let t=o.slice(e*s,(e+1)*s);i.sync.send({type:`sprinkle.content`,requestId:n,sprinkleName:r,content:t,chunkIndex:e,totalChunks:c})}}handleFollowerMessage(e,t){switch(t.type){case`user_message`:{WJ.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Wt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:WJ.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:WJ.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{WJ.info(`Follower selected scoop`,{bootstrapId:e,scoopJid:t.scoopJid});let n=this.followers.get(e);n&&(n.selectedScoopJid=t.scoopJid,this.sendSnapshotToFollower(e,t.scoopJid));break}case`sprinkles.refresh`:WJ.info(`Follower requested sprinkles refresh`,{bootstrapId:e}),this.sendSprinklesListToFollower(e);break;case`sprinkle.fetch`:this.handleSprinkleFetch(e,t.requestId,t.sprinkleName);break;case`sprinkle.lick`:{WJ.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=KJ(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){WJ.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!OJ.has(n.type)){WJ.warn(`Rejecting malformed or non-forwardable lick from follower`,{bootstrapId:e,type:n?.type});break}let r=this.followers.get(e),{targetScoop:i,...a}=n,o={...a,originFollowerId:e,originLabel:KJ(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){WJ.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:WJ.info(`Follower targets advertised`,{bootstrapId:e,runtimeId:t.runtimeId,targetCount:t.targets.length});for(let e of[...this.remoteTransports.keys()]){let n=e.substring(0,e.indexOf(`:`));n!==`leader`&&!this.runtimeToBootstrap.has(n)&&n!==t.runtimeId&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),WJ.debug(`Cleaned up orphaned remote transport on advertise`,{key:e}))}this.runtimeToBootstrap.set(t.runtimeId,e),this.registry.setTargets(t.runtimeId,t.targets),this.broadcastTargetRegistry();break;case`cdp.request`:{let{requestId:n,targetRuntimeId:r,localTargetId:i,method:a,params:o,sessionId:s}=t;r===`leader`?this.executeLocalCDP(n,i,a,o,s,e):this.forwardCDPRequest(n,r,i,a,o,s,e);break}case`cdp.response`:this.handleCDPResponse(t);break;case`cdp.event`:this.handleCDPEvent(e,t.method,t.params,t.sessionId);break;case`tab.open`:{let{requestId:n,targetRuntimeId:r,url:i}=t;r===`leader`?this.executeLocalTabOpen(n,i,e):this.forwardTabOpen(n,r,i,e);break}case`tab.opened`:this.handleTabOpenResponse(t.requestId,t.targetId);break;case`tab.open.error`:this.handleTabOpenError(t.requestId,t.error);break;case`fs.request`:{let{requestId:n,targetRuntimeId:r,request:i}=t;r===`leader`?this.executeLocalFs(n,i,e):this.forwardFsRequest(n,r,i,e);break}case`fs.response`:this.handleFsResponse(t.requestId,t.response);break;case`cherry.host_event`:this.routeCherryHostEvent(e,t);break;case`ping`:{let t=this.followers.get(e);t&&(t.keepalive.receivePing(),t.lastActivity=Date.now(),t.sync.send({type:`pong`}));break}case`pong`:{let t=this.followers.get(e);t&&(t.keepalive.receivePong(),t.lastActivity=Date.now());break}}}setLocalTargets(e){this.registry.setTargets(`leader`,e),this.registry.hasChanged()&&this.broadcastTargetRegistry()}broadcastTargetRegistry(){if(this.followers.size===0)return;let e={type:`targets.registry`,targets:this.getConnectedEntries()};this.broadcastToAllFollowers(e)}getTargets(){return this.getConnectedEntries()}getConnectedEntries(){return this.registry.getEntries().filter(e=>{if(e.runtimeId===`leader`)return!0;let t=this.runtimeToBootstrap.get(e.runtimeId);return t?this.followers.has(t):!1})}createRemoteTransport(e,t){let n=new TJ({sendCDPRequest:(n,r,i,a)=>{let o=this.runtimeToBootstrap.get(e),s=o?this.followers.get(o):void 0;if(!s){this.remoteTransports.get(`${e}:${t}`)?.handleResponse(n,void 0,`Target runtime "${e}" not connected`);return}this.pendingCDPRoutes.set(n,{requesterBootstrapId:`__leader__`,requestId:n}),s.sync.send({type:`cdp.request`,requestId:n,localTargetId:t,method:r,params:i,sessionId:a})}});return this.remoteTransports.set(`${e}:${t}`,n),n}removeRemoteTransport(e,t){let n=`${e}:${t}`,r=this.remoteTransports.get(n);r&&(r.disconnect(),this.remoteTransports.delete(n))}cleanupRemoteTransports(e){let t=`${e}:`;for(let e of[...this.remoteTransports.keys()])e.startsWith(t)&&(this.remoteTransports.get(e)?.disconnect(),this.remoteTransports.delete(e),WJ.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){WJ.warn(`onRemoteTransportsCleaned handler threw`,{runtimeId:e,error:t instanceof Error?t.message:String(t)})}}getConnectedFollowers(){return[...this.runtimeToBootstrap.entries()].map(([e,t])=>{let n=this.followers.get(t);return{runtimeId:e,runtime:n?.runtime,connectedAt:n?.connectedAt,lastActivity:n?.lastActivity,floatType:n?.floatType}})}canRuntimeServeTeleport(e,t){if(t.runtime===`slicc-cherry`)return!1;let n=this.registry.getEntries().filter(t=>t.runtimeId===e);return n.length===0?!0:JJ(n,{requireNetwork:!0}).length>0}getBestFollowerForTeleport(){let e=[];for(let[t,n]of this.runtimeToBootstrap){let r=this.followers.get(n);r&&this.canRuntimeServeTeleport(t,r)&&e.push({runtimeId:t,bootstrapId:n,floatType:r.floatType,lastActivity:r.lastActivity})}if(e.length===0)return null;let t=e.filter(e=>e.floatType===`standalone`),n=t.length>0?t:e;return n.sort((e,t)=>t.lastActivity-e.lastActivity),n[0]}get hasFollowers(){return this.followers.size>0}stop(){for(let e of[...this.followers.keys()])this.removeFollower(e)}async executeLocalCDP(e,t,n,r,i,a){let o=this.followers.get(a);if(!o)return;let s=this.options.browserTransport;if(!s){o.sync.send({type:`cdp.response`,requestId:e,error:`Leader has no browser transport`});return}try{let t=await s.send(n,r,i);_J(o.sync,e,t)}catch(t){o.sync.send({type:`cdp.response`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardCDPRequest(e,t,n,r,i,a,o){let s=this.runtimeToBootstrap.get(t),c=s?this.followers.get(s):void 0,l=this.followers.get(o);if(!c){l&&l.sync.send({type:`cdp.response`,requestId:e,error:`Target runtime "${t}" not connected`});return}this.pendingCDPRoutes.set(e,{requesterBootstrapId:o,requestId:e}),c.sync.send({type:`cdp.request`,requestId:e,localTargetId:n,method:r,params:i,sessionId:a})}handleCDPResponse(e){let{requestId:t}=e,n=this.pendingCDPRoutes.get(t);if(!n)return;let r=vJ(this.cdpChunkBuffers,e);if(!r)return;if(this.pendingCDPRoutes.delete(t),n.requesterBootstrapId===`__leader__`){for(let e of this.remoteTransports.values())e.handleResponse(t,r.result,r.error);return}let i=this.followers.get(n.requesterBootstrapId);i&&_J(i.sync,t,r.result,r.error)}handleCDPEvent(e,t,n,r){let i;for(let[t,n]of this.runtimeToBootstrap)if(n===e){i=t;break}if(!i)return;let a=`${i}:`;for(let[e,r]of this.remoteTransports)e.startsWith(a)&&r.handleEvent(t,n)}runtimeIdForBootstrap(e){for(let[t,n]of this.runtimeToBootstrap)if(n===e)return t}routeCherryHostEvent(e,t){if(!hJ(t))return;let n=this.options.onCherryHostEvent;if(!n){WJ.debug(`cherry.host_event received but no onCherryHostEvent wired`,{bootstrapId:e,name:t.name});return}let r=this.runtimeIdForBootstrap(e);try{n(r,t.name,t.detail)}catch(n){WJ.warn(`Failed to route cherry.host_event to cone`,{bootstrapId:e,name:t.name,error:n instanceof Error?n.message:String(n)})}}emitCherrySliccEvent(e,t,n){let r=e.indexOf(`:`),i=r>=0?e.slice(0,r):e,a=this.runtimeToBootstrap.get(i),o=a?this.followers.get(a):void 0;return o?o.sync.send({type:`cherry.slicc_event`,targetId:e,name:t,detail:n}):(WJ.warn(`emitCherrySliccEvent: owning follower not connected`,{targetId:e,name:t}),!1)}canRuntimeOpenTab(e){let t=this.registry.getEntries().filter(t=>t.runtimeId===e);return t.length===0?!0:t.some(e=>!qJ(e))}openRemoteTab(e,t){let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.reject(Error(`Target runtime "${e}" not connected`));if(!this.canRuntimeOpenTab(e))return Promise.reject(Error(`Target runtime "${e}" is a cherry host that cannot open tabs`));let i=`tab-open-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.tabOpenResolvers.set(i,{resolve:e,reject:n}),this.pendingTabOpenRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i}),r.sync.send({type:`tab.open`,requestId:i,url:t})})}async executeLocalTabOpen(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.browserTransport;if(!i){r.sync.send({type:`tab.open.error`,requestId:e,error:`Leader has no browser transport`});return}try{let n=(await i.send(`Target.createTarget`,{url:t,background:!0})).targetId;r.sync.send({type:`tab.opened`,requestId:e,targetId:`leader:${n}`})}catch(t){r.sync.send({type:`tab.open.error`,requestId:e,error:t instanceof Error?t.message:String(t)})}}forwardTabOpen(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" not connected`});return}if(!this.canRuntimeOpenTab(t)){o&&o.sync.send({type:`tab.open.error`,requestId:e,error:`Target runtime "${t}" is a cherry host that cannot open tabs`});return}this.pendingTabOpenRoutes.set(e,{requesterBootstrapId:r,requestId:e}),a.sync.send({type:`tab.open`,requestId:e,url:n})}handleTabOpenResponse(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.resolve(t));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.opened`,requestId:e,targetId:t})}handleTabOpenError(e,t){let n=this.pendingTabOpenRoutes.get(e);if(!n)return;if(this.pendingTabOpenRoutes.delete(e),n.requesterBootstrapId===`__leader__`){let n=this.tabOpenResolvers.get(e);n&&(this.tabOpenResolvers.delete(e),n.reject(Error(t)));return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`tab.open.error`,requestId:e,error:t})}async executeLocalFs(e,t,n){let r=this.followers.get(n);if(!r)return;let i=this.options.vfs;if(!i){r.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Leader has no VFS`}});return}let a=await AJ(i,t);for(let t of a)r.sync.send({type:`fs.response`,requestId:e,response:t})}forwardFsRequest(e,t,n,r){let i=this.runtimeToBootstrap.get(t),a=i?this.followers.get(i):void 0,o=this.followers.get(r);if(!a){o&&o.sync.send({type:`fs.response`,requestId:e,response:{ok:!1,error:`Target runtime "${t}" not connected`}});return}this.pendingFsRoutes.set(e,{requesterBootstrapId:r,requestId:e,chunks:[],totalChunks:1}),a.sync.send({type:`fs.request`,requestId:e,request:n})}handleFsResponse(e,t){let n=this.pendingFsRoutes.get(e);if(!n){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),n.resolve(n.responses))}return}if(n.requesterBootstrapId===`__leader__`){let n=this.fsResolvers.get(e);if(n){n.responses.push(t);let r=t.ok&&t.totalChunks||1;n.responses.length>=r&&(this.fsResolvers.delete(e),this.pendingFsRoutes.delete(e),n.resolve(n.responses))}return}let r=this.followers.get(n.requesterBootstrapId);r&&r.sync.send({type:`fs.response`,requestId:e,response:t}),n.chunks.push(t),n.totalChunks=t.ok&&t.totalChunks||1,n.chunks.length>=n.totalChunks&&this.pendingFsRoutes.delete(e)}sendFsRequest(e,t){if(e===`leader`){let e=this.options.vfs;return e?AJ(e,t):Promise.resolve([{ok:!1,error:`Leader has no VFS`}])}let n=this.runtimeToBootstrap.get(e),r=n?this.followers.get(n):void 0;if(!r)return Promise.resolve([{ok:!1,error:`Target runtime "${e}" not connected`}]);let i=`fs-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return new Promise((e,n)=>{this.fsResolvers.set(i,{resolve:e,reject:n,responses:[]}),this.pendingFsRoutes.set(i,{requesterBootstrapId:`__leader__`,requestId:i,chunks:[],totalChunks:1}),r.sync.send({type:`fs.request`,requestId:i,request:t})})}},XJ=d(`tray-follower`);function ZJ(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function QJ(e){let t=ZJ(e.joinUrl),n=await aY(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return XJ.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),$J(n)}function $J(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}:t}async function eY(e){return iY(await oY(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function tY(e){return iY(await oY(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function nY(e){return iY(await oY(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function rY(e){return iY(await oY(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function iY(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function aY(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!sY(n)){let n=t?t.slice(0,200):`(empty)`;throw XJ.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 oY(e,t){let n=ZJ(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(!cY(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function sY(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`&&lY(r.bootstrap):r.action===`fail`?(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function cY(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`&&lY(t.bootstrap)&&Array.isArray(t.events)}function lY(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 uY=d(`tray-webrtc`),dY=`tray-control`,fY=250,pY=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>gY(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??dY}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()}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=t.createDataChannel(this.dataChannelLabel);this.peers.set(e.bootstrapId,{state:n,peer:t,channel:r}),t.addEventListener(`icecandidate`,({candidate:t})=>{let n=vY(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`)&&(uY.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))}),r.addEventListener(`close`,()=>{let t=this.peers.get(e.bootstrapId);t&&(t.state.state===`connected`?(uY.warn(`Leader data channel closed post-connect`,{bootstrapId:e.bootstrapId}),this.options.onPeerDisconnected?.(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`?(uY.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:_Y(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.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);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){uY.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},mY=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??(()=>gY(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??fY}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();xr({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),uY.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0;for(;;){yY(this.stopped),n++;let t;try{t=await QJ({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 xr({...vr(),attachAttempts:n,lastError:t}),e}if(xr({...vr(),attachAttempts:n,lastAttachCode:t.code}),t.action===`wait`){let e=t.retryAfterMs??1e3;uY.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&uY.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 xr({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),uY.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 xr({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),uY.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw xr({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),uY.warn(`Follower tray bootstrap failed`,{error:r}),e}}}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,xr({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(yY(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 eY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,cursor:i,fetchImpl:this.fetchImpl});r=n.bootstrap,i=r.cursor;try{for(let e of n.events)if(e.type===`bootstrap.offer`){await this.activePeer.peer.setRemoteDescription(e.offer);let n=await this.activePeer.peer.createAnswer();await this.activePeer.peer.setLocalDescription(n),await tY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,answer:_Y(this.activePeer.peer.localDescription??n,`answer`),fetchImpl:this.fetchImpl})}else if(e.type===`bootstrap.ice_candidate`)await this.activePeer.peer.addIceCandidate(e.candidate);else if(e.type===`bootstrap.failed`)throw Error(e.failure.message)}catch(e){if(r.failure?.retryable&&r.retriesRemaining>0){r=(await rY({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)}}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`)&&(uY.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=e,e.addEventListener(`open`,()=>{r.open=!0}),e.addEventListener(`close`,()=>{r.open?(uY.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?(uY.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=vY(n);r&&nY({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{uY.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function hY(e,t){let n=t.baseDelayMs??1e3,r=t.backoffMultiplier??2,i=t.maxDelayMs??3e4,a=t.maxAttempts??10,o=t.sleep??e.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=!1,c=!1,l=null,u={cancel(){s=!0,c=!1,l?.stop(),l=null},get reconnecting(){return c}},d=()=>{let t=new mY({...e,sleep:o,onDisconnected:e=>{s||(uY.warn(`Follower disconnected, starting reconnect loop`,{reason:e}),f(e))}});return l=t,{manager:t,connectionPromise:t.start()}},f=async u=>{if(s||c)return;c=!0,l?.stop(),l=null;let f=0,p=n,m=u??`Unknown disconnect`;for(;!s&&f<a&&(f++,t.onReconnecting?.(f),xr({...vr(),state:`reconnecting`,error:null,reconnectAttempts:f}),uY.info(`Reconnect attempt`,{attempt:f,delay:p}),await o(p),!s);){let n=null;try{let r=d();n=r.manager;let i=await r.connectionPromise;if(s){n.stop();break}c=!1,xr({...vr(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),uY.info(`Reconnect successful`,{attempt:f,trayId:i.trayId}),t.onConnected(i);return}catch(e){m=e instanceof Error?e.message:String(e),uY.warn(`Reconnect attempt failed`,{attempt:f,error:m}),n?.stop(),l=null}p=Math.min(p*r,i)}s||(c=!1,xr({...vr(),state:`error`,error:`Reconnect failed after ${f} attempts: ${m}`,reconnectAttempts:f}),uY.warn(`Reconnect gave up`,{attempts:f,lastError:m}),t.onGaveUp?.(m))},{connectionPromise:p}=d();return p.then(e=>{s||t.onConnected(e)}).catch(e=>{s||uY.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)})}),u}function gY(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 _Y(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 vY(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 yY(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}var bY=d(`page-leader-tray`);function xY(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new YJ({getMessages:e.getMessages,getMessagesForScoop:e.getMessagesForScoop,getScoopJid:e.getScoopJid,getScoops:e.getScoops,getSprinkles:e.getSprinkles,readSprinkleContent:e.readSprinkleContent,onSprinkleLick:e.onSprinkleLick,onForwardedLick:e.onForwardedLick,onFollowerMessage:e.onFollowerMessage,onFollowerAbort:e.onFollowerAbort,onFollowerCountChanged:e.onFollowerCountChanged,onRemoteTransportsCleaned:e.onRemoteTransportsCleaned,onCherryHostEvent:e.onCherryHostEvent,browserAPI:e.browserAPI,browserTransport:e.browserTransport,vfs:e.vfs}),e.browserAPI.setTrayTargetProvider(a),i=new pY({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{bY.info(`Tray follower data channel opened`,{controllerId:e.controllerId,bootstrapId:e.bootstrapId,attempt:e.attempt,runtime:e.runtime}),a.addFollower(e.bootstrapId,t,{runtime:e.runtime,connectedAt:e.connectedAt??void 0})},onPeerDisconnected:(e,t)=>{bY.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new Xr({workerBaseUrl:e.workerBaseUrl,runtime:e.runtime??`slicc-standalone`,...e.kind?{kind:e.kind}:{},...e.onLeaderReady?{onLeaderReady:e.onLeaderReady}:{},fetchImpl:n,...e._storeOverride?{store:e._storeOverride}:{},...e._webSocketFactory?{webSocketFactory:e._webSocketFactory}:{},onControlMessage:t=>{if(t.type===`webhook.event`){e.sendWebhookEvent(t.webhookId,t.headers,t.body);return}i.handleControlMessage(t).catch(e=>{bY.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{bY.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{bY.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{bY.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new fJ(bY,{failureMessage:`Leader CDP target refresh failed (best-effort, throttled)`,recoveryMessage:`Leader CDP target refresh recovered (stable for debounce window)`}),l=async()=>{let t;try{t=await e.browserAPI.listPages()}catch(e){c.reportFailure(e);return}c.reportSuccess();try{let e=t.map(e=>({targetId:e.targetId,title:e.title,url:e.url}));a.setLocalTargets(e)}catch(e){bY.error(`Leader target broadcast failed (sync.setLocalTargets threw)`,{error:e instanceof Error?e.message:String(e)})}};s.push(setInterval(l,t)),l(),s.push(setInterval(()=>{try{a.broadcastScoopsList(),a.broadcastSprinklesList()}catch(e){bY.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??SY();if(n)try{let e=zn(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){bY.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{bY.error(`Leader tray start failed`,{error:e instanceof Error?e.message:String(e)})}),{stop(){o();for(let e of s)clearInterval(e);a.stop(),i.stop(),r.stop()},async reset(){return a.stop(),i.stop(),r.stop(),await r.clearSession(),u(await r.start()),Wr()},leader:r,peers:i,sync:a}}function SY(){return typeof window>`u`||!window.history||!window.location?null:{get href(){return window.location.href},replaceState(e,t,n){window.history.replaceState(e,t,n)}}}function CY(e){let t=new Map,n=(e,t)=>`${e}:${t}`,r=(r,i)=>{let a=n(r,i),o=t.get(a);if(!o){let n=e.getSync();if(!n)throw Error(`remote-cdp: leader tray not started`);o={runtimeId:r,localTargetId:i,transport:n.createRemoteTransport(r,i),forwarders:new Map},t.set(a,o)}return o},i=n=>{let r=t.get(n);if(!r)return;for(let[e,t]of r.forwarders)r.transport.off(e,t.listener);r.forwarders.clear();let i=e.getSync();i?.removeRemoteTransport?i.removeRemoteTransport(r.runtimeId,r.localTargetId):r.transport.disconnect(),t.delete(n)};return{async send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o}){return r(e,t).transport.send(n,i,a,o)},async subscribe({runtimeId:t,localTargetId:n,event:i}){let a=r(t,n),o=a.forwarders.get(i);if(o)return o.count+=1,{ok:!0};let s=r=>e.postEvent({runtimeId:t,localTargetId:n,method:i,params:r});return a.transport.on(i,s),a.forwarders.set(i,{listener:s,count:1}),{ok:!0}},async unsubscribe({runtimeId:e,localTargetId:r,event:i}){let a=t.get(n(e,r)),o=a?.forwarders.get(i);return!a||!o?{ok:!0}:(--o.count,o.count<=0&&(a.transport.off(i,o.listener),a.forwarders.delete(i)),{ok:!0})},async detach({runtimeId:e,localTargetId:t}){return i(n(e,t)),{ok:!0}},async openTab({runtimeId:t,url:n}){let r=e.getSync();if(!r?.openRemoteTab)throw Error(`remote-cdp: openRemoteTab not available`);return{targetId:await r.openRemoteTab(t,n)}},cleanupRuntime(e){let n=`${e}:`;for(let e of[...t.keys()])e.startsWith(n)&&i(e)},disposeAll(){for(let e of[...t.keys()])i(e)}}}function wY(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}n((e=>{(function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function n(e){return i(o(e),arguments)}function r(e,t){return n.apply(null,[e].concat(t||[]))}function i(e,r){var i=1,a=e.length,o,s=``,c,l,u,d,f,p,m,h;for(c=0;c<a;c++)if(typeof e[c]==`string`)s+=e[c];else if(typeof e[c]==`object`){if(u=e[c],u.keys)for(o=r[i],l=0;l<u.keys.length;l++){if(o==null)throw Error(n(`[sprintf] Cannot access property "%s" of undefined value "%s"`,u.keys[l],u.keys[l-1]));o=o[u.keys[l]]}else o=u.param_no?r[u.param_no]:r[i++];if(t.not_type.test(u.type)&&t.not_primitive.test(u.type)&&o instanceof Function&&(o=o()),t.numeric_arg.test(u.type)&&typeof o!=`number`&&isNaN(o))throw TypeError(n(`[sprintf] expecting number but found %T`,o));switch(t.number.test(u.type)&&(m=o>=0),u.type){case`b`:o=parseInt(o,10).toString(2);break;case`c`:o=String.fromCharCode(parseInt(o,10));break;case`d`:case`i`:o=parseInt(o,10);break;case`j`:o=JSON.stringify(o,null,u.width?parseInt(u.width):0);break;case`e`:o=u.precision?parseFloat(o).toExponential(u.precision):parseFloat(o).toExponential();break;case`f`:o=u.precision?parseFloat(o).toFixed(u.precision):parseFloat(o);break;case`g`:o=u.precision?String(Number(o.toPrecision(u.precision))):parseFloat(o);break;case`o`:o=(parseInt(o,10)>>>0).toString(8);break;case`s`:o=String(o),o=u.precision?o.substring(0,u.precision):o;break;case`t`:o=String(!!o),o=u.precision?o.substring(0,u.precision):o;break;case`T`:o=Object.prototype.toString.call(o).slice(8,-1).toLowerCase(),o=u.precision?o.substring(0,u.precision):o;break;case`u`:o=parseInt(o,10)>>>0;break;case`v`:o=o.valueOf(),o=u.precision?o.substring(0,u.precision):o;break;case`x`:o=(parseInt(o,10)>>>0).toString(16);break;case`X`:o=(parseInt(o,10)>>>0).toString(16).toUpperCase();break}t.json.test(u.type)?s+=o:(t.number.test(u.type)&&(!m||u.sign)?(h=m?`+`:`-`,o=o.toString().replace(t.sign,``)):h=``,f=u.pad_char?u.pad_char===`0`?`0`:u.pad_char.charAt(1):` `,p=u.width-(h+o).length,d=u.width&&p>0?f.repeat(p):``,s+=u.align?h+o+d:f===`0`?h+d+o:d+h+o)}return s}var a=Object.create(null);function o(e){if(a[e])return a[e];for(var n=e,r,i=[],o=0;n;){if((r=t.text.exec(n))!==null)i.push(r[0]);else if((r=t.modulo.exec(n))!==null)i.push(`%`);else if((r=t.placeholder.exec(n))!==null){if(r[2]){o|=1;var s=[],c=r[2],l=[];if((l=t.key.exec(c))!==null)for(s.push(l[1]);(c=c.substring(l[0].length))!==``;)if((l=t.key_access.exec(c))!==null)s.push(l[1]);else if((l=t.index_access.exec(c))!==null)s.push(l[1]);else throw SyntaxError(`[sprintf] failed to parse named argument key`);else throw SyntaxError(`[sprintf] failed to parse named argument key`);r[2]=s}else o|=2;if(o===3)throw Error(`[sprintf] mixing positional and named placeholders is not (yet) supported`);i.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}else throw SyntaxError(`[sprintf] unexpected placeholder`);n=n.substring(r[0].length)}return a[e]=i}e!==void 0&&(e.sprintf=n,e.vsprintf=r),typeof window<`u`&&(window.sprintf=n,window.vsprintf=r,typeof define==`function`&&define.amd&&define(function(){return{sprintf:n,vsprintf:r}}))})()}))();var TY=(e,t,n)=>{let r=e instanceof RegExp?EY(e,n):e,i=t instanceof RegExp?EY(t,n):t,a=r!==null&&i!=null&&DY(r,i,n);return a&&{start:a[0],end:a[1],pre:n.slice(0,a[0]),body:n.slice(a[0]+r.length,a[1]),post:n.slice(a[1]+i.length)}},EY=(e,t)=>{let n=t.match(e);return n?n[0]:null},DY=(e,t,n)=>{let r,i,a,o,s,c=n.indexOf(e),l=n.indexOf(t,c+1),u=c;if(c>=0&&l>0){if(e===t)return[c,l];for(r=[],a=n.length;u>=0&&!s;){if(u===c)r.push(u),c=n.indexOf(e,u+1);else if(r.length===1){let e=r.pop();e!==void 0&&(s=[e,l])}else i=r.pop(),i!==void 0&&i<a&&(a=i,o=l),l=n.indexOf(t,u+1);u=c<l&&c>=0?c:l}r.length&&o!==void 0&&(s=[a,o])}return s},OY=`\0SLASH`+Math.random()+`\0`,kY=`\0OPEN`+Math.random()+`\0`,AY=`\0CLOSE`+Math.random()+`\0`,jY=`\0COMMA`+Math.random()+`\0`,MY=`\0PERIOD`+Math.random()+`\0`,NY=new RegExp(OY,`g`),PY=new RegExp(kY,`g`),FY=new RegExp(AY,`g`),IY=new RegExp(jY,`g`),LY=new RegExp(MY,`g`),RY=/\\\\/g,zY=/\\{/g,BY=/\\}/g,VY=/\\,/g,HY=/\\\./g,UY=1e5;function WY(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function GY(e){return e.replace(RY,OY).replace(zY,kY).replace(BY,AY).replace(VY,jY).replace(HY,MY)}function KY(e){return e.replace(NY,`\\`).replace(PY,`{`).replace(FY,`}`).replace(IY,`,`).replace(LY,`.`)}function qY(e){if(!e)return[``];let t=[],n=TY(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=qY(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function JY(e,t={}){if(!e)return[];let{max:n=UY}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),$Y(GY(e),n,!0).map(KY)}function YY(e){return`{`+e+`}`}function XY(e){return/^-?0\d/.test(e)}function ZY(e,t){return e<=t}function QY(e,t){return e>=t}function $Y(e,t,n){let r=[],i=TY(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?$Y(i.post,t,!1):[``];if(/\$$/.test(i.pre))for(let e=0;e<o.length&&e<t;e++){let t=a+`{`+i.body+`}`+o[e];r.push(t)}else{let s=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),l=s||c,u=i.body.indexOf(`,`)>=0;if(!l&&!u)return i.post.match(/,(?!,).*\}/)?(e=i.pre+`{`+i.body+AY+i.post,$Y(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=qY(i.body),d.length===1&&d[0]!==void 0&&(d=$Y(d[0],t,!1).map(YY),d.length===1))return o.map(e=>i.pre+d[0]+e);let f;if(l&&d[0]!==void 0&&d[1]!==void 0){let e=WY(d[0]),t=WY(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(WY(d[2])):1,i=ZY;t<e&&(r*=-1,i=QY);let a=d.some(XY);f=[];for(let o=e;i(o,t);o+=r){let e;if(c)e=String.fromCharCode(o),e===`\\`&&(e=``);else if(e=String(o),a){let t=n-e.length;if(t>0){let n=Array(t+1).join(`0`);e=o<0?`-`+n+e.slice(1):n+e}}f.push(e)}}else{f=[];for(let e=0;e<d.length;e++)f.push.apply(f,$Y(d[e],t,!1))}for(let e=0;e<f.length;e++)for(let i=0;i<o.length&&r.length<t;i++){let t=a+f[e]+o[i];(!n||l||t)&&r.push(t)}}return r}var eX=1024*64,tX=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>eX)throw TypeError(`pattern is too long`)},nX={"[:alnum:]":[`\\p{L}\\p{Nl}\\p{Nd}`,!0],"[:alpha:]":[`\\p{L}\\p{Nl}`,!0],"[:ascii:]":[`\\x00-\\x7f`,!1],"[:blank:]":[`\\p{Zs}\\t`,!0],"[:cntrl:]":[`\\p{Cc}`,!0],"[:digit:]":[`\\p{Nd}`,!0],"[:graph:]":[`\\p{Z}\\p{C}`,!0,!0],"[:lower:]":[`\\p{Ll}`,!0],"[:print:]":[`\\p{C}`,!0],"[:punct:]":[`\\p{P}`,!0],"[:space:]":[`\\p{Z}\\t\\r\\n\\v\\f`,!0],"[:upper:]":[`\\p{Lu}`,!0],"[:word:]":[`\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}`,!0],"[:xdigit:]":[`A-Fa-f0-9`,!1]},rX=e=>e.replace(/[[\]\\-]/g,`\\$&`),iX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),aX=e=>e.join(``),oX=(e,t)=>{let n=t;if(e.charAt(n)!==`[`)throw Error(`not in a brace expression`);let r=[],i=[],a=n+1,o=!1,s=!1,c=!1,l=!1,u=n,d=``;WHILE:for(;a<e.length;){let t=e.charAt(a);if((t===`!`||t===`^`)&&a===n+1){l=!0,a++;continue}if(t===`]`&&o&&!c){u=a+1;break}if(o=!0,t===`\\`&&!c){c=!0,a++;continue}if(t===`[`&&!c){for(let[t,[o,c,l]]of Object.entries(nX))if(e.startsWith(t,a)){if(d)return[`$.`,!1,e.length-n,!0];a+=t.length,l?i.push(o):r.push(o),s||=c;continue WHILE}}if(c=!1,d){t>d?r.push(rX(d)+`-`+rX(t)):t===d&&r.push(rX(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push(rX(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push(rX(t)),a++}if(u<a)return[``,!1,0,!1];if(!r.length&&!i.length)return[`$.`,!1,e.length-n,!0];if(i.length===0&&r.length===1&&/^\\?.$/.test(r[0])&&!l)return[iX(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+aX(r)+`]`,p=`[`+(l?``:`^`)+aX(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},sX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!0}={})=>n?t?e.replace(/\[([^\/\\])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^\/\\])\]/g,`$1$2`).replace(/\\([^\/])/g,`$1`):t?e.replace(/\[([^\/\\{}])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^\/\\{}])\]/g,`$1$2`).replace(/\\([^\/{}])/g,`$1`),cX,lX=new Set([`!`,`?`,`+`,`*`,`@`]),uX=e=>lX.has(e),dX=e=>uX(e.type),fX=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),pX=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),mX=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),hX=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),gX=`(?!(?:^|/)\\.\\.?(?:$|/))`,_X=`(?!\\.)`,vX=new Set([`[`,`.`]),yX=new Set([`..`,`.`]),bX=new Set(`().*{}+?[]^$\\!`),xX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),SX=`[^/]`,CX=`[^/]*?`,wX=`[^/]+?`,TX=0,EX=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++TX;get depth(){return(this.#i?.depth??-1)+1}[Symbol.for(`nodejs.util.inspect.custom`)](){return{"@@type":`AST`,id:this.id,type:this.type,root:this.#e.id,parent:this.#i?.id,depth:this.depth,partsLength:this.#r.length,parts:this.#r}}constructor(e,t,n={}){this.type=e,e&&(this.#t=!0),this.#i=t,this.#e=this.#i?this.#i.#e:this,this.#c=this.#e===this?n:this.#e.#c,this.#o=this.#e===this?[]:this.#e.#o,e===`!`&&!this.#e.#s&&this.#o.push(this),this.#a=this.#i?this.#i.#r.length:0}get hasMagic(){if(this.#t!==void 0)return this.#t;for(let e of this.#r)if(typeof e!=`string`&&(e.type||e.hasMagic))return this.#t=!0;return this.#t}toString(){return this.#l===void 0?this.type?this.#l=this.type+`(`+this.#r.map(e=>String(e)).join(`|`)+`)`:this.#l=this.#r.map(e=>String(e)).join(``):this.#l}#d(){if(this!==this.#e)throw Error(`should only call on root`);if(this.#s)return this;this.toString(),this.#s=!0;let e;for(;e=this.#o.pop();){if(e.type!==`!`)continue;let t=e,n=t.#i;for(;n;){for(let r=t.#a+1;!n.type&&r<n.#r.length;r++)for(let t of e.#r){if(typeof t==`string`)throw Error(`string part in extglob AST??`);t.copyIn(n.#r[r])}t=n,n=t.#i}}return this}push(...e){for(let t of e)if(t!==``){if(typeof t!=`string`&&!(t instanceof cX&&t.#i===this))throw Error(`invalid part: `+t);this.#r.push(t)}}toJSON(){let e=this.type===null?this.#r.slice().map(e=>typeof e==`string`?e:e.toJSON()):[this.type,...this.#r.map(e=>e.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#e||this.#e.#s&&this.#i?.type===`!`)&&e.push({}),e}isStart(){if(this.#e===this)return!0;if(!this.#i?.isStart())return!1;if(this.#a===0)return!0;let e=this.#i;for(let t=0;t<this.#a;t++){let n=e.#r[t];if(!(n instanceof cX&&n.type===`!`))return!1}return!0}isEnd(){if(this.#e===this||this.#i?.type===`!`)return!0;if(!this.#i?.isEnd())return!1;if(!this.type)return this.#i?.isEnd();let e=this.#i?this.#i.#r.length:0;return this.#a===e-1}copyIn(e){typeof e==`string`?this.push(e):this.push(e.clone(this))}clone(e){let t=new cX(this.type,e);for(let e of this.#r)t.copyIn(e);return t}static#f(e,t,n,r,i){let a=r.maxExtglobRecursion??2,o=!1,s=!1,c=-1,l=!1;if(t.type===null){let u=n,d=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,d+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),d+=n;continue}else if(n===`[`){s=!0,c=u,l=!1,d+=n;continue}if(!r.noext&&uX(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new cX(n,t);u=cX.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new cX(null,t),f=[],p=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,p+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),p+=n;continue}else if(n===`[`){s=!0,c=u,l=!1,p+=n;continue}if(!r.noext&&uX(n)&&e.charAt(u)===`(`&&(i<=a||t&&t.#h(n))){let a=t&&t.#h(n)?0:1;d.push(p),p=``;let o=new cX(n,d);d.push(o),u=cX.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new cX(null,t);continue}if(n===`)`)return p===``&&t.#r.length===0&&(t.#u=!0),d.push(p),p=``,t.push(...f,d),u;p+=n}return t.type=null,t.#t=void 0,t.#r=[e.substring(n-1)],u}#p(e){return this.#m(e,pX)}#m(e,t=fX){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null)return!1;let n=e.#r[0];return!n||typeof n!=`object`||n.type===null?!1:this.#h(n.type,t)}#h(e,t=mX){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new cX(null,n,this.options);r.#r.push(``),n.push(r),this.#_(e,t)}#_(e,t){let n=e.#r[0];this.#r.splice(t,1,...n.#r);for(let e of n.#r)typeof e==`object`&&(e.#i=this);this.#l=void 0}#v(e){return!!hX.get(this.type)?.has(e)}#y(e){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null||this.#r.length!==1)return!1;let t=e.#r[0];return!t||typeof t!=`object`||t.type===null?!1:this.#v(t.type)}#b(e){let t=hX.get(this.type),n=e.#r[0],r=t?.get(n.type);if(!r)return!1;this.#r=n.#r;for(let e of this.#r)typeof e==`object`&&(e.#i=this);this.type=r,this.#l=void 0,this.#u=!1}static fromGlob(e,t={}){let n=new cX(null,void 0,t);return cX.#f(e,n,0,t,0),n}toMMPattern(){if(this!==this.#e)return this.#e.toMMPattern();let e=this.toString(),[t,n,r,i]=this.toRegExpSource();if(!(r||this.#t||this.#c.nocase&&!this.#c.nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return n;let a=(this.#c.nocase?`i`:``)+(i?`u`:``);return Object.assign(RegExp(`^${t}$`,a),{_src:t,_glob:e})}get options(){return this.#c}toRegExpSource(e){let t=e??!!this.#c.dot;if(this.#e===this&&(this.#x(),this.#d()),!dX(this)){let n=this.isStart()&&this.isEnd()&&!this.#r.some(e=>typeof e!=`string`),r=this.#r.map(t=>{let[r,i,a,o]=typeof t==`string`?cX.#C(t,this.#t,n):t.toRegExpSource(e);return this.#t=this.#t||a,this.#n=this.#n||o,r}).join(``),i=``;if(this.isStart()&&typeof this.#r[0]==`string`&&!(this.#r.length===1&&yX.has(this.#r[0]))){let n=vX,a=t&&n.has(r.charAt(0))||r.startsWith(`\\.`)&&n.has(r.charAt(2))||r.startsWith(`\\.\\.`)&&n.has(r.charAt(4)),o=!t&&!e&&n.has(r.charAt(0));i=a?gX:o?_X:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,sX(r),this.#t=!!this.#t,this.#n]}let n=this.type===`*`||this.type===`+`,r=this.type===`!`?`(?:(?!(?:`:`(?:`,i=this.#S(t);if(this.isStart()&&this.isEnd()&&!i&&this.type!==`!`){let e=this.toString(),t=this;return t.#r=[e],t.type=null,t.#t=void 0,[e,sX(this.toString()),!1,!1]}let a=!n||e||t?``:this.#S(!0);a===i&&(a=``),a&&(i=`(?:${i})(?:${a})*?`);let o=``;if(this.type===`!`&&this.#u)o=(this.isStart()&&!t?_X:``)+wX;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?_X:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,sX(i),this.#t=!!this.#t,this.#n]}#x(){if(dX(this)){let e=0,t=!1;do{t=!0;for(let e=0;e<this.#r.length;e++){let n=this.#r[e];typeof n==`object`&&(n.#x(),this.#m(n)?(t=!1,this.#_(n,e)):this.#p(n)?(t=!1,this.#g(n,e)):this.#y(n)&&(t=!1,this.#b(n)))}}while(!t&&++e<10)}else for(let e of this.#r)typeof e==`object`&&e.#x();this.#l=void 0}#S(e){return this.#r.map(t=>{if(typeof t==`string`)throw Error(`string type in extglob ast??`);let[n,r,i,a]=t.toRegExpSource(e);return this.#n=this.#n||a,n}).filter(e=>!(this.isStart()&&this.isEnd())||!!e).join(`|`)}static#C(e,t,n=!1){let r=!1,i=``,a=!1,o=!1;for(let s=0;s<e.length;s++){let c=e.charAt(s);if(r){r=!1,i+=(bX.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?wX:CX,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=oX(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=SX,t=!0;continue}i+=xX(c)}return[i,sX(e),!!t,a]}};cX=EX;var DX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),OX=(e,t,n={})=>(tX(t),!n.nocomment&&t.charAt(0)===`#`?!1:new aZ(t,n).match(e)),kX=/^\*+([^+@!?\*\[\(]*)$/,AX=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),jX=e=>t=>t.endsWith(e),MX=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),NX=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),PX=/^\*+\.\*+$/,FX=e=>!e.startsWith(`.`)&&e.includes(`.`),IX=e=>e!==`.`&&e!==`..`&&e.includes(`.`),LX=/^\.\*+$/,RX=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),zX=/^\*+$/,BX=e=>e.length!==0&&!e.startsWith(`.`),VX=e=>e.length!==0&&e!==`.`&&e!==`..`,HX=/^\?+([^+@!?\*\[\(]*)?$/,UX=([e,t=``])=>{let n=qX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},WX=([e,t=``])=>{let n=JX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},GX=([e,t=``])=>{let n=JX([e]);return t?e=>n(e)&&e.endsWith(t):n},KX=([e,t=``])=>{let n=qX([e]);return t?e=>n(e)&&e.endsWith(t):n},qX=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},JX=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},YX=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,XX={win32:{sep:`\\`},posix:{sep:`/`}};OX.sep=YX===`win32`?XX.win32.sep:XX.posix.sep;var ZX=Symbol(`globstar **`);OX.GLOBSTAR=ZX;var QX=`[^/]*?`,$X=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,eZ=`(?:(?!(?:\\/|^)\\.).)*?`;OX.filter=(e,t={})=>n=>OX(n,e,t);var tZ=(e,t={})=>Object.assign({},e,t);OX.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return OX;let t=OX;return Object.assign((n,r,i={})=>t(n,r,tZ(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,tZ(e,n))}static defaults(n){return t.defaults(tZ(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,tZ(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,tZ(e,r))}},unescape:(n,r={})=>t.unescape(n,tZ(e,r)),escape:(n,r={})=>t.escape(n,tZ(e,r)),filter:(n,r={})=>t.filter(n,tZ(e,r)),defaults:n=>t.defaults(tZ(e,n)),makeRe:(n,r={})=>t.makeRe(n,tZ(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,tZ(e,r)),match:(n,r,i={})=>t.match(n,r,tZ(e,i)),sep:t.sep,GLOBSTAR:ZX})};var nZ=(e,t={})=>(tX(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:JY(e,{max:t.braceExpandMax}));OX.braceExpand=nZ,OX.makeRe=(e,t={})=>new aZ(e,t).makeRe(),OX.match=(e,t,n={})=>{let r=new aZ(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var rZ=/[?*]|[+@!]\(.*?\)|\[|\]/,iZ=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),aZ=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){tX(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||YX,this.isWindows=this.platform===`win32`,this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,`/`)),this.preserveMultipleSlashes=!!t.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!t.nonegate,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=t.windowsNoMagicRoot===void 0?!!(this.isWindows&&this.nocase):t.windowsNoMagicRoot,this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let t of e)if(typeof t!=`string`)return!0;return!1}debug(...e){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)===`#`){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],t.debug&&(this.debug=(...e)=>console.error(...e)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(e=>this.slashSplit(e));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map((e,t,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){let t=e[0]===``&&e[1]===``&&(e[2]===`?`||!rZ.test(e[2]))&&!rZ.test(e[3]),n=/^[a-z]:/i.test(e[0]);if(t)return[...e.slice(0,4),...e.slice(4).map(e=>this.parse(e))];if(n)return[e[0],...e.slice(1).map(e=>this.parse(e))]}return e.map(e=>this.parse(e))});if(this.debug(this.pattern,r),this.set=r.filter(e=>e.indexOf(!1)===-1),this.isWindows)for(let e=0;e<this.set.length;e++){let t=this.set[e];t[0]===``&&t[1]===``&&this.globParts[e][2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3])&&(t[2]=`?`)}this.debug(this.pattern,this.set)}preprocess(e){if(this.options.noglobstar)for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)e[t][n]===`**`&&(e[t][n]=`*`);let{optimizationLevel:t=1}=this.options;return t>=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):e=t>=1?this.levelOneOptimize(e):this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(e=>{let t=-1;for(;(t=e.indexOf(`**`,t+1))!==-1;){let n=t;for(;e[n+1]===`**`;)n++;n!==t&&e.splice(t,n-t)}return e})}levelOneOptimize(e){return e.map(e=>(e=e.reduce((e,t)=>{let n=e[e.length-1];return t===`**`&&n===`**`?e:t===`..`&&n&&n!==`..`&&n!==`.`&&n!==`**`?(e.pop(),e):(e.push(t),e)},[]),e.length===0?[``]:e))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=!1;do{if(t=!1,!this.preserveMultipleSlashes){for(let n=1;n<e.length-1;n++){let r=e[n];n===1&&r===``&&e[0]===``||(r===`.`||r===``)&&(t=!0,e.splice(n,1),n--)}e[0]===`.`&&e.length===2&&(e[1]===`.`||e[1]===``)&&(t=!0,e.pop())}let n=0;for(;(n=e.indexOf(`..`,n+1))!==-1;){let r=e[n-1];r&&r!==`.`&&r!==`..`&&r!==`**`&&(t=!0,e.splice(n-1,2),n-=2)}}while(t);return e.length===0?[``]:e}firstPhasePreProcess(e){let t=!1;do{t=!1;for(let n of e){let r=-1;for(;(r=n.indexOf(`**`,r+1))!==-1;){let i=r;for(;n[i+1]===`**`;)i++;i>r&&n.splice(r+1,i-r);let a=n[r+1],o=n[r+2],s=n[r+3];if(a!==`..`||!o||o===`.`||o===`..`||!s||s===`.`||s===`..`)continue;t=!0,n.splice(r,1);let c=n.slice(0);c[r]=`**`,e.push(c),r--}if(!this.preserveMultipleSlashes){for(let e=1;e<n.length-1;e++){let r=n[e];e===1&&r===``&&n[0]===``||(r===`.`||r===``)&&(t=!0,n.splice(e,1),e--)}n[0]===`.`&&n.length===2&&(n[1]===`.`||n[1]===``)&&(t=!0,n.pop())}let i=0;for(;(i=n.indexOf(`..`,i+1))!==-1;){let e=n[i-1];if(e&&e!==`.`&&e!==`..`&&e!==`**`){t=!0;let e=i===1&&n[i+1]===`**`?[`.`]:[];n.splice(i-1,2,...e),n.length===0&&n.push(``),i-=2}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let n=t+1;n<e.length;n++){let r=this.partsMatch(e[t],e[n],!this.preserveMultipleSlashes);if(r){e[t]=[],e[n]=r;break}}return e.filter(e=>e.length)}partsMatch(e,t,n=!1){let r=0,i=0,a=[],o=``;for(;r<e.length&&i<t.length;)if(e[r]===t[i])a.push(o===`b`?t[i]:e[r]),r++,i++;else if(n&&e[r]===`**`&&t[i]===e[r+1])a.push(e[r]),r++;else if(n&&t[i]===`**`&&e[r]===t[i+1])a.push(t[i]),i++;else if(e[r]===`*`&&t[i]&&(this.options.dot||!t[i].startsWith(`.`))&&t[i]!==`**`){if(o===`b`)return!1;o=`a`,a.push(e[r]),r++,i++}else if(t[i]===`*`&&e[r]&&(this.options.dot||!e[r].startsWith(`.`))&&e[r]!==`**`){if(o===`a`)return!1;o=`b`,a.push(t[i]),r++,i++}else return!1;return e.length===t.length&&a}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=!1,n=0;for(let r=0;r<e.length&&e.charAt(r)===`!`;r++)t=!t,n++;n&&(this.pattern=e.slice(n)),this.negate=t}matchOne(e,t,n=!1){let r=0,i=0;if(this.isWindows){let n=typeof e[0]==`string`&&/^[a-z]:$/i.test(e[0]),a=!n&&e[0]===``&&e[1]===``&&e[2]===`?`&&/^[a-z]:$/i.test(e[3]),o=typeof t[0]==`string`&&/^[a-z]:$/i.test(t[0]),s=!o&&t[0]===``&&t[1]===``&&t[2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3]),c=a?3:n?0:void 0,l=s?3:o?0:void 0;if(typeof c==`number`&&typeof l==`number`){let[n,a]=[e[c],t[l]];n.toLowerCase()===a.toLowerCase()&&(t[l]=n,i=l,r=c)}}let{optimizationLevel:a=1}=this.options;return a>=2&&(e=this.levelTwoFileOptimize(e)),t.includes(ZX)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(ZX,i),o=t.lastIndexOf(ZX),[s,c,l]=n?[t.slice(i,a),t.slice(a+1),[]]:[t.slice(i,a),t.slice(a+1,o),t.slice(o+1)];if(s.length){let t=e.slice(r,r+s.length);if(!this.#n(t,s,n,0,0))return!1;r+=s.length,i+=s.length}let u=0;if(l.length){if(l.length+r>e.length)return!1;let t=e.length-l.length;if(this.#n(e,l,n,t,0))u=l.length;else{if(e[e.length-1]!==``||r+l.length===e.length||(t--,!this.#n(e,l,n,t,0)))return!1;u=l.length+1}}if(!c.length){let t=!!u;for(let n=r;n<e.length-u;n++){let r=String(e[n]);if(t=!0,r===`.`||r===`..`||!this.options.dot&&r.startsWith(`.`))return!1}return n||t}let d=[[[],0]],f=d[0],p=0,m=[0];for(let e of c)e===ZX?(m.push(p),f=[[],0],d.push(f)):(f[0].push(e),p++);let h=d.length-1,g=e.length-u;for(let e of d)e[1]=g-(m[h--]+e[0].length);return!!this.#t(e,d,r,0,n,0,!!u)}#t(e,t,n,r,i,a,o){let s=t[r];if(!s){for(let t=n;t<e.length;t++){o=!0;let n=e[t];if(n===`.`||n===`..`||!this.options.dot&&n.startsWith(`.`))return!1}return o}let[c,l]=s;for(;n<=l;){if(this.#n(e.slice(0,n+c.length),c,i,n,0)&&a<this.maxGlobstarRecursion){let s=this.#t(e,t,n+c.length,r+1,i,a+1,o);if(s!==!1)return s}let s=e[n];if(s===`.`||s===`..`||!this.options.dot&&s.startsWith(`.`))return!1;n++}return i||null}#n(e,t,n,r,i){let a,o,s,c;for(a=r,o=i,c=e.length,s=t.length;a<c&&o<s;a++,o++){this.debug(`matchOne loop`);let n=t[o],r=e[a];if(this.debug(t,n,r),n===!1||n===ZX)return!1;let i;if(typeof n==`string`?(i=r===n,this.debug(`string match`,n,r,i)):(i=n.test(r),this.debug(`pattern match`,n,r,i)),!i)return!1}if(a===c&&o===s)return!0;if(a===c)return n;if(o===s)return a===c-1&&e[a]===``;throw Error(`wtf?`)}braceExpand(){return nZ(this.pattern,this.options)}parse(e){tX(e);let t=this.options;if(e===`**`)return ZX;if(e===``)return``;let n,r=null;(n=e.match(zX))?r=t.dot?VX:BX:(n=e.match(kX))?r=(t.nocase?t.dot?NX:MX:t.dot?jX:AX)(n[1]):(n=e.match(HX))?r=(t.nocase?t.dot?WX:UX:t.dot?GX:KX)(n):(n=e.match(PX))?r=t.dot?IX:FX:(n=e.match(LX))&&(r=RX);let i=EX.fromGlob(e,this.options).toMMPattern();return r&&typeof i==`object`&&Reflect.defineProperty(i,"test",{value:r}),i}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let t=this.options,n=t.noglobstar?QX:t.dot?$X:eZ,r=new Set(t.nocase?[`i`]:[]),i=e.map(e=>{let t=e.map(e=>{if(e instanceof RegExp)for(let t of e.flags.split(``))r.add(t);return typeof e==`string`?iZ(e):e===ZX?ZX:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==ZX||a===ZX||(a===void 0?i!==void 0&&i!==ZX?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==ZX&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=ZX))});let i=t.filter(e=>e!==ZX);if(this.partial&&i.length>=1){let e=[];for(let t=1;t<=i.length;t++)e.push(i.slice(0,t).join(`/`));return`(?:`+e.join(`|`)+`)`}return i.join(`/`)}).join(`|`),[a,o]=e.length>1?[`(?:`,`)`]:[``,``];i=`^`+a+i+o+`$`,this.partial&&(i=`^(?:\\/|`+a+i.slice(1,-1)+o+`)$`),this.negate&&(i=`^(?!`+i+`).+$`);try{this.regexp=new RegExp(i,[...r].join(``))}catch{this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split(`/`):this.isWindows&&/^\/\/[^\/]+/.test(e)?[``,...e.split(/\/+/)]:e.split(/\/+/)}match(e,t=this.partial){if(this.debug(`match`,e,this.pattern),this.comment)return!1;if(this.empty)return e===``;if(e===`/`&&t)return!0;let n=this.options;this.isWindows&&(e=e.split(`\\`).join(`/`));let r=this.slashSplit(e);this.debug(this.pattern,`split`,r);let i=this.set;this.debug(this.pattern,`set`,i);let a=r[r.length-1];if(!a)for(let e=r.length-2;!a&&e>=0;e--)a=r[e];for(let e=0;e<i.length;e++){let o=i[e],s=r;if(n.matchBase&&o.length===1&&(s=[a]),this.matchOne(s,o,t))return n.flipNegate?!0:!this.negate}return n.flipNegate?!1:this.negate}static defaults(e){return OX.defaults(e).Minimatch}};OX.AST=EX,OX.Minimatch=aZ,OX.escape=DX,OX.unescape=sX;var oZ={};function sZ(){throw Error(`gunzipSync is not available in the browser`)}function cZ(){throw Error(`gzipSync is not available in the browser`)}var lZ=class{diff(e,t,n={}){let r;typeof n==`function`?(r=n,n={}):`callback`in n&&(r=n.callback);let i=this.castInput(e,n),a=this.castInput(t,n),o=this.removeEmpty(this.tokenize(i,n)),s=this.removeEmpty(this.tokenize(a,n));return this.diffWithOptionsObj(o,s,n,r)}diffWithOptionsObj(e,t,n,r){let i=e=>{if(e=this.postProcess(e,n),r){setTimeout(function(){r(e)},0);return}else return e},a=t.length,o=e.length,s=1,c=a+o;n.maxEditLength!=null&&(c=Math.min(c,n.maxEditLength));let l=n.timeout??1/0,u=Date.now()+l,d=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(d[0],t,e,0,n);if(d[0].oldPos+1>=o&&f+1>=a)return i(this.buildValues(d[0].lastComponent,t,e));let p=-1/0,m=1/0,h=()=>{for(let r=Math.max(p,-s);r<=Math.min(m,s);r+=2){let s,c=d[r-1],l=d[r+1];c&&(d[r-1]=void 0);let u=!1;if(l){let e=l.oldPos-r;u=l&&0<=e&&e<a}let h=c&&c.oldPos+1<o;if(!u&&!h){d[r]=void 0;continue}if(s=!h||u&&c.oldPos<l.oldPos?this.addToPath(l,!0,!1,0,n):this.addToPath(c,!1,!0,1,n),f=this.extractCommon(s,t,e,r,n),s.oldPos+1>=o&&f+1>=a)return i(this.buildValues(s.lastComponent,t,e))||!0;d[r]=s,s.oldPos+1>=o&&(m=Math.min(m,r-1)),f+1>=a&&(p=Math.max(p,r+1))}s++};if(r)(function e(){setTimeout(function(){if(s>c||Date.now()>u)return r(void 0);h()||e()},0)})();else for(;s<=c&&Date.now()<=u;){let e=h();if(e)return e}}addToPath(e,t,n,r,i){let a=e.lastComponent;return a&&!i.oneChangePerToken&&a.added===t&&a.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:n,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:a}}}extractCommon(e,t,n,r,i){let a=t.length,o=n.length,s=e.oldPos,c=s-r,l=0;for(;c+1<a&&s+1<o&&this.equals(n[s+1],t[c+1],i);)c++,s++,l++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return l&&!i.oneChangePerToken&&(e.lastComponent={count:l,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=s,c}equals(e,t,n){return n.comparator?n.comparator(e,t):e===t||!!n.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){let t=[];for(let n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join(``)}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,n){let r=[],i;for(;e;)r.push(e),i=e.previousComponent,delete e.previousComponent,e=i;r.reverse();let a=r.length,o=0,s=0,c=0;for(;o<a;o++){let e=r[o];if(e.removed)e.value=this.join(n.slice(c,c+e.count)),c+=e.count;else{if(!e.added&&this.useLongestToken){let r=t.slice(s,s+e.count);r=r.map(function(e,t){let r=n[c+t];return r.length>e.length?r:e}),e.value=this.join(r)}else e.value=this.join(t.slice(s,s+e.count));s+=e.count,e.added||(c+=e.count)}}return r}};new class extends lZ{};function uZ(e,t){let n;for(n=0;n<e.length&&n<t.length;n++)if(e[n]!=t[n])return e.slice(0,n);return e.slice(0,n)}function dZ(e,t){let n;if(!e||!t||e[e.length-1]!=t[t.length-1])return``;for(n=0;n<e.length&&n<t.length;n++)if(e[e.length-(n+1)]!=t[t.length-(n+1)])return e.slice(-n);return e.slice(-n)}function fZ(e,t,n){if(e.slice(0,t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't start with prefix ${JSON.stringify(t)}; this is a bug`);return n+e.slice(t.length)}function pZ(e,t,n){if(!t)return e+n;if(e.slice(-t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't end with suffix ${JSON.stringify(t)}; this is a bug`);return e.slice(0,-t.length)+n}function mZ(e,t){return fZ(e,t,``)}function hZ(e,t){return pZ(e,t,``)}function gZ(e,t){return t.slice(0,_Z(e,t))}function _Z(e,t){let n=0;e.length>t.length&&(n=e.length-t.length);let r=t.length;e.length<t.length&&(r=e.length);let i=Array(r),a=0;i[0]=0;for(let e=1;e<r;e++){for(t[e]==t[a]?i[e]=i[a]:i[e]=a;a>0&&t[e]!=t[a];)a=i[a];t[e]==t[a]&&a++}a=0;for(let r=n;r<e.length;r++){for(;a>0&&e[r]!=t[a];)a=i[a];e[r]==t[a]&&a++}return a}function vZ(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function yZ(e){let t=e.match(/^\s*/);return t?t[0]:``}var bZ=`a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}`,xZ=RegExp(`[${bZ}]+|\\s+|[^${bZ}]`,`ug`);new class extends lZ{equals(e,t,n){return n.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()}tokenize(e,t={}){let n;if(t.intlSegmenter){let r=t.intlSegmenter;if(r.resolvedOptions().granularity!=`word`)throw Error(`The segmenter passed must have a granularity of "word"`);n=[];for(let t of Array.from(r.segment(e))){let e=t.segment;n.length&&/\s/.test(n[n.length-1])&&/\s/.test(e)?n[n.length-1]+=e:n.push(e)}}else n=e.match(xZ)||[];let r=[],i=null;return n.forEach(e=>{/\s/.test(e)?i==null?r.push(e):r.push(r.pop()+e):i!=null&&/\s/.test(i)?r[r.length-1]==i?r.push(r.pop()+e):r.push(i+e):r.push(e),i=e}),r}join(e){return e.map((e,t)=>t==0?e:e.replace(/^\s+/,``)).join(``)}postProcess(e,t){if(!e||t.oneChangePerToken)return e;let n=null,r=null,i=null;return e.forEach(e=>{e.added?r=e:e.removed?i=e:((r||i)&&SZ(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&SZ(n,i,r,null),e}};function SZ(e,t,n,r){if(t&&n){let i=yZ(t.value),a=vZ(t.value),o=yZ(n.value),s=vZ(n.value);if(e){let r=uZ(i,o);e.value=pZ(e.value,o,r),t.value=mZ(t.value,r),n.value=mZ(n.value,r)}if(r){let e=dZ(a,s);r.value=fZ(r.value,s,e),t.value=hZ(t.value,e),n.value=hZ(n.value,e)}}else if(n){if(e){let e=yZ(n.value);n.value=n.value.substring(e.length)}if(r){let e=yZ(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=yZ(r.value),i=yZ(t.value),a=vZ(t.value),o=uZ(n,i);t.value=mZ(t.value,o);let s=dZ(mZ(n,o),a);t.value=hZ(t.value,s),r.value=fZ(r.value,n,s),e.value=pZ(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=yZ(r.value),n=gZ(vZ(t.value),e);t.value=hZ(t.value,n)}else if(e){let n=gZ(vZ(e.value),yZ(t.value));t.value=mZ(t.value,n)}}new class extends lZ{tokenize(e){let t=RegExp(`(\\r?\\n)|[${bZ}]+|[^\\S\\n\\r]+|[^${bZ}]`,`ug`);return e.match(t)||[]}},new class extends lZ{constructor(){super(...arguments),this.tokenize=CZ}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
619
619
|
`))&&(e=e.trim()),(!n.newlineIsToken||!t.includes(`
|
|
620
620
|
`))&&(t=t.trim())):n.ignoreNewlineAtEof&&!n.newlineIsToken&&(e.endsWith(`
|
|
621
621
|
`)&&(e=e.slice(0,-1)),t.endsWith(`
|
|
@@ -1178,10 +1178,10 @@ ${o.repeat(a)}}`}return String(e)}var y6,b6;F({},{base64Command:()=>x6,flagsForF
|
|
|
1178
1178
|
job specification, and reports its termination status.
|
|
1179
1179
|
Exit Status:
|
|
1180
1180
|
Returns the status of the last ID; fails if ID is invalid or an invalid
|
|
1181
|
-
option is given.`]]]).keys()].sort(),K5(),v9(),h5(),K5(),v9(),o7(),_7(),V7(),o7(),o7(),p7(),QQ(),QQ(),o7(),QQ(),K5(),QQ(),h5(),K5(),v9(),S7(),f9(),_7(),V7(),C0(),QQ(),$Q(),v9(),QQ(),f9(),QQ(),$Q(),QQ(),$Q(),QQ(),f9(),K5(),f9(),BQ(),j6(),QQ(),h5(),K5(),v9(),QQ(),f9(),o7(),_7(),V7(),K5(),QQ(),f9(),$Q(),qae(),PQ(),FQ(),F8(),K5(),PQ(),new TextDecoder(`utf-8`,{fatal:!0}),BQ();var y9=e({OFFSCREEN_SET_TRAY_RUNTIME_HOOK:()=>b9,leaveTray:()=>Yae,resolveAmbientLeaveTrayTransport:()=>x9}),Jae=d(`scoops.tray-leave`),b9=`__slicc_setTrayRuntime`;function x9(){let e=globalThis.localStorage,t=e&&typeof e.setItem==`function`&&typeof e.removeItem==`function`?e:null,n=globalThis[b9];if(typeof n==`function`)return{wire:{kind:`offscreen-hook`,setTrayRuntime:n},storage:t};let r=globalThis.chrome;if(r?.runtime?.id&&typeof r.runtime.sendMessage==`function`){let e=r.runtime.sendMessage;return{wire:{kind:`extension-panel`,sendMessage:t=>e(t)},storage:t}}return typeof window<`u`&&typeof window.dispatchEvent==`function`?{wire:{kind:`standalone-page`,dispatchEvent:e=>window.dispatchEvent(e)},storage:t}:{wire:null,storage:t}}async function Yae(e={},t=x9()){let n=e.workerBaseUrl??null;if(t.storage)try{t.storage.removeItem(An),n===null?t.storage.removeItem(kn):t.storage.setItem(kn,n)}catch(t){Jae.error(`tray-leave storage write failed`,{workerBaseUrl:n,requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}if(!t.wire)throw Error(`leaveTray: no transport available — inject a panelRpcClient (worker) or run in a context with chrome.runtime or window`);switch(t.wire.kind){case`offscreen-hook`:await t.wire.setTrayRuntime(null,n);return;case`extension-panel`:await t.wire.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:null,workerBaseUrl:n}});return;case`standalone-worker`:await t.wire.panelRpcClient.call(`tray-leave`,{workerBaseUrl:n,requestId:e.requestId});return;case`standalone-page`:t.wire.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:n,requestId:e.requestId}}));return}}var S9=null;function C9(e){S9=e}function Xae(){return S9??void 0}function Zae(e){let{layout:t,sprinkleManager:n,remoteCdpBridge:r}=e;return{wireLeaderHooks:e=>{C9(()=>e.reset()),n.setSendToSprinkleHook((t,n)=>e.sync.broadcastSprinkleUpdate(t,n)),t.panels.chat.setOnLocalUserMessage((t,n,r)=>e.sync.broadcastUserMessage(t,n,r))},clearLeaderHooks:()=>{C9(null),t.panels.chat.setOnLocalUserMessage(void 0),n.setSendToSprinkleHook(void 0),r.disposeAll()}}}function Qae(e){let{layout:t,client:n,browser:r,sprinkleManager:i,agentHandle:a,realCdpTransport:s,localFs:c,instanceId:l,getSelectedScoop:u,getLeader:d,setLeader:f,getFollower:p,setFollower:m,window:h,log:g}=e,_=typeof BroadcastChannel==`function`?new BroadcastChannel(Pi(l)):null,v=CY({getSync:()=>d()?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};_?.postMessage(t)}});n.setForwardLickHandler(e=>{let t=p()?.currentSync;t?t.forwardLick(e):g.warn(`forward-lick dropped: no active follower sync`)});let y=e=>({workerBaseUrl:e,getMessages:()=>t.panels.chat.getMessages(),getScoopJid:()=>u()?.jid??`cone`,getScoops:()=>n.getScoops().map(e=>({jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,trigger:e.trigger})),getSprinkles:()=>{let e=new Set(i.opened());return i.available().map(t=>({name:t.name,title:t.title,path:t.path,open:e.has(t.name),autoOpen:t.autoOpen}))},readSprinkleContent:async e=>{let t=i.available().find(t=>t.name===e);if(!t)return null;try{let e=await c.readFile(t.path,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder(`utf-8`).decode(e)}catch{return null}},onSprinkleLick:(e,t,r,i)=>n.sendSprinkleLick(e,t,r,i),onForwardedLick:e=>n.sendForwardedLick(e),onFollowerMessage:(e,n,r)=>{t.panels.chat.addUserMessage(e,r),a.sendMessage(e,n,r),d()?.sync.broadcastUserMessage(e,n,r)},onFollowerAbort:()=>a.stop(),onFollowerCountChanged:e=>{let t=d()?.peers.getPeers()??[];h.localStorage.setItem(`slicc.leaderTrayFollowers`,JSON.stringify(t.map(e=>({runtimeId:wY(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))))},onRemoteTransportsCleaned:e=>v.cleanupRuntime(e),sendWebhookEvent:(e,t,r)=>n.sendWebhookEvent(e,t,r),onCherryHostEvent:(e,t,r)=>n.sendCherryHostEvent(e,t,r),onAgentEvent:e=>a.onEvent(e),browserAPI:r,browserTransport:s,vfs:c}),{wireLeaderHooks:b,clearLeaderHooks:x}=Zae({layout:t,sprinkleManager:i,remoteCdpBridge:v});return{buildLeaderTrayOptions:y,wireLeaderHooks:b,clearLeaderHooks:x,performTrayLeaveLocally:async e=>{let{performTrayLeave:t}=await o(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-D89qWVP0.js`);return{performTrayLeave:e}},[]);return await t({workerBaseUrl:e.workerBaseUrl,requestId:e.requestId},{getLeader:d,setLeader:f,getFollower:p,setFollower:e=>m(e),startLeader:e=>xY(y(e)),clearLeaderHooks:x,wireLeaderHooks:b,storage:h.localStorage,log:g})},remoteCdpBridge:v,remoteCdpPushChannel:_}}async function $ae(e){let{instanceId:t,browser:n,remoteCdpBridge:r,remoteCdpPushChannel:i,getLeader:a,performTrayLeaveLocally:s,window:c}=e,{installPanelRpcHandler:l,createPanelRpcEventEmitter:u}=await o(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await Promise.resolve().then(()=>Mi);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:d}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-AngexUJX.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([43,1,28,4])),f=u({instanceId:t}),p=l({instanceId:t,handlers:d({resetTray:async()=>{let e=a();if(!e)throw Error(`no active tray session to reset`);return await e.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await s({workerBaseUrl:e,requestId:t}),emitEvent:(e,t)=>f.emit(e,t),emitCherrySliccEvent:(e,t,n)=>a()?.sync.emitCherrySliccEvent(e,t,n)??!1,listRemoteTargets:()=>n.listAllTargets(),remoteCdp:r})});c.addEventListener(`beforeunload`,()=>{p(),f.dispose(),r.disposeAll(),i?.close()},{once:!0})}async function eoe(e){let{layout:t,sprinkleManager:n,localFs:r,log:i}=e;await n.refresh(),t.onSprinkleClose=e=>n.close(e),t.onSprinkleActivate=e=>{n.activate(e)},t.getAvailableSprinkles=()=>[],t.onOpenSprinkle=(e,t)=>n.open(e,t),t.resolveSprinkleIcon=e=>FK(e,r),t.updateAddButtons(),await n.restoreOpenSprinkles().catch(e=>{i.warn(`Failed to restore open sprinkles`,e)})}function toe(e){let{client:t,localFs:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOnboardingOrchestrator:a,window:o,log:s}=e;Mq({vfs:n,storage:o.localStorage,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:s}),globalThis.__slicc_tool_ui_send=(e,n,r)=>{t.sendRaw({type:`tool-ui-action`,requestId:e,action:n,data:r})}}var w9=d(`tray-follower-sync`),noe=15e3,roe=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=[];tabOpenResolvers=new Map;fsResolvers=new Map;latestSprinkles=[];sprinkleContentCache=new Map;pendingSprinkleFetches=new Map;inflightSprinkleByName=new Map;sprinkleContentWaiters=new Map;cacheEpoch=0;fetchEpoch=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=wJ(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.keepalive=new DJ({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{w9.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{w9.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{w9.warn(`Data channel error`),this.handleDisconnect(`Data channel error`)})}sendMessage(e,t,n){let r=t??`follower-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.sentMessageIds.add(r);let i=n?.length?Wt(n):n;this.sync.send({type:`user_message`,text:e,messageId:r,attachments:i}),w9.info(`Sent user message to leader`,{messageId:r})}onEvent(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}stop(){this.sync.send({type:`abort`}),w9.info(`Sent abort to leader`)}requestSnapshot(){this.sync.send({type:`request_snapshot`})}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`),w9.info(`Follower sync closed`))}rejectPendingRequests(e){this.rejectPendingSprinkleFetches(e);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()}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??noe;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})||w9.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||w9.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){this.disconnected||(this.disconnected=!0,xr({...vr(),state:`error`,error:e}),this.emitEvent({type:`error`,error:`Connection to leader lost: ${e}`}),this.keepalive.stop(),this.cleanupCDPEventForwarding(),this.unsubscribe(),this.sync.close(),this.rejectPendingRequests(`Follower sync disconnected: ${e}`),this.options.onDisconnect?.(e))}handleLeaderMessage(e){switch(e.type){case`snapshot`:w9.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=xJ(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(w9.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`:if(this.sentMessageIds.has(e.messageId)){this.sentMessageIds.delete(e.messageId),w9.debug(`Skipping own message echo`,{messageId:e.messageId});break}w9.info(`User message echo received`,{messageId:e.messageId,scoopJid:e.scoopJid}),this.options.onUserMessage?.(e.text,e.messageId,e.scoopJid,e.attachments);break;case`status`:this.options.onStatus?.(e.scoopStatus);break;case`error`:w9.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:w9.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`:for(let t of this.remoteTransports.values())t.handleEvent(e.method,e.params);break;case`tab.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`sprinkles.list`:w9.info(`Sprinkles list received from leader`,{sprinkleCount:e.sprinkles.length}),this.sprinkleContentCache.clear(),this.cacheEpoch++,this.latestSprinkles=e.sprinkles,this.options.onSprinklesList?.(e.sprinkles);break;case`sprinkle.content`:this.handleSprinkleContent(e);break;case`sprinkle.update`:w9.debug(`Sprinkle update received`,{sprinkleName:e.sprinkleName}),this.options.onSprinkleUpdate?.(e.sprinkleName,e.data);break;case`cherry.slicc_event`:this.options.onCherrySliccEvent?.(e.name,e.detail);break;case`ping`:this.keepalive.receivePing(),this.sync.send({type:`pong`});break;case`pong`:this.keepalive.receivePong(),Sr(Date.now());break;default:w9.debug(`Unknown leader message type`,{type:e.type});break}}handleSprinkleContent(e){let{requestId:t,sprinkleName:n,content:r,chunkIndex:i,totalChunks:a,error:o}=e;if(o){w9.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)){w9.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){w9.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)?w9.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){w9.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()}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(t){w9.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new TJ({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})})}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),w9.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),w9.debug(`Removed remote CDP session on detach`,{sessionId:i})),_J(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`]){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=vJ(this.cdpChunkBuffers,e);if(t)for(let n of this.remoteTransports.values())n.handleResponse(e.requestId,t.result,t.error)}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 AJ(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})})}},ioe=e({SprinkleFollowerController:()=>E9}),T9=d(`sprinkle-follower`),E9=class{sync;addSprinkle;removeSprinkle;zone;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}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)}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}T9.debug(`Dropping sprinkle.update for unknown sprinkle`,{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()}}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),T9.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: hidden;`,r.dataset.sprinkle=e;let i=new DI(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone);try{await i.render(n,e)}catch(t){T9.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{i.dispose()}catch(t){T9.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){T9.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}this.open.set(e,{renderer:i,container:r}),this.opening.delete(e);let a=this.pendingUpdates.get(e);a!==void 0&&(this.pendingUpdates.delete(e),i.pushUpdate(a),this.fanOutToListeners(e,a))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){T9.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){T9.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){T9.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}}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){T9.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 T9.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{let t=/^https?:|^chrome-extension:/.test(e)?e:HP(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
|
|
1181
|
+
option is given.`]]]).keys()].sort(),K5(),v9(),h5(),K5(),v9(),o7(),_7(),V7(),o7(),o7(),p7(),QQ(),QQ(),o7(),QQ(),K5(),QQ(),h5(),K5(),v9(),S7(),f9(),_7(),V7(),C0(),QQ(),$Q(),v9(),QQ(),f9(),QQ(),$Q(),QQ(),$Q(),QQ(),f9(),K5(),f9(),BQ(),j6(),QQ(),h5(),K5(),v9(),QQ(),f9(),o7(),_7(),V7(),K5(),QQ(),f9(),$Q(),qae(),PQ(),FQ(),F8(),K5(),PQ(),new TextDecoder(`utf-8`,{fatal:!0}),BQ();var y9=e({OFFSCREEN_SET_TRAY_RUNTIME_HOOK:()=>b9,leaveTray:()=>Yae,resolveAmbientLeaveTrayTransport:()=>x9}),Jae=d(`scoops.tray-leave`),b9=`__slicc_setTrayRuntime`;function x9(){let e=globalThis.localStorage,t=e&&typeof e.setItem==`function`&&typeof e.removeItem==`function`?e:null,n=globalThis[b9];if(typeof n==`function`)return{wire:{kind:`offscreen-hook`,setTrayRuntime:n},storage:t};let r=globalThis.chrome;if(r?.runtime?.id&&typeof r.runtime.sendMessage==`function`){let e=r.runtime.sendMessage;return{wire:{kind:`extension-panel`,sendMessage:t=>e(t)},storage:t}}return typeof window<`u`&&typeof window.dispatchEvent==`function`?{wire:{kind:`standalone-page`,dispatchEvent:e=>window.dispatchEvent(e)},storage:t}:{wire:null,storage:t}}async function Yae(e={},t=x9()){let n=e.workerBaseUrl??null;if(t.storage)try{t.storage.removeItem(An),n===null?t.storage.removeItem(kn):t.storage.setItem(kn,n)}catch(t){Jae.error(`tray-leave storage write failed`,{workerBaseUrl:n,requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}if(!t.wire)throw Error(`leaveTray: no transport available — inject a panelRpcClient (worker) or run in a context with chrome.runtime or window`);switch(t.wire.kind){case`offscreen-hook`:await t.wire.setTrayRuntime(null,n);return;case`extension-panel`:await t.wire.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:null,workerBaseUrl:n}});return;case`standalone-worker`:await t.wire.panelRpcClient.call(`tray-leave`,{workerBaseUrl:n,requestId:e.requestId});return;case`standalone-page`:t.wire.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:n,requestId:e.requestId}}));return}}var S9=null;function C9(e){S9=e}function Xae(){return S9??void 0}function Zae(e){let{layout:t,sprinkleManager:n,remoteCdpBridge:r}=e;return{wireLeaderHooks:e=>{C9(()=>e.reset()),n.setSendToSprinkleHook((t,n)=>e.sync.broadcastSprinkleUpdate(t,n)),t.panels.chat.setOnLocalUserMessage((t,n,r)=>e.sync.broadcastUserMessage(t,n,r))},clearLeaderHooks:()=>{C9(null),t.panels.chat.setOnLocalUserMessage(void 0),n.setSendToSprinkleHook(void 0),r.disposeAll()}}}function Qae(e){let{layout:t,client:n,browser:r,sprinkleManager:i,agentHandle:a,realCdpTransport:s,localFs:c,instanceId:l,getSelectedScoop:u,getLeader:d,setLeader:f,getFollower:p,setFollower:m,window:h,log:g}=e,_=typeof BroadcastChannel==`function`?new BroadcastChannel(Pi(l)):null,v=CY({getSync:()=>d()?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};_?.postMessage(t)}});n.setForwardLickHandler(e=>{let t=p()?.currentSync;t?t.forwardLick(e):g.warn(`forward-lick dropped: no active follower sync`)});let y=e=>({workerBaseUrl:e,getMessages:()=>t.panels.chat.getMessages(),getScoopJid:()=>u()?.jid??`cone`,getScoops:()=>n.getScoops().map(e=>({jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,trigger:e.trigger})),getSprinkles:()=>{let e=new Set(i.opened());return i.available().map(t=>({name:t.name,title:t.title,path:t.path,open:e.has(t.name),autoOpen:t.autoOpen}))},readSprinkleContent:async e=>{let t=i.available().find(t=>t.name===e);if(!t)return null;try{let e=await c.readFile(t.path,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder(`utf-8`).decode(e)}catch{return null}},onSprinkleLick:(e,t,r,i)=>n.sendSprinkleLick(e,t,r,i),onForwardedLick:e=>n.sendForwardedLick(e),onFollowerMessage:(e,n,r)=>{t.panels.chat.addUserMessage(e,r),a.sendMessage(e,n,r),d()?.sync.broadcastUserMessage(e,n,r)},onFollowerAbort:()=>a.stop(),onFollowerCountChanged:e=>{let t=d()?.peers.getPeers()??[];h.localStorage.setItem(`slicc.leaderTrayFollowers`,JSON.stringify(t.map(e=>({runtimeId:wY(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))))},onRemoteTransportsCleaned:e=>v.cleanupRuntime(e),sendWebhookEvent:(e,t,r)=>n.sendWebhookEvent(e,t,r),onCherryHostEvent:(e,t,r)=>n.sendCherryHostEvent(e,t,r),onAgentEvent:e=>a.onEvent(e),browserAPI:r,browserTransport:s,vfs:c}),{wireLeaderHooks:b,clearLeaderHooks:x}=Zae({layout:t,sprinkleManager:i,remoteCdpBridge:v});return{buildLeaderTrayOptions:y,wireLeaderHooks:b,clearLeaderHooks:x,performTrayLeaveLocally:async e=>{let{performTrayLeave:t}=await o(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-CedcHQX5.js`);return{performTrayLeave:e}},[]);return await t({workerBaseUrl:e.workerBaseUrl,requestId:e.requestId},{getLeader:d,setLeader:f,getFollower:p,setFollower:e=>m(e),startLeader:e=>xY(y(e)),clearLeaderHooks:x,wireLeaderHooks:b,storage:h.localStorage,log:g})},remoteCdpBridge:v,remoteCdpPushChannel:_}}async function $ae(e){let{instanceId:t,browser:n,remoteCdpBridge:r,remoteCdpPushChannel:i,getLeader:a,performTrayLeaveLocally:s,window:c}=e,{installPanelRpcHandler:l,createPanelRpcEventEmitter:u}=await o(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await Promise.resolve().then(()=>Mi);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:d}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-CnJYQP27.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([43,1,28,4])),f=u({instanceId:t}),p=l({instanceId:t,handlers:d({resetTray:async()=>{let e=a();if(!e)throw Error(`no active tray session to reset`);return await e.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await s({workerBaseUrl:e,requestId:t}),emitEvent:(e,t)=>f.emit(e,t),emitCherrySliccEvent:(e,t,n)=>a()?.sync.emitCherrySliccEvent(e,t,n)??!1,listRemoteTargets:()=>n.listAllTargets(),remoteCdp:r})});c.addEventListener(`beforeunload`,()=>{p(),f.dispose(),r.disposeAll(),i?.close()},{once:!0})}async function eoe(e){let{layout:t,sprinkleManager:n,localFs:r,log:i}=e;await n.refresh(),t.onSprinkleClose=e=>n.close(e),t.onSprinkleActivate=e=>{n.activate(e)},t.getAvailableSprinkles=()=>[],t.onOpenSprinkle=(e,t)=>n.open(e,t),t.resolveSprinkleIcon=e=>FK(e,r),t.updateAddButtons(),await n.restoreOpenSprinkles().catch(e=>{i.warn(`Failed to restore open sprinkles`,e)})}function toe(e){let{client:t,localFs:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOnboardingOrchestrator:a,window:o,log:s}=e;Mq({vfs:n,storage:o.localStorage,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:s}),globalThis.__slicc_tool_ui_send=(e,n,r)=>{t.sendRaw({type:`tool-ui-action`,requestId:e,action:n,data:r})}}var w9=d(`tray-follower-sync`),noe=15e3,roe=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=[];tabOpenResolvers=new Map;fsResolvers=new Map;latestSprinkles=[];sprinkleContentCache=new Map;pendingSprinkleFetches=new Map;inflightSprinkleByName=new Map;sprinkleContentWaiters=new Map;cacheEpoch=0;fetchEpoch=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=wJ(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.keepalive=new DJ({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{w9.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{w9.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{w9.warn(`Data channel error`),this.handleDisconnect(`Data channel error`)})}sendMessage(e,t,n){let r=t??`follower-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;this.sentMessageIds.add(r);let i=n?.length?Wt(n):n;this.sync.send({type:`user_message`,text:e,messageId:r,attachments:i}),w9.info(`Sent user message to leader`,{messageId:r})}onEvent(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}stop(){this.sync.send({type:`abort`}),w9.info(`Sent abort to leader`)}requestSnapshot(){this.sync.send({type:`request_snapshot`})}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`),w9.info(`Follower sync closed`))}rejectPendingRequests(e){this.rejectPendingSprinkleFetches(e);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()}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??noe;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})||w9.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||w9.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){this.disconnected||(this.disconnected=!0,xr({...vr(),state:`error`,error:e}),this.emitEvent({type:`error`,error:`Connection to leader lost: ${e}`}),this.keepalive.stop(),this.cleanupCDPEventForwarding(),this.unsubscribe(),this.sync.close(),this.rejectPendingRequests(`Follower sync disconnected: ${e}`),this.options.onDisconnect?.(e))}handleLeaderMessage(e){switch(e.type){case`snapshot`:w9.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=xJ(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(w9.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`:if(this.sentMessageIds.has(e.messageId)){this.sentMessageIds.delete(e.messageId),w9.debug(`Skipping own message echo`,{messageId:e.messageId});break}w9.info(`User message echo received`,{messageId:e.messageId,scoopJid:e.scoopJid}),this.options.onUserMessage?.(e.text,e.messageId,e.scoopJid,e.attachments);break;case`status`:this.options.onStatus?.(e.scoopStatus);break;case`error`:w9.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:w9.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`:for(let t of this.remoteTransports.values())t.handleEvent(e.method,e.params);break;case`tab.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`sprinkles.list`:w9.info(`Sprinkles list received from leader`,{sprinkleCount:e.sprinkles.length}),this.sprinkleContentCache.clear(),this.cacheEpoch++,this.latestSprinkles=e.sprinkles,this.options.onSprinklesList?.(e.sprinkles);break;case`sprinkle.content`:this.handleSprinkleContent(e);break;case`sprinkle.update`:w9.debug(`Sprinkle update received`,{sprinkleName:e.sprinkleName}),this.options.onSprinkleUpdate?.(e.sprinkleName,e.data);break;case`cherry.slicc_event`:this.options.onCherrySliccEvent?.(e.name,e.detail);break;case`ping`:this.keepalive.receivePing(),this.sync.send({type:`pong`});break;case`pong`:this.keepalive.receivePong(),Sr(Date.now());break;default:w9.debug(`Unknown leader message type`,{type:e.type});break}}handleSprinkleContent(e){let{requestId:t,sprinkleName:n,content:r,chunkIndex:i,totalChunks:a,error:o}=e;if(o){w9.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)){w9.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){w9.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)?w9.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){w9.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()}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(t){w9.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new TJ({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})})}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),w9.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),w9.debug(`Removed remote CDP session on detach`,{sessionId:i})),_J(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`]){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=vJ(this.cdpChunkBuffers,e);if(t)for(let n of this.remoteTransports.values())n.handleResponse(e.requestId,t.result,t.error)}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 AJ(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})})}},ioe=e({SprinkleFollowerController:()=>E9}),T9=d(`sprinkle-follower`),E9=class{sync;addSprinkle;removeSprinkle;zone;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}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)}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}T9.debug(`Dropping sprinkle.update for unknown sprinkle`,{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()}}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),T9.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: hidden;`,r.dataset.sprinkle=e;let i=new DI(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone);try{await i.render(n,e)}catch(t){T9.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{i.dispose()}catch(t){T9.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){T9.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}this.open.set(e,{renderer:i,container:r}),this.opening.delete(e);let a=this.pendingUpdates.get(e);a!==void 0&&(this.pendingUpdates.delete(e),i.pushUpdate(a),this.fanOutToListeners(e,a))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){T9.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){T9.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){T9.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}}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){T9.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 T9.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{let t=/^https?:|^chrome-extension:/.test(e)?e:HP(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
|
|
1182
1182
|
`,exitCode:127}),{spawn:()=>Promise.resolve({stdout:``,stderr:`exec.spawn not supported in follower-rendered sprinkle
|
|
1183
1183
|
`,exitCode:127})}),agent:()=>Promise.resolve({stdout:`agent not supported in follower-rendered sprinkle
|
|
1184
|
-
`,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`))}}},D9=d(`page-follower-tray`);function aoe(e,t){return t===`slicc-cherry`?e.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`cherry`,capabilities:{navigate:!0,network:!1,screenshot:!0}})):e.map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}function O9(e){let t=e._refreshIntervalMs??5e3,n=null,r=null,i=null,a=null,o=()=>{i&&=(clearInterval(i),null),r&&=(r.dispose(),null),n&&=(e.onForwardingToggle?.(!1),e.browserAPI.setTrayTargetProvider(null),n.close(),null)};return a=hY({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=wY(a.bootstrapId),c=null,l=new roe(a.channel,{browserTransport:e.browserAPI.getTransport(),browserAPI:e.browserAPI,onSnapshot:e.onSnapshot,onUserMessage:e.onUserMessage,onStatus:e.onStatus,onCherrySliccEvent:e.onCherrySliccEvent,selfRuntimeId:s,onTargetsChanged:()=>void d(),onSprinklesList:t=>{e.onSprinklesList?.(t),c?.updateAvailable(t)},onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t),onDisconnect:e=>{D9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new E9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new fJ(D9,{failureMessage:`Follower CDP target listing failed (best-effort, throttled)`,recoveryMessage:`Follower CDP target listing recovered (stable for debounce window)`}),d=async()=>{let t;try{t=await e.browserAPI.listPages()}catch(e){u.reportFailure(e);return}if(n===l){u.reportSuccess();try{l.advertiseTargets(aoe(t,e.runtime??`slicc-standalone`),s)}catch(e){D9.error(`Follower target advertisement broadcast failed (sync.advertiseTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}};n=l,e.browserAPI.setTrayTargetProvider(l),e.setChatAgent(l),e.onForwardingToggle?.(!0),l.requestSnapshot(),i=setInterval(()=>void d(),t),d(),D9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{D9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{D9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}function ooe(e,t){let{layout:n,browser:r,client:i}=e;return{joinUrl:t,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,onForwardingToggle:e=>i.sendSetFollowerForwarding(e),addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}function soe(e){let{getLeader:t,setLeader:n,getFollower:r,setFollower:i,clearLeaderHooks:a,log:o}=e,s=t();n(null),a();let c=r();i(null);try{s?.stop()}catch(e){o.error(`Leader stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{c?.stop()}catch(e){o.error(`Previous follower stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}return{leaderToStop:s,previousFollower:c}}function coe(e,t){let{setFollower:n,window:r,log:i}=e,a=t,o=a.detail?.joinUrl,s=a.detail?.requestId;if(!o){i.error(`slicc:tray-join fired without joinUrl — UI dispatcher contract violation`);return}soe(e);try{n(O9(ooe(e,o)))}catch(e){i.error(`slicc:tray-join handler failed — runtime is in a half-state, page reload required`,{joinUrl:o,error:e instanceof Error?e.message:String(e)});try{r.dispatchEvent(new CustomEvent(`slicc:tray-join-failed`,{detail:{joinUrl:o,error:e instanceof Error?e.message:String(e),requestId:s}}))}catch(e){i.error(`slicc:tray-join-failed dispatch itself threw`,{dispatchError:e instanceof Error?e.message:String(e)})}}}function loe(e){let{performTrayLeaveLocally:t,window:n,log:r}=e;n.addEventListener(`slicc:tray-join`,t=>coe(e,t)),n.addEventListener(`slicc:tray-leave`,e=>{let n=e,i=n.detail?.workerBaseUrl??null,a=n.detail?.requestId;t({workerBaseUrl:i,requestId:a}).catch(e=>{r.error(`slicc:tray-leave handler failed`,{workerBaseUrl:i,requestId:a,error:e instanceof Error?e.message:String(e)})})})}async function uoe(e){let{log:t}=e;await new Promise(e=>setTimeout(e,5e3));try{let e=await fetch(`/api/hosted-bootstrap`,{signal:AbortSignal.timeout(1e4)});if(!e.ok)return;let n=await e.json(),r=n.accounts??(n.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:n.adobeImsToken}]:[]);n.model?localStorage.setItem(`selected-model`,n.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`);let[{applyHostedAccounts:i,prewarmHostedModels:a},s]=await Promise.all([o(()=>import(`./hosted-config-apply-uAym2aS5.js`),__vite__mapDeps([44,14])),o(()=>Promise.resolve().then(()=>zi),void 0)]);await a(r,{getRefreshModels:e=>s.getProviderConfig(e).refreshModels});let c=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await i(r,{saveOAuthAccount:Da,addAccount:s.addAccount,removeAccount:Ca,currentProviderIds:()=>s.getAccounts().map(e=>e.providerId),previouslyManaged:()=>c}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(r.map(e=>e.providerId))),t.info(`hosted-leader: cone config applied`,{count:r.length})}catch(e){t.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}}function doe(e,t){let{layout:n,browser:r,client:i}=e;return{joinUrl:t,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,onForwardingToggle:e=>i.sendSetFollowerForwarding(e),addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}function foe(e,t){let{layout:n,browser:r,cherryTransport:i}=e;return{joinUrl:t,runtime:mJ,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),onCherrySliccEvent:(e,t)=>i?.emitSliccEventToHost(e,t),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}async function poe(e){let{buildLeaderTrayOptions:t,wireLeaderHooks:n,window:r,log:i}=e;r.localStorage.removeItem(An),await new Jr().clear();let a=r.localStorage.getItem(kn);if(!a)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);let o=xY({...t(a),runtime:`slicc-hosted-leader`,kind:`hosted`,onLeaderReady:e=>{fetch(`/api/cloud-status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({joinUrl:e.joinUrl,trayId:e.trayId,controllerUrl:e.controllerUrl,webhookUrl:e.webhookUrl,runtime:e.runtime,sliccVersion:`3.42.1`}),signal:AbortSignal.timeout(1e4)}).catch(e=>{i.error(`failed to POST /api/cloud-status`,{error:String(e)})})}});return n(o),uoe({log:i}),o}async function moe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,buildLeaderTrayOptions:i,wireLeaderHooks:a}=e,o=e.window.localStorage.getItem(An),s=e.window.localStorage.getItem(kn);if(t===`hosted-leader`)return{pageLeaderTray:await poe(e),pageFollowerTray:null};if(t===`cherry`&&n){let t=O9(foe(e,n));return r&&(r.onHostEvent=(e,n)=>t.currentSync?.sendCherryHostEvent(e,n)),{pageLeaderTray:null,pageFollowerTray:t}}if(o)return{pageLeaderTray:null,pageFollowerTray:O9(doe(e,o))};if(s){let e=xY(i(s));return a(e),{pageLeaderTray:e,pageFollowerTray:null}}return{pageLeaderTray:null,pageFollowerTray:null}}async function hoe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,buildLeaderTrayOptions:c,wireLeaderHooks:l,clearLeaderHooks:u,performTrayLeaveLocally:d,getLeader:f,setLeader:p,getFollower:m,setFollower:h,window:g,log:_}=e,v=await moe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,buildLeaderTrayOptions:c,wireLeaderHooks:l,window:g,log:_});p(v.pageLeaderTray),h(v.pageFollowerTray),Kr(e=>{g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(Wr())),loe({getLeader:f,setLeader:p,getFollower:m,setFollower:h,layout:i,client:a,browser:o,sprinkleManager:s,clearLeaderHooks:u,performTrayLeaveLocally:d,window:g,log:_}),g.addEventListener(`beforeunload`,()=>{f()?.stop(),m()?.stop()},{once:!0})}async function goe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,agentHandle:c,realCdpTransport:l,localFs:u,instanceId:d,getSelectedScoop:f,getLeader:p,setLeader:m,getFollower:h,setFollower:g,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x}=e,{buildLeaderTrayOptions:S,wireLeaderHooks:ee,clearLeaderHooks:C,performTrayLeaveLocally:w,remoteCdpBridge:te,remoteCdpPushChannel:T}=Qae({layout:i,client:a,browser:o,sprinkleManager:s,agentHandle:c,realCdpTransport:l,localFs:u,instanceId:d,getSelectedScoop:f,getLeader:p,setLeader:m,getFollower:h,setFollower:g,window:b,log:x});await $ae({instanceId:d,browser:o,remoteCdpBridge:te,remoteCdpPushChannel:T,getLeader:p,performTrayLeaveLocally:w,window:b}),await eoe({layout:i,sprinkleManager:s,localFs:u,log:x}),await hoe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,buildLeaderTrayOptions:S,wireLeaderHooks:ee,clearLeaderHooks:C,performTrayLeaveLocally:w,getLeader:p,setLeader:m,getFollower:h,setFollower:g,window:b,log:x}),toe({client:a,localFs:u,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x})}async function _oe(e){let{client:t,layout:n,localFs:r,panelReadVfs:i,writableFs:a,useRpcVfs:s,instanceId:c,inlineSprinkles:l,interceptWelcomeLick:u}=e,{SprinkleManager:d}=await o(async()=>{let{SprinkleManager:e}=await Promise.resolve().then(()=>XK);return{SprinkleManager:e}},void 0),{installSprinkleManagerHandlerOverChannel:f}=await o(async()=>{let{installSprinkleManagerHandlerOverChannel:e}=await import(`./sprinkle-bridge-channel-gxatjtur.js`);return{installSprinkleManagerHandlerOverChannel:e}},[]),p=s?yK({reader:i,writer:a}):r,m;m=new d(p,async e=>{if(e.type===`sprinkle`){if(u(e)){e.body?.action===`shortcut-migrate`&&m.close(`welcome`);return}e.sprinkleName&&t.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e),minimizeSprinkle:e=>n.minimizeSprinkle(e),registerSprinkle:(e,t,r)=>n.registerSprinkle(e,t,r?.icon,r?.zone),unregisterSprinkle:e=>n.unregisterSprinkle(e),closeSprinkleContent:e=>n.closeSprinkleContent(e)},()=>{let e=t.getScoops().find(e=>e.isCone);e&&t.stopScoop(e.jid)},{onAttachImage:(e,t,r)=>n.panels.chat.addImageAttachment(e,t,r),inlineSprinkles:l,execHandler:sq(t)}),window.__slicc_sprinkleManager=m,ZI(sq(t));let h=f(m,{instanceId:c});return{sprinkleManager:m,stopSprinkleHandler:h}}async function voe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,agentHandle:s,realCdpTransport:c,vfsHandle:l,frozenSessions:u,hostReady:d,disarmMigrationSplash:f,instanceId:p,getSelectedScoop:m,firedWelcomeActions:h,persistFiredWelcomeActions:g,inlineSprinkles:_,window:v,log:y}=e,{localFs:b,useRpcVfs:x,opfsLeader:S,panelReadVfs:ee,writableFs:C}=l,{stopStorageSync:w}=await sJ({client:a,hostReady:d,disarmMigrationSplash:f,frozenSessions:u,localStorage:v.localStorage,log:y}),{onboardingHandle:te,interceptWelcomeLick:T}=await dJ({client:a,layout:i,localFs:b,writableFs:C,useRpcVfs:x,isOpfsLeader:S.isLeader,firedWelcomeActions:h,log:y}),ne=()=>te.get(),re=null,E=null;nJ({layout:i,client:a,getFollower:()=>E,interceptWelcomeLick:T,log:y});let{sprinkleManager:ie,stopSprinkleHandler:ae}=await _oe({client:a,layout:i,localFs:b,panelReadVfs:ee,writableFs:C,useRpcVfs:x,instanceId:p,inlineSprinkles:_,interceptWelcomeLick:T});return await goe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:ie,agentHandle:s,realCdpTransport:c,localFs:b,instanceId:p,getSelectedScoop:m,getLeader:()=>re,setLeader:e=>{re=e},getFollower:()=>E,setFollower:e=>{E=e},firedWelcomeActions:h,persistFiredWelcomeActions:g,getOnboardingOrchestrator:ne,window:v,log:y}),{stopStorageSync:w,stopSprinkleHandler:ae}}var k9=d(`boot/sw-registration`);async function yoe(){let e=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&e&&await boe())return`reload-pending`;if(!(`serviceWorker`in navigator)||e)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),k9.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),k9.info(`LLM-proxy SW registered`)}catch(e){k9.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),k9.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){k9.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}async function boe(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),k9.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){k9.error(`connect-mode SW cleanup failed`,e)}return!1}function xoe(e){return e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+`K`:e<1024*1024*1024?(e/(1024*1024)).toFixed(1)+`M`:(e/(1024*1024*1024)).toFixed(1)+`G`}function A9(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.style.flexShrink=`0`;for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}function Soe(){return A9([`M2 6V5a1 1 0 0 1 1-1h4l2 2h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6z`])}function Coe(){return A9([`M6 2h5l5 5v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z`,`M11 2v5h5`])}function woe(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`10`),n.setAttribute(`height`,`10`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.style.flexShrink=`0`,n.style.transition=`transform 130ms ease`,e&&(n.style.transform=`rotate(90deg)`);let r=document.createElementNS(t,`path`);return r.setAttribute(`d`,`M7 5l5 5-5 5`),n.appendChild(r),n}function Toe(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Eoe(e){return`${f(e)?`imgcat`:`cat`} ${Toe(e)}`}var Doe=class{container;bodyEl;fs=null;expandedDirs=new Set([`/`]);refreshTimer=null;onRunCommand;selectedPath=null;keydownHandler=null;constructor(e,t={}){this.container=e,this.onRunCommand=t.onRunCommand??null,this.render()}setFs(e){this.fs=e,this.refresh(),this.refreshTimer=setInterval(()=>this.refresh(),3e3)}async refresh(){if(!this.fs)return;let e=document.createElement(`div`);try{await this.renderDir(`/`,e,0)}catch(e){console.warn(`[FileBrowser] Refresh failed:`,e instanceof Error?e.message:String(e));return}if(e.innerHTML===this.bodyEl.innerHTML){this.applySelection();return}let t=this.container.contains(document.activeElement);for(;this.bodyEl.firstChild;)this.bodyEl.removeChild(this.bodyEl.firstChild);for(;e.firstChild;)this.bodyEl.appendChild(e.firstChild);this.applySelection(),t&&this.selectedPath&&this.bodyEl.querySelector(`.file-browser__item--selected`)?.focus()}render(){for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild);this.container.classList.add(`file-browser`);let e=document.createElement(`div`);e.className=`file-browser__header`;let t=document.createElement(`span`);t.className=`file-browser__header-title`,t.textContent=`Files`,e.appendChild(t),this.container.appendChild(e),this.bodyEl=document.createElement(`div`),this.bodyEl.className=`file-browser__body`,this.container.appendChild(this.bodyEl),this.setupKeydown()}async renderDir(e,t,n){if(!this.fs)return;let r;try{r=await this.fs.readDir(e)}catch(t){console.warn(`[FileBrowser] readDir failed:`,e,t instanceof Error?t.message:String(t));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));for(let r of[...i,...a]){let i=e===`/`?`/`+r.name:e+`/`+r.name,a=document.createElement(`div`);if(a.className=`file-browser__item`,a.style.paddingLeft=12+n*16+`px`,a.dataset.path=r.type===`directory`&&!i.endsWith(`/`)?i+`/`:i,r.type===`directory`){let e=this.expandedDirs.has(i),o=document.createElement(`span`);o.className=`file-browser__arrow`,o.appendChild(woe(e)),a.appendChild(o);let s=document.createElement(`span`);s.className=`file-browser__icon`,s.appendChild(Soe()),a.appendChild(s);let c=document.createElement(`span`);c.className=`file-browser__name`,c.textContent=r.name,a.appendChild(c);let l=document.createElement(`button`);l.className=`file-browser__action-btn`,l.style.marginLeft=`auto`,l.textContent=`ZIP`,l.title=`Download as ZIP`,l.addEventListener(`click`,e=>{e.stopPropagation(),this.downloadDirAsZip(i,r.name)}),a.appendChild(l),a.style.cursor=`pointer`,a.addEventListener(`click`,()=>{this.selectPath(i,`directory`),this.expandedDirs.has(i)?this.expandedDirs.delete(i):this.expandedDirs.add(i),this.refresh()}),t.appendChild(a),e&&await this.renderDir(i,t,n+1)}else{let e=document.createElement(`span`);e.className=`file-browser__arrow`,a.appendChild(e);let n=document.createElement(`span`);n.className=`file-browser__icon`,n.appendChild(Coe()),a.appendChild(n);let o=document.createElement(`span`);o.className=`file-browser__name`,o.textContent=r.name,a.appendChild(o);try{let e=await this.fs.stat(i),t=document.createElement(`span`);t.className=`file-browser__size`,t.textContent=xoe(e.size),a.appendChild(t)}catch(e){console.warn(`[FileBrowser] stat failed:`,i,e instanceof Error?e.message:String(e))}let s=document.createElement(`button`);s.className=`file-browser__action-btn`,s.style.marginLeft=`8px`,s.textContent=`CAT`,s.title=this.onRunCommand?f(i)?`Preview media in terminal`:`Preview in terminal`:`Terminal unavailable`,s.disabled=!this.onRunCommand,s.addEventListener(`click`,e=>{e.stopPropagation(),this.previewFile(i)}),a.appendChild(s),a.addEventListener(`click`,()=>{this.selectPath(i,`file`)}),t.appendChild(a)}}}async collectFiles(e,t){if(!this.fs)return{};let n={},r=await this.fs.readDir(e);for(let i of r){let r=e===`/`?`/`+i.name:e+`/`+i.name,a=t?t+`/`+i.name:i.name;if(i.type===`directory`){let e=await this.collectFiles(r,a);Object.assign(n,e)}else{let e=await this.fs.readFile(r,{encoding:`binary`});n[a]=e instanceof Uint8Array?e:new TextEncoder().encode(e)}}return n}async downloadDirAsZip(e,t){if(this.fs)try{let n=PG(await this.collectFiles(e,``)),r=new Blob([n.buffer],{type:`application/zip`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t+`.zip`,a.click(),URL.revokeObjectURL(i)}catch(t){console.error(`[FileBrowser] ZIP download failed:`,e,t instanceof Error?t.message:String(t))}}previewFile(e){if(!this.onRunCommand)return;let t=Eoe(e);Promise.resolve(this.onRunCommand(t)).catch(t=>{console.error(`[FileBrowser] Preview command failed:`,e,t instanceof Error?t.message:String(t))})}selectPath(e,t){this.selectedPath=t===`directory`&&!e.endsWith(`/`)?e+`/`:e,this.applySelection(),this.bodyEl.querySelector(`.file-browser__item--selected`)?.focus()}applySelection(){let e=this.bodyEl.querySelector(`.file-browser__item--selected`);if(e&&(e.classList.remove(`file-browser__item--selected`),e.removeAttribute(`tabindex`)),!this.selectedPath)return;let t=this.bodyEl.querySelectorAll(`.file-browser__item`);for(let e of t)if(e.dataset.path===this.selectedPath){e.classList.add(`file-browser__item--selected`),e.tabIndex=0;break}}setupKeydown(){this.keydownHandler=e=>{!(e.metaKey||e.ctrlKey)||e.key!==`c`||this.selectedPath&&window.getSelection()?.isCollapsed!==!1&&(e.preventDefault(),navigator.clipboard.writeText(this.selectedPath).then(()=>{this.flashCopyFeedback()}).catch(e=>{console.warn(`[FileBrowser] Clipboard write failed:`,e instanceof Error?e.message:String(e))}))},this.container.addEventListener(`keydown`,this.keydownHandler)}flashCopyFeedback(){let e=this.bodyEl.querySelector(`.file-browser__item--selected`);e&&(e.classList.add(`file-browser__item--copy-flash`),setTimeout(()=>{e.classList.remove(`file-browser__item--copy-flash`)},300))}dispose(){for(this.keydownHandler&&=(this.container.removeEventListener(`keydown`,this.keydownHandler),null),this.refreshTimer&&=(clearInterval(this.refreshTimer),null);this.container.firstChild;)this.container.removeChild(this.container.firstChild)}},Ooe=class{container;bodyEl;orchestrator=null;selectedScoopJid=null;refreshTimer=null;constructor(e){this.container=e,this.render()}setOrchestrator(e){this.orchestrator=e,this.refresh(),this.refreshTimer=setInterval(()=>this.refresh(),5e3)}setSelectedScoop(e){this.selectedScoopJid=e,this.refresh()}async refresh(){if(!this.orchestrator)return;let e=document.createElement(`div`);e.className=`memory-panel__content`;let t=document.createElement(`div`);t.className=`memory-panel__section`;let n=document.createElement(`div`);n.className=`memory-panel__section-header`,n.textContent=`Global Memory (/shared/CLAUDE.md)`,t.appendChild(n);let r=document.createElement(`div`);r.className=`memory-panel__memory-content`;try{r.textContent=await this.orchestrator.getGlobalMemory()||`(empty)`}catch{r.textContent=`(not available)`}if(t.appendChild(r),e.appendChild(t),this.selectedScoopJid){let t=this.orchestrator.getScoopContext(this.selectedScoopJid),n=this.orchestrator.getScoop(this.selectedScoopJid);if(t&&n){let r=document.createElement(`div`);r.className=`memory-panel__section`;let i=n.isCone?`/workspace/CLAUDE.md`:`/scoops/${n.folder}/CLAUDE.md`,a=document.createElement(`div`);a.className=`memory-panel__section-header`,a.textContent=`${n.isCone?`Cone`:`Scoop`}: ${n.assistantLabel} (${i})`,r.appendChild(a);let o=document.createElement(`div`);o.className=`memory-panel__memory-content`;try{let e=t.getFS();if(e){let t=await e.readFile(i,{encoding:`utf-8`});o.textContent=typeof t==`string`?t:new TextDecoder().decode(t)}else o.textContent=`(filesystem not ready)`}catch{o.textContent=`(no memory file yet)`}r.appendChild(o),e.appendChild(r)}}if(e.innerHTML!==this.bodyEl.innerHTML){for(;this.bodyEl.firstChild;)this.bodyEl.removeChild(this.bodyEl.firstChild);for(;e.firstChild;)this.bodyEl.appendChild(e.firstChild)}}render(){for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild);this.container.classList.add(`memory-panel`),this.bodyEl=document.createElement(`div`),this.bodyEl.className=`memory-panel__body`,this.container.appendChild(this.bodyEl)}dispose(){this.refreshTimer&&=(clearInterval(this.refreshTimer),null)}},j9=d(`scoop-scope-label`),koe=`You label what an AI coding agent is currently working on with a short noun phrase (<= 6 words) describing the working scope — e.g. "refactoring auth flow" or "writing scope-label tests". Reply with just the phrase. No quotes, no preamble, no trailing period, no list, no code result. If nothing useful comes to mind, reply exactly: idle.`,M9=4e3,Aoe=24;function joe(e){let t=e.trim();return t.length<=M9?t:`…`+t.slice(t.length-M9)}function Moe(e){let t=e.trim();for(;;){let e=t.replace(/^["']|["']$|\.$/g,``).trim();if(e===t)break;t=e}return t.length===0||/^idle$/i.test(t)?null:t}var N9=class{fetchTranscript;cache=new Map;inFlight=new Map;constructor(e){this.fetchTranscript=e}getCached(e){return this.cache.get(e)?.label??null}invalidate(e){let t=this.cache.get(e);t&&(t.signature=null);let n=this.inFlight.get(e);n&&(n.controller.abort(),this.inFlight.delete(e))}request(e,t){this.runRequest(e,t).catch(t=>{j9.debug(`Unexpected error in request`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async runRequest(e,t){let n;try{n=await this.fetchTranscript(e)}catch(t){j9.debug(`fetchTranscript threw`,{jid:e,error:t instanceof Error?t.message:String(t)});return}let r=joe(n);if(r.length===0){j9.debug(`Empty transcript — skipping`,{jid:e});return}let i=r;if(this.cache.get(e)?.signature===i)return;let a=this.inFlight.get(e);if(a&&a.signature===i)return;a&&(a.controller.abort(),this.inFlight.delete(e));let o=new AbortController;this.inFlight.set(e,{signature:i,controller:o});let s=null;try{s=await BB({system:koe,prompt:`Recent agent transcript:\n${r}`,maxTokens:Aoe,signal:o.signal})}catch(t){j9.debug(`quickLabel threw`,{jid:e,error:t instanceof Error?t.message:String(t)}),s=null}let c=this.inFlight.get(e);if(!c||c.controller!==o||(this.inFlight.delete(e),o.signal.aborted))return;if(s===null){j9.debug(`No label from quickLabel`,{jid:e});return}let l=Moe(s);if(!l){j9.debug(`Label rejected after normalization`,{jid:e});return}this.cache.set(e,{label:l,signature:i});try{t(e,l)}catch(t){j9.debug(`onResolved threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}};function P9(e){let t=e.split(`
|
|
1184
|
+
`,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`))}}},D9=d(`page-follower-tray`);function aoe(e,t){return t===`slicc-cherry`?e.map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:`cherry`,capabilities:{navigate:!0,network:!1,screenshot:!0}})):e.map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}function O9(e){let t=e._refreshIntervalMs??5e3,n=null,r=null,i=null,a=null,o=()=>{i&&=(clearInterval(i),null),r&&=(r.dispose(),null),n&&=(e.onForwardingToggle?.(!1),e.browserAPI.setTrayTargetProvider(null),n.close(),null)};return a=hY({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=wY(a.bootstrapId),c=null,l=new roe(a.channel,{browserTransport:e.browserAPI.getTransport(),browserAPI:e.browserAPI,onSnapshot:e.onSnapshot,onUserMessage:e.onUserMessage,onStatus:e.onStatus,onCherrySliccEvent:e.onCherrySliccEvent,selfRuntimeId:s,onTargetsChanged:()=>void d(),onSprinklesList:t=>{e.onSprinklesList?.(t),c?.updateAvailable(t)},onSprinkleUpdate:(e,t)=>c?.handleSprinkleUpdate(e,t),onDisconnect:e=>{D9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new E9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new fJ(D9,{failureMessage:`Follower CDP target listing failed (best-effort, throttled)`,recoveryMessage:`Follower CDP target listing recovered (stable for debounce window)`}),d=async()=>{let t;try{t=await e.browserAPI.listPages()}catch(e){u.reportFailure(e);return}if(n===l){u.reportSuccess();try{l.advertiseTargets(aoe(t,e.runtime??`slicc-standalone`),s)}catch(e){D9.error(`Follower target advertisement broadcast failed (sync.advertiseTargets threw)`,{error:e instanceof Error?e.message:String(e)})}}};n=l,e.browserAPI.setTrayTargetProvider(l),e.setChatAgent(l),e.onForwardingToggle?.(!0),l.requestSnapshot(),i=setInterval(()=>void d(),t),d(),D9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{D9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{D9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}function ooe(e,t){let{layout:n,browser:r,client:i}=e;return{joinUrl:t,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,onForwardingToggle:e=>i.sendSetFollowerForwarding(e),addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}function soe(e){let{getLeader:t,setLeader:n,getFollower:r,setFollower:i,clearLeaderHooks:a,log:o}=e,s=t();n(null),a();let c=r();i(null);try{s?.stop()}catch(e){o.error(`Leader stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{c?.stop()}catch(e){o.error(`Previous follower stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}return{leaderToStop:s,previousFollower:c}}function coe(e,t){let{setFollower:n,window:r,log:i}=e,a=t,o=a.detail?.joinUrl,s=a.detail?.requestId;if(!o){i.error(`slicc:tray-join fired without joinUrl — UI dispatcher contract violation`);return}soe(e);try{n(O9(ooe(e,o)))}catch(e){i.error(`slicc:tray-join handler failed — runtime is in a half-state, page reload required`,{joinUrl:o,error:e instanceof Error?e.message:String(e)});try{r.dispatchEvent(new CustomEvent(`slicc:tray-join-failed`,{detail:{joinUrl:o,error:e instanceof Error?e.message:String(e),requestId:s}}))}catch(e){i.error(`slicc:tray-join-failed dispatch itself threw`,{dispatchError:e instanceof Error?e.message:String(e)})}}}function loe(e){let{performTrayLeaveLocally:t,window:n,log:r}=e;n.addEventListener(`slicc:tray-join`,t=>coe(e,t)),n.addEventListener(`slicc:tray-leave`,e=>{let n=e,i=n.detail?.workerBaseUrl??null,a=n.detail?.requestId;t({workerBaseUrl:i,requestId:a}).catch(e=>{r.error(`slicc:tray-leave handler failed`,{workerBaseUrl:i,requestId:a,error:e instanceof Error?e.message:String(e)})})})}async function uoe(e){let{log:t}=e;await new Promise(e=>setTimeout(e,5e3));try{let e=await fetch(`/api/hosted-bootstrap`,{signal:AbortSignal.timeout(1e4)});if(!e.ok)return;let n=await e.json(),r=n.accounts??(n.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:n.adobeImsToken}]:[]);n.model?localStorage.setItem(`selected-model`,n.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`);let[{applyHostedAccounts:i,prewarmHostedModels:a},s]=await Promise.all([o(()=>import(`./hosted-config-apply-uAym2aS5.js`),__vite__mapDeps([44,14])),o(()=>Promise.resolve().then(()=>zi),void 0)]);await a(r,{getRefreshModels:e=>s.getProviderConfig(e).refreshModels});let c=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await i(r,{saveOAuthAccount:Da,addAccount:s.addAccount,removeAccount:Ca,currentProviderIds:()=>s.getAccounts().map(e=>e.providerId),previouslyManaged:()=>c}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(r.map(e=>e.providerId))),t.info(`hosted-leader: cone config applied`,{count:r.length})}catch(e){t.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}}function doe(e,t){let{layout:n,browser:r,client:i}=e;return{joinUrl:t,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,onForwardingToggle:e=>i.sendSetFollowerForwarding(e),addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}function foe(e,t){let{layout:n,browser:r,cherryTransport:i}=e;return{joinUrl:t,runtime:mJ,onSnapshot:e=>n.panels.chat.loadMessages(e),onUserMessage:(e,t,r,i)=>n.panels.chat.addUserMessage(e,i),onStatus:e=>n.panels.chat.setProcessing(e===`processing`),onCherrySliccEvent:(e,t)=>i?.emitSliccEventToHost(e,t),setChatAgent:e=>n.panels.chat.setAgent(e),browserAPI:r,addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e)}}async function poe(e){let{buildLeaderTrayOptions:t,wireLeaderHooks:n,window:r,log:i}=e;r.localStorage.removeItem(An),await new Jr().clear();let a=r.localStorage.getItem(kn);if(!a)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);let o=xY({...t(a),runtime:`slicc-hosted-leader`,kind:`hosted`,onLeaderReady:e=>{fetch(`/api/cloud-status`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({joinUrl:e.joinUrl,trayId:e.trayId,controllerUrl:e.controllerUrl,webhookUrl:e.webhookUrl,runtime:e.runtime,sliccVersion:`3.44.0`}),signal:AbortSignal.timeout(1e4)}).catch(e=>{i.error(`failed to POST /api/cloud-status`,{error:String(e)})})}});return n(o),uoe({log:i}),o}async function moe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,buildLeaderTrayOptions:i,wireLeaderHooks:a}=e,o=e.window.localStorage.getItem(An),s=e.window.localStorage.getItem(kn);if(t===`hosted-leader`)return{pageLeaderTray:await poe(e),pageFollowerTray:null};if(t===`cherry`&&n){let t=O9(foe(e,n));return r&&(r.onHostEvent=(e,n)=>t.currentSync?.sendCherryHostEvent(e,n)),{pageLeaderTray:null,pageFollowerTray:t}}if(o)return{pageLeaderTray:null,pageFollowerTray:O9(doe(e,o))};if(s){let e=xY(i(s));return a(e),{pageLeaderTray:e,pageFollowerTray:null}}return{pageLeaderTray:null,pageFollowerTray:null}}async function hoe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,buildLeaderTrayOptions:c,wireLeaderHooks:l,clearLeaderHooks:u,performTrayLeaveLocally:d,getLeader:f,setLeader:p,getFollower:m,setFollower:h,window:g,log:_}=e,v=await moe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,buildLeaderTrayOptions:c,wireLeaderHooks:l,window:g,log:_});p(v.pageLeaderTray),h(v.pageFollowerTray),Kr(e=>{g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(Wr())),loe({getLeader:f,setLeader:p,getFollower:m,setFollower:h,layout:i,client:a,browser:o,sprinkleManager:s,clearLeaderHooks:u,performTrayLeaveLocally:d,window:g,log:_}),g.addEventListener(`beforeunload`,()=>{f()?.stop(),m()?.stop()},{once:!0})}async function goe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,agentHandle:c,realCdpTransport:l,localFs:u,instanceId:d,getSelectedScoop:f,getLeader:p,setLeader:m,getFollower:h,setFollower:g,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x}=e,{buildLeaderTrayOptions:S,wireLeaderHooks:ee,clearLeaderHooks:C,performTrayLeaveLocally:w,remoteCdpBridge:te,remoteCdpPushChannel:T}=Qae({layout:i,client:a,browser:o,sprinkleManager:s,agentHandle:c,realCdpTransport:l,localFs:u,instanceId:d,getSelectedScoop:f,getLeader:p,setLeader:m,getFollower:h,setFollower:g,window:b,log:x});await $ae({instanceId:d,browser:o,remoteCdpBridge:te,remoteCdpPushChannel:T,getLeader:p,performTrayLeaveLocally:w,window:b}),await eoe({layout:i,sprinkleManager:s,localFs:u,log:x}),await hoe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:s,buildLeaderTrayOptions:S,wireLeaderHooks:ee,clearLeaderHooks:C,performTrayLeaveLocally:w,getLeader:p,setLeader:m,getFollower:h,setFollower:g,window:b,log:x}),toe({client:a,localFs:u,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x})}async function _oe(e){let{client:t,layout:n,localFs:r,panelReadVfs:i,writableFs:a,useRpcVfs:s,instanceId:c,inlineSprinkles:l,interceptWelcomeLick:u}=e,{SprinkleManager:d}=await o(async()=>{let{SprinkleManager:e}=await Promise.resolve().then(()=>XK);return{SprinkleManager:e}},void 0),{installSprinkleManagerHandlerOverChannel:f}=await o(async()=>{let{installSprinkleManagerHandlerOverChannel:e}=await import(`./sprinkle-bridge-channel-gxatjtur.js`);return{installSprinkleManagerHandlerOverChannel:e}},[]),p=s?yK({reader:i,writer:a}):r,m;m=new d(p,async e=>{if(e.type===`sprinkle`){if(u(e)){e.body?.action===`shortcut-migrate`&&m.close(`welcome`);return}e.sprinkleName&&t.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,r,i,a)=>n.addSprinkle(e,t,r,i,a),removeSprinkle:e=>n.removeSprinkle(e),minimizeSprinkle:e=>n.minimizeSprinkle(e),registerSprinkle:(e,t,r)=>n.registerSprinkle(e,t,r?.icon,r?.zone),unregisterSprinkle:e=>n.unregisterSprinkle(e),closeSprinkleContent:e=>n.closeSprinkleContent(e)},()=>{let e=t.getScoops().find(e=>e.isCone);e&&t.stopScoop(e.jid)},{onAttachImage:(e,t,r)=>n.panels.chat.addImageAttachment(e,t,r),inlineSprinkles:l,execHandler:sq(t)}),window.__slicc_sprinkleManager=m,ZI(sq(t));let h=f(m,{instanceId:c});return{sprinkleManager:m,stopSprinkleHandler:h}}async function voe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,agentHandle:s,realCdpTransport:c,vfsHandle:l,frozenSessions:u,hostReady:d,disarmMigrationSplash:f,instanceId:p,getSelectedScoop:m,firedWelcomeActions:h,persistFiredWelcomeActions:g,inlineSprinkles:_,window:v,log:y}=e,{localFs:b,useRpcVfs:x,opfsLeader:S,panelReadVfs:ee,writableFs:C}=l,{stopStorageSync:w}=await sJ({client:a,hostReady:d,disarmMigrationSplash:f,frozenSessions:u,localStorage:v.localStorage,log:y}),{onboardingHandle:te,interceptWelcomeLick:T}=await dJ({client:a,layout:i,localFs:b,writableFs:C,useRpcVfs:x,isOpfsLeader:S.isLeader,firedWelcomeActions:h,log:y}),ne=()=>te.get(),re=null,E=null;nJ({layout:i,client:a,getFollower:()=>E,interceptWelcomeLick:T,log:y});let{sprinkleManager:ie,stopSprinkleHandler:ae}=await _oe({client:a,layout:i,localFs:b,panelReadVfs:ee,writableFs:C,useRpcVfs:x,instanceId:p,inlineSprinkles:_,interceptWelcomeLick:T});return await goe({runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,layout:i,client:a,browser:o,sprinkleManager:ie,agentHandle:s,realCdpTransport:c,localFs:b,instanceId:p,getSelectedScoop:m,getLeader:()=>re,setLeader:e=>{re=e},getFollower:()=>E,setFollower:e=>{E=e},firedWelcomeActions:h,persistFiredWelcomeActions:g,getOnboardingOrchestrator:ne,window:v,log:y}),{stopStorageSync:w,stopSprinkleHandler:ae}}var k9=d(`boot/sw-registration`);async function yoe(){let e=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&e&&await boe())return`reload-pending`;if(!(`serviceWorker`in navigator)||e)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),k9.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),k9.info(`LLM-proxy SW registered`)}catch(e){k9.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),k9.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){k9.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}async function boe(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),k9.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){k9.error(`connect-mode SW cleanup failed`,e)}return!1}function xoe(e){return e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+`K`:e<1024*1024*1024?(e/(1024*1024)).toFixed(1)+`M`:(e/(1024*1024*1024)).toFixed(1)+`G`}function A9(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.style.flexShrink=`0`;for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}function Soe(){return A9([`M2 6V5a1 1 0 0 1 1-1h4l2 2h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6z`])}function Coe(){return A9([`M6 2h5l5 5v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z`,`M11 2v5h5`])}function woe(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`10`),n.setAttribute(`height`,`10`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.style.flexShrink=`0`,n.style.transition=`transform 130ms ease`,e&&(n.style.transform=`rotate(90deg)`);let r=document.createElementNS(t,`path`);return r.setAttribute(`d`,`M7 5l5 5-5 5`),n.appendChild(r),n}function Toe(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Eoe(e){return`${f(e)?`imgcat`:`cat`} ${Toe(e)}`}var Doe=class{container;bodyEl;fs=null;expandedDirs=new Set([`/`]);refreshTimer=null;onRunCommand;selectedPath=null;keydownHandler=null;constructor(e,t={}){this.container=e,this.onRunCommand=t.onRunCommand??null,this.render()}setFs(e){this.fs=e,this.refresh(),this.refreshTimer=setInterval(()=>this.refresh(),3e3)}async refresh(){if(!this.fs)return;let e=document.createElement(`div`);try{await this.renderDir(`/`,e,0)}catch(e){console.warn(`[FileBrowser] Refresh failed:`,e instanceof Error?e.message:String(e));return}if(e.innerHTML===this.bodyEl.innerHTML){this.applySelection();return}let t=this.container.contains(document.activeElement);for(;this.bodyEl.firstChild;)this.bodyEl.removeChild(this.bodyEl.firstChild);for(;e.firstChild;)this.bodyEl.appendChild(e.firstChild);this.applySelection(),t&&this.selectedPath&&this.bodyEl.querySelector(`.file-browser__item--selected`)?.focus()}render(){for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild);this.container.classList.add(`file-browser`);let e=document.createElement(`div`);e.className=`file-browser__header`;let t=document.createElement(`span`);t.className=`file-browser__header-title`,t.textContent=`Files`,e.appendChild(t),this.container.appendChild(e),this.bodyEl=document.createElement(`div`),this.bodyEl.className=`file-browser__body`,this.container.appendChild(this.bodyEl),this.setupKeydown()}async renderDir(e,t,n){if(!this.fs)return;let r;try{r=await this.fs.readDir(e)}catch(t){console.warn(`[FileBrowser] readDir failed:`,e,t instanceof Error?t.message:String(t));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));for(let r of[...i,...a]){let i=e===`/`?`/`+r.name:e+`/`+r.name,a=document.createElement(`div`);if(a.className=`file-browser__item`,a.style.paddingLeft=12+n*16+`px`,a.dataset.path=r.type===`directory`&&!i.endsWith(`/`)?i+`/`:i,r.type===`directory`){let e=this.expandedDirs.has(i),o=document.createElement(`span`);o.className=`file-browser__arrow`,o.appendChild(woe(e)),a.appendChild(o);let s=document.createElement(`span`);s.className=`file-browser__icon`,s.appendChild(Soe()),a.appendChild(s);let c=document.createElement(`span`);c.className=`file-browser__name`,c.textContent=r.name,a.appendChild(c);let l=document.createElement(`button`);l.className=`file-browser__action-btn`,l.style.marginLeft=`auto`,l.textContent=`ZIP`,l.title=`Download as ZIP`,l.addEventListener(`click`,e=>{e.stopPropagation(),this.downloadDirAsZip(i,r.name)}),a.appendChild(l),a.style.cursor=`pointer`,a.addEventListener(`click`,()=>{this.selectPath(i,`directory`),this.expandedDirs.has(i)?this.expandedDirs.delete(i):this.expandedDirs.add(i),this.refresh()}),t.appendChild(a),e&&await this.renderDir(i,t,n+1)}else{let e=document.createElement(`span`);e.className=`file-browser__arrow`,a.appendChild(e);let n=document.createElement(`span`);n.className=`file-browser__icon`,n.appendChild(Coe()),a.appendChild(n);let o=document.createElement(`span`);o.className=`file-browser__name`,o.textContent=r.name,a.appendChild(o);try{let e=await this.fs.stat(i),t=document.createElement(`span`);t.className=`file-browser__size`,t.textContent=xoe(e.size),a.appendChild(t)}catch(e){console.warn(`[FileBrowser] stat failed:`,i,e instanceof Error?e.message:String(e))}let s=document.createElement(`button`);s.className=`file-browser__action-btn`,s.style.marginLeft=`8px`,s.textContent=`CAT`,s.title=this.onRunCommand?f(i)?`Preview media in terminal`:`Preview in terminal`:`Terminal unavailable`,s.disabled=!this.onRunCommand,s.addEventListener(`click`,e=>{e.stopPropagation(),this.previewFile(i)}),a.appendChild(s),a.addEventListener(`click`,()=>{this.selectPath(i,`file`)}),t.appendChild(a)}}}async collectFiles(e,t){if(!this.fs)return{};let n={},r=await this.fs.readDir(e);for(let i of r){let r=e===`/`?`/`+i.name:e+`/`+i.name,a=t?t+`/`+i.name:i.name;if(i.type===`directory`){let e=await this.collectFiles(r,a);Object.assign(n,e)}else{let e=await this.fs.readFile(r,{encoding:`binary`});n[a]=e instanceof Uint8Array?e:new TextEncoder().encode(e)}}return n}async downloadDirAsZip(e,t){if(this.fs)try{let n=PG(await this.collectFiles(e,``)),r=new Blob([n.buffer],{type:`application/zip`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t+`.zip`,a.click(),URL.revokeObjectURL(i)}catch(t){console.error(`[FileBrowser] ZIP download failed:`,e,t instanceof Error?t.message:String(t))}}previewFile(e){if(!this.onRunCommand)return;let t=Eoe(e);Promise.resolve(this.onRunCommand(t)).catch(t=>{console.error(`[FileBrowser] Preview command failed:`,e,t instanceof Error?t.message:String(t))})}selectPath(e,t){this.selectedPath=t===`directory`&&!e.endsWith(`/`)?e+`/`:e,this.applySelection(),this.bodyEl.querySelector(`.file-browser__item--selected`)?.focus()}applySelection(){let e=this.bodyEl.querySelector(`.file-browser__item--selected`);if(e&&(e.classList.remove(`file-browser__item--selected`),e.removeAttribute(`tabindex`)),!this.selectedPath)return;let t=this.bodyEl.querySelectorAll(`.file-browser__item`);for(let e of t)if(e.dataset.path===this.selectedPath){e.classList.add(`file-browser__item--selected`),e.tabIndex=0;break}}setupKeydown(){this.keydownHandler=e=>{!(e.metaKey||e.ctrlKey)||e.key!==`c`||this.selectedPath&&window.getSelection()?.isCollapsed!==!1&&(e.preventDefault(),navigator.clipboard.writeText(this.selectedPath).then(()=>{this.flashCopyFeedback()}).catch(e=>{console.warn(`[FileBrowser] Clipboard write failed:`,e instanceof Error?e.message:String(e))}))},this.container.addEventListener(`keydown`,this.keydownHandler)}flashCopyFeedback(){let e=this.bodyEl.querySelector(`.file-browser__item--selected`);e&&(e.classList.add(`file-browser__item--copy-flash`),setTimeout(()=>{e.classList.remove(`file-browser__item--copy-flash`)},300))}dispose(){for(this.keydownHandler&&=(this.container.removeEventListener(`keydown`,this.keydownHandler),null),this.refreshTimer&&=(clearInterval(this.refreshTimer),null);this.container.firstChild;)this.container.removeChild(this.container.firstChild)}},Ooe=class{container;bodyEl;orchestrator=null;selectedScoopJid=null;refreshTimer=null;constructor(e){this.container=e,this.render()}setOrchestrator(e){this.orchestrator=e,this.refresh(),this.refreshTimer=setInterval(()=>this.refresh(),5e3)}setSelectedScoop(e){this.selectedScoopJid=e,this.refresh()}async refresh(){if(!this.orchestrator)return;let e=document.createElement(`div`);e.className=`memory-panel__content`;let t=document.createElement(`div`);t.className=`memory-panel__section`;let n=document.createElement(`div`);n.className=`memory-panel__section-header`,n.textContent=`Global Memory (/shared/CLAUDE.md)`,t.appendChild(n);let r=document.createElement(`div`);r.className=`memory-panel__memory-content`;try{r.textContent=await this.orchestrator.getGlobalMemory()||`(empty)`}catch{r.textContent=`(not available)`}if(t.appendChild(r),e.appendChild(t),this.selectedScoopJid){let t=this.orchestrator.getScoopContext(this.selectedScoopJid),n=this.orchestrator.getScoop(this.selectedScoopJid);if(t&&n){let r=document.createElement(`div`);r.className=`memory-panel__section`;let i=n.isCone?`/workspace/CLAUDE.md`:`/scoops/${n.folder}/CLAUDE.md`,a=document.createElement(`div`);a.className=`memory-panel__section-header`,a.textContent=`${n.isCone?`Cone`:`Scoop`}: ${n.assistantLabel} (${i})`,r.appendChild(a);let o=document.createElement(`div`);o.className=`memory-panel__memory-content`;try{let e=t.getFS();if(e){let t=await e.readFile(i,{encoding:`utf-8`});o.textContent=typeof t==`string`?t:new TextDecoder().decode(t)}else o.textContent=`(filesystem not ready)`}catch{o.textContent=`(no memory file yet)`}r.appendChild(o),e.appendChild(r)}}if(e.innerHTML!==this.bodyEl.innerHTML){for(;this.bodyEl.firstChild;)this.bodyEl.removeChild(this.bodyEl.firstChild);for(;e.firstChild;)this.bodyEl.appendChild(e.firstChild)}}render(){for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild);this.container.classList.add(`memory-panel`),this.bodyEl=document.createElement(`div`),this.bodyEl.className=`memory-panel__body`,this.container.appendChild(this.bodyEl)}dispose(){this.refreshTimer&&=(clearInterval(this.refreshTimer),null)}},j9=d(`scoop-scope-label`),koe=`You label what an AI coding agent is currently working on with a short noun phrase (<= 6 words) describing the working scope — e.g. "refactoring auth flow" or "writing scope-label tests". Reply with just the phrase. No quotes, no preamble, no trailing period, no list, no code result. If nothing useful comes to mind, reply exactly: idle.`,M9=4e3,Aoe=24;function joe(e){let t=e.trim();return t.length<=M9?t:`…`+t.slice(t.length-M9)}function Moe(e){let t=e.trim();for(;;){let e=t.replace(/^["']|["']$|\.$/g,``).trim();if(e===t)break;t=e}return t.length===0||/^idle$/i.test(t)?null:t}var N9=class{fetchTranscript;cache=new Map;inFlight=new Map;constructor(e){this.fetchTranscript=e}getCached(e){return this.cache.get(e)?.label??null}invalidate(e){let t=this.cache.get(e);t&&(t.signature=null);let n=this.inFlight.get(e);n&&(n.controller.abort(),this.inFlight.delete(e))}request(e,t){this.runRequest(e,t).catch(t=>{j9.debug(`Unexpected error in request`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async runRequest(e,t){let n;try{n=await this.fetchTranscript(e)}catch(t){j9.debug(`fetchTranscript threw`,{jid:e,error:t instanceof Error?t.message:String(t)});return}let r=joe(n);if(r.length===0){j9.debug(`Empty transcript — skipping`,{jid:e});return}let i=r;if(this.cache.get(e)?.signature===i)return;let a=this.inFlight.get(e);if(a&&a.signature===i)return;a&&(a.controller.abort(),this.inFlight.delete(e));let o=new AbortController;this.inFlight.set(e,{signature:i,controller:o});let s=null;try{s=await BB({system:koe,prompt:`Recent agent transcript:\n${r}`,maxTokens:Aoe,signal:o.signal})}catch(t){j9.debug(`quickLabel threw`,{jid:e,error:t instanceof Error?t.message:String(t)}),s=null}let c=this.inFlight.get(e);if(!c||c.controller!==o||(this.inFlight.delete(e),o.signal.aborted))return;if(s===null){j9.debug(`No label from quickLabel`,{jid:e});return}let l=Moe(s);if(!l){j9.debug(`Label rejected after normalization`,{jid:e});return}this.cache.set(e,{label:l,signature:i});try{t(e,l)}catch(t){j9.debug(`onResolved threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}};function P9(e){let t=e.split(`
|
|
1185
1185
|
`);for(let e=t.length-1;e>=0;e--){let n=/^user:\s*(.*)$/i.exec(t[e]??``);if(n&&n[1].length>0)return n[1]}return``}var Noe=class{container;orchestrator=null;callbacks;selectedJid=null;statuses=new Map;dropdownOpen=!1;lastBadgeCount=0;labeler=null;fetchFallbackTranscript=null;fallbackLines=new Map;constructor(e,t){this.container=e,this.callbacks=t,this.addStyles(),document.addEventListener(`click`,e=>{this.dropdownOpen&&!this.container.contains(e.target)&&(this.dropdownOpen=!1,this.render())})}setLabeler(e,t){this.labeler=e,this.fetchFallbackTranscript=t}setOrchestrator(e){this.orchestrator=e,this.render()}setSelected(e){this.selectedJid=e,this.render()}updateStatus(e,t){let n=this.statuses.get(e);this.statuses.set(e,t),t===`processing`&&n!==`processing`&&this.requestLabel(e),this.render()}refresh(){this.render()}render(){if(!this.orchestrator)return;for(;this.container.firstChild;)this.container.removeChild(this.container.firstChild);let e=this.orchestrator.getScoops(),t=[...e.filter(e=>!e.isCone),...e.filter(e=>e.isCone)],n=t.find(e=>e.jid===this.selectedJid)??t.find(e=>e.isCone)??t[0],r=document.createElement(`button`);r.className=`scoop-dd__trigger`;let i=this.buildIcon(n,t);r.appendChild(i);let a=document.createElement(`span`);a.textContent=n?.isCone?`cone`:n?.assistantLabel??`select`,r.appendChild(a);let o=document.createElement(`span`);if(o.className=`scoop-dd__arrow`,o.textContent=this.dropdownOpen?`▴`:`▾`,r.appendChild(o),n){let e=this.statuses.get(n.jid);e===`processing`&&r.classList.add(`scoop-dd__trigger--busy`),e===`error`&&r.classList.add(`scoop-dd__trigger--error`)}r.addEventListener(`click`,e=>{if(e.stopPropagation(),this.dropdownOpen=!this.dropdownOpen,this.dropdownOpen)for(let e of t)this.requestLabel(e.jid);this.render()});let s=e.filter(e=>e.isCone?!1:this.statuses.get(e.jid)===`processing`).length;if(s>0){r.classList.add(`scoop-dd__trigger--scoops-active`);let e=document.createElement(`span`);e.className=`scoop-dd__badge`,e.textContent=String(s),s!==this.lastBadgeCount&&e.classList.add(`scoop-dd__badge--pulse`),r.appendChild(e)}if(this.lastBadgeCount=s,this.container.appendChild(r),this.dropdownOpen){let e=document.createElement(`div`);e.className=`scoop-dd__menu`;for(let n of t){let r=document.createElement(`div`);r.className=`scoop-dd__item`,n.jid===this.selectedJid&&r.classList.add(`scoop-dd__item--active`);let i=this.statuses.get(n.jid);i===`processing`&&r.classList.add(`scoop-dd__item--busy`),i===`error`&&r.classList.add(`scoop-dd__item--error`);let a=this.buildIcon(n,t);r.appendChild(a);let o=document.createElement(`span`);if(o.className=`scoop-dd__label`,o.textContent=n.isCone?`cone`:n.assistantLabel,r.appendChild(o),i){let e=document.createElement(`span`);e.className=`scoop-dd__status scoop-dd__status--${i}`,e.textContent=i===`processing`?`•`:``,r.appendChild(e)}r.addEventListener(`click`,()=>{this.selectedJid=n.jid,this.dropdownOpen=!1,this.hideTooltip(r),this.render(),this.callbacks.onScoopSelect(n)}),this.attachItemTooltip(r,n),e.appendChild(r)}this.container.appendChild(e)}}buildIcon(e,t){let n=[`#f000a0`,`#00f0f0`,`#90f000`,`#15d675`,`#e68619`],r=document.createElement(`span`);if(r.className=`scoop-dd__icon`,!e)return r;if(e.isCone)r.style.background=`#f07000`;else{let i=t.filter(e=>!e.isCone).indexOf(e);r.style.background=n[i%n.length]}return r}attachItemTooltip(e,t){let n=t.isCone?`cone`:t.assistantLabel;e.addEventListener(`mouseenter`,()=>{this.showTooltip(e,t,n)}),e.addEventListener(`mouseleave`,()=>{this.hideTooltip(e)})}requestLabel(e){this.labeler&&this.labeler.request(e,e=>{let t=this.activeTooltip;t&&t.dataset.jid===e&&this.applyTooltipContent(t,e)})}activeTooltip=null;showTooltip(e,t,n){document.querySelectorAll(`.scoop-switcher-tooltip`).forEach(e=>{e.remove()});let r=document.createElement(`div`);r.className=`scoop-switcher-tooltip`,r.dataset.jid=t.jid,r.dataset.name=n,document.body.appendChild(r);let i=e.getBoundingClientRect();r.style.top=`${i.top+i.height/2}px`,r.style.left=`${i.right+8}px`,this.activeTooltip=r,e.__tip=r,this.applyTooltipContent(r,t.jid),this.requestLabel(t.jid),this.warmFallbackLine(t.jid)}hideTooltip(e){let t=e.__tip;t&&(t.remove(),e.__tip=void 0),(this.activeTooltip&&!document.body.contains(this.activeTooltip)||this.activeTooltip===t)&&(this.activeTooltip=null)}applyTooltipContent(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=e.dataset.name??``,r=document.createElement(`div`);r.className=`scoop-switcher-tooltip__name`,r.textContent=n,e.appendChild(r);let i=this.labeler?.getCached(t)??null,a=this.fallbackLines.get(t)??``,o=i??Poe(a,80);if(o.length>0){let t=document.createElement(`div`);t.className=`scoop-switcher-tooltip__scope`,t.textContent=o,e.appendChild(t)}}async warmFallbackLine(e){if(!this.fetchFallbackTranscript)return;let t=``;try{t=await this.fetchFallbackTranscript(e)}catch{return}let n=P9(t);if(n.length===0||this.fallbackLines.get(e)===n)return;this.fallbackLines.set(e,n);let r=this.activeTooltip;r&&r.dataset.jid===e&&this.applyTooltipContent(r,e)}addStyles(){if(document.getElementById(`scoop-switcher-styles`))return;let e=document.createElement(`style`);e.id=`scoop-switcher-styles`,e.textContent=`
|
|
1186
1186
|
.scoop-switcher {
|
|
1187
1187
|
position: relative;
|
|
@@ -1810,4 +1810,4 @@ ${o.repeat(a)}}`}return String(e)}var y6,b6;F({},{base64Command:()=>x6,flagsForF
|
|
|
1810
1810
|
`,this.container.appendChild(i)}};function z9(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));return n<60?`just now`:n<3600?`${Math.floor(n/60)}m ago`:n<86400?`${Math.floor(n/3600)}h ago`:n<604800?`${Math.floor(n/86400)}d ago`:new Date(t).toLocaleDateString()}var Loe=class{container;terminalViewEl;previewViewEl;previewEmptyEl;previewBtn;shell=null;activeView=`terminal`;onClearTerminal;constructor(e,t={}){this.container=e,this.onClearTerminal=t.onClearTerminal??null,this.render()}async mountShell(e){this.shell?.setPreviewStateListener?.(null),this.shell=e;let t=document.createElement(`div`);t.className=`terminal-panel__mount`,this.terminalViewEl.appendChild(t),await e.mount(t);let n=t.querySelector(`.terminal-panel__terminal-host`),r=t.querySelector(`.terminal-panel__preview`);if(!n||!r)throw Error(`terminal mount did not create expected hosts`);this.terminalViewEl.replaceChildren(n),this.previewViewEl.replaceChildren(this.previewEmptyEl),this.previewViewEl.appendChild(r),e.setPreviewStateListener(e=>this.handlePreviewStateChange(e))}async mountRemoteShell(e){this.shell?.setPreviewStateListener?.(null),this.shell=e;let t=document.createElement(`div`);t.className=`terminal-panel__mount`,this.terminalViewEl.appendChild(t),await e.mount(t);let n=t.querySelector(`.terminal-panel__terminal-host`),r=t.querySelector(`.terminal-panel__preview`);if(!n)throw Error(`remote terminal mount did not create expected host`);this.terminalViewEl.replaceChildren(n),this.previewViewEl.replaceChildren(this.previewEmptyEl),r&&this.previewViewEl.appendChild(r),e.setPreviewStateListener(e=>this.handlePreviewStateChange(e))}clearTerminal(){this.shell?.clearTerminal()}async runCommand(e){return this.shell?(/^\s*imgcat(?:\s|$)/.test(e)||this.setActiveView(`terminal`),this.shell.executeCommandInTerminal(e)):{stdout:``,stderr:`terminal is unavailable
|
|
1811
1811
|
`,exitCode:1}}refit(){this.shell?.refit()}getBodyElement(){return this.container}render(){this.container.innerHTML=``,this.container.classList.add(`terminal-panel`);let e=document.createElement(`div`);e.className=`file-browser__header`;let t=document.createElement(`span`);if(t.className=`file-browser__header-title`,t.textContent=`Terminal`,e.appendChild(t),this.onClearTerminal){let t=document.createElement(`button`);t.className=`file-browser__header-btn`,t.dataset.tooltip=`Clear Terminal`,t.setAttribute(`aria-label`,`Clear Terminal`),t.innerHTML=`<svg width="14" height="14" viewBox="0 0 20 20" fill="none"><path d="m8.249,15.021c-.4,0-.733-.317-.748-.72l-.25-6.5c-.017-.414.307-.763.72-.778.01-.001.021-.001.03-.001.4,0,.733.317.748.72l.25,6.5c.017.414-.307.763-.72.778-.01.001-.021.001-.03.001Z" fill="currentColor"/><path d="m11.751,15.021c-.01,0-.02,0-.03-.001-.413-.016-.736-.364-.72-.778l.25-6.5c.015-.403.348-.72.748-.72.01,0,.02,0,.03.001.413.016.736.364.72.778l-.25,6.5c-.015.403-.348.72-.748.72Z" fill="currentColor"/><path d="m17,4h-3.5v-.75c0-1.24-1.01-2.25-2.25-2.25h-2.5c-1.24,0-2.25,1.01-2.25,2.25v.75h-3.5c-.414,0-.75.336-.75.75s.336.75.75.75h.52l.422,10.342c.048,1.21,1.036,2.158,2.248,2.158h7.619c1.212,0,2.2-.948,2.248-2.158l.422-10.342h.52c.414,0,.75-.336.75-.75s-.336-.75-.75-.75Zm-9-.75c0-.413.337-.75.75-.75h2.5c.413,0,.75.337.75.75v.75h-4v-.75Zm6.56,12.531c-.017.403-.346.719-.75.719h-7.619c-.404,0-.733-.316-.75-.719l-.42-10.281h9.959l-.42,10.281Z" fill="currentColor"/></svg>`,t.addEventListener(`click`,()=>this.onClearTerminal()),e.appendChild(t)}this.previewBtn=document.createElement(`button`),this.previewBtn.className=`file-browser__header-btn`,this.previewBtn.setAttribute(`aria-label`,`Toggle preview`),this.previewBtn.dataset.tooltip=`Preview`,this.previewBtn.disabled=!0;let n=`http://www.w3.org/2000/svg`,r=document.createElementNS(n,`svg`);r.setAttribute(`width`,`16`),r.setAttribute(`height`,`16`),r.setAttribute(`viewBox`,`0 0 20 20`),r.setAttribute(`fill`,`none`),r.setAttribute(`stroke`,`currentColor`),r.setAttribute(`stroke-width`,`1.5`),r.setAttribute(`stroke-linecap`,`round`),r.setAttribute(`stroke-linejoin`,`round`);let i=document.createElementNS(n,`path`);i.setAttribute(`d`,`M2 10s3-6 8-6 8 6 8 6-3 6-8 6-8-6-8-6z`),r.appendChild(i);let a=document.createElementNS(n,`circle`);a.setAttribute(`cx`,`10`),a.setAttribute(`cy`,`10`),a.setAttribute(`r`,`2.5`),r.appendChild(a),this.previewBtn.appendChild(r),this.previewBtn.addEventListener(`click`,()=>{this.previewBtn.disabled||this.setActiveView(this.activeView===`preview`?`terminal`:`preview`)}),e.appendChild(this.previewBtn),this.container.appendChild(e),this.terminalViewEl=document.createElement(`div`),this.terminalViewEl.className=`terminal-panel__view`,this.container.appendChild(this.terminalViewEl),this.previewViewEl=document.createElement(`div`),this.previewViewEl.className=`terminal-panel__view`,this.container.appendChild(this.previewViewEl),this.previewEmptyEl=document.createElement(`div`),this.previewEmptyEl.className=`terminal-panel__empty-state`,this.previewEmptyEl.textContent=`Run imgcat to preview media here.`,this.previewViewEl.appendChild(this.previewEmptyEl),this.setActiveView(`terminal`)}dispose(){this.shell?.setPreviewStateListener?.(null),this.shell?.dispose(),this.container.innerHTML=``}setActiveView(e){this.activeView=e,this.previewBtn.classList.toggle(`file-browser__header-btn--active`,e===`preview`),this.terminalViewEl.style.display=e===`terminal`?`flex`:`none`,this.previewViewEl.style.display=e===`preview`?`flex`:`none`,e===`terminal`&&this.refit()}handlePreviewStateChange(e){this.previewBtn.disabled=!e,this.previewEmptyEl.style.display=e?`none`:`flex`,e?this.setActiveView(`preview`):this.activeView===`preview`&&this.setActiveView(`terminal`)}};function Roe(e){let t=(e??``).trim();if(!t)return``;let n=t.replace(/\s*\([^)]*\)\s*$/,``).trim()||t,r=n.indexOf(`@`);if(r>0){let e=n.slice(0,r),t=n.slice(r+1),i=e.split(/[._+-]/).filter(Boolean);return((i[0]?.[0]??e[0]??``)+(i.length>1?i[i.length-1][0]:t.match(/[a-z0-9]/i)?.[0]??``)).toUpperCase()}let i=n.split(/\s+/).filter(Boolean);return i.length>=2?(i[0][0]+i[i.length-1][0]).toUpperCase():n.slice(0,2).toUpperCase()}var zoe=class{entries=new Map;listeners=new Set;register(e){this.entries.set(e.id,{descriptor:e}),this.notify()}unregister(e){this.entries.delete(e),this.notify()}get(e){return this.entries.get(e)}getByZone(e){let t=[];for(let n of this.entries.values())n.descriptor.zone===e&&t.push(n.descriptor);return t}getClosed(){let e=[];for(let t of this.entries.values())t.descriptor.zone===null&&e.push(t.descriptor);return e}setZone(e,t){let n=this.entries.get(e);n&&(n.descriptor.zone=t,this.notify())}ids(){return Array.from(this.entries.keys())}has(e){return this.entries.has(e)}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notify(){for(let e of this.listeners)e()}},B9=class{zoneId;rail;contentArea;callbacks;storageKey;topSection;bottomSection;addBtn=null;entries=new Map;activeId=null;fullpage=!1;overflowObserver=null;defaultFullpage=!1;headerSection=null;constructor(e,t,n,r={},i={}){this.rail=e,this.contentArea=t,this.zoneId=n,this.callbacks=r,this.storageKey=`slicc-${n}-rail`,this.defaultFullpage=i.defaultFullpage??!1,this.rail.classList.add(`rail`),this.topSection=document.createElement(`div`),this.topSection.className=`rail__section rail__section--top`,this.bottomSection=document.createElement(`div`),this.bottomSection.className=`rail__section rail__section--bottom`,this.rail.appendChild(this.topSection),this.rail.appendChild(this.bottomSection),this.contentArea.classList.add(`rail-content--collapsed`),this.contentArea.style.display=`none`}addItem(e){if(this.entries.has(e.id))return;let t=this.createItemButton(e),n=e.position===`bottom`?this.bottomSection:this.topSection;e.closable&&e.position===`top`&&this.addBtn?n.insertBefore(t,this.addBtn):n.appendChild(t),e.element.style.display=`none`,this.contentArea.appendChild(e.element),this.entries.set(e.id,{btn:t,container:e.element,item:e}),this.updateOverflowState()}removeItem(e){let t=this.entries.get(e);t&&(t.btn.remove(),t.container.remove(),this.entries.delete(e),this.activeId===e&&(this.activeId=null,this.collapse()),this.updateOverflowState())}hasItem(e){return this.entries.has(e)}setItemIcon(e,t){let n=this.entries.get(e);n&&n.btn.setIcon(t)}markItemAttention(e){let t=this.entries.get(e);t&&t.btn.classList.add(`rail__item--attention`)}clearItemAttention(e){let t=this.entries.get(e);t&&t.btn.classList.remove(`rail__item--attention`)}activateItem(e,t={}){let n=this.entries.get(e);if(n){this.clearItemAttention(e),this.activeId=e;for(let[t,{btn:n,container:r}]of this.entries){let i=t===e;n.classList.toggle(`rail__item--active`,i),r.style.display=i?`flex`:`none`}this.contentArea.classList.remove(`rail-content--collapsed`),this.contentArea.style.display=`flex`;try{localStorage.setItem(this.storageKey,e)}catch{}this.setFullpage(t.fullpage??this.defaultFullpage),n.item.onActivate?.(),this.callbacks.onItemActivate?.(e)}}collapse(){if(this.activeId){let e=this.entries.get(this.activeId);e&&(e.btn.classList.remove(`rail__item--active`),e.container.style.display=`none`)}this.activeId=null,this.contentArea.classList.add(`rail-content--collapsed`),this.contentArea.style.display=`none`,this.fullpage&&this.setFullpage(!1);try{localStorage.removeItem(this.storageKey)}catch{}this.callbacks.onCollapse?.()}isCollapsed(){return this.activeId===null}setFullpage(e){this.fullpage!==e&&(this.fullpage=e,this.callbacks.onFullpageToggle?.(e))}isFullpage(){return this.fullpage}getActiveItemId(){return this.activeId}enableAddButton(){if(this.addBtn)return;let e=document.createElement(`button`);e.className=`rail__item rail__item--add`,e.dataset.tooltip=`Add panel`,e.dataset.tooltipPos=`left`,e.setAttribute(`aria-label`,`Add panel`),e.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3v10M3 8h10"/></svg>`,e.addEventListener(`click`,e=>{e.preventDefault(),this.callbacks.onAddClick?.()}),this.topSection.appendChild(e),this.addBtn=e,e.style.display=`none`,typeof ResizeObserver<`u`&&(this.overflowObserver=new ResizeObserver(()=>this.updateOverflowState()),this.overflowObserver.observe(this.rail),this.overflowObserver.observe(this.topSection)),this.updateOverflowState()}updateOverflowState(){if(!this.addBtn)return;let e=this.rail.clientHeight||this.rail.offsetHeight,t=this.bottomSection.offsetHeight,n=Array.from(this.topSection.children).filter(e=>e!==this.addBtn).reduce((e,t)=>e+t.offsetHeight,0);if(e<=0||n<=0){this.addBtn.style.display=`none`;return}let r=n>e-t-8;this.addBtn.style.display=r?``:`none`}createItemButton(e){let t=document.createElement(`slicc-press-button`);return t.className=`rail__item`,t.dataset.itemId=e.id,t.setAttribute(`label`,e.label),t.setAttribute(`tooltip`,e.label),t.setAttribute(`tooltip-pos`,`left`),t.setAttribute(`disable-double-click`,``),t.innerHTML=e.icon,this.attachActivationHandlers(t,e.id),t}attachActivationHandlers(e,t){e.addEventListener(`long-press`,()=>this.activateItem(t,{fullpage:!0})),e.addEventListener(`short-click`,()=>{let e=this.defaultFullpage;this.activeId===t&&(e?this.fullpage:!this.fullpage)?this.collapse():this.activateItem(t,{fullpage:e})})}mountTopWidget(e){if(this.headerSection&&=(this.headerSection.remove(),null),!e)return;let t=document.createElement(`div`);t.className=`rail__section rail__section--header`,t.appendChild(e),this.rail.insertBefore(t,this.topSection),this.headerSection=t}restoreActive(){let e=null;try{e=localStorage.getItem(this.storageKey)}catch{}e&&this.entries.has(e)?this.activateItem(e,{fullpage:!1}):this.collapse()}destroy(){this.overflowObserver?.disconnect(),this.overflowObserver=null}__test__={longPressMs:nH}};function Boe(e,t,n){let r=document.querySelector(`.sprinkle-picker`);if(r){r.remove();return}let{registry:i,callbacks:a,getAvailableSprinkles:o}=n,s=i.getClosed(),c=o?.()??[];if(s.length===0&&c.length===0)return;let l=document.createElement(`div`);l.className=`sprinkle-picker`,l.style.cssText=`position: absolute; min-width: 160px; max-height: 300px; overflow-y: auto; background: var(--s2-bg-layer-2); border: 1px solid var(--s2-border-default); border-radius: var(--s2-radius-l); padding: 4px 0; box-shadow: var(--s2-shadow-elevated); z-index: 1000;`;let u=()=>{l.remove(),document.removeEventListener(`pointerdown`,f,!0),document.removeEventListener(`keydown`,p,!0)};for(let e of s){let n=V9(e.label,()=>{a.onSelectPanel(e.id,t),u()});l.appendChild(n)}if(s.length>0&&c.length>0){let e=document.createElement(`div`);e.style.cssText=`height: 1px; background: var(--s2-border-default); margin: 4px 0;`,l.appendChild(e)}for(let e of c){let n=V9(e.title,()=>{a.onSelectSprinkle(e.name,t),u()});l.appendChild(n)}let d=e.getBoundingClientRect();l.style.top=`${d.bottom+4}px`,l.style.left=`${d.left}px`,document.body.appendChild(l);let f=e=>{l.contains(e.target)||u()},p=e=>{e.key===`Escape`&&u()};requestAnimationFrame(()=>{document.addEventListener(`pointerdown`,f,!0),document.addEventListener(`keydown`,p,!0)})}function V9(e,t){let n=document.createElement(`div`);return n.className=`sprinkle-picker__item`,n.style.cssText=`padding: 6px 12px; cursor: pointer; font-size: 12px; color: var(--s2-content-default); border-radius: var(--s2-radius-s); margin: 0 4px; transition: background 130ms ease;`,n.textContent=e,n.addEventListener(`mouseenter`,()=>{n.style.background=`var(--s2-bg-elevated)`}),n.addEventListener(`mouseleave`,()=>{n.style.background=``}),n.addEventListener(`click`,t),n}function Voe(e){document.querySelectorAll(`.dialog-overlay[data-sync-dialog]`).forEach(e=>{e.remove()});let t=document.createElement(`div`);t.className=`dialog-overlay`,t.dataset.syncDialog=`1`;let n=document.createElement(`div`);n.className=`dialog`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Multi-browser sync is on`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=e.copied?`The sync URL is copied to your clipboard. Paste it into another SLICC browser to mirror this one.`:`Couldn’t copy automatically. Use the button below to copy the sync URL, then paste it into another SLICC browser.`,n.appendChild(i);let a=document.createElement(`div`);a.style.cssText=`margin-bottom: 12px; padding: 10px 12px; background: var(--s2-bg-layer-1); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5; font-size: 12px; color: var(--s2-content-secondary);`;let o=document.createElement(`ol`);o.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`Open SLICC in another browser.`,`Click the avatar (top right) → “Connect to another browser”.`,`Paste the URL there. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,o.appendChild(t)}a.appendChild(o),n.appendChild(a);let s=document.createElement(`div`);s.style.cssText=`font-family: var(--s2-font-mono); font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 12px; padding: 8px 12px; background: var(--s2-bg-sunken); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle);`,s.textContent=e.joinUrl,n.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,n.appendChild(c),e.copied&&(c.textContent=`URL copied to clipboard.`,c.style.display=``);let l=document.createElement(`button`);l.className=`dialog__btn dialog__btn--secondary`,l.style.marginBottom=`8px`,l.textContent=e.copied?`Copy again`:`Copy URL`,l.addEventListener(`click`,async()=>{let t=await g(e.joinUrl);c.textContent=t?`URL copied to clipboard.`:`Couldn’t copy. Select and copy manually.`,c.style.color=t?`var(--s2-content-secondary)`:`var(--slicc-cone)`,c.style.display=``}),n.appendChild(l);let u=document.createElement(`button`);if(u.className=`dialog__btn`,u.textContent=`Done`,u.addEventListener(`click`,()=>t.remove()),n.appendChild(u),e.onReset){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Reset URL (disconnect connected browsers)`,t.addEventListener(`click`,async()=>{t.disabled=!0,u.disabled=!0,l.disabled=!0,c.textContent=`Resetting sync URL…`,c.style.color=`var(--s2-content-secondary)`,c.style.display=``;try{await e.onReset(),c.textContent=`Sync URL reset. Reopen this dialog from the avatar to share the new URL.`,c.style.color=`var(--s2-content-secondary)`,s.textContent=`—`,l.disabled=!0}catch(e){c.textContent=`Reset failed: ${e instanceof Error?e.message:String(e)}`,c.style.color=`var(--slicc-cone)`,t.disabled=!1,u.disabled=!1,l.disabled=!1}}),n.appendChild(t)}t.addEventListener(`click`,e=>{e.target===t&&t.remove()}),document.body.appendChild(t)}var H9=d(`ui.layout`),U9=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>`,W9=class e{root;isExtension;scoopsEl;leftEl;rightEl;verticalDivider;terminalContainer;iframeContainer;threadHeaderEl;threadHeaderName;newSessionBtn=null;rightContentEl;railEl;primaryRail;layoutRootEl;tabContainers=new Map;activeTab=`chat`;memoryContainer;terminalIconSvg=``;memoryIconSvg=``;scoopSwitcher=null;scoopSwitcherEl=null;popoutButtonEl;popoutClickHandler;detachedActiveOverlayEl;electronOverlayCloseBtnEl;avatarEl;logoSvg=null;logoImg=null;logoScoopCount=-1;headerHamburger=null;panels;registry=new zoe;onModelChange;onThinkingLevelChange;refreshModels;onModelsRefreshed;onScoopSelect;onClearChat;onClearFilesystem;onFrozenSessionOpen;onSprinkleClose;onSprinkleActivate;getAvailableSprinkles;onOpenSprinkle;resolveSprinkleIcon;constructor(e,t=!1){this.root=e,this.isExtension=t,this.buildSplitLayout()}setScoopSwitcherOrchestrator(e){this.scoopSwitcher?.setOrchestrator(e)}setScoopSwitcherTranscriptSource(e){if(!this.scoopSwitcher)return;let t=new N9(e);this.scoopSwitcher.setLabeler(t,e)}setScoopsRailTranscriptSource(e){this.panels.scoops?.setScopeTranscriptSource(e)}updateScoopSwitcherStatus(e,t){this.scoopSwitcher?.updateStatus(e,t)}setScoopSwitcherSelected(e){this.scoopSwitcher?.setSelected(e)}refreshScoopSwitcher(){this.scoopSwitcher?.refresh()}setShowPopoutButton(e){if(!e){this.popoutButtonEl?.remove(),this.popoutButtonEl=void 0;return}if(this.popoutButtonEl)return;let t=this.isExtension?this.root.querySelector(`.thread-header`):this.root.querySelector(`.header`);if(!t)return;let n=document.createElement(`button`);n.type=`button`,n.className=`header__popout-btn`,n.title=`Open in a new tab`,n.textContent=`⤴`,n.setAttribute(`aria-label`,`Pop out to a new tab`),n.addEventListener(`click`,()=>{n.disabled=!0,this.popoutClickHandler?.()}),t.appendChild(n),this.popoutButtonEl=n}setPopoutClickHandler(e){this.popoutClickHandler=e}resetPopoutButton(){this.popoutButtonEl&&(this.popoutButtonEl.disabled=!1)}setShowElectronOverlayClose(e){if(!e){this.electronOverlayCloseBtnEl?.remove(),this.electronOverlayCloseBtnEl=void 0;return}if(this.electronOverlayCloseBtnEl)return;let t=this.threadHeaderEl?.querySelector(`.thread-header__title`);if(!t)return;let n=document.createElement(`button`);n.type=`button`,n.className=`thread-header__electron-overlay-close`,n.title=`Close SLICC`,n.setAttribute(`aria-label`,`Close SLICC`),n.innerHTML=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,n.addEventListener(`click`,()=>e()),t.insertBefore(n,t.firstChild),this.electronOverlayCloseBtnEl=n}showDetachedActiveOverlay(){if(this.detachedActiveOverlayEl)return;let e=document.createElement(`div`);e.className=`layout-detached-overlay`,e.setAttribute(`role`,`alertdialog`),e.setAttribute(`aria-modal`,`true`);let t=document.createElement(`p`);t.textContent=`Detached in another tab. Close this window to continue.`;let n=document.createElement(`button`);n.type=`button`,n.className=`layout-detached-overlay-close`,n.textContent=`Close this window`,n.addEventListener(`click`,()=>{window.close()}),e.appendChild(t),e.appendChild(n),this.root.appendChild(e),this.detachedActiveOverlayEl=e}setThreadHeaderName(e){this.threadHeaderName?.isConnected&&(this.threadHeaderName.textContent=e)}setNewSessionGlow(e){if(!this.newSessionBtn)return;let t=e>=.85,n=e>=.5;this.newSessionBtn.classList.toggle(`glow`,n),this.newSessionBtn.classList.toggle(`glow--hot`,t)}setActiveTab(e){if(this.activeTab=e,e===`chat`){this.primaryRail?.collapse?.();return}this.primaryRail?.activateItem(e)}getActiveTab(){return this.activeTab}isTerminalOpen(){return this.primaryRail.getActiveItemId()===`terminal`}setAgentProcessing(e){this.threadHeaderEl?.classList.toggle(`thread-header--processing`,e)}openTerminal(){this.primaryRail.getActiveItemId()?.startsWith(`sprinkle-`)||this.primaryRail.activateItem(`terminal`)}initModelSelection(){let e=()=>{let e=pa(),t=localStorage.getItem(`selected-model`)??``,n=t.indexOf(`:`),r=n>0?t.slice(0,n):``,i=n>0?t.slice(n+1):t,a=!!r&&e.some(e=>e.providerId===r&&e.models.some(e=>e.id===i));if(!(t&&a)){for(let t of e)if(t.models.length>0){let{defaultModelId:e}=ra(t.providerId),n=(e?t.models.find(t=>t.id.toLowerCase().includes(e.toLowerCase())):void 0)??t.models[0];Fa(`${t.providerId}:${n.id}`);return}t&&e.length===0&&localStorage.removeItem(`selected-model`)}};e(),this.refreshModels=()=>{e(),this.panels?.chat?.refreshModelSelector(),this.refreshAvatar(),this.onModelsRefreshed?.()}}buildScoopSwitcher(){return this.scoopSwitcherEl=document.createElement(`div`),this.scoopSwitcherEl.className=`scoop-switcher`,this.scoopSwitcher=new Noe(this.scoopSwitcherEl,{onScoopSelect:e=>this.onScoopSelect?.(e),onDeleteScoop:e=>{this.panels?.scoops?.deleteScoop?.(e)}}),this.scoopSwitcherEl}buildHeader(e){if(this.initModelSelection(),this.isExtension)return;let t=document.createElement(`div`);t.className=`header`;let n=document.createElement(`div`);n.className=`header__row`;let r=document.createElement(`div`);r.className=`header__brand`;{let e=document.createElement(`button`);e.className=`scoops-hamburger`,e.dataset.tooltip=`Toggle navigation`,e.dataset.tooltipPos=`right`,e.setAttribute(`aria-label`,`Toggle navigation`),e.innerHTML=`<svg width="16" height="16" viewBox="0 0 20 20" fill="currentColor"><path d="M9.61805 16.2451C9.31922 15.958 9.30945 15.4834 9.59754 15.1855L14.5839 10.002L9.58485 4.80469C9.29677 4.50684 9.30653 4.03223 9.60536 3.74512C9.90223 3.45801 10.3778 3.4668 10.6649 3.76563L16.1649 9.48243C16.4452 9.77247 16.4452 10.2315 16.1649 10.5215L10.6776 16.2246C10.5311 16.3779 10.3339 16.4551 10.1376 16.4551C9.95008 16.4551 9.76258 16.3857 9.61805 16.2451Z"/><path d="M3.86805 16.2451C3.56922 15.958 3.55945 15.4834 3.84754 15.1855L8.83387 10.002L3.83485 4.80469C3.54677 4.50684 3.55653 4.03223 3.85536 3.74512C4.15223 3.45801 4.62782 3.4668 4.91493 3.76563L10.4149 9.48243C10.6952 9.77247 10.6952 10.2315 10.4149 10.5215L4.92763 16.2246C4.78114 16.3779 4.58388 16.4551 4.38759 16.4551C4.20008 16.4551 4.01258 16.3857 3.86805 16.2451Z"/></svg>`,this.headerHamburger=e,e.addEventListener(`click`,()=>{this.panels?.scoops?.toggleExpanded(),e.innerHTML=this.scoopsEl?.classList.contains(`layout__scoops--expanded`)?`<svg width="16" height="16" viewBox="0 0 20 20" fill="currentColor"><path d="M9.86241 16.4551C9.66612 16.4551 9.46886 16.3779 9.32237 16.2246L3.83507 10.5215C3.5548 10.2315 3.5548 9.77247 3.83507 9.48243L9.33507 3.76563C9.62218 3.4668 10.0978 3.45801 10.3946 3.74512C10.6935 4.03223 10.7032 4.50684 10.4151 4.80469L5.41613 10.002L10.4025 15.1855C10.6906 15.4834 10.6808 15.958 10.382 16.2451C10.2374 16.3857 10.0499 16.4551 9.86241 16.4551Z"/><path d="M15.6124 16.4551C15.4161 16.4551 15.2189 16.3779 15.0724 16.2246L9.58507 10.5215C9.3048 10.2315 9.3048 9.77247 9.58507 9.48243L15.0851 3.76563C15.3722 3.4668 15.8478 3.45801 16.1446 3.74512C16.4435 4.03223 16.4532 4.50684 16.1652 4.80469L11.1661 10.002L16.1525 15.1855C16.4406 15.4834 16.4308 15.958 16.132 16.2451C15.9874 16.3857 15.7999 16.4551 15.6124 16.4551Z"/></svg>`:`<svg width="16" height="16" viewBox="0 0 20 20" fill="currentColor"><path d="M9.61805 16.2451C9.31922 15.958 9.30945 15.4834 9.59754 15.1855L14.5839 10.002L9.58485 4.80469C9.29677 4.50684 9.30653 4.03223 9.60536 3.74512C9.90223 3.45801 10.3778 3.4668 10.6649 3.76563L16.1649 9.48243C16.4452 9.77247 16.4452 10.2315 16.1649 10.5215L10.6776 16.2246C10.5311 16.3779 10.3339 16.4551 10.1376 16.4551C9.95008 16.4551 9.76258 16.3857 9.61805 16.2451Z"/><path d="M3.86805 16.2451C3.56922 15.958 3.55945 15.4834 3.84754 15.1855L8.83387 10.002L3.83485 4.80469C3.54677 4.50684 3.55653 4.03223 3.85536 3.74512C4.15223 3.45801 4.62782 3.4668 4.91493 3.76563L10.4149 9.48243C10.6952 9.77247 10.6952 10.2315 10.4149 10.5215L4.92763 16.2246C4.78114 16.3779 4.58388 16.4551 4.38759 16.4551C4.20008 16.4551 4.01258 16.3857 3.86805 16.2451Z"/></svg>`}),r.appendChild(e)}let i=document.createElement(`div`);i.className=`header__title`,i.textContent=`slicc`,r.appendChild(i),n.appendChild(r);let a=document.createElement(`div`);a.className=`header__spacer`,n.appendChild(a),this.avatarEl=this.buildUserAvatar(),n.appendChild(this.avatarEl),t.appendChild(n),e.appendChild(t)}static SCOOP_COLORS=[`#f000a0`,`#00f0f0`,`#90f000`,`#15d675`,`#e68619`];sliccLogo(e=22){let t=document.createElement(`img`);return t.width=e,t.height=e,t.src=`/logos/sliccy-color-0scoops-128x128.png`,t.alt=`slicc`,t.classList.add(`header__logo`),t.style.objectFit=`contain`,this.logoImg=t,t}static SCOOP_R=5;static SCOOP_SPACING=8.5;static ROW_STEP=7.5;pyramidLayout(t){if(t===0)return[];let{SCOOP_SPACING:n,ROW_STEP:r}=e,i=1;for(;i*(i+1)/2<t;)i++;let a=[],o=t,s=i;for(;o>0;){let e=Math.min(o,s);a.push(e),o-=e,s--}let c=[],l=19-e.SCOOP_R;for(let e of a){let t=16-(e-1)*n/2;for(let r=0;r<e;r++)c.push({cx:t+r*n,cy:l});l-=r}return c}updateLogoScoops(e){let t=e.filter(e=>!e.isCone),n=this.logoScoopCount;if(n===t.length&&n>=0)return;this.logoScoopCount=t.length;let r=Math.min(Math.max(t.length,0),10);this.logoImg&&(this.logoImg.src=`/logos/sliccy-color-${r}scoops-128x128.png`),this.updateFaviconForScoops(t.length)}updateFaviconForScoops(e){let t=Math.min(Math.max(e,0),10),n=document.querySelector(`link[rel="icon"]`);n&&(n.href=`/logos/sliccy-color-${t}scoops-32x32.png`);let r=typeof chrome<`u`?chrome:null;r?.action?.setIcon&&r.action.setIcon({path:{16:`logos/sliccy-color-${t}scoops-16x16.png`,32:`logos/sliccy-color-${t}scoops-32x32.png`,48:`logos/sliccy-color-${t}scoops-48x48.png`,128:`logos/sliccy-color-${t}scoops-128x128.png`}}).catch(()=>{})}getInitials(e){return Roe(e)}appendTrayMenu(e){let t=gi(Wr(),vr()),n=document.createElement(`div`);if(n.className=`avatar-popover__separator`,e.appendChild(n),t.kind===`leader-offer`){let n=document.createElement(`button`);n.className=`avatar-popover__item`,n.textContent=t.label,n.addEventListener(`click`,async()=>{e.remove();try{let[{leaveTray:e},{resolveTrayWorkerBaseUrl:t,DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:n,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:r}]=await Promise.all([o(()=>Promise.resolve().then(()=>y9),void 0),o(()=>Promise.resolve().then(()=>On),void 0)]),i=await t({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:n});if(!i)throw Error(`Could not resolve a tray worker URL`);await e({workerBaseUrl:i})}catch(e){let t=e instanceof Error?e.message:String(e);H9.error(`enable-tray failed`,{error:t}),G9(`enable`,t)}}),e.appendChild(n);let r=document.createElement(`div`);r.className=`avatar-popover__caption`,r.textContent=t.caption,e.appendChild(r);return}if(t.kind===`leader-copy`){let n=document.createElement(`button`);n.className=`avatar-popover__item`,n.textContent=t.label,n.addEventListener(`click`,async()=>{e.remove();let n=await g(t.joinUrl);Voe({joinUrl:t.joinUrl,copied:n,onReset:Xae()})}),e.appendChild(n);let r=document.createElement(`div`);r.className=`avatar-popover__caption`,r.textContent=t.caption,e.appendChild(r)}else if(t.kind===`leader-pending`){let n=document.createElement(`button`);n.className=`avatar-popover__item`,n.textContent=t.label,n.disabled=!0,n.style.opacity=`0.6`,n.style.cursor=`not-allowed`,e.appendChild(n);let r=document.createElement(`div`);r.className=`avatar-popover__caption`,r.textContent=t.caption,e.appendChild(r)}else if(t.kind===`follower`){let n=document.createElement(`div`);n.className=`avatar-popover__item`,n.textContent=t.label,n.style.cursor=`default`,e.appendChild(n);let r=document.createElement(`div`);r.className=`avatar-popover__caption`,r.textContent=t.caption,e.appendChild(r)}let r=document.createElement(`button`);r.className=`avatar-popover__item avatar-popover__item--danger`,r.textContent=t.kind===`follower`?`Disconnect from leader`:`Stop multi-browser sync`,r.addEventListener(`click`,async()=>{e.remove();try{let{leaveTray:e}=await o(async()=>{let{leaveTray:e}=await Promise.resolve().then(()=>y9);return{leaveTray:e}},void 0);await e()}catch(e){let t=e instanceof Error?e.message:String(e);H9.error(`leave-tray failed`,{error:t}),G9(`leave`,t)}}),e.appendChild(r)}buildUserAvatar(){let e=document.createElement(`div`);e.className=`header__avatar`,e.setAttribute(`aria-label`,`Account`),e.dataset.tooltip=`Account`;let t=ma().find(e=>!e.loggedOut&&(e.userName||e.userAvatar));if(t?.userAvatar){let n=document.createElement(`img`);n.src=t.userAvatar,n.alt=t.userName??`User`,n.addEventListener(`error`,()=>{e.removeChild(n),t.userName&&(e.classList.add(`header__avatar--initials`),e.textContent=this.getInitials(t.userName))}),e.appendChild(n)}else t?.userName?(e.classList.add(`header__avatar--initials`),e.textContent=this.getInitials(t.userName)):(e.classList.add(`header__avatar--placeholder`),e.innerHTML=`<svg width="16" height="16" viewBox="0 0 20 20" fill="currentColor"><path d="M10 10c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v1c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-1c0-2.66-5.33-4-8-4z"/></svg>`);return e.addEventListener(`click`,()=>this.showAvatarPopover()),e}refreshAvatar(){if(!this.avatarEl)return;let e=this.avatarEl.parentElement;if(!e)return;let t=this.buildUserAvatar();e.replaceChild(t,this.avatarEl),this.avatarEl=t}showAvatarPopover(){let e=document.querySelector(`.avatar-popover`);if(e){e.remove();return}let t=document.createElement(`div`);t.className=`avatar-popover`;let n=ma(),r=n.find(e=>!e.loggedOut&&(e.userName||e.accessToken||e.apiKey));if(r){let e=document.createElement(`div`);e.className=`avatar-popover__user`;let n=document.createElement(`div`);n.className=`avatar-popover__name`,n.textContent=r.userName||`Logged in`,e.appendChild(n);let i=document.createElement(`div`);i.className=`avatar-popover__provider`,i.textContent=ra(r.providerId).name,e.appendChild(i),t.appendChild(e);let a=document.createElement(`button`);a.className=`avatar-popover__item`,a.textContent=`Sign out`,a.addEventListener(`click`,async()=>{ra(r.providerId)?.isOAuth?await wa(r.providerId):await Ca(r.providerId),t.remove(),this.refreshAvatar(),this.refreshModels?.()}),t.appendChild(a)}if(this.appendTrayMenu(t),n.length>0){let e=document.createElement(`div`);e.className=`avatar-popover__separator`,t.appendChild(e);let n=document.createElement(`button`);n.className=`avatar-popover__item avatar-popover__item--danger`,n.textContent=`Clear all accounts`,n.addEventListener(`click`,async()=>{await Ja(),t.remove(),this.refreshAvatar(),this.refreshModels?.()}),t.appendChild(n)}let i=document.createElement(`div`);i.className=`avatar-popover__separator`,t.appendChild(i);let a=document.createElement(`button`);a.className=`avatar-popover__item`,a.textContent=`New session`,a.addEventListener(`click`,async()=>{t.remove(),this.onClearChat?await this.onClearChat({freeze:!0}):await this.panels?.chat?.clearSession(),location.reload()}),t.appendChild(a);let o=document.createElement(`div`);o.className=`avatar-popover__separator`,t.appendChild(o);let s=document.createElement(`button`);s.className=`avatar-popover__item`,s.textContent=`Account settings…`,s.addEventListener(`click`,async()=>{t.remove(),Ba()||await Ja(),await no()&&(this.refreshAvatar(),this.refreshModels?.())}),t.appendChild(s),document.body.appendChild(t);let c=this.avatarEl.getBoundingClientRect();t.style.top=`${c.bottom+4}px`,t.style.right=`${window.innerWidth-c.right}px`;let l=e=>{if(e instanceof KeyboardEvent){if(e.key!==`Escape`)return}else if(t.contains(e.target)||this.avatarEl.contains(e.target))return;t.remove(),document.removeEventListener(`mousedown`,l),document.removeEventListener(`keydown`,l)};requestAnimationFrame(()=>{document.addEventListener(`mousedown`,l),document.addEventListener(`keydown`,l)})}buildSplitLayout(){for(;this.root.firstChild;)this.root.removeChild(this.root.firstChild);this.buildHeader(this.root);let e=document.createElement(`div`);e.className=`layout`,this.layoutRootEl=e,this.scoopsEl=document.createElement(`div`),this.scoopsEl.className=`layout__scoops`,this.isExtension&&(this.scoopsEl.style.display=`none`),e.appendChild(this.scoopsEl),this.leftEl=document.createElement(`div`),this.leftEl.className=`layout__left`,this.threadHeaderEl=document.createElement(`div`),this.threadHeaderEl.className=`thread-header`,this.isExtension&&this.threadHeaderEl.classList.add(`thread-header--with-switcher`);let t=document.createElement(`div`);if(t.className=`thread-header__title`,this.isExtension){let e=this.buildScoopSwitcher();t.appendChild(e),this.threadHeaderName=document.createElement(`span`)}else{let e=document.createElement(`span`);e.className=`thread-header__icon`,e.innerHTML=`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 4h14a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H7l-4 3V5a1 1 0 0 1 1-1z"/><path d="M7 8h6"/><path d="M7 11h3"/></svg>`,t.appendChild(e),this.threadHeaderName=document.createElement(`span`),this.threadHeaderName.className=`thread-header__name`,this.threadHeaderName.textContent=`sliccy`,t.appendChild(this.threadHeaderName)}this.threadHeaderEl.appendChild(t);let n=document.createElement(`slicc-press-button`);n.className=`thread-header__panel-toggle thread-header__new-session`,n.setAttribute(`tooltip`,`Click — new session, keep memory
|
|
1812
1812
|
Double-click — fastest reset, memory extracts in background
|
|
1813
|
-
Long press — discard without saving`),n.setAttribute(`label`,`New session. Click to start a new session and keep memory. Double-click for fastest reset — memory extracts in background. Long press to discard without saving.`),this.newSessionBtn=n,n.innerHTML=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"/></svg>`;let r=async e=>{this.onClearChat?await this.onClearChat(e):await this.panels.chat.clearSession(),location.reload()};n.addEventListener(`short-click`,()=>void r({freeze:!0})),n.addEventListener(`long-press`,()=>void r({freeze:!1})),n.addEventListener(`double-click`,()=>void r({freeze:`quick`}));let i=document.createElement(`div`);i.className=`thread-header__actions`,i.appendChild(n),this.threadHeaderEl.appendChild(i),this.leftEl.appendChild(this.threadHeaderEl);let a=document.createElement(`div`);a.style.cssText=`display: flex; flex-direction: column; flex: 1; min-height: 0;`,this.leftEl.appendChild(a),e.appendChild(this.leftEl),this.verticalDivider=document.createElement(`div`),this.verticalDivider.className=`layout__divider layout__divider--vertical`,e.appendChild(this.verticalDivider),this.rightContentEl=document.createElement(`div`),this.rightContentEl.className=`rail-content rail-content--collapsed`,e.appendChild(this.rightContentEl),this.railEl=document.createElement(`div`),this.railEl.setAttribute(`aria-label`,`Side panel rail`),e.appendChild(this.railEl),this.rightEl=this.rightContentEl,this.primaryRail=new B9(this.railEl,this.rightContentEl,`primary`,{onItemActivate:e=>{e===`terminal`&&this.panels?.terminal?.refit(),e===`memory`&&this.panels?.memory?.refresh(),e.startsWith(`sprinkle-`)&&this.onSprinkleActivate?.(e.slice(9))},onItemClose:e=>{let t=e.startsWith(`sprinkle-`)?e.slice(9):e;this.onSprinkleClose?.(t)},onAddClick:()=>this.showPickerForZone(`primary`,this.railEl),onFullpageToggle:e=>{this.layoutRootEl.classList.toggle(`layout--rail-fullpage`,e)}},{defaultFullpage:this.isExtension}),this.isExtension&&(this.avatarEl=this.buildUserAvatar(),this.avatarEl.classList.add(`rail__avatar`),this.primaryRail.mountTopWidget(this.avatarEl)),this.terminalContainer=document.createElement(`div`),this.terminalContainer.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: hidden; flex: 1;`;let o=document.createElement(`div`);o.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: hidden; flex: 1;`,this.memoryContainer=document.createElement(`div`),this.memoryContainer.style.cssText=`display: flex; flex-direction: column; min-height: 0; flex: 1;`,this.terminalIconSvg=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg>`,this.memoryIconSvg=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M9 13a4.5 4.5 0 0 0 3-4"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M12 13h4"></path><path d="M12 18h6a2 2 0 0 1 2 2v1"></path><path d="M12 8h8"></path><path d="M16 8V5a2 2 0 0 1 2-2"></path><circle cx="16" cy="13" r=".5"></circle><circle cx="18" cy="3" r=".5"></circle><circle cx="20" cy="21" r=".5"></circle><circle cx="20" cy="8" r=".5"></circle></svg>`,this.primaryRail.addItem({id:`terminal`,label:`Terminal`,icon:this.terminalIconSvg,element:this.terminalContainer,position:`bottom`,onActivate:()=>this.panels?.terminal?.refit()}),this.primaryRail.addItem({id:`files`,label:`Files`,icon:`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg>`,element:o,position:`bottom`}),this.primaryRail.addItem({id:`memory`,label:`Memory`,icon:this.memoryIconSvg,element:this.memoryContainer,position:`bottom`,onActivate:()=>this.panels?.memory?.refresh()}),this.primaryRail.enableAddButton(),this.iframeContainer=document.createElement(`div`),this.iframeContainer.id=`scoop-iframes`,this.iframeContainer.style.display=`none`,e.appendChild(this.iframeContainer),this.root.appendChild(e),this.panels={chat:new bH(a),terminal:new Loe(this.terminalContainer,{onClearTerminal:()=>{this.panels.terminal.clearTerminal(),this.openTerminal()}}),fileBrowser:new Doe(o,{onRunCommand:async e=>{await this.runFileBrowserCommand(e),this.openTerminal()}}),memory:new Ooe(this.memoryContainer),scoops:new Ioe(this.scoopsEl,{onScoopSelect:e=>{this.onScoopSelect?.(e),this.threadHeaderName.textContent=e.assistantLabel},onSendMessage:()=>{},onScoopsChanged:e=>this.updateLogoScoops(e),onFrozenSessionOpen:e=>this.onFrozenSessionOpen?.(e)})},this.panels.chat.onModelChange=e=>this.onModelChange?.(e),this.panels.chat.onThinkingLevelChange=e=>this.onThinkingLevelChange?.(e),this.setupVerticalDrag(),window.addEventListener(`resize`,()=>{})}getIframeContainer(){return this.iframeContainer}async runFileBrowserCommand(e){let t=await this.panels.terminal.runCommand(e);t.exitCode!==0&&t.stderr&&console.warn(`[Layout] File browser command failed:`,t.stderr.trim())}setupVerticalDrag(){if(!this.verticalDivider)return;let e=!1,t=t=>{if(!e)return;let n=this.root.querySelector(`.layout`)?.getBoundingClientRect();if(!n)return;let r=t.clientX-n.left-58,i=n.width-58,a=Math.max(.3,Math.min(.7,r/i));this.leftEl.style.flex=`${a*100} 0 0`,this.rightEl.style.flex=`${(1-a)*100} 0 0`},n=()=>{e=!1,this.verticalDivider.classList.remove(`active`),document.body.style.cursor=``,document.body.style.userSelect=``,window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n),this.panels?.terminal?.refit()};this.verticalDivider.addEventListener(`mousedown`,r=>{r.preventDefault(),e=!0,this.verticalDivider.classList.add(`active`),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)})}updateAddButtons(){}showPickerForZone(e,t){let n=new Set;for(let e of this.registry.ids())e.startsWith(`sprinkle-`)&&this.registry.get(e)?.descriptor.zone!==null&&n.add(e.slice(9));let r=(this.getAvailableSprinkles?.()??[]).filter(e=>!n.has(e.name));Boe(t,e,{registry:this.registry,callbacks:{onSelectPanel:(e,t)=>{this.openPanelInZone(e,t)},onSelectSprinkle:(e,t)=>{this.onOpenSprinkle?.(e,t)}},getAvailableSprinkles:()=>r})}openPanelInZone(e,t){let n=this.registry.get(e);n&&(this.registry.setZone(e,t),this.primaryRail.addItem({id:n.descriptor.id,label:n.descriptor.label,icon:U9,element:n.descriptor.element,position:`top`,closable:n.descriptor.closable,onActivate:n.descriptor.onActivate}),this.primaryRail.activateItem(e))}dynamicSprinkles=new Map;registerSprinkle(e,t,n,r){let i=`sprinkle-${e}`;if(this.dynamicSprinkles.has(e)&&this.primaryRail.hasItem(i))return;let a=r??`primary`,o=document.createElement(`div`);o.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: auto; flex: 1;`,this.registry.has(i)||this.registry.register({id:i,label:t,zone:a,closable:!0,element:o,onClose:()=>this.onSprinkleClose?.(e)}),this.primaryRail.hasItem(i)||this.primaryRail.addItem({id:i,label:t,icon:U9,element:o,position:`top`,closable:!0}),this.dynamicSprinkles.set(e,o),n&&this.resolveSprinkleIcon&&this.resolveSprinkleIcon(n).then(e=>{e&&this.primaryRail.setItemIcon(i,e)}).catch(()=>{}),this.updateAddButtons()}unregisterSprinkle(e){let t=`sprinkle-${e}`;this.primaryRail.removeItem(t),this.registry.unregister(t),this.dynamicSprinkles.delete(e),this.updateAddButtons()}addSprinkle(e,t,n,r,i){let a=`sprinkle-${e}`,o=this.dynamicSprinkles.get(e);!o||!this.primaryRail.hasItem(a)?(this.registerSprinkle(e,t,i?.icon,r),o=this.dynamicSprinkles.get(e)):i?.icon&&this.resolveSprinkleIcon&&this.resolveSprinkleIcon(i.icon).then(e=>{e&&this.primaryRail.setItemIcon(a,e)}).catch(()=>{}),o.appendChild(n),i?.attention?this.primaryRail.markItemAttention(a):this.primaryRail.activateItem(a),this.updateAddButtons()}removeSprinkle(e){let t=`sprinkle-${e}`;this.primaryRail.removeItem(t),this.registry.unregister(t),this.dynamicSprinkles.delete(e),this.updateAddButtons()}closeSprinkleContent(e){let t=`sprinkle-${e}`,n=this.dynamicSprinkles.get(e);if(n)for(;n.firstChild;)n.firstChild.remove();this.primaryRail?.getActiveItemId()===t&&this.primaryRail.collapse()}minimizeSprinkle(e){this.primaryRail?.getActiveItemId()===`sprinkle-${e}`&&this.primaryRail.collapse()}dispose(){for(this.panels.chat.dispose(),this.panels.terminal.dispose(),this.panels.fileBrowser.dispose(),this.panels.memory.dispose(),this.panels.scoops.dispose();this.root.firstChild;)this.root.removeChild(this.root.firstChild)}};function G9(e,t){let n=document.createElement(`div`);n.setAttribute(`role`,`alert`),n.style.cssText=`position: fixed; top: 12px; left: 50%; transform: translateX(-50%); max-width: 520px; padding: 10px 14px; background: var(--slicc-cone, #c63b2c); color: white; font-size: 13px; border-radius: 6px; z-index: 99999; box-shadow: 0 4px 12px rgba(0,0,0,0.25); cursor: pointer;`,n.textContent=`Multi-browser sync: couldn’t ${e===`leave`?`leave`:`enable`} (${t}). Click to dismiss.`,n.addEventListener(`click`,()=>n.remove()),document.body.appendChild(n),setTimeout(()=>n.remove(),8e3)}var Hoe=100,K9=6,q9=null,J9=null,Y9=null;function Uoe(){return q9||(q9=document.createElement(`div`),q9.className=`s2-tooltip`,document.body.appendChild(q9)),q9}function Woe(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Uoe();n.textContent=t,n.classList.remove(`s2-tooltip--visible`),n.style.left=`0`,n.style.top=`0`;let r=e.getBoundingClientRect(),i=n.getBoundingClientRect(),a=e.getAttribute(`data-tooltip-pos`)||`bottom`,o,s;a===`top`?(o=r.top-i.height-K9,s=r.left+r.width/2-i.width/2):a===`right`?(o=r.top+r.height/2-i.height/2,s=r.right+K9):a===`left`?(o=r.top+r.height/2-i.height/2,s=r.left-i.width-K9):(o=r.bottom+K9,s=r.left+r.width/2-i.width/2),a===`bottom`&&o+i.height>window.innerHeight-4?o=r.top-i.height-K9:a===`top`&&o<4?o=r.bottom+K9:a===`left`&&s<4?s=r.right+K9:a===`right`&&s+i.width>window.innerWidth-4&&(s=r.left-i.width-K9),s<4&&(s=4),s+i.width>window.innerWidth-4&&(s=window.innerWidth-i.width-4),o<4&&(o=4),o+i.height>window.innerHeight-4&&(o=window.innerHeight-i.height-4),n.style.top=`${o}px`,n.style.left=`${s}px`,n.classList.add(`s2-tooltip--visible`)}function X9(){J9&&=(clearTimeout(J9),null),Y9=null,q9?.classList.remove(`s2-tooltip--visible`)}function Goe(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===Y9||(X9(),t&&(Y9=t,J9=setTimeout(()=>Woe(t),Hoe)))},!0),document.addEventListener(`pointerout`,e=>{if(!Y9)return;let t=e.relatedTarget;t&&Y9.contains(t)||X9()},!0),document.addEventListener(`pointerdown`,X9,!0)}var Z9=d(`main`),Q9=new Set([`welcome`]);async function $9(e,t){let n=t?.detached===!0,r=new W9(e,!n);await r.panels.chat.initSession(`session-cone`);let{publishAgentBridgeProxy:i}=await o(async()=>{let{publishAgentBridgeProxy:e}=await import(`./agent-bridge-CaTifIJb.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([45,14]));i(),await $q({log:Z9});let a=null,{localFs:s,useRpcVfs:c,previewVfsReader:l}=await gK({layout:r,log:Z9}),u=()=>void 0,{client:d,selectScoop:f}=ai({layout:r,log:Z9,getSelectedScoop:()=>a,setSelectedScoop:e=>{a=e},syncThinkingButtonForScoop:e=>u(e)});ui({client:d,layout:r,isDetachedSelf:n});let p=await fq({client:d,layout:r,localFs:s,useRpcVfs:c,log:Z9}),m=p.writableFs;p.previewVfsReader&&(l.current=p.previewVfsReader),_K({client:d,layout:r,log:Z9}),u=BU({client:d,layout:r,localFs:s,writableFs:m,selectScoop:f,getSelectedScoop:()=>a,log:Z9}).syncThinkingButtonForScoop;let h=TU(),{onboardingHandle:g,interceptWelcomeLick:_}=await PU({client:d,layout:r,localFs:s,firedWelcomeActions:h,log:Z9}),v=()=>g.get(),y=await cq({layout:r,client:d,localFs:s,writableFs:m,useRpcVfs:c,inlineSprinkles:Q9,interceptWelcomeLick:_,log:Z9});await aU({layout:r,log:Z9}),lU({sprinkleManager:y,client:d,chat:r.panels.chat,log:Z9}),Mq({vfs:s,storage:window.localStorage,firedWelcomeActions:h,persistFiredWelcomeActions:EU,getOrchestrator:v,log:Z9}),await iU({client:d,layout:r,chat:r.panels.chat,sprinkleManager:y,localFs:s,writableFs:m,log:Z9})}async function Koe(e,t){let{browser:n,realCdpTransport:r,cherryJoinUrl:i,cherryTransport:a,instanceId:o,isElectronOverlay:s}=await tJ({runtimeMode:t,envBaseUrl:null,window,log:Z9}),c=new W9(e,s);ir({layout:c,isElectronOverlay:s,window,document}),await c.panels.chat.initSession(`session-cone`),Z9.info(`Session initialized (kernel-worker mode)`);let l=await qq({layout:c,log:Z9}),{useRpcVfs:u,opfsLeader:d}=l,f=null,{client:p,hostReady:m,hostDispose:h,selectScoop:g,syncThinkingButtonForScoop:_,disarmMigrationSplash:v}=Uq({realCdpTransport:r,instanceId:o,layout:c,log:Z9,getSelectedScoop:()=>f,setSelectedScoop:e=>{f=e}}),{agentHandle:y,frozenSessions:b}=await ore({client:p,layout:c,vfsHandle:l,selectScoop:g,getSelectedScoop:()=>f,syncThinkingButtonForScoop:_,log:Z9}),{writableFs:x}=l,{stopStorageSync:S,stopSprinkleHandler:ee}=await voe({runtimeMode:t,cherryJoinUrl:i,cherryTransport:a,layout:c,client:p,browser:n,agentHandle:y,realCdpTransport:r,vfsHandle:l,frozenSessions:b,hostReady:m,disarmMigrationSplash:v,instanceId:o,getSelectedScoop:()=>f,firedWelcomeActions:TU(),persistFiredWelcomeActions:EU,inlineSprinkles:Q9,window,log:Z9});await Nq({client:p,layout:c,writableFs:x,useRpcVfs:u,opfsLeader:d,stopStorageSync:S,stopSprinkleHandler:ee,hostDispose:h,window,log:Z9})}async function qoe(){pq(),SI(),Goe();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);if(await yoe()===`reload-pending`)return;await vn(),la();let{bootstrapOAuthReplicas:t}=await o(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-rJr6mJXj.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([46,1,14]));await Promise.race([t().catch(e=>{Z9.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),!Ba()&&Ln(window.localStorage);let n=typeof chrome<`u`&&!!chrome?.runtime?.id,r=$n(window.location.href,n);if(r===`connect`){globalThis.__slicc_connect_mode=!0;let{mountConnectSurface:t}=await o(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-1FUWatlV.js`);return{mountConnectSurface:e}},[]);await t(e);return}return r===`extension-detached`?$9(e,{detached:!0}):r===`extension`?$9(e):Koe(e,r)}qoe().catch(e=>{Z9.error(`Fatal error`,e);let t=document.getElementById(`app`);if(t){let n=document.createElement(`div`);n.style.cssText=`padding: 2rem; text-align: center;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Failed to start`;let i=document.createElement(`p`);for(i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=e.message,n.appendChild(r),n.appendChild(i);t.firstChild;)t.removeChild(t.firstChild);t.appendChild(n)}});export{Da as $,SF as A,eF as B,gF as C,xF as D,_F as E,XP as F,pa as G,nF as H,JP as I,ja as J,va as K,ZP as L,iF as M,sF as N,hF as O,QP as P,Ca as Q,tF as R,vF as S,mF as T,UP as U,$P as V,ma as W,oa as X,Ma as Y,ra as Z,KF as _,BB as a,wr as at,EF as b,WF as c,kn as ct,IF as d,ga as et,zF as f,VF as g,JF as h,oU as i,Cr as it,cF as j,wF as k,GF as l,yn as lt,LF as m,Oq as n,Li as nt,HF as o,jn as ot,UF as p,Na as q,KG as r,hi as rt,BF as s,An as st,TJ as t,no as tt,RF as u,xn as ut,qF as v,CF as w,AF as x,jF as y,YP as z};
|
|
1813
|
+
Long press — discard without saving`),n.setAttribute(`label`,`New session. Click to start a new session and keep memory. Double-click for fastest reset — memory extracts in background. Long press to discard without saving.`),this.newSessionBtn=n,n.innerHTML=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"/></svg>`;let r=async e=>{this.onClearChat?await this.onClearChat(e):await this.panels.chat.clearSession(),location.reload()};n.addEventListener(`short-click`,()=>void r({freeze:!0})),n.addEventListener(`long-press`,()=>void r({freeze:!1})),n.addEventListener(`double-click`,()=>void r({freeze:`quick`}));let i=document.createElement(`div`);i.className=`thread-header__actions`,i.appendChild(n),this.threadHeaderEl.appendChild(i),this.leftEl.appendChild(this.threadHeaderEl);let a=document.createElement(`div`);a.style.cssText=`display: flex; flex-direction: column; flex: 1; min-height: 0;`,this.leftEl.appendChild(a),e.appendChild(this.leftEl),this.verticalDivider=document.createElement(`div`),this.verticalDivider.className=`layout__divider layout__divider--vertical`,e.appendChild(this.verticalDivider),this.rightContentEl=document.createElement(`div`),this.rightContentEl.className=`rail-content rail-content--collapsed`,e.appendChild(this.rightContentEl),this.railEl=document.createElement(`div`),this.railEl.setAttribute(`aria-label`,`Side panel rail`),e.appendChild(this.railEl),this.rightEl=this.rightContentEl,this.primaryRail=new B9(this.railEl,this.rightContentEl,`primary`,{onItemActivate:e=>{e===`terminal`&&this.panels?.terminal?.refit(),e===`memory`&&this.panels?.memory?.refresh(),e.startsWith(`sprinkle-`)&&this.onSprinkleActivate?.(e.slice(9))},onItemClose:e=>{let t=e.startsWith(`sprinkle-`)?e.slice(9):e;this.onSprinkleClose?.(t)},onAddClick:()=>this.showPickerForZone(`primary`,this.railEl),onFullpageToggle:e=>{this.layoutRootEl.classList.toggle(`layout--rail-fullpage`,e)}},{defaultFullpage:this.isExtension}),this.isExtension&&(this.avatarEl=this.buildUserAvatar(),this.avatarEl.classList.add(`rail__avatar`),this.primaryRail.mountTopWidget(this.avatarEl)),this.terminalContainer=document.createElement(`div`),this.terminalContainer.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: hidden; flex: 1;`;let o=document.createElement(`div`);o.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: hidden; flex: 1;`,this.memoryContainer=document.createElement(`div`),this.memoryContainer.style.cssText=`display: flex; flex-direction: column; min-height: 0; flex: 1;`,this.terminalIconSvg=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg>`,this.memoryIconSvg=`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M9 13a4.5 4.5 0 0 0 3-4"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M12 13h4"></path><path d="M12 18h6a2 2 0 0 1 2 2v1"></path><path d="M12 8h8"></path><path d="M16 8V5a2 2 0 0 1 2-2"></path><circle cx="16" cy="13" r=".5"></circle><circle cx="18" cy="3" r=".5"></circle><circle cx="20" cy="21" r=".5"></circle><circle cx="20" cy="8" r=".5"></circle></svg>`,this.primaryRail.addItem({id:`terminal`,label:`Terminal`,icon:this.terminalIconSvg,element:this.terminalContainer,position:`bottom`,onActivate:()=>this.panels?.terminal?.refit()}),this.primaryRail.addItem({id:`files`,label:`Files`,icon:`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg>`,element:o,position:`bottom`}),this.primaryRail.addItem({id:`memory`,label:`Memory`,icon:this.memoryIconSvg,element:this.memoryContainer,position:`bottom`,onActivate:()=>this.panels?.memory?.refresh()}),this.primaryRail.enableAddButton(),this.iframeContainer=document.createElement(`div`),this.iframeContainer.id=`scoop-iframes`,this.iframeContainer.style.display=`none`,e.appendChild(this.iframeContainer),this.root.appendChild(e),this.panels={chat:new bH(a),terminal:new Loe(this.terminalContainer,{onClearTerminal:()=>{this.panels.terminal.clearTerminal(),this.openTerminal()}}),fileBrowser:new Doe(o,{onRunCommand:async e=>{await this.runFileBrowserCommand(e),this.openTerminal()}}),memory:new Ooe(this.memoryContainer),scoops:new Ioe(this.scoopsEl,{onScoopSelect:e=>{this.onScoopSelect?.(e),this.threadHeaderName.textContent=e.assistantLabel},onSendMessage:()=>{},onScoopsChanged:e=>this.updateLogoScoops(e),onFrozenSessionOpen:e=>this.onFrozenSessionOpen?.(e)})},this.panels.chat.onModelChange=e=>this.onModelChange?.(e),this.panels.chat.onThinkingLevelChange=e=>this.onThinkingLevelChange?.(e),this.setupVerticalDrag(),window.addEventListener(`resize`,()=>{})}getIframeContainer(){return this.iframeContainer}async runFileBrowserCommand(e){let t=await this.panels.terminal.runCommand(e);t.exitCode!==0&&t.stderr&&console.warn(`[Layout] File browser command failed:`,t.stderr.trim())}setupVerticalDrag(){if(!this.verticalDivider)return;let e=!1,t=t=>{if(!e)return;let n=this.root.querySelector(`.layout`)?.getBoundingClientRect();if(!n)return;let r=t.clientX-n.left-58,i=n.width-58,a=Math.max(.3,Math.min(.7,r/i));this.leftEl.style.flex=`${a*100} 0 0`,this.rightEl.style.flex=`${(1-a)*100} 0 0`},n=()=>{e=!1,this.verticalDivider.classList.remove(`active`),document.body.style.cursor=``,document.body.style.userSelect=``,window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n),this.panels?.terminal?.refit()};this.verticalDivider.addEventListener(`mousedown`,r=>{r.preventDefault(),e=!0,this.verticalDivider.classList.add(`active`),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)})}updateAddButtons(){}showPickerForZone(e,t){let n=new Set;for(let e of this.registry.ids())e.startsWith(`sprinkle-`)&&this.registry.get(e)?.descriptor.zone!==null&&n.add(e.slice(9));let r=(this.getAvailableSprinkles?.()??[]).filter(e=>!n.has(e.name));Boe(t,e,{registry:this.registry,callbacks:{onSelectPanel:(e,t)=>{this.openPanelInZone(e,t)},onSelectSprinkle:(e,t)=>{this.onOpenSprinkle?.(e,t)}},getAvailableSprinkles:()=>r})}openPanelInZone(e,t){let n=this.registry.get(e);n&&(this.registry.setZone(e,t),this.primaryRail.addItem({id:n.descriptor.id,label:n.descriptor.label,icon:U9,element:n.descriptor.element,position:`top`,closable:n.descriptor.closable,onActivate:n.descriptor.onActivate}),this.primaryRail.activateItem(e))}dynamicSprinkles=new Map;registerSprinkle(e,t,n,r){let i=`sprinkle-${e}`;if(this.dynamicSprinkles.has(e)&&this.primaryRail.hasItem(i))return;let a=r??`primary`,o=document.createElement(`div`);o.style.cssText=`display: flex; flex-direction: column; min-height: 0; overflow: auto; flex: 1;`,this.registry.has(i)||this.registry.register({id:i,label:t,zone:a,closable:!0,element:o,onClose:()=>this.onSprinkleClose?.(e)}),this.primaryRail.hasItem(i)||this.primaryRail.addItem({id:i,label:t,icon:U9,element:o,position:`top`,closable:!0}),this.dynamicSprinkles.set(e,o),n&&this.resolveSprinkleIcon&&this.resolveSprinkleIcon(n).then(e=>{e&&this.primaryRail.setItemIcon(i,e)}).catch(()=>{}),this.updateAddButtons()}unregisterSprinkle(e){let t=`sprinkle-${e}`;this.primaryRail.removeItem(t),this.registry.unregister(t),this.dynamicSprinkles.delete(e),this.updateAddButtons()}addSprinkle(e,t,n,r,i){let a=`sprinkle-${e}`,o=this.dynamicSprinkles.get(e);!o||!this.primaryRail.hasItem(a)?(this.registerSprinkle(e,t,i?.icon,r),o=this.dynamicSprinkles.get(e)):i?.icon&&this.resolveSprinkleIcon&&this.resolveSprinkleIcon(i.icon).then(e=>{e&&this.primaryRail.setItemIcon(a,e)}).catch(()=>{}),o.appendChild(n),i?.attention?this.primaryRail.markItemAttention(a):this.primaryRail.activateItem(a),this.updateAddButtons()}removeSprinkle(e){let t=`sprinkle-${e}`;this.primaryRail.removeItem(t),this.registry.unregister(t),this.dynamicSprinkles.delete(e),this.updateAddButtons()}closeSprinkleContent(e){let t=`sprinkle-${e}`,n=this.dynamicSprinkles.get(e);if(n)for(;n.firstChild;)n.firstChild.remove();this.primaryRail?.getActiveItemId()===t&&this.primaryRail.collapse()}minimizeSprinkle(e){this.primaryRail?.getActiveItemId()===`sprinkle-${e}`&&this.primaryRail.collapse()}dispose(){for(this.panels.chat.dispose(),this.panels.terminal.dispose(),this.panels.fileBrowser.dispose(),this.panels.memory.dispose(),this.panels.scoops.dispose();this.root.firstChild;)this.root.removeChild(this.root.firstChild)}};function G9(e,t){let n=document.createElement(`div`);n.setAttribute(`role`,`alert`),n.style.cssText=`position: fixed; top: 12px; left: 50%; transform: translateX(-50%); max-width: 520px; padding: 10px 14px; background: var(--slicc-cone, #c63b2c); color: white; font-size: 13px; border-radius: 6px; z-index: 99999; box-shadow: 0 4px 12px rgba(0,0,0,0.25); cursor: pointer;`,n.textContent=`Multi-browser sync: couldn’t ${e===`leave`?`leave`:`enable`} (${t}). Click to dismiss.`,n.addEventListener(`click`,()=>n.remove()),document.body.appendChild(n),setTimeout(()=>n.remove(),8e3)}var Hoe=100,K9=6,q9=null,J9=null,Y9=null;function Uoe(){return q9||(q9=document.createElement(`div`),q9.className=`s2-tooltip`,document.body.appendChild(q9)),q9}function Woe(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Uoe();n.textContent=t,n.classList.remove(`s2-tooltip--visible`),n.style.left=`0`,n.style.top=`0`;let r=e.getBoundingClientRect(),i=n.getBoundingClientRect(),a=e.getAttribute(`data-tooltip-pos`)||`bottom`,o,s;a===`top`?(o=r.top-i.height-K9,s=r.left+r.width/2-i.width/2):a===`right`?(o=r.top+r.height/2-i.height/2,s=r.right+K9):a===`left`?(o=r.top+r.height/2-i.height/2,s=r.left-i.width-K9):(o=r.bottom+K9,s=r.left+r.width/2-i.width/2),a===`bottom`&&o+i.height>window.innerHeight-4?o=r.top-i.height-K9:a===`top`&&o<4?o=r.bottom+K9:a===`left`&&s<4?s=r.right+K9:a===`right`&&s+i.width>window.innerWidth-4&&(s=r.left-i.width-K9),s<4&&(s=4),s+i.width>window.innerWidth-4&&(s=window.innerWidth-i.width-4),o<4&&(o=4),o+i.height>window.innerHeight-4&&(o=window.innerHeight-i.height-4),n.style.top=`${o}px`,n.style.left=`${s}px`,n.classList.add(`s2-tooltip--visible`)}function X9(){J9&&=(clearTimeout(J9),null),Y9=null,q9?.classList.remove(`s2-tooltip--visible`)}function Goe(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===Y9||(X9(),t&&(Y9=t,J9=setTimeout(()=>Woe(t),Hoe)))},!0),document.addEventListener(`pointerout`,e=>{if(!Y9)return;let t=e.relatedTarget;t&&Y9.contains(t)||X9()},!0),document.addEventListener(`pointerdown`,X9,!0)}var Z9=d(`main`),Q9=new Set([`welcome`]);async function $9(e,t){let n=t?.detached===!0,r=new W9(e,!n);await r.panels.chat.initSession(`session-cone`);let{publishAgentBridgeProxy:i}=await o(async()=>{let{publishAgentBridgeProxy:e}=await import(`./agent-bridge-C5enj1WV.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([45,14]));i(),await $q({log:Z9});let a=null,{localFs:s,useRpcVfs:c,previewVfsReader:l}=await gK({layout:r,log:Z9}),u=()=>void 0,{client:d,selectScoop:f}=ai({layout:r,log:Z9,getSelectedScoop:()=>a,setSelectedScoop:e=>{a=e},syncThinkingButtonForScoop:e=>u(e)});ui({client:d,layout:r,isDetachedSelf:n});let p=await fq({client:d,layout:r,localFs:s,useRpcVfs:c,log:Z9}),m=p.writableFs;p.previewVfsReader&&(l.current=p.previewVfsReader),_K({client:d,layout:r,log:Z9}),u=BU({client:d,layout:r,localFs:s,writableFs:m,selectScoop:f,getSelectedScoop:()=>a,log:Z9}).syncThinkingButtonForScoop;let h=TU(),{onboardingHandle:g,interceptWelcomeLick:_}=await PU({client:d,layout:r,localFs:s,firedWelcomeActions:h,log:Z9}),v=()=>g.get(),y=await cq({layout:r,client:d,localFs:s,writableFs:m,useRpcVfs:c,inlineSprinkles:Q9,interceptWelcomeLick:_,log:Z9});await aU({layout:r,log:Z9}),lU({sprinkleManager:y,client:d,chat:r.panels.chat,log:Z9}),Mq({vfs:s,storage:window.localStorage,firedWelcomeActions:h,persistFiredWelcomeActions:EU,getOrchestrator:v,log:Z9}),await iU({client:d,layout:r,chat:r.panels.chat,sprinkleManager:y,localFs:s,writableFs:m,log:Z9})}async function Koe(e,t){let{browser:n,realCdpTransport:r,cherryJoinUrl:i,cherryTransport:a,instanceId:o,isElectronOverlay:s}=await tJ({runtimeMode:t,envBaseUrl:null,window,log:Z9}),c=new W9(e,s);ir({layout:c,isElectronOverlay:s,window,document}),await c.panels.chat.initSession(`session-cone`),Z9.info(`Session initialized (kernel-worker mode)`);let l=await qq({layout:c,log:Z9}),{useRpcVfs:u,opfsLeader:d}=l,f=null,{client:p,hostReady:m,hostDispose:h,selectScoop:g,syncThinkingButtonForScoop:_,disarmMigrationSplash:v}=Uq({realCdpTransport:r,instanceId:o,layout:c,log:Z9,getSelectedScoop:()=>f,setSelectedScoop:e=>{f=e}}),{agentHandle:y,frozenSessions:b}=await ore({client:p,layout:c,vfsHandle:l,selectScoop:g,getSelectedScoop:()=>f,syncThinkingButtonForScoop:_,log:Z9}),{writableFs:x}=l,{stopStorageSync:S,stopSprinkleHandler:ee}=await voe({runtimeMode:t,cherryJoinUrl:i,cherryTransport:a,layout:c,client:p,browser:n,agentHandle:y,realCdpTransport:r,vfsHandle:l,frozenSessions:b,hostReady:m,disarmMigrationSplash:v,instanceId:o,getSelectedScoop:()=>f,firedWelcomeActions:TU(),persistFiredWelcomeActions:EU,inlineSprinkles:Q9,window,log:Z9});await Nq({client:p,layout:c,writableFs:x,useRpcVfs:u,opfsLeader:d,stopStorageSync:S,stopSprinkleHandler:ee,hostDispose:h,window,log:Z9})}async function qoe(){pq(),SI(),Goe();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);if(await yoe()===`reload-pending`)return;await vn(),la();let{bootstrapOAuthReplicas:t}=await o(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap--CDdXr74.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([46,1,14]));await Promise.race([t().catch(e=>{Z9.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),!Ba()&&Ln(window.localStorage);let n=typeof chrome<`u`&&!!chrome?.runtime?.id,r=$n(window.location.href,n);if(r===`connect`){globalThis.__slicc_connect_mode=!0;let{mountConnectSurface:t}=await o(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-KLfqgi-g.js`);return{mountConnectSurface:e}},[]);await t(e);return}return r===`extension-detached`?$9(e,{detached:!0}):r===`extension`?$9(e):Koe(e,r)}qoe().catch(e=>{Z9.error(`Fatal error`,e);let t=document.getElementById(`app`);if(t){let n=document.createElement(`div`);n.style.cssText=`padding: 2rem; text-align: center;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Failed to start`;let i=document.createElement(`p`);for(i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=e.message,n.appendChild(r),n.appendChild(i);t.firstChild;)t.removeChild(t.firstChild);t.appendChild(n)}});export{Da as $,SF as A,eF as B,gF as C,xF as D,_F as E,XP as F,pa as G,nF as H,JP as I,ja as J,va as K,ZP as L,iF as M,sF as N,hF as O,QP as P,Ca as Q,tF as R,vF as S,mF as T,UP as U,$P as V,ma as W,oa as X,Ma as Y,ra as Z,KF as _,BB as a,wr as at,EF as b,WF as c,kn as ct,IF as d,ga as et,zF as f,VF as g,JF as h,oU as i,Cr as it,cF as j,wF as k,GF as l,yn as lt,LF as m,Oq as n,Li as nt,HF as o,jn as ot,UF as p,Na as q,KG as r,hi as rt,BF as s,An as st,TJ as t,no as tt,RF as u,xn as ut,qF as v,CF as w,AF as x,jF as y,YP as z};
|