sliccy 3.48.0 → 3.48.2
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-XIfmEcYK.js → adobe-5z7VkzHH.js} +2 -2
- package/dist/ui/assets/{adobe-Dw1KLzF0.js → adobe-D4UWSYHl.js} +1 -1
- package/dist/ui/assets/{agent-bridge-BEF1hIty.js → agent-bridge-DpHNewhn.js} +1 -1
- package/dist/ui/assets/agent-message-to-chat-BFKTUXGn.js +7 -0
- package/dist/ui/assets/{apps-eGg9tGKY.js → apps-DzWgEeb-.js} +1 -1
- package/dist/ui/assets/{azure-openai-B6-fovpR.js → azure-openai-Bs_AZAj1.js} +1 -1
- package/dist/ui/assets/{azure-openai-5rXpEjUJ.js → azure-openai-CgCdlRkI.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-CROJP2Yc.js → bsh-watchdog-DQBiS6ap.js} +1 -1
- package/dist/ui/assets/{cdp-BYIfy3ZR.js → cdp-BK5ta7TE.js} +3 -3
- package/dist/ui/assets/{connect-surface-B8afIHD4.js → connect-surface-BUKRCcBE.js} +1 -1
- package/dist/ui/assets/cost-command-D5Ny2X7l.js +1 -0
- package/dist/ui/assets/{dist-BN6l3u_g.js → dist-CoUZnRy1.js} +1 -1
- package/dist/ui/assets/{dist-D1-v9_zA.js → dist-D2ZFDTS7.js} +1 -1
- package/dist/ui/assets/{es-CR5zR-J5.js → es-DljNJbrB.js} +1 -1
- package/dist/ui/assets/{follower-sprinkle-bridge-WYPpVMY-.js → follower-sprinkle-bridge-dE9-MkU3.js} +1 -1
- package/dist/ui/assets/{fs-BAw7axTJ.js → fs-B8B7eB6v.js} +1 -1
- package/dist/ui/assets/{github-BHWdZQhw.js → github-CDXI9sAz.js} +1 -1
- package/dist/ui/assets/{github-C5w4XnAO.js → github-blAVF9vh.js} +2 -2
- package/dist/ui/assets/{github-copilot-BIUN8eqB.js → github-copilot-Beyog8Tv.js} +1 -1
- package/dist/ui/assets/{github-copilot-BFdzTYMm.js → github-copilot-CyurjLPH.js} +1 -1
- package/dist/ui/assets/{kernel-worker-D0mD7VaJ.js → kernel-worker-cTmGHAnO.js} +1025 -1025
- package/dist/ui/assets/{lick-ws-bridge-B6-rmKYz.js → lick-ws-bridge-DzP6eTUS.js} +1 -1
- package/dist/ui/assets/{local-llm-CLRAWq23.js → local-llm-BKmH8Mr3.js} +1 -1
- package/dist/ui/assets/{magick-wasm-B59SHUdz.js → magick-wasm---Q_t1v4.js} +1 -1
- package/dist/ui/assets/{main-B-7wG_p8.js → main-DDlUJEPe.js} +8 -8
- package/dist/ui/assets/{main-cherry-eqj0Nu2C.js → main-cherry-n40lka2a.js} +1 -1
- package/dist/ui/assets/{migration-run-CfSJ5uPv.js → migration-run-Bh8BRs6h.js} +1 -1
- package/dist/ui/assets/{mount-D4fmsx8s.js → mount-sNocfF3D.js} +1 -1
- package/dist/ui/assets/{nuke-command-D68JEESV.js → nuke-command-CifmXH3e.js} +1 -1
- package/dist/ui/assets/{oauth-bootstrap-DRiSHWay.js → oauth-bootstrap-6zSkqdxz.js} +2 -2
- package/dist/ui/assets/{oauth-service-CczC27lE.js → oauth-service-BnJV8LqU.js} +1 -1
- package/dist/ui/assets/{onboarding-orchestrator-D-GBXYsj.js → onboarding-orchestrator-BPnZzxXb.js} +1 -1
- package/dist/ui/assets/{openai-codex-D9mJoG9R.js → openai-codex-D8o6rHnD.js} +1 -1
- package/dist/ui/assets/{openai-codex-BJzOHy6e.js → openai-codex-DAKEHVl_.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-qpYZdpDo.js → panel-rpc-handlers-CpxNjMsH.js} +1 -1
- package/dist/ui/assets/{provider-Caph6pfA.js → provider-C75Wxyeu.js} +2 -2
- package/dist/ui/assets/{provider-DHk3eblm.js → provider-Cu4j5BFv.js} +1 -1
- package/dist/ui/assets/{provider-settings-Cf_3ifG8.js → provider-settings-DDhDtyg4.js} +2 -2
- package/dist/ui/assets/provider-store-access-CqRw0x17.js +1 -0
- package/dist/ui/assets/provider-store-access-Dt2s5XiN.js +1 -0
- package/dist/ui/assets/{providers-D3em42N8.js → providers-ueARontn.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-C6Rx5YCJ.js → proxied-fetch-CiAJenQh.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-De1qIJHZ.js → remote-terminal-view-KmVK656b.js} +1 -1
- package/dist/ui/assets/{store-BA9_NNHT.js → store-HH08ZnO4.js} +1 -1
- package/dist/ui/assets/{sudo-Cw4ipR5k.js → sudo-DPefVnj0.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BKuFnLnM.js → tray-leave-runtime-B-tlgzO0.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-D400qfJn.js → upgrade-detection-BYIJUQ-c.js} +1 -1
- package/dist/ui/assets/{xai-grok-C6ixGXqZ.js → xai-grok-BQw3CiOr.js} +1 -1
- package/dist/ui/assets/{xai-grok-Bw1qm-LC.js → xai-grok-Drlj8Lht.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/agent-message-to-chat-gnQ33fzd.js +0 -7
- package/dist/ui/assets/cost-command-DRDl5XLB.js +0 -1
- package/dist/ui/assets/provider-store-access-BEST5M4v.js +0 -1
- package/dist/ui/assets/provider-store-access-JTSTcWPW.js +0 -1
|
@@ -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---Q_t1v4.js","assets/preload-helper-zJ_50EbN.js","assets/azure-openai-CgCdlRkI.js","assets/bedrock-camp-ChanTZ04.js","assets/chunk-aKtaBQYM.js","assets/transform-messages-B3Q-Bwv-.js","assets/json-parse-BUunmmNl.js","assets/openai-Cn5LRPCm.js","assets/local-llm-BKmH8Mr3.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-5z7VkzHH.js","assets/oauth-service-BnJV8LqU.js","assets/github-copilot-CyurjLPH.js","assets/github-blAVF9vh.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-DAKEHVl_.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-Drlj8Lht.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-BPnZzxXb.js","assets/dist-C6lFkA1A2.js","assets/dist-CvzfEfDj2.js","assets/remote-terminal-view-KmVK656b.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-DPefVnj0.js","assets/cdp-BK5ta7TE.js","assets/main-cherry-n40lka2a.js","assets/panel-rpc-handlers-CpxNjMsH.js","assets/hosted-config-apply-uAym2aS5.js","assets/agent-bridge-DpHNewhn.js","assets/oauth-bootstrap-6zSkqdxz.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{c as r,r as i,t as a}from"./bedrock-camp-ChanTZ04.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 Xt(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 Zt(e){let t=Yt(Kt(e.messages));return Xt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Qt=Jt,$t=`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 en=`agent-sessions`,tn=1,nn=`sessions`;function rn(){return new Promise((e,t)=>{let n=indexedDB.open(en,tn);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(nn)||e.createObjectStore(nn,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var an=class{dbPromise=null;getDB(){return this.dbPromise||=rn(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(nn,`readwrite`).objectStore(nn).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(nn,`readonly`).objectStore(nn).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(nn,`readwrite`).objectStore(nn).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(nn,`readonly`).objectStore(nn).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(nn,`readwrite`).objectStore(nn).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()}}},on=d(`image-processor`),sn=3932160,eee=1568,cn=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function ln(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function un(e){return cn.has(e)}function dn(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 fn(e){if(!un(e.mimeType))return on.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=dn(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;on.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-B59SHUdz.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return on.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 on.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=eee/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),on.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>sn&&s!==`JPEG`?(on.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>sn&&(on.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 on.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>sn)return on.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 on.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return on.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 pn=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function mn(e){let{include:t,exclude:n}=pn;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var hn=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-5rXpEjUJ.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-ChanTZ04.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-CLRAWq23.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),gn=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-XIfmEcYK.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-BFdzTYMm.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-C5w4XnAO.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-BJzOHy6e.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-Bw1qm-LC.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),_n=new Map,vn=null;function yn(){return vn||(vn=(async()=>{for(let[e,t]of Object.entries(hn)){let e=await t();e.config&&mn(e.config.id)&&(_n.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(gn)){let e=await t();e.config&&(_n.set(e.config.id,e.config),e.register?.())}})(),vn)}function bn(e){return _n.get(e)}function xn(){return[..._n.keys()]}function Sn(e){_n.set(e.id,e)}var Cn=`tray`,wn=`trayWorkerUrl`,Tn=`lead`;function En(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 Dn(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=En(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function On(e,t){let n=new URL(e);return n.searchParams.delete(wn),n.searchParams.delete(Tn),n.searchParams.set(Cn,t),n.toString()}var kn=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>Mn,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Nn,TRAY_JOIN_STORAGE_KEY:()=>jn,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>Tn,TRAY_QUERY_PARAM:()=>Cn,TRAY_WORKER_QUERY_PARAM:()=>wn,TRAY_WORKER_STORAGE_KEY:()=>An,buildTrayLaunchUrl:()=>Bn,buildTrayLeadLaunchUrl:()=>Un,buildTrayLeadValue:()=>Hn,buildTrayUrlValue:()=>zn,buildTrayWorkerUrl:()=>Pn,fetchRuntimeConfig:()=>Kn,hasStoredTrayJoinUrl:()=>Rn,normalizeTrayWorkerBaseUrl:()=>En,parseTrayJoinUrlValue:()=>In,parseTrayLeadValue:()=>Vn,parseTrayUrlValue:()=>Fn,resolveTrayRuntimeConfig:()=>Wn,resolveTrayWorkerBaseUrl:()=>Gn,storeTrayJoinUrl:()=>Ln}),An=`slicc.trayWorkerBaseUrl`,jn=`slicc.trayJoinUrl`,Mn=`https://www.sliccy.ai`,Nn=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Pn(e,t){let n=En(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Fn(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 Dn(t.toString());let i=En(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function In(e){let t=Fn(e);return t?.joinUrl?t:null}function Ln(e,t){let n=In(t);return n?(e.setItem(jn,n.joinUrl),e.setItem(An,n.workerBaseUrl),n):null}function Rn(e){return!!In(e?.getItem(`slicc.trayJoinUrl`)??null)}function zn(e,t){let n=En(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 Bn(e,t,n){return On(e,zn(t,n))}function Vn(e){return Fn(e)}function Hn(e,t){return zn(e,t)}function Un(e,t,n){return Bn(e,t,n)}async function Wn(e){let t=qn(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(jn,t.joinUrl),e.storage.setItem(An,t.workerBaseUrl)),t;let n=In(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(An,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Jn(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(jn,r.joinConfig.joinUrl),e.storage.setItem(An,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=En(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=En(e.envBaseUrl??null),s=En(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(An,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Gn(e){return(await Wn(e))?.workerBaseUrl??null}async function Kn(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function qn(e){try{let t=new URL(e),n=Fn(t.searchParams.get(Cn));if(n)return n;let r=Fn(t.searchParams.get(Tn));if(r)return r;let i=En(t.searchParams.get(wn));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:Dn(e)||null}catch{return null}}async function Jn(e){let t=await e();if(!t)return null;let n=In(t.trayJoinUrl??null);return{workerBaseUrl:En(t.trayWorkerBaseUrl??null),joinConfig:n}}var Yn={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function Xn(){return{...Yn}}var Zn=new Set;function Qn(e){return Zn.add(e),()=>{Zn.delete(e)}}function $n(){if(Zn.size!==0)for(let e of[...Zn])try{e({...Yn})}catch{}}function er(e){Yn={...e},$n()}function tr(e){Yn={...Yn,lastPingTime:e},$n()}function nr(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}var rr=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],ir=`chat`,ar=new Set(rr.map(e=>e.id));function or(e){return ar.has(e)}var sr=`slicc-electron-overlay:close`,cr=`slicc-electron-overlay:follower-status`;function lr(e){return e===`connected`?`connected`:e===`error`?`error`:`disconnected`}function ur(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`:pr(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function dr(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function fr(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&or(t)?t:ir}catch{return ir}}function pr(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function mr(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function hr(e){let{layout:t,isElectronOverlay:n,window:r,document:i}=e;if(!n)return;let a=fr(r.location.href);if(t.setActiveTab(a),r.parent===r?t.setShowElectronOverlayClose(null):t.setShowElectronOverlayClose(()=>{r.parent.postMessage({type:sr},`*`)}),r.parent!==r){let e=e=>{r.parent.postMessage({type:cr,status:lr(e.state)},`*`)};e(Xn()),Qn(e)}let o=i.createElement(`style`);o.id=`slicc-electron-overlay-runtime-style`,o.textContent=`
|
|
64
|
+
`).trim()}async function Zt(e){let t=Yt(Kt(e.messages));return Xt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Qt=Jt,$t=`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 en=`agent-sessions`,tn=1,nn=`sessions`;function rn(){return new Promise((e,t)=>{let n=indexedDB.open(en,tn);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(nn)||e.createObjectStore(nn,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var an=class{dbPromise=null;getDB(){return this.dbPromise||=rn(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(nn,`readwrite`).objectStore(nn).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(nn,`readonly`).objectStore(nn).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(nn,`readwrite`).objectStore(nn).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(nn,`readonly`).objectStore(nn).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(nn,`readwrite`).objectStore(nn).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()}}},on=d(`image-processor`),sn=3932160,eee=1568,cn=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function ln(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function un(e){return cn.has(e)}function dn(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 fn(e){if(!un(e.mimeType))return on.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=dn(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;on.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---Q_t1v4.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return on.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 on.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=eee/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),on.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>sn&&s!==`JPEG`?(on.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>sn&&(on.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 on.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>sn)return on.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 on.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return on.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 pn=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function mn(e){let{include:t,exclude:n}=pn;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var hn=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-CgCdlRkI.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-ChanTZ04.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-BKmH8Mr3.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),gn=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-5z7VkzHH.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-CyurjLPH.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-blAVF9vh.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-DAKEHVl_.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-Drlj8Lht.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),_n=new Map,vn=null;function yn(){return vn||(vn=(async()=>{for(let[e,t]of Object.entries(hn)){let e=await t();e.config&&mn(e.config.id)&&(_n.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(gn)){let e=await t();e.config&&(_n.set(e.config.id,e.config),e.register?.())}})(),vn)}function bn(e){return _n.get(e)}function xn(){return[..._n.keys()]}function Sn(e){_n.set(e.id,e)}var Cn=`tray`,wn=`trayWorkerUrl`,Tn=`lead`;function En(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 Dn(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=En(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function On(e,t){let n=new URL(e);return n.searchParams.delete(wn),n.searchParams.delete(Tn),n.searchParams.set(Cn,t),n.toString()}var kn=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>Mn,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Nn,TRAY_JOIN_STORAGE_KEY:()=>jn,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>Tn,TRAY_QUERY_PARAM:()=>Cn,TRAY_WORKER_QUERY_PARAM:()=>wn,TRAY_WORKER_STORAGE_KEY:()=>An,buildTrayLaunchUrl:()=>Bn,buildTrayLeadLaunchUrl:()=>Un,buildTrayLeadValue:()=>Hn,buildTrayUrlValue:()=>zn,buildTrayWorkerUrl:()=>Pn,fetchRuntimeConfig:()=>Kn,hasStoredTrayJoinUrl:()=>Rn,normalizeTrayWorkerBaseUrl:()=>En,parseTrayJoinUrlValue:()=>In,parseTrayLeadValue:()=>Vn,parseTrayUrlValue:()=>Fn,resolveTrayRuntimeConfig:()=>Wn,resolveTrayWorkerBaseUrl:()=>Gn,storeTrayJoinUrl:()=>Ln}),An=`slicc.trayWorkerBaseUrl`,jn=`slicc.trayJoinUrl`,Mn=`https://www.sliccy.ai`,Nn=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Pn(e,t){let n=En(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Fn(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 Dn(t.toString());let i=En(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function In(e){let t=Fn(e);return t?.joinUrl?t:null}function Ln(e,t){let n=In(t);return n?(e.setItem(jn,n.joinUrl),e.setItem(An,n.workerBaseUrl),n):null}function Rn(e){return!!In(e?.getItem(`slicc.trayJoinUrl`)??null)}function zn(e,t){let n=En(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 Bn(e,t,n){return On(e,zn(t,n))}function Vn(e){return Fn(e)}function Hn(e,t){return zn(e,t)}function Un(e,t,n){return Bn(e,t,n)}async function Wn(e){let t=qn(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(jn,t.joinUrl),e.storage.setItem(An,t.workerBaseUrl)),t;let n=In(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(An,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Jn(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(jn,r.joinConfig.joinUrl),e.storage.setItem(An,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=En(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=En(e.envBaseUrl??null),s=En(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(An,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Gn(e){return(await Wn(e))?.workerBaseUrl??null}async function Kn(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function qn(e){try{let t=new URL(e),n=Fn(t.searchParams.get(Cn));if(n)return n;let r=Fn(t.searchParams.get(Tn));if(r)return r;let i=En(t.searchParams.get(wn));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:Dn(e)||null}catch{return null}}async function Jn(e){let t=await e();if(!t)return null;let n=In(t.trayJoinUrl??null);return{workerBaseUrl:En(t.trayWorkerBaseUrl??null),joinConfig:n}}var Yn={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function Xn(){return{...Yn}}var Zn=new Set;function Qn(e){return Zn.add(e),()=>{Zn.delete(e)}}function $n(){if(Zn.size!==0)for(let e of[...Zn])try{e({...Yn})}catch{}}function er(e){Yn={...e},$n()}function tr(e){Yn={...Yn,lastPingTime:e},$n()}function nr(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}var rr=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],ir=`chat`,ar=new Set(rr.map(e=>e.id));function or(e){return ar.has(e)}var sr=`slicc-electron-overlay:close`,cr=`slicc-electron-overlay:follower-status`;function lr(e){return e===`connected`?`connected`:e===`error`?`error`:`disconnected`}function ur(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`:pr(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function dr(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function fr(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&or(t)?t:ir}catch{return ir}}function pr(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function mr(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function hr(e){let{layout:t,isElectronOverlay:n,window:r,document:i}=e;if(!n)return;let a=fr(r.location.href);if(t.setActiveTab(a),r.parent===r?t.setShowElectronOverlayClose(null):t.setShowElectronOverlayClose(()=>{r.parent.postMessage({type:sr},`*`)}),r.parent!==r){let e=e=>{r.parent.postMessage({type:cr,status:lr(e.state)},`*`)};e(Xn()),Qn(e)}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&&mr(e.data)&&t.setActiveTab(fr(`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 gr=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`workflow`,`scoop-notify`,`scoop-idle`,`scoop-wait`]);function _r(e){return e!=null&&gr.has(e)}var vr=`__slicc_binary__`,yr=`b64`;function br(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[vr]===yr&&typeof t.data==`string`}function xr(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 Sr(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 Cr(e){if(e instanceof Uint8Array)return{[vr]:yr,data:xr(e)};if(Array.isArray(e))return e.map(Cr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=Cr(r);return t}return e}function wr(e){if(br(e))return Sr(e.data);if(Array.isArray(e))return e.map(wr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=wr(r);return t}return e}var Tr=d(`panel-transport`);function Er(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Dr(){return{onMessage:e=>{let t=(t,n,r)=>(Er(t)&&e(wr(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=Cr(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{Tr.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}function Or(e){return e.headers.get(`x-proxy-error`)===`1`}async function kr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Ar(n,t)}function Ar(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 jr=`slicc-groups`,Mr=3,Nr={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},Pr=null;async function Fr(){if(Pr){let e=Object.values(Nr).every(e=>Pr.objectStoreNames.contains(e));if(Pr.version===Mr&&e)return Pr;Pr.close(),Pr=null}return new Promise((e,t)=>{let n=indexedDB.open(jr,Mr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(Nr.MESSAGES)){let e=t.createObjectStore(Nr.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(Nr.SESSIONS)||t.createObjectStore(Nr.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(Nr.TASKS)||t.createObjectStore(Nr.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(Nr.STATE)||t.createObjectStore(Nr.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(Nr.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(Nr.SCOOPS)||t.createObjectStore(Nr.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(Nr.WEBHOOKS)||t.createObjectStore(Nr.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(Nr.CRONTASKS)||t.createObjectStore(Nr.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{Pr=n.result,e(Pr)},n.onerror=()=>t(n.error)})}async function Ir(e,t=`readonly`){return(await Fr()).transaction(e,t).objectStore(e)}async function Lr(){let e=await Ir(Nr.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Rr(e){let t=await Ir(Nr.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 zr(e,t){let n=await Ir(Nr.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var Br=d(`tray-leader`),Vr=`leader-tray-session`,Hr=3e4,Ur=1e4,Wr=1e3,Gr=3e4,Kr=2,qr=20,Jr={state:`inactive`,session:null,error:null};function Yr(){return{...Jr,session:Jr.session?{...Jr.session}:null}}var Xr=new Set;function Zr(e){return Xr.add(e),()=>{Xr.delete(e)}}function Qr(e){if(Jr={...e,session:e.session?{...e.session}:null},Xr.size!==0)for(let e of[...Xr])try{e(Yr())}catch{}}var $r=class{key;constructor(e=Vr){this.key=e}async load(){return ei(await Rr(this.key))}async save(e){await zr(this.key,JSON.stringify(e))}async clear(){await zr(this.key,``)}};function ei(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 ti=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 $r,this.fetchImpl=e.fetchImpl??nee(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Hr,this.connectTimeoutMs=e.connectTimeoutMs??Ur;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??Wr,this.reconnectMaxDelayMs=n.maxDelayMs??Gr,this.reconnectBackoffMultiplier=n.backoffMultiplier??Kr,this.reconnectMaxAttempts=n.maxAttempts??qr,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();Br.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Br.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){Br.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;Br.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),Br.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,Br.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Br.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Br.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}),Br.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||!ri(t))throw t;return Br.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(Pn(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=tee(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Br.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=>{Br.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 ni.fromResponse(n);return await n.json()}},ni=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 ri(e){return e instanceof ni&&[403,404,410].includes(e.status)}function tee(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function nee(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(Or(a))throw Error(await kr(a));return a}}var ii=d(`offscreen-client`),ai=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){ii.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??Dr(),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}ii.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?(ii.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):ii.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;si(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){ii.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}-${oi()}`,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}-${oi()}`,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}-${oi()}`,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}-${oi()}`;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){ii.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&&si(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){ii.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 oi(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function si(e,t){Qr({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),er({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 ci(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 ai({onStatusChange:(e,n)=>li(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)=>ui(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 di();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 li(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 ui(e,t,n,r,i){if(_r(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 di(){let e=window.localStorage.getItem(jn);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(An)}}).catch(()=>{})}function fi(e,t){try{window.close()}catch{}e.setLocked(!0),t.showDetachedActiveOverlay()}function pi(e){let{client:t,layout:n,isDetachedSelf:r}=e;if(chrome.runtime.onMessage.addListener(e=>(!nr(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||r||fi(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 mi=`slicc:adobe-daily-uuid:`,hi=new Map;function gi(){return new Date().toISOString().slice(0,10)}function _i(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function vi(e){let t=gi(),n=_i(),r=mi+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=hi.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return hi.set(e,{uuid:a,date:t}),a}function yi(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??bi(t.state)??`Mirroring another browser.`}}function bi(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 xi(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 Si=null,Ci=!1;function wi(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Ti(){if(!Ci&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=wi();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(Si=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{ki(`js`,ji(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;ki(`js`,ji(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),Si=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),Ci=!0,Si&&Si(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function Ei(e,t){Si?.(`formsubmit`,{source:e,target:t})}function Di(e){Si?.(`viewblock`,{source:e})}function Oi(e){Si?.(`viewmedia`,{source:e})}function ki(e,t){Si?.(`error`,{source:e,target:t})}function Ai(e){Si?.(`signup`,{source:e})}function ji(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var Mi=`slicc_oauth_extra_domains`;function Ni(e){try{let t=e.getItem(Mi);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 Pi(e,t){try{e.setItem(Mi,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 Fi=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>Ri,getPanelRpcClient:()=>Bi,hasLocalDom:()=>Vi,installPanelRpcHandler:()=>zi,panelRpcChannelName:()=>Li}),Ii=`slicc-panel-rpc`;function Li(e){return e?`${Ii}:${e}`:Ii}function Ri(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Li(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 zi(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Li(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 Bi(){return globalThis.__slicc_panelRpc??null}function Vi(){return typeof window<`u`&&typeof document<`u`}var Hi=e({__test__:()=>ra,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Ki,addAccount:()=>wa,applyProviderDefaults:()=>fa,clearAllSettings:()=>Za,clearApiKey:()=>Ga,clearBaseUrl:()=>Ja,clearSelectedProvider:()=>Ha,describeInvalidJoinUrl:()=>xi,downloadProviders:()=>Xa,exportProviders:()=>Ya,getAccounts:()=>_a,getAllAvailableModels:()=>ga,getAllExtraOAuthDomains:()=>xa,getApiKey:()=>Ua,getApiKeyForProvider:()=>Na,getApiVersionForProvider:()=>Ia,getAvailableProviders:()=>ia,getBaseUrl:()=>Ka,getBaseUrlForProvider:()=>Pa,getDeploymentForProvider:()=>Fa,getExtraOAuthDomains:()=>va,getOAuthAccountInfo:()=>la,getProviderConfig:()=>oa,getProviderModels:()=>ca,getRawApiKeyForProvider:()=>Ma,getSelectedModelId:()=>La,getSelectedProvider:()=>Ba,isModelHiddenFromPicker:()=>ma,logoutOAuthAccount:()=>Da,maskOAuthTokenWithRetry:()=>Oa,migrateLegacyAuthOnlySelection:()=>ta,persistOAuthMaskViaServiceWorker:()=>ka,providerOffersLlmModels:()=>aa,removeAccount:()=>Ea,resolveCurrentModel:()=>to,resolveModelById:()=>eo,saveOAuthAccount:()=>Aa,setApiKey:()=>Wa,setBaseUrl:()=>qa,setExtraOAuthDomains:()=>ya,setExtraOAuthDomainsAsync:()=>ba,setSelectedModelId:()=>Ra,setSelectedProvider:()=>Va,showProviderSettings:()=>ao}),Ui=l,Wi=u;function Gi(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function Ki(e,t){return qi(e,t)}function qi(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){da.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 Ji=`slicc_accounts`,Yi=`selected-model`,Xi=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Zi=new Set([`github`]);function Qi(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!mn(e)}var $i=!1;function ea(){if(!$i){$i=!0;for(let e of Xi)try{localStorage.removeItem(e)}catch{}ta()}}function ta(){try{let e=localStorage.getItem(Yi);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Zi.has(n)||Qi(n))&&localStorage.removeItem(Yi)}}}catch{}try{let e=localStorage.getItem(Ji);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`&&Qi(e.providerId)));n.length!==t.length&&localStorage.setItem(Ji,JSON.stringify(n))}catch{}}function na(){$i=!1}var ra={_resetLegacyCleanup:na};function ia(){let e=s().filter(mn),t=xn();return[...new Set([...e,...t])].filter(e=>!bn(e)?.hidden)}function aa(e){try{if(ca(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=bn(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function oa(e){return bn(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function sa(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 ca(e){try{if(e===`bedrock-camp`){let e=a(Pa(`bedrock-camp`));return Wi(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=oa(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return da.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 Wi(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=$a(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&sa(o,s),sa(o,n),o})}if(t.isOAuth){let n=Wi(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&sa(i,a),i})}return Wi(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return da.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function la(e){let t=_a().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 ua=Object.assign({})[`/packages/webapp/providers.json`]??[],da=d(`provider-settings`);function fa(e=ua){if(e.length===0||_a().length>0)return;let t=new Set(ia());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){da.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}wa(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Yi)&&localStorage.setItem(Yi,`${n.providerId}:${n.model}`)}var pa=[/haiku/i];function ma(e){return pa.some(t=>t.test(e))}function ha(e){return e.filter(e=>!ma(e.id))}function ga(){let e=_a();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=oa(n.providerId);if(e.hidden||Qi(n.providerId))continue;let r=ha(ca(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 _a(){ea();let e=localStorage.getItem(Ji);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 va(e){return Ni(localStorage)[e]??[]}function ya(e,t){let n=Ni(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,Pi(localStorage,n)}async function ba(e,t){if(Vi()){ya(e,t);return}let n=Bi();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{Pi(localStorage,r)}catch(t){da.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function xa(){return Ni(localStorage)}function Sa(e){localStorage.setItem(Ji,JSON.stringify(e))}async function Ca(e){if(Vi()){Sa(e);return}let t=Bi();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(Ji,r)}catch(e){da.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function wa(e,t,n,r,i){let a=_a().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),Sa(a)}async function Ta(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&&da.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&da.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&&da.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){da.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Ea(e){let t=_a().find(t=>t.providerId===e),n=oa(e);t&&n?.isOAuth&&await Da(e),await Ta(e),await Ca(_a().filter(t=>t.providerId!==e));let r=localStorage.getItem(Yi)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Yi)}async function Da(e){let t=_a().find(t=>t.providerId===e);if(!t)return;let n=oa(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){da.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-CczC27lE.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{da.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await Ca(_a().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Ta(e)}}async function Oa(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 ka(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await Oa(()=>t.sendMaskRequest(r),n);if(!i){da.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 Aa(e){let t=_a().find(t=>t.providerId===e.providerId),n=_a().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 Ca(n);let r=oa(e.providerId)?.oauthTokenDomains??[],i=va(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 ka({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&&da.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&da.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:_a,saveAccounts:Ca});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=_a(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await Ca(r))}else da.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){da.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var ja=`local`;function Ma(e){let t=_a().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function Na(e){let t=_a().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(oa(e).optionalApiKey?ja:null):null}function Pa(e){return _a().find(t=>t.providerId===e)?.baseUrl??null}function Fa(e){return _a().find(t=>t.providerId===e)?.deployment??null}function Ia(e){return _a().find(t=>t.providerId===e)?.apiVersion??null}function La(){let e=localStorage.getItem(Yi)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Ra(e){if(e.includes(`:`))localStorage.setItem(Yi,e);else{let t=Ba();localStorage.setItem(Yi,`${t}:${e}`)}}function za(){return localStorage.getItem(Yi)||``}function Ba(){let e=za(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=_a();return n.length>0?n[0].providerId:`anthropic`}function Va(e){let t=La();localStorage.setItem(Yi,`${e}:${t}`)}function Ha(){let e=La();localStorage.setItem(Yi,e)}function Ua(){return Na(Ba())}function Wa(e){let t=Ba();wa(t,e,Pa(t)??void 0)}async function Ga(){await Ea(Ba())}function Ka(){return Pa(Ba())}function qa(e){let t=Ba(),n=Ma(t);n&&wa(t,n,e||void 0)}function Ja(){let e=Ba(),t=Ma(e);t&&wa(e,t)}function Ya(){let e=_a(),t=Ba(),n=La();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 Xa(){let e=JSON.stringify(Ya(),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 Za(){let e=_a();await Promise.allSettled(e.map(e=>Ea(e.providerId))),localStorage.removeItem(Ji),localStorage.removeItem(Yi);for(let e of Xi)localStorage.removeItem(e)}function Qa(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function $a(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Qa(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function eo(e){if(!e)return to();let t=Ba(),n=Pa(t),r=oa(t);try{let i=Ui(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=ca(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(da.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=ca(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:$a(t,e,n)}return to()}}function to(){let e=Ba(),t=La(),n=Pa(e),r=ca(e),i=oa(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=oa(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Ui(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){da.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?$a(e,o,n):Ui(`anthropic`,`claude-sonnet-4-0`)}}function no(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function ro(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 io={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 ao(e){return Ai(`button`),new Promise(t=>{let n=localStorage.getItem(Ji)??``,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(Ji)??``)!==n)):s()};e?.startInAddAccount?c():_a().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=_a(),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=oa(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=no(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(ro(io.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(ro(io.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-CczC27lE.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(ro(io.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 Da(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(ro(io.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 Ea(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`,()=>Xa()),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=Xn(),_=g.state!==`inactive`,v=Rn(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(Ji)??``)!==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=oa(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=ia(),r=new Set(_a().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=oa(e).name,r=oa(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(!aa(t))continue;let n=oa(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=oa(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=_a().some(t=>t.providerId===e),r=Pa(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()&&wa(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-CczC27lE.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-CczC27lE.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await Ea(e)}catch{}da.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=oa(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=oa(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}wa(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=_a().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(Ji)??``)!==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=oa(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=Ln(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(Gi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else qi(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=Ln(window.localStorage,e);if(!n){f.textContent=xi(e),f.style.display=``,d.focus();return}if(Gi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else qi(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 oo=d(`cone-memory-budget`),so=4e3,co=2e3,lo=1.25,uo=`/workspace/CLAUDE.md`,fo=`/sessions/index.json`,po=4096,mo=/^## Auto-extracted/m,ho=`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&&mr(e.data)&&t.setActiveTab(fr(`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 gr=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`workflow`,`scoop-notify`,`scoop-idle`,`scoop-wait`]);function _r(e){return e!=null&&gr.has(e)}var vr=`__slicc_binary__`,yr=`b64`;function br(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[vr]===yr&&typeof t.data==`string`}function xr(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 Sr(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 Cr(e){if(e instanceof Uint8Array)return{[vr]:yr,data:xr(e)};if(Array.isArray(e))return e.map(Cr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=Cr(r);return t}return e}function wr(e){if(br(e))return Sr(e.data);if(Array.isArray(e))return e.map(wr);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=wr(r);return t}return e}var Tr=d(`panel-transport`);function Er(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Dr(){return{onMessage:e=>{let t=(t,n,r)=>(Er(t)&&e(wr(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=Cr(e);chrome.runtime.sendMessage({source:`panel`,payload:n}).catch(e=>{Tr.error(`failed to send to offscreen`,{error:e instanceof Error?e.message:String(e)})})}}}function Or(e){return e.headers.get(`x-proxy-error`)===`1`}async function kr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Ar(n,t)}function Ar(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 jr=`slicc-groups`,Mr=3,Nr={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},Pr=null;async function Fr(){if(Pr){let e=Object.values(Nr).every(e=>Pr.objectStoreNames.contains(e));if(Pr.version===Mr&&e)return Pr;Pr.close(),Pr=null}return new Promise((e,t)=>{let n=indexedDB.open(jr,Mr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(Nr.MESSAGES)){let e=t.createObjectStore(Nr.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(Nr.SESSIONS)||t.createObjectStore(Nr.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(Nr.TASKS)||t.createObjectStore(Nr.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(Nr.STATE)||t.createObjectStore(Nr.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(Nr.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(Nr.SCOOPS)||t.createObjectStore(Nr.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(Nr.WEBHOOKS)||t.createObjectStore(Nr.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(Nr.CRONTASKS)||t.createObjectStore(Nr.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{Pr=n.result,e(Pr)},n.onerror=()=>t(n.error)})}async function Ir(e,t=`readonly`){return(await Fr()).transaction(e,t).objectStore(e)}async function Lr(){let e=await Ir(Nr.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Rr(e){let t=await Ir(Nr.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 zr(e,t){let n=await Ir(Nr.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}var Br=d(`tray-leader`),Vr=`leader-tray-session`,Hr=3e4,Ur=1e4,Wr=1e3,Gr=3e4,Kr=2,qr=20,Jr={state:`inactive`,session:null,error:null};function Yr(){return{...Jr,session:Jr.session?{...Jr.session}:null}}var Xr=new Set;function Zr(e){return Xr.add(e),()=>{Xr.delete(e)}}function Qr(e){if(Jr={...e,session:e.session?{...e.session}:null},Xr.size!==0)for(let e of[...Xr])try{e(Yr())}catch{}}var $r=class{key;constructor(e=Vr){this.key=e}async load(){return ei(await Rr(this.key))}async save(e){await zr(this.key,JSON.stringify(e))}async clear(){await zr(this.key,``)}};function ei(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 ti=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 $r,this.fetchImpl=e.fetchImpl??nee(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Hr,this.connectTimeoutMs=e.connectTimeoutMs??Ur;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??Wr,this.reconnectMaxDelayMs=n.maxDelayMs??Gr,this.reconnectBackoffMultiplier=n.backoffMultiplier??Kr,this.reconnectMaxAttempts=n.maxAttempts??qr,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();Br.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Br.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){Br.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;Br.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),Br.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,Br.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Br.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Br.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}),Br.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||!ri(t))throw t;return Br.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(Pn(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=tee(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Br.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=>{Br.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 ni.fromResponse(n);return await n.json()}},ni=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 ri(e){return e instanceof ni&&[403,404,410].includes(e.status)}function tee(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function nee(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(Or(a))throw Error(await kr(a));return a}}var ii=d(`offscreen-client`),ai=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){ii.error(`onScoopSelected handler threw`,{error:e instanceof Error?e.message:String(e)})}}locked=!1;constructor(e,t){this.callbacks=e,this.transport=t??Dr(),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}ii.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?(ii.warn(`Offscreen restarted — re-requesting state`),this.ready=!1):ii.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;si(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){ii.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}-${oi()}`,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}-${oi()}`,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}-${oi()}`,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}-${oi()}`;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){ii.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&&si(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){ii.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 oi(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function si(e,t){Qr({state:e.state,error:e.error,reconnectAttempts:e.reconnectAttempts,session:e.session?{...e.session}:null}),er({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 ci(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 ai({onStatusChange:(e,n)=>li(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)=>ui(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 di();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 li(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 ui(e,t,n,r,i){if(_r(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 di(){let e=window.localStorage.getItem(jn);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(An)}}).catch(()=>{})}function fi(e,t){try{window.close()}catch{}e.setLocked(!0),t.showDetachedActiveOverlay()}function pi(e){let{client:t,layout:n,isDetachedSelf:r}=e;if(chrome.runtime.onMessage.addListener(e=>(!nr(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||r||fi(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 mi=`slicc:adobe-daily-uuid:`,hi=new Map;function gi(){return new Date().toISOString().slice(0,10)}function _i(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function vi(e){let t=gi(),n=_i(),r=mi+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=hi.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return hi.set(e,{uuid:a,date:t}),a}function yi(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??bi(t.state)??`Mirroring another browser.`}}function bi(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 xi(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 Si=null,Ci=!1;function wi(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Ti(){if(!Ci&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=wi();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(Si=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{ki(`js`,ji(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;ki(`js`,ji(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),Si=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),Ci=!0,Si&&Si(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function Ei(e,t){Si?.(`formsubmit`,{source:e,target:t})}function Di(e){Si?.(`viewblock`,{source:e})}function Oi(e){Si?.(`viewmedia`,{source:e})}function ki(e,t){Si?.(`error`,{source:e,target:t})}function Ai(e){Si?.(`signup`,{source:e})}function ji(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var Mi=`slicc_oauth_extra_domains`;function Ni(e){try{let t=e.getItem(Mi);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 Pi(e,t){try{e.setItem(Mi,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 Fi=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>Ri,getPanelRpcClient:()=>Bi,hasLocalDom:()=>Vi,installPanelRpcHandler:()=>zi,panelRpcChannelName:()=>Li}),Ii=`slicc-panel-rpc`;function Li(e){return e?`${Ii}:${e}`:Ii}function Ri(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Li(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 zi(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Li(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 Bi(){return globalThis.__slicc_panelRpc??null}function Vi(){return typeof window<`u`&&typeof document<`u`}var Hi=e({__test__:()=>ra,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Ki,addAccount:()=>wa,applyProviderDefaults:()=>fa,clearAllSettings:()=>Za,clearApiKey:()=>Ga,clearBaseUrl:()=>Ja,clearSelectedProvider:()=>Ha,describeInvalidJoinUrl:()=>xi,downloadProviders:()=>Xa,exportProviders:()=>Ya,getAccounts:()=>_a,getAllAvailableModels:()=>ga,getAllExtraOAuthDomains:()=>xa,getApiKey:()=>Ua,getApiKeyForProvider:()=>Na,getApiVersionForProvider:()=>Ia,getAvailableProviders:()=>ia,getBaseUrl:()=>Ka,getBaseUrlForProvider:()=>Pa,getDeploymentForProvider:()=>Fa,getExtraOAuthDomains:()=>va,getOAuthAccountInfo:()=>la,getProviderConfig:()=>oa,getProviderModels:()=>ca,getRawApiKeyForProvider:()=>Ma,getSelectedModelId:()=>La,getSelectedProvider:()=>Ba,isModelHiddenFromPicker:()=>ma,logoutOAuthAccount:()=>Da,maskOAuthTokenWithRetry:()=>Oa,migrateLegacyAuthOnlySelection:()=>ta,persistOAuthMaskViaServiceWorker:()=>ka,providerOffersLlmModels:()=>aa,removeAccount:()=>Ea,resolveCurrentModel:()=>to,resolveModelById:()=>eo,saveOAuthAccount:()=>Aa,setApiKey:()=>Wa,setBaseUrl:()=>qa,setExtraOAuthDomains:()=>ya,setExtraOAuthDomainsAsync:()=>ba,setSelectedModelId:()=>Ra,setSelectedProvider:()=>Va,showProviderSettings:()=>ao}),Ui=l,Wi=u;function Gi(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function Ki(e,t){return qi(e,t)}function qi(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){da.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 Ji=`slicc_accounts`,Yi=`selected-model`,Xi=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Zi=new Set([`github`]);function Qi(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!mn(e)}var $i=!1;function ea(){if(!$i){$i=!0;for(let e of Xi)try{localStorage.removeItem(e)}catch{}ta()}}function ta(){try{let e=localStorage.getItem(Yi);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Zi.has(n)||Qi(n))&&localStorage.removeItem(Yi)}}}catch{}try{let e=localStorage.getItem(Ji);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`&&Qi(e.providerId)));n.length!==t.length&&localStorage.setItem(Ji,JSON.stringify(n))}catch{}}function na(){$i=!1}var ra={_resetLegacyCleanup:na};function ia(){let e=s().filter(mn),t=xn();return[...new Set([...e,...t])].filter(e=>!bn(e)?.hidden)}function aa(e){try{if(ca(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=bn(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function oa(e){return bn(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function sa(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 ca(e){try{if(e===`bedrock-camp`){let e=a(Pa(`bedrock-camp`));return Wi(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=oa(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return da.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 Wi(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=$a(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&sa(o,s),sa(o,n),o})}if(t.isOAuth){let n=Wi(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&sa(i,a),i})}return Wi(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return da.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function la(e){let t=_a().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 ua=Object.assign({})[`/packages/webapp/providers.json`]??[],da=d(`provider-settings`);function fa(e=ua){if(e.length===0||_a().length>0)return;let t=new Set(ia());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){da.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}wa(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(Yi)&&localStorage.setItem(Yi,`${n.providerId}:${n.model}`)}var pa=[/haiku/i];function ma(e){return pa.some(t=>t.test(e))}function ha(e){return e.filter(e=>!ma(e.id))}function ga(){let e=_a();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=oa(n.providerId);if(e.hidden||Qi(n.providerId))continue;let r=ha(ca(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 _a(){ea();let e=localStorage.getItem(Ji);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 va(e){return Ni(localStorage)[e]??[]}function ya(e,t){let n=Ni(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,Pi(localStorage,n)}async function ba(e,t){if(Vi()){ya(e,t);return}let n=Bi();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{Pi(localStorage,r)}catch(t){da.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function xa(){return Ni(localStorage)}function Sa(e){localStorage.setItem(Ji,JSON.stringify(e))}async function Ca(e){if(Vi()){Sa(e);return}let t=Bi();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(Ji,r)}catch(e){da.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function wa(e,t,n,r,i){let a=_a().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),Sa(a)}async function Ta(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&&da.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&da.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&&da.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){da.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Ea(e){let t=_a().find(t=>t.providerId===e),n=oa(e);t&&n?.isOAuth&&await Da(e),await Ta(e),await Ca(_a().filter(t=>t.providerId!==e));let r=localStorage.getItem(Yi)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Yi)}async function Da(e){let t=_a().find(t=>t.providerId===e);if(!t)return;let n=oa(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){da.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-BnJV8LqU.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{da.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await Ca(_a().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Ta(e)}}async function Oa(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 ka(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await Oa(()=>t.sendMaskRequest(r),n);if(!i){da.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 Aa(e){let t=_a().find(t=>t.providerId===e.providerId),n=_a().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 Ca(n);let r=oa(e.providerId)?.oauthTokenDomains??[],i=va(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 ka({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&&da.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&da.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:_a,saveAccounts:Ca});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=_a(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await Ca(r))}else da.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){da.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var ja=`local`;function Ma(e){let t=_a().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function Na(e){let t=_a().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(oa(e).optionalApiKey?ja:null):null}function Pa(e){return _a().find(t=>t.providerId===e)?.baseUrl??null}function Fa(e){return _a().find(t=>t.providerId===e)?.deployment??null}function Ia(e){return _a().find(t=>t.providerId===e)?.apiVersion??null}function La(){let e=localStorage.getItem(Yi)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Ra(e){if(e.includes(`:`))localStorage.setItem(Yi,e);else{let t=Ba();localStorage.setItem(Yi,`${t}:${e}`)}}function za(){return localStorage.getItem(Yi)||``}function Ba(){let e=za(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=_a();return n.length>0?n[0].providerId:`anthropic`}function Va(e){let t=La();localStorage.setItem(Yi,`${e}:${t}`)}function Ha(){let e=La();localStorage.setItem(Yi,e)}function Ua(){return Na(Ba())}function Wa(e){let t=Ba();wa(t,e,Pa(t)??void 0)}async function Ga(){await Ea(Ba())}function Ka(){return Pa(Ba())}function qa(e){let t=Ba(),n=Ma(t);n&&wa(t,n,e||void 0)}function Ja(){let e=Ba(),t=Ma(e);t&&wa(e,t)}function Ya(){let e=_a(),t=Ba(),n=La();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 Xa(){let e=JSON.stringify(Ya(),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 Za(){let e=_a();await Promise.allSettled(e.map(e=>Ea(e.providerId))),localStorage.removeItem(Ji),localStorage.removeItem(Yi);for(let e of Xi)localStorage.removeItem(e)}function Qa(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function $a(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Qa(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function eo(e){if(!e)return to();let t=Ba(),n=Pa(t),r=oa(t);try{let i=Ui(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=ca(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(da.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=ca(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:$a(t,e,n)}return to()}}function to(){let e=Ba(),t=La(),n=Pa(e),r=ca(e),i=oa(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=oa(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=Ui(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){da.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?$a(e,o,n):Ui(`anthropic`,`claude-sonnet-4-0`)}}function no(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function ro(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 io={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 ao(e){return Ai(`button`),new Promise(t=>{let n=localStorage.getItem(Ji)??``,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(Ji)??``)!==n)):s()};e?.startInAddAccount?c():_a().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=_a(),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=oa(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=no(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(ro(io.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(ro(io.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-BnJV8LqU.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(ro(io.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 Da(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(ro(io.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 Ea(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`,()=>Xa()),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=Xn(),_=g.state!==`inactive`,v=Rn(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(Ji)??``)!==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=oa(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=ia(),r=new Set(_a().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=oa(e).name,r=oa(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(!aa(t))continue;let n=oa(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=oa(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=_a().some(t=>t.providerId===e),r=Pa(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()&&wa(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-BnJV8LqU.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-BnJV8LqU.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await Ea(e)}catch{}da.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=oa(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=oa(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}wa(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=_a().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(Ji)??``)!==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=oa(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=Ln(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(Gi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else qi(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=Ln(window.localStorage,e);if(!n){f.textContent=xi(e),f.style.display=``,d.focus();return}if(Gi()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else qi(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 oo=d(`cone-memory-budget`),so=4e3,co=2e3,lo=1.25,uo=`/workspace/CLAUDE.md`,fo=`/sessions/index.json`,po=4096,mo=/^## Auto-extracted/m,ho=`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
|
`,PH=`
|
|
596
596
|
-->`;function FH(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 IH(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=`${NH}${JSON.stringify(FH(e.messages)).replace(/-->/g,`-- >`)}${PH}\n\n`,r=`# ${e.title}\n\n`;return t+n+r+SH(e.messages)}function LH(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 RH(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 zH(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function BH(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}async function VH(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function HH(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 VH(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 bo({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){wH.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function UH(e,t){let n=[];try{let t=await e.readFile(kH,{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(kH,JSON.stringify(r,null,2))}async function WH(e){try{let t=await e.readFile(kH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function GH(e){return`${OH}/${e.filename}`}async function KH(e){return(await WH(e)).filter(e=>e.pendingEnrichment===!0)}async function qH(e,t,n){if(!t.pendingEnrichment)return null;let r=GH(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`?wH.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):wH.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=ZH(i).messages}catch(e){return wH.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 wH.info(`Pending archive has no messages — skipping enrichment`,{filename:t.filename}),null;let o=MH(a),s=``;try{s=await Zt({messages:o,instruction:Qt,model:n.model,apiKey:n.apiKey,maxTokens:EH,headers:n.headers})}catch(e){return wH.warn(`Enrichment memory call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let c=``;try{c=LH(await Zt({messages:o,instruction:$t,model:n.model,apiKey:n.apiKey,maxTokens:DH,headers:n.headers}))}catch(e){return wH.warn(`Enrichment title call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(!c)return wH.info(`Enrichment title call returned empty — entry stays pending`,{filename:t.filename}),null;let l=s.trim();if(l&&l!==`NONE`)try{await HH(e,l,`pending-enrichment`,{model:n.model,apiKey:n.apiKey,headers:n.headers})}catch(e){wH.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}let u=JH(i,c),d=`${t.frozenAt.replace(/[:.]/g,`-`)}-${zH(c)}.md`,f=`${OH}/${d}`;try{await VH(e,OH),await e.writeFile(f,u)}catch(e){return wH.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 XH(e,t.filename,p)}catch(e){return wH.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){wH.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:r,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return wH.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:d,title:c}),p}function JH(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 YH=Promise.resolve();async function XH(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(kH,{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(kH,JSON.stringify(a,null,2))},i=YH.then(r,r);return YH=i.then(()=>void 0,()=>void 0),i}function ZH(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 QH=d(`new-session`),$H=`ui-new-session`;async function eU(e){let t=Ua()??void 0,n;try{n=to()}catch(e){QH.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let r=n?.provider===`adobe`?{"X-Session-Id":vi($H)}:void 0,i=new eV;try{await i.init()}catch(e){return QH.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}return AH({sessionStore:i,vfs:e.vfs,model:n,apiKey:t,headers:r})}async function tU(e){let t=new eV;try{await t.init()}catch(e){return QH.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return AH({sessionStore:t,vfs:e.vfs,mode:`quick`})}async function nU(e){let t={found:0,enriched:[]},n=[];try{n=await KH(e.vfs)}catch(e){return QH.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=Ua()??void 0,i;try{i=to()}catch(e){return QH.info(`No active model — skipping background enrichment`,{error:e instanceof Error?e.message:String(e)}),t}if(!r||!i)return QH.info(`LLM credentials unavailable — leaving pending entries for later boot`,{pending:n.length}),t;let a=i.provider===`adobe`?{"X-Session-Id":vi($H)}:void 0;for(let o of n)try{let n=await qH(e.vfs,o,{model:i,apiKey:r,headers:a});n&&t.enriched.push(n)}catch(e){QH.warn(`Background enrichment threw (entry stays pending)`,{filename:o.filename,error:e instanceof Error?e.message:String(e)})}return QH.info(`Background enrichment pass complete`,{found:t.found,enriched:t.enriched.length}),t}function rU(e,t={}){if(t.isWriter===!1){QH.info(`Background enrichment skipped (OPFS follower — read-only tab)`);return}let n=()=>{nU({vfs:e}).catch(()=>{})},r=globalThis.requestIdleCallback;typeof r==`function`?r(n):setTimeout(n,0)}var iU=d(`boot/ui-fixture`);function aU(){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 oU(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),iU.info(`Loaded UI fixture session for design iteration`)}async function sU(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(()=>YG);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-D68JEESV.js`);return{installNukeReloadListener:e}},[]);l(),aU()&&await oU(n.panels.chat),Ti().catch(()=>{}),rU(a)}async function cU(e){let{layout:t,log:n}=e,{PanelFollowerSprinkleProxy:r}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-WYPpVMY-.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:i}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>ooe);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 lU(e,t){return!e||typeof e!=`object`||e.type!==t?null:e}var uU=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=lU(e.payload,`leader-mode-changed`);if(t){this.listeners.onLeaderModeChange?.(t.active);return}let n=lU(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 dU(e){let{sender:t,subscriber:n,sprinkleManager:r,client:i,chat:a,log:o}=e,s=e._proxyFactory??((e,t,n)=>new uU(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 fU(e){let t=dU({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 pU(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 mU(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 hU(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 gU(e){let{OnboardingOrchestrator:t}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-D-GBXYsj.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:()=>hU(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 _U(t,n??null,e)}),n),peek:()=>n,buildCatalogue:()=>hU(e.providers)}}async function _U(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-CczC27lE.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-CczC27lE.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await r.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:mU(e,r,n.providers.getProviderModels,n.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var vU=300*1e3,yU=Symbol(`mount:timeout`),bU=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 yU;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(yU)},vU)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===yU)throw Error(`mount: timed out after ${Math.round(vU/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 xU(){return crypto.randomUUID()}var SU=`slicc-pending-mount`,CU=`pendingMount`;async function wU(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(SU,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,CU),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function TU(e,t){let n;try{n=await new Promise((e,t)=>{let n=indexedDB.open(SU,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(CU);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(i){r.objectStore(`handles`).delete(CU),await new Promise(e=>r.oncomplete=()=>e());let n=`/mnt/${i.name}`,a=bU.fromHandle(i,{mountId:xU()});await e.mount(n,a),t.info(`Mounted folder from welcome onboarding`,{name:i.name,path:n})}n.close()}var EU=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),DU=`slicc:welcome-flow-fired`;function OU(){try{let e=typeof localStorage<`u`?localStorage.getItem(DU):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 kU(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(DU,JSON.stringify([...e]))}catch{}}function AU(e,t,n,r,i){if(EU.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}EU.has(e)&&(t.add(e),kU(t)),n()}var jU=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function MU(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&&EU.has(f)){if(t.has(f))return d.debug(`Suppressing duplicate welcome lick (${l})`,{action:f}),!0;t.add(f),kU(t)}if(!f||!jU.has(f))return!1;let p=e.body;return NU(f,p,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:u,log:d})}}function NU(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 PU({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 PU(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),FU(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function FU(e,t,n){let{hasOnboardingFinalLickInHistory:r}=await o(async()=>{let{hasOnboardingFinalLickInHistory:e}=await Promise.resolve().then(()=>_q);return{hasOnboardingFinalLickInHistory:e}},void 0);if(await r())return;let i=e?await IU(e):{},{getSelectedModelId:a,getProviderConfig:s,getProviderModels:c}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>Hi);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 IU(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 LU(e){let{client:t,layout:n,localFs:r,firedWelcomeActions:i,log:a}=e,s=await o(()=>Promise.resolve().then(()=>Hi),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 gU({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=>QI(e),onFireFinalLick:e=>{pU(t),AU(String(e?.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-ext`,a)}}),p=MU({firedWelcomeActions:i,getAccounts:c,getProviderConfig:l,resolveDeviceCodeDecision:d,getOnboardingOrchestrator:()=>f.get(),applyPendingMount:()=>TU(r,a),fastForward:{fire:e=>{AU(String(e.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-ext`,a)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return l(e)}catch{return null}})();QI({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 RU=`/tmp`;function zU(e){let t=e.replace(/[\\/:]+/g,`_`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);return t.length>0?t:`attachment`}function BU(){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 VU(e,t,n,r=BU()){let i=zU(e);return`${RU}/attachment-${t.toString(36)}-${n.toString(36)}-${r}-${i}`}function HU(e){let t=0;return async n=>{let r=new Uint8Array(await n.arrayBuffer());t+=1;let i=VU(n.name,Date.now(),t);return await e.mkdir(RU,{recursive:!0}).catch(()=>{}),await e.writeFile(i,r),i}}function UU(e){let{client:t,layout:n,localFs:r,writableFs:i,selectScoop:a,getSelectedScoop:o,log:s}=e;t.setLocalFS(r),n.panels.chat.setAttachmentWriter(HU(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?eo(t):to();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 tU({vfs:i})}catch(e){s.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await eU({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 WU(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 GU(e){return e.split(`/`).pop()||`data`}function KU(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 qU=5*1024*1024,JU=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=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(/^\/+/,``)}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=WU(GU(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 YU(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 XU=25*1024*1024,ZU=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=YU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??XU,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}},QU=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function $U(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>Hi);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new QU(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var eW=`slicc-mount-cache`,tW=`listings`,nW=`bodies`,rW=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??eW}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(tW)||e.createObjectStore(tW),e.objectStoreNames.contains(nW)||e.createObjectStore(nW)},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(tW,`readonly`).objectStore(tW).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(tW,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(tW).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(tW,`readwrite`);i.objectStore(tW).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(nW,`readonly`).objectStore(nW).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,nW,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,nW,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(nW,`readwrite`);i.objectStore(nW).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(tW),n(nW)])}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(nW,`readonly`).objectStore(nW),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(nW,`readwrite`),i=r.objectStore(nW);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function iW(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function aW(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 oW(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var sW=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),cW=new Set([101,103,204,205,304]);function lW(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`||sW.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=aW(e.bodyBase64)}catch(e){throw new E(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=cW.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function uW(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 dW(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 fW(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?oW(t.body):void 0};return lW(iW()?await dW(`mount.s3-sign-and-forward`,n):await uW(`/api/s3-sign-and-forward`,n))}}function pW(e){let t=e?.getImsToken??(async()=>(await $U()).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?oW(e.body):void 0};return lW(iW()?await dW(`mount.da-sign-and-forward`,r):await uW(`/api/da-sign-and-forward`,r))}}var mW=e({DaMountBackend:()=>JU,RemoteMountCache:()=>rW,S3MountBackend:()=>ZU,makeSignedFetchDa:()=>pW,makeSignedFetchS3:()=>fW}),hW=`slicc-mount-table`,gW=2,_W=`mounts`,vW=`mount-entries`;function yW(){return new Promise((e,t)=>{let n=indexedDB.open(hW,gW);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(_W)||t.createObjectStore(_W),t.objectStoreNames.contains(vW)||t.createObjectStore(vW),r<2){let e=n.transaction,t=e.objectStore(_W),r=e.objectStore(vW),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:xU(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function bW(e,t){let n=await yW();try{let r=e.descriptor.kind===`local`&&t?[_W,vW]:[vW],i=n.transaction(r,`readwrite`);i.objectStore(vW).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(_W).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 xW(e){let t=await yW();try{let n=t.transaction([_W,vW],`readwrite`);n.objectStore(vW).delete(e),n.objectStore(_W).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 SW(){let e=await yW();try{return await new Promise((t,n)=>{let r=e.transaction(vW,`readonly`),i=r.objectStore(vW).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 CW(e){let t=await yW();try{return await new Promise((n,r)=>{let i=t.transaction(_W,`readonly`).objectStore(_W).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function wW(){let e=await yW();try{let t=e.transaction([_W,vW],`readwrite`);t.objectStore(_W).clear(),t.objectStore(vW).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 TW(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await CW(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=bU.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 rW({mountId:o.mountId,ttlMs:3e4}),a=new ZU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:fW(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 rW({mountId:o.mountId,ttlMs:3e4}),a=new JU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:pW()});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 EW(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 DW=Uint8Array,OW=Uint16Array,kW=Int32Array,AW=new DW([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]),jW=new DW([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]),MW=new DW([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),NW=function(e,t){for(var n=new OW(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new kW(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}},PW=NW(AW,2),FW=PW.b,IW=PW.r;FW[28]=258,IW[258]=28;for(var LW=NW(jW,0),RW=LW.b,zW=LW.r,BW=new OW(32768),VW=0;VW<32768;++VW){var HW=(VW&43690)>>1|(VW&21845)<<1;HW=(HW&52428)>>2|(HW&13107)<<2,HW=(HW&61680)>>4|(HW&3855)<<4,BW[VW]=((HW&65280)>>8|(HW&255)<<8)>>1}for(var UW=(function(e,t,n){for(var r=e.length,i=0,a=new OW(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new OW(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new OW(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[BW[d]>>c]=l}else for(s=new OW(r),i=0;i<r;++i)e[i]&&(s[i]=BW[o[e[i]-1]++]>>15-e[i]);return s}),WW=new DW(288),VW=0;VW<144;++VW)WW[VW]=8;for(var VW=144;VW<256;++VW)WW[VW]=9;for(var VW=256;VW<280;++VW)WW[VW]=7;for(var VW=280;VW<288;++VW)WW[VW]=8;for(var GW=new DW(32),VW=0;VW<32;++VW)GW[VW]=5;var KW=UW(WW,9,0),qW=UW(WW,9,1),JW=UW(GW,5,0),YW=UW(GW,5,1),XW=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},ZW=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},QW=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},$W=function(e){return(e+7)/8|0},eG=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new DW(e.subarray(t,n))},tG=[`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`],nG=function(e,t,n){var r=Error(t||tG[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,nG),!n)throw r;return r},rG=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new DW(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new DW(i*3));var l=function(e){var t=n.length;if(e>t){var r=new DW(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=ZW(e,d,1);var v=ZW(e,d+1,3);if(d+=3,!v){var y=$W(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&nG(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=qW,m=YW,h=9,g=5;else if(v==2){var S=ZW(e,d,31)+257,ee=ZW(e,d+10,15)+4,C=S+ZW(e,d+5,31)+1;d+=14;for(var w=new DW(C),te=new DW(19),T=0;T<ee;++T)te[MW[T]]=ZW(e,d+T*3,7);d+=ee*3;for(var ne=XW(te),re=(1<<ne)-1,E=UW(te,ne,1),T=0;T<C;){var ie=E[ZW(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+ZW(e,d,3),d+=2,ae=w[T-1]):y==17?(D=3+ZW(e,d,7),d+=3):y==18&&(D=11+ZW(e,d,127),d+=7);D--;)w[T++]=ae}}var oe=w.subarray(0,S),O=w.subarray(S);h=XW(oe),g=XW(O),p=UW(oe,h,1),m=UW(O,g,1)}else nG(1);if(d>_){c&&nG(0);break}}s&&l(f+131072);for(var se=(1<<h)-1,k=(1<<g)-1,ce=d;;ce=d){var ae=p[QW(e,d)&se],A=ae>>4;if(d+=ae&15,d>_){c&&nG(0);break}if(ae||nG(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=AW[T];le=ZW(e,d,(1<<j)-1)+FW[T],d+=j}var ue=m[QW(e,d)&k],de=ue>>4;ue||nG(3),d+=ue&15;var O=RW[de];if(de>3){var j=jW[de];O+=QW(e,d)&(1<<j)-1,d+=j}if(d>_){c&&nG(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&&nG(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?eG(n,0,f):n.subarray(0,f)},iG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},aG=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},oG=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:pG,l:0};if(i==1){var o=new DW(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 OW(f+1),m=sG(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 DW(p),l:m}},sG=function(e,t,n){return e.s==-1?Math.max(sG(e.l,t,n+1),sG(e.r,t,n+1)):t[e.s]=n},cG=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new OW(++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}},lG=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},uG=function(e,t,n){var r=n.length,i=$W(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},dG=function(e,t,n,r,i,a,o,s,c,l,u){iG(t,u++,n),++i[256];for(var d=oG(i,15),f=d.t,p=d.l,m=oG(a,15),h=m.t,g=m.l,_=cG(f),v=_.c,y=_.n,b=cG(h),x=b.c,S=b.n,ee=new OW(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=oG(ee,7),te=w.t,T=w.l,ne=19;ne>4&&!te[MW[ne-1]];--ne);var re=l+5<<3,E=lG(i,WW)+lG(a,GW)+o,ie=lG(i,f)+lG(a,h)+o+14+3*ne+lG(ee,te)+2*ee[16]+3*ee[17]+7*ee[18];if(c>=0&&re<=E&&re<=ie)return uG(t,u,e.subarray(c,c+l));var ae,D,oe,O;if(iG(t,u,1+(ie<E)),u+=2,ie<E){ae=UW(f,p,0),D=f,oe=UW(h,g,0),O=h;var se=UW(te,T,0);iG(t,u,y-257),iG(t,u+5,S-1),iG(t,u+10,ne-4),u+=14;for(var C=0;C<ne;++C)iG(t,u+3*C,te[MW[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;iG(t,u,se[le]),u+=te[le],le>15&&(iG(t,u,A[C]>>5&127),u+=A[C]>>12)}}else ae=KW,D=WW,oe=JW,O=GW;for(var C=0;C<s;++C){var j=r[C];if(j>255){var le=j>>18&31;aG(t,u,ae[le+257]),u+=D[le+257],le>7&&(iG(t,u,j>>23&31),u+=AW[le]);var ue=j&31;aG(t,u,oe[ue]),u+=O[ue],ue>3&&(aG(t,u,j>>5&8191),u+=jW[ue])}else aG(t,u,ae[j]),u+=D[j]}return aG(t,u,ae[256]),u+D[256]},fG=new kW([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),pG=new DW(0),mG=function(e,t,n,r,i,a){var o=a.z||e.length,s=new DW(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=fG[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new OW(32768),g=a.h||new OW(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new kW(25e3),x=new OW(288),S=new OW(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=dG(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|IW[oe]<<18|zW[O];var me=IW[oe]&31,he=zW[O]&31;C+=AW[me]+jW[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=dG(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=uG(c,u+1,e.subarray(w,ge))}a.i=o}return eG(s,0,r+$W(u)+i)},hG=(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})(),gG=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=hG[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},_G=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new DW(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return mG(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)},vG=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},yG=function(e,t){return e[t]|e[t+1]<<8},bG=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},xG=function(e,t){return bG(e,t)+bG(e,t+4)*4294967296},SG=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};function CG(e,t){return _G(e,t||{},0,0)}function wG(e,t){return rG(e,{i:2},t&&t.out,t&&t.dictionary)}var TG=function(e,t,n,r){for(var i in e){var a=e[i],o=t+i,s=r;Array.isArray(a)&&(s=vG(r,a[1]),a=a[0]),a instanceof DW?n[o]=[a,s]:(n[o+=`/`]=[new DW(0),s],TG(a,o,n,r))}},EG=typeof TextEncoder<`u`&&new TextEncoder,DG=typeof TextDecoder<`u`&&new TextDecoder;try{DG.decode(pG,{stream:!0})}catch{}var OG=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:eG(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 kG(e,t){if(t){for(var n=new DW(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(EG)return EG.encode(e);for(var i=e.length,a=new DW(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 DW(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 eG(a,0,o)}function AG(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(DG)return DG.decode(e);else{var i=OG(e),a=i.s,n=i.r;return n.length&&nG(8),a}}var jG=function(e,t){return t+30+yG(e,t+26)+yG(e,t+28)},MG=function(e,t,n){var r=yG(e,t+28),i=AG(e.subarray(t+46,t+46+r),!(yG(e,t+8)&2048)),a=t+46+r,o=bG(e,t+20),s=n&&o==4294967295?NG(e,a):[o,bG(e,t+24),bG(e,t+42)],c=s[0],l=s[1],u=s[2];return[yG(e,t+10),c,l,i,a+yG(e,t+30)+yG(e,t+32),u]},NG=function(e,t){for(;yG(e,t)!=1;t+=4+yG(e,t+2));return[xG(e,t+12),xG(e,t+4),xG(e,t+20)]},PG=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&nG(9),t+=r+4}return t},FG=function(e,t,n,r,i,a,o,s){var c=r.length,l=n.extra,u=s&&s.length,d=PG(l);SG(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)&&nG(10),SG(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&(SG(e,t,n.crc),SG(e,t+4,a<0?-a-2:a),SG(e,t+8,n.size)),SG(e,t+12,c),SG(e,t+14,d),t+=16,o!=null&&(SG(e,t,u),SG(e,t+6,n.attrs),SG(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;SG(e,t,+m),SG(e,t+2,g),e.set(h,t+4),t+=4+g}return u&&(e.set(s,t),t+=u),t},IG=function(e,t,n,r,i){SG(e,t,101010256),SG(e,t+8,n),SG(e,t+10,n),SG(e,t+12,r),SG(e,t+16,i)};function LG(e,t){t||={};var n={},r=[];TG(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=kG(o),f=d.length,p=l.comment,m=p&&kG(p),h=m&&m.length,g=PG(l.extra);f>65535&&nG(11);var _=u?CG(c,l):c,v=_.length,y=gG();y.p(c),r.push(vG(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 DW(a+22),x=i,S=a-i,ee=0;ee<r.length;++ee){var d=r[ee];FG(b,d.o,d,d.f,d.u,d.c.length);var C=30+d.f.length+PG(d.extra);b.set(d.c,d.o+C),FG(b,i,d,d.f,d.u,d.c.length,d.o,d.m),i+=16+C+(d.m?d.m.length:0)}return IG(b,i,r.length,S,x),b}function RG(e,t){for(var n={},r=e.length-22;bG(e,r)!=101010256;--r)(!r||e.length-r>65558)&&nG(13);var i=yG(e,r+8);if(!i)return{};var a=bG(e,r+16),o=a==4294967295||i==65535;if(o){var s=bG(e,r-12);o=bG(e,s)==101075792,o&&(i=bG(e,s+32),a=bG(e,s+48))}for(var c=t&&t.filter,l=0;l<i;++l){var u=MG(e,a,o),d=u[0],f=u[1],p=u[2],m=u[3],h=u[4],g=u[5],_=jG(e,g);a=h,(!c||c({name:m,size:f,originalSize:p,compression:d}))&&(d?d==8?n[m]=wG(e.subarray(_,_+f),{out:new DW(p)}):nG(14,`unknown compression type `+d):n[m]=eG(e,_,_+f))}return n}var zG=d(`fs-watcher`),BG=0;function VG(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var HG=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++BG}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),zG.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),zG.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>VG(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){zG.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),zG.debug(`All watchers disposed`)}get size(){return this.registrations.size}},UG=d(`mount-index`),WG=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,UG.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},UG.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)))}}},GG=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}invalidatePaths(e){this.vfs.invalidatePaths(e)}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()}},KG=10;function qG(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`opfs`}catch{}return`memory`}var JG=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 WG;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??qG());return await i._ready,r&&await wW().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()}invalidatePaths(e){if(this.backend!==`opfs`||!this.opfsBackendFs)return;let t=this.opfsBackendFs;for(let n of e){let e=v(n);t.index.delete(e),t._handles?.delete(e)}}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<=KG;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 bW({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 xW(t)}catch{}}async reconstructBackendFromDescriptor(e){switch(e.kind){case`local`:{let t=await CW(e.idbHandleKey);if(!t)throw Error(`no handle stored for ${e.idbHandleKey}`);return bU.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(()=>mW);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(()=>mW);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(e){let t=v(e),n=this.findMount(t);return n?this.readDirMounted(t,n):this.readDirLocal(t)}async readDirMounted(t,n){let r=this.mountIndex.getDirectoryEntries(n.path,t);if(r!==void 0){let e=new Map;for(let t of r)e.set(t.name,{name:t.name,type:t.type});return this.addNestedMountEntries(e,t),[...e.values()]}let i=n.relParts.join(`/`)||`/`,a;try{a=await n.backend.readDir(i)}catch(n){e.rebrandFsError(n,t)}let o=new Map;for(let e of a)o.set(e.name,{name:e.name,type:e.kind===`directory`?`directory`:`file`});return this.addNestedMountEntries(o,t),[...o.values()]}async readDirLocal(e){let t=await this.resolveSymlinks(e);try{let e=await this.lfs.readdir(t),n=[];for(let r of e){let e=await this.statDirEntry(t,r);e&&n.push(e)}return n}catch(t){throw this.convertError(t,e)}}async statDirEntry(e,t){let n=e===`/`?`/${t}`:`${e}/${t}`;try{let e=await this.lfs.lstat(n);return e.isSymbolicLink()?{name:t,type:`symlink`}:{name:t,type:e.isDirectory()?`directory`:`file`}}catch{return null}}addNestedMountEntries(e,t){let n=t===`/`?`/`:`${t}/`;for(let r of this.mountPoints.keys()){if(r===t||!r.startsWith(n))continue;let i=r.slice(n.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}}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.canUseWalkFastPath(n)){let e=this.mountIndex.getFiles(n);if(e){for(let t of e)yield t;return}}let r=t??new Set,i=await this.safeRealpath(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}`;yield*this.walkEntry(e,t,r)}}canUseWalkFastPath(e){return this.mountPoints.size===0||!this.mountPoints.has(e)||!this.mountIndex.isReady(e)?!1:![...this.mountPoints.keys()].some(t=>t!==e&&t.startsWith(e+`/`))}async safeRealpath(e){try{return await this.realpath(e)}catch{return e}}async*walkEntry(e,t,n){if(e.type===`file`){yield t;return}if(e.type===`symlink`){yield*this.walkSymlink(t,n);return}yield*this.walk(t,n)}async*walkSymlink(e,t){try{let n=await this.stat(e);n.type===`file`?yield e:n.type===`directory`&&(yield*this.walk(e,t))}catch{}}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=t.split(`/`).filter(Boolean),r=`/`,i=0;for(let e=0;e<n.length;e++){let a=await this.resolveRealpathComponent(r,n[e],e===n.length-1,t,i);r=a.resolved,i=a.hops}return r}async resolveRealpathComponent(e,t,n,r,i){let a=e===`/`?`/${t}`:`${e}/${t}`;for(;;){let e=await this.lstatOrThrow(a,n,r);if(e===null||!e.isSymbolicLink())return{resolved:a,hops:i};if(++i>KG)throw new E(`ELOOP`,`too many symbolic links encountered`,r);a=await this.readAndResolveLink(a,r)}}async lstatOrThrow(e,t,n){try{return await this.lfs.lstat(e)}catch(e){let r=this.convertError(e,n);if(r.code===`ENOENT`&&t)return null;throw r}}async readAndResolveLink(e,t){let n;try{n=await this.lfs.readlink(e)}catch(e){throw this.convertError(e,t)}return n.startsWith(`/`)?v(n):v(b(_(e).dir,n))}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)}},YG=e({FsError:()=>E,FsWatcher:()=>HG,MountIndex:()=>WG,RestrictedFS:()=>GG,VirtualFS:()=>JG,joinPath:()=>b,normalizePath:()=>v,pathSegments:()=>y,resolveVfsBackendFromEnv:()=>qG,splitPath:()=>_}),XG=`.skill`,ZG=1e3,QG=`/workspace/skills`,$G=`SKILL.md`,eK=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function tK(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 nK=class extends Error{};function rK(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 iK(e){if(!eK.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function aK(e){let t=[];for(let[n,r]of Object.entries(e)){let e=rK(n);e&&(tK(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function oK(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 ${$G}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${$G} files.`);return t[0]}function sK(e){let t=0,n=0;return RG(e,{filter(e){if(t++,t>1e3)throw new nK(`Skill archives may contain at most ${ZG} entries.`);if(n+=e.originalSize,n>52428800)throw new nK(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function cK(e){return b(QG,`.${e}.tmp-${`${Date.now()}-${Math.random().toString(16).slice(2,8)}`}`)}function lK(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}async function uK(e,t){if(!t.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${XG} 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=sK(new Uint8Array(await t.arrayBuffer()))}catch(e){if(e instanceof nK)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}let r=aK(n),i=oK(r),a=lK(t.name,i.path);iK(a);let o=b(QG,a);if(await e.exists(o))throw Error(`Skill "${a}" already exists at ${o}.`);let s=cK(a),c=i.path===`SKILL.md`?``:i.path.slice(0,-($G.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 dK(e){return e.toLowerCase().endsWith(XG)}function fK(e){return Array.from(e).find(e=>dK(e.name))??null}function pK(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 mK(e){if(!e)return null;if(e.files){let t=fK(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&&dK(e.name))return e}return null}function hK(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||dK(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 gK(){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 _K(){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 vK(e){let{fs:t,onNotice:n,onInstalled:r,onAttachFiles:i}=e,a=gK(),o=0,s=!1,c=()=>{o=0,s||a.hide()};window.addEventListener(`dragenter`,e=>{pK(e.dataTransfer)&&(e.preventDefault(),o+=1,s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{pK(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=mK(e.dataTransfer),u=hK(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 uK(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 yK(e){let{layout:t,log:n}=e,{VirtualFS:r,resolveVfsBackendFromEnv:i}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>YG);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)`)),SW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await TW(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};EW({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>u.current,logger:n}),vK({fs:l,onNotice:_K(),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-DRDl5XLB.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 bK(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-De1qIJHZ.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 xK(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function SK(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=xK(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 CK=d(`sprinkle-icon`),wK=`<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">`,TK=`</svg>`,EK=null;function DK(){return EK||=o(()=>Promise.resolve().then(()=>VP).then(e=>e.icons),void 0),EK}function OK(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function kK(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function AK(e){return`${wK}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${kK(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${TK}`}async function jK(e){let t=OK(e),n=(await DK())[t];return n?AK(n):null}function MK(e){return/^\s*<svg\b/i.test(e)}function NK(e){return/^data:/i.test(e)}function PK(e){return e.startsWith(`/`)}function FK(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function IK(e){return/^[a-z][a-z0-9-]*$/.test(e)}function LK(e){return`<img src="${kK(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function RK(e,t){if(!e)return null;if(MK(e))return LK(zK(e));if(NK(e))return LK(e);if(PK(e)&&t){try{if(FK(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=BK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?LK(zK(r)):null}if(FK(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return LK(`data:${VK(e)};base64,${HK(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=BK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return LK(zK(r))}catch(t){CK.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(IK(e)){let t=await jK(e);if(t)return t;CK.warn(`Unknown Lucide icon name`,{spec:e})}return null}function zK(e){return`data:image/svg+xml;base64,${HK(new TextEncoder().encode(e))}`}function BK(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function VK(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 HK(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 UK=[`/shared/sprinkles`],WK=new Set([`welcome`,`connect-llm`]);async function GK(e){let t=new Map;for(let n of UK)await e.exists(n)&&await KK(e,n,t);return await KK(e,`/`,t),t}async function KK(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=qK(r);if(!WK.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:JK(i,t),autoOpen:YK(i),icon:XK(i)})}}}function qK(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function JK(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 YK(e){return/data-sprinkle-autoopen\b/.test(e)}function XK(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=ZK(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=QK(i,`href`);if(a!==void 0)return a.trim()}let r=QK(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function ZK(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 QK(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var $K=e({SprinkleManager:()=>lq,readOpenSprinklesFromUrl:()=>rq,writeOpenSprinklesToUrl:()=>iq}),eq=d(`sprinkle-manager`),tq=`slicc-open-sprinkles`,nq=`sprinkles`;function rq(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(nq);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function iq(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(nq):t.searchParams.set(nq,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var aq=`slicc-known-sprinkles`,oq=`slicc-autoopened-once`,sq=[`/workspace`,`/shared`,`/scoops`],cq=250,lq=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=Vi(),n=Bi();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 uI(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&&eq.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=rq();if(e!==null){for(let t of e)try{await this.open(t)}catch{eq.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(tq);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{eq.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(tq)}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{eq.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),eq.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{eq.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(aq);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(aq,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(oq);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(oq,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(tq,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,iq([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<cq))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)){eq.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),eq.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{eq.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),eq.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{eq.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 GK(this.fs),eq.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){eq.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){eq.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){eq.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){eq.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 AI(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),Di(e),eq.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),eq.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){eq.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(),eq.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),eq.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=>{eq.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=sq.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){eq.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){eq.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};function uq(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 dq(e){let{layout:t,client:n,localFs:r,writableFs:i,useRpcVfs:a,inlineSprinkles:o,log:s}=e,c=new lq(a?SK({reader:i,writer:i}):r,async t=>fq(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:uq(n)});return window.__slicc_sprinkleManager=c,eL(uq(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;mq(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=>RK(e,r),t.updateAddButtons(),await c.restoreOpenSprinkles(),s.info(`SprinkleManager initialized (extension mode)`),c}async function fq(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 pq(t,n.log);return}n.client.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}}async function pq(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 wU(i),e.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:i.name})}catch(e){t.warn(`Mount picker failed`,e),n()}}async function mq(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 hq(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 gq(){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 bo({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){wH.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function UH(e,t){let n=[];try{let t=await e.readFile(kH,{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(kH,JSON.stringify(r,null,2))}async function WH(e){try{let t=await e.readFile(kH,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function GH(e){return`${OH}/${e.filename}`}async function KH(e){return(await WH(e)).filter(e=>e.pendingEnrichment===!0)}async function qH(e,t,n){if(!t.pendingEnrichment)return null;let r=GH(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`?wH.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):wH.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=ZH(i).messages}catch(e){return wH.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 wH.info(`Pending archive has no messages — skipping enrichment`,{filename:t.filename}),null;let o=MH(a),s=``;try{s=await Zt({messages:o,instruction:Qt,model:n.model,apiKey:n.apiKey,maxTokens:EH,headers:n.headers})}catch(e){return wH.warn(`Enrichment memory call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let c=``;try{c=LH(await Zt({messages:o,instruction:$t,model:n.model,apiKey:n.apiKey,maxTokens:DH,headers:n.headers}))}catch(e){return wH.warn(`Enrichment title call failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(!c)return wH.info(`Enrichment title call returned empty — entry stays pending`,{filename:t.filename}),null;let l=s.trim();if(l&&l!==`NONE`)try{await HH(e,l,`pending-enrichment`,{model:n.model,apiKey:n.apiKey,headers:n.headers})}catch(e){wH.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}let u=JH(i,c),d=`${t.frozenAt.replace(/[:.]/g,`-`)}-${zH(c)}.md`,f=`${OH}/${d}`;try{await VH(e,OH),await e.writeFile(f,u)}catch(e){return wH.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 XH(e,t.filename,p)}catch(e){return wH.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){wH.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:r,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return wH.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:d,title:c}),p}function JH(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 YH=Promise.resolve();async function XH(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(kH,{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(kH,JSON.stringify(a,null,2))},i=YH.then(r,r);return YH=i.then(()=>void 0,()=>void 0),i}function ZH(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 QH=d(`new-session`),$H=`ui-new-session`;async function eU(e){let t=Ua()??void 0,n;try{n=to()}catch(e){QH.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let r=n?.provider===`adobe`?{"X-Session-Id":vi($H)}:void 0,i=new eV;try{await i.init()}catch(e){return QH.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}return AH({sessionStore:i,vfs:e.vfs,model:n,apiKey:t,headers:r})}async function tU(e){let t=new eV;try{await t.init()}catch(e){return QH.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return AH({sessionStore:t,vfs:e.vfs,mode:`quick`})}async function nU(e){let t={found:0,enriched:[]},n=[];try{n=await KH(e.vfs)}catch(e){return QH.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=Ua()??void 0,i;try{i=to()}catch(e){return QH.info(`No active model — skipping background enrichment`,{error:e instanceof Error?e.message:String(e)}),t}if(!r||!i)return QH.info(`LLM credentials unavailable — leaving pending entries for later boot`,{pending:n.length}),t;let a=i.provider===`adobe`?{"X-Session-Id":vi($H)}:void 0;for(let o of n)try{let n=await qH(e.vfs,o,{model:i,apiKey:r,headers:a});n&&t.enriched.push(n)}catch(e){QH.warn(`Background enrichment threw (entry stays pending)`,{filename:o.filename,error:e instanceof Error?e.message:String(e)})}return QH.info(`Background enrichment pass complete`,{found:t.found,enriched:t.enriched.length}),t}function rU(e,t={}){if(t.isWriter===!1){QH.info(`Background enrichment skipped (OPFS follower — read-only tab)`);return}let n=()=>{nU({vfs:e}).catch(()=>{})},r=globalThis.requestIdleCallback;typeof r==`function`?r(n):setTimeout(n,0)}var iU=d(`boot/ui-fixture`);function aU(){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 oU(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),iU.info(`Loaded UI fixture session for design iteration`)}async function sU(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(()=>YG);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-CifmXH3e.js`);return{installNukeReloadListener:e}},[]);l(),aU()&&await oU(n.panels.chat),Ti().catch(()=>{}),rU(a)}async function cU(e){let{layout:t,log:n}=e,{PanelFollowerSprinkleProxy:r}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-dE9-MkU3.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:i}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>ooe);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 lU(e,t){return!e||typeof e!=`object`||e.type!==t?null:e}var uU=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=lU(e.payload,`leader-mode-changed`);if(t){this.listeners.onLeaderModeChange?.(t.active);return}let n=lU(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 dU(e){let{sender:t,subscriber:n,sprinkleManager:r,client:i,chat:a,log:o}=e,s=e._proxyFactory??((e,t,n)=>new uU(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 fU(e){let t=dU({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 pU(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 mU(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 hU(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 gU(e){let{OnboardingOrchestrator:t}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-BPnZzxXb.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:()=>hU(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 _U(t,n??null,e)}),n),peek:()=>n,buildCatalogue:()=>hU(e.providers)}}async function _U(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-BnJV8LqU.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-BnJV8LqU.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await r.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:mU(e,r,n.providers.getProviderModels,n.providers.isModelHiddenFromPicker)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}var vU=300*1e3,yU=Symbol(`mount:timeout`),bU=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 yU;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(yU)},vU)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===yU)throw Error(`mount: timed out after ${Math.round(vU/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 xU(){return crypto.randomUUID()}var SU=`slicc-pending-mount`,CU=`pendingMount`;async function wU(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(SU,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,CU),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function TU(e,t){let n;try{n=await new Promise((e,t)=>{let n=indexedDB.open(SU,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(CU);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(i){r.objectStore(`handles`).delete(CU),await new Promise(e=>r.oncomplete=()=>e());let n=`/mnt/${i.name}`,a=bU.fromHandle(i,{mountId:xU()});await e.mount(n,a),t.info(`Mounted folder from welcome onboarding`,{name:i.name,path:n})}n.close()}var EU=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),DU=`slicc:welcome-flow-fired`;function OU(){try{let e=typeof localStorage<`u`?localStorage.getItem(DU):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 kU(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(DU,JSON.stringify([...e]))}catch{}}function AU(e,t,n,r,i){if(EU.has(e)&&t.has(e)){i.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}EU.has(e)&&(t.add(e),kU(t)),n()}var jU=new Set([`first-run`,`onboarding-complete`,`connect-ready`,`connect-attempt`,`oauth-attempt`,`device-code-decision`,`shortcut-migrate`]);function MU(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&&EU.has(f)){if(t.has(f))return d.debug(`Suppressing duplicate welcome lick (${l})`,{action:f}),!0;t.add(f),kU(t)}if(!f||!jU.has(f))return!1;let p=e.body;return NU(f,p,{getAccounts:n,getProviderConfig:r,resolveDeviceCodeDecision:i,getOnboardingOrchestrator:a,applyPendingMount:o,fastForward:s,onShortcutMigrate:c,vfs:u,log:d})}}function NU(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 PU({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 PU(e){let t=e.getAccounts();if(t.length===0)return e.getOnboardingOrchestrator().handleConnectReady(),!0;let n=t[0];return e.fastForward.broadcastAlreadyConnected(n.providerId),FU(e.vfs,n.providerId,e.fastForward.fire).catch(t=>e.log.warn(`Failed to fire fast-forward final lick`,t)),!0}async function FU(e,t,n){let{hasOnboardingFinalLickInHistory:r}=await o(async()=>{let{hasOnboardingFinalLickInHistory:e}=await Promise.resolve().then(()=>_q);return{hasOnboardingFinalLickInHistory:e}},void 0);if(await r())return;let i=e?await IU(e):{},{getSelectedModelId:a,getProviderConfig:s,getProviderModels:c}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>Hi);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 IU(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 LU(e){let{client:t,layout:n,localFs:r,firedWelcomeActions:i,log:a}=e,s=await o(()=>Promise.resolve().then(()=>Hi),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 gU({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=>QI(e),onFireFinalLick:e=>{pU(t),AU(String(e?.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-ext`,a)}}),p=MU({firedWelcomeActions:i,getAccounts:c,getProviderConfig:l,resolveDeviceCodeDecision:d,getOnboardingOrchestrator:()=>f.get(),applyPendingMount:()=>TU(r,a),fastForward:{fire:e=>{AU(String(e.action??``),i,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-ext`,a)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return l(e)}catch{return null}})();QI({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 RU=`/tmp`;function zU(e){let t=e.replace(/[\\/:]+/g,`_`).replace(/[^A-Za-z0-9._-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);return t.length>0?t:`attachment`}function BU(){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 VU(e,t,n,r=BU()){let i=zU(e);return`${RU}/attachment-${t.toString(36)}-${n.toString(36)}-${r}-${i}`}function HU(e){let t=0;return async n=>{let r=new Uint8Array(await n.arrayBuffer());t+=1;let i=VU(n.name,Date.now(),t);return await e.mkdir(RU,{recursive:!0}).catch(()=>{}),await e.writeFile(i,r),i}}function UU(e){let{client:t,layout:n,localFs:r,writableFs:i,selectScoop:a,getSelectedScoop:o,log:s}=e;t.setLocalFS(r),n.panels.chat.setAttachmentWriter(HU(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?eo(t):to();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 tU({vfs:i})}catch(e){s.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await eU({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 WU(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 GU(e){return e.split(`/`).pop()||`data`}function KU(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 qU=5*1024*1024,JU=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=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(/^\/+/,``)}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=WU(GU(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 YU(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 XU=25*1024*1024,ZU=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=YU(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??XU,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}},QU=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function $U(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>Hi);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new QU(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var eW=`slicc-mount-cache`,tW=`listings`,nW=`bodies`,rW=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??eW}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(tW)||e.createObjectStore(tW),e.objectStoreNames.contains(nW)||e.createObjectStore(nW)},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(tW,`readonly`).objectStore(tW).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(tW,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(tW).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(tW,`readwrite`);i.objectStore(tW).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(nW,`readonly`).objectStore(nW).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,nW,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,nW,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(nW,`readwrite`);i.objectStore(nW).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(tW),n(nW)])}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(nW,`readonly`).objectStore(nW),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(nW,`readwrite`),i=r.objectStore(nW);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function iW(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function aW(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 oW(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var sW=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),cW=new Set([101,103,204,205,304]);function lW(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`||sW.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=aW(e.bodyBase64)}catch(e){throw new E(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=cW.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function uW(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 dW(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 fW(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?oW(t.body):void 0};return lW(iW()?await dW(`mount.s3-sign-and-forward`,n):await uW(`/api/s3-sign-and-forward`,n))}}function pW(e){let t=e?.getImsToken??(async()=>(await $U()).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?oW(e.body):void 0};return lW(iW()?await dW(`mount.da-sign-and-forward`,r):await uW(`/api/da-sign-and-forward`,r))}}var mW=e({DaMountBackend:()=>JU,RemoteMountCache:()=>rW,S3MountBackend:()=>ZU,makeSignedFetchDa:()=>pW,makeSignedFetchS3:()=>fW}),hW=`slicc-mount-table`,gW=2,_W=`mounts`,vW=`mount-entries`;function yW(){return new Promise((e,t)=>{let n=indexedDB.open(hW,gW);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(_W)||t.createObjectStore(_W),t.objectStoreNames.contains(vW)||t.createObjectStore(vW),r<2){let e=n.transaction,t=e.objectStore(_W),r=e.objectStore(vW),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:xU(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function bW(e,t){let n=await yW();try{let r=e.descriptor.kind===`local`&&t?[_W,vW]:[vW],i=n.transaction(r,`readwrite`);i.objectStore(vW).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(_W).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 xW(e){let t=await yW();try{let n=t.transaction([_W,vW],`readwrite`);n.objectStore(vW).delete(e),n.objectStore(_W).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 SW(){let e=await yW();try{return await new Promise((t,n)=>{let r=e.transaction(vW,`readonly`),i=r.objectStore(vW).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 CW(e){let t=await yW();try{return await new Promise((n,r)=>{let i=t.transaction(_W,`readonly`).objectStore(_W).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function wW(){let e=await yW();try{let t=e.transaction([_W,vW],`readwrite`);t.objectStore(_W).clear(),t.objectStore(vW).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 TW(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await CW(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=bU.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 rW({mountId:o.mountId,ttlMs:3e4}),a=new ZU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:fW(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 rW({mountId:o.mountId,ttlMs:3e4}),a=new JU({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:pW()});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 EW(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 DW=Uint8Array,OW=Uint16Array,kW=Int32Array,AW=new DW([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]),jW=new DW([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]),MW=new DW([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),NW=function(e,t){for(var n=new OW(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new kW(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}},PW=NW(AW,2),FW=PW.b,IW=PW.r;FW[28]=258,IW[258]=28;for(var LW=NW(jW,0),RW=LW.b,zW=LW.r,BW=new OW(32768),VW=0;VW<32768;++VW){var HW=(VW&43690)>>1|(VW&21845)<<1;HW=(HW&52428)>>2|(HW&13107)<<2,HW=(HW&61680)>>4|(HW&3855)<<4,BW[VW]=((HW&65280)>>8|(HW&255)<<8)>>1}for(var UW=(function(e,t,n){for(var r=e.length,i=0,a=new OW(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new OW(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new OW(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[BW[d]>>c]=l}else for(s=new OW(r),i=0;i<r;++i)e[i]&&(s[i]=BW[o[e[i]-1]++]>>15-e[i]);return s}),WW=new DW(288),VW=0;VW<144;++VW)WW[VW]=8;for(var VW=144;VW<256;++VW)WW[VW]=9;for(var VW=256;VW<280;++VW)WW[VW]=7;for(var VW=280;VW<288;++VW)WW[VW]=8;for(var GW=new DW(32),VW=0;VW<32;++VW)GW[VW]=5;var KW=UW(WW,9,0),qW=UW(WW,9,1),JW=UW(GW,5,0),YW=UW(GW,5,1),XW=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},ZW=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},QW=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},$W=function(e){return(e+7)/8|0},eG=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new DW(e.subarray(t,n))},tG=[`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`],nG=function(e,t,n){var r=Error(t||tG[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,nG),!n)throw r;return r},rG=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new DW(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new DW(i*3));var l=function(e){var t=n.length;if(e>t){var r=new DW(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=ZW(e,d,1);var v=ZW(e,d+1,3);if(d+=3,!v){var y=$W(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&nG(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=qW,m=YW,h=9,g=5;else if(v==2){var S=ZW(e,d,31)+257,ee=ZW(e,d+10,15)+4,C=S+ZW(e,d+5,31)+1;d+=14;for(var w=new DW(C),te=new DW(19),T=0;T<ee;++T)te[MW[T]]=ZW(e,d+T*3,7);d+=ee*3;for(var ne=XW(te),re=(1<<ne)-1,E=UW(te,ne,1),T=0;T<C;){var ie=E[ZW(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+ZW(e,d,3),d+=2,ae=w[T-1]):y==17?(D=3+ZW(e,d,7),d+=3):y==18&&(D=11+ZW(e,d,127),d+=7);D--;)w[T++]=ae}}var oe=w.subarray(0,S),O=w.subarray(S);h=XW(oe),g=XW(O),p=UW(oe,h,1),m=UW(O,g,1)}else nG(1);if(d>_){c&&nG(0);break}}s&&l(f+131072);for(var se=(1<<h)-1,k=(1<<g)-1,ce=d;;ce=d){var ae=p[QW(e,d)&se],A=ae>>4;if(d+=ae&15,d>_){c&&nG(0);break}if(ae||nG(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=AW[T];le=ZW(e,d,(1<<j)-1)+FW[T],d+=j}var ue=m[QW(e,d)&k],de=ue>>4;ue||nG(3),d+=ue&15;var O=RW[de];if(de>3){var j=jW[de];O+=QW(e,d)&(1<<j)-1,d+=j}if(d>_){c&&nG(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&&nG(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?eG(n,0,f):n.subarray(0,f)},iG=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},aG=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},oG=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:pG,l:0};if(i==1){var o=new DW(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 OW(f+1),m=sG(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 DW(p),l:m}},sG=function(e,t,n){return e.s==-1?Math.max(sG(e.l,t,n+1),sG(e.r,t,n+1)):t[e.s]=n},cG=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new OW(++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}},lG=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},uG=function(e,t,n){var r=n.length,i=$W(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},dG=function(e,t,n,r,i,a,o,s,c,l,u){iG(t,u++,n),++i[256];for(var d=oG(i,15),f=d.t,p=d.l,m=oG(a,15),h=m.t,g=m.l,_=cG(f),v=_.c,y=_.n,b=cG(h),x=b.c,S=b.n,ee=new OW(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=oG(ee,7),te=w.t,T=w.l,ne=19;ne>4&&!te[MW[ne-1]];--ne);var re=l+5<<3,E=lG(i,WW)+lG(a,GW)+o,ie=lG(i,f)+lG(a,h)+o+14+3*ne+lG(ee,te)+2*ee[16]+3*ee[17]+7*ee[18];if(c>=0&&re<=E&&re<=ie)return uG(t,u,e.subarray(c,c+l));var ae,D,oe,O;if(iG(t,u,1+(ie<E)),u+=2,ie<E){ae=UW(f,p,0),D=f,oe=UW(h,g,0),O=h;var se=UW(te,T,0);iG(t,u,y-257),iG(t,u+5,S-1),iG(t,u+10,ne-4),u+=14;for(var C=0;C<ne;++C)iG(t,u+3*C,te[MW[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;iG(t,u,se[le]),u+=te[le],le>15&&(iG(t,u,A[C]>>5&127),u+=A[C]>>12)}}else ae=KW,D=WW,oe=JW,O=GW;for(var C=0;C<s;++C){var j=r[C];if(j>255){var le=j>>18&31;aG(t,u,ae[le+257]),u+=D[le+257],le>7&&(iG(t,u,j>>23&31),u+=AW[le]);var ue=j&31;aG(t,u,oe[ue]),u+=O[ue],ue>3&&(aG(t,u,j>>5&8191),u+=jW[ue])}else aG(t,u,ae[j]),u+=D[j]}return aG(t,u,ae[256]),u+D[256]},fG=new kW([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),pG=new DW(0),mG=function(e,t,n,r,i,a){var o=a.z||e.length,s=new DW(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=fG[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new OW(32768),g=a.h||new OW(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new kW(25e3),x=new OW(288),S=new OW(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=dG(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|IW[oe]<<18|zW[O];var me=IW[oe]&31,he=zW[O]&31;C+=AW[me]+jW[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=dG(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=uG(c,u+1,e.subarray(w,ge))}a.i=o}return eG(s,0,r+$W(u)+i)},hG=(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})(),gG=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=hG[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},_G=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new DW(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return mG(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)},vG=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},yG=function(e,t){return e[t]|e[t+1]<<8},bG=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},xG=function(e,t){return bG(e,t)+bG(e,t+4)*4294967296},SG=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};function CG(e,t){return _G(e,t||{},0,0)}function wG(e,t){return rG(e,{i:2},t&&t.out,t&&t.dictionary)}var TG=function(e,t,n,r){for(var i in e){var a=e[i],o=t+i,s=r;Array.isArray(a)&&(s=vG(r,a[1]),a=a[0]),a instanceof DW?n[o]=[a,s]:(n[o+=`/`]=[new DW(0),s],TG(a,o,n,r))}},EG=typeof TextEncoder<`u`&&new TextEncoder,DG=typeof TextDecoder<`u`&&new TextDecoder;try{DG.decode(pG,{stream:!0})}catch{}var OG=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:eG(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 kG(e,t){if(t){for(var n=new DW(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(EG)return EG.encode(e);for(var i=e.length,a=new DW(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 DW(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 eG(a,0,o)}function AG(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(DG)return DG.decode(e);else{var i=OG(e),a=i.s,n=i.r;return n.length&&nG(8),a}}var jG=function(e,t){return t+30+yG(e,t+26)+yG(e,t+28)},MG=function(e,t,n){var r=yG(e,t+28),i=AG(e.subarray(t+46,t+46+r),!(yG(e,t+8)&2048)),a=t+46+r,o=bG(e,t+20),s=n&&o==4294967295?NG(e,a):[o,bG(e,t+24),bG(e,t+42)],c=s[0],l=s[1],u=s[2];return[yG(e,t+10),c,l,i,a+yG(e,t+30)+yG(e,t+32),u]},NG=function(e,t){for(;yG(e,t)!=1;t+=4+yG(e,t+2));return[xG(e,t+12),xG(e,t+4),xG(e,t+20)]},PG=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&nG(9),t+=r+4}return t},FG=function(e,t,n,r,i,a,o,s){var c=r.length,l=n.extra,u=s&&s.length,d=PG(l);SG(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)&&nG(10),SG(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&(SG(e,t,n.crc),SG(e,t+4,a<0?-a-2:a),SG(e,t+8,n.size)),SG(e,t+12,c),SG(e,t+14,d),t+=16,o!=null&&(SG(e,t,u),SG(e,t+6,n.attrs),SG(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;SG(e,t,+m),SG(e,t+2,g),e.set(h,t+4),t+=4+g}return u&&(e.set(s,t),t+=u),t},IG=function(e,t,n,r,i){SG(e,t,101010256),SG(e,t+8,n),SG(e,t+10,n),SG(e,t+12,r),SG(e,t+16,i)};function LG(e,t){t||={};var n={},r=[];TG(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=kG(o),f=d.length,p=l.comment,m=p&&kG(p),h=m&&m.length,g=PG(l.extra);f>65535&&nG(11);var _=u?CG(c,l):c,v=_.length,y=gG();y.p(c),r.push(vG(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 DW(a+22),x=i,S=a-i,ee=0;ee<r.length;++ee){var d=r[ee];FG(b,d.o,d,d.f,d.u,d.c.length);var C=30+d.f.length+PG(d.extra);b.set(d.c,d.o+C),FG(b,i,d,d.f,d.u,d.c.length,d.o,d.m),i+=16+C+(d.m?d.m.length:0)}return IG(b,i,r.length,S,x),b}function RG(e,t){for(var n={},r=e.length-22;bG(e,r)!=101010256;--r)(!r||e.length-r>65558)&&nG(13);var i=yG(e,r+8);if(!i)return{};var a=bG(e,r+16),o=a==4294967295||i==65535;if(o){var s=bG(e,r-12);o=bG(e,s)==101075792,o&&(i=bG(e,s+32),a=bG(e,s+48))}for(var c=t&&t.filter,l=0;l<i;++l){var u=MG(e,a,o),d=u[0],f=u[1],p=u[2],m=u[3],h=u[4],g=u[5],_=jG(e,g);a=h,(!c||c({name:m,size:f,originalSize:p,compression:d}))&&(d?d==8?n[m]=wG(e.subarray(_,_+f),{out:new DW(p)}):nG(14,`unknown compression type `+d):n[m]=eG(e,_,_+f))}return n}var zG=d(`fs-watcher`),BG=0;function VG(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var HG=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++BG}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),zG.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),zG.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>VG(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){zG.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),zG.debug(`All watchers disposed`)}get size(){return this.registrations.size}},UG=d(`mount-index`),WG=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,UG.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},UG.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)))}}},GG=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}invalidatePaths(e){this.vfs.invalidatePaths(e)}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()}},KG=10;function qG(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`opfs`}catch{}return`memory`}var JG=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 WG;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??qG());return await i._ready,r&&await wW().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()}invalidatePaths(e){if(this.backend!==`opfs`||!this.opfsBackendFs)return;let t=this.opfsBackendFs;for(let n of e){let e=v(n);t.index.delete(e),t._handles?.delete(e)}}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<=KG;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 bW({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 xW(t)}catch{}}async reconstructBackendFromDescriptor(e){switch(e.kind){case`local`:{let t=await CW(e.idbHandleKey);if(!t)throw Error(`no handle stored for ${e.idbHandleKey}`);return bU.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(()=>mW);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(()=>mW);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(e){let t=v(e),n=this.findMount(t);return n?this.readDirMounted(t,n):this.readDirLocal(t)}async readDirMounted(t,n){let r=this.mountIndex.getDirectoryEntries(n.path,t);if(r!==void 0){let e=new Map;for(let t of r)e.set(t.name,{name:t.name,type:t.type});return this.addNestedMountEntries(e,t),[...e.values()]}let i=n.relParts.join(`/`)||`/`,a;try{a=await n.backend.readDir(i)}catch(n){e.rebrandFsError(n,t)}let o=new Map;for(let e of a)o.set(e.name,{name:e.name,type:e.kind===`directory`?`directory`:`file`});return this.addNestedMountEntries(o,t),[...o.values()]}async readDirLocal(e){let t=await this.resolveSymlinks(e);try{let e=await this.lfs.readdir(t),n=[];for(let r of e){let e=await this.statDirEntry(t,r);e&&n.push(e)}return n}catch(t){throw this.convertError(t,e)}}async statDirEntry(e,t){let n=e===`/`?`/${t}`:`${e}/${t}`;try{let e=await this.lfs.lstat(n);return e.isSymbolicLink()?{name:t,type:`symlink`}:{name:t,type:e.isDirectory()?`directory`:`file`}}catch{return null}}addNestedMountEntries(e,t){let n=t===`/`?`/`:`${t}/`;for(let r of this.mountPoints.keys()){if(r===t||!r.startsWith(n))continue;let i=r.slice(n.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}}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.canUseWalkFastPath(n)){let e=this.mountIndex.getFiles(n);if(e){for(let t of e)yield t;return}}let r=t??new Set,i=await this.safeRealpath(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}`;yield*this.walkEntry(e,t,r)}}canUseWalkFastPath(e){return this.mountPoints.size===0||!this.mountPoints.has(e)||!this.mountIndex.isReady(e)?!1:![...this.mountPoints.keys()].some(t=>t!==e&&t.startsWith(e+`/`))}async safeRealpath(e){try{return await this.realpath(e)}catch{return e}}async*walkEntry(e,t,n){if(e.type===`file`){yield t;return}if(e.type===`symlink`){yield*this.walkSymlink(t,n);return}yield*this.walk(t,n)}async*walkSymlink(e,t){try{let n=await this.stat(e);n.type===`file`?yield e:n.type===`directory`&&(yield*this.walk(e,t))}catch{}}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=t.split(`/`).filter(Boolean),r=`/`,i=0;for(let e=0;e<n.length;e++){let a=await this.resolveRealpathComponent(r,n[e],e===n.length-1,t,i);r=a.resolved,i=a.hops}return r}async resolveRealpathComponent(e,t,n,r,i){let a=e===`/`?`/${t}`:`${e}/${t}`;for(;;){let e=await this.lstatOrThrow(a,n,r);if(e===null||!e.isSymbolicLink())return{resolved:a,hops:i};if(++i>KG)throw new E(`ELOOP`,`too many symbolic links encountered`,r);a=await this.readAndResolveLink(a,r)}}async lstatOrThrow(e,t,n){try{return await this.lfs.lstat(e)}catch(e){let r=this.convertError(e,n);if(r.code===`ENOENT`&&t)return null;throw r}}async readAndResolveLink(e,t){let n;try{n=await this.lfs.readlink(e)}catch(e){throw this.convertError(e,t)}return n.startsWith(`/`)?v(n):v(b(_(e).dir,n))}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)}},YG=e({FsError:()=>E,FsWatcher:()=>HG,MountIndex:()=>WG,RestrictedFS:()=>GG,VirtualFS:()=>JG,joinPath:()=>b,normalizePath:()=>v,pathSegments:()=>y,resolveVfsBackendFromEnv:()=>qG,splitPath:()=>_}),XG=`.skill`,ZG=1e3,QG=`/workspace/skills`,$G=`SKILL.md`,eK=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function tK(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 nK=class extends Error{};function rK(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 iK(e){if(!eK.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function aK(e){let t=[];for(let[n,r]of Object.entries(e)){let e=rK(n);e&&(tK(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function oK(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 ${$G}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${$G} files.`);return t[0]}function sK(e){let t=0,n=0;return RG(e,{filter(e){if(t++,t>1e3)throw new nK(`Skill archives may contain at most ${ZG} entries.`);if(n+=e.originalSize,n>52428800)throw new nK(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function cK(e){return b(QG,`.${e}.tmp-${`${Date.now()}-${Math.random().toString(16).slice(2,8)}`}`)}function lK(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}async function uK(e,t){if(!t.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${XG} 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=sK(new Uint8Array(await t.arrayBuffer()))}catch(e){if(e instanceof nK)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}let r=aK(n),i=oK(r),a=lK(t.name,i.path);iK(a);let o=b(QG,a);if(await e.exists(o))throw Error(`Skill "${a}" already exists at ${o}.`);let s=cK(a),c=i.path===`SKILL.md`?``:i.path.slice(0,-($G.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 dK(e){return e.toLowerCase().endsWith(XG)}function fK(e){return Array.from(e).find(e=>dK(e.name))??null}function pK(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 mK(e){if(!e)return null;if(e.files){let t=fK(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&&dK(e.name))return e}return null}function hK(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||dK(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 gK(){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 _K(){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 vK(e){let{fs:t,onNotice:n,onInstalled:r,onAttachFiles:i}=e,a=gK(),o=0,s=!1,c=()=>{o=0,s||a.hide()};window.addEventListener(`dragenter`,e=>{pK(e.dataTransfer)&&(e.preventDefault(),o+=1,s||a.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{pK(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=mK(e.dataTransfer),u=hK(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 uK(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 yK(e){let{layout:t,log:n}=e,{VirtualFS:r,resolveVfsBackendFromEnv:i}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>YG);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)`)),SW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await TW(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};EW({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>u.current,logger:n}),vK({fs:l,onNotice:_K(),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-D5Ny2X7l.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 bK(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-KmVK656b.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 xK(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function SK(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=xK(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 CK=d(`sprinkle-icon`),wK=`<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">`,TK=`</svg>`,EK=null;function DK(){return EK||=o(()=>Promise.resolve().then(()=>VP).then(e=>e.icons),void 0),EK}function OK(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function kK(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function AK(e){return`${wK}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${kK(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${TK}`}async function jK(e){let t=OK(e),n=(await DK())[t];return n?AK(n):null}function MK(e){return/^\s*<svg\b/i.test(e)}function NK(e){return/^data:/i.test(e)}function PK(e){return e.startsWith(`/`)}function FK(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function IK(e){return/^[a-z][a-z0-9-]*$/.test(e)}function LK(e){return`<img src="${kK(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function RK(e,t){if(!e)return null;if(MK(e))return LK(zK(e));if(NK(e))return LK(e);if(PK(e)&&t){try{if(FK(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=BK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?LK(zK(r)):null}if(FK(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return LK(`data:${VK(e)};base64,${HK(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=BK(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return LK(zK(r))}catch(t){CK.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(IK(e)){let t=await jK(e);if(t)return t;CK.warn(`Unknown Lucide icon name`,{spec:e})}return null}function zK(e){return`data:image/svg+xml;base64,${HK(new TextEncoder().encode(e))}`}function BK(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function VK(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 HK(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 UK=[`/shared/sprinkles`],WK=new Set([`welcome`,`connect-llm`]);async function GK(e){let t=new Map;for(let n of UK)await e.exists(n)&&await KK(e,n,t);return await KK(e,`/`,t),t}async function KK(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=qK(r);if(!WK.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:JK(i,t),autoOpen:YK(i),icon:XK(i)})}}}function qK(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function JK(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 YK(e){return/data-sprinkle-autoopen\b/.test(e)}function XK(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=ZK(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=QK(i,`href`);if(a!==void 0)return a.trim()}let r=QK(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function ZK(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 QK(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var $K=e({SprinkleManager:()=>lq,readOpenSprinklesFromUrl:()=>rq,writeOpenSprinklesToUrl:()=>iq}),eq=d(`sprinkle-manager`),tq=`slicc-open-sprinkles`,nq=`sprinkles`;function rq(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(nq);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function iq(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(nq):t.searchParams.set(nq,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var aq=`slicc-known-sprinkles`,oq=`slicc-autoopened-once`,sq=[`/workspace`,`/shared`,`/scoops`],cq=250,lq=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=Vi(),n=Bi();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 uI(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&&eq.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=rq();if(e!==null){for(let t of e)try{await this.open(t)}catch{eq.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(tq);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{eq.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(tq)}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{eq.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),eq.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{eq.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(aq);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(aq,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(oq);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(oq,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(tq,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,iq([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<cq))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)){eq.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),eq.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{eq.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),eq.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{eq.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 GK(this.fs),eq.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){eq.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){eq.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){eq.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){eq.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 AI(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),Di(e),eq.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),eq.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){eq.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(),eq.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),eq.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=>{eq.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=sq.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){eq.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){eq.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};function uq(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 dq(e){let{layout:t,client:n,localFs:r,writableFs:i,useRpcVfs:a,inlineSprinkles:o,log:s}=e,c=new lq(a?SK({reader:i,writer:i}):r,async t=>fq(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:uq(n)});return window.__slicc_sprinkleManager=c,eL(uq(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;mq(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=>RK(e,r),t.updateAddButtons(),await c.restoreOpenSprinkles(),s.info(`SprinkleManager initialized (extension mode)`),c}async function fq(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 pq(t,n.log);return}n.client.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}}async function pq(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 wU(i),e.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:i.name})}catch(e){t.warn(`Mount picker failed`,e),n()}}async function mq(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 hq(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 gq(){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 _q=e({detectWelcomeFirstRun:()=>Aq,hasOnboardingFinalLickInHistory:()=>Pq,hasWelcomeLickInHistory:()=>Oq,recordWelcomed:()=>jq}),vq=d(`welcome-detection`),yq=`/shared/.welcomed`,bq=`browser-coding-agent`,xq=1,Sq=`sessions`,Cq=`session-cone`,wq=`[Sprinkle Event: welcome]`;function Tq(){return new Promise((e,t)=>{let n=indexedDB.open(bq,xq);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Sq)||e.createObjectStore(Sq,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function Eq(){return Tq().catch(()=>new Promise((e,t)=>{setTimeout(()=>{Tq().then(e,t)},120)}))}async function Dq(){let e=await Eq();try{return await new Promise((t,n)=>{let r=e.transaction(Sq,`readonly`).objectStore(Sq).get(Cq);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function Oq(){try{let e=await Dq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>kq(e))}catch(e){return vq.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function kq(e){let t=e.content;return typeof t==`string`?t.includes(wq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(wq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(wq)}return!1}):!1}async function Aq(e){let t=!1;try{t=await e.exists(yq)}catch(e){return vq.warn(`Failed to read welcomed marker`,{path:yq,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await Oq()?{isFirstRun:!1}:{isFirstRun:!0}}async function jq(e){await e.writeFile(yq,`1`)}var Mq=`"action":"onboarding-complete-with-provider"`;function Nq(e){let t=e.content;return typeof t==`string`?t.includes(Mq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(Mq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(Mq)}return!1}):!1}async function Pq(){try{let e=await Dq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Nq(e))}catch(e){return vq.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Fq(e){let{vfs:t,storage:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:o}=e;Rn(n)||Aq(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 Iq(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-De1qIJHZ.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-D68JEESV.js`);return{installNukeReloadListener:e}},[]),_=g();u.addEventListener(`beforeunload`,()=>{s(),c(),_(),h.dispose(),l()},{once:!0}),aU()&&await oU(n.panels.chat),Ti().catch(()=>{}),rU(r,{isWriter:!i||a.isLeader}),d.info(`Standalone kernel-worker UI ready`)}function Lq(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 Rq(e){let t=Lq(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function zq(e,t){let n=Lq(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 Bq(){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 Vq(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 ai(r,Rq(s.port1)),u=zq(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 Hq(e){return Vq({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-D0mD7VaJ.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,migrationStallTimeoutMs:e.migrationStallTimeoutMs,localStorageSeed:e.localStorageSeed??Bq(),instanceId:e.instanceId,onMigrationStart:e.onMigrationStart,onMigrationProgress:e.onMigrationProgress,onMigrationFinish:e.onMigrationFinish})}var Uq=`slicc-migration-splash`,Wq=`"Adobe Clean", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`;function Gq(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=Uq,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=Wq,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=Wq;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 Kq(e){let{realCdpTransport:t,instanceId:n,layout:r,log:i,getSelectedScoop:a,setSelectedScoop:o}=e,s=e=>{let t=e.config?.modelId,n=t?eo(t):to();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=Gq({root:document.body,logger:i}),e&&d.arm())},m=Hq({realCdpTransport:t,instanceId:n,onMigrationStart:()=>p(!0),onMigrationProgress:e=>{p(!0),d?.updateProgress(e)},onMigrationFinish:()=>{f()},callbacks:{onStatusChange:(e,t)=>qq(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)=>Jq(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 qq(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 Jq(e,t,n,r){r()?.jid===e&&t.channel!==`web`&&_r(t.channel)&&n.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())}function Yq(e){let{layout:t,vfs:n,log:r}=e;return t.onFrozenSessionOpen=e=>{(async()=>{try{let r=await n.panelReadVfs.readFile(GH(e),{encoding:`utf-8`}),i=ZH(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 Xq(e){let{layout:t,log:n}=e,r=qG()===`opfs`,i=await JG.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}))}SW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await TW(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 EW({channel:s,getReader:()=>c.panelReadVfs,logger:n}),c}async function Zq(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 Qq(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 Lr().catch(()=>{}),await new an().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 ore(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 tU({vfs:r.writableFs})}catch(e){i.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await eU({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 $q(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;n.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=to().contextWindow??t}catch{}n.setNewSessionGlow(e/t)};let a=t.createAgentHandle();return n.panels.chat.setAgent(a),n.panels.chat.setAttachmentWriter(HU(r.localFs)),n.panels.chat.setDeleteQueuedMessageCallback(e=>{i.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)}),a}async function eJ(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;Qq(e),await Zq({handle:r,client:t,layout:n,log:i}),ore(e);let a=Yq({layout:n,vfs:r,log:i});return{agentHandle:$q(e),frozenSessions:a}}async function tJ(e){let{installSudoTestHook:t}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-Cw4ipR5k.js`);return{installSudoTestHook:e}},__vite__mapDeps([40,14]));t()}async function nJ(e){let{installPanelSudoResponder:t}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-Cw4ipR5k.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([40,14]));t()}function rJ(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function iJ(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-BYIfy3ZR.js`);return{BrowserAPI:e}},__vite__mapDeps([41,1,14]));await tJ({log:i});let c=await Kn(),l=dr(a?`electron-overlay`:`standalone`,c!==null)?Mn:null;await Wn({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-eqj0Nu2C.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:rJ(),isElectronOverlay:a}}function aJ(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 oJ(e){return!e.includes(`\0`)}function sJ(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(!oJ(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(!oJ(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),!oJ(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),!oJ(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(oJ(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 cJ=new Set([`setItem`,`removeItem`,`clear`]);function lJ(e){let{client:t,localStorage:n}=e,r=sJ({send:e=>t.sendRaw(e)});for(let e=0;e<n.length;e++){let r=n.key(e);if(r!==null&&!cJ.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 uJ(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(),lJ({client:t,localStorage:a})}var dJ=d(`welcome-sentinel`),fJ=`/shared/.welcomed`;function pJ(e){if(!e.isWriter){dJ.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(fJ,`1`).catch(e=>dJ.warn(`Failed to persist welcome completion marker`,e))}async function mJ(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(()=>Hi),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 gU({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=>QI(e),onFireFinalLick:e=>{pU(t),AU(String(e?.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-worker`,l)}});return{onboardingHandle:h,interceptWelcomeLick:MU({firedWelcomeActions:c,getAccounts:d,getProviderConfig:f,resolveDeviceCodeDecision:m,getOnboardingOrchestrator:()=>h.get(),applyPendingMount:()=>TU(r,l),fastForward:{fire:e=>{AU(String(e.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-worker`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return f(e)}catch{return null}})();QI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{pJ({writableFs:i,isWriter:!a||s})},contextLabel:`worker`,vfs:r,log:l})}}var hJ=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}}},gJ=d(`tray-sync`),_J=`slicc-cherry`;function vJ(e){return typeof e==`object`&&!!e&&e.type===`cherry.host_event`}var yJ=32*1024;function bJ(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/yJ),o=!0;for(let n=0;n<a;n++){let r=i.slice(n*yJ,(n+1)*yJ);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 xJ(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 SJ=32*1024;function CJ(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/SJ),a=!0;for(let t=0;t<i;t++){let o=r.slice(t*SJ,(t+1)*SJ);if(!e.send({type:`snapshot_chunk`,chunkData:o,chunkIndex:t,totalChunks:i,scoopJid:n})){a=!1,gJ.error(`Failed to send snapshot chunk`,{chunkIndex:t,totalChunks:i,totalSize:r.length});break}}return gJ.debug(`Snapshot sent in chunks`,{totalChunks:i,totalSize:r.length}),a}function wJ(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 gJ.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 TJ=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){gJ.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 gJ.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 EJ(e){return new TJ(e)}function DJ(e){return new TJ(e)}var OJ=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=xJ(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)}},kJ=d(`data-channel-keepalive`),AJ=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++,kJ.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){kJ.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}};d(`lick-manager`);var jJ=new Set([`navigate`]),MJ=64*1024;async function NJ(e,t){try{switch(t.op){case`readFile`:return await PJ(e,t.path,t.encoding);case`writeFile`:return[await FJ(e,t.path,t.content,t.encoding)];case`stat`:return[await IJ(e,t.path)];case`readDir`:return[await LJ(e,t.path)];case`mkdir`:return[await RJ(e,t.path,t.recursive)];case`rm`:return[await zJ(e,t.path,t.recursive)];case`exists`:return[await BJ(e,t.path)];case`walk`:return[await VJ(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[UJ(e)]}}async function PJ(e,t,n){return(n??`utf-8`)===`utf-8`?HJ(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):HJ(WJ(await e.readFile(t,{encoding:`binary`})),`base64`)}async function FJ(e,t,n,r){if(r===`base64`){let r=GJ(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function IJ(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function LJ(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function RJ(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function zJ(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function BJ(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function VJ(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function HJ(e,t){if(e.length<=MJ)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/MJ),r=[];for(let i=0;i<n;i++){let a=i*MJ,o=e.slice(a,a+MJ);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function UJ(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 WJ(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function GJ(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 KJ=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()]}},qJ=d(`tray-leader-sync`);function JJ(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function YJ(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 XJ(e){return e.kind===`cherry`}function ZJ(e,t){return e.filter(e=>XJ(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var QJ=class e{options;followers=new Map;registry=new KJ;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=EJ(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new AJ({sendPing:()=>r.send({type:`ping`}),onDead:()=>{qJ.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:JJ(n?.runtime)}),qJ.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(),qJ.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),qJ.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?Gt(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){qJ.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,CJ(n.sync,i,r),qJ.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){qJ.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){qJ.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){qJ.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){qJ.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`:{qJ.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Gt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:qJ.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:qJ.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{qJ.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`:qJ.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`:{qJ.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=YJ(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){qJ.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!jJ.has(n.type)){qJ.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:YJ(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){qJ.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:qJ.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),qJ.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 OJ({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),qJ.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){qJ.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:ZJ(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);bJ(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=xJ(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&&bJ(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(!vJ(t))return;let n=this.options.onCherryHostEvent;if(!n){qJ.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){qJ.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}):(qJ.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=>!XJ(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 NJ(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?NJ(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})})}},$J=d(`tray-follower`);function eY(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function tY(e){let t=eY(e.joinUrl),n=await cY(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return $J.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),nY(n)}function nY(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 rY(e){return sY(await lY(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function iY(e){return sY(await lY(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function aY(e){return sY(await lY(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function oY(e){return sY(await lY(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function sY(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function cY(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!uY(n)){let n=t?t.slice(0,200):`(empty)`;throw $J.warn(`Tray follower attach returned an invalid response`,{status:e.status,body:n}),Error(`Tray follower attach returned an invalid response (${e.status}): ${n}`)}return n}async function lY(e,t){let n=eY(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(!dY(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function uY(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`&&fY(r.bootstrap):r.action===`fail`?(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function dY(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`&&fY(t.bootstrap)&&Array.isArray(t.events)}function fY(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 pY=d(`tray-webrtc`),mY=`tray-control`,hY=250,gY=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>yY(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??mY}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=xY(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`)&&(pY.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`?(pY.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`?(pY.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:bY(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){pY.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},_Y=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??(()=>yY(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??hY}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();er({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),pY.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0;for(;;){SY(this.stopped),n++;let t;try{t=await tY({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 er({...Xn(),attachAttempts:n,lastError:t}),e}if(er({...Xn(),attachAttempts:n,lastAttachCode:t.code}),t.action===`wait`){let e=t.retryAfterMs??1e3;pY.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&pY.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 er({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),pY.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 er({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),pY.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw er({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),pY.warn(`Follower tray bootstrap failed`,{error:r}),e}}}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,er({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(SY(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 rY({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 iY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,answer:bY(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 oY({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`)&&(pY.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?(pY.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?(pY.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=xY(n);r&&aY({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{pY.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function vY(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 _Y({...e,sleep:o,onDisconnected:e=>{s||(pY.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),er({...Xn(),state:`reconnecting`,error:null,reconnectAttempts:f}),pY.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,er({...Xn(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),pY.info(`Reconnect successful`,{attempt:f,trayId:i.trayId}),t.onConnected(i);return}catch(e){m=e instanceof Error?e.message:String(e),pY.warn(`Reconnect attempt failed`,{attempt:f,error:m}),n?.stop(),l=null}p=Math.min(p*r,i)}s||(c=!1,er({...Xn(),state:`error`,error:`Reconnect failed after ${f} attempts: ${m}`,reconnectAttempts:f}),pY.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||pY.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)})}),u}function yY(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 bY(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 xY(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 SY(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}var CY=d(`page-leader-tray`);function wY(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new QJ({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 gY({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{CY.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)=>{CY.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new ti({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=>{CY.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{CY.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{CY.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{CY.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new hJ(CY,{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){CY.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){CY.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??TY();if(n)try{let e=Bn(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){CY.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{CY.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()),Yr()},leader:r,peers:i,sync:a}}function TY(){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 EY(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 DY(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 OY=(e,t,n)=>{let r=e instanceof RegExp?kY(e,n):e,i=t instanceof RegExp?kY(t,n):t,a=r!==null&&i!=null&&AY(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)}},kY=(e,t)=>{let n=t.match(e);return n?n[0]:null},AY=(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},jY=`\0SLASH`+Math.random()+`\0`,MY=`\0OPEN`+Math.random()+`\0`,NY=`\0CLOSE`+Math.random()+`\0`,PY=`\0COMMA`+Math.random()+`\0`,FY=`\0PERIOD`+Math.random()+`\0`,IY=new RegExp(jY,`g`),LY=new RegExp(MY,`g`),RY=new RegExp(NY,`g`),zY=new RegExp(PY,`g`),BY=new RegExp(FY,`g`),VY=/\\\\/g,HY=/\\{/g,UY=/\\}/g,WY=/\\,/g,GY=/\\\./g,KY=1e5;function qY(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function JY(e){return e.replace(VY,jY).replace(HY,MY).replace(UY,NY).replace(WY,PY).replace(GY,FY)}function YY(e){return e.replace(IY,`\\`).replace(LY,`{`).replace(RY,`}`).replace(zY,`,`).replace(BY,`.`)}function XY(e){if(!e)return[``];let t=[],n=OY(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=XY(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function ZY(e,t={}){if(!e)return[];let{max:n=KY}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),nX(JY(e),n,!0).map(YY)}function QY(e){return`{`+e+`}`}function $Y(e){return/^-?0\d/.test(e)}function eX(e,t){return e<=t}function tX(e,t){return e>=t}function nX(e,t,n){let r=[],i=OY(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?nX(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+NY+i.post,nX(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=XY(i.body),d.length===1&&d[0]!==void 0&&(d=nX(d[0],t,!1).map(QY),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=qY(d[0]),t=qY(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(qY(d[2])):1,i=eX;t<e&&(r*=-1,i=tX);let a=d.some($Y);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,nX(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 rX=1024*64,iX=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>rX)throw TypeError(`pattern is too long`)},aX={"[: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]},oX=e=>e.replace(/[[\]\\-]/g,`\\$&`),sX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),cX=e=>e.join(``),lX=(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(aX))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(oX(d)+`-`+oX(t)):t===d&&r.push(oX(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push(oX(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push(oX(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[sX(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+cX(r)+`]`,p=`[`+(l?``:`^`)+cX(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},uX=(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`),dX,fX=new Set([`!`,`?`,`+`,`*`,`@`]),pX=e=>fX.has(e),mX=e=>pX(e.type),hX=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),gX=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),_X=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),vX=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),yX=`(?!(?:^|/)\\.\\.?(?:$|/))`,bX=`(?!\\.)`,xX=new Set([`[`,`.`]),SX=new Set([`..`,`.`]),CX=new Set(`().*{}+?[]^$\\!`),wX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),TX=`[^/]`,EX=`[^/]*?`,DX=`[^/]+?`,OX=0,kX=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++OX;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 dX&&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 dX&&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 dX(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&&pX(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new dX(n,t);u=dX.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new dX(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&&pX(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 dX(n,d);d.push(o),u=dX.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new dX(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,gX)}#m(e,t=hX){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=_X){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new dX(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!!vX.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=vX.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 dX(null,void 0,t);return dX.#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()),!mX(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`?dX.#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&&SX.has(this.#r[0]))){let n=xX,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?yX:o?bX:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,uX(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,uX(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?bX:``)+DX;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?bX:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,uX(i),this.#t=!!this.#t,this.#n]}#x(){if(mX(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+=(CX.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?DX:EX,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=lX(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=TX,t=!0;continue}i+=wX(c)}return[i,uX(e),!!t,a]}};dX=kX;var AX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),jX=(e,t,n={})=>(iX(t),!n.nocomment&&t.charAt(0)===`#`?!1:new cZ(t,n).match(e)),MX=/^\*+([^+@!?\*\[\(]*)$/,NX=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),PX=e=>t=>t.endsWith(e),FX=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),IX=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),LX=/^\*+\.\*+$/,RX=e=>!e.startsWith(`.`)&&e.includes(`.`),zX=e=>e!==`.`&&e!==`..`&&e.includes(`.`),BX=/^\.\*+$/,VX=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),HX=/^\*+$/,UX=e=>e.length!==0&&!e.startsWith(`.`),WX=e=>e.length!==0&&e!==`.`&&e!==`..`,GX=/^\?+([^+@!?\*\[\(]*)?$/,KX=([e,t=``])=>{let n=XX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},qX=([e,t=``])=>{let n=ZX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},JX=([e,t=``])=>{let n=ZX([e]);return t?e=>n(e)&&e.endsWith(t):n},YX=([e,t=``])=>{let n=XX([e]);return t?e=>n(e)&&e.endsWith(t):n},XX=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},ZX=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},QX=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,$X={win32:{sep:`\\`},posix:{sep:`/`}};jX.sep=QX===`win32`?$X.win32.sep:$X.posix.sep;var eZ=Symbol(`globstar **`);jX.GLOBSTAR=eZ;var tZ=`[^/]*?`,nZ=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,rZ=`(?:(?!(?:\\/|^)\\.).)*?`;jX.filter=(e,t={})=>n=>jX(n,e,t);var iZ=(e,t={})=>Object.assign({},e,t);jX.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return jX;let t=jX;return Object.assign((n,r,i={})=>t(n,r,iZ(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,iZ(e,n))}static defaults(n){return t.defaults(iZ(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,iZ(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,iZ(e,r))}},unescape:(n,r={})=>t.unescape(n,iZ(e,r)),escape:(n,r={})=>t.escape(n,iZ(e,r)),filter:(n,r={})=>t.filter(n,iZ(e,r)),defaults:n=>t.defaults(iZ(e,n)),makeRe:(n,r={})=>t.makeRe(n,iZ(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,iZ(e,r)),match:(n,r,i={})=>t.match(n,r,iZ(e,i)),sep:t.sep,GLOBSTAR:eZ})};var aZ=(e,t={})=>(iX(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:ZY(e,{max:t.braceExpandMax}));jX.braceExpand=aZ,jX.makeRe=(e,t={})=>new cZ(e,t).makeRe(),jX.match=(e,t,n={})=>{let r=new cZ(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var oZ=/[?*]|[+@!]\(.*?\)|\[|\]/,sZ=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),cZ=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){iX(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||QX,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]===`?`||!oZ.test(e[2]))&&!oZ.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(eZ)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(eZ,i),o=t.lastIndexOf(eZ),[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===eZ?(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===eZ)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 aZ(this.pattern,this.options)}parse(e){iX(e);let t=this.options;if(e===`**`)return eZ;if(e===``)return``;let n,r=null;(n=e.match(HX))?r=t.dot?WX:UX:(n=e.match(MX))?r=(t.nocase?t.dot?IX:FX:t.dot?PX:NX)(n[1]):(n=e.match(GX))?r=(t.nocase?t.dot?qX:KX:t.dot?JX:YX)(n):(n=e.match(LX))?r=t.dot?zX:RX:(n=e.match(BX))&&(r=VX);let i=kX.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?tZ:t.dot?nZ:rZ,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`?sZ(e):e===eZ?eZ:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==eZ||a===eZ||(a===void 0?i!==void 0&&i!==eZ?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==eZ&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=eZ))});let i=t.filter(e=>e!==eZ);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 jX.defaults(e).Minimatch}};jX.AST=kX,jX.Minimatch=cZ,jX.escape=AX,jX.unescape=uX;var lZ={};function uZ(){throw Error(`gunzipSync is not available in the browser`)}function dZ(){throw Error(`gzipSync is not available in the browser`)}var fZ=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 fZ{};function pZ(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 mZ(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 hZ(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 gZ(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 _Z(e,t){return hZ(e,t,``)}function vZ(e,t){return gZ(e,t,``)}function yZ(e,t){return t.slice(0,bZ(e,t))}function bZ(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 xZ(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function SZ(e){let t=e.match(/^\s*/);return t?t[0]:``}var CZ=`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}`,wZ=RegExp(`[${CZ}]+|\\s+|[^${CZ}]`,`ug`);new class extends fZ{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(wZ)||[];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)&&TZ(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&TZ(n,i,r,null),e}};function TZ(e,t,n,r){if(t&&n){let i=SZ(t.value),a=xZ(t.value),o=SZ(n.value),s=xZ(n.value);if(e){let r=pZ(i,o);e.value=gZ(e.value,o,r),t.value=_Z(t.value,r),n.value=_Z(n.value,r)}if(r){let e=mZ(a,s);r.value=hZ(r.value,s,e),t.value=vZ(t.value,e),n.value=vZ(n.value,e)}}else if(n){if(e){let e=SZ(n.value);n.value=n.value.substring(e.length)}if(r){let e=SZ(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=SZ(r.value),i=SZ(t.value),a=xZ(t.value),o=pZ(n,i);t.value=_Z(t.value,o);let s=mZ(_Z(n,o),a);t.value=vZ(t.value,s),r.value=hZ(r.value,n,s),e.value=gZ(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=SZ(r.value),n=yZ(xZ(t.value),e);t.value=vZ(t.value,n)}else if(e){let n=yZ(xZ(e.value),SZ(t.value));t.value=_Z(t.value,n)}}new class extends fZ{tokenize(e){let t=RegExp(`(\\r?\\n)|[${CZ}]+|[^\\S\\n\\r]+|[^${CZ}]`,`ug`);return e.match(t)||[]}},new class extends fZ{constructor(){super(...arguments),this.tokenize=EZ}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 _q=e({detectWelcomeFirstRun:()=>Aq,hasOnboardingFinalLickInHistory:()=>Pq,hasWelcomeLickInHistory:()=>Oq,recordWelcomed:()=>jq}),vq=d(`welcome-detection`),yq=`/shared/.welcomed`,bq=`browser-coding-agent`,xq=1,Sq=`sessions`,Cq=`session-cone`,wq=`[Sprinkle Event: welcome]`;function Tq(){return new Promise((e,t)=>{let n=indexedDB.open(bq,xq);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Sq)||e.createObjectStore(Sq,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function Eq(){return Tq().catch(()=>new Promise((e,t)=>{setTimeout(()=>{Tq().then(e,t)},120)}))}async function Dq(){let e=await Eq();try{return await new Promise((t,n)=>{let r=e.transaction(Sq,`readonly`).objectStore(Sq).get(Cq);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function Oq(){try{let e=await Dq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>kq(e))}catch(e){return vq.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function kq(e){let t=e.content;return typeof t==`string`?t.includes(wq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(wq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(wq)}return!1}):!1}async function Aq(e){let t=!1;try{t=await e.exists(yq)}catch(e){return vq.warn(`Failed to read welcomed marker`,{path:yq,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await Oq()?{isFirstRun:!1}:{isFirstRun:!0}}async function jq(e){await e.writeFile(yq,`1`)}var Mq=`"action":"onboarding-complete-with-provider"`;function Nq(e){let t=e.content;return typeof t==`string`?t.includes(Mq):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(Mq);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(Mq)}return!1}):!1}async function Pq(){try{let e=await Dq();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>Nq(e))}catch(e){return vq.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function Fq(e){let{vfs:t,storage:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOrchestrator:a,log:o}=e;Rn(n)||Aq(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 Iq(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-KmVK656b.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-CifmXH3e.js`);return{installNukeReloadListener:e}},[]),_=g();u.addEventListener(`beforeunload`,()=>{s(),c(),_(),h.dispose(),l()},{once:!0}),aU()&&await oU(n.panels.chat),Ti().catch(()=>{}),rU(r,{isWriter:!i||a.isLeader}),d.info(`Standalone kernel-worker UI ready`)}function Lq(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 Rq(e){let t=Lq(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`panel`,payload:e},n)}}}function zq(e,t){let n=Lq(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 Bq(){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 Vq(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 ai(r,Rq(s.port1)),u=zq(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 Hq(e){return Vq({worker:e.workerUrl?new Worker(e.workerUrl,{type:`module`}):new Worker(new URL(`/assets/kernel-worker-cTmGHAnO.js`,``+import.meta.url),{type:`module`}),realCdpTransport:e.realCdpTransport,callbacks:e.callbacks,readyTimeoutMs:e.readyTimeoutMs,migrationStallTimeoutMs:e.migrationStallTimeoutMs,localStorageSeed:e.localStorageSeed??Bq(),instanceId:e.instanceId,onMigrationStart:e.onMigrationStart,onMigrationProgress:e.onMigrationProgress,onMigrationFinish:e.onMigrationFinish})}var Uq=`slicc-migration-splash`,Wq=`"Adobe Clean", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`;function Gq(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=Uq,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=Wq,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=Wq;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 Kq(e){let{realCdpTransport:t,instanceId:n,layout:r,log:i,getSelectedScoop:a,setSelectedScoop:o}=e,s=e=>{let t=e.config?.modelId,n=t?eo(t):to();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=Gq({root:document.body,logger:i}),e&&d.arm())},m=Hq({realCdpTransport:t,instanceId:n,onMigrationStart:()=>p(!0),onMigrationProgress:e=>{p(!0),d?.updateProgress(e)},onMigrationFinish:()=>{f()},callbacks:{onStatusChange:(e,t)=>qq(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)=>Jq(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 qq(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 Jq(e,t,n,r){r()?.jid===e&&t.channel!==`web`&&_r(t.channel)&&n.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())}function Yq(e){let{layout:t,vfs:n,log:r}=e;return t.onFrozenSessionOpen=e=>{(async()=>{try{let r=await n.panelReadVfs.readFile(GH(e),{encoding:`utf-8`}),i=ZH(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 Xq(e){let{layout:t,log:n}=e,r=qG()===`opfs`,i=await JG.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}))}SW().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await TW(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 EW({channel:s,getReader:()=>c.panelReadVfs,logger:n}),c}async function Zq(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 Qq(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 Lr().catch(()=>{}),await new an().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 ore(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 tU({vfs:r.writableFs})}catch(e){i.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await eU({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 $q(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;n.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=to().contextWindow??t}catch{}n.setNewSessionGlow(e/t)};let a=t.createAgentHandle();return n.panels.chat.setAgent(a),n.panels.chat.setAttachmentWriter(HU(r.localFs)),n.panels.chat.setDeleteQueuedMessageCallback(e=>{i.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)}),a}async function eJ(e){let{client:t,layout:n,vfsHandle:r,log:i}=e;Qq(e),await Zq({handle:r,client:t,layout:n,log:i}),ore(e);let a=Yq({layout:n,vfs:r,log:i});return{agentHandle:$q(e),frozenSessions:a}}async function tJ(e){let{installSudoTestHook:t}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-DPefVnj0.js`);return{installSudoTestHook:e}},__vite__mapDeps([40,14]));t()}async function nJ(e){let{installPanelSudoResponder:t}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-DPefVnj0.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([40,14]));t()}function rJ(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function iJ(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-BK5ta7TE.js`);return{BrowserAPI:e}},__vite__mapDeps([41,1,14]));await tJ({log:i});let c=await Kn(),l=dr(a?`electron-overlay`:`standalone`,c!==null)?Mn:null;await Wn({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-n40lka2a.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:rJ(),isElectronOverlay:a}}function aJ(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 oJ(e){return!e.includes(`\0`)}function sJ(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(!oJ(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(!oJ(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),!oJ(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),!oJ(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(oJ(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 cJ=new Set([`setItem`,`removeItem`,`clear`]);function lJ(e){let{client:t,localStorage:n}=e,r=sJ({send:e=>t.sendRaw(e)});for(let e=0;e<n.length;e++){let r=n.key(e);if(r!==null&&!cJ.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 uJ(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(),lJ({client:t,localStorage:a})}var dJ=d(`welcome-sentinel`),fJ=`/shared/.welcomed`;function pJ(e){if(!e.isWriter){dJ.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(fJ,`1`).catch(e=>dJ.warn(`Failed to persist welcome completion marker`,e))}async function mJ(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(()=>Hi),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 gU({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=>QI(e),onFireFinalLick:e=>{pU(t),AU(String(e?.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`orchestrator-worker`,l)}});return{onboardingHandle:h,interceptWelcomeLick:MU({firedWelcomeActions:c,getAccounts:d,getProviderConfig:f,resolveDeviceCodeDecision:m,getOnboardingOrchestrator:()=>h.get(),applyPendingMount:()=>TU(r,l),fastForward:{fire:e=>{AU(String(e.action??``),c,()=>t.sendSprinkleLick(`welcome`,e),`fast-forward-worker`,l)},broadcastAlreadyConnected:e=>{let t=(()=>{try{return f(e)}catch{return null}})();QI({type:`slicc-already-connected`,provider:e,note:t?.name?`Already connected to ${t.name}.`:`Already connected.`})}},onShortcutMigrate:()=>{pJ({writableFs:i,isWriter:!a||s})},contextLabel:`worker`,vfs:r,log:l})}}var hJ=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}}},gJ=d(`tray-sync`),_J=`slicc-cherry`;function vJ(e){return typeof e==`object`&&!!e&&e.type===`cherry.host_event`}var yJ=32*1024;function bJ(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/yJ),o=!0;for(let n=0;n<a;n++){let r=i.slice(n*yJ,(n+1)*yJ);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 xJ(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 SJ=32*1024;function CJ(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/SJ),a=!0;for(let t=0;t<i;t++){let o=r.slice(t*SJ,(t+1)*SJ);if(!e.send({type:`snapshot_chunk`,chunkData:o,chunkIndex:t,totalChunks:i,scoopJid:n})){a=!1,gJ.error(`Failed to send snapshot chunk`,{chunkIndex:t,totalChunks:i,totalSize:r.length});break}}return gJ.debug(`Snapshot sent in chunks`,{totalChunks:i,totalSize:r.length}),a}function wJ(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 gJ.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 TJ=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){gJ.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 gJ.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 EJ(e){return new TJ(e)}function DJ(e){return new TJ(e)}var OJ=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=xJ(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)}},kJ=d(`data-channel-keepalive`),AJ=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++,kJ.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){kJ.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}};d(`lick-manager`);var jJ=new Set([`navigate`]),MJ=64*1024;async function NJ(e,t){try{switch(t.op){case`readFile`:return await PJ(e,t.path,t.encoding);case`writeFile`:return[await FJ(e,t.path,t.content,t.encoding)];case`stat`:return[await IJ(e,t.path)];case`readDir`:return[await LJ(e,t.path)];case`mkdir`:return[await RJ(e,t.path,t.recursive)];case`rm`:return[await zJ(e,t.path,t.recursive)];case`exists`:return[await BJ(e,t.path)];case`walk`:return[await VJ(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[UJ(e)]}}async function PJ(e,t,n){return(n??`utf-8`)===`utf-8`?HJ(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):HJ(WJ(await e.readFile(t,{encoding:`binary`})),`base64`)}async function FJ(e,t,n,r){if(r===`base64`){let r=GJ(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function IJ(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function LJ(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function RJ(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function zJ(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function BJ(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function VJ(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function HJ(e,t){if(e.length<=MJ)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/MJ),r=[];for(let i=0;i<n;i++){let a=i*MJ,o=e.slice(a,a+MJ);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function UJ(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 WJ(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function GJ(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 KJ=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()]}},qJ=d(`tray-leader-sync`);function JJ(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function YJ(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 XJ(e){return e.kind===`cherry`}function ZJ(e,t){return e.filter(e=>XJ(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var QJ=class e{options;followers=new Map;registry=new KJ;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=EJ(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new AJ({sendPing:()=>r.send({type:`ping`}),onDead:()=>{qJ.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:JJ(n?.runtime)}),qJ.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(),qJ.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),qJ.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?Gt(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){qJ.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,CJ(n.sync,i,r),qJ.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){qJ.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){qJ.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){qJ.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){qJ.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`:{qJ.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Gt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:qJ.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:qJ.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{qJ.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`:qJ.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`:{qJ.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=YJ(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){qJ.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!jJ.has(n.type)){qJ.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:YJ(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){qJ.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:qJ.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),qJ.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 OJ({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),qJ.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){qJ.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:ZJ(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);bJ(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=xJ(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&&bJ(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(!vJ(t))return;let n=this.options.onCherryHostEvent;if(!n){qJ.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){qJ.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}):(qJ.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=>!XJ(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 NJ(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?NJ(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})})}},$J=d(`tray-follower`);function eY(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function tY(e){let t=eY(e.joinUrl),n=await cY(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return $J.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),nY(n)}function nY(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 rY(e){return sY(await lY(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function iY(e){return sY(await lY(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function aY(e){return sY(await lY(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function oY(e){return sY(await lY(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function sY(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function cY(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!uY(n)){let n=t?t.slice(0,200):`(empty)`;throw $J.warn(`Tray follower attach returned an invalid response`,{status:e.status,body:n}),Error(`Tray follower attach returned an invalid response (${e.status}): ${n}`)}return n}async function lY(e,t){let n=eY(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(!dY(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function uY(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`&&fY(r.bootstrap):r.action===`fail`?(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function dY(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`&&fY(t.bootstrap)&&Array.isArray(t.events)}function fY(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 pY=d(`tray-webrtc`),mY=`tray-control`,hY=250,gY=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>yY(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??mY}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=xY(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`)&&(pY.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`?(pY.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`?(pY.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:bY(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){pY.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},_Y=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??(()=>yY(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??hY}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();er({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),pY.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0;for(;;){SY(this.stopped),n++;let t;try{t=await tY({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 er({...Xn(),attachAttempts:n,lastError:t}),e}if(er({...Xn(),attachAttempts:n,lastAttachCode:t.code}),t.action===`wait`){let e=t.retryAfterMs??1e3;pY.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&pY.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 er({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),pY.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 er({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),pY.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw er({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),pY.warn(`Follower tray bootstrap failed`,{error:r}),e}}}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,er({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(SY(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 rY({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 iY({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,answer:bY(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 oY({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`)&&(pY.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?(pY.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?(pY.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=xY(n);r&&aY({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{pY.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function vY(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 _Y({...e,sleep:o,onDisconnected:e=>{s||(pY.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),er({...Xn(),state:`reconnecting`,error:null,reconnectAttempts:f}),pY.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,er({...Xn(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),pY.info(`Reconnect successful`,{attempt:f,trayId:i.trayId}),t.onConnected(i);return}catch(e){m=e instanceof Error?e.message:String(e),pY.warn(`Reconnect attempt failed`,{attempt:f,error:m}),n?.stop(),l=null}p=Math.min(p*r,i)}s||(c=!1,er({...Xn(),state:`error`,error:`Reconnect failed after ${f} attempts: ${m}`,reconnectAttempts:f}),pY.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||pY.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)})}),u}function yY(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 bY(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 xY(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 SY(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}var CY=d(`page-leader-tray`);function wY(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new QJ({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 gY({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{CY.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)=>{CY.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new ti({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=>{CY.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{CY.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{CY.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{CY.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new hJ(CY,{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){CY.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){CY.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??TY();if(n)try{let e=Bn(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){CY.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{CY.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()),Yr()},leader:r,peers:i,sync:a}}function TY(){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 EY(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 DY(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 OY=(e,t,n)=>{let r=e instanceof RegExp?kY(e,n):e,i=t instanceof RegExp?kY(t,n):t,a=r!==null&&i!=null&&AY(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)}},kY=(e,t)=>{let n=t.match(e);return n?n[0]:null},AY=(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},jY=`\0SLASH`+Math.random()+`\0`,MY=`\0OPEN`+Math.random()+`\0`,NY=`\0CLOSE`+Math.random()+`\0`,PY=`\0COMMA`+Math.random()+`\0`,FY=`\0PERIOD`+Math.random()+`\0`,IY=new RegExp(jY,`g`),LY=new RegExp(MY,`g`),RY=new RegExp(NY,`g`),zY=new RegExp(PY,`g`),BY=new RegExp(FY,`g`),VY=/\\\\/g,HY=/\\{/g,UY=/\\}/g,WY=/\\,/g,GY=/\\\./g,KY=1e5;function qY(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function JY(e){return e.replace(VY,jY).replace(HY,MY).replace(UY,NY).replace(WY,PY).replace(GY,FY)}function YY(e){return e.replace(IY,`\\`).replace(LY,`{`).replace(RY,`}`).replace(zY,`,`).replace(BY,`.`)}function XY(e){if(!e)return[``];let t=[],n=OY(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=XY(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function ZY(e,t={}){if(!e)return[];let{max:n=KY}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),nX(JY(e),n,!0).map(YY)}function QY(e){return`{`+e+`}`}function $Y(e){return/^-?0\d/.test(e)}function eX(e,t){return e<=t}function tX(e,t){return e>=t}function nX(e,t,n){let r=[],i=OY(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?nX(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+NY+i.post,nX(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=XY(i.body),d.length===1&&d[0]!==void 0&&(d=nX(d[0],t,!1).map(QY),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=qY(d[0]),t=qY(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(qY(d[2])):1,i=eX;t<e&&(r*=-1,i=tX);let a=d.some($Y);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,nX(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 rX=1024*64,iX=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>rX)throw TypeError(`pattern is too long`)},aX={"[: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]},oX=e=>e.replace(/[[\]\\-]/g,`\\$&`),sX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),cX=e=>e.join(``),lX=(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(aX))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(oX(d)+`-`+oX(t)):t===d&&r.push(oX(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push(oX(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push(oX(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[sX(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+cX(r)+`]`,p=`[`+(l?``:`^`)+cX(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},uX=(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`),dX,fX=new Set([`!`,`?`,`+`,`*`,`@`]),pX=e=>fX.has(e),mX=e=>pX(e.type),hX=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),gX=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),_X=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),vX=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),yX=`(?!(?:^|/)\\.\\.?(?:$|/))`,bX=`(?!\\.)`,xX=new Set([`[`,`.`]),SX=new Set([`..`,`.`]),CX=new Set(`().*{}+?[]^$\\!`),wX=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),TX=`[^/]`,EX=`[^/]*?`,DX=`[^/]+?`,OX=0,kX=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++OX;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 dX&&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 dX&&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 dX(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&&pX(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new dX(n,t);u=dX.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new dX(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&&pX(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 dX(n,d);d.push(o),u=dX.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new dX(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,gX)}#m(e,t=hX){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=_X){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new dX(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!!vX.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=vX.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 dX(null,void 0,t);return dX.#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()),!mX(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`?dX.#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&&SX.has(this.#r[0]))){let n=xX,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?yX:o?bX:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,uX(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,uX(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?bX:``)+DX;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?bX:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,uX(i),this.#t=!!this.#t,this.#n]}#x(){if(mX(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+=(CX.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?DX:EX,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=lX(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=TX,t=!0;continue}i+=wX(c)}return[i,uX(e),!!t,a]}};dX=kX;var AX=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),jX=(e,t,n={})=>(iX(t),!n.nocomment&&t.charAt(0)===`#`?!1:new cZ(t,n).match(e)),MX=/^\*+([^+@!?\*\[\(]*)$/,NX=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),PX=e=>t=>t.endsWith(e),FX=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),IX=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),LX=/^\*+\.\*+$/,RX=e=>!e.startsWith(`.`)&&e.includes(`.`),zX=e=>e!==`.`&&e!==`..`&&e.includes(`.`),BX=/^\.\*+$/,VX=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),HX=/^\*+$/,UX=e=>e.length!==0&&!e.startsWith(`.`),WX=e=>e.length!==0&&e!==`.`&&e!==`..`,GX=/^\?+([^+@!?\*\[\(]*)?$/,KX=([e,t=``])=>{let n=XX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},qX=([e,t=``])=>{let n=ZX([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},JX=([e,t=``])=>{let n=ZX([e]);return t?e=>n(e)&&e.endsWith(t):n},YX=([e,t=``])=>{let n=XX([e]);return t?e=>n(e)&&e.endsWith(t):n},XX=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},ZX=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},QX=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,$X={win32:{sep:`\\`},posix:{sep:`/`}};jX.sep=QX===`win32`?$X.win32.sep:$X.posix.sep;var eZ=Symbol(`globstar **`);jX.GLOBSTAR=eZ;var tZ=`[^/]*?`,nZ=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,rZ=`(?:(?!(?:\\/|^)\\.).)*?`;jX.filter=(e,t={})=>n=>jX(n,e,t);var iZ=(e,t={})=>Object.assign({},e,t);jX.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return jX;let t=jX;return Object.assign((n,r,i={})=>t(n,r,iZ(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,iZ(e,n))}static defaults(n){return t.defaults(iZ(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,iZ(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,iZ(e,r))}},unescape:(n,r={})=>t.unescape(n,iZ(e,r)),escape:(n,r={})=>t.escape(n,iZ(e,r)),filter:(n,r={})=>t.filter(n,iZ(e,r)),defaults:n=>t.defaults(iZ(e,n)),makeRe:(n,r={})=>t.makeRe(n,iZ(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,iZ(e,r)),match:(n,r,i={})=>t.match(n,r,iZ(e,i)),sep:t.sep,GLOBSTAR:eZ})};var aZ=(e,t={})=>(iX(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:ZY(e,{max:t.braceExpandMax}));jX.braceExpand=aZ,jX.makeRe=(e,t={})=>new cZ(e,t).makeRe(),jX.match=(e,t,n={})=>{let r=new cZ(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var oZ=/[?*]|[+@!]\(.*?\)|\[|\]/,sZ=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),cZ=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){iX(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||QX,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]===`?`||!oZ.test(e[2]))&&!oZ.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(eZ)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(eZ,i),o=t.lastIndexOf(eZ),[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===eZ?(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===eZ)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 aZ(this.pattern,this.options)}parse(e){iX(e);let t=this.options;if(e===`**`)return eZ;if(e===``)return``;let n,r=null;(n=e.match(HX))?r=t.dot?WX:UX:(n=e.match(MX))?r=(t.nocase?t.dot?IX:FX:t.dot?PX:NX)(n[1]):(n=e.match(GX))?r=(t.nocase?t.dot?qX:KX:t.dot?JX:YX)(n):(n=e.match(LX))?r=t.dot?zX:RX:(n=e.match(BX))&&(r=VX);let i=kX.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?tZ:t.dot?nZ:rZ,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`?sZ(e):e===eZ?eZ:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==eZ||a===eZ||(a===void 0?i!==void 0&&i!==eZ?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==eZ&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=eZ))});let i=t.filter(e=>e!==eZ);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 jX.defaults(e).Minimatch}};jX.AST=kX,jX.Minimatch=cZ,jX.escape=AX,jX.unescape=uX;var lZ={};function uZ(){throw Error(`gunzipSync is not available in the browser`)}function dZ(){throw Error(`gzipSync is not available in the browser`)}var fZ=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 fZ{};function pZ(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 mZ(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 hZ(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 gZ(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 _Z(e,t){return hZ(e,t,``)}function vZ(e,t){return gZ(e,t,``)}function yZ(e,t){return t.slice(0,bZ(e,t))}function bZ(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 xZ(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function SZ(e){let t=e.match(/^\s*/);return t?t[0]:``}var CZ=`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}`,wZ=RegExp(`[${CZ}]+|\\s+|[^${CZ}]`,`ug`);new class extends fZ{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(wZ)||[];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)&&TZ(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&TZ(n,i,r,null),e}};function TZ(e,t,n,r){if(t&&n){let i=SZ(t.value),a=xZ(t.value),o=SZ(n.value),s=xZ(n.value);if(e){let r=pZ(i,o);e.value=gZ(e.value,o,r),t.value=_Z(t.value,r),n.value=_Z(n.value,r)}if(r){let e=mZ(a,s);r.value=hZ(r.value,s,e),t.value=vZ(t.value,e),n.value=vZ(n.value,e)}}else if(n){if(e){let e=SZ(n.value);n.value=n.value.substring(e.length)}if(r){let e=SZ(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=SZ(r.value),i=SZ(t.value),a=xZ(t.value),o=pZ(n,i);t.value=_Z(t.value,o);let s=mZ(_Z(n,o),a);t.value=vZ(t.value,s),r.value=hZ(r.value,n,s),e.value=gZ(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=SZ(r.value),n=yZ(xZ(t.value),e);t.value=vZ(t.value,n)}else if(e){let n=yZ(xZ(e.value),SZ(t.value));t.value=_Z(t.value,n)}}new class extends fZ{tokenize(e){let t=RegExp(`(\\r?\\n)|[${CZ}]+|[^\\S\\n\\r]+|[^${CZ}]`,`ug`);return e.match(t)||[]}},new class extends fZ{constructor(){super(...arguments),this.tokenize=EZ}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 S6,C6;F({},{base64Command:()=>w6,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(),q5(),y9(),g5(),q5(),y9(),s7(),v7(),H7(),s7(),s7(),m7(),t$(),t$(),s7(),t$(),q5(),t$(),g5(),q5(),y9(),C7(),p9(),v7(),H7(),E0(),t$(),n$(),y9(),t$(),p9(),t$(),n$(),t$(),n$(),t$(),p9(),q5(),p9(),UQ(),P6(),t$(),g5(),q5(),y9(),t$(),p9(),s7(),v7(),H7(),q5(),t$(),p9(),n$(),Yae(),LQ(),RQ(),R8(),q5(),LQ(),new TextDecoder(`utf-8`,{fatal:!0}),UQ();var b9=e({OFFSCREEN_SET_TRAY_RUNTIME_HOOK:()=>x9,leaveTray:()=>Zae,resolveAmbientLeaveTrayTransport:()=>S9}),Xae=d(`scoops.tray-leave`),x9=`__slicc_setTrayRuntime`;function S9(){let e=globalThis.localStorage,t=e&&typeof e.setItem==`function`&&typeof e.removeItem==`function`?e:null,n=globalThis[x9];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 Zae(e={},t=S9()){let n=e.workerBaseUrl??null;if(t.storage)try{t.storage.removeItem(jn),n===null?t.storage.removeItem(An):t.storage.setItem(An,n)}catch(t){Xae.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 C9=null;function w9(e){C9=e}function Qae(){return C9??void 0}function $ae(e){let{layout:t,sprinkleManager:n,remoteCdpBridge:r}=e;return{wireLeaderHooks:e=>{w9(()=>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:()=>{w9(null),t.panels.chat.setOnLocalUserMessage(void 0),n.setSendToSprinkleHook(void 0),r.disposeAll()}}}function eoe(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(Li(l)):null,v=EY({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:DY(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}=$ae({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-BKuFnLnM.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=>wY(y(e)),clearLeaderHooks:x,wireLeaderHooks:b,storage:h.localStorage,log:g})},remoteCdpBridge:v,remoteCdpPushChannel:_}}async function toe(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(()=>Fi);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:d}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-qpYZdpDo.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 noe(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=>RK(e,r),t.updateAddButtons(),await n.restoreOpenSprinkles().catch(e=>{i.warn(`Failed to restore open sprinkles`,e)})}function roe(e){let{client:t,localFs:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOnboardingOrchestrator:a,window:o,log:s}=e;Fq({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 T9=d(`tray-follower-sync`),ioe=15e3,aoe=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=DJ(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.keepalive=new AJ({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{T9.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{T9.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{T9.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?Gt(n):n;this.sync.send({type:`user_message`,text:e,messageId:r,attachments:i}),T9.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`}),T9.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`),T9.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??ioe;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})||T9.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||T9.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,er({...Xn(),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`:T9.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=wJ(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(T9.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),T9.debug(`Skipping own message echo`,{messageId:e.messageId});break}T9.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`:T9.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:T9.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`:T9.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`:T9.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(),tr(Date.now());break;default:T9.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){T9.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)){T9.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){T9.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)?T9.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){T9.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){T9.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new OJ({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),T9.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),T9.debug(`Removed remote CDP session on detach`,{sessionId:i})),bJ(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=xJ(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 NJ(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})})}},ooe=e({SprinkleFollowerController:()=>D9}),E9=d(`sprinkle-follower`),D9=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}E9.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),E9.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 AI(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone);try{await i.render(n,e)}catch(t){E9.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){E9.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){E9.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){E9.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){E9.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){E9.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){E9.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 E9.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:GP(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(),q5(),y9(),g5(),q5(),y9(),s7(),v7(),H7(),s7(),s7(),m7(),t$(),t$(),s7(),t$(),q5(),t$(),g5(),q5(),y9(),C7(),p9(),v7(),H7(),E0(),t$(),n$(),y9(),t$(),p9(),t$(),n$(),t$(),n$(),t$(),p9(),q5(),p9(),UQ(),P6(),t$(),g5(),q5(),y9(),t$(),p9(),s7(),v7(),H7(),q5(),t$(),p9(),n$(),Yae(),LQ(),RQ(),R8(),q5(),LQ(),new TextDecoder(`utf-8`,{fatal:!0}),UQ();var b9=e({OFFSCREEN_SET_TRAY_RUNTIME_HOOK:()=>x9,leaveTray:()=>Zae,resolveAmbientLeaveTrayTransport:()=>S9}),Xae=d(`scoops.tray-leave`),x9=`__slicc_setTrayRuntime`;function S9(){let e=globalThis.localStorage,t=e&&typeof e.setItem==`function`&&typeof e.removeItem==`function`?e:null,n=globalThis[x9];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 Zae(e={},t=S9()){let n=e.workerBaseUrl??null;if(t.storage)try{t.storage.removeItem(jn),n===null?t.storage.removeItem(An):t.storage.setItem(An,n)}catch(t){Xae.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 C9=null;function w9(e){C9=e}function Qae(){return C9??void 0}function $ae(e){let{layout:t,sprinkleManager:n,remoteCdpBridge:r}=e;return{wireLeaderHooks:e=>{w9(()=>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:()=>{w9(null),t.panels.chat.setOnLocalUserMessage(void 0),n.setSendToSprinkleHook(void 0),r.disposeAll()}}}function eoe(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(Li(l)):null,v=EY({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:DY(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}=$ae({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-B-tlgzO0.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=>wY(y(e)),clearLeaderHooks:x,wireLeaderHooks:b,storage:h.localStorage,log:g})},remoteCdpBridge:v,remoteCdpPushChannel:_}}async function toe(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(()=>Fi);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:d}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-CpxNjMsH.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 noe(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=>RK(e,r),t.updateAddButtons(),await n.restoreOpenSprinkles().catch(e=>{i.warn(`Failed to restore open sprinkles`,e)})}function roe(e){let{client:t,localFs:n,firedWelcomeActions:r,persistFiredWelcomeActions:i,getOnboardingOrchestrator:a,window:o,log:s}=e;Fq({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 T9=d(`tray-follower-sync`),ioe=15e3,aoe=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=DJ(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.keepalive=new AJ({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{T9.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{T9.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{T9.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?Gt(n):n;this.sync.send({type:`user_message`,text:e,messageId:r,attachments:i}),T9.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`}),T9.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`),T9.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??ioe;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})||T9.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||T9.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,er({...Xn(),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`:T9.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=wJ(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(T9.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),T9.debug(`Skipping own message echo`,{messageId:e.messageId});break}T9.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`:T9.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:T9.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`:T9.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`:T9.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(),tr(Date.now());break;default:T9.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){T9.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)){T9.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){T9.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)?T9.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){T9.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){T9.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new OJ({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),T9.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),T9.debug(`Removed remote CDP session on detach`,{sessionId:i})),bJ(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=xJ(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 NJ(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})})}},ooe=e({SprinkleFollowerController:()=>D9}),E9=d(`sprinkle-follower`),D9=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}E9.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),E9.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 AI(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone);try{await i.render(n,e)}catch(t){E9.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){E9.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){E9.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){E9.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){E9.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){E9.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){E9.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 E9.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:GP(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`))}}},O9=d(`page-follower-tray`);function soe(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 k9(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=vY({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=DY(a.bootstrapId),c=null,l=new aoe(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=>{O9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new D9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new hJ(O9,{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(soe(t,e.runtime??`slicc-standalone`),s)}catch(e){O9.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(),O9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{O9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{O9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}function coe(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 loe(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 uoe(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}loe(e);try{n(k9(coe(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 doe(e){let{performTrayLeaveLocally:t,window:n,log:r}=e;n.addEventListener(`slicc:tray-join`,t=>uoe(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 foe(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(()=>Hi),void 0)]);await a(r,{getRefreshModels:e=>s.getProviderConfig(e).refreshModels});let c=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await i(r,{saveOAuthAccount:Aa,addAccount:s.addAccount,removeAccount:Ea,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 poe(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 moe(e,t){let{layout:n,browser:r,cherryTransport:i}=e;return{joinUrl:t,runtime:_J,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 hoe(e){let{buildLeaderTrayOptions:t,wireLeaderHooks:n,window:r,log:i}=e;r.localStorage.removeItem(jn),await new $r().clear();let a=r.localStorage.getItem(An);if(!a)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);let o=wY({...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.48.0`}),signal:AbortSignal.timeout(1e4)}).catch(e=>{i.error(`failed to POST /api/cloud-status`,{error:String(e)})})}});return n(o),foe({log:i}),o}async function goe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,buildLeaderTrayOptions:i,wireLeaderHooks:a}=e,o=e.window.localStorage.getItem(jn),s=e.window.localStorage.getItem(An);if(t===`hosted-leader`)return{pageLeaderTray:await hoe(e),pageFollowerTray:null};if(t===`cherry`&&n){let t=k9(moe(e,n));return r&&(r.onHostEvent=(e,n)=>t.currentSync?.sendCherryHostEvent(e,n)),{pageLeaderTray:null,pageFollowerTray:t}}if(o)return{pageLeaderTray:null,pageFollowerTray:k9(poe(e,o))};if(s){let e=wY(i(s));return a(e),{pageLeaderTray:e,pageFollowerTray:null}}return{pageLeaderTray:null,pageFollowerTray:null}}async function _oe(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 goe({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),Zr(e=>{g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(Yr())),doe({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 voe(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}=eoe({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 toe({instanceId:d,browser:o,remoteCdpBridge:te,remoteCdpPushChannel:T,getLeader:p,performTrayLeaveLocally:w,window:b}),await noe({layout:i,sprinkleManager:s,localFs:u,log:x}),await _oe({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}),roe({client:a,localFs:u,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x})}async function yoe(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(()=>$K);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?SK({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:uq(t)}),window.__slicc_sprinkleManager=m,eL(uq(t));let h=f(m,{instanceId:c});return{sprinkleManager:m,stopSprinkleHandler:h}}async function boe(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 uJ({client:a,hostReady:d,disarmMigrationSplash:f,frozenSessions:u,localStorage:v.localStorage,log:y}),{onboardingHandle:te,interceptWelcomeLick:T}=await mJ({client:a,layout:i,localFs:b,writableFs:C,useRpcVfs:x,isOpfsLeader:S.isLeader,firedWelcomeActions:h,log:y}),ne=()=>te.get(),re=null,E=null;aJ({layout:i,client:a,getFollower:()=>E,interceptWelcomeLick:T,log:y});let{sprinkleManager:ie,stopSprinkleHandler:ae}=await yoe({client:a,layout:i,localFs:b,panelReadVfs:ee,writableFs:C,useRpcVfs:x,instanceId:p,inlineSprinkles:_,interceptWelcomeLick:T});return await voe({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 A9=d(`boot/sw-registration`);async function xoe(){let e=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&e&&await Soe())return`reload-pending`;if(!(`serviceWorker`in navigator)||e)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),A9.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),A9.info(`LLM-proxy SW registered`)}catch(e){A9.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`),A9.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){A9.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}async function Soe(){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`),A9.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){A9.error(`connect-mode SW cleanup failed`,e)}return!1}function Coe(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 j9(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 woe(){return j9([`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 Toe(){return j9([`M6 2h5l5 5v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z`,`M11 2v5h5`])}function Eoe(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 Doe(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Ooe(e){return`${f(e)?`imgcat`:`cat`} ${Doe(e)}`}var koe=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(Eoe(e)),a.appendChild(o);let s=document.createElement(`span`);s.className=`file-browser__icon`,s.appendChild(woe()),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(Toe()),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=Coe(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=LG(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=Ooe(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)}},Aoe=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)}},M9=d(`scoop-scope-label`),joe=`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.`,N9=4e3,Moe=24;function Noe(e){let t=e.trim();return t.length<=N9?t:`…`+t.slice(t.length-N9)}function Poe(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 P9=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=>{M9.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){M9.debug(`fetchTranscript threw`,{jid:e,error:t instanceof Error?t.message:String(t)});return}let r=Noe(n);if(r.length===0){M9.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 UB({system:joe,prompt:`Recent agent transcript:\n${r}`,maxTokens:Moe,signal:o.signal})}catch(t){M9.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){M9.debug(`No label from quickLabel`,{jid:e});return}let l=Poe(s);if(!l){M9.debug(`Label rejected after normalization`,{jid:e});return}this.cache.set(e,{label:l,signature:i});try{t(e,l)}catch(t){M9.debug(`onResolved threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}};function F9(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`))}}},O9=d(`page-follower-tray`);function soe(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 k9(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=vY({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=DY(a.bootstrapId),c=null,l=new aoe(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=>{O9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new D9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new hJ(O9,{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(soe(t,e.runtime??`slicc-standalone`),s)}catch(e){O9.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(),O9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{O9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{O9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}function coe(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 loe(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 uoe(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}loe(e);try{n(k9(coe(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 doe(e){let{performTrayLeaveLocally:t,window:n,log:r}=e;n.addEventListener(`slicc:tray-join`,t=>uoe(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 foe(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(()=>Hi),void 0)]);await a(r,{getRefreshModels:e=>s.getProviderConfig(e).refreshModels});let c=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await i(r,{saveOAuthAccount:Aa,addAccount:s.addAccount,removeAccount:Ea,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 poe(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 moe(e,t){let{layout:n,browser:r,cherryTransport:i}=e;return{joinUrl:t,runtime:_J,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 hoe(e){let{buildLeaderTrayOptions:t,wireLeaderHooks:n,window:r,log:i}=e;r.localStorage.removeItem(jn),await new $r().clear();let a=r.localStorage.getItem(An);if(!a)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);let o=wY({...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.48.2`}),signal:AbortSignal.timeout(1e4)}).catch(e=>{i.error(`failed to POST /api/cloud-status`,{error:String(e)})})}});return n(o),foe({log:i}),o}async function goe(e){let{runtimeMode:t,cherryJoinUrl:n,cherryTransport:r,buildLeaderTrayOptions:i,wireLeaderHooks:a}=e,o=e.window.localStorage.getItem(jn),s=e.window.localStorage.getItem(An);if(t===`hosted-leader`)return{pageLeaderTray:await hoe(e),pageFollowerTray:null};if(t===`cherry`&&n){let t=k9(moe(e,n));return r&&(r.onHostEvent=(e,n)=>t.currentSync?.sendCherryHostEvent(e,n)),{pageLeaderTray:null,pageFollowerTray:t}}if(o)return{pageLeaderTray:null,pageFollowerTray:k9(poe(e,o))};if(s){let e=wY(i(s));return a(e),{pageLeaderTray:e,pageFollowerTray:null}}return{pageLeaderTray:null,pageFollowerTray:null}}async function _oe(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 goe({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),Zr(e=>{g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),g.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(Yr())),doe({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 voe(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}=eoe({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 toe({instanceId:d,browser:o,remoteCdpBridge:te,remoteCdpPushChannel:T,getLeader:p,performTrayLeaveLocally:w,window:b}),await noe({layout:i,sprinkleManager:s,localFs:u,log:x}),await _oe({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}),roe({client:a,localFs:u,firedWelcomeActions:_,persistFiredWelcomeActions:v,getOnboardingOrchestrator:y,window:b,log:x})}async function yoe(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(()=>$K);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?SK({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:uq(t)}),window.__slicc_sprinkleManager=m,eL(uq(t));let h=f(m,{instanceId:c});return{sprinkleManager:m,stopSprinkleHandler:h}}async function boe(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 uJ({client:a,hostReady:d,disarmMigrationSplash:f,frozenSessions:u,localStorage:v.localStorage,log:y}),{onboardingHandle:te,interceptWelcomeLick:T}=await mJ({client:a,layout:i,localFs:b,writableFs:C,useRpcVfs:x,isOpfsLeader:S.isLeader,firedWelcomeActions:h,log:y}),ne=()=>te.get(),re=null,E=null;aJ({layout:i,client:a,getFollower:()=>E,interceptWelcomeLick:T,log:y});let{sprinkleManager:ie,stopSprinkleHandler:ae}=await yoe({client:a,layout:i,localFs:b,panelReadVfs:ee,writableFs:C,useRpcVfs:x,instanceId:p,inlineSprinkles:_,interceptWelcomeLick:T});return await voe({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 A9=d(`boot/sw-registration`);async function xoe(){let e=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&e&&await Soe())return`reload-pending`;if(!(`serviceWorker`in navigator)||e)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),A9.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),A9.info(`LLM-proxy SW registered`)}catch(e){A9.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`),A9.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){A9.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}async function Soe(){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`),A9.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){A9.error(`connect-mode SW cleanup failed`,e)}return!1}function Coe(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 j9(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 woe(){return j9([`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 Toe(){return j9([`M6 2h5l5 5v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z`,`M11 2v5h5`])}function Eoe(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 Doe(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Ooe(e){return`${f(e)?`imgcat`:`cat`} ${Doe(e)}`}var koe=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(Eoe(e)),a.appendChild(o);let s=document.createElement(`span`);s.className=`file-browser__icon`,s.appendChild(woe()),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(Toe()),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=Coe(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=LG(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=Ooe(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)}},Aoe=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)}},M9=d(`scoop-scope-label`),joe=`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.`,N9=4e3,Moe=24;function Noe(e){let t=e.trim();return t.length<=N9?t:`…`+t.slice(t.length-N9)}function Poe(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 P9=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=>{M9.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){M9.debug(`fetchTranscript threw`,{jid:e,error:t instanceof Error?t.message:String(t)});return}let r=Noe(n);if(r.length===0){M9.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 UB({system:joe,prompt:`Recent agent transcript:\n${r}`,maxTokens:Moe,signal:o.signal})}catch(t){M9.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){M9.debug(`No label from quickLabel`,{jid:e});return}let l=Poe(s);if(!l){M9.debug(`Label rejected after normalization`,{jid:e});return}this.cache.set(e,{label:l,signature:i});try{t(e,l)}catch(t){M9.debug(`onResolved threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}};function F9(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 Foe=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??Ioe(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=F9(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 S6,C6;F({},{base64Command:()=>w6,flagsForF
|
|
|
1810
1810
|
`,this.container.appendChild(i)}};function B9(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 zoe=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 Boe(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 Voe=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()}},Hoe=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:aH}};function Uoe(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 Woe(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 Voe;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 P9(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=ga(),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}=oa(t.providerId),n=(e?t.models.find(t=>t.id.toLowerCase().includes(e.toLowerCase())):void 0)??t.models[0];Ra(`${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 Foe(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 Boe(e)}appendTrayMenu(e){let t=yi(Yr(),Xn()),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(()=>b9),void 0),o(()=>Promise.resolve().then(()=>kn),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);Woe({joinUrl:t.joinUrl,copied:n,onReset:Qae()})}),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(()=>b9);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=_a().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=_a(),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=oa(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()=>{oa(r.providerId)?.isOAuth?await Da(r.providerId):await Ea(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 Za(),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(),Ua()||await Za(),await ao()&&(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 Hoe(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 CH(a),terminal:new zoe(this.terminalContainer,{onClearTerminal:()=>{this.panels.terminal.clearTerminal(),this.openTerminal()}}),fileBrowser:new koe(o,{onRunCommand:async e=>{await this.runFileBrowserCommand(e),this.openTerminal()}}),memory:new Aoe(this.memoryContainer),scoops:new Roe(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));Uoe(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 Goe=100,K9=6,q9=null,J9=null,Y9=null;function Koe(){return q9||(q9=document.createElement(`div`),q9.className=`s2-tooltip`,document.body.appendChild(q9)),q9}function qoe(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Koe();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 Joe(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===Y9||(X9(),t&&(Y9=t,J9=setTimeout(()=>qoe(t),Goe)))},!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-BEF1hIty.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([45,14]));i(),await nJ({log:Z9});let a=null,{localFs:s,useRpcVfs:c,previewVfsReader:l}=await yK({layout:r,log:Z9}),u=()=>void 0,{client:d,selectScoop:f}=ci({layout:r,log:Z9,getSelectedScoop:()=>a,setSelectedScoop:e=>{a=e},syncThinkingButtonForScoop:e=>u(e)});pi({client:d,layout:r,isDetachedSelf:n});let p=await hq({client:d,layout:r,localFs:s,useRpcVfs:c,log:Z9}),m=p.writableFs;p.previewVfsReader&&(l.current=p.previewVfsReader),bK({client:d,layout:r,log:Z9}),u=UU({client:d,layout:r,localFs:s,writableFs:m,selectScoop:f,getSelectedScoop:()=>a,log:Z9}).syncThinkingButtonForScoop;let h=OU(),{onboardingHandle:g,interceptWelcomeLick:_}=await LU({client:d,layout:r,localFs:s,firedWelcomeActions:h,log:Z9}),v=()=>g.get(),y=await dq({layout:r,client:d,localFs:s,writableFs:m,useRpcVfs:c,inlineSprinkles:Q9,interceptWelcomeLick:_,log:Z9});await cU({layout:r,log:Z9}),fU({sprinkleManager:y,client:d,chat:r.panels.chat,log:Z9}),Fq({vfs:s,storage:window.localStorage,firedWelcomeActions:h,persistFiredWelcomeActions:kU,getOrchestrator:v,log:Z9}),await sU({client:d,layout:r,chat:r.panels.chat,sprinkleManager:y,localFs:s,writableFs:m,log:Z9})}async function Yoe(e,t){let{browser:n,realCdpTransport:r,cherryJoinUrl:i,cherryTransport:a,instanceId:o,isElectronOverlay:s}=await iJ({runtimeMode:t,envBaseUrl:null,window,log:Z9}),c=new W9(e,s);hr({layout:c,isElectronOverlay:s,window,document}),await c.panels.chat.initSession(`session-cone`),Z9.info(`Session initialized (kernel-worker mode)`);let l=await Xq({layout:c,log:Z9}),{useRpcVfs:u,opfsLeader:d}=l,f=null,{client:p,hostReady:m,hostDispose:h,selectScoop:g,syncThinkingButtonForScoop:_,disarmMigrationSplash:v}=Kq({realCdpTransport:r,instanceId:o,layout:c,log:Z9,getSelectedScoop:()=>f,setSelectedScoop:e=>{f=e}}),{agentHandle:y,frozenSessions:b}=await eJ({client:p,layout:c,vfsHandle:l,selectScoop:g,getSelectedScoop:()=>f,syncThinkingButtonForScoop:_,log:Z9}),{writableFs:x}=l,{stopStorageSync:S,stopSprinkleHandler:ee}=await boe({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:OU(),persistFiredWelcomeActions:kU,inlineSprinkles:Q9,window,log:Z9});await Iq({client:p,layout:c,writableFs:x,useRpcVfs:u,opfsLeader:d,stopStorageSync:S,stopSprinkleHandler:ee,hostDispose:h,window,log:Z9})}async function Xoe(){gq(),TI(),Joe();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);if(await xoe()===`reload-pending`)return;await yn(),fa();let{bootstrapOAuthReplicas:t}=await o(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-DRiSHWay.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))]),!Ua()&&Rn(window.localStorage);let n=typeof chrome<`u`&&!!chrome?.runtime?.id,r=ur(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-B8afIHD4.js`);return{mountConnectSurface:e}},[]);await t(e);return}return r===`extension-detached`?$9(e,{detached:!0}):r===`extension`?$9(e):Yoe(e,r)}Xoe().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{Aa as $,TF as A,rF as B,yF as C,wF as D,bF as E,$P as F,ga as G,aF as H,ZP as I,Pa as J,xa as K,eF as L,sF as M,uF as N,vF as O,tF as P,Ea as Q,iF as R,xF as S,_F as T,KP as U,nF as V,_a as W,la as X,Fa as Y,oa as Z,YF as _,UB as a,kr as at,kF as b,qF as c,An as ct,zF as d,ya as et,HF as f,WF as g,ZF as h,lU as i,Or as it,dF as j,DF as k,JF as l,bn as lt,BF as m,jq as n,Bi as nt,GF as o,Mn as ot,KF as p,Ia as q,YG as r,vi as rt,UF as s,jn as st,OJ as t,ao as tt,VF as u,Sn as ut,XF as v,EF as w,NF as x,PF as y,QP 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 Hoe(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 CH(a),terminal:new zoe(this.terminalContainer,{onClearTerminal:()=>{this.panels.terminal.clearTerminal(),this.openTerminal()}}),fileBrowser:new koe(o,{onRunCommand:async e=>{await this.runFileBrowserCommand(e),this.openTerminal()}}),memory:new Aoe(this.memoryContainer),scoops:new Roe(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));Uoe(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 Goe=100,K9=6,q9=null,J9=null,Y9=null;function Koe(){return q9||(q9=document.createElement(`div`),q9.className=`s2-tooltip`,document.body.appendChild(q9)),q9}function qoe(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Koe();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 Joe(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===Y9||(X9(),t&&(Y9=t,J9=setTimeout(()=>qoe(t),Goe)))},!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-DpHNewhn.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([45,14]));i(),await nJ({log:Z9});let a=null,{localFs:s,useRpcVfs:c,previewVfsReader:l}=await yK({layout:r,log:Z9}),u=()=>void 0,{client:d,selectScoop:f}=ci({layout:r,log:Z9,getSelectedScoop:()=>a,setSelectedScoop:e=>{a=e},syncThinkingButtonForScoop:e=>u(e)});pi({client:d,layout:r,isDetachedSelf:n});let p=await hq({client:d,layout:r,localFs:s,useRpcVfs:c,log:Z9}),m=p.writableFs;p.previewVfsReader&&(l.current=p.previewVfsReader),bK({client:d,layout:r,log:Z9}),u=UU({client:d,layout:r,localFs:s,writableFs:m,selectScoop:f,getSelectedScoop:()=>a,log:Z9}).syncThinkingButtonForScoop;let h=OU(),{onboardingHandle:g,interceptWelcomeLick:_}=await LU({client:d,layout:r,localFs:s,firedWelcomeActions:h,log:Z9}),v=()=>g.get(),y=await dq({layout:r,client:d,localFs:s,writableFs:m,useRpcVfs:c,inlineSprinkles:Q9,interceptWelcomeLick:_,log:Z9});await cU({layout:r,log:Z9}),fU({sprinkleManager:y,client:d,chat:r.panels.chat,log:Z9}),Fq({vfs:s,storage:window.localStorage,firedWelcomeActions:h,persistFiredWelcomeActions:kU,getOrchestrator:v,log:Z9}),await sU({client:d,layout:r,chat:r.panels.chat,sprinkleManager:y,localFs:s,writableFs:m,log:Z9})}async function Yoe(e,t){let{browser:n,realCdpTransport:r,cherryJoinUrl:i,cherryTransport:a,instanceId:o,isElectronOverlay:s}=await iJ({runtimeMode:t,envBaseUrl:null,window,log:Z9}),c=new W9(e,s);hr({layout:c,isElectronOverlay:s,window,document}),await c.panels.chat.initSession(`session-cone`),Z9.info(`Session initialized (kernel-worker mode)`);let l=await Xq({layout:c,log:Z9}),{useRpcVfs:u,opfsLeader:d}=l,f=null,{client:p,hostReady:m,hostDispose:h,selectScoop:g,syncThinkingButtonForScoop:_,disarmMigrationSplash:v}=Kq({realCdpTransport:r,instanceId:o,layout:c,log:Z9,getSelectedScoop:()=>f,setSelectedScoop:e=>{f=e}}),{agentHandle:y,frozenSessions:b}=await eJ({client:p,layout:c,vfsHandle:l,selectScoop:g,getSelectedScoop:()=>f,syncThinkingButtonForScoop:_,log:Z9}),{writableFs:x}=l,{stopStorageSync:S,stopSprinkleHandler:ee}=await boe({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:OU(),persistFiredWelcomeActions:kU,inlineSprinkles:Q9,window,log:Z9});await Iq({client:p,layout:c,writableFs:x,useRpcVfs:u,opfsLeader:d,stopStorageSync:S,stopSprinkleHandler:ee,hostDispose:h,window,log:Z9})}async function Xoe(){gq(),TI(),Joe();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);if(await xoe()===`reload-pending`)return;await yn(),fa();let{bootstrapOAuthReplicas:t}=await o(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-6zSkqdxz.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))]),!Ua()&&Rn(window.localStorage);let n=typeof chrome<`u`&&!!chrome?.runtime?.id,r=ur(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-BUKRCcBE.js`);return{mountConnectSurface:e}},[]);await t(e);return}return r===`extension-detached`?$9(e,{detached:!0}):r===`extension`?$9(e):Yoe(e,r)}Xoe().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{Aa as $,TF as A,rF as B,yF as C,wF as D,bF as E,$P as F,ga as G,aF as H,ZP as I,Pa as J,xa as K,eF as L,sF as M,uF as N,vF as O,tF as P,Ea as Q,iF as R,xF as S,_F as T,KP as U,nF as V,_a as W,la as X,Fa as Y,oa as Z,YF as _,UB as a,kr as at,kF as b,qF as c,An as ct,zF as d,ya as et,HF as f,WF as g,ZF as h,lU as i,Or as it,dF as j,DF as k,JF as l,bn as lt,BF as m,jq as n,Bi as nt,GF as o,Mn as ot,KF as p,Ia as q,YG as r,vi as rt,UF as s,jn as st,OJ as t,ao as tt,VF as u,Sn as ut,XF as v,EF as w,NF as x,PF as y,QP as z};
|