sliccy 3.40.3 → 3.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/assets/{adobe-9MnG5h7i.js → adobe-BxfDEbzv.js} +2 -2
- package/dist/ui/assets/{adobe-BCOGa4JO.js → adobe-O-mReLVY.js} +1 -1
- package/dist/ui/assets/{agent-bridge-DrtqeACp.js → agent-bridge-vLL7l0eP.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-BadHh_U6.js → agent-message-to-chat-DYgjN8Bl.js} +1 -1
- package/dist/ui/assets/{apps-D6zYxCJj.js → apps-1OkRzg3d.js} +1 -1
- package/dist/ui/assets/{azure-openai-DX23xqSp.js → azure-openai-CgRgFERZ.js} +1 -1
- package/dist/ui/assets/{azure-openai-Cr3DISar.js → azure-openai-Chnzn8mE.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-DVEMoD1Q.js → bsh-watchdog-CL3vlQEK.js} +1 -1
- package/dist/ui/assets/{cdp-lOc6_BAx.js → cdp-D_MSzfiR.js} +3 -3
- package/dist/ui/assets/{connect-surface-DoTyR_ZG.js → connect-surface-CaWmpVyD.js} +1 -1
- package/dist/ui/assets/cost-command-KwOQHe5T.js +1 -0
- package/dist/ui/assets/{dist-BrPNw_vU.js → dist-CCMbhTUT.js} +1 -1
- package/dist/ui/assets/{dist-C9EWpOKG.js → dist-CKcxWG-p.js} +1 -1
- package/dist/ui/assets/{es-Do-6wb2C.js → es-BLJg_kYZ.js} +1 -1
- package/dist/ui/assets/{follower-sprinkle-bridge-DTufY-0i.js → follower-sprinkle-bridge-Dh5KLkU1.js} +1 -1
- package/dist/ui/assets/{fs-DqDo5o60.js → fs-BStcph21.js} +1 -1
- package/dist/ui/assets/{github-DBywtHRG.js → github-CWTZshiB.js} +2 -2
- package/dist/ui/assets/{github-CNn2NQAt.js → github-JiWME_s5.js} +1 -1
- package/dist/ui/assets/{github-copilot-Dy9dkbr7.js → github-copilot-k7KrrVH1.js} +1 -1
- package/dist/ui/assets/{github-copilot-8wjbN6nq.js → github-copilot-uJU7ST1b.js} +1 -1
- package/dist/ui/assets/{kernel-worker-Cb8hTQlK.js → kernel-worker-BKKUFnb6.js} +19 -19
- package/dist/ui/assets/{lick-ws-bridge-BiG3e_g1.js → lick-ws-bridge-CZcY23eO.js} +1 -1
- package/dist/ui/assets/{local-llm-BazZFDj_.js → local-llm-oVA3xfDX.js} +1 -1
- package/dist/ui/assets/{magick-wasm-DKLq0X9v.js → magick-wasm-D1ZqbevU.js} +1 -1
- package/dist/ui/assets/main-B-eXD0kW.css +1 -0
- package/dist/ui/assets/{main-yZCsVpFH.js → main-CcDIWvz8.js} +7 -7
- package/dist/ui/assets/{main-cherry-_7zmLxgg.js → main-cherry-CrHZ2Ygs.js} +1 -1
- package/dist/ui/assets/{migration-run-CXbSDDok.js → migration-run-tgMV1A2q.js} +1 -1
- package/dist/ui/assets/{mount-C3YOm4Wn.js → mount-DwYAjaSm.js} +1 -1
- package/dist/ui/assets/{nuke-command-Dmc-Sve3.js → nuke-command-DoN_uwQe.js} +1 -1
- package/dist/ui/assets/{oauth-bootstrap-C_DI66X8.js → oauth-bootstrap-DfAIGBEv.js} +2 -2
- package/dist/ui/assets/{oauth-service-CFSmb2Xq.js → oauth-service-CT8xGVIF.js} +1 -1
- package/dist/ui/assets/{offscreen-client-Bn2ErFJg.js → offscreen-client-COoBiM3s.js} +1 -1
- package/dist/ui/assets/{onboarding-orchestrator-DbSXIbPW.js → onboarding-orchestrator-DaF0PzJJ.js} +1 -1
- package/dist/ui/assets/{openai-codex-Df_T8mMz.js → openai-codex-BHgglUzj.js} +1 -1
- package/dist/ui/assets/{openai-codex-BehcTqf4.js → openai-codex-DVu5cAvL.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Bb_hIEUP.js → panel-rpc-handlers-BDD_ByhG.js} +1 -1
- package/dist/ui/assets/{provider-CZ54o1eC.js → provider-9HpzleWg.js} +1 -1
- package/dist/ui/assets/{provider-Ba-IW-kd.js → provider-CN0uDOpy.js} +2 -2
- package/dist/ui/assets/{provider-settings-CY5NYsC9.js → provider-settings-Cvqh5_pm.js} +2 -2
- package/dist/ui/assets/provider-store-access-BIP_OfpZ.js +1 -0
- package/dist/ui/assets/provider-store-access-CFYnWcgj.js +1 -0
- package/dist/ui/assets/{providers-B-C_YTn6.js → providers-DvpolzRn.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-Bhc4pqzp.js → proxied-fetch-BZ2kIQXF.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-C1K2ToGt.js → remote-terminal-view-CCGG0JAl.js} +1 -1
- package/dist/ui/assets/{spawn-D6ZYDHli.js → spawn-9zPQFWZe.js} +1 -1
- package/dist/ui/assets/{store-BHgxxLww.js → store-C3Slc28L.js} +1 -1
- package/dist/ui/assets/{sudo-Dflnt4_G.js → sudo-CIHDm0m0.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BhHEXpRy.js → tray-leave-runtime-nyt61r2W.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-B04kAu_0.js → upgrade-detection-CC3w2-V8.js} +1 -1
- package/dist/ui/assets/{xai-grok-i7HD-5Tv.js → xai-grok-BtL3sZcw.js} +1 -1
- package/dist/ui/assets/{xai-grok-B6Nl7COG.js → xai-grok-Dl6bFHg5.js} +1 -1
- package/dist/ui/electron-overlay-entry.js +10 -18
- package/dist/ui/index.html +2 -2
- package/dist/ui/packages/webapp/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/cost-command-CThcmGZA.js +0 -1
- package/dist/ui/assets/main-D683Koa8.css +0 -1
- package/dist/ui/assets/provider-store-access-DV4kHL4p.js +0 -1
- package/dist/ui/assets/provider-store-access-xEJhUgjR.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-D1ZqbevU.js","assets/preload-helper-zJ_50EbN.js","assets/azure-openai-Chnzn8mE.js","assets/bedrock-camp-CWvhREqw.js","assets/chunk-aKtaBQYM.js","assets/transform-messages-B3Q-Bwv-.js","assets/json-parse-BUunmmNl.js","assets/openai-Cn5LRPCm.js","assets/local-llm-oVA3xfDX.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-BxfDEbzv.js","assets/oauth-service-CT8xGVIF.js","assets/github-copilot-k7KrrVH1.js","assets/github-CWTZshiB.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-BHgglUzj.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-BtL3sZcw.js","assets/xai-grok-errors-bnlIBeu-.js","assets/dist-DbTbRU9p2.js","assets/dist-Cu5Yqq5d2.js","assets/slicc-editor-BdfBeQCF.js","assets/dist-k2Xmqc09.js","assets/mount-picker-popup-DncaR5N8.js","assets/hid-device-registry-D2LsJCRr.js","assets/offscreen-client-COoBiM3s.js","assets/agent-bridge-vLL7l0eP.js","assets/sudo-CIHDm0m0.js","assets/remote-vfs-client-BwJhhtIV.js","assets/types-idfTVsM8.js","assets/writable-vfs-client-DMYsajEE.js","assets/remote-terminal-view-CCGG0JAl.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/onboarding-orchestrator-DaF0PzJJ.js","assets/spawn-9zPQFWZe.js","assets/cdp-D_MSzfiR.js","assets/main-cherry-CrHZ2Ygs.js","assets/panel-rpc-handlers-BDD_ByhG.js","assets/hosted-config-apply-uAym2aS5.js","assets/oauth-bootstrap-DfAIGBEv.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{n as e,r as t,t as n}from"./chunk-aKtaBQYM.js";import"./modulepreload-polyfill-Dezn_h7o.js";import{a as r,r as i,t as a}from"./bedrock-camp-CWvhREqw.js";import{t as o}from"./preload-helper-zJ_50EbN.js";import{d as s,f as c,l,u}from"./transform-messages-B3Q-Bwv-.js";import{t as d}from"./logger-DDBAeTLF.js";import{n as f,t as p}from"./mime-types-B9LIwKG5.js";import{n as m,t as h}from"./tool-ui-YOPqzMmL.js";import{t as g}from"./picker-approval-tzbkMw-e.js";import{i as _,o as v,r as y,t as b}from"./mount-picker-popup-DncaR5N8.js";import{t as x}from"./types-idfTVsM8.js";import{i as S,n as C,r as w,t as T}from"./path-utils-DU6QhF_k.js";import{i as ee,n as E,r as D,t as te}from"./hid-device-registry-D2LsJCRr.js";import{n as ne}from"./clipboard-DgFtRQbq.js";function re(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}var ie=Symbol.for(`yaml.alias`),O=Symbol.for(`yaml.document`),ae=Symbol.for(`yaml.map`),k=Symbol.for(`yaml.pair`),oe=Symbol.for(`yaml.scalar`),A=Symbol.for(`yaml.seq`),se=Symbol.for(`yaml.node.type`),j=e=>!!e&&typeof e==`object`&&e[se]===ie,ce=e=>!!e&&typeof e==`object`&&e[se]===O,M=e=>!!e&&typeof e==`object`&&e[se]===ae,N=e=>!!e&&typeof e==`object`&&e[se]===k,le=e=>!!e&&typeof e==`object`&&e[se]===oe,P=e=>!!e&&typeof e==`object`&&e[se]===A;function ue(e){if(e&&typeof e==`object`)switch(e[se]){case ae:case A:return!0}return!1}function de(e){if(e&&typeof e==`object`)switch(e[se]){case ie:case ae:case oe:case A:return!0}return!1}var fe=e=>(le(e)||ue(e))&&!!e.anchor,pe=Symbol(`break visit`),me=Symbol(`skip children`),he=Symbol(`remove node`);function ge(e,t){let n=be(t);ce(e)?_e(null,e.contents,n,Object.freeze([e]))===he&&(e.contents=null):_e(null,e,n,Object.freeze([]))}ge.BREAK=pe,ge.SKIP=me,ge.REMOVE=he;function _e(e,t,n,r){let i=xe(e,t,n,r);if(de(i)||N(i))return Se(e,r,i),_e(e,i,n,r);if(typeof i!=`symbol`){if(ue(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=_e(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===pe)return pe;else i===he&&(t.items.splice(e,1),--e)}}else if(N(t)){r=Object.freeze(r.concat(t));let e=_e(`key`,t.key,n,r);if(e===pe)return pe;e===he&&(t.key=null);let i=_e(`value`,t.value,n,r);if(i===pe)return pe;i===he&&(t.value=null)}}return i}async function ve(e,t){let n=be(t);ce(e)?await ye(null,e.contents,n,Object.freeze([e]))===he&&(e.contents=null):await ye(null,e,n,Object.freeze([]))}ve.BREAK=pe,ve.SKIP=me,ve.REMOVE=he;async function ye(e,t,n,r){let i=await xe(e,t,n,r);if(de(i)||N(i))return Se(e,r,i),ye(e,i,n,r);if(typeof i!=`symbol`){if(ue(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await ye(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===pe)return pe;else i===he&&(t.items.splice(e,1),--e)}}else if(N(t)){r=Object.freeze(r.concat(t));let e=await ye(`key`,t.key,n,r);if(e===pe)return pe;e===he&&(t.key=null);let i=await ye(`value`,t.value,n,r);if(i===pe)return pe;i===he&&(t.value=null)}}return i}function be(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 xe(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(M(t))return n.Map?.(e,t,r);if(P(t))return n.Seq?.(e,t,r);if(N(t))return n.Pair?.(e,t,r);if(le(t))return n.Scalar?.(e,t,r);if(j(t))return n.Alias?.(e,t,r)}function Se(e,t,n){let r=t[t.length-1];if(ue(r))r.items[e]=n;else if(N(r))e===`key`?r.key=n:r.value=n;else if(ce(r))r.contents=n;else{let e=j(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}var Ce={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},we=e=>e.replace(/[!,[\]{}]/g,e=>Ce[e]),Te=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+we(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&&de(e.contents)){let t={};ge(e.contents,(e,n)=>{de(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
|
`)}};Te.defaultYaml={explicit:!1,version:`1.2`},Te.defaultTags={"!!":`tag:yaml.org,2002:`};function Ee(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 De(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=De(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=De(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=De(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=De(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Oe(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Oe(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!fe(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 ke=class{constructor(e){Object.defineProperty(this,se,{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(!ce(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=Oe(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?De(i,{"":o},``,o):o}},Ae=class extends ke{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=[],ge(e,{Node:(e,t)=>{(j(t)||fe(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||=(Oe(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=je(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(Ee(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 je(e,t,n){if(j(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(ue(t)){let r=0;for(let i of t.items){let t=je(e,i,n);t>r&&(r=t)}return r}else if(N(t)){let r=je(e,t.key,n),i=je(e,t.value,n);return Math.max(r,i)}return 1}var Me=e=>!e||typeof e!=`function`&&typeof e!=`object`,Ne=class extends ke{constructor(e){super(oe),this.value=e}toJSON(e,t){return t?.keep?this.value:Oe(this.value,e,t)}toString(){return String(this.value)}};Ne.BLOCK_FOLDED=`BLOCK_FOLDED`,Ne.BLOCK_LITERAL=`BLOCK_LITERAL`,Ne.PLAIN=`PLAIN`,Ne.QUOTE_DOUBLE=`QUOTE_DOUBLE`,Ne.QUOTE_SINGLE=`QUOTE_SINGLE`;var Pe=`tag:yaml.org,2002:`;function Fe(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 Ie(e,t,n){if(ce(e)&&(e=e.contents),de(e))return e;if(N(e)){let t=n.schema[ae].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 Ae(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=Pe+t.slice(2));let l=Fe(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new Ne(e);return c&&(c.node=t),t}l=e instanceof Map?o[ae]:Symbol.iterator in Object(e)?o[A]:o[ae]}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 Ne(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Le(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 Ie(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}var Re=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done,ze=class extends ke{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=>de(t)||N(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Re(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(ue(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,Le(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(ue(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&&le(i)?i.value:i:ue(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!N(t))return!1;let n=t.value;return n==null||e&&le(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 ue(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(ue(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,Le(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}},Be=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function Ve(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var He=(e,t,n)=>e.endsWith(`
|
|
4
4
|
`)?Ve(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 Kt(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 qt(e){let t=Gt(Ht(e.messages));return Kt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Jt=Wt,Yt=`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 Xt=`agent-sessions`,Zt=1,Qt=`sessions`;function $t(){return new Promise((e,t)=>{let n=indexedDB.open(Xt,Zt);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Qt)||e.createObjectStore(Qt,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var en=class{dbPromise=null;getDB(){return this.dbPromise||=$t(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(Qt,`readwrite`).objectStore(Qt).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(Qt,`readonly`).objectStore(Qt).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(Qt,`readwrite`).objectStore(Qt).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(Qt,`readonly`).objectStore(Qt).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(Qt,`readwrite`).objectStore(Qt).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()}}},tn=d(`image-processor`),nn=3932160,rn=1568,an=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function on(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function sn(e){return an.has(e)}function cn(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 ln(e){if(!sn(e.mimeType))return tn.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=cn(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;tn.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-DKLq0X9v.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return tn.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 tn.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=rn/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),tn.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>nn&&s!==`JPEG`?(tn.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>nn&&(tn.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 tn.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>nn)return tn.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 tn.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return tn.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 un=300*1e3,dn=Symbol(`mount:timeout`),fn=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:g(`directory`),onAction:async(e,t)=>{if(e===`approve`){let e=t;if(e?.handleInIdb&&typeof e.idbKey==`string`)try{let t=await b(e.idbKey);return t?(await _(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 dn;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(dn)},un)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===dn)throw Error(`mount: timed out after ${Math.round(un/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 y();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 b(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);await _(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 x(`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 x(`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 x)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new x(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new x(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new x(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new x(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new x(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new x(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new x(`ENOTEMPTY`,`directory not empty`,t)}return new x(`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 x(`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 pn(){return crypto.randomUUID()}var mn=`slicc_oauth_extra_domains`;function hn(e){try{let t=e.getItem(mn);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 nee(e,t){try{e.setItem(mn,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);function ree(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 iee(e){return e.split(`/`).pop()||`data`}function gn(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 _n=5*1024*1024,vn=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=gn(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??_n,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new x(`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 x(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new x(`EACCES`,`da access denied`,e);if(i.status>=400)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes`,e);let n=this.toMountRelative(e),r=await this.cache.getBody(n),i=ree(iee(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 x(`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 x(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new x(`EACCES`,`da write denied`,e);if(s.status>=400)throw new x(`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 x(`ENOENT`,`no such directory`,e);if(r.status>=400)throw new x(`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 x(`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 x(`ENOENT`,`no such file or directory`,e)}throw new x(`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 x(`ENOENT`,`no such file`,e);if(n.status===401||n.status===403)throw new x(`EACCES`,`da delete denied`,e);if(n.status>=400)throw new x(`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 yn(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 bn=25*1024*1024,xn=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=yn(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??bn,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new x(`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 x(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new x(`EACCES`,`s3 access denied`,e);if(i.status>=400)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes (${o} > ${this.maxBodyBytes})`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new x(`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 x(`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 x(`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 x(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(o.status===401||o.status===403)throw new x(`EACCES`,`s3 write denied`,e);if(o.status>=400)throw new x(`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 x(`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 x(`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 x(`ENOENT`,`no such file or directory`,e)}throw new x(`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 x(`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 x(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new x(`EACCES`,`s3 delete denied`,e);if(r.status>=400)throw new x(`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}},Sn=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function Cn(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>a6);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new Sn(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var wn=`slicc-mount-cache`,Tn=`listings`,En=`bodies`,Dn=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??wn}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(Tn)||e.createObjectStore(Tn),e.objectStoreNames.contains(En)||e.createObjectStore(En)},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(Tn,`readonly`).objectStore(Tn).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(Tn,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(Tn).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(Tn,`readwrite`);i.objectStore(Tn).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(En,`readonly`).objectStore(En).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,En,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,En,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(En,`readwrite`);i.objectStore(En).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(Tn),n(En)])}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(En,`readonly`).objectStore(En),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(En,`readwrite`),i=r.objectStore(En);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function On(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function kn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function An(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var jn=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),Mn=new Set([101,103,204,205,304]);function Nn(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new x(`EACCES`,e.error):e.errorCode===`invalid_request`?new x(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||jn.has(String(e.errorCode))?new x(`EIO`,e.error):new x(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let t;try{t=kn(e.bodyBase64)}catch(e){throw new x(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=Mn.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function Pn(e,t){let n;try{n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}catch(e){throw new x(`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 x(`EIO`,`mount transport: response is not a JSON envelope (status ${n.status}): ${e instanceof Error?e.message:String(e)}`)}}async function Fn(e,t){try{return await chrome.runtime.sendMessage({type:e,envelope:t})}catch(e){throw new x(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function In(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?An(t.body):void 0};return Nn(On()?await Fn(`mount.s3-sign-and-forward`,n):await Pn(`/api/s3-sign-and-forward`,n))}}function Ln(e){let t=e?.getImsToken??(async()=>(await Cn()).getBearerToken());return async e=>{let n;try{n=await t()}catch(e){throw new x(`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?An(e.body):void 0};return Nn(On()?await Fn(`mount.da-sign-and-forward`,r):await Pn(`/api/da-sign-and-forward`,r))}}var Rn=e({DaMountBackend:()=>vn,RemoteMountCache:()=>Dn,S3MountBackend:()=>xn,makeSignedFetchDa:()=>Ln,makeSignedFetchS3:()=>In}),zn=`slicc-mount-table`,Bn=2,Vn=`mounts`,Hn=`mount-entries`;function Un(){return new Promise((e,t)=>{let n=indexedDB.open(zn,Bn);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(Vn)||t.createObjectStore(Vn),t.objectStoreNames.contains(Hn)||t.createObjectStore(Hn),r<2){let e=n.transaction,t=e.objectStore(Vn),r=e.objectStore(Hn),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:pn(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function Wn(e,t){let n=await Un();try{let r=e.descriptor.kind===`local`&&t?[Vn,Hn]:[Hn],i=n.transaction(r,`readwrite`);i.objectStore(Hn).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(Vn).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 Gn(e){let t=await Un();try{let n=t.transaction([Vn,Hn],`readwrite`);n.objectStore(Hn).delete(e),n.objectStore(Vn).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 Kn(){let e=await Un();try{return await new Promise((t,n)=>{let r=e.transaction(Hn,`readonly`),i=r.objectStore(Hn).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 qn(e){let t=await Un();try{return await new Promise((n,r)=>{let i=t.transaction(Vn,`readonly`).objectStore(Vn).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function aee(){let e=await Un();try{let t=e.transaction([Vn,Hn],`readwrite`);t.objectStore(Vn).clear(),t.objectStore(Hn).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 Jn(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await qn(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=fn.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 Dn({mountId:o.mountId,ttlMs:3e4}),a=new xn({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:In(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 Dn({mountId:o.mountId,ttlMs:3e4}),a=new vn({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:Ln()});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}}var oee=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>see,getPanelRpcClient:()=>Zn,hasLocalDom:()=>Qn,installPanelRpcHandler:()=>cee,panelRpcChannelName:()=>Xn}),Yn=`slicc-panel-rpc`;function Xn(e){return e?`${Yn}:${e}`:Yn}function see(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Xn(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 cee(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Xn(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 Zn(){return globalThis.__slicc_panelRpc??null}function Qn(){return typeof window<`u`&&typeof document<`u`}function $n(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function er(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 x&&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=$n(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 tr=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function nr(e){let{include:t,exclude:n}=tr;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var rr=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-Cr3DISar.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-CWvhREqw.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-BazZFDj_.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),ir=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-9MnG5h7i.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-Dy9dkbr7.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-DBywtHRG.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-Df_T8mMz.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-i7HD-5Tv.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),ar=new Map,or=null;function sr(){return or||(or=(async()=>{for(let[e,t]of Object.entries(rr)){let e=await t();e.config&&nr(e.config.id)&&(ar.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(ir)){let e=await t();e.config&&(ar.set(e.config.id,e.config),e.register?.())}})(),or)}function cr(e){return ar.get(e)}function lr(){return[...ar.keys()]}function ur(e){ar.set(e.id,e)}var dr=`slicc-groups`,fr=3,pr={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},mr=null;async function hr(){if(mr){let e=Object.values(pr).every(e=>mr.objectStoreNames.contains(e));if(mr.version===fr&&e)return mr;mr.close(),mr=null}return new Promise((e,t)=>{let n=indexedDB.open(dr,fr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(pr.MESSAGES)){let e=t.createObjectStore(pr.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(pr.SESSIONS)||t.createObjectStore(pr.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(pr.TASKS)||t.createObjectStore(pr.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(pr.STATE)||t.createObjectStore(pr.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(pr.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(pr.SCOOPS)||t.createObjectStore(pr.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(pr.WEBHOOKS)||t.createObjectStore(pr.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(pr.CRONTASKS)||t.createObjectStore(pr.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{mr=n.result,e(mr)},n.onerror=()=>t(n.error)})}async function gr(e,t=`readonly`){return(await hr()).transaction(e,t).objectStore(e)}async function _r(){let e=await gr(pr.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function vr(e){let t=await gr(pr.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 yr(e,t){let n=await gr(pr.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}function br(e){return e.headers.get(`x-proxy-error`)===`1`}async function xr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Sr(n,t)}function Sr(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 Cr=`tray`,wr=`trayWorkerUrl`,Tr=`lead`;function Er(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 Dr(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=Er(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Or(e,t){let n=new URL(e);return n.searchParams.delete(wr),n.searchParams.delete(Tr),n.searchParams.set(Cr,t),n.toString()}var kr=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>Mr,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Nr,TRAY_JOIN_STORAGE_KEY:()=>jr,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>Tr,TRAY_QUERY_PARAM:()=>Cr,TRAY_WORKER_QUERY_PARAM:()=>wr,TRAY_WORKER_STORAGE_KEY:()=>Ar,buildTrayLaunchUrl:()=>Br,buildTrayLeadLaunchUrl:()=>Ur,buildTrayLeadValue:()=>Hr,buildTrayUrlValue:()=>zr,buildTrayWorkerUrl:()=>Pr,fetchRuntimeConfig:()=>Kr,hasStoredTrayJoinUrl:()=>Rr,normalizeTrayWorkerBaseUrl:()=>Er,parseTrayJoinUrlValue:()=>Ir,parseTrayLeadValue:()=>Vr,parseTrayUrlValue:()=>Fr,resolveTrayRuntimeConfig:()=>Wr,resolveTrayWorkerBaseUrl:()=>Gr,storeTrayJoinUrl:()=>Lr}),Ar=`slicc.trayWorkerBaseUrl`,jr=`slicc.trayJoinUrl`,Mr=`https://www.sliccy.ai`,Nr=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Pr(e,t){let n=Er(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Fr(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 Dr(t.toString());let i=Er(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function Ir(e){let t=Fr(e);return t?.joinUrl?t:null}function Lr(e,t){let n=Ir(t);return n?(e.setItem(jr,n.joinUrl),e.setItem(Ar,n.workerBaseUrl),n):null}function Rr(e){return!!Ir(e?.getItem(`slicc.trayJoinUrl`)??null)}function zr(e,t){let n=Er(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 Br(e,t,n){return Or(e,zr(t,n))}function Vr(e){return Fr(e)}function Hr(e,t){return zr(e,t)}function Ur(e,t,n){return Br(e,t,n)}async function Wr(e){let t=qr(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(jr,t.joinUrl),e.storage.setItem(Ar,t.workerBaseUrl)),t;let n=Ir(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(Ar,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Jr(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(jr,r.joinConfig.joinUrl),e.storage.setItem(Ar,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=Er(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=Er(e.envBaseUrl??null),s=Er(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(Ar,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Gr(e){return(await Wr(e))?.workerBaseUrl??null}async function Kr(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function qr(e){try{let t=new URL(e),n=Fr(t.searchParams.get(Cr));if(n)return n;let r=Fr(t.searchParams.get(Tr));if(r)return r;let i=Er(t.searchParams.get(wr));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:Dr(e)||null}catch{return null}}async function Jr(e){let t=await e();if(!t)return null;let n=Ir(t.trayJoinUrl??null);return{workerBaseUrl:Er(t.trayWorkerBaseUrl??null),joinConfig:n}}var Yr=d(`tray-leader`),Xr=`leader-tray-session`,Zr=3e4,Qr=1e4,$r=1e3,ei=3e4,ti=2,ni=20,ri={state:`inactive`,session:null,error:null};function ii(){return{...ri,session:ri.session?{...ri.session}:null}}var ai=new Set;function oi(e){return ai.add(e),()=>{ai.delete(e)}}function si(e){if(ri={...e,session:e.session?{...e.session}:null},ai.size!==0)for(let e of[...ai])try{e(ii())}catch{}}var ci=class{key;constructor(e=Xr){this.key=e}async load(){return li(await vr(this.key))}async save(e){await yr(this.key,JSON.stringify(e))}async clear(){await yr(this.key,``)}};function li(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 ui=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 ci,this.fetchImpl=e.fetchImpl??mi(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Zr,this.connectTimeoutMs=e.connectTimeoutMs??Qr;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??$r,this.reconnectMaxDelayMs=n.maxDelayMs??ei,this.reconnectBackoffMultiplier=n.backoffMultiplier??ti,this.reconnectMaxAttempts=n.maxAttempts??ni,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return si({state:`leader`,session:this.currentSession,error:null}),this.currentSession;si({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();Yr.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Yr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw si({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,si({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),si({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){Yr.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,si({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;Yr.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++,si({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),Yr.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,Yr.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Yr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Yr.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,si({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),Yr.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||!fi(t))throw t;return Yr.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(Pr(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=pi(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Yr.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=>{Yr.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 di.fromResponse(n);return await n.json()}},di=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 fi(e){return e instanceof di&&[403,404,410].includes(e.status)}function pi(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function mi(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(br(a))throw Error(await xr(a));return a}}var hi=d(`welcome-detection`),gi=`/shared/.welcomed`,lee=`browser-coding-agent`,uee=1,_i=`sessions`,dee=`session-cone`,vi=`[Sprinkle Event: welcome]`;function yi(){return new Promise((e,t)=>{let n=indexedDB.open(lee,uee);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(_i)||e.createObjectStore(_i,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function fee(){return yi().catch(()=>new Promise((e,t)=>{setTimeout(()=>{yi().then(e,t)},120)}))}async function bi(){let e=await fee();try{return await new Promise((t,n)=>{let r=e.transaction(_i,`readonly`).objectStore(_i).get(dee);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function pee(){try{let e=await bi();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>mee(e))}catch(e){return hi.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function mee(e){let t=e.content;return typeof t==`string`?t.includes(vi):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(vi);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(vi)}return!1}):!1}async function xi(e){let t=!1;try{t=await e.exists(gi)}catch(e){return hi.warn(`Failed to read welcomed marker`,{path:gi,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await pee()?{isFirstRun:!1}:{isFirstRun:!0}}async function hee(e){await e.writeFile(gi,`1`)}var Si=`"action":"onboarding-complete-with-provider"`;function gee(e){let t=e.content;return typeof t==`string`?t.includes(Si):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(Si);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(Si)}return!1}):!1}async function Ci(){try{let e=await bi();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>gee(e))}catch(e){return hi.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}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 wi=(e,t,n)=>{let r=e instanceof RegExp?Ti(e,n):e,i=t instanceof RegExp?Ti(t,n):t,a=r!==null&&i!=null&&Ei(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)}},Ti=(e,t)=>{let n=t.match(e);return n?n[0]:null},Ei=(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},Di=`\0SLASH`+Math.random()+`\0`,Oi=`\0OPEN`+Math.random()+`\0`,ki=`\0CLOSE`+Math.random()+`\0`,Ai=`\0COMMA`+Math.random()+`\0`,ji=`\0PERIOD`+Math.random()+`\0`,Mi=new RegExp(Di,`g`),Ni=new RegExp(Oi,`g`),Pi=new RegExp(ki,`g`),Fi=new RegExp(Ai,`g`),Ii=new RegExp(ji,`g`),Li=/\\\\/g,Ri=/\\{/g,zi=/\\}/g,Bi=/\\,/g,Vi=/\\\./g,Hi=1e5;function Ui(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function Wi(e){return e.replace(Li,Di).replace(Ri,Oi).replace(zi,ki).replace(Bi,Ai).replace(Vi,ji)}function Gi(e){return e.replace(Mi,`\\`).replace(Ni,`{`).replace(Pi,`}`).replace(Fi,`,`).replace(Ii,`.`)}function Ki(e){if(!e)return[``];let t=[],n=wi(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=Ki(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function qi(e,t={}){if(!e)return[];let{max:n=Hi}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),Yi(Wi(e),n,!0).map(Gi)}function Ji(e){return`{`+e+`}`}function _ee(e){return/^-?0\d/.test(e)}function vee(e,t){return e<=t}function yee(e,t){return e>=t}function Yi(e,t,n){let r=[],i=wi(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?Yi(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+ki+i.post,Yi(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=Ki(i.body),d.length===1&&d[0]!==void 0&&(d=Yi(d[0],t,!1).map(Ji),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=Ui(d[0]),t=Ui(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(Ui(d[2])):1,i=vee;t<e&&(r*=-1,i=yee);let a=d.some(_ee);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,Yi(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 Xi=1024*64,Zi=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>Xi)throw TypeError(`pattern is too long`)},Qi={"[: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]},$i=e=>e.replace(/[[\]\\-]/g,`\\$&`),ea=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),ta=e=>e.join(``),na=(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(Qi))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($i(d)+`-`+$i(t)):t===d&&r.push($i(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push($i(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push($i(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[ea(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+ta(r)+`]`,p=`[`+(l?``:`^`)+ta(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},ra=(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`),ia,aa=new Set([`!`,`?`,`+`,`*`,`@`]),oa=e=>aa.has(e),sa=e=>oa(e.type),ca=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),la=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),ua=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),da=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),fa=`(?!(?:^|/)\\.\\.?(?:$|/))`,pa=`(?!\\.)`,ma=new Set([`[`,`.`]),ha=new Set([`..`,`.`]),ga=new Set(`().*{}+?[]^$\\!`),_a=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),va=`[^/]`,ya=`[^/]*?`,ba=`[^/]+?`,xa=0,Sa=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++xa;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 ia&&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 ia&&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 ia(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&&oa(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new ia(n,t);u=ia.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new ia(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&&oa(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 ia(n,d);d.push(o),u=ia.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new ia(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,la)}#m(e,t=ca){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=ua){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new ia(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!!da.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=da.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 ia(null,void 0,t);return ia.#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()),!sa(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`?ia.#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&&ha.has(this.#r[0]))){let n=ma,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?fa:o?pa:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,ra(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,ra(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?pa:``)+ba;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?pa:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,ra(i),this.#t=!!this.#t,this.#n]}#x(){if(sa(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+=(ga.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?ba:ya,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=na(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=va,t=!0;continue}i+=_a(c)}return[i,ra(e),!!t,a]}};ia=Sa;var Ca=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),wa=(e,t,n={})=>(Zi(t),!n.nocomment&&t.charAt(0)===`#`?!1:new to(t,n).match(e)),Ta=/^\*+([^+@!?\*\[\(]*)$/,Ea=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),Da=e=>t=>t.endsWith(e),Oa=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),ka=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),Aa=/^\*+\.\*+$/,ja=e=>!e.startsWith(`.`)&&e.includes(`.`),Ma=e=>e!==`.`&&e!==`..`&&e.includes(`.`),Na=/^\.\*+$/,Pa=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),Fa=/^\*+$/,Ia=e=>e.length!==0&&!e.startsWith(`.`),La=e=>e.length!==0&&e!==`.`&&e!==`..`,Ra=/^\?+([^+@!?\*\[\(]*)?$/,za=([e,t=``])=>{let n=Ua([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},Ba=([e,t=``])=>{let n=Wa([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},Va=([e,t=``])=>{let n=Wa([e]);return t?e=>n(e)&&e.endsWith(t):n},Ha=([e,t=``])=>{let n=Ua([e]);return t?e=>n(e)&&e.endsWith(t):n},Ua=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},Wa=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},Ga=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,Ka={win32:{sep:`\\`},posix:{sep:`/`}};wa.sep=Ga===`win32`?Ka.win32.sep:Ka.posix.sep;var qa=Symbol(`globstar **`);wa.GLOBSTAR=qa;var Ja=`[^/]*?`,Ya=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,Xa=`(?:(?!(?:\\/|^)\\.).)*?`;wa.filter=(e,t={})=>n=>wa(n,e,t);var Za=(e,t={})=>Object.assign({},e,t);wa.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return wa;let t=wa;return Object.assign((n,r,i={})=>t(n,r,Za(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,Za(e,n))}static defaults(n){return t.defaults(Za(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,Za(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,Za(e,r))}},unescape:(n,r={})=>t.unescape(n,Za(e,r)),escape:(n,r={})=>t.escape(n,Za(e,r)),filter:(n,r={})=>t.filter(n,Za(e,r)),defaults:n=>t.defaults(Za(e,n)),makeRe:(n,r={})=>t.makeRe(n,Za(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,Za(e,r)),match:(n,r,i={})=>t.match(n,r,Za(e,i)),sep:t.sep,GLOBSTAR:qa})};var Qa=(e,t={})=>(Zi(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:qi(e,{max:t.braceExpandMax}));wa.braceExpand=Qa,wa.makeRe=(e,t={})=>new to(e,t).makeRe(),wa.match=(e,t,n={})=>{let r=new to(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var $a=/[?*]|[+@!]\(.*?\)|\[|\]/,eo=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),to=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){Zi(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||Ga,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]===`?`||!$a.test(e[2]))&&!$a.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(qa)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(qa,i),o=t.lastIndexOf(qa),[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===qa?(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===qa)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 Qa(this.pattern,this.options)}parse(e){Zi(e);let t=this.options;if(e===`**`)return qa;if(e===``)return``;let n,r=null;(n=e.match(Fa))?r=t.dot?La:Ia:(n=e.match(Ta))?r=(t.nocase?t.dot?ka:Oa:t.dot?Da:Ea)(n[1]):(n=e.match(Ra))?r=(t.nocase?t.dot?Ba:za:t.dot?Va:Ha)(n):(n=e.match(Aa))?r=t.dot?Ma:ja:(n=e.match(Na))&&(r=Pa);let i=Sa.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?Ja:t.dot?Ya:Xa,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`?eo(e):e===qa?qa:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==qa||a===qa||(a===void 0?i!==void 0&&i!==qa?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==qa&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=qa))});let i=t.filter(e=>e!==qa);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 wa.defaults(e).Minimatch}};wa.AST=Sa,wa.Minimatch=to,wa.escape=Ca,wa.unescape=ra;var no={};function ro(){throw Error(`gunzipSync is not available in the browser`)}function io(){throw Error(`gzipSync is not available in the browser`)}var ao=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 ao{};function oo(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 so(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 co(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 lo(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 uo(e,t){return co(e,t,``)}function fo(e,t){return lo(e,t,``)}function po(e,t){return t.slice(0,mo(e,t))}function mo(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 ho(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function go(e){let t=e.match(/^\s*/);return t?t[0]:``}var _o=`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}`,vo=RegExp(`[${_o}]+|\\s+|[^${_o}]`,`ug`);new class extends ao{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(vo)||[];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)&&yo(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&yo(n,i,r,null),e}};function yo(e,t,n,r){if(t&&n){let i=go(t.value),a=ho(t.value),o=go(n.value),s=ho(n.value);if(e){let r=oo(i,o);e.value=lo(e.value,o,r),t.value=uo(t.value,r),n.value=uo(n.value,r)}if(r){let e=so(a,s);r.value=co(r.value,s,e),t.value=fo(t.value,e),n.value=fo(n.value,e)}}else if(n){if(e){let e=go(n.value);n.value=n.value.substring(e.length)}if(r){let e=go(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=go(r.value),i=go(t.value),a=ho(t.value),o=oo(n,i);t.value=uo(t.value,o);let s=so(uo(n,o),a);t.value=fo(t.value,s),r.value=co(r.value,n,s),e.value=lo(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=go(r.value),n=po(ho(t.value),e);t.value=fo(t.value,n)}else if(e){let n=po(ho(e.value),go(t.value));t.value=uo(t.value,n)}}new class extends ao{tokenize(e){let t=RegExp(`(\\r?\\n)|[${_o}]+|[^\\S\\n\\r]+|[^${_o}]`,`ug`);return e.match(t)||[]}},new class extends ao{constructor(){super(...arguments),this.tokenize=bo}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
64
|
+
`).trim()}async function qt(e){let t=Gt(Ht(e.messages));return Kt(e.model,e.apiKey,t,e.instruction,e.maxTokens,e.headers,e.signal)}var Jt=Wt,Yt=`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 Xt=`agent-sessions`,Zt=1,Qt=`sessions`;function $t(){return new Promise((e,t)=>{let n=indexedDB.open(Xt,Zt);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Qt)||e.createObjectStore(Qt,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var en=class{dbPromise=null;getDB(){return this.dbPromise||=$t(),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(Qt,`readwrite`).objectStore(Qt).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(Qt,`readonly`).objectStore(Qt).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(Qt,`readwrite`).objectStore(Qt).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(Qt,`readonly`).objectStore(Qt).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(Qt,`readwrite`).objectStore(Qt).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()}}},tn=d(`image-processor`),nn=3932160,rn=1568,an=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function on(e){let t=0;return e.endsWith(`==`)?t=2:e.endsWith(`=`)&&(t=1),Math.ceil(e.length*3/4)-t}function sn(e){return an.has(e)}function cn(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 ln(e){if(!sn(e.mimeType))return tn.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=cn(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;tn.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-D1ZqbevU.js`),__vite__mapDeps([0,1]));r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return tn.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 tn.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=rn/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),tn.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>nn&&s!==`JPEG`?(tn.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>nn&&(tn.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 tn.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>nn)return tn.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 tn.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return tn.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 un=300*1e3,dn=Symbol(`mount:timeout`),fn=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:g(`directory`),onAction:async(e,t)=>{if(e===`approve`){let e=t;if(e?.handleInIdb&&typeof e.idbKey==`string`)try{let t=await b(e.idbKey);return t?(await _(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 dn;throw e}),a,o=new Promise(t=>{a=setTimeout(()=>{r=!0,m.cancel(e,`mount: timed out`),t(dn)},un)}),s=await Promise.race([i,o]);if(a&&clearTimeout(a),s===dn)throw Error(`mount: timed out after ${Math.round(un/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 y();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 b(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);await _(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 x(`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 x(`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 x)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new x(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new x(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new x(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new x(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new x(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new x(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new x(`ENOTEMPTY`,`directory not empty`,t)}return new x(`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 x(`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 pn(){return crypto.randomUUID()}var mn=`slicc_oauth_extra_domains`;function hn(e){try{let t=e.getItem(mn);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 nee(e,t){try{e.setItem(mn,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);function ree(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 iee(e){return e.split(`/`).pop()||`data`}function gn(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 _n=5*1024*1024,vn=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=gn(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??_n,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new x(`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 x(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new x(`EACCES`,`da access denied`,e);if(i.status>=400)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes`,e);let n=this.toMountRelative(e),r=await this.cache.getBody(n),i=ree(iee(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 x(`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 x(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new x(`EACCES`,`da write denied`,e);if(s.status>=400)throw new x(`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 x(`ENOENT`,`no such directory`,e);if(r.status>=400)throw new x(`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 x(`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 x(`ENOENT`,`no such file or directory`,e)}throw new x(`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 x(`ENOENT`,`no such file`,e);if(n.status===401||n.status===403)throw new x(`EACCES`,`da delete denied`,e);if(n.status>=400)throw new x(`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 yn(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 bn=25*1024*1024,xn=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=yn(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??bn,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new x(`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 x(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new x(`EACCES`,`s3 access denied`,e);if(i.status>=400)throw new x(`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 x(`EFBIG`,`body exceeds maxBodyBytes (${o} > ${this.maxBodyBytes})`,e);let s=new Uint8Array(await i.arrayBuffer());if(s.byteLength>this.maxBodyBytes)throw new x(`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 x(`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 x(`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 x(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(o.status===401||o.status===403)throw new x(`EACCES`,`s3 write denied`,e);if(o.status>=400)throw new x(`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 x(`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 x(`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 x(`ENOENT`,`no such file or directory`,e)}throw new x(`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 x(`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 x(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new x(`EACCES`,`s3 delete denied`,e);if(r.status>=400)throw new x(`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}},Sn=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function Cn(){let{getAccounts:e}=await o(async()=>{let{getAccounts:e}=await Promise.resolve().then(()=>a6);return{getAccounts:e}},void 0),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new Sn(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}var wn=`slicc-mount-cache`,Tn=`listings`,En=`bodies`,Dn=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??wn}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(Tn)||e.createObjectStore(Tn),e.objectStoreNames.contains(En)||e.createObjectStore(En)},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(Tn,`readonly`).objectStore(Tn).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(Tn,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(Tn).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(Tn,`readwrite`);i.objectStore(Tn).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(En,`readonly`).objectStore(En).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,En,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,En,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(En,`readwrite`);i.objectStore(En).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(Tn),n(En)])}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(En,`readonly`).objectStore(En),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(En,`readwrite`),i=r.objectStore(En);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function On(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function kn(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function An(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var jn=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),Mn=new Set([101,103,204,205,304]);function Nn(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new x(`EACCES`,e.error):e.errorCode===`invalid_request`?new x(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||jn.has(String(e.errorCode))?new x(`EIO`,e.error):new x(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let t;try{t=kn(e.bodyBase64)}catch(e){throw new x(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let n=Mn.has(e.status)?null:t;return new Response(n,{status:e.status,headers:new Headers(e.headers)})}async function Pn(e,t){let n;try{n=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}catch(e){throw new x(`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 x(`EIO`,`mount transport: response is not a JSON envelope (status ${n.status}): ${e instanceof Error?e.message:String(e)}`)}}async function Fn(e,t){try{return await chrome.runtime.sendMessage({type:e,envelope:t})}catch(e){throw new x(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function In(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?An(t.body):void 0};return Nn(On()?await Fn(`mount.s3-sign-and-forward`,n):await Pn(`/api/s3-sign-and-forward`,n))}}function Ln(e){let t=e?.getImsToken??(async()=>(await Cn()).getBearerToken());return async e=>{let n;try{n=await t()}catch(e){throw new x(`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?An(e.body):void 0};return Nn(On()?await Fn(`mount.da-sign-and-forward`,r):await Pn(`/api/da-sign-and-forward`,r))}}var Rn=e({DaMountBackend:()=>vn,RemoteMountCache:()=>Dn,S3MountBackend:()=>xn,makeSignedFetchDa:()=>Ln,makeSignedFetchS3:()=>In}),zn=`slicc-mount-table`,Bn=2,Vn=`mounts`,Hn=`mount-entries`;function Un(){return new Promise((e,t)=>{let n=indexedDB.open(zn,Bn);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(t.objectStoreNames.contains(Vn)||t.createObjectStore(Vn),t.objectStoreNames.contains(Hn)||t.createObjectStore(Hn),r<2){let e=n.transaction,t=e.objectStore(Vn),r=e.objectStore(Hn),i=t.getAllKeys();i.onsuccess=()=>{for(let e of i.result){if(typeof e!=`string`)continue;let t={targetPath:e,descriptor:{kind:`local`,mountId:pn(),idbHandleKey:e},createdAt:Date.now()};r.put(t,e)}}}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function Wn(e,t){let n=await Un();try{let r=e.descriptor.kind===`local`&&t?[Vn,Hn]:[Hn],i=n.transaction(r,`readwrite`);i.objectStore(Hn).put(e,e.targetPath),e.descriptor.kind===`local`&&t&&i.objectStore(Vn).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 Gn(e){let t=await Un();try{let n=t.transaction([Vn,Hn],`readwrite`);n.objectStore(Hn).delete(e),n.objectStore(Vn).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 Kn(){let e=await Un();try{return await new Promise((t,n)=>{let r=e.transaction(Hn,`readonly`),i=r.objectStore(Hn).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 qn(e){let t=await Un();try{return await new Promise((n,r)=>{let i=t.transaction(Vn,`readonly`).objectStore(Vn).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}finally{t.close()}}async function aee(){let e=await Un();try{let t=e.transaction([Vn,Hn],`readwrite`);t.objectStore(Vn).clear(),t.objectStore(Hn).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 Jn(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await qn(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=fn.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 Dn({mountId:o.mountId,ttlMs:3e4}),a=new xn({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:In(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 Dn({mountId:o.mountId,ttlMs:3e4}),a=new vn({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:Ln()});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}}var oee=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>PANEL_RPC_DEFAULT_TIMEOUT_MS,createPanelRpcEventEmitter:()=>see,getPanelRpcClient:()=>Zn,hasLocalDom:()=>Qn,installPanelRpcHandler:()=>cee,panelRpcChannelName:()=>Xn}),Yn=`slicc-panel-rpc`;function Xn(e){return e?`${Yn}:${e}`:Yn}function see(e={}){if(typeof BroadcastChannel!=`function`)return{emit:()=>{},dispose:()=>{}};let t=new BroadcastChannel(Xn(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 cee(e){if(typeof BroadcastChannel!=`function`)return()=>{};let t=new BroadcastChannel(Xn(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 Zn(){return globalThis.__slicc_panelRpc??null}function Qn(){return typeof window<`u`&&typeof document<`u`}function $n(e,t){return e===`/`?`/${t}`:`${e}/${t}`}function er(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 x&&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=$n(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 tr=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function nr(e){let{include:t,exclude:n}=tr;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var rr=Object.assign({"./built-in/azure-ai-foundry.ts":()=>o(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>o(()=>import(`./azure-openai-Chnzn8mE.js`),__vite__mapDeps([2,3,4,1,5,6,7])),"./built-in/bedrock-camp.ts":()=>o(()=>import(`./bedrock-camp-CWvhREqw.js`).then(e=>e.n),__vite__mapDeps([3,4,1,5,6])),"./built-in/local-llm.ts":()=>o(()=>import(`./local-llm-oVA3xfDX.js`),__vite__mapDeps([8,3,4,1,5,6,9,10,11,12,13,7,14]))}),ir=Object.assign({"/packages/webapp/providers/adobe.ts":()=>o(()=>import(`./adobe-BxfDEbzv.js`),__vite__mapDeps([15,1,3,4,5,6,16])),"/packages/webapp/providers/github-copilot.ts":()=>o(()=>import(`./github-copilot-k7KrrVH1.js`),__vite__mapDeps([17,1,3,4,5,6])),"/packages/webapp/providers/github.ts":()=>o(()=>import(`./github-CWTZshiB.js`),__vite__mapDeps([18,1,19,16])),"/packages/webapp/providers/openai-codex.ts":()=>o(()=>import(`./openai-codex-BHgglUzj.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-BtL3sZcw.js`),__vite__mapDeps([23,3,4,1,5,6,24,22,21]))}),ar=new Map,or=null;function sr(){return or||(or=(async()=>{for(let[e,t]of Object.entries(rr)){let e=await t();e.config&&nr(e.config.id)&&(ar.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(ir)){let e=await t();e.config&&(ar.set(e.config.id,e.config),e.register?.())}})(),or)}function cr(e){return ar.get(e)}function lr(){return[...ar.keys()]}function ur(e){ar.set(e.id,e)}var dr=`slicc-groups`,fr=3,pr={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`},mr=null;async function hr(){if(mr){let e=Object.values(pr).every(e=>mr.objectStoreNames.contains(e));if(mr.version===fr&&e)return mr;mr.close(),mr=null}return new Promise((e,t)=>{let n=indexedDB.open(dr,fr);n.onupgradeneeded=e=>{let t=e.target.result,n=e.oldVersion;if(n<1){if(!t.objectStoreNames.contains(pr.MESSAGES)){let e=t.createObjectStore(pr.MESSAGES,{keyPath:`id`});e.createIndex(`chatJid`,`chatJid`),e.createIndex(`timestamp`,`timestamp`),e.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}t.objectStoreNames.contains(pr.SESSIONS)||t.createObjectStore(pr.SESSIONS,{keyPath:`groupFolder`}),t.objectStoreNames.contains(pr.TASKS)||t.createObjectStore(pr.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),t.objectStoreNames.contains(pr.STATE)||t.createObjectStore(pr.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(pr.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(pr.SCOOPS)||t.createObjectStore(pr.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}n<3&&(t.objectStoreNames.contains(pr.WEBHOOKS)||t.createObjectStore(pr.WEBHOOKS,{keyPath:`id`}),t.objectStoreNames.contains(pr.CRONTASKS)||t.createObjectStore(pr.CRONTASKS,{keyPath:`id`}))},n.onsuccess=()=>{mr=n.result,e(mr)},n.onerror=()=>t(n.error)})}async function gr(e,t=`readonly`){return(await hr()).transaction(e,t).objectStore(e)}async function _r(){let e=await gr(pr.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function vr(e){let t=await gr(pr.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 yr(e,t){let n=await gr(pr.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}function br(e){return e.headers.get(`x-proxy-error`)===`1`}async function xr(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return Sr(n,t)}function Sr(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 Cr=`tray`,wr=`trayWorkerUrl`,Tr=`lead`;function Er(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 Dr(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=Er(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Or(e,t){let n=new URL(e);return n.searchParams.delete(wr),n.searchParams.delete(Tr),n.searchParams.set(Cr,t),n.toString()}var kr=e({DEFAULT_PRODUCTION_TRAY_WORKER_BASE_URL:()=>Mr,DEFAULT_STAGING_TRAY_WORKER_BASE_URL:()=>Nr,TRAY_JOIN_STORAGE_KEY:()=>jr,TRAY_LEGACY_LEAD_QUERY_PARAM:()=>Tr,TRAY_QUERY_PARAM:()=>Cr,TRAY_WORKER_QUERY_PARAM:()=>wr,TRAY_WORKER_STORAGE_KEY:()=>Ar,buildTrayLaunchUrl:()=>Br,buildTrayLeadLaunchUrl:()=>Ur,buildTrayLeadValue:()=>Hr,buildTrayUrlValue:()=>zr,buildTrayWorkerUrl:()=>Pr,fetchRuntimeConfig:()=>Kr,hasStoredTrayJoinUrl:()=>Rr,normalizeTrayWorkerBaseUrl:()=>Er,parseTrayJoinUrlValue:()=>Ir,parseTrayLeadValue:()=>Vr,parseTrayUrlValue:()=>Fr,resolveTrayRuntimeConfig:()=>Wr,resolveTrayWorkerBaseUrl:()=>Gr,storeTrayJoinUrl:()=>Lr}),Ar=`slicc.trayWorkerBaseUrl`,jr=`slicc.trayJoinUrl`,Mr=`https://www.sliccy.ai`,Nr=`https://slicc-tray-hub-staging.minivelos.workers.dev`;function Pr(e,t){let n=Er(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function Fr(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 Dr(t.toString());let i=Er(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function Ir(e){let t=Fr(e);return t?.joinUrl?t:null}function Lr(e,t){let n=Ir(t);return n?(e.setItem(jr,n.joinUrl),e.setItem(Ar,n.workerBaseUrl),n):null}function Rr(e){return!!Ir(e?.getItem(`slicc.trayJoinUrl`)??null)}function zr(e,t){let n=Er(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 Br(e,t,n){return Or(e,zr(t,n))}function Vr(e){return Fr(e)}function Hr(e,t){return zr(e,t)}function Ur(e,t,n){return Br(e,t,n)}async function Wr(e){let t=qr(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(jr,t.joinUrl),e.storage.setItem(Ar,t.workerBaseUrl)),t;let n=Ir(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(Ar,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Jr(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(jr,r.joinConfig.joinUrl),e.storage.setItem(Ar,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=Er(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=Er(e.envBaseUrl??null),s=Er(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(Ar,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Gr(e){return(await Wr(e))?.workerBaseUrl??null}async function Kr(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function qr(e){try{let t=new URL(e),n=Fr(t.searchParams.get(Cr));if(n)return n;let r=Fr(t.searchParams.get(Tr));if(r)return r;let i=Er(t.searchParams.get(wr));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:Dr(e)||null}catch{return null}}async function Jr(e){let t=await e();if(!t)return null;let n=Ir(t.trayJoinUrl??null);return{workerBaseUrl:Er(t.trayWorkerBaseUrl??null),joinConfig:n}}var Yr=d(`tray-leader`),Xr=`leader-tray-session`,Zr=3e4,Qr=1e4,$r=1e3,ei=3e4,ti=2,ni=20,ri={state:`inactive`,session:null,error:null};function ii(){return{...ri,session:ri.session?{...ri.session}:null}}var ai=new Set;function oi(e){return ai.add(e),()=>{ai.delete(e)}}function si(e){if(ri={...e,session:e.session?{...e.session}:null},ai.size!==0)for(let e of[...ai])try{e(ii())}catch{}}var ci=class{key;constructor(e=Xr){this.key=e}async load(){return li(await vr(this.key))}async save(e){await yr(this.key,JSON.stringify(e))}async clear(){await yr(this.key,``)}};function li(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 ui=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 ci,this.fetchImpl=e.fetchImpl??mi(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??Zr,this.connectTimeoutMs=e.connectTimeoutMs??Qr;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??$r,this.reconnectMaxDelayMs=n.maxDelayMs??ei,this.reconnectBackoffMultiplier=n.backoffMultiplier??ti,this.reconnectMaxAttempts=n.maxAttempts??ni,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return si({state:`leader`,session:this.currentSession,error:null}),this.currentSession;si({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();Yr.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){Yr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw si({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,si({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),si({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){Yr.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,si({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;Yr.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++,si({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),Yr.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,Yr.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){Yr.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),Yr.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,si({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),Yr.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||!fi(t))throw t;return Yr.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(Pr(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=pi(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){Yr.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=>{Yr.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 di.fromResponse(n);return await n.json()}},di=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 fi(e){return e instanceof di&&[403,404,410].includes(e.status)}function pi(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function mi(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(br(a))throw Error(await xr(a));return a}}var hi=d(`welcome-detection`),gi=`/shared/.welcomed`,lee=`browser-coding-agent`,uee=1,_i=`sessions`,dee=`session-cone`,vi=`[Sprinkle Event: welcome]`;function yi(){return new Promise((e,t)=>{let n=indexedDB.open(lee,uee);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(_i)||e.createObjectStore(_i,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error),n.onblocked=()=>{}})}function fee(){return yi().catch(()=>new Promise((e,t)=>{setTimeout(()=>{yi().then(e,t)},120)}))}async function bi(){let e=await fee();try{return await new Promise((t,n)=>{let r=e.transaction(_i,`readonly`).objectStore(_i).get(dee);r.onsuccess=()=>t(r.result??null),r.onerror=()=>n(r.error)})}finally{e.close()}}async function pee(){try{let e=await bi();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>mee(e))}catch(e){return hi.warn(`Failed to scan cone chat session for welcome lick`,{error:e instanceof Error?e.message:String(e)}),!1}}function mee(e){let t=e.content;return typeof t==`string`?t.includes(vi):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(vi);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(vi)}return!1}):!1}async function xi(e){let t=!1;try{t=await e.exists(gi)}catch(e){return hi.warn(`Failed to read welcomed marker`,{path:gi,error:e instanceof Error?e.message:String(e)}),{isFirstRun:!1}}return t||await pee()?{isFirstRun:!1}:{isFirstRun:!0}}async function hee(e){await e.writeFile(gi,`1`)}var Si=`"action":"onboarding-complete-with-provider"`;function gee(e){let t=e.content;return typeof t==`string`?t.includes(Si):Array.isArray(t)?t.some(e=>{if(typeof e==`string`)return e.includes(Si);if(e&&typeof e==`object`){let t=e.text;if(typeof t==`string`)return t.includes(Si)}return!1}):!1}async function Ci(){try{let e=await bi();return!e||!Array.isArray(e.messages)?!1:e.messages.some(e=>gee(e))}catch(e){return hi.warn(`Failed to scan cone chat session for final lick`,{error:e instanceof Error?e.message:String(e)}),!1}}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 wi=(e,t,n)=>{let r=e instanceof RegExp?Ti(e,n):e,i=t instanceof RegExp?Ti(t,n):t,a=r!==null&&i!=null&&Ei(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)}},Ti=(e,t)=>{let n=t.match(e);return n?n[0]:null},Ei=(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},Di=`\0SLASH`+Math.random()+`\0`,Oi=`\0OPEN`+Math.random()+`\0`,ki=`\0CLOSE`+Math.random()+`\0`,Ai=`\0COMMA`+Math.random()+`\0`,ji=`\0PERIOD`+Math.random()+`\0`,Mi=new RegExp(Di,`g`),Ni=new RegExp(Oi,`g`),Pi=new RegExp(ki,`g`),Fi=new RegExp(Ai,`g`),Ii=new RegExp(ji,`g`),Li=/\\\\/g,Ri=/\\{/g,zi=/\\}/g,Bi=/\\,/g,Vi=/\\\./g,Hi=1e5;function Ui(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function Wi(e){return e.replace(Li,Di).replace(Ri,Oi).replace(zi,ki).replace(Bi,Ai).replace(Vi,ji)}function Gi(e){return e.replace(Mi,`\\`).replace(Ni,`{`).replace(Pi,`}`).replace(Fi,`,`).replace(Ii,`.`)}function Ki(e){if(!e)return[``];let t=[],n=wi(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=Ki(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function qi(e,t={}){if(!e)return[];let{max:n=Hi}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),Yi(Wi(e),n,!0).map(Gi)}function Ji(e){return`{`+e+`}`}function _ee(e){return/^-?0\d/.test(e)}function vee(e,t){return e<=t}function yee(e,t){return e>=t}function Yi(e,t,n){let r=[],i=wi(`{`,`}`,e);if(!i)return[e];let a=i.pre,o=i.post.length?Yi(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+ki+i.post,Yi(e,t,!0)):[e];let d;if(l)d=i.body.split(/\.\./);else if(d=Ki(i.body),d.length===1&&d[0]!==void 0&&(d=Yi(d[0],t,!1).map(Ji),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=Ui(d[0]),t=Ui(d[1]),n=Math.max(d[0].length,d[1].length),r=d.length===3&&d[2]!==void 0?Math.abs(Ui(d[2])):1,i=vee;t<e&&(r*=-1,i=yee);let a=d.some(_ee);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,Yi(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 Xi=1024*64,Zi=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>Xi)throw TypeError(`pattern is too long`)},Qi={"[: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]},$i=e=>e.replace(/[[\]\\-]/g,`\\$&`),ea=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),ta=e=>e.join(``),na=(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(Qi))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($i(d)+`-`+$i(t)):t===d&&r.push($i(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push($i(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push($i(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[ea(r[0].length===2?r[0].slice(-1):r[0]),!1,u-n,!1];let f=`[`+(l?`^`:``)+ta(r)+`]`,p=`[`+(l?``:`^`)+ta(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},ra=(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`),ia,aa=new Set([`!`,`?`,`+`,`*`,`@`]),oa=e=>aa.has(e),sa=e=>oa(e.type),ca=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),la=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),ua=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),da=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),fa=`(?!(?:^|/)\\.\\.?(?:$|/))`,pa=`(?!\\.)`,ma=new Set([`[`,`.`]),ha=new Set([`..`,`.`]),ga=new Set(`().*{}+?[]^$\\!`),_a=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),va=`[^/]`,ya=`[^/]*?`,ba=`[^/]+?`,xa=0,Sa=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++xa;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 ia&&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 ia&&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 ia(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&&oa(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new ia(n,t);u=ia.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new ia(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&&oa(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 ia(n,d);d.push(o),u=ia.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new ia(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,la)}#m(e,t=ca){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=ua){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new ia(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!!da.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=da.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 ia(null,void 0,t);return ia.#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()),!sa(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`?ia.#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&&ha.has(this.#r[0]))){let n=ma,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?fa:o?pa:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,ra(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,ra(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?pa:``)+ba;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?pa:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,ra(i),this.#t=!!this.#t,this.#n]}#x(){if(sa(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+=(ga.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?ba:ya,t=!0;continue}else o=!1;if(c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=na(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=va,t=!0;continue}i+=_a(c)}return[i,ra(e),!!t,a]}};ia=Sa;var Ca=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),wa=(e,t,n={})=>(Zi(t),!n.nocomment&&t.charAt(0)===`#`?!1:new to(t,n).match(e)),Ta=/^\*+([^+@!?\*\[\(]*)$/,Ea=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),Da=e=>t=>t.endsWith(e),Oa=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),ka=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),Aa=/^\*+\.\*+$/,ja=e=>!e.startsWith(`.`)&&e.includes(`.`),Ma=e=>e!==`.`&&e!==`..`&&e.includes(`.`),Na=/^\.\*+$/,Pa=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),Fa=/^\*+$/,Ia=e=>e.length!==0&&!e.startsWith(`.`),La=e=>e.length!==0&&e!==`.`&&e!==`..`,Ra=/^\?+([^+@!?\*\[\(]*)?$/,za=([e,t=``])=>{let n=Ua([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},Ba=([e,t=``])=>{let n=Wa([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},Va=([e,t=``])=>{let n=Wa([e]);return t?e=>n(e)&&e.endsWith(t):n},Ha=([e,t=``])=>{let n=Ua([e]);return t?e=>n(e)&&e.endsWith(t):n},Ua=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},Wa=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},Ga=typeof process==`object`&&process?{}.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,Ka={win32:{sep:`\\`},posix:{sep:`/`}};wa.sep=Ga===`win32`?Ka.win32.sep:Ka.posix.sep;var qa=Symbol(`globstar **`);wa.GLOBSTAR=qa;var Ja=`[^/]*?`,Ya=`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`,Xa=`(?:(?!(?:\\/|^)\\.).)*?`;wa.filter=(e,t={})=>n=>wa(n,e,t);var Za=(e,t={})=>Object.assign({},e,t);wa.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return wa;let t=wa;return Object.assign((n,r,i={})=>t(n,r,Za(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,Za(e,n))}static defaults(n){return t.defaults(Za(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,Za(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,Za(e,r))}},unescape:(n,r={})=>t.unescape(n,Za(e,r)),escape:(n,r={})=>t.escape(n,Za(e,r)),filter:(n,r={})=>t.filter(n,Za(e,r)),defaults:n=>t.defaults(Za(e,n)),makeRe:(n,r={})=>t.makeRe(n,Za(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,Za(e,r)),match:(n,r,i={})=>t.match(n,r,Za(e,i)),sep:t.sep,GLOBSTAR:qa})};var Qa=(e,t={})=>(Zi(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:qi(e,{max:t.braceExpandMax}));wa.braceExpand=Qa,wa.makeRe=(e,t={})=>new to(e,t).makeRe(),wa.match=(e,t,n={})=>{let r=new to(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};var $a=/[?*]|[+@!]\(.*?\)|\[|\]/,eo=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),to=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){Zi(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||Ga,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]===`?`||!$a.test(e[2]))&&!$a.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(qa)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(qa,i),o=t.lastIndexOf(qa),[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===qa?(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===qa)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 Qa(this.pattern,this.options)}parse(e){Zi(e);let t=this.options;if(e===`**`)return qa;if(e===``)return``;let n,r=null;(n=e.match(Fa))?r=t.dot?La:Ia:(n=e.match(Ta))?r=(t.nocase?t.dot?ka:Oa:t.dot?Da:Ea)(n[1]):(n=e.match(Ra))?r=(t.nocase?t.dot?Ba:za:t.dot?Va:Ha)(n):(n=e.match(Aa))?r=t.dot?Ma:ja:(n=e.match(Na))&&(r=Pa);let i=Sa.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?Ja:t.dot?Ya:Xa,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`?eo(e):e===qa?qa:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e!==qa||a===qa||(a===void 0?i!==void 0&&i!==qa?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==qa&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=qa))});let i=t.filter(e=>e!==qa);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 wa.defaults(e).Minimatch}};wa.AST=Sa,wa.Minimatch=to,wa.escape=Ca,wa.unescape=ra;var no={};function ro(){throw Error(`gunzipSync is not available in the browser`)}function io(){throw Error(`gzipSync is not available in the browser`)}var ao=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 ao{};function oo(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 so(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 co(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 lo(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 uo(e,t){return co(e,t,``)}function fo(e,t){return lo(e,t,``)}function po(e,t){return t.slice(0,mo(e,t))}function mo(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 ho(e){let t;for(t=e.length-1;t>=0&&e[t].match(/\s/);t--);return e.substring(t+1)}function go(e){let t=e.match(/^\s*/);return t?t[0]:``}var _o=`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}`,vo=RegExp(`[${_o}]+|\\s+|[^${_o}]`,`ug`);new class extends ao{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(vo)||[];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)&&yo(n,i,r,e),n=e,r=null,i=null)}),(r||i)&&yo(n,i,r,null),e}};function yo(e,t,n,r){if(t&&n){let i=go(t.value),a=ho(t.value),o=go(n.value),s=ho(n.value);if(e){let r=oo(i,o);e.value=lo(e.value,o,r),t.value=uo(t.value,r),n.value=uo(n.value,r)}if(r){let e=so(a,s);r.value=co(r.value,s,e),t.value=fo(t.value,e),n.value=fo(n.value,e)}}else if(n){if(e){let e=go(n.value);n.value=n.value.substring(e.length)}if(r){let e=go(r.value);r.value=r.value.substring(e.length)}}else if(e&&r){let n=go(r.value),i=go(t.value),a=ho(t.value),o=oo(n,i);t.value=uo(t.value,o);let s=so(uo(n,o),a);t.value=fo(t.value,s),r.value=co(r.value,n,s),e.value=lo(e.value,n,n.slice(0,n.length-s.length))}else if(r){let e=go(r.value),n=po(ho(t.value),e);t.value=fo(t.value,n)}else if(e){let n=po(ho(e.value),go(t.value));t.value=uo(t.value,n)}}new class extends ao{tokenize(e){let t=RegExp(`(\\r?\\n)|[${_o}]+|[^\\S\\n\\r]+|[^${_o}]`,`ug`);return e.match(t)||[]}},new class extends ao{constructor(){super(...arguments),this.tokenize=bo}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
65
65
|
`))&&(e=e.trim()),(!n.newlineIsToken||!t.includes(`
|
|
66
66
|
`))&&(t=t.trim())):n.ignoreNewlineAtEof&&!n.newlineIsToken&&(e.endsWith(`
|
|
67
67
|
`)&&(e=e.slice(0,-1)),t.endsWith(`
|
|
@@ -1108,7 +1108,7 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
1108
1108
|
${e}</tr>
|
|
1109
1109
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
1110
1110
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${u3(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=d3(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+u3(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=d3(e);if(i===null)return u3(n);e=i;let a=`<img src="${e}" alt="${u3(n)}"`;return t&&(a+=` title="${u3(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:u3(e.text)}},S3=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},C3=class e{options;renderer;textRenderer;constructor(e){this.options=e||Z2,this.options.renderer=this.options.renderer||new x3,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S3}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},w3=class{options;block;constructor(e){this.options=e||Z2}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?b3.lex:b3.lexInline}provideParser(e=this.block){return e?C3.parse:C3.parseInline}},T3=class{defaults=X2();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=C3;Renderer=x3;TextRenderer=S3;Lexer=b3;Tokenizer=y3;Hooks=w3;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new x3(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new y3(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new w3;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];w3.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&w3.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b3.lex(e,t??this.defaults)}parser(e,t){return C3.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?b3.lex:b3.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?C3.parse:C3.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?b3.lex:b3.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?C3.parse:C3.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
1111
|
-
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+u3(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},E3=new T3;function D3(e,t){return E3.parse(e,t)}D3.options=D3.setOptions=function(e){return E3.setOptions(e),D3.defaults=E3.defaults,Q2(D3.defaults),D3},D3.getDefaults=X2,D3.defaults=Z2,D3.use=function(...e){return E3.use(...e),D3.defaults=E3.defaults,Q2(D3.defaults),D3},D3.walkTokens=function(e,t){return E3.walkTokens(e,t)},D3.parseInline=E3.parseInline,D3.Parser=C3,D3.parser=C3.parse,D3.Renderer=x3,D3.TextRenderer=S3,D3.Lexer=b3,D3.lexer=b3.lex,D3.Tokenizer=y3,D3.Hooks=w3,D3.parse=D3,D3.options,D3.setOptions,D3.use,D3.walkTokens,D3.parseInline,C3.parse,b3.lex;function O3(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function k3(e,t){let n=O3(e);return t===`shtml`||([`js`,`javascript`,`ts`,`typescript`,`jsx`,`tsx`].includes(t)?n=j3(n):t===`json`?n=M3(n):[`bash`,`sh`,`shell`,`zsh`].includes(t)&&(n=N3(n))),n}function A3(e){let t=[];return{html:e.replace(/<span class="tok-(?:comment|string)">[\s\S]*?<\/span>/g,e=>{let n=String.fromCharCode(57344+t.length);return t.push(e),n}),restore:e=>e.replace(/[\ue000-\uf8ff]/g,e=>t[e.charCodeAt(0)-57344]??e)}}function j3(e){e=e.replace(/(\/\/[^\n]*)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/(\/\*[\s\S]*?\*\/)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/("[^&]*?"|'[^&]*?'|`[^`]*?`)/g,`<span class="tok-string">$1</span>`);let t=A3(e);return e=t.html,e=e.replace(RegExp(`\\b(${`const.let.var.function.return.if.else.for.while.class.extends.import.export.from.default.new.this.async.await.try.catch.throw.typeof.instanceof.interface.type.enum.implements.abstract.public.private.protected.readonly.static.void.null.undefined.true.false`.split(`.`).join(`|`)})\\b`,`g`),`<span class="tok-keyword">$1</span>`),e=e.replace(/\b(\d+\.?\d*)\b/g,`<span class="tok-number">$1</span>`),e=e.replace(/\b([a-zA-Z_$][\w$]*)\s*(?=\()/g,`<span class="tok-fn">$1</span>`),t.restore(e)}function M3(e){return e=e.replace(/("[^&]*?")\s*:/g,`<span class="tok-keyword">$1</span>:`),e=e.replace(/:\s*("[^&]*?")/g,`: <span class="tok-string">$1</span>`),e=e.replace(/\b(\d+\.?\d*)\b/g,`<span class="tok-number">$1</span>`),e=e.replace(/\b(true|false|null)\b/g,`<span class="tok-keyword">$1</span>`),e}function N3(e){return e=e.replace(/(#[^\n]*)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/("[^&]*?"|'[^&]*?')/g,`<span class="tok-string">$1</span>`),e=e.replace(RegExp(`\\b(${[`if`,`then`,`else`,`fi`,`for`,`do`,`done`,`while`,`case`,`esac`,`echo`,`export`,`cd`,`ls`,`mkdir`,`rm`,`cp`,`mv`,`cat`,`grep`,`npm`,`node`,`git`].join(`|`)})\\b`,`g`),`<span class="tok-keyword">$1</span>`),e}var P3=new T3({gfm:!0,breaks:!0,async:!1,renderer:{code({text:e,lang:t}){let n=t??``,r=k3(e,n);return`<pre><code${n?` class="language-${O3(n)}"`:``}>${r}</code></pre>\n`},link({href:e,title:t,tokens:n}){let r=e??``;if(r.startsWith(`javascript:`))return this.parser.parseInline(n);let i=t?` title="${O3(t)}"`:``,a=this.parser.parseInline(n);return`<a href="${O3(r)}"${i} target="_blank" rel="noopener noreferrer">${a}</a>`},image({href:e,title:t,text:n}){let r=e??``,i=n?` alt="${O3(n)}"`:``,a=t?` title="${O3(t)}"`:``;return`<img src="${O3(r)}"${i}${a}>`}}}),F3={ALLOWED_TAGS:`a.b.i.em.strong.p.br.code.pre.ul.ol.li.h1.h2.h3.h4.h5.h6.table.thead.tbody.tr.th.td.del.blockquote.hr.img.span.div.details.summary.input`.split(`.`),ALLOWED_ATTR:[`href`,`src`,`alt`,`title`,`class`,`target`,`rel`,`type`,`checked`,`disabled`],ALLOW_DATA_ATTR:!1};function I3(e){return Y2(e,F3)}function L3(e){return e.replace(/<a\s([^>]*?)>/g,(e,t)=>{let n=t;return/(^|\s)target\s*=/i.test(n)?n=n.replace(/(^|\s)target\s*=\s*(['"])[^'"]*\2/gi,`$1target="_blank"`):n+=` target="_blank"`,/(^|\s)rel\s*=/i.test(n)?n=n.replace(/(^|\s)rel\s*=\s*(['"])[^'"]*\2/gi,`$1rel="noopener noreferrer"`):n+=` rel="noopener noreferrer"`,`<a ${n}>`})}var R3=/<p><strong>Error:<\/strong>\s*([\s\S]*?)<\/p>/g,z3=/<pre><code class="language-shtml">[\s\S]*?<\/code><\/pre>/g,B3=`<div class="msg__dip-pending" role="status" aria-live="polite" aria-label="Pouring a dip"><span class="msg__dip-pending-label">Pouring a dip…</span><span class="msg__dip-pending-status" aria-hidden="true"></span></div>`;function V3(e){return L3(I3(P3.parse(e)))}function H3(e){return e.replace(R3,(e,t)=>`<div class="msg__error" role="alert"><div class="msg__error-label">Error</div><div class="msg__error-body">${t}</div></div>`)}function U3(e){return e.replace(z3,B3)}function W3(e){return V3(e)}function G3(e,t=!1){let n=H3(V3(e));return t&&(n=U3(n)),n}function K3(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??q3(t.state)??`Mirroring another browser.`}}function q3(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 J3(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 Y3=null,X3=!1;function Z3(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Q3(){if(!X3&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=Z3();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(Y3=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{n6(`js`,i6(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;n6(`js`,i6(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),Y3=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),X3=!0,Y3&&Y3(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function $3(e,t){Y3?.(`formsubmit`,{source:e,target:t})}function e6(e){Y3?.(`viewblock`,{source:e})}function t6(e){Y3?.(`viewmedia`,{source:e})}function n6(e,t){Y3?.(`error`,{source:e,target:t})}function r6(e){Y3?.(`signup`,{source:e})}function i6(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var a6=e({addAccount:()=>L6,applyProviderDefaults:()=>E6,clearAllSettings:()=>n8,describeInvalidJoinUrl:()=>J3,downloadProviders:()=>t8,exportProviders:()=>e8,getAccounts:()=>j6,getAllAvailableModels:()=>A6,getAllExtraOAuthDomains:()=>P6,getApiKey:()=>$6,getApiKeyForProvider:()=>G6,getApiVersionForProvider:()=>J6,getAvailableProviders:()=>v6,getBaseUrlForProvider:()=>K6,getDeploymentForProvider:()=>q6,getExtraOAuthDomains:()=>M6,getOAuthAccountInfo:()=>C6,getProviderConfig:()=>b6,getProviderModels:()=>S6,getSelectedModelId:()=>Y6,getSelectedProvider:()=>Q6,isModelHiddenFromPicker:()=>O6,logoutOAuthAccount:()=>B6,maskOAuthTokenWithRetry:()=>V6,migrateLegacyAuthOnlySelection:()=>_6,persistOAuthMaskViaServiceWorker:()=>H6,providerOffersLlmModels:()=>y6,removeAccount:()=>z6,resolveCurrentModel:()=>o8,resolveModelById:()=>a8,saveOAuthAccount:()=>U6,setExtraOAuthDomains:()=>N6,setSelectedModelId:()=>X6,showProviderSettings:()=>u8}),o6=l,s6=u;function c6(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function l6(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){T6.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 u6=`slicc_accounts`,d6=`selected-model`,f6=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],p6=new Set([`github`]);function m6(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!nr(e)}var h6=!1;function g6(){if(!h6){h6=!0;for(let e of f6)try{localStorage.removeItem(e)}catch{}_6()}}function _6(){try{let e=localStorage.getItem(d6);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(p6.has(n)||m6(n))&&localStorage.removeItem(d6)}}}catch{}try{let e=localStorage.getItem(u6);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`&&m6(e.providerId)));n.length!==t.length&&localStorage.setItem(u6,JSON.stringify(n))}catch{}}function v6(){let e=s().filter(nr),t=lr();return[...new Set([...e,...t])].filter(e=>!cr(e)?.hidden)}function y6(e){try{if(S6(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=cr(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function b6(e){return cr(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function x6(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 S6(e){try{if(e===`bedrock-camp`){let e=a(K6(`bedrock-camp`));return s6(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=b6(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return T6.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 s6(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=i8(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&x6(o,s),x6(o,n),o})}if(t.isOAuth){let n=s6(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&x6(i,a),i})}return s6(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return T6.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function C6(e){let t=j6().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 w6=Object.assign({})[`/packages/webapp/providers.json`]??[],T6=d(`provider-settings`);function E6(e=w6){if(e.length===0||j6().length>0)return;let t=new Set(v6());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){T6.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}L6(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(d6)&&localStorage.setItem(d6,`${n.providerId}:${n.model}`)}var D6=[/haiku/i];function O6(e){return D6.some(t=>t.test(e))}function k6(e){return e.filter(e=>!O6(e.id))}function A6(){let e=j6();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=b6(n.providerId);if(e.hidden||m6(n.providerId))continue;let r=k6(S6(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 j6(){g6();let e=localStorage.getItem(u6);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 M6(e){return hn(localStorage)[e]??[]}function N6(e,t){let n=hn(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,nee(localStorage,n)}function P6(){return hn(localStorage)}function F6(e){localStorage.setItem(u6,JSON.stringify(e))}async function I6(e){if(Qn()){F6(e);return}let t=Zn();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(u6,r)}catch(e){T6.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function L6(e,t,n,r,i){let a=j6().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),F6(a)}async function R6(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&&T6.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&T6.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&&T6.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){T6.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function z6(e){let t=j6().find(t=>t.providerId===e),n=b6(e);t&&n?.isOAuth&&await B6(e),await R6(e),await I6(j6().filter(t=>t.providerId!==e));let r=localStorage.getItem(d6)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(d6)}async function B6(e){let t=j6().find(t=>t.providerId===e);if(!t)return;let n=b6(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){T6.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-CFSmb2Xq.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{T6.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await I6(j6().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await R6(e)}}async function V6(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 H6(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await V6(()=>t.sendMaskRequest(r),n);if(!i){T6.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 U6(e){let t=j6().find(t=>t.providerId===e.providerId),n=j6().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 I6(n);let r=b6(e.providerId)?.oauthTokenDomains??[],i=M6(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 H6({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&&T6.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&T6.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:j6,saveAccounts:I6});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=j6(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await I6(r))}else T6.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){T6.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var W6=`local`;function G6(e){let t=j6().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(b6(e).optionalApiKey?W6:null):null}function K6(e){return j6().find(t=>t.providerId===e)?.baseUrl??null}function q6(e){return j6().find(t=>t.providerId===e)?.deployment??null}function J6(e){return j6().find(t=>t.providerId===e)?.apiVersion??null}function Y6(){let e=localStorage.getItem(d6)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function X6(e){if(e.includes(`:`))localStorage.setItem(d6,e);else{let t=Q6();localStorage.setItem(d6,`${t}:${e}`)}}function Z6(){return localStorage.getItem(d6)||``}function Q6(){let e=Z6(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=j6();return n.length>0?n[0].providerId:`anthropic`}function $6(){return G6(Q6())}function e8(){let e=j6(),t=Q6(),n=Y6();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 t8(){let e=JSON.stringify(e8(),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 n8(){let e=j6();await Promise.allSettled(e.map(e=>z6(e.providerId))),localStorage.removeItem(u6),localStorage.removeItem(d6);for(let e of f6)localStorage.removeItem(e)}function r8(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function i8(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${r8(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function a8(e){if(!e)return o8();let t=Q6(),n=K6(t),r=b6(t);try{let i=o6(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=S6(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(T6.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=S6(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:i8(t,e,n)}return o8()}}function o8(){let e=Q6(),t=Y6(),n=K6(e),r=S6(e),i=b6(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=b6(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=o6(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){T6.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?i8(e,o,n):o6(`anthropic`,`claude-sonnet-4-0`)}}function s8(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function c8(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 l8={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 u8(e){return r6(`button`),new Promise(t=>{let n=localStorage.getItem(u6)??``,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(u6)??``)!==n)):s()};e?.startInAddAccount?c():j6().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=j6(),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=b6(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=s8(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(c8(l8.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(c8(l8.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-CFSmb2Xq.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(c8(l8.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 B6(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(c8(l8.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 z6(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`,()=>t8()),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=eb(),_=g.state!==`inactive`,v=Rr(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(u6)??``)!==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=b6(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=v6(),r=new Set(j6().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=b6(e).name,r=b6(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(!y6(t))continue;let n=b6(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 g=document.createElement(`button`);g.className=`dialog__btn`,g.textContent=`Login`,g.style.cssText=`width: 100%; margin-bottom: 8px;`,h.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,h.appendChild(_);let v=()=>{let e=h,t=_,n=g;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 ne(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)})};g.addEventListener(`click`,async()=>{let e=p.value;if(!e)return;let t=b6(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=j6().some(t=>t.providerId===e),r=K6(e);if(t.requiresBaseUrl&&!w.value.trim()&&!r){_.textContent=`Base URL is required.`,_.style.color=`var(--slicc-cone)`,w.focus();return}t.requiresBaseUrl&&w.value.trim()&&L6(e,``,w.value.trim()),_.textContent=`Opening login window...`;try{if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CFSmb2Xq.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:v()})}else if(t.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CFSmb2Xq.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await z6(e)}catch{}T6.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),_.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),l&&c.userName&&(_.textContent=`Logged in as ${c.userName}`,g.textContent=`Re-login`),i.appendChild(h);let y=document.createElement(`div`),b=document.createElement(`div`);b.className=`dialog__desc`,y.appendChild(b);let x=document.createElement(`input`);x.className=`dialog__input`,x.type=`password`,x.autocomplete=`off`,x.spellcheck=!1,l&&(x.value=c.apiKey),y.appendChild(x),i.appendChild(y);let S=document.createElement(`div`),C=document.createElement(`div`);C.className=`dialog__desc`,C.textContent=`Base URL:`,S.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),S.appendChild(w);let T=document.createElement(`div`);T.className=`dialog__desc`,T.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,S.appendChild(T),i.appendChild(S);let ee=document.createElement(`div`);ee.style.display=`none`;let E=document.createElement(`div`);E.className=`dialog__desc`,E.textContent=`Deployment:`,ee.appendChild(E);let D=document.createElement(`input`);D.className=`dialog__input`,D.type=`text`,D.autocomplete=`off`,D.spellcheck=!1,l&&c.deployment&&(D.value=c.deployment),ee.appendChild(D);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 re=document.createElement(`div`);re.style.display=`none`;let ie=document.createElement(`div`);ie.className=`dialog__desc`,ie.textContent=`API Version:`,re.appendChild(ie);let O=document.createElement(`input`);O.className=`dialog__input`,O.type=`text`,O.autocomplete=`off`,O.spellcheck=!1,l&&c.apiVersion&&(O.value=c.apiVersion),re.appendChild(O);let ae=document.createElement(`div`);ae.className=`dialog__desc`,ae.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,re.appendChild(ae),i.appendChild(re);let k=document.createElement(`div`);k.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(k);let oe=document.createElement(`button`);oe.className=`dialog__btn`,oe.textContent=l?`Save`:`Add`;function A(){let e=p.value;if(!e){m.textContent=``,h.style.display=`none`,y.style.display=`none`,S.style.display=`none`,ee.style.display=`none`,re.style.display=`none`,oe.style.display=`none`;return}let t=b6(e);if(m.textContent=t.description,t.isOAuth)h.style.display=``,y.style.display=`none`,S.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(w.placeholder=t.baseUrlPlaceholder||`https://...`,T.textContent=t.baseUrlDescription||``),g.textContent=`Login with ${t.name}`,oe.style.display=`none`;else{h.style.display=`none`,b.textContent=`${t.requiresApiKey?`API Key`:`API Key (optional)`}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,x.placeholder=t.apiKeyPlaceholder||`API key`;let e=t.requiresApiKey||t.optionalApiKey;y.style.display=e?``:`none`,w.placeholder=t.baseUrlPlaceholder||`https://...`,T.textContent=t.baseUrlDescription||``,S.style.display=t.requiresBaseUrl?``:`none`,oe.style.display=``}t.requiresDeployment?(ee.style.display=``,D.placeholder=t.deploymentPlaceholder||`deployment-name`,te.textContent=t.deploymentDescription||``):ee.style.display=`none`,t.requiresApiVersion?(re.style.display=``,!O.value&&t.apiVersionDefault&&(O.value=t.apiVersionDefault),O.placeholder=t.apiVersionDefault||`api-version`,ae.textContent=t.apiVersionDescription||``):re.style.display=`none`}p.addEventListener(`change`,()=>{k.style.display=`none`,A()}),A();function se(){let e=p.value;if(!e)return;let t=b6(e);if(t.requiresApiKey&&x.value.trim().length<5){k.textContent=`API key is required (at least 5 characters).`,k.style.display=``,x.focus();return}if(t.requiresBaseUrl&&!w.value.trim()){k.textContent=`Base URL is required for this provider.`,k.style.display=``,w.focus();return}if(t.requiresDeployment&&!D.value.trim()){k.textContent=`Deployment name is required for this provider.`,k.style.display=``,D.focus();return}L6(e,x.value.trim(),w.value.trim()||void 0,D.value.trim()||void 0,O.value.trim()||void 0),a()}oe.addEventListener(`click`,se);let j=e=>{e.key===`Enter`&&se()};x.addEventListener(`keydown`,j),w.addEventListener(`keydown`,j),D.addEventListener(`keydown`,j),O.addEventListener(`keydown`,j),i.appendChild(oe);let ce=j6().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(u6)??``)!==n)}),i.appendChild(e)}else if(!l&&!ce){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(ce){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=b6(e);t.requiresApiKey?x.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=Lr(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(c6()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else l6(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=Lr(window.localStorage,e);if(!n){f.textContent=J3(e),f.style.display=``,d.focus();return}if(c6()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else l6(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 d8=`slicc:adobe-daily-uuid:`,f8=new Map;function p8(){return new Date().toISOString().slice(0,10)}function m8(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function h8(e){let t=p8(),n=m8(),r=d8+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=f8.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return f8.set(e,{uuid:a,date:t}),a}var g8=d(`quick-llm`);async function _8(e){let t=$6();if(!t)return g8.debug(`No API key for active provider — skipping`),null;let n=Q6(),i=Y6(),a;if(a=e.modelId?x8(n,e.modelId)??x8(n,i):v8(n,i),!a)return g8.debug(`No model available for provider`,{providerId:n}),null;let o={role:`user`,content:e.prompt,timestamp:Date.now()},s={};a.provider===`adobe`&&(s[`X-Session-Id`]=C8());try{let n=(await r(a,{systemPrompt:e.system,messages:[o]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(s).length>0?s:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return g8.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function v8(e,t){let n=S6(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=b8(r.id),a=n.filter(e=>y8(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function y8(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function b8(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function x8(e,t){return S6(e).find(e=>e.id===t)}var S8=`ui-quick-llm`;function C8(){return h8(S8)}var w8=`browser-coding-agent`,T8=1,E8=`sessions`;function D8(){return new Promise((e,t)=>{let n=indexedDB.open(w8,T8);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(E8)||e.createObjectStore(E8,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var O8=class{db=null;async init(){this.db=await D8()}ensureDb(){if(!this.db)throw Error(`SessionStore not initialized. Call init() first.`);return this.db}async save(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readwrite`);i.objectStore(E8).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readonly`).objectStore(E8).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=this.ensureDb();return new Promise((t,n)=>{let r=e.transaction(E8,`readonly`).objectStore(E8).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readwrite`);i.objectStore(E8).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}},k8=[`#000000`,`#cd3131`,`#0dbc79`,`#e5e510`,`#2472c8`,`#bc3fbc`,`#11a8cd`,`#e5e5e5`],A8=[`#666666`,`#f14c4c`,`#23d18b`,`#f5f543`,`#3b8eea`,`#d670d6`,`#29b8db`,`#ffffff`],j8=()=>({fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,strike:!1,inverse:!1}),M8=e=>Math.max(0,Math.min(255,Math.floor(e)||0));function N8(e){if(e<0||e>255)return``;if(e<8)return k8[e];if(e<16)return A8[e-8];if(e<232){let t=e-16,n=[0,95,135,175,215,255];return`rgb(${n[Math.floor(t/36)]},${n[Math.floor(t%36/6)]},${n[t%6]})`}let t=8+(e-232)*10;return`rgb(${t},${t},${t})`}function P8(e,t){let n=e[t+1];if(n===5){let n=e[t+2];return{color:typeof n==`number`?N8(n):null,consumed:3}}return n===2?{color:`rgb(${M8(e[t+2]??0)},${M8(e[t+3]??0)},${M8(e[t+4]??0)})`,consumed:5}:{color:null,consumed:2}}function F8(e,t){let n={...e},r=t.length===0?[0]:t;for(let e=0;e<r.length;e++){let t=r[e];if(t===0)Object.assign(n,j8());else if(t===1)n.bold=!0;else if(t===2)n.dim=!0;else if(t===3)n.italic=!0;else if(t===4)n.underline=!0;else if(t===7)n.inverse=!0;else if(t===9)n.strike=!0;else if(t===22)n.bold=!1,n.dim=!1;else if(t===23)n.italic=!1;else if(t===24)n.underline=!1;else if(t===27)n.inverse=!1;else if(t===29)n.strike=!1;else if(t>=30&&t<=37)n.fg=k8[t-30];else if(t===38){let t=P8(r,e);t.color&&(n.fg=t.color),e+=t.consumed-1}else if(t===39)n.fg=null;else if(t>=40&&t<=47)n.bg=k8[t-40];else if(t===48){let t=P8(r,e);t.color&&(n.bg=t.color),e+=t.consumed-1}else t===49?n.bg=null:t>=90&&t<=97?n.fg=A8[t-90]:t>=100&&t<=107&&(n.bg=A8[t-100])}return n}function I8(e){let t=e.fg,n=e.bg;if(e.inverse){let e=t;t=n??`#e6e6e6`,n=e??`#0d0d0f`}let r=[];t&&r.push(`color:${t}`),n&&r.push(`background-color:${n}`),e.bold&&r.push(`font-weight:600`),e.dim&&r.push(`opacity:.7`),e.italic&&r.push(`font-style:italic`);let i=[];return e.underline&&i.push(`underline`),e.strike&&i.push(`line-through`),i.length&&r.push(`text-decoration:${i.join(` `)}`),r.join(`;`)}var L8=e=>!!(e.fg||e.bg||e.bold||e.dim||e.italic||e.underline||e.strike||e.inverse),R8=(e,t)=>{let n=O3(e);return L8(t)?`<span style="${I8(t)}">${n}</span>`:n},z8=/\x1b\[[?!#>]?[\d;]*[@-~]|\x1b\][\s\S]*?(?:\x07|\x1b\\)/g,B8=/^\x1b\[([\d;]*)m$/;function V8(e){if(!e)return``;let t=``,n=0,r=j8();z8.lastIndex=0;let i;for(;(i=z8.exec(e))!==null;){let a=e.slice(n,i.index);a&&(t+=R8(a,r));let o=B8.exec(i[0]);if(o){let e=o[1]===``?[]:o[1].split(`;`).map(e=>Number(e)||0);r=F8(r,e)}n=i.index+i[0].length}let a=e.slice(n);return a&&(t+=R8(a,r)),t}function H8(e){let t=e;return t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)"([^"]{8,})"/gi,`$1"***"`),t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)'([^']{8,})'/gi,`$1'***'`),t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)([^\s"'`]{8,})/gi,`$1***`),t=t.replace(/(Authorization:\s*Bearer\s+)([^\s"'`]{8,})/gi,`$1***`),t=t.replace(/(?<![A-Za-z0-9+/])(ghp_[A-Za-z0-9]{36}|gh[a-z]_[A-Za-z0-9]{36}|[A-Fa-f0-9]{40,}|[A-Za-z0-9+/]{40,}={0,2})(?![A-Za-z0-9+/=])/g,`***`),t}var U8={icon:i0,title:`tool`,preview:e=>e5(e,80)},W8={read_file:{icon:LF,title:`read`,preview:e=>$8(e,`path`)??``,renderBody:a5},write_file:{icon:EF,title:`write`,preview:e=>$8(e,`path`)??``},edit_file:{icon:CF,title:`edit`,preview:e=>$8(e,`path`)??``,renderBody:m5},bash:{icon:qZ,title:`bash`,preview:e=>{let t=$8(e,`command`)??``;return t?H8(`$ ${t5(t,120)}`):``},renderBody:p5},browser:{icon:WL,title:`browser`,preview:e=>e5(e,80)},javascript:{icon:EM,title:`javascript`,preview:e=>t5(($8(e,`code`)??``).replace(/\s+/g,` `),100)},send_message:{icon:aH,title:`message`,preview:e=>{let t=$8(e,`text`)??``;return t?`"${t5(t,100)}"`:``}},feed_scoop:{icon:Z$,title:`feed`,preview:e=>$8(e,`scoop_name`)??``},scoop_scoop:{icon:sz,title:`scoop`,preview:e=>$8(e,`name`)??``},drop_scoop:{icon:GQ,title:`drop`,preview:e=>$8(e,`scoop_name`)??``},scoop_mute:{icon:y1,title:`mute`,preview:e=>n5(e)},scoop_unmute:{icon:_1,title:`unmute`,preview:e=>n5(e)},scoop_wait:{icon:ez,title:`wait`,preview:e=>{let t=n5(e),n=$8(e,`timeout_ms`);return n===void 0||n===``?t:t?`${t} (${n}ms)`:`${n}ms`}},list_scoops:{icon:GB,title:`list scoops`,preview:()=>``},list_tasks:{icon:EB,title:`list tasks`,preview:()=>``},register_scoop:{icon:V$,title:`register`,preview:e=>$8(e,`name`)??``},schedule_task:{icon:tM,title:`schedule`,preview:e=>$8(e,`cron`)??$8(e,`name`)??``},update_global_memory:{icon:hO,title:`memory`,preview:e=>t5(($8(e,`content`)??``).split(`
|
|
1111
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+u3(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},E3=new T3;function D3(e,t){return E3.parse(e,t)}D3.options=D3.setOptions=function(e){return E3.setOptions(e),D3.defaults=E3.defaults,Q2(D3.defaults),D3},D3.getDefaults=X2,D3.defaults=Z2,D3.use=function(...e){return E3.use(...e),D3.defaults=E3.defaults,Q2(D3.defaults),D3},D3.walkTokens=function(e,t){return E3.walkTokens(e,t)},D3.parseInline=E3.parseInline,D3.Parser=C3,D3.parser=C3.parse,D3.Renderer=x3,D3.TextRenderer=S3,D3.Lexer=b3,D3.lexer=b3.lex,D3.Tokenizer=y3,D3.Hooks=w3,D3.parse=D3,D3.options,D3.setOptions,D3.use,D3.walkTokens,D3.parseInline,C3.parse,b3.lex;function O3(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function k3(e,t){let n=O3(e);return t===`shtml`||([`js`,`javascript`,`ts`,`typescript`,`jsx`,`tsx`].includes(t)?n=j3(n):t===`json`?n=M3(n):[`bash`,`sh`,`shell`,`zsh`].includes(t)&&(n=N3(n))),n}function A3(e){let t=[];return{html:e.replace(/<span class="tok-(?:comment|string)">[\s\S]*?<\/span>/g,e=>{let n=String.fromCharCode(57344+t.length);return t.push(e),n}),restore:e=>e.replace(/[\ue000-\uf8ff]/g,e=>t[e.charCodeAt(0)-57344]??e)}}function j3(e){e=e.replace(/(\/\/[^\n]*)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/(\/\*[\s\S]*?\*\/)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/("[^&]*?"|'[^&]*?'|`[^`]*?`)/g,`<span class="tok-string">$1</span>`);let t=A3(e);return e=t.html,e=e.replace(RegExp(`\\b(${`const.let.var.function.return.if.else.for.while.class.extends.import.export.from.default.new.this.async.await.try.catch.throw.typeof.instanceof.interface.type.enum.implements.abstract.public.private.protected.readonly.static.void.null.undefined.true.false`.split(`.`).join(`|`)})\\b`,`g`),`<span class="tok-keyword">$1</span>`),e=e.replace(/\b(\d+\.?\d*)\b/g,`<span class="tok-number">$1</span>`),e=e.replace(/\b([a-zA-Z_$][\w$]*)\s*(?=\()/g,`<span class="tok-fn">$1</span>`),t.restore(e)}function M3(e){return e=e.replace(/("[^&]*?")\s*:/g,`<span class="tok-keyword">$1</span>:`),e=e.replace(/:\s*("[^&]*?")/g,`: <span class="tok-string">$1</span>`),e=e.replace(/\b(\d+\.?\d*)\b/g,`<span class="tok-number">$1</span>`),e=e.replace(/\b(true|false|null)\b/g,`<span class="tok-keyword">$1</span>`),e}function N3(e){return e=e.replace(/(#[^\n]*)/g,`<span class="tok-comment">$1</span>`),e=e.replace(/("[^&]*?"|'[^&]*?')/g,`<span class="tok-string">$1</span>`),e=e.replace(RegExp(`\\b(${[`if`,`then`,`else`,`fi`,`for`,`do`,`done`,`while`,`case`,`esac`,`echo`,`export`,`cd`,`ls`,`mkdir`,`rm`,`cp`,`mv`,`cat`,`grep`,`npm`,`node`,`git`].join(`|`)})\\b`,`g`),`<span class="tok-keyword">$1</span>`),e}var P3=new T3({gfm:!0,breaks:!0,async:!1,renderer:{code({text:e,lang:t}){let n=t??``,r=k3(e,n);return`<pre><code${n?` class="language-${O3(n)}"`:``}>${r}</code></pre>\n`},link({href:e,title:t,tokens:n}){let r=e??``;if(r.startsWith(`javascript:`))return this.parser.parseInline(n);let i=t?` title="${O3(t)}"`:``,a=this.parser.parseInline(n);return`<a href="${O3(r)}"${i} target="_blank" rel="noopener noreferrer">${a}</a>`},image({href:e,title:t,text:n}){let r=e??``,i=n?` alt="${O3(n)}"`:``,a=t?` title="${O3(t)}"`:``;return`<img src="${O3(r)}"${i}${a}>`}}}),F3={ALLOWED_TAGS:`a.b.i.em.strong.p.br.code.pre.ul.ol.li.h1.h2.h3.h4.h5.h6.table.thead.tbody.tr.th.td.del.blockquote.hr.img.span.div.details.summary.input`.split(`.`),ALLOWED_ATTR:[`href`,`src`,`alt`,`title`,`class`,`target`,`rel`,`type`,`checked`,`disabled`],ALLOW_DATA_ATTR:!1};function I3(e){return Y2(e,F3)}function L3(e){return e.replace(/<a\s([^>]*?)>/g,(e,t)=>{let n=t;return/(^|\s)target\s*=/i.test(n)?n=n.replace(/(^|\s)target\s*=\s*(['"])[^'"]*\2/gi,`$1target="_blank"`):n+=` target="_blank"`,/(^|\s)rel\s*=/i.test(n)?n=n.replace(/(^|\s)rel\s*=\s*(['"])[^'"]*\2/gi,`$1rel="noopener noreferrer"`):n+=` rel="noopener noreferrer"`,`<a ${n}>`})}var R3=/<p><strong>Error:<\/strong>\s*([\s\S]*?)<\/p>/g,z3=/<pre><code class="language-shtml">[\s\S]*?<\/code><\/pre>/g,B3=`<div class="msg__dip-pending" role="status" aria-live="polite" aria-label="Pouring a dip"><span class="msg__dip-pending-label">Pouring a dip…</span><span class="msg__dip-pending-status" aria-hidden="true"></span></div>`;function V3(e){return L3(I3(P3.parse(e)))}function H3(e){return e.replace(R3,(e,t)=>`<div class="msg__error" role="alert"><div class="msg__error-label">Error</div><div class="msg__error-body">${t}</div></div>`)}function U3(e){return e.replace(z3,B3)}function W3(e){return V3(e)}function G3(e,t=!1){let n=H3(V3(e));return t&&(n=U3(n)),n}function K3(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??q3(t.state)??`Mirroring another browser.`}}function q3(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 J3(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 Y3=null,X3=!1;function Z3(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function Q3(){if(!X3&&!(typeof localStorage<`u`&&localStorage.getItem(`telemetry-disabled`)===`true`))try{let e=Z3();typeof window<`u`&&(window.RUM_GENERATION=`slicc-${e}`),e===`extension`?(Y3=(await o(()=>import(`./rum-DW84CvBs.js`),[])).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{n6(`js`,i6(e.message??``))}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;n6(`js`,i6(t instanceof Error?t.message:String(t)))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),Y3=(await o(()=>import(`./src-C9oNvq2b.js`),[])).sampleRUM),X3=!0,Y3&&Y3(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}function $3(e,t){Y3?.(`formsubmit`,{source:e,target:t})}function e6(e){Y3?.(`viewblock`,{source:e})}function t6(e){Y3?.(`viewmedia`,{source:e})}function n6(e,t){Y3?.(`error`,{source:e,target:t})}function r6(e){Y3?.(`signup`,{source:e})}function i6(e){return(e??``).slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}var a6=e({addAccount:()=>L6,applyProviderDefaults:()=>E6,clearAllSettings:()=>n8,describeInvalidJoinUrl:()=>J3,downloadProviders:()=>t8,exportProviders:()=>e8,getAccounts:()=>j6,getAllAvailableModels:()=>A6,getAllExtraOAuthDomains:()=>P6,getApiKey:()=>$6,getApiKeyForProvider:()=>G6,getApiVersionForProvider:()=>J6,getAvailableProviders:()=>v6,getBaseUrlForProvider:()=>K6,getDeploymentForProvider:()=>q6,getExtraOAuthDomains:()=>M6,getOAuthAccountInfo:()=>C6,getProviderConfig:()=>b6,getProviderModels:()=>S6,getSelectedModelId:()=>Y6,getSelectedProvider:()=>Q6,isModelHiddenFromPicker:()=>O6,logoutOAuthAccount:()=>B6,maskOAuthTokenWithRetry:()=>V6,migrateLegacyAuthOnlySelection:()=>_6,persistOAuthMaskViaServiceWorker:()=>H6,providerOffersLlmModels:()=>y6,removeAccount:()=>z6,resolveCurrentModel:()=>o8,resolveModelById:()=>a8,saveOAuthAccount:()=>U6,setExtraOAuthDomains:()=>N6,setSelectedModelId:()=>X6,showProviderSettings:()=>u8}),o6=l,s6=u;function c6(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function l6(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){T6.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 u6=`slicc_accounts`,d6=`selected-model`,f6=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],p6=new Set([`github`]);function m6(e){let t;try{t=s()}catch{return!1}return t.includes(e)&&!nr(e)}var h6=!1;function g6(){if(!h6){h6=!0;for(let e of f6)try{localStorage.removeItem(e)}catch{}_6()}}function _6(){try{let e=localStorage.getItem(d6);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(p6.has(n)||m6(n))&&localStorage.removeItem(d6)}}}catch{}try{let e=localStorage.getItem(u6);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`&&m6(e.providerId)));n.length!==t.length&&localStorage.setItem(u6,JSON.stringify(n))}catch{}}function v6(){let e=s().filter(nr),t=lr();return[...new Set([...e,...t])].filter(e=>!cr(e)?.hidden)}function y6(e){try{if(S6(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=cr(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function b6(e){return cr(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function x6(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 S6(e){try{if(e===`bedrock-camp`){let e=a(K6(`bedrock-camp`));return s6(`amazon-bedrock`).filter(t=>i(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=b6(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return T6.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 s6(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=i8(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&x6(o,s),x6(o,n),o})}if(t.isOAuth){let n=s6(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&x6(i,a),i})}return s6(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return T6.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function C6(e){let t=j6().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 w6=Object.assign({})[`/packages/webapp/providers.json`]??[],T6=d(`provider-settings`);function E6(e=w6){if(e.length===0||j6().length>0)return;let t=new Set(v6());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){T6.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}L6(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(d6)&&localStorage.setItem(d6,`${n.providerId}:${n.model}`)}var D6=[/haiku/i];function O6(e){return D6.some(t=>t.test(e))}function k6(e){return e.filter(e=>!O6(e.id))}function A6(){let e=j6();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=b6(n.providerId);if(e.hidden||m6(n.providerId))continue;let r=k6(S6(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 j6(){g6();let e=localStorage.getItem(u6);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 M6(e){return hn(localStorage)[e]??[]}function N6(e,t){let n=hn(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,nee(localStorage,n)}function P6(){return hn(localStorage)}function F6(e){localStorage.setItem(u6,JSON.stringify(e))}async function I6(e){if(Qn()){F6(e);return}let t=Zn();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(u6,r)}catch(e){T6.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function L6(e,t,n,r,i){let a=j6().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),F6(a)}async function R6(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&&T6.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&T6.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&&T6.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){T6.error(`OAuth replica removal failed`,{providerId:e,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function z6(e){let t=j6().find(t=>t.providerId===e),n=b6(e);t&&n?.isOAuth&&await B6(e),await R6(e),await I6(j6().filter(t=>t.providerId!==e));let r=localStorage.getItem(d6)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(d6)}async function B6(e){let t=j6().find(t=>t.providerId===e);if(!t)return;let n=b6(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){T6.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-CT8xGVIF.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([16,1]));await t(r).catch(t=>{T6.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await I6(j6().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await R6(e)}}async function V6(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 H6(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await V6(()=>t.sendMaskRequest(r),n);if(!i){T6.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 U6(e){let t=j6().find(t=>t.providerId===e.providerId),n=j6().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 I6(n);let r=b6(e.providerId)?.oauthTokenDomains??[],i=M6(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 H6({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&&T6.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&T6.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:j6,saveAccounts:I6});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=j6(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await I6(r))}else T6.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){T6.error(`OAuth replica sync failed`,{providerId:e.providerId,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var W6=`local`;function G6(e){let t=j6().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(b6(e).optionalApiKey?W6:null):null}function K6(e){return j6().find(t=>t.providerId===e)?.baseUrl??null}function q6(e){return j6().find(t=>t.providerId===e)?.deployment??null}function J6(e){return j6().find(t=>t.providerId===e)?.apiVersion??null}function Y6(){let e=localStorage.getItem(d6)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function X6(e){if(e.includes(`:`))localStorage.setItem(d6,e);else{let t=Q6();localStorage.setItem(d6,`${t}:${e}`)}}function Z6(){return localStorage.getItem(d6)||``}function Q6(){let e=Z6(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=j6();return n.length>0?n[0].providerId:`anthropic`}function $6(){return G6(Q6())}function e8(){let e=j6(),t=Q6(),n=Y6();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 t8(){let e=JSON.stringify(e8(),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 n8(){let e=j6();await Promise.allSettled(e.map(e=>z6(e.providerId))),localStorage.removeItem(u6),localStorage.removeItem(d6);for(let e of f6)localStorage.removeItem(e)}function r8(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function i8(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${r8(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function a8(e){if(!e)return o8();let t=Q6(),n=K6(t),r=b6(t);try{let i=o6(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=S6(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(T6.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=S6(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:i8(t,e,n)}return o8()}}function o8(){let e=Q6(),t=Y6(),n=K6(e),r=S6(e),i=b6(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=b6(e),i=t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e,a=o6(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){T6.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?i8(e,o,n):o6(`anthropic`,`claude-sonnet-4-0`)}}function s8(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function c8(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 l8={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 u8(e){return r6(`button`),new Promise(t=>{let n=localStorage.getItem(u6)??``,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(u6)??``)!==n)):s()};e?.startInAddAccount?c():j6().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=j6(),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=b6(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=s8(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(c8(l8.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(c8(l8.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-CT8xGVIF.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(c8(l8.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 B6(t.providerId),s()})),d.appendChild(r)}let p=document.createElement(`button`);p.style.cssText=l,p.setAttribute(`aria-label`,`Remove account`),p.appendChild(c8(l8.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 z6(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`,()=>t8()),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=eb(),_=g.state!==`inactive`,v=Rr(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(u6)??``)!==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=b6(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=v6(),r=new Set(j6().map(e=>e.providerId)),i=[...n].sort((e,t)=>{let n=b6(e).name,r=b6(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(!y6(t))continue;let n=b6(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 g=document.createElement(`button`);g.className=`dialog__btn`,g.textContent=`Login`,g.style.cssText=`width: 100%; margin-bottom: 8px;`,h.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,h.appendChild(_);let v=()=>{let e=h,t=_,n=g;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 ne(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)})};g.addEventListener(`click`,async()=>{let e=p.value;if(!e)return;let t=b6(e);if(!t.onOAuthLogin&&!t.onOAuthLoginIntercepted)return;let n=j6().some(t=>t.providerId===e),r=K6(e);if(t.requiresBaseUrl&&!w.value.trim()&&!r){_.textContent=`Base URL is required.`,_.style.color=`var(--slicc-cone)`,w.focus();return}t.requiresBaseUrl&&w.value.trim()&&L6(e,``,w.value.trim()),_.textContent=`Opening login window...`;try{if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CT8xGVIF.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:v()})}else if(t.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CT8xGVIF.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),n=e();await t.onOAuthLogin(n,a)}}catch(t){if(!n)try{await z6(e)}catch{}T6.error(`OAuth login failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),_.textContent=`Login failed: ${t instanceof Error?t.message:String(t)}`}}),l&&c.userName&&(_.textContent=`Logged in as ${c.userName}`,g.textContent=`Re-login`),i.appendChild(h);let y=document.createElement(`div`),b=document.createElement(`div`);b.className=`dialog__desc`,y.appendChild(b);let x=document.createElement(`input`);x.className=`dialog__input`,x.type=`password`,x.autocomplete=`off`,x.spellcheck=!1,l&&(x.value=c.apiKey),y.appendChild(x),i.appendChild(y);let S=document.createElement(`div`),C=document.createElement(`div`);C.className=`dialog__desc`,C.textContent=`Base URL:`,S.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),S.appendChild(w);let T=document.createElement(`div`);T.className=`dialog__desc`,T.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,S.appendChild(T),i.appendChild(S);let ee=document.createElement(`div`);ee.style.display=`none`;let E=document.createElement(`div`);E.className=`dialog__desc`,E.textContent=`Deployment:`,ee.appendChild(E);let D=document.createElement(`input`);D.className=`dialog__input`,D.type=`text`,D.autocomplete=`off`,D.spellcheck=!1,l&&c.deployment&&(D.value=c.deployment),ee.appendChild(D);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 re=document.createElement(`div`);re.style.display=`none`;let ie=document.createElement(`div`);ie.className=`dialog__desc`,ie.textContent=`API Version:`,re.appendChild(ie);let O=document.createElement(`input`);O.className=`dialog__input`,O.type=`text`,O.autocomplete=`off`,O.spellcheck=!1,l&&c.apiVersion&&(O.value=c.apiVersion),re.appendChild(O);let ae=document.createElement(`div`);ae.className=`dialog__desc`,ae.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,re.appendChild(ae),i.appendChild(re);let k=document.createElement(`div`);k.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,i.appendChild(k);let oe=document.createElement(`button`);oe.className=`dialog__btn`,oe.textContent=l?`Save`:`Add`;function A(){let e=p.value;if(!e){m.textContent=``,h.style.display=`none`,y.style.display=`none`,S.style.display=`none`,ee.style.display=`none`,re.style.display=`none`,oe.style.display=`none`;return}let t=b6(e);if(m.textContent=t.description,t.isOAuth)h.style.display=``,y.style.display=`none`,S.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(w.placeholder=t.baseUrlPlaceholder||`https://...`,T.textContent=t.baseUrlDescription||``),g.textContent=`Login with ${t.name}`,oe.style.display=`none`;else{h.style.display=`none`,b.textContent=`${t.requiresApiKey?`API Key`:`API Key (optional)`}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,x.placeholder=t.apiKeyPlaceholder||`API key`;let e=t.requiresApiKey||t.optionalApiKey;y.style.display=e?``:`none`,w.placeholder=t.baseUrlPlaceholder||`https://...`,T.textContent=t.baseUrlDescription||``,S.style.display=t.requiresBaseUrl?``:`none`,oe.style.display=``}t.requiresDeployment?(ee.style.display=``,D.placeholder=t.deploymentPlaceholder||`deployment-name`,te.textContent=t.deploymentDescription||``):ee.style.display=`none`,t.requiresApiVersion?(re.style.display=``,!O.value&&t.apiVersionDefault&&(O.value=t.apiVersionDefault),O.placeholder=t.apiVersionDefault||`api-version`,ae.textContent=t.apiVersionDescription||``):re.style.display=`none`}p.addEventListener(`change`,()=>{k.style.display=`none`,A()}),A();function se(){let e=p.value;if(!e)return;let t=b6(e);if(t.requiresApiKey&&x.value.trim().length<5){k.textContent=`API key is required (at least 5 characters).`,k.style.display=``,x.focus();return}if(t.requiresBaseUrl&&!w.value.trim()){k.textContent=`Base URL is required for this provider.`,k.style.display=``,w.focus();return}if(t.requiresDeployment&&!D.value.trim()){k.textContent=`Deployment name is required for this provider.`,k.style.display=``,D.focus();return}L6(e,x.value.trim(),w.value.trim()||void 0,D.value.trim()||void 0,O.value.trim()||void 0),a()}oe.addEventListener(`click`,se);let j=e=>{e.key===`Enter`&&se()};x.addEventListener(`keydown`,j),w.addEventListener(`keydown`,j),D.addEventListener(`keydown`,j),O.addEventListener(`keydown`,j),i.appendChild(oe);let ce=j6().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(u6)??``)!==n)}),i.appendChild(e)}else if(!l&&!ce){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(ce){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=b6(e);t.requiresApiKey?x.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=Lr(window.localStorage,e);if(!n){s.textContent=`Invalid sync URL.`,s.style.display=``,s.style.color=`var(--slicc-cone)`;return}if(c6()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else l6(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=Lr(window.localStorage,e);if(!n){f.textContent=J3(e),f.style.display=``,d.focus();return}if(c6()){let e={type:`refresh-tray-runtime`,joinUrl:n.joinUrl,workerBaseUrl:n.workerBaseUrl};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else l6(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 d8=`slicc:adobe-daily-uuid:`,f8=new Map;function p8(){return new Date().toISOString().slice(0,10)}function m8(){try{let e=globalThis.localStorage;return!e||typeof e.getItem!=`function`||typeof e.setItem!=`function`?null:e}catch{return null}}function h8(e){let t=p8(),n=m8(),r=d8+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=f8.get(e);if(i&&i.date===t)return i.uuid;let a=crypto.randomUUID();return f8.set(e,{uuid:a,date:t}),a}var g8=d(`quick-llm`);async function _8(e){let t=$6();if(!t)return g8.debug(`No API key for active provider — skipping`),null;let n=Q6(),i=Y6(),a;if(a=e.modelId?x8(n,e.modelId)??x8(n,i):v8(n,i),!a)return g8.debug(`No model available for provider`,{providerId:n}),null;let o={role:`user`,content:e.prompt,timestamp:Date.now()},s={};a.provider===`adobe`&&(s[`X-Session-Id`]=C8());try{let n=(await r(a,{systemPrompt:e.system,messages:[o]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(s).length>0?s:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return g8.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function v8(e,t){let n=S6(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=b8(r.id),a=n.filter(e=>y8(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function y8(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function b8(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function x8(e,t){return S6(e).find(e=>e.id===t)}var S8=`ui-quick-llm`;function C8(){return h8(S8)}var w8=`browser-coding-agent`,T8=1,E8=`sessions`;function D8(){return new Promise((e,t)=>{let n=indexedDB.open(w8,T8);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(E8)||e.createObjectStore(E8,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var O8=class{db=null;async init(){this.db=await D8()}ensureDb(){if(!this.db)throw Error(`SessionStore not initialized. Call init() first.`);return this.db}async save(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readwrite`);i.objectStore(E8).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readonly`).objectStore(E8).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=this.ensureDb();return new Promise((t,n)=>{let r=e.transaction(E8,`readonly`).objectStore(E8).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=this.ensureDb();return new Promise((n,r)=>{let i=t.transaction(E8,`readwrite`);i.objectStore(E8).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}},k8=[`#000000`,`#cd3131`,`#0dbc79`,`#e5e510`,`#2472c8`,`#bc3fbc`,`#11a8cd`,`#e5e5e5`],A8=[`#666666`,`#f14c4c`,`#23d18b`,`#f5f543`,`#3b8eea`,`#d670d6`,`#29b8db`,`#ffffff`],j8=()=>({fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,strike:!1,inverse:!1}),M8=e=>Math.max(0,Math.min(255,Math.floor(e)||0));function N8(e){if(e<0||e>255)return``;if(e<8)return k8[e];if(e<16)return A8[e-8];if(e<232){let t=e-16,n=[0,95,135,175,215,255];return`rgb(${n[Math.floor(t/36)]},${n[Math.floor(t%36/6)]},${n[t%6]})`}let t=8+(e-232)*10;return`rgb(${t},${t},${t})`}function P8(e,t){let n=e[t+1];if(n===5){let n=e[t+2];return{color:typeof n==`number`?N8(n):null,consumed:3}}return n===2?{color:`rgb(${M8(e[t+2]??0)},${M8(e[t+3]??0)},${M8(e[t+4]??0)})`,consumed:5}:{color:null,consumed:2}}function F8(e,t){let n={...e},r=t.length===0?[0]:t;for(let e=0;e<r.length;e++){let t=r[e];if(t===0)Object.assign(n,j8());else if(t===1)n.bold=!0;else if(t===2)n.dim=!0;else if(t===3)n.italic=!0;else if(t===4)n.underline=!0;else if(t===7)n.inverse=!0;else if(t===9)n.strike=!0;else if(t===22)n.bold=!1,n.dim=!1;else if(t===23)n.italic=!1;else if(t===24)n.underline=!1;else if(t===27)n.inverse=!1;else if(t===29)n.strike=!1;else if(t>=30&&t<=37)n.fg=k8[t-30];else if(t===38){let t=P8(r,e);t.color&&(n.fg=t.color),e+=t.consumed-1}else if(t===39)n.fg=null;else if(t>=40&&t<=47)n.bg=k8[t-40];else if(t===48){let t=P8(r,e);t.color&&(n.bg=t.color),e+=t.consumed-1}else t===49?n.bg=null:t>=90&&t<=97?n.fg=A8[t-90]:t>=100&&t<=107&&(n.bg=A8[t-100])}return n}function I8(e){let t=e.fg,n=e.bg;if(e.inverse){let e=t;t=n??`#e6e6e6`,n=e??`#0d0d0f`}let r=[];t&&r.push(`color:${t}`),n&&r.push(`background-color:${n}`),e.bold&&r.push(`font-weight:600`),e.dim&&r.push(`opacity:.7`),e.italic&&r.push(`font-style:italic`);let i=[];return e.underline&&i.push(`underline`),e.strike&&i.push(`line-through`),i.length&&r.push(`text-decoration:${i.join(` `)}`),r.join(`;`)}var L8=e=>!!(e.fg||e.bg||e.bold||e.dim||e.italic||e.underline||e.strike||e.inverse),R8=(e,t)=>{let n=O3(e);return L8(t)?`<span style="${I8(t)}">${n}</span>`:n},z8=/\x1b\[[?!#>]?[\d;]*[@-~]|\x1b\][\s\S]*?(?:\x07|\x1b\\)/g,B8=/^\x1b\[([\d;]*)m$/;function V8(e){if(!e)return``;let t=``,n=0,r=j8();z8.lastIndex=0;let i;for(;(i=z8.exec(e))!==null;){let a=e.slice(n,i.index);a&&(t+=R8(a,r));let o=B8.exec(i[0]);if(o){let e=o[1]===``?[]:o[1].split(`;`).map(e=>Number(e)||0);r=F8(r,e)}n=i.index+i[0].length}let a=e.slice(n);return a&&(t+=R8(a,r)),t}function H8(e){let t=e;return t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)"([^"]{8,})"/gi,`$1"***"`),t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)'([^']{8,})'/gi,`$1'***'`),t=t.replace(/([A-Z_]*(?:TOKEN|KEY|SECRET|PASSWORD|AUTH|BEARER|API_KEY|ACCESS_TOKEN)[=:]\s*)([^\s"'`]{8,})/gi,`$1***`),t=t.replace(/(Authorization:\s*Bearer\s+)([^\s"'`]{8,})/gi,`$1***`),t=t.replace(/(?<![A-Za-z0-9+/])(ghp_[A-Za-z0-9]{36}|gh[a-z]_[A-Za-z0-9]{36}|[A-Fa-f0-9]{40,}|[A-Za-z0-9+/]{40,}={0,2})(?![A-Za-z0-9+/=])/g,`***`),t}var U8={icon:i0,title:`tool`,preview:e=>e5(e,80)},W8={read_file:{icon:LF,title:`read`,preview:e=>$8(e,`path`)??``,renderBody:a5},write_file:{icon:EF,title:`write`,preview:e=>$8(e,`path`)??``},edit_file:{icon:CF,title:`edit`,preview:e=>$8(e,`path`)??``,renderBody:m5},bash:{icon:qZ,title:`bash`,preview:e=>{let t=$8(e,`command`)??``;return t?H8(`$ ${t5(t,120)}`):``},renderBody:p5},browser:{icon:WL,title:`browser`,preview:e=>e5(e,80)},javascript:{icon:EM,title:`javascript`,preview:e=>t5(($8(e,`code`)??``).replace(/\s+/g,` `),100)},send_message:{icon:aH,title:`message`,preview:e=>{let t=$8(e,`text`)??``;return t?`"${t5(t,100)}"`:``}},feed_scoop:{icon:Z$,title:`feed`,preview:e=>$8(e,`scoop_name`)??``},scoop_scoop:{icon:sz,title:`scoop`,preview:e=>$8(e,`name`)??``},drop_scoop:{icon:GQ,title:`drop`,preview:e=>$8(e,`scoop_name`)??``},scoop_mute:{icon:y1,title:`mute`,preview:e=>n5(e)},scoop_unmute:{icon:_1,title:`unmute`,preview:e=>n5(e)},scoop_wait:{icon:ez,title:`wait`,preview:e=>{let t=n5(e),n=$8(e,`timeout_ms`);return n===void 0||n===``?t:t?`${t} (${n}ms)`:`${n}ms`}},list_scoops:{icon:GB,title:`list scoops`,preview:()=>``},list_tasks:{icon:EB,title:`list tasks`,preview:()=>``},register_scoop:{icon:V$,title:`register`,preview:e=>$8(e,`name`)??``},schedule_task:{icon:tM,title:`schedule`,preview:e=>$8(e,`cron`)??$8(e,`name`)??``},update_global_memory:{icon:hO,title:`memory`,preview:e=>t5(($8(e,`content`)??``).split(`
|
|
1112
1112
|
`).find(e=>e.trim().length>0)??``,100)},delegate_to_scoop:{icon:Jq,title:`delegate`,preview:e=>$8(e,`scoop_name`)??``}};function G8(e){return W8[e]??{...U8,title:e}}function K8(e){return e.result===void 0?`running`:e.isError?`error`:`success`}function q8(e){return r5(G8(e).icon)}function J8(){return r5(AM)}function Y8(e){return e.length===0?[]:e.length<3?e.map(e=>({kind:`single`,toolCall:e})):[{kind:`cluster`,toolCalls:[...e]}]}function X8(e){return Z8(e.map(e=>G8(e.name).title))}function Z8(e){return t5(e.join(`, `),120)}function Q8(e){let t=G8(e.name);if(t.renderBody)try{return t.renderBody(e)}catch{}return i5(e)}function $8(e,t){if(!e||typeof e!=`object`)return;let n=e[t];if(typeof n==`string`)return n;if(typeof n==`number`||typeof n==`boolean`)return String(n)}function e5(e,t){if(e==null)return``;if(typeof e==`string`)return t5(e,t);try{return t5(JSON.stringify(e),t)}catch{return t5(String(e),t)}}function t5(e,t){return e.length<=t?e:e.slice(0,t-1).trimEnd()+`…`}function n5(e){if(!e||typeof e!=`object`)return``;let t=e.scoop_names;return Array.isArray(t)?t5(t.filter(e=>typeof e==`string`).join(`, `),100):``}function r5(e){let t=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);t.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`),t.setAttribute(`width`,`14`),t.setAttribute(`height`,`14`),t.setAttribute(`viewBox`,`0 0 24 24`),t.setAttribute(`fill`,`none`),t.setAttribute(`stroke`,`currentColor`),t.setAttribute(`stroke-width`,`2`),t.setAttribute(`stroke-linecap`,`round`),t.setAttribute(`stroke-linejoin`,`round`);for(let[n,r]of e){let e=document.createElementNS(`http://www.w3.org/2000/svg`,n);for(let[t,n]of Object.entries(r))e.setAttribute(t,String(n));t.appendChild(e)}return t}function i5(e){let t=document.createElement(`div`);return t.className=`tool-call__body`,e.input!==void 0&&t.appendChild(s5(e.input)),e.result!==void 0&&t.appendChild(o5(e)),t}function a5(e){let t=document.createElement(`div`);return t.className=`tool-call__body`,e.result!==void 0&&t.appendChild(o5(e)),t}function o5(e){let t=document.createElement(`pre`);return t.className=`tool-call__result${e.isError?` tool-call__result--error`:``}`,t.textContent=e.result??``,t}function s5(e){let t=document.createElement(`pre`);return t.className=`tool-call__yaml`,t.innerHTML=c5(e,0),t}function c5(e,t){let n=` `.repeat(t);if(e==null)return`${n}<span class="tool-call__yaml-null">~</span>`;if(typeof e==`string`)return f5(e,t);if(typeof e==`number`||typeof e==`boolean`)return`${n}<span class="tool-call__yaml-scalar">${O3(String(e))}</span>`;if(Array.isArray(e))return e.length===0?`${n}<span class="tool-call__yaml-scalar">[]</span>`:e.map(e=>u5(e)?`${n}- ${d5(e)}`:`${n}- ${c5(e,t+1).replace(/^\s+/,``)}`).join(`
|
|
1113
1113
|
`);if(typeof e==`object`){let r=Object.entries(e);return r.length===0?`${n}<span class="tool-call__yaml-scalar">{}</span>`:r.map(([e,n])=>l5(e,n,t)).join(`
|
|
1114
1114
|
`)}return`${n}${O3(String(e))}`}function l5(e,t,n){let r=` `.repeat(n),i=`<span class="tool-call__yaml-key">${O3(e)}</span>`;return u5(t)?`${r}${i}: ${d5(t)}`:Array.isArray(t)&&t.length===0?`${r}${i}: <span class="tool-call__yaml-scalar">[]</span>`:typeof t==`object`&&t&&Object.keys(t).length===0?`${r}${i}: <span class="tool-call__yaml-scalar">{}</span>`:`${r}${i}:\n${c5(t,n+1)}`}function u5(e){return typeof e!=`object`||!e}function d5(e){if(e==null)return`<span class="tool-call__yaml-null">~</span>`;if(typeof e==`string`){if(e.includes(`
|
|
@@ -1777,12 +1777,12 @@ ${n}
|
|
|
1777
1777
|
}
|
|
1778
1778
|
|
|
1779
1779
|
`,this.container.appendChild(i)}};function _7(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 cre=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
|
|
1780
|
-
`,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 lre(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 ure=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()}},dre=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:N5}};function fre(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=v7(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=v7(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 v7(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 pre(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 ne(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 y7=d(`ui.layout`),b7=`<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>`,x7=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;avatarEl;logoSvg=null;logoImg=null;logoScoopCount=-1;headerHamburger=null;panels;registry=new ure;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 J5(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)}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=A6(),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}=b6(t.providerId),n=(e?t.models.find(t=>t.id.toLowerCase().includes(e.toLowerCase())):void 0)??t.models[0];X6(`${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 Nne(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 lre(e)}appendTrayMenu(e){let t=K3(ii(),eb()),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(()=>ab),void 0),o(()=>Promise.resolve().then(()=>kr),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);y7.error(`enable-tray failed`,{error:t}),S7(`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 ne(t.joinUrl);pre({joinUrl:t.joinUrl,copied:n,onReset:fb()})}),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(()=>ab);return{leaveTray:e}},void 0);await e()}catch(e){let t=e instanceof Error?e.message:String(e);y7.error(`leave-tray failed`,{error:t}),S7(`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=j6().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=j6(),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=b6(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()=>{b6(r.providerId)?.isOAuth?await B6(r.providerId):await z6(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 n8(),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(),$6()||await n8(),await u8()&&(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
|
|
1780
|
+
`,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 lre(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 ure=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()}},dre=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:N5}};function fre(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=v7(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=v7(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 v7(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 pre(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 ne(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 y7=d(`ui.layout`),b7=`<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>`,x7=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 ure;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 J5(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=A6(),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}=b6(t.providerId),n=(e?t.models.find(t=>t.id.toLowerCase().includes(e.toLowerCase())):void 0)??t.models[0];X6(`${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 Nne(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 lre(e)}appendTrayMenu(e){let t=K3(ii(),eb()),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(()=>ab),void 0),o(()=>Promise.resolve().then(()=>kr),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);y7.error(`enable-tray failed`,{error:t}),S7(`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 ne(t.joinUrl);pre({joinUrl:t.joinUrl,copied:n,onReset:fb()})}),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(()=>ab);return{leaveTray:e}},void 0);await e()}catch(e){let t=e instanceof Error?e.message:String(e);y7.error(`leave-tray failed`,{error:t}),S7(`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=j6().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=j6(),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=b6(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()=>{b6(r.providerId)?.isOAuth?await B6(r.providerId):await z6(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 n8(),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(),$6()||await n8(),await u8()&&(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
|
|
1781
1781
|
Double-click — fastest reset, memory extracts in background
|
|
1782
1782
|
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 dre(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 bne(a),terminal:new cre(this.terminalContainer,{onClearTerminal:()=>{this.panels.terminal.clearTerminal(),this.openTerminal()}}),fileBrowser:new Dne(o,{onRunCommand:async e=>{await this.runFileBrowserCommand(e),this.openTerminal()}}),memory:new One(this.memoryContainer),scoops:new sre(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));fre(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:b7,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:b7,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 S7(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 C7=d(`new-session`),w7=`ui-new-session`;async function T7(e){let t=$6()??void 0,n;try{n=o8()}catch(e){C7.info(`No active model — freezing without LLM enrichment`,{error:e instanceof Error?e.message:String(e)})}let r=n?.provider===`adobe`?{"X-Session-Id":h8(w7)}:void 0,i=new O8;try{await i.init()}catch(e){return C7.warn(`SessionStore init failed — cannot freeze`,{error:e instanceof Error?e.message:String(e)}),null}return r7({sessionStore:i,vfs:e.vfs,model:n,apiKey:t,headers:r})}async function E7(e){let t=new O8;try{await t.init()}catch(e){return C7.warn(`SessionStore init failed — cannot quick-freeze`,{error:e instanceof Error?e.message:String(e)}),null}return r7({sessionStore:t,vfs:e.vfs,mode:`quick`})}async function mre(e){let t={found:0,enriched:[]},n=[];try{n=await nre(e.vfs)}catch(e){return C7.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=$6()??void 0,i;try{i=o8()}catch(e){return C7.info(`No active model — skipping background enrichment`,{error:e instanceof Error?e.message:String(e)}),t}if(!r||!i)return C7.info(`LLM credentials unavailable — leaving pending entries for later boot`,{pending:n.length}),t;let a=i.provider===`adobe`?{"X-Session-Id":h8(w7)}:void 0;for(let o of n)try{let n=await rre(e.vfs,o,{model:i,apiKey:r,headers:a});n&&t.enriched.push(n)}catch(e){C7.warn(`Background enrichment threw (entry stays pending)`,{filename:o.filename,error:e instanceof Error?e.message:String(e)})}return C7.info(`Background enrichment pass complete`,{found:t.found,enriched:t.enriched.length}),t}function D7(e,t={}){if(t.isWriter===!1){C7.info(`Background enrichment skipped (OPFS follower — read-only tab)`);return}let n=()=>{mre({vfs:e}).catch(()=>{})},r=globalThis.requestIdleCallback;typeof r==`function`?r(n):setTimeout(n,0)}function O7(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 k7(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}var A7=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}}},j7=d(`tray-sync`),hre=`slicc-cherry`;function gre(e){return typeof e==`object`&&!!e&&e.type===`cherry.host_event`}var M7=32*1024;function N7(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/M7),o=!0;for(let n=0;n<a;n++){let r=i.slice(n*M7,(n+1)*M7);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 P7(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 F7=32*1024;function _re(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/F7),a=!0;for(let t=0;t<i;t++){let o=r.slice(t*F7,(t+1)*F7);if(!e.send({type:`snapshot_chunk`,chunkData:o,chunkIndex:t,totalChunks:i,scoopJid:n})){a=!1,j7.error(`Failed to send snapshot chunk`,{chunkIndex:t,totalChunks:i,totalSize:r.length});break}}return j7.debug(`Snapshot sent in chunks`,{totalChunks:i,totalSize:r.length}),a}function vre(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 j7.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 I7=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){j7.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 j7.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 yre(e){return new I7(e)}function bre(e){return new I7(e)}var L7=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=P7(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)}},R7=d(`data-channel-keepalive`),z7=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++,R7.debug(`Missed pong`,{missedPongs:this.missedPongs,maxMissed:this.maxMissed}),this.missedPongs>=this.maxMissed)){R7.warn(`Channel declared dead`,{missedPongs:this.missedPongs}),this.stop(),this.onDead();return}this.awaitingPong=!0,this.sendPing()}}},B7=64*1024;async function V7(e,t){try{switch(t.op){case`readFile`:return await xre(e,t.path,t.encoding);case`writeFile`:return[await Sre(e,t.path,t.content,t.encoding)];case`stat`:return[await Cre(e,t.path)];case`readDir`:return[await wre(e,t.path)];case`mkdir`:return[await Tre(e,t.path,t.recursive)];case`rm`:return[await Ere(e,t.path,t.recursive)];case`exists`:return[await Dre(e,t.path)];case`walk`:return[await Ore(e,t.path)];default:return[{ok:!1,error:`Unknown fs operation: ${t.op}`}]}}catch(e){return[kre(e)]}}async function xre(e,t,n){return(n??`utf-8`)===`utf-8`?H7(await e.readFile(t,{encoding:`utf-8`}),`utf-8`):H7(Are(await e.readFile(t,{encoding:`binary`})),`base64`)}async function Sre(e,t,n,r){if(r===`base64`){let r=jre(n);await e.writeFile(t,r)}else await e.writeFile(t,n);return{ok:!0,data:{type:`void`}}}async function Cre(e,t){return{ok:!0,data:{type:`stat`,stat:await e.stat(t)}}}async function wre(e,t){return{ok:!0,data:{type:`dirEntries`,entries:await e.readDir(t)}}}async function Tre(e,t,n){return await e.mkdir(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function Ere(e,t,n){return await e.rm(t,{recursive:n}),{ok:!0,data:{type:`void`}}}async function Dre(e,t){return{ok:!0,data:{type:`exists`,exists:await e.exists(t)}}}async function Ore(e,t){let n=[];for await(let r of e.walk(t))n.push(r);return{ok:!0,data:{type:`paths`,paths:n}}}function H7(e,t){if(e.length<=B7)return[{ok:!0,data:{type:`file`,content:e,encoding:t}}];let n=Math.ceil(e.length/B7),r=[];for(let i=0;i<n;i++){let a=i*B7,o=e.slice(a,a+B7);r.push({ok:!0,data:{type:`file`,content:o,encoding:t},chunkIndex:i,totalChunks:n})}return r}function kre(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 Are(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function jre(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 U7=d(`tray-follower-sync`),Mre=15e3,Nre=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=bre(e),this.unsubscribe=this.sync.onMessage(e=>{this.handleLeaderMessage(e)}),this.keepalive=new z7({sendPing:()=>this.sync.send({type:`ping`}),onDead:()=>{U7.warn(`Leader keepalive dead, cleaning up`),this.handleDisconnect(`Keepalive timeout — leader not responding`),this.options.onDead?.()}}),this.keepalive.start(),e.addEventListener(`close`,()=>{U7.warn(`Data channel closed`),this.handleDisconnect(`Data channel closed`)}),e.addEventListener(`error`,()=>{U7.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?Vt(n):n;this.sync.send({type:`user_message`,text:e,messageId:r,attachments:i}),U7.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`}),U7.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`),U7.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??Mre;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})||U7.warn(`sendSprinkleLick dropped: tray channel closed`,{sprinkleName:e})}forwardLick(e){let t=this.sync.send({type:`lick`,event:e});return t||U7.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,rb({...eb(),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`:U7.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=vre(this.snapshotChunkBuffer,e);this.snapshotChunkBuffer=t.buffer,t.result&&(U7.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),U7.debug(`Skipping own message echo`,{messageId:e.messageId});break}U7.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`:U7.warn(`Error from leader`,{error:e.error}),this.emitEvent({type:`error`,error:e.error});break;case`targets.registry`:U7.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`:U7.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`:U7.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(),ib(Date.now());break;default:U7.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){U7.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)){U7.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){U7.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)?U7.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){U7.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){U7.error(`Listener error`,{eventType:e.type,error:t instanceof Error?t.message:String(t)})}}createRemoteTransport(e,t){let n=new L7({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),U7.debug(`Tracking remote CDP session`,{remoteSessionId:e})}n===`Target.detachFromTarget`&&i&&this.remoteCDPSessions.has(i)&&(this.remoteCDPSessions.delete(i),U7.debug(`Removed remote CDP session on detach`,{sessionId:i})),N7(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=P7(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 V7(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})})}},W7=d(`tray-follower`);function G7(e){let t=new URL(e);return t.searchParams.set(`json`,`true`),t.toString()}async function Pre(e){let t=G7(e.joinUrl),n=await Bre(await(e.fetchImpl??fetch)(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:e.controllerId,runtime:e.runtime})}));return W7.info(`Follower tray attach response`,{trayId:n.trayId,action:n.result.action,code:n.result.code,participantCount:n.participantCount}),Fre(n)}function Fre(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 Ire(e){return K7(await q7(e,{action:`poll`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,cursor:e.cursor}))}async function Lre(e){return K7(await q7(e,{action:`answer`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,answer:e.answer}))}async function Rre(e){return K7(await q7(e,{action:`ice-candidate`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,candidate:e.candidate}))}async function zre(e){return K7(await q7(e,{action:`retry`,controllerId:e.controllerId,bootstrapId:e.bootstrapId,runtime:e.runtime}))}function K7(e){return{trayId:e.trayId,controllerId:e.controllerId,participantCount:e.participantCount,leader:e.leader,bootstrap:e.bootstrap,events:e.events}}async function Bre(e){let t=null,n=null;try{t=await e.text(),n=JSON.parse(t)}catch{}if(!Vre(n)){let n=t?t.slice(0,200):`(empty)`;throw W7.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 q7(e,t){let n=G7(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(!Hre(i))throw Error(`Tray follower bootstrap returned an invalid response (${r.status})`);return i}function Vre(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`&&J7(r.bootstrap):r.action===`fail`?(r.code===`INVALID_JOIN_CAPABILITY`||r.code===`TRAY_EXPIRED`)&&typeof r.error==`string`:!1}function Hre(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`&&J7(t.bootstrap)&&Array.isArray(t.events)}function J7(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 Y7=d(`tray-webrtc`),Ure=`tray-control`,Wre=250,Gre=class{options;peerConnectionFactory;dataChannelLabel;peers=new Map;iceServers;constructor(e){this.options=e,this.iceServers=e.iceServers,this.peerConnectionFactory=e.peerConnectionFactory??(()=>X7(this.iceServers)),this.dataChannelLabel=e.dataChannelLabel??Ure}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=Q7(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`)&&(Y7.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`?(Y7.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`?(Y7.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:Z7(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){Y7.warn(`Failed to report tray bootstrap failure`,{error:e instanceof Error?e.message:String(e)})}}}},Kre=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??(()=>X7(this.iceServers)),this.controllerIdFactory=e.controllerIdFactory??(()=>crypto.randomUUID()),this.sleep=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),this.pollIntervalMs=e.pollIntervalMs??Wre}async start(){this.stopped=!1;let e=this.controllerIdFactory(),t=Date.now();rb({state:`connecting`,joinUrl:this.options.joinUrl,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:t,lastError:null}),Y7.info(`Follower tray join starting`,{joinUrl:this.options.joinUrl});let n=0;for(;;){$7(this.stopped),n++;let t;try{t=await Pre({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 rb({...eb(),attachAttempts:n,lastError:t}),e}if(rb({...eb(),attachAttempts:n,lastAttachCode:t.code}),t.action===`wait`){let e=t.retryAfterMs??1e3;Y7.info(`Follower tray attach waiting`,{attempt:n,code:t.code,retryAfterMs:e}),n%10==0&&Y7.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 rb({state:`error`,joinUrl:this.options.joinUrl,trayId:null,error:e,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:e}),Y7.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 rb({state:`connected`,joinUrl:this.options.joinUrl,trayId:r.trayId,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:null}),Y7.info(`Follower tray connected`,{trayId:r.trayId,controllerId:e}),r}catch(e){let r=e instanceof Error?e.message:String(e);throw rb({state:`error`,joinUrl:this.options.joinUrl,trayId:t.trayId,error:r,lastPingTime:null,reconnectAttempts:0,attachAttempts:n,lastAttachCode:t.code,connectingSince:null,lastError:r}),Y7.warn(`Follower tray bootstrap failed`,{error:r}),e}}}stop(){this.stopped=!0,this.activePeer?.peer.close(),this.activePeer?.channel?.close(),this.activePeer=null,rb({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($7(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 Ire({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 Lre({joinUrl:this.options.joinUrl,controllerId:t,bootstrapId:r.bootstrapId,answer:Z7(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 zre({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`)&&(Y7.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?(Y7.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?(Y7.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=Q7(n);r&&Rre({joinUrl:this.options.joinUrl,controllerId:e,bootstrapId:t,candidate:r,fetchImpl:this.fetchImpl}).catch(e=>{Y7.warn(`Failed to send follower ICE candidate`,{error:e instanceof Error?e.message:String(e)})})}),r}};function qre(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 Kre({...e,sleep:o,onDisconnected:e=>{s||(Y7.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),rb({...eb(),state:`reconnecting`,error:null,reconnectAttempts:f}),Y7.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,rb({...eb(),state:`connected`,joinUrl:e.joinUrl,trayId:i.trayId,error:null,lastPingTime:null,reconnectAttempts:0,connectingSince:null,lastError:null}),Y7.info(`Reconnect successful`,{attempt:f,trayId:i.trayId}),t.onConnected(i);return}catch(e){m=e instanceof Error?e.message:String(e),Y7.warn(`Reconnect attempt failed`,{attempt:f,error:m}),n?.stop(),l=null}p=Math.min(p*r,i)}s||(c=!1,rb({...eb(),state:`error`,error:`Reconnect failed after ${f} attempts: ${m}`,reconnectAttempts:f}),Y7.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||Y7.error(`Initial follower connection failed`,{error:e instanceof Error?e.message:String(e)})}),u}function X7(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 Z7(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 Q7(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 $7(e){if(e)throw Error(`Tray follower stopped before WebRTC bootstrap completed`)}function e9(e){if(!e)throw Error(`canonicalRuntimeId: bootstrapId is required`);return e.startsWith(`follower-`)?e:`follower-${e}`}var Jre=e({SprinkleFollowerController:()=>n9}),t9=d(`sprinkle-follower`),n9=class{sync;addSprinkle;removeSprinkle;zone;open=new Map;opening=new Set;latestDesiredOpen=new Set;pendingUpdates=new Map;updateListeners=new Map;disposed=!1;constructor(e){this.sync=e.sync,this.addSprinkle=e.addSprinkle,this.removeSprinkle=e.removeSprinkle,this.zone=e.zone}async updateAvailable(e){if(this.disposed)return;let t=new Map;for(let n of e)n.open&&t.set(n.name,n);this.latestDesiredOpen=new Set(t.keys());for(let e of[...this.open.keys()])t.has(e)||this.closeLocally(e);for(let e of[...this.pendingUpdates.keys()])t.has(e)||this.pendingUpdates.delete(e);let n=[];for(let[e,r]of t)this.open.has(e)||this.opening.has(e)||n.push(this.openLocally(e,r));await Promise.allSettled(n)}handleSprinkleUpdate(e,t){if(this.disposed)return;let n=this.open.get(e);if(n){n.renderer.pushUpdate(t),this.fanOutToListeners(e,t);return}if(this.opening.has(e)){this.pendingUpdates.set(e,t);return}t9.debug(`Dropping sprinkle.update for unknown sprinkle`,{sprinkleName:e})}dispose(){if(!this.disposed){this.disposed=!0;for(let e of[...this.open.keys()])this.closeLocally(e);this.pendingUpdates.clear(),this.latestDesiredOpen.clear(),this.updateListeners.clear()}}async openLocally(e,t){this.opening.add(e);let n;try{n=await this.sync.fetchSprinkleContent(e)}catch(t){this.opening.delete(e),this.pendingUpdates.delete(e),t9.warn(`Failed to fetch sprinkle content from leader`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)});return}if(this.disposed||!this.latestDesiredOpen.has(e)){this.opening.delete(e),this.pendingUpdates.delete(e);return}let r=document.createElement(`div`);r.className=`sprinkle-panel`,r.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow: hidden;`,r.dataset.sprinkle=e;let i=new rC(r,this.createBridge(e));this.addSprinkle(e,t.title,r,this.zone);try{await i.render(n,e)}catch(t){t9.warn(`Sprinkle render failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}if(this.disposed||!this.latestDesiredOpen.has(e)){this.updateListeners.delete(e),this.opening.delete(e),this.pendingUpdates.delete(e);try{i.dispose()}catch(t){t9.warn(`Sprinkle dispose threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}r.remove();try{this.removeSprinkle(e)}catch(t){t9.warn(`removeSprinkle callback threw during post-render cleanup`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}return}this.open.set(e,{renderer:i,container:r}),this.opening.delete(e);let a=this.pendingUpdates.get(e);a!==void 0&&(this.pendingUpdates.delete(e),i.pushUpdate(a),this.fanOutToListeners(e,a))}fanOutToListeners(e,t){let n=this.updateListeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(t){t9.warn(`Sprinkle update listener threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}closeLocally(e){this.updateListeners.delete(e),this.pendingUpdates.delete(e);let t=this.open.get(e);if(t){try{t.renderer.dispose()}catch(t){t9.warn(`Sprinkle dispose threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}t.container.remove(),this.open.delete(e);try{this.removeSprinkle(e)}catch(t){t9.warn(`removeSprinkle callback threw`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}}}createBridge(e){return{name:e,lick:t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data;this.sync.sendSprinkleLick(e,{action:n,data:r})},on:(t,n)=>{if(t!==`update`)return;let r=this.updateListeners.get(e);r||(r=new Set,this.updateListeners.set(e,r)),r.add(n)},off:(t,n)=>{t===`update`&&this.updateListeners.get(e)?.delete(n)},readFile:()=>Promise.reject(Error(`readFile not supported in follower-rendered sprinkle`)),writeFile:()=>Promise.reject(Error(`writeFile not supported in follower-rendered sprinkle`)),readDir:()=>Promise.reject(Error(`readDir not supported in follower-rendered sprinkle`)),exists:()=>Promise.resolve(!1),stat:()=>Promise.reject(Error(`stat not supported in follower-rendered sprinkle`)),mkdir:()=>Promise.reject(Error(`mkdir not supported in follower-rendered sprinkle`)),rm:()=>Promise.reject(Error(`rm not supported in follower-rendered sprinkle`)),screenshot:()=>Promise.reject(Error(`screenshot not supported in follower-rendered sprinkle`)),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch(t){t9.warn(`Sprinkle setState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)})}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch(t){return t9.warn(`Sprinkle getState failed`,{sprinkleName:e,error:t instanceof Error?t.message:String(t)}),null}},open:e=>{let t=/^https?:|^chrome-extension:/.test(e)?e:CS(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
|
|
1783
1783
|
`,exitCode:127}),{spawn:()=>Promise.resolve({stdout:``,stderr:`exec.spawn not supported in follower-rendered sprinkle
|
|
1784
1784
|
`,exitCode:127})}),agent:()=>Promise.resolve({stdout:`agent not supported in follower-rendered sprinkle
|
|
1785
|
-
`,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`))}}},r9=d(`page-follower-tray`);function Yre(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 i9(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=qre({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=e9(a.bootstrapId),c=null,l=new Nre(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=>{r9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new n9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new A7(r9,{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(Yre(t,e.runtime??`slicc-standalone`),s)}catch(e){r9.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(),r9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{r9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{r9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}d(`lick-manager`);var Xre=new Set([`navigate`]),Zre=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()]}},a9=d(`tray-leader-sync`);function Qre(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function o9(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 s9(e){return e.kind===`cherry`}function $re(e,t){return e.filter(e=>s9(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var eie=class e{options;followers=new Map;registry=new Zre;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=yre(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new z7({sendPing:()=>r.send({type:`ping`}),onDead:()=>{a9.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:Qre(n?.runtime)}),a9.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(),a9.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),a9.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?Vt(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){a9.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,_re(n.sync,i,r),a9.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){a9.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){a9.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){a9.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){a9.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`:{a9.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Vt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:a9.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:a9.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{a9.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`:a9.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`:{a9.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=o9(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){a9.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!Xre.has(n.type)){a9.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:o9(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){a9.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:a9.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),a9.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 L7({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),a9.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){a9.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:$re(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);N7(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=P7(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&&N7(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(!gre(t))return;let n=this.options.onCherryHostEvent;if(!n){a9.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){a9.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}):(a9.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=>!s9(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 V7(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?V7(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})})}},c9=d(`page-leader-tray`);function l9(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new eie({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 Gre({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{c9.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)=>{c9.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new ui({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=>{c9.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{c9.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{c9.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{c9.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new A7(c9,{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){c9.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){c9.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??tie();if(n)try{let e=Br(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){c9.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{c9.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()),ii()},leader:r,peers:i,sync:a}}function tie(){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 u9(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)}}function nie(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)}}}var rie=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],d9=`chat`,iie=new Set(rie.map(e=>e.id));function aie(e){return iie.has(e)}function oie(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`:cie(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function sie(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function f9(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&aie(t)?t:d9}catch{return d9}}function cie(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function lie(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function p9(e){return e.toLowerCase().endsWith(hx)}function uie(e){return Array.from(e).find(e=>p9(e.name))??null}function m9(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 die(e){if(!e)return null;if(e.files){let t=uie(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&&p9(e.name))return e}return null}function fie(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||p9(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}var h9=d(`sprinkle-icon`),pie=`<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">`,mie=`</svg>`,g9=null;function hie(){return g9||=o(()=>Promise.resolve().then(()=>T0).then(e=>e.icons),void 0),g9}function gie(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function _9(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function _ie(e){return`${pie}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${_9(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${mie}`}async function vie(e){let t=gie(e),n=(await hie())[t];return n?_ie(n):null}function yie(e){return/^\s*<svg\b/i.test(e)}function bie(e){return/^data:/i.test(e)}function xie(e){return e.startsWith(`/`)}function v9(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function Sie(e){return/^[a-z][a-z0-9-]*$/.test(e)}function y9(e){return`<img src="${_9(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function b9(e,t){if(!e)return null;if(yie(e))return y9(x9(e));if(bie(e))return y9(e);if(xie(e)&&t){try{if(v9(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=S9(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?y9(x9(r)):null}if(v9(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return y9(`data:${Cie(e)};base64,${C9(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=S9(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return y9(x9(r))}catch(t){h9.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(Sie(e)){let t=await vie(e);if(t)return t;h9.warn(`Unknown Lucide icon name`,{spec:e})}return null}function x9(e){return`data:image/svg+xml;base64,${C9(new TextEncoder().encode(e))}`}function S9(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function Cie(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 C9(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 wie=[`/shared/sprinkles`],Tie=new Set([`welcome`,`connect-llm`]);async function Eie(e){let t=new Map;for(let n of wie)await e.exists(n)&&await w9(e,n,t);return await w9(e,`/`,t),t}async function w9(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=Die(r);if(!Tie.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:Oie(i,t),autoOpen:kie(i),icon:Aie(i)})}}}function Die(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function Oie(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 kie(e){return/data-sprinkle-autoopen\b/.test(e)}function Aie(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=jie(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=T9(i,`href`);if(a!==void 0)return a.trim()}let r=T9(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function jie(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 T9(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var Mie=e({SprinkleManager:()=>N9,readOpenSprinklesFromUrl:()=>k9,writeOpenSprinklesToUrl:()=>A9}),E9=d(`sprinkle-manager`),D9=`slicc-open-sprinkles`,O9=`sprinkles`;function k9(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(O9);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function A9(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(O9):t.searchParams.set(O9,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var j9=`slicc-known-sprinkles`,M9=`slicc-autoopened-once`,Nie=[`/workspace`,`/shared`,`/scoops`],Pie=250,N9=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=Qn(),n=Zn();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 LS(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&&E9.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=k9();if(e!==null){for(let t of e)try{await this.open(t)}catch{E9.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(D9);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{E9.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(D9)}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{E9.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),E9.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{E9.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(j9);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(j9,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(M9);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(M9,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(D9,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,A9([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<Pie))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)){E9.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),E9.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{E9.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),E9.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{E9.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 Eie(this.fs),E9.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){E9.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){E9.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){E9.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){E9.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 rC(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),e6(e),E9.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),E9.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){E9.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(),E9.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),E9.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=>{E9.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=Nie.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){E9.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){E9.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}},Fie=100,P9=6,F9=null,I9=null,L9=null;function Iie(){return F9||(F9=document.createElement(`div`),F9.className=`s2-tooltip`,document.body.appendChild(F9)),F9}function Lie(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Iie();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-P9,s=r.left+r.width/2-i.width/2):a===`right`?(o=r.top+r.height/2-i.height/2,s=r.right+P9):a===`left`?(o=r.top+r.height/2-i.height/2,s=r.left-i.width-P9):(o=r.bottom+P9,s=r.left+r.width/2-i.width/2),a===`bottom`&&o+i.height>window.innerHeight-4?o=r.top-i.height-P9:a===`top`&&o<4?o=r.bottom+P9:a===`left`&&s<4?s=r.right+P9:a===`right`&&s+i.width>window.innerWidth-4&&(s=r.left-i.width-P9),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 R9(){I9&&=(clearTimeout(I9),null),L9=null,F9?.classList.remove(`s2-tooltip--visible`)}function Rie(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===L9||(R9(),t&&(L9=t,I9=setTimeout(()=>Lie(t),Fie)))},!0),document.addEventListener(`pointerout`,e=>{if(!L9)return;let t=e.relatedTarget;t&&L9.contains(t)||R9()},!0),document.addEventListener(`pointerdown`,R9,!0)}var z9=d(`welcome-sentinel`),zie=`/shared/.welcomed`;function Bie(e){if(!e.isWriter){z9.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(zie,`1`).catch(e=>z9.warn(`Failed to persist welcome completion marker`,e))}var $=d(`main`);function B9(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}}var V9=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),H9=`slicc:welcome-flow-fired`;function U9(){try{let e=typeof localStorage<`u`?localStorage.getItem(H9):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 W9(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(H9,JSON.stringify([...e]))}catch{}}function G9(e,t,n,r){if(V9.has(e)&&t.has(e)){$.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}V9.has(e)&&(t.add(e),W9(t)),n()}var K9=`slicc-pending-mount`,q9=`pendingMount`,J9=new Set([`welcome`]);function Y9(){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 X9(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),$.info(`Loaded UI fixture session for design iteration`)}async function Vie(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(K9,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,q9),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function Z9(e){let t;try{t=await new Promise((e,t)=>{let n=indexedDB.open(K9,1);n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}catch{return}let n=t.transaction(`handles`,`readwrite`),r=await new Promise(e=>{let t=n.objectStore(`handles`).get(q9);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(r){n.objectStore(`handles`).delete(q9),await new Promise(e=>n.oncomplete=()=>e());let t=`/mnt/${r.name}`,i=fn.fromHandle(r,{mountId:pn()});await e.mount(t,i),$.info(`Mounted folder from welcome onboarding`,{name:r.name,path:t})}t.close()}function Hie(){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 Uie(){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 Wie(e,t,n,r){let i=Hie(),a=0,o=!1,s=()=>{a=0,o||i.hide()};window.addEventListener(`dragenter`,e=>{m9(e.dataTransfer)&&(e.preventDefault(),a+=1,o||i.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{m9(e.dataTransfer)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),o||i.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragleave`,()=>{a!==0&&(a=Math.max(0,a-1),a===0&&!o&&i.hide())}),window.addEventListener(`dragend`,s),window.addEventListener(`blur`,s),window.addEventListener(`drop`,async c=>{let l=die(c.dataTransfer),u=fie(c.dataTransfer);if(!l&&u.length===0){s();return}if(c.preventDefault(),a=0,l&&o){i.hide(),t(`Another .skill installation is already in progress.`,`error`);return}if(u.length>0&&r)try{await r(u)}catch(e){t(`Failed to attach dropped files: ${e instanceof Error?e.message:String(e)}`,`error`)}if(l){o=!0,i.show(`Installing skill…`,l.name);try{let r=await ane(e,l);await n(),t(`Installed "${r.skillName}" to ${r.destinationPath} (${r.fileCount} files).`,`success`)}catch(e){t(`Failed to install dropped skill: ${e instanceof Error?e.message:String(e)}`,`error`)}finally{o=!1,i.hide()}}else i.hide()})}async function Gie(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 Q9(e,t,n){if(await Ci())return;let r=e?await Gie(e):{},{getSelectedModelId:i,getProviderConfig:a,getProviderModels:s}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>a6);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},void 0),c=(()=>{try{return i()||null}catch{return null}})(),l=(()=>{if(!c)return null;try{return s(t).find(e=>e.id===c)?.name??c}catch{return c}})(),u=null;try{u=a(t).name??null}catch{}n({action:`onboarding-complete-with-provider`,data:{profile:r,provider:t,providerName:u,model:c,modelLabel:l,validation:`preexisting`}})}async function $9(e,t){let n=t?.detached===!0,{OffscreenClient:r}=await o(async()=>{let{OffscreenClient:e}=await import(`./offscreen-client-Bn2ErFJg.js`);return{OffscreenClient:e}},__vite__mapDeps([31,14])),{VirtualFS:i,resolveVfsBackendFromEnv:a}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>mx);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{publishAgentBridgeProxy:s}=await o(async()=>{let{publishAgentBridgeProxy:e}=await import(`./agent-bridge-DrtqeACp.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([32,14])),{installPanelSudoResponder:l}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-Dflnt4_G.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([33,14])),{warnIfPanelVfsConstructionUnderOpfs:u}=await o(async()=>{let{warnIfPanelVfsConstructionUnderOpfs:e}=await import(`./panel-vfs-guard-1E455_lR.js`);return{warnIfPanelVfsConstructionUnderOpfs:e}},[]),d=new x7(e,!n);await d.panels.chat.initSession(`session-cone`),s(),l();let f=null,p=a();u(p,$);let m=p===`opfs`,h=await i.create({dbName:`slicc-fs`,...m?{backend:`memory`}:{}});m||(d.panels.fileBrowser.setFs(h),$.info(`File browser wired to shared VFS (local IndexedDB)`)),Kn().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await Jn(e,h,$);t.length!==0&&$.warn(`Some mounts could not be recovered in the panel VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>$.warn(`Failed to restore persisted mounts in panel VFS`,e));let g=h;u9({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>g,logger:$}),Wie(h,Uie(),async()=>{await d.panels.fileBrowser.refresh()},e=>d.panels.chat.addAttachmentsFromFiles(e));{let{registerSessionCostsProvider:e}=await o(async()=>{let{registerSessionCostsProvider:e}=await import(`./cost-command-CThcmGZA.js`);return{registerSessionCostsProvider:e}},[]);e(()=>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??[])})}))}let v,x=new Set,S=async e=>{f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid),d.setScoopSwitcherSelected?.(e.jid),d.panels.scoops.setSelectedJid(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await d.panels.chat.switchToContext(t,!e.isCone,n),v.requestScoopMessages(e.jid),v.isProcessing(e.jid)&&d.panels.chat.setProcessing(!0),T(e)};v=new r({onStatusChange:(e,t)=>{d.panels.scoops.updateScoopStatus(e,t),d.updateScoopSwitcherStatus?.(e,t),f?.jid===e&&(d.setAgentProcessing(t===`processing`),t===`processing`?d.panels.chat.setProcessing(!0):t===`ready`&&d.panels.chat.setProcessing(!1))},onScoopCreated:e=>{d.panels.scoops.refreshScoops(),d.refreshScoopSwitcher?.(),f||(f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid))},onScoopListUpdate:()=>{let e=new Set(v.getScoops().map(e=>e.folder));for(let t of x)e.has(t)||d.panels.chat.deleteSessionById(`session-${t}`);if(x=e,d.panels.scoops.refreshScoops(),d.refreshScoopSwitcher?.(),!f){let e=v.getScoops().find(e=>e.isCone);e&&(f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid))}},onIncomingMessage:(e,t)=>{if(P0(t.channel)){let n=new Date(t.timestamp).getTime(),r=t.channel;if(f?.jid===e)d.panels.chat.addLickMessage(t.id,t.content,r,n);else{let i=v.getScoops().find(t=>t.jid===e),a=i?.isCone?`session-cone`:i?`session-${i.folder}`:`session-${e}`;d.panels.chat.persistLickToSession(a,{id:t.id,content:t.content,channel:r,timestamp:n})}return}if(f?.jid===e){let e=t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content;d.panels.chat.addUserMessage(e,t.attachments)}},onScoopMessagesReplaced:(e,t)=>{f?.jid===e&&d.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{f?.jid===e&&d.panels.chat.setCompactionState(t)},onReady:async()=>{try{$.info(`Offscreen engine ready, scoop count:`,v.getScoops().length);let e=window.localStorage.getItem(jr);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(Ar)}}).catch(()=>{});let t=f??v.getScoops().find(e=>e.isCone)??v.getScoops()[0];t&&(f=t,v.setSelectedScoopJid(t.jid),await S(t))}catch(e){$.error(`Failed to initialize on ready`,{error:e instanceof Error?e.message:String(e)})}}}),chrome.runtime.onMessage.addListener(e=>(!re(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||n||lne(v,d),!1)),n&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>{}),n||(d.setShowPopoutButton(!0),d.setPopoutClickHandler(()=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e),d.resetPopoutButton()})})),v.setLocalFS(h);let C=h;if(m){let{createRemoteVfsClient:e}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([34,35])),{createRemoteWritableVfsClient:t}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([36,35])),n=e({transport:v.getTransport()}),r=t({transport:v.getTransport()});d.panels.fileBrowser.setFs(n),g=n,C=r,$.info(`File browser + preview-vfs wired to worker VFS RPC`)}(async()=>{try{let{RemoteTerminalView:e}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-C1K2ToGt.js`);return{RemoteTerminalView:e}},__vite__mapDeps([37,1,29,4,14,30,38,39,40])),{fetchSecretEnvVars:t}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([41,14])),n=await t(),r=new e({client:v,cwd:`/`,env:Object.keys(n).length>0?n:void 0});await d.panels.terminal.mountRemoteShell(r),window.addEventListener(`beforeunload`,()=>r.dispose(),{once:!0}),$.info(`Panel terminal mounted as RemoteTerminalView (offscreen TerminalSessionHost)`)}catch(e){$.warn(`Failed to mount remote terminal view`,e)}})(),d.panels.chat.setAttachmentWriter(bx(h));let w=v.createAgentHandle();d.panels.chat.setAgent(w),d.panels.scoops.setOrchestrator(v),d.panels.memory.setOrchestrator(v),d.setScoopSwitcherOrchestrator?.(v),d.setScoopSwitcherTranscriptSource?.(e=>v.getScoopTranscript(e)),d.setScoopsRailTranscriptSource?.(e=>v.getScoopTranscript(e)),d.onScoopSelect=S;let T=e=>{let t=e.config?.modelId,n=t?a8(t):o8();d.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),d.panels.chat.setThinkingLevel(e.config?.thinkingLevel)};d.onModelChange=e=>{localStorage.setItem(`selected-model`,e),v.updateModel(),f&&T(f)},d.onThinkingLevelChange=e=>{f&&v.setScoopThinkingLevel(f.jid,e)},d.onModelsRefreshed=()=>{f&&T(f)},d.onClearChat=async e=>{if(e?.freeze===`quick`)try{await E7({vfs:C})}catch(e){$.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await T7({vfs:C})}catch(e){$.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else $.info(`New session: freezer skipped (long-press)`);await d.panels.chat.deleteSessionById(`session-cone`),await v.clearAllMessages()},d.onClearFilesystem=async()=>{v.clearFilesystem()};let{OnboardingOrchestrator:ee}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-DbSXIbPW.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([42,14])),E=TC,{getAvailableProviders:D,getProviderConfig:te,getProviderModels:ne,addAccount:ie,setSelectedModelId:O,getAccounts:ae,isModelHiddenFromPicker:k,providerOffersLlmModels:oe}=await o(async()=>{let{getAvailableProviders:e,getProviderConfig:t,getProviderModels:n,addAccount:r,setSelectedModelId:i,getAccounts:a,isModelHiddenFromPicker:o,providerOffersLlmModels:s}=await Promise.resolve().then(()=>a6);return{getAvailableProviders:e,getProviderConfig:t,getProviderModels:n,addAccount:r,setSelectedModelId:i,getAccounts:a,isModelHiddenFromPicker:o,providerOffersLlmModels:s}},void 0),{createSprinkleDeviceCodePrompter:A,resolveDeviceCodeDecision:se}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),j=()=>{let e=D().filter(e=>oe(e)),t=e.map(e=>{let t=te(e);return{id:t.id,name:t.name,description:t.description,requiresApiKey:t.requiresApiKey??!0,requiresBaseUrl:t.requiresBaseUrl??!1,requiresDeployment:!!t.requiresDeployment,requiresApiVersion:!!t.requiresApiVersion,apiKeyPlaceholder:t.apiKeyPlaceholder??void 0,apiKeyEnvVar:t.apiKeyEnvVar??void 0,defaultBaseUrl:t.baseUrlPlaceholder??void 0,baseUrlDescription:t.baseUrlDescription??void 0,deploymentPlaceholder:t.deploymentPlaceholder??void 0,deploymentDescription:t.deploymentDescription??void 0,apiVersionDefault:t.apiVersionDefault??void 0,apiVersionDescription:t.apiVersionDescription??void 0,isOAuth:!!t.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),n={};for(let t of e)try{n[t]=ne(t).filter(e=>!k(e.id)).map(e=>({id:e.id,name:e.name}))}catch{n[t]=[]}return{providers:t,models:n}},ce=null,M=()=>ce||(ce=new ee({fs:h,postSystemMessage:e=>d.panels.chat.addSystemMessage(e),postDipReference:e=>d.panels.chat.addSystemMessage(e),getProviderCatalogue:j,saveAccount:(e,t,n,r,i)=>ie(e,t,n,r,i),setSelectedModel:e=>O(e),resolveModelLabel:(e,t)=>{try{return ne(e).find(e=>e.id===t)?.name??null}catch{return null}},broadcastToDip:e=>E(e),fireFinalLick:e=>{O7(v),G9(String(e?.action??``),N,()=>v.sendSprinkleLick(`welcome`,e),`orchestrator-ext`)},launchOAuth:async(e,t)=>{try{let n=te(e);if(!n.isOAuth||!n.onOAuthLogin&&!n.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(n.requiresBaseUrl&&t&&ie(e,``,t),n.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CFSmb2Xq.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 n.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:A({broadcastToDip:E})})}else if(n.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CFSmb2Xq.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await n.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:k7(e,n,ne,k)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}}),ce),N=U9(),le=e=>{if(e.type!==`sprinkle`)return!1;let t=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(t&&V9.has(t)){if(N.has(t))return $.debug(`Suppressing duplicate welcome lick (ext)`,{action:t}),!0;N.add(t),W9(N)}if(!(t===`first-run`||t===`onboarding-complete`||t===`connect-ready`||t===`connect-attempt`||t===`oauth-attempt`||t===`device-code-decision`||t===`shortcut-migrate`))return!1;let n=e.body,r=t;if(r===`device-code-decision`){let e=n?.data?.decision;return se(e===`cancel`?`cancel`:`continue`),!0}if(r===`first-run`)return M().handleFirstRun(),!0;if(r===`onboarding-complete`){let e=M(),t=n?.data??{};return t.mountWorkspace&&Z9(h).catch(e=>$.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(t).catch(e=>$.warn(`OnboardingOrchestrator failed`,e)),!0}if(r===`connect-ready`){let e=ae();if(e.length>0){let t=e[0],n=(()=>{try{return te(t.providerId)}catch{return null}})();return E({type:`slicc-already-connected`,provider:t.providerId,note:n?.name?`Already connected to ${n.name}.`:`Already connected.`}),Q9(h,t.providerId,e=>{G9(String(e.action??``),N,()=>v.sendSprinkleLick(`welcome`,e),`fast-forward-ext`)}).catch(e=>$.warn(`Failed to fire fast-forward final lick`,e)),!0}return M().handleConnectReady(),!0}if(r===`connect-attempt`){let e=n?.data;return e&&M().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=>$.warn(`handleConnectAttempt failed`,e)),!0}if(r===`oauth-attempt`){let e=n?.data;return e&&M().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>$.warn(`handleOAuthAttempt failed`,e)),!0}return r===`shortcut-migrate`?(h.writeFile(`/shared/.welcomed`,`1`).catch(e=>$.warn(`Failed to persist welcome completion marker`,e)),!0):!1};d.panels.chat.onDipLick=(e,t)=>{le({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}})||v.sendSprinkleLick(`inline`,{action:e,data:t})};let P=new N9(m?er({reader:C,writer:C}):h,async e=>{if(e.type===`sprinkle`){if(le(e)){e.body?.action===`shortcut-migrate`&&P.close(`welcome`);return}if(e.sprinkleName===`welcome`&&e.body?.action===`request-mount`){try{let e=await y();if(e.cancelled){P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}if(e.error){$.warn(`Mount picker popup failed`,e.error),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}if(!e.handleInIdb||typeof e.idbKey!=`string`){$.warn(`Mount picker popup returned unexpected result`,e),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}let t=await b(e.idbKey);if(!t){$.warn(`Mount picker popup did not store a handle`),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}await _(t),await Vie(t),P.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:t.name})}catch(e){$.warn(`Mount picker failed`,e),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`})}return}v.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,n,r,i)=>d.addSprinkle(e,t,n,r,i),removeSprinkle:e=>d.removeSprinkle(e),minimizeSprinkle:e=>d.minimizeSprinkle(e),registerSprinkle:(e,t,n)=>d.registerSprinkle(e,t,n?.icon,n?.zone),unregisterSprinkle:e=>d.unregisterSprinkle(e),closeSprinkleContent:e=>d.closeSprinkleContent(e)},()=>{let e=v.getScoops().find(e=>e.isCone);e&&v.stopScoop(e.jid)},{autoOpenBehavior:`attention`,onAttachImage:(e,t,n)=>d.panels.chat.addImageAttachment(e,t,n),inlineSprinkles:J9,execHandler:B9(v)});window.__slicc_sprinkleManager=P,DC(B9(v)),window.__slicc_reloadSkills=()=>(chrome.runtime.sendMessage({source:`panel`,payload:{type:`reload-skills`}}),Promise.resolve()),v.setSprinkleOpHandler(e=>{let{id:t,op:n,name:r,data:i}=e;console.log(`[main-ext] sprinkle-op handler called`,{id:t,op:n,name:r}),(async()=>{try{let e;switch(n){case`list`:await P.refresh(),e=P.available();break;case`opened`:e=P.opened();break;case`refresh`:await P.refresh(),e=P.available().length;break;case`open`:await P.open(r),e=!0;break;case`close`:P.close(r),e=!0;break;case`send`:P.sendToSprinkle(r,i),e=!0;break;case`openNewAutoOpen`:await P.openNewAutoOpenSprinkles(),e=!0;break}console.log(`[main-ext] sprinkle-op response sending`,{id:t,op:n,result:typeof e}),chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,result:e}}).catch(()=>{})}catch(e){chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,error:e instanceof Error?e.message:String(e)}}).catch(()=>{})}})()}),await P.refresh(),d.onSprinkleClose=e=>P.close(e),d.onSprinkleActivate=e=>{P.activate(e)},d.getAvailableSprinkles=()=>[],d.onOpenSprinkle=(e,t)=>P.open(e,t),d.resolveSprinkleIcon=e=>b9(e,h),d.updateAddButtons(),await P.restoreOpenSprinkles();let{PanelFollowerSprinkleProxy:ue}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-DTufY-0i.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:de}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>Jre);return{SprinkleFollowerController:e}},void 0),fe={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)||$.error(`Panel → offscreen sendMessage failed`,{error:t})})}},pe={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)}},me=null;me=new de({sync:new ue(fe,pe,{onSprinklesList:e=>void me?.updateAvailable(e),onSprinkleUpdate:(e,t)=>me?.handleSprinkleUpdate(e,t)}),addSprinkle:(e,t,n,r,i)=>d.addSprinkle(e,t,n,r,i),removeSprinkle:e=>d.removeSprinkle(e)});let he=rw({sender:{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)||$.error(`Panel → offscreen sendMessage failed (leader)`,{error:t})})}},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:P,client:v,chat:d.panels.chat,log:$});if(window.addEventListener(`beforeunload`,()=>he.dispose(),{once:!0}),!h.getWatcher()){let{FsWatcher:e}=await o(async()=>{let{FsWatcher:e}=await Promise.resolve().then(()=>mx);return{FsWatcher:e}},void 0);h.setWatcher(new e)}let ge=h.getWatcher();ge&&P.setupWatcher(ge),!await h.exists(`/shared/.welcomed`)&&localStorage.getItem(`slicc-welcomed`)&&(await h.writeFile(`/shared/.welcomed`,`1`).catch(()=>{}),localStorage.removeItem(`slicc-welcomed`)),Rr(window.localStorage)||xi(h).then(e=>{e.isFirstRun&&(N.has(`first-run`)&&($.info(`Clearing stale welcome dedup entry — install state is fresh`),N.delete(`first-run`),W9(N)),N.add(`first-run`),W9(N),M().handleFirstRun())}).catch(e=>$.warn(`Welcome detection failed`,e)),$.info(`SprinkleManager initialized (extension mode)`),v.requestState(),$.info(`Extension UI connected to offscreen agent engine`);let{installNukeReloadListener:_e}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-Dmc-Sve3.js`);return{installNukeReloadListener:e}},[]);_e(),Y9()&&await X9(d.panels.chat),Q3().catch(()=>{}),D7(C)}async function Kie(e,t){let n=t===`electron-overlay`;$.info(`starting standalone with kernel worker`);let{spawnKernelWorker:r}=await o(async()=>{let{spawnKernelWorker:e}=await import(`./spawn-D6ZYDHli.js`);return{spawnKernelWorker:e}},__vite__mapDeps([43,31,14])),{installPageStorageSync:i}=await o(async()=>{let{installPageStorageSync:e}=await import(`./page-storage-sync-BMnuL0eG.js`);return{installPageStorageSync:e}},[]),{VirtualFS:a,resolveVfsBackendFromEnv:s}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>mx);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{BrowserAPI:l}=await o(async()=>{let{BrowserAPI:e}=await import(`./cdp-lOc6_BAx.js`);return{BrowserAPI:e}},__vite__mapDeps([44,1,14])),{installSudoTestHook:u}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-Dflnt4_G.js`);return{installSudoTestHook:e}},__vite__mapDeps([33,14]));u();let{createMigrationSplash:d}=await o(async()=>{let{createMigrationSplash:e}=await import(`./migration-splash-D-cAt2r9.js`);return{createMigrationSplash:e}},[]),f=await Kr(),p=sie(n?`electron-overlay`:`standalone`,f!==null)?Mr:null;await Wr({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:p,runtimeConfigFetcher:async()=>f});let m=new x7(e,n);if(n){let e=f9(window.location.href);m.setActiveTab(e);let t=document.createElement(`style`);t.id=`slicc-electron-overlay-runtime-style`,t.textContent=`
|
|
1785
|
+
`,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`))}}},r9=d(`page-follower-tray`);function Yre(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 i9(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=qre({joinUrl:e.joinUrl,runtime:e.runtime??`slicc-standalone`,fetchImpl:e._fetchImpl,peerConnectionFactory:e._peerConnectionFactory,sleep:e._sleep},{onConnected:a=>{o();let s=e9(a.bootstrapId),c=null,l=new Nre(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=>{r9.warn(`Follower sync disconnected`,{reason:e}),o()}});e.addSprinkle&&e.removeSprinkle&&(c=new n9({sync:l,addSprinkle:e.addSprinkle,removeSprinkle:e.removeSprinkle}),r=c);let u=new A7(r9,{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(Yre(t,e.runtime??`slicc-standalone`),s)}catch(e){r9.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(),r9.info(`Follower sync wired`,{trayId:a.trayId})},onReconnecting:e=>{r9.info(`Follower reconnecting`,{attempt:e})},onGaveUp:e=>{r9.warn(`Follower reconnect gave up`,{lastError:e}),o()},sleep:e._sleep}),{stop(){o(),a?.cancel(),a=null},get currentSync(){return n}}}d(`lick-manager`);var Xre=new Set([`navigate`]),Zre=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()]}},a9=d(`tray-leader-sync`);function Qre(e){return e?e.includes(`ios`)?`ios`:e.includes(`standalone`)?`standalone`:e.includes(`extension`)?`extension`:e.includes(`electron`)?`electron`:`unknown`:`unknown`}function o9(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 s9(e){return e.kind===`cherry`}function $re(e,t){return e.filter(e=>s9(e)&&t.requireNetwork?e.capabilities?.network===!0:!0)}var eie=class e{options;followers=new Map;registry=new Zre;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=yre(t),i=r.onMessage(t=>{this.handleFollowerMessage(e,t)}),a=new z7({sendPing:()=>r.send({type:`ping`}),onDead:()=>{a9.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:Qre(n?.runtime)}),a9.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(),a9.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),a9.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?Vt(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){a9.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,_re(n.sync,i,r),a9.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){a9.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){a9.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){a9.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){a9.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`:{a9.info(`Follower user message received`,{bootstrapId:e,messageId:t.messageId});let n=t.attachments?.length?Vt(t.attachments):t.attachments;this.options.onFollowerMessage(t.text,t.messageId,n);break}case`abort`:a9.info(`Follower abort received`,{bootstrapId:e}),this.options.onFollowerAbort();break;case`request_snapshot`:a9.info(`Follower snapshot request received`,{bootstrapId:e,scoopJid:t.scoopJid}),this.sendSnapshotToFollower(e,t.scoopJid);break;case`scoops.select`:{a9.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`:a9.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`:{a9.info(`Follower sprinkle lick received`,{bootstrapId:e,sprinkleName:t.sprinkleName});let n=this.followers.get(e),r=o9(n?.floatType??`unknown`,n?.runtime);try{this.options.onSprinkleLick?.(t.sprinkleName,t.body,t.targetScoop,r)}catch(e){a9.warn(`onSprinkleLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`lick`:{let n=t.event;if(!n||!Xre.has(n.type)){a9.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:o9(r?.floatType??`unknown`,r?.runtime)};try{this.options.onForwardedLick?.(o,e)}catch(e){a9.warn(`onForwardedLick handler threw`,{error:e instanceof Error?e.message:String(e)})}break}case`targets.advertise`:a9.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),a9.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 L7({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),a9.debug(`Cleaned up stale remote transport`,{key:e}));try{this.options.onRemoteTransportsCleaned?.(e)}catch(t){a9.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:$re(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);N7(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=P7(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&&N7(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(!gre(t))return;let n=this.options.onCherryHostEvent;if(!n){a9.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){a9.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}):(a9.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=>!s9(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 V7(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?V7(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})})}},c9=d(`page-leader-tray`);function l9(e){let t=e._refreshIntervalMs??5e3,n=e._fetchImpl??((e,t)=>fetch(e,t)),r,i,a;a=new eie({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 Gre({sendControlMessage:e=>r.sendControlMessage(e),onPeerConnected:(e,t)=>{c9.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)=>{c9.info(`Tray follower disconnected`,{bootstrapId:e,reason:t})}}),r=new ui({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=>{c9.error(`Tray leader bootstrap handling failed`,{error:e instanceof Error?e.message:String(e)})})},onReconnecting:(e,t)=>{c9.info(`Leader tray reconnecting`,{attempt:e,lastError:t})},onReconnected:e=>{c9.info(`Leader tray reconnected`,{trayId:e.trayId}),u(e)},onReconnectGaveUp:(e,t)=>{c9.error(`Leader tray reconnect gave up`,{lastError:e,attempts:t})}});let o=e.onAgentEvent(e=>a.broadcastEvent(e)),s=[],c=new A7(c9,{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){c9.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){c9.error(`Failed to broadcast follower lists`,{error:e instanceof Error?e.message:String(e)})}},t));function u(t){let n=e._historyOverride??tie();if(n)try{let e=Br(n.href,t.workerBaseUrl,t.trayId);e!==n.href&&n.replaceState(null,``,e)}catch(e){c9.debug(`URL bar update skipped`,{error:e instanceof Error?e.message:String(e)})}}return r.start().then(e=>{u(e)}).catch(e=>{c9.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()),ii()},leader:r,peers:i,sync:a}}function tie(){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 u9(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)}}function nie(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)}}}var rie=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}],d9=`chat`,iie=new Set(rie.map(e=>e.id));function aie(e){return iie.has(e)}var oie=`slicc-electron-overlay:close`;function sie(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`:lie(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function cie(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function f9(e){try{let t=new URL(e).searchParams.get(`tab`);return t&&aie(t)?t:d9}catch{return d9}}function lie(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function uie(e){return typeof e==`object`&&!!e&&`type`in e&&e.type===`slicc-electron-overlay:set-tab`}function p9(e){return e.toLowerCase().endsWith(hx)}function die(e){return Array.from(e).find(e=>p9(e.name))??null}function m9(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 fie(e){if(!e)return null;if(e.files){let t=die(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&&p9(e.name))return e}return null}function pie(e){if(!e)return[];let t=[],n=new Set,r=e=>{!e||n.has(e)||p9(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}var h9=d(`sprinkle-icon`),mie=`<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">`,hie=`</svg>`,g9=null;function gie(){return g9||=o(()=>Promise.resolve().then(()=>T0).then(e=>e.icons),void 0),g9}function _ie(e){return e.split(`-`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function _9(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`)}function vie(e){return`${mie}${e.map(([e,t])=>{let n=Object.entries(t).filter(([,e])=>e!==void 0).map(([e,t])=>`${e}="${_9(t)}"`);return n.length?`<${e} ${n.join(` `)}/>`:`<${e}/>`}).join(``)}${hie}`}async function yie(e){let t=_ie(e),n=(await gie())[t];return n?vie(n):null}function bie(e){return/^\s*<svg\b/i.test(e)}function xie(e){return/^data:/i.test(e)}function Sie(e){return e.startsWith(`/`)}function v9(e){return/\.(svg|png|jpe?g|webp|gif|ico)$/i.test(e)}function Cie(e){return/^[a-z][a-z0-9-]*$/.test(e)}function y9(e){return`<img src="${_9(e)}" width="16" height="16" alt="" style="display:block;width:16px;height:16px;object-fit:contain"/>`}async function b9(e,t){if(!e)return null;if(bie(e))return y9(x9(e));if(xie(e))return y9(e);if(Sie(e)&&t){try{if(v9(e)&&e.toLowerCase().endsWith(`.svg`)){let n=await t.readFile(e,{encoding:`utf-8`}),r=S9(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));return r?y9(x9(r)):null}if(v9(e)){let n=await t.readFile(e,{encoding:`binary`}),r=n instanceof Uint8Array?n:new Uint8Array;return y9(`data:${wie(e)};base64,${C9(r)}`)}let n=await t.readFile(e,{encoding:`utf-8`}),r=S9(typeof n==`string`?n:new TextDecoder(`utf-8`).decode(n));if(r)return y9(x9(r))}catch(t){h9.warn(`Failed to read sprinkle icon from VFS`,{path:e,error:t instanceof Error?t.message:String(t)})}return null}if(Cie(e)){let t=await yie(e);if(t)return t;h9.warn(`Unknown Lucide icon name`,{spec:e})}return null}function x9(e){return`data:image/svg+xml;base64,${C9(new TextEncoder().encode(e))}`}function S9(e){let t=e.match(/<svg\b[\s\S]*?<\/svg>/i);return t?t[0]:null}function wie(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 C9(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 Tie=[`/shared/sprinkles`],Eie=new Set([`welcome`,`connect-llm`]);async function Die(e){let t=new Map;for(let n of Tie)await e.exists(n)&&await w9(e,n,t);return await w9(e,`/`,t),t}async function w9(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=Oie(r);if(!Eie.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:kie(i,t),autoOpen:Aie(i),icon:jie(i)})}}}function Oie(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function kie(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 Aie(e){return/data-sprinkle-autoopen\b/.test(e)}function jie(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=Mie(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=T9(i,`href`);if(a!==void 0)return a.trim()}let r=T9(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function Mie(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 T9(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var Nie=e({SprinkleManager:()=>N9,readOpenSprinklesFromUrl:()=>k9,writeOpenSprinklesToUrl:()=>A9}),E9=d(`sprinkle-manager`),D9=`slicc-open-sprinkles`,O9=`sprinkles`;function k9(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(O9);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function A9(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(O9):t.searchParams.set(O9,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var j9=`slicc-known-sprinkles`,M9=`slicc-autoopened-once`,Pie=[`/workspace`,`/shared`,`/scoops`],Fie=250,N9=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=Qn(),n=Zn();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 LS(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&&E9.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}async restoreOpenSprinkles(){try{let e=k9();if(e!==null){for(let t of e)try{await this.open(t)}catch{E9.warn(`Failed to restore sprinkle`,{name:t})}return}else{let e=localStorage.getItem(D9);if(e)try{let t=JSON.parse(e);for(let e of t)try{await this.open(e)}catch{E9.warn(`Failed to restore sprinkle`,{name:e})}}finally{try{localStorage.removeItem(D9)}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{E9.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),E9.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{E9.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(j9);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(j9,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(M9);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(M9,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(D9,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,A9([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<Fie))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)){E9.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),E9.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{E9.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),E9.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{E9.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 Die(this.fs),E9.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){E9.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){E9.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){E9.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){E9.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 rC(o,this.bridge.createAPI(e));await s.render(a,e),this.openSprinkles.get(e).renderer=s,this.persistOpenSprinkles(),e6(e),E9.info(`Sprinkle opened`,{name:e,title:r.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),E9.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){E9.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(),E9.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),E9.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=>{E9.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150)},r=Pie.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){E9.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){E9.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}},Iie=100,P9=6,F9=null,I9=null,L9=null;function Lie(){return F9||(F9=document.createElement(`div`),F9.className=`s2-tooltip`,document.body.appendChild(F9)),F9}function Rie(e){let t=e.getAttribute(`data-tooltip`);if(!t)return;let n=Lie();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-P9,s=r.left+r.width/2-i.width/2):a===`right`?(o=r.top+r.height/2-i.height/2,s=r.right+P9):a===`left`?(o=r.top+r.height/2-i.height/2,s=r.left-i.width-P9):(o=r.bottom+P9,s=r.left+r.width/2-i.width/2),a===`bottom`&&o+i.height>window.innerHeight-4?o=r.top-i.height-P9:a===`top`&&o<4?o=r.bottom+P9:a===`left`&&s<4?s=r.right+P9:a===`right`&&s+i.width>window.innerWidth-4&&(s=r.left-i.width-P9),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 R9(){I9&&=(clearTimeout(I9),null),L9=null,F9?.classList.remove(`s2-tooltip--visible`)}function zie(){document.addEventListener(`pointerover`,e=>{let t=e.target.closest?.(`[data-tooltip]`);t&&t===L9||(R9(),t&&(L9=t,I9=setTimeout(()=>Rie(t),Iie)))},!0),document.addEventListener(`pointerout`,e=>{if(!L9)return;let t=e.relatedTarget;t&&L9.contains(t)||R9()},!0),document.addEventListener(`pointerdown`,R9,!0)}var z9=d(`welcome-sentinel`),Bie=`/shared/.welcomed`;function Vie(e){if(!e.isWriter){z9.info(`Welcome sentinel write skipped (OPFS follower — read-only tab)`);return}e.writableFs.writeFile(Bie,`1`).catch(e=>z9.warn(`Failed to persist welcome completion marker`,e))}var $=d(`main`);function B9(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}}var V9=new Set([`first-run`,`onboarding-complete`,`onboarding-complete-with-provider`,`shortcut-migrate`]),H9=`slicc:welcome-flow-fired`;function U9(){try{let e=typeof localStorage<`u`?localStorage.getItem(H9):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 W9(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(H9,JSON.stringify([...e]))}catch{}}function G9(e,t,n,r){if(V9.has(e)&&t.has(e)){$.debug(`Suppressing duplicate welcome lick (${r})`,{action:e});return}V9.has(e)&&(t.add(e),W9(t)),n()}var K9=`slicc-pending-mount`,q9=`pendingMount`,J9=new Set([`welcome`]);function Y9(){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 X9(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),$.info(`Loaded UI fixture session for design iteration`)}async function Hie(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(K9,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,q9),await new Promise(e=>n.oncomplete=()=>e()),t.close()}async function Z9(e){let t;try{t=await new Promise((e,t)=>{let n=indexedDB.open(K9,1);n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}catch{return}let n=t.transaction(`handles`,`readwrite`),r=await new Promise(e=>{let t=n.objectStore(`handles`).get(q9);t.onsuccess=()=>e(t.result),t.onerror=()=>e(void 0)});if(r){n.objectStore(`handles`).delete(q9),await new Promise(e=>n.oncomplete=()=>e());let t=`/mnt/${r.name}`,i=fn.fromHandle(r,{mountId:pn()});await e.mount(t,i),$.info(`Mounted folder from welcome onboarding`,{name:r.name,path:t})}t.close()}function Uie(){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 Wie(){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 Gie(e,t,n,r){let i=Uie(),a=0,o=!1,s=()=>{a=0,o||i.hide()};window.addEventListener(`dragenter`,e=>{m9(e.dataTransfer)&&(e.preventDefault(),a+=1,o||i.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragover`,e=>{m9(e.dataTransfer)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),o||i.show(`Drop files`,`.skill archives install; other files attach to chat.`))}),window.addEventListener(`dragleave`,()=>{a!==0&&(a=Math.max(0,a-1),a===0&&!o&&i.hide())}),window.addEventListener(`dragend`,s),window.addEventListener(`blur`,s),window.addEventListener(`drop`,async c=>{let l=fie(c.dataTransfer),u=pie(c.dataTransfer);if(!l&&u.length===0){s();return}if(c.preventDefault(),a=0,l&&o){i.hide(),t(`Another .skill installation is already in progress.`,`error`);return}if(u.length>0&&r)try{await r(u)}catch(e){t(`Failed to attach dropped files: ${e instanceof Error?e.message:String(e)}`,`error`)}if(l){o=!0,i.show(`Installing skill…`,l.name);try{let r=await ane(e,l);await n(),t(`Installed "${r.skillName}" to ${r.destinationPath} (${r.fileCount} files).`,`success`)}catch(e){t(`Failed to install dropped skill: ${e instanceof Error?e.message:String(e)}`,`error`)}finally{o=!1,i.hide()}}else i.hide()})}async function Kie(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 Q9(e,t,n){if(await Ci())return;let r=e?await Kie(e):{},{getSelectedModelId:i,getProviderConfig:a,getProviderModels:s}=await o(async()=>{let{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}=await Promise.resolve().then(()=>a6);return{getSelectedModelId:e,getProviderConfig:t,getProviderModels:n}},void 0),c=(()=>{try{return i()||null}catch{return null}})(),l=(()=>{if(!c)return null;try{return s(t).find(e=>e.id===c)?.name??c}catch{return c}})(),u=null;try{u=a(t).name??null}catch{}n({action:`onboarding-complete-with-provider`,data:{profile:r,provider:t,providerName:u,model:c,modelLabel:l,validation:`preexisting`}})}async function $9(e,t){let n=t?.detached===!0,{OffscreenClient:r}=await o(async()=>{let{OffscreenClient:e}=await import(`./offscreen-client-COoBiM3s.js`);return{OffscreenClient:e}},__vite__mapDeps([31,14])),{VirtualFS:i,resolveVfsBackendFromEnv:a}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>mx);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{publishAgentBridgeProxy:s}=await o(async()=>{let{publishAgentBridgeProxy:e}=await import(`./agent-bridge-vLL7l0eP.js`);return{publishAgentBridgeProxy:e}},__vite__mapDeps([32,14])),{installPanelSudoResponder:l}=await o(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-CIHDm0m0.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([33,14])),{warnIfPanelVfsConstructionUnderOpfs:u}=await o(async()=>{let{warnIfPanelVfsConstructionUnderOpfs:e}=await import(`./panel-vfs-guard-1E455_lR.js`);return{warnIfPanelVfsConstructionUnderOpfs:e}},[]),d=new x7(e,!n);await d.panels.chat.initSession(`session-cone`),s(),l();let f=null,p=a();u(p,$);let m=p===`opfs`,h=await i.create({dbName:`slicc-fs`,...m?{backend:`memory`}:{}});m||(d.panels.fileBrowser.setFs(h),$.info(`File browser wired to shared VFS (local IndexedDB)`)),Kn().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await Jn(e,h,$);t.length!==0&&$.warn(`Some mounts could not be recovered in the panel VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>$.warn(`Failed to restore persisted mounts in panel VFS`,e));let g=h;u9({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>g,logger:$}),Gie(h,Wie(),async()=>{await d.panels.fileBrowser.refresh()},e=>d.panels.chat.addAttachmentsFromFiles(e));{let{registerSessionCostsProvider:e}=await o(async()=>{let{registerSessionCostsProvider:e}=await import(`./cost-command-KwOQHe5T.js`);return{registerSessionCostsProvider:e}},[]);e(()=>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??[])})}))}let v,x=new Set,S=async e=>{f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid),d.setScoopSwitcherSelected?.(e.jid),d.panels.scoops.setSelectedJid(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await d.panels.chat.switchToContext(t,!e.isCone,n),v.requestScoopMessages(e.jid),v.isProcessing(e.jid)&&d.panels.chat.setProcessing(!0),T(e)};v=new r({onStatusChange:(e,t)=>{d.panels.scoops.updateScoopStatus(e,t),d.updateScoopSwitcherStatus?.(e,t),f?.jid===e&&(d.setAgentProcessing(t===`processing`),t===`processing`?d.panels.chat.setProcessing(!0):t===`ready`&&d.panels.chat.setProcessing(!1))},onScoopCreated:e=>{d.panels.scoops.refreshScoops(),d.refreshScoopSwitcher?.(),f||(f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid))},onScoopListUpdate:()=>{let e=new Set(v.getScoops().map(e=>e.folder));for(let t of x)e.has(t)||d.panels.chat.deleteSessionById(`session-${t}`);if(x=e,d.panels.scoops.refreshScoops(),d.refreshScoopSwitcher?.(),!f){let e=v.getScoops().find(e=>e.isCone);e&&(f=e,v.setSelectedScoopJid(e.jid),d.panels.memory.setSelectedScoop(e.jid))}},onIncomingMessage:(e,t)=>{if(P0(t.channel)){let n=new Date(t.timestamp).getTime(),r=t.channel;if(f?.jid===e)d.panels.chat.addLickMessage(t.id,t.content,r,n);else{let i=v.getScoops().find(t=>t.jid===e),a=i?.isCone?`session-cone`:i?`session-${i.folder}`:`session-${e}`;d.panels.chat.persistLickToSession(a,{id:t.id,content:t.content,channel:r,timestamp:n})}return}if(f?.jid===e){let e=t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content;d.panels.chat.addUserMessage(e,t.attachments)}},onScoopMessagesReplaced:(e,t)=>{f?.jid===e&&d.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{f?.jid===e&&d.panels.chat.setCompactionState(t)},onReady:async()=>{try{$.info(`Offscreen engine ready, scoop count:`,v.getScoops().length);let e=window.localStorage.getItem(jr);e&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`refresh-tray-runtime`,joinUrl:e,workerBaseUrl:window.localStorage.getItem(Ar)}}).catch(()=>{});let t=f??v.getScoops().find(e=>e.isCone)??v.getScoops()[0];t&&(f=t,v.setSelectedScoopJid(t.jid),await S(t))}catch(e){$.error(`Failed to initialize on ready`,{error:e instanceof Error?e.message:String(e)})}}}),chrome.runtime.onMessage.addListener(e=>(!re(e)||e.source!==`service-worker`||e.payload.type!==`detached-active`||n||lne(v,d),!1)),n&&chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-claim`}}).catch(()=>{}),n||(d.setShowPopoutButton(!0),d.setPopoutClickHandler(()=>{chrome.runtime.sendMessage({source:`panel`,payload:{type:`detached-popout-request`}}).catch(e=>{console.warn(`[slicc] detached-popout-request failed`,e),d.resetPopoutButton()})})),v.setLocalFS(h);let C=h;if(m){let{createRemoteVfsClient:e}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([34,35])),{createRemoteWritableVfsClient:t}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([36,35])),n=e({transport:v.getTransport()}),r=t({transport:v.getTransport()});d.panels.fileBrowser.setFs(n),g=n,C=r,$.info(`File browser + preview-vfs wired to worker VFS RPC`)}(async()=>{try{let{RemoteTerminalView:e}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-CCGG0JAl.js`);return{RemoteTerminalView:e}},__vite__mapDeps([37,1,29,4,14,30,38,39,40])),{fetchSecretEnvVars:t}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([41,14])),n=await t(),r=new e({client:v,cwd:`/`,env:Object.keys(n).length>0?n:void 0});await d.panels.terminal.mountRemoteShell(r),window.addEventListener(`beforeunload`,()=>r.dispose(),{once:!0}),$.info(`Panel terminal mounted as RemoteTerminalView (offscreen TerminalSessionHost)`)}catch(e){$.warn(`Failed to mount remote terminal view`,e)}})(),d.panels.chat.setAttachmentWriter(bx(h));let w=v.createAgentHandle();d.panels.chat.setAgent(w),d.panels.scoops.setOrchestrator(v),d.panels.memory.setOrchestrator(v),d.setScoopSwitcherOrchestrator?.(v),d.setScoopSwitcherTranscriptSource?.(e=>v.getScoopTranscript(e)),d.setScoopsRailTranscriptSource?.(e=>v.getScoopTranscript(e)),d.onScoopSelect=S;let T=e=>{let t=e.config?.modelId,n=t?a8(t):o8();d.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),d.panels.chat.setThinkingLevel(e.config?.thinkingLevel)};d.onModelChange=e=>{localStorage.setItem(`selected-model`,e),v.updateModel(),f&&T(f)},d.onThinkingLevelChange=e=>{f&&v.setScoopThinkingLevel(f.jid,e)},d.onModelsRefreshed=()=>{f&&T(f)},d.onClearChat=async e=>{if(e?.freeze===`quick`)try{await E7({vfs:C})}catch(e){$.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await T7({vfs:C})}catch(e){$.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else $.info(`New session: freezer skipped (long-press)`);await d.panels.chat.deleteSessionById(`session-cone`),await v.clearAllMessages()},d.onClearFilesystem=async()=>{v.clearFilesystem()};let{OnboardingOrchestrator:ee}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-DaF0PzJJ.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([42,14])),E=TC,{getAvailableProviders:D,getProviderConfig:te,getProviderModels:ne,addAccount:ie,setSelectedModelId:O,getAccounts:ae,isModelHiddenFromPicker:k,providerOffersLlmModels:oe}=await o(async()=>{let{getAvailableProviders:e,getProviderConfig:t,getProviderModels:n,addAccount:r,setSelectedModelId:i,getAccounts:a,isModelHiddenFromPicker:o,providerOffersLlmModels:s}=await Promise.resolve().then(()=>a6);return{getAvailableProviders:e,getProviderConfig:t,getProviderModels:n,addAccount:r,setSelectedModelId:i,getAccounts:a,isModelHiddenFromPicker:o,providerOffersLlmModels:s}},void 0),{createSprinkleDeviceCodePrompter:A,resolveDeviceCodeDecision:se}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),j=()=>{let e=D().filter(e=>oe(e)),t=e.map(e=>{let t=te(e);return{id:t.id,name:t.name,description:t.description,requiresApiKey:t.requiresApiKey??!0,requiresBaseUrl:t.requiresBaseUrl??!1,requiresDeployment:!!t.requiresDeployment,requiresApiVersion:!!t.requiresApiVersion,apiKeyPlaceholder:t.apiKeyPlaceholder??void 0,apiKeyEnvVar:t.apiKeyEnvVar??void 0,defaultBaseUrl:t.baseUrlPlaceholder??void 0,baseUrlDescription:t.baseUrlDescription??void 0,deploymentPlaceholder:t.deploymentPlaceholder??void 0,deploymentDescription:t.deploymentDescription??void 0,apiVersionDefault:t.apiVersionDefault??void 0,apiVersionDescription:t.apiVersionDescription??void 0,isOAuth:!!t.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),n={};for(let t of e)try{n[t]=ne(t).filter(e=>!k(e.id)).map(e=>({id:e.id,name:e.name}))}catch{n[t]=[]}return{providers:t,models:n}},ce=null,M=()=>ce||(ce=new ee({fs:h,postSystemMessage:e=>d.panels.chat.addSystemMessage(e),postDipReference:e=>d.panels.chat.addSystemMessage(e),getProviderCatalogue:j,saveAccount:(e,t,n,r,i)=>ie(e,t,n,r,i),setSelectedModel:e=>O(e),resolveModelLabel:(e,t)=>{try{return ne(e).find(e=>e.id===t)?.name??null}catch{return null}},broadcastToDip:e=>E(e),fireFinalLick:e=>{O7(v),G9(String(e?.action??``),N,()=>v.sendSprinkleLick(`welcome`,e),`orchestrator-ext`)},launchOAuth:async(e,t)=>{try{let n=te(e);if(!n.isOAuth||!n.onOAuthLogin&&!n.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(n.requiresBaseUrl&&t&&ie(e,``,t),n.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CT8xGVIF.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 n.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:A({broadcastToDip:E})})}else if(n.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CT8xGVIF.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await n.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:k7(e,n,ne,k)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}}),ce),N=U9(),le=e=>{if(e.type!==`sprinkle`)return!1;let t=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(t&&V9.has(t)){if(N.has(t))return $.debug(`Suppressing duplicate welcome lick (ext)`,{action:t}),!0;N.add(t),W9(N)}if(!(t===`first-run`||t===`onboarding-complete`||t===`connect-ready`||t===`connect-attempt`||t===`oauth-attempt`||t===`device-code-decision`||t===`shortcut-migrate`))return!1;let n=e.body,r=t;if(r===`device-code-decision`){let e=n?.data?.decision;return se(e===`cancel`?`cancel`:`continue`),!0}if(r===`first-run`)return M().handleFirstRun(),!0;if(r===`onboarding-complete`){let e=M(),t=n?.data??{};return t.mountWorkspace&&Z9(h).catch(e=>$.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(t).catch(e=>$.warn(`OnboardingOrchestrator failed`,e)),!0}if(r===`connect-ready`){let e=ae();if(e.length>0){let t=e[0],n=(()=>{try{return te(t.providerId)}catch{return null}})();return E({type:`slicc-already-connected`,provider:t.providerId,note:n?.name?`Already connected to ${n.name}.`:`Already connected.`}),Q9(h,t.providerId,e=>{G9(String(e.action??``),N,()=>v.sendSprinkleLick(`welcome`,e),`fast-forward-ext`)}).catch(e=>$.warn(`Failed to fire fast-forward final lick`,e)),!0}return M().handleConnectReady(),!0}if(r===`connect-attempt`){let e=n?.data;return e&&M().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=>$.warn(`handleConnectAttempt failed`,e)),!0}if(r===`oauth-attempt`){let e=n?.data;return e&&M().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>$.warn(`handleOAuthAttempt failed`,e)),!0}return r===`shortcut-migrate`?(h.writeFile(`/shared/.welcomed`,`1`).catch(e=>$.warn(`Failed to persist welcome completion marker`,e)),!0):!1};d.panels.chat.onDipLick=(e,t)=>{le({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}})||v.sendSprinkleLick(`inline`,{action:e,data:t})};let P=new N9(m?er({reader:C,writer:C}):h,async e=>{if(e.type===`sprinkle`){if(le(e)){e.body?.action===`shortcut-migrate`&&P.close(`welcome`);return}if(e.sprinkleName===`welcome`&&e.body?.action===`request-mount`){try{let e=await y();if(e.cancelled){P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}if(e.error){$.warn(`Mount picker popup failed`,e.error),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}if(!e.handleInIdb||typeof e.idbKey!=`string`){$.warn(`Mount picker popup returned unexpected result`,e),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}let t=await b(e.idbKey);if(!t){$.warn(`Mount picker popup did not store a handle`),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`});return}await _(t),await Hie(t),P.sendToSprinkle(`welcome`,{action:`mount-complete`,dirName:t.name})}catch(e){$.warn(`Mount picker failed`,e),P.sendToSprinkle(`welcome`,{action:`mount-cancelled`})}return}v.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,n,r,i)=>d.addSprinkle(e,t,n,r,i),removeSprinkle:e=>d.removeSprinkle(e),minimizeSprinkle:e=>d.minimizeSprinkle(e),registerSprinkle:(e,t,n)=>d.registerSprinkle(e,t,n?.icon,n?.zone),unregisterSprinkle:e=>d.unregisterSprinkle(e),closeSprinkleContent:e=>d.closeSprinkleContent(e)},()=>{let e=v.getScoops().find(e=>e.isCone);e&&v.stopScoop(e.jid)},{autoOpenBehavior:`attention`,onAttachImage:(e,t,n)=>d.panels.chat.addImageAttachment(e,t,n),inlineSprinkles:J9,execHandler:B9(v)});window.__slicc_sprinkleManager=P,DC(B9(v)),window.__slicc_reloadSkills=()=>(chrome.runtime.sendMessage({source:`panel`,payload:{type:`reload-skills`}}),Promise.resolve()),v.setSprinkleOpHandler(e=>{let{id:t,op:n,name:r,data:i}=e;console.log(`[main-ext] sprinkle-op handler called`,{id:t,op:n,name:r}),(async()=>{try{let e;switch(n){case`list`:await P.refresh(),e=P.available();break;case`opened`:e=P.opened();break;case`refresh`:await P.refresh(),e=P.available().length;break;case`open`:await P.open(r),e=!0;break;case`close`:P.close(r),e=!0;break;case`send`:P.sendToSprinkle(r,i),e=!0;break;case`openNewAutoOpen`:await P.openNewAutoOpenSprinkles(),e=!0;break}console.log(`[main-ext] sprinkle-op response sending`,{id:t,op:n,result:typeof e}),chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,result:e}}).catch(()=>{})}catch(e){chrome.runtime.sendMessage({source:`panel`,payload:{type:`sprinkle-op-response`,id:t,error:e instanceof Error?e.message:String(e)}}).catch(()=>{})}})()}),await P.refresh(),d.onSprinkleClose=e=>P.close(e),d.onSprinkleActivate=e=>{P.activate(e)},d.getAvailableSprinkles=()=>[],d.onOpenSprinkle=(e,t)=>P.open(e,t),d.resolveSprinkleIcon=e=>b9(e,h),d.updateAddButtons(),await P.restoreOpenSprinkles();let{PanelFollowerSprinkleProxy:ue}=await o(async()=>{let{PanelFollowerSprinkleProxy:e}=await import(`./follower-sprinkle-bridge-Dh5KLkU1.js`);return{PanelFollowerSprinkleProxy:e}},[]),{SprinkleFollowerController:de}=await o(async()=>{let{SprinkleFollowerController:e}=await Promise.resolve().then(()=>Jre);return{SprinkleFollowerController:e}},void 0),fe={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)||$.error(`Panel → offscreen sendMessage failed`,{error:t})})}},pe={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)}},me=null;me=new de({sync:new ue(fe,pe,{onSprinklesList:e=>void me?.updateAvailable(e),onSprinkleUpdate:(e,t)=>me?.handleSprinkleUpdate(e,t)}),addSprinkle:(e,t,n,r,i)=>d.addSprinkle(e,t,n,r,i),removeSprinkle:e=>d.removeSprinkle(e)});let he=rw({sender:{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)||$.error(`Panel → offscreen sendMessage failed (leader)`,{error:t})})}},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:P,client:v,chat:d.panels.chat,log:$});if(window.addEventListener(`beforeunload`,()=>he.dispose(),{once:!0}),!h.getWatcher()){let{FsWatcher:e}=await o(async()=>{let{FsWatcher:e}=await Promise.resolve().then(()=>mx);return{FsWatcher:e}},void 0);h.setWatcher(new e)}let ge=h.getWatcher();ge&&P.setupWatcher(ge),!await h.exists(`/shared/.welcomed`)&&localStorage.getItem(`slicc-welcomed`)&&(await h.writeFile(`/shared/.welcomed`,`1`).catch(()=>{}),localStorage.removeItem(`slicc-welcomed`)),Rr(window.localStorage)||xi(h).then(e=>{e.isFirstRun&&(N.has(`first-run`)&&($.info(`Clearing stale welcome dedup entry — install state is fresh`),N.delete(`first-run`),W9(N)),N.add(`first-run`),W9(N),M().handleFirstRun())}).catch(e=>$.warn(`Welcome detection failed`,e)),$.info(`SprinkleManager initialized (extension mode)`),v.requestState(),$.info(`Extension UI connected to offscreen agent engine`);let{installNukeReloadListener:_e}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-DoN_uwQe.js`);return{installNukeReloadListener:e}},[]);_e(),Y9()&&await X9(d.panels.chat),Q3().catch(()=>{}),D7(C)}async function qie(e,t){let n=t===`electron-overlay`;$.info(`starting standalone with kernel worker`);let{spawnKernelWorker:r}=await o(async()=>{let{spawnKernelWorker:e}=await import(`./spawn-9zPQFWZe.js`);return{spawnKernelWorker:e}},__vite__mapDeps([43,31,14])),{installPageStorageSync:i}=await o(async()=>{let{installPageStorageSync:e}=await import(`./page-storage-sync-BMnuL0eG.js`);return{installPageStorageSync:e}},[]),{VirtualFS:a,resolveVfsBackendFromEnv:s}=await o(async()=>{let{VirtualFS:e,resolveVfsBackendFromEnv:t}=await Promise.resolve().then(()=>mx);return{VirtualFS:e,resolveVfsBackendFromEnv:t}},void 0),{BrowserAPI:l}=await o(async()=>{let{BrowserAPI:e}=await import(`./cdp-D_MSzfiR.js`);return{BrowserAPI:e}},__vite__mapDeps([44,1,14])),{installSudoTestHook:u}=await o(async()=>{let{installSudoTestHook:e}=await import(`./sudo-CIHDm0m0.js`);return{installSudoTestHook:e}},__vite__mapDeps([33,14]));u();let{createMigrationSplash:d}=await o(async()=>{let{createMigrationSplash:e}=await import(`./migration-splash-D-cAt2r9.js`);return{createMigrationSplash:e}},[]),f=await Kr(),p=cie(n?`electron-overlay`:`standalone`,f!==null)?Mr:null;await Wr({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:p,runtimeConfigFetcher:async()=>f});let m=new x7(e,n);if(n){let e=f9(window.location.href);m.setActiveTab(e),window.parent===window?m.setShowElectronOverlayClose(null):m.setShowElectronOverlayClose(()=>{window.parent.postMessage({type:oie},`*`)});let t=document.createElement(`style`);t.id=`slicc-electron-overlay-runtime-style`,t.textContent=`
|
|
1786
1786
|
#app > .tab-bar { display: none !important; }
|
|
1787
1787
|
#app > .tab-content {
|
|
1788
1788
|
height: calc(100vh - var(--s2-header-height));
|
|
@@ -1790,7 +1790,7 @@ Long press — discard without saving`),n.setAttribute(`label`,`New session. Cli
|
|
|
1790
1790
|
#app > .tab-content > .tab-content__panel {
|
|
1791
1791
|
height: 100%;
|
|
1792
1792
|
}
|
|
1793
|
-
`,document.head.appendChild(t),window.addEventListener(`message`,e=>{e.source===window.parent&&lie(e.data)&&m.setActiveTab(f9(`http://localhost/?tab=${e.data.tab??``}`))}),window.addEventListener(`keydown`,e=>{e.code===`Semicolon`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat&&(e.preventDefault(),e.stopPropagation(),window.parent.postMessage({type:`slicc-electron-overlay:toggle`},`*`))},!0)}await m.panels.chat.initSession(`session-cone`),$.info(`Session initialized (kernel-worker mode)`);let h=s()===`opfs`,g=await a.create({dbName:`slicc-fs`,...h?{backend:`memory`}:{}});h||m.panels.fileBrowser.setFs(g);let _={isLeader:!0,dispose:()=>{}};if(h){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}},[]),n=await e({logger:$});_={isLeader:n.isLeader,dispose:n.dispose},globalThis.__slicc_opfs_leader={isLeader:n.isLeader,self:n.self,leader:n.leader},n.isLeader?$.info(`OPFS leader election: this tab is the writer`,{tabId:n.self.tabId}):($.warn(`OPFS leader election: another tab is the writer; entering read-only mode`,{self:n.self.tabId,leader:n.leader?.tabId}),t({leaderTabId:n.leader?.tabId}))}Kn().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await Jn(e,g,$);t.length!==0&&$.warn(`Some mounts could not be recovered in the page VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>$.warn(`Failed to restore persisted mounts in page VFS`,e));let v=g;u9({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>v,logger:$});let y,b,x;if(t===`cherry`){let{setupCherryFollower:e}=await o(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-_7zmLxgg.js`);return{setupCherryFollower:e}},__vite__mapDeps([45,44,1,14])),t=await e();y=t.browser,b=t.joinUrl,x=t.transport}else{y=new l;try{await y.connect()}catch(e){$.warn(`Initial CDP connect failed; worker-forwarded commands will retry on demand`,e instanceof Error?e.message:String(e))}}let S=y.getTransport();globalThis.__slicc_browser=y;let C=null,w,T=e=>{let t=e.config?.modelId,n=t?a8(t):o8();m.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),m.panels.chat.setThinkingLevel(e.config?.thinkingLevel)},ee=async e=>{C=e,w.setSelectedScoopJid(e.jid),m.panels.scoops.setSelectedJid(e.jid),m.panels.memory.setSelectedScoop(e.jid),m.setScoopSwitcherSelected?.(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await m.panels.chat.switchToContext(t,!e.isCone,n),w.requestScoopMessages(e.jid),w.isProcessing(e.jid)&&m.panels.chat.setProcessing(!0),T(e)},E=typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,{OffscreenClient:D}=await o(async()=>{let{OffscreenClient:e}=await import(`./offscreen-client-Bn2ErFJg.js`);return{OffscreenClient:e}},__vite__mapDeps([31,14])),te=null,ne=()=>{te?.disarm()},re=r({realCdpTransport:S,instanceId:E,onMigrationStart:()=>{te||=d({root:document.body,logger:$}),te.arm()},onMigrationProgress:e=>{te||(te=d({root:document.body,logger:$}),te.arm()),te.updateProgress(e)},onMigrationFinish:()=>{ne()},callbacks:{onStatusChange:(e,t)=>{m.panels.scoops.updateScoopStatus(e,t),m.updateScoopSwitcherStatus?.(e,t),C?.jid===e&&(m.setAgentProcessing(t===`processing`),t===`processing`?m.panels.chat.setProcessing(!0):t===`ready`&&m.panels.chat.setProcessing(!1))},onScoopCreated:e=>{m.panels.scoops.refreshScoops(),m.refreshScoopSwitcher?.(),C||ee(e)},onScoopListUpdate:()=>{m.panels.scoops.refreshScoops(),m.refreshScoopSwitcher?.()},onIncomingMessage:(e,t)=>{C?.jid===e&&t.channel!==`web`&&P0(t.channel)&&m.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())},onScoopMessagesReplaced:(e,t)=>{C?.jid===e&&m.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{C?.jid===e&&m.panels.chat.setCompactionState(t)},onReady:()=>{$.info(`Kernel worker ready, scoop count:`,w.getScoops().length);let e=w.getScoops().find(e=>e.isCone);e&&!C&&ee(e)}}});w=re.client,m.panels.scoops.setOrchestrator(w),m.panels.memory.setOrchestrator(w),m.setScoopSwitcherOrchestrator?.(w),m.setScoopSwitcherTranscriptSource?.(e=>w.getScoopTranscript(e)),m.setScoopsRailTranscriptSource?.(e=>w.getScoopTranscript(e)),m.onScoopSelect=ee,m.onClearChat=async()=>{await _r().catch(()=>{}),await new en().clearAll().catch(()=>{});let e=w.getScoops();for(let t of e){let e=t.isCone?`session-cone`:`session-${t.folder}`;await m.panels.chat.deleteSessionById(e)}w.clearAllMessages()},m.onModelChange=e=>{localStorage.setItem(`selected-model`,e),w.updateModel(),C&&T(C)},m.onThinkingLevelChange=e=>{C&&w.setScoopThinkingLevel(C.jid,e)},m.onModelsRefreshed=()=>{C&&T(C)},w.setLocalFS(g);let ie=g,O=g;if(h){let{createRemoteVfsClient:e}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([34,35])),t=e({transport:w.getTransport()});if(m.panels.fileBrowser.setFs(t),v=t,ie=t,_.isLeader){let{createRemoteWritableVfsClient:e}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([36,35]));O=e({transport:w.getTransport()}),$.info(`File browser + preview-vfs + writable freezer wired to worker VFS RPC (leader)`)}else $.info(`File browser + preview-vfs wired to worker VFS RPC (follower; freezer uses LFS shadow)`)}m.onClearChat=async e=>{if(h&&!_.isLeader){$.info(`New session affordance skipped (OPFS follower — read-only tab)`);return}if(e?.freeze===`quick`)try{await E7({vfs:O})}catch(e){$.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await T7({vfs:O})}catch(e){$.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else $.info(`New session: freezer skipped (long-press)`);await m.panels.chat.deleteSessionById(`session-cone`),await w.clearAllMessages()},m.onFrozenSessionOpen=e=>{(async()=>{try{let t=await ie.readFile(u7(e),{encoding:`utf-8`}),n=f7(typeof t==`string`?t:new TextDecoder().decode(t)),r=n.title||e.title;await m.panels.chat.displayFrozenSession({contextId:`frozen:${e.filename}`,messages:n.messages,title:r}),m.setThreadHeaderName(`❄ ${r}`),m.setActiveTab(`chat`)}catch(t){$.warn(`Failed to open frozen session`,{filename:e.filename,error:t instanceof Error?t.message:String(t)})}})()},m.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=o8().contextWindow??t}catch{}let n=e/t;m.setNewSessionGlow(n)};let ae=w.createAgentHandle();m.panels.chat.setAgent(ae),m.panels.chat.setAttachmentWriter(bx(g)),m.panels.chat.setDeleteQueuedMessageCallback(e=>{$.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)});try{await re.ready,$.info(`Worker boot handshake complete`)}catch(e){throw $.error(`Worker failed to signal ready`,e),ne(),e}w.requestState(),m.panels.scoops.setVfs(ie);let k=i({send:e=>w.sendRaw(e)}),oe=new Set([`setItem`,`removeItem`,`clear`]);for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);if(t!==null&&!oe.has(t)&&!t.includes(`\0`)){let e=localStorage.getItem(t);e!==null&&w.sendRaw({type:`local-storage-set`,key:t,value:e})}}let{SprinkleManager:A}=await o(async()=>{let{SprinkleManager:e}=await Promise.resolve().then(()=>Mie);return{SprinkleManager:e}},void 0),{installSprinkleManagerHandlerOverChannel:se}=await o(async()=>{let{installSprinkleManagerHandlerOverChannel:e}=await import(`./sprinkle-bridge-channel-gxatjtur.js`);return{installSprinkleManagerHandlerOverChannel:e}},[]),j=U9(),{OnboardingOrchestrator:ce}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-DbSXIbPW.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([42,14])),{addAccount:M,getAccounts:N,getAvailableProviders:le,getProviderConfig:P,getProviderModels:ue,isModelHiddenFromPicker:de,setSelectedModelId:fe,providerOffersLlmModels:pe}=await o(async()=>{let{addAccount:e,getAccounts:t,getAvailableProviders:n,getProviderConfig:r,getProviderModels:i,isModelHiddenFromPicker:a,setSelectedModelId:o,providerOffersLlmModels:s}=await Promise.resolve().then(()=>a6);return{addAccount:e,getAccounts:t,getAvailableProviders:n,getProviderConfig:r,getProviderModels:i,isModelHiddenFromPicker:a,setSelectedModelId:o,providerOffersLlmModels:s}},void 0),{createSprinkleDeviceCodePrompter:me,resolveDeviceCodeDecision:he}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),ge=null,_e,ve=()=>ge||(ge=new ce({fs:g,postSystemMessage:e=>m.panels.chat.addSystemMessage(e),postDipReference:e=>m.panels.chat.addSystemMessage(e),getProviderCatalogue:Pe,saveAccount:(e,t,n,r,i)=>M(e,t,n,r,i),setSelectedModel:e=>fe(e),resolveModelLabel:(e,t)=>{try{return ue(e).find(e=>e.id===t)?.name??null}catch{return null}},broadcastToDip:e=>TC(e),fireFinalLick:e=>{O7(w),G9(String(e?.action??``),j,()=>w.sendSprinkleLick(`welcome`,e),`orchestrator-worker`)},launchOAuth:async(e,t)=>{try{let n=P(e);if(!n.isOAuth||!n.onOAuthLogin&&!n.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(n.requiresBaseUrl&&t&&M(e,``,t),n.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CFSmb2Xq.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 n.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:me({broadcastToDip:e=>TC(e)})})}else if(n.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CFSmb2Xq.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await n.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:k7(e,n,ue,de)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}}),ge),ye=e=>{if(e.type!==`sprinkle`)return!1;let t=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(t&&V9.has(t)){if(j.has(t))return $.debug(`Suppressing duplicate welcome lick (worker)`,{action:t}),!0;j.add(t),W9(j)}if(!(t===`first-run`||t===`onboarding-complete`||t===`connect-ready`||t===`connect-attempt`||t===`oauth-attempt`||t===`device-code-decision`||t===`shortcut-migrate`))return!1;let n=e.body,r=t;if(r===`device-code-decision`){let e=n?.data?.decision;return he(e===`cancel`?`cancel`:`continue`),!0}if(r===`first-run`)return ve().handleFirstRun(),!0;if(r===`onboarding-complete`){let e=ve(),t=n?.data??{};return t.mountWorkspace&&Z9(g).catch(e=>$.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(t).catch(e=>$.warn(`OnboardingOrchestrator failed`,e)),!0}if(r===`connect-ready`){let e=N();if(e.length>0){let t=e[0],n=(()=>{try{return P(t.providerId)}catch{return null}})();return TC({type:`slicc-already-connected`,provider:t.providerId,note:n?.name?`Already connected to ${n.name}.`:`Already connected.`}),Q9(g,t.providerId,e=>{G9(String(e.action??``),j,()=>w.sendSprinkleLick(`welcome`,e),`fast-forward-worker`)}).catch(e=>$.warn(`Failed to fire fast-forward final lick`,e)),!0}return ve().handleConnectReady(),!0}if(r===`connect-attempt`){let e=n?.data;return e&&ve().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=>$.warn(`handleConnectAttempt failed`,e)),!0}if(r===`oauth-attempt`){let e=n?.data;return e&&ve().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>$.warn(`handleOAuthAttempt failed`,e)),!0}return r===`shortcut-migrate`?(Bie({writableFs:O,isWriter:!h||_.isLeader}),!0):!1};m.panels.chat.onDipLick=(e,t)=>{if(!ye({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}})){if(Se){let n=Se.currentSync;n?n.sendSprinkleLick(`inline`,{action:e,data:t}):$.warn(`Dip lick dropped: follower sync mid-reconnect`,{action:e});return}w.sendSprinkleLick(`inline`,{action:e,data:t})}},_e=new A(h?er({reader:ie,writer:O}):g,async e=>{if(e.type===`sprinkle`){if(ye(e)){e.body?.action===`shortcut-migrate`&&_e.close(`welcome`);return}e.sprinkleName&&w.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e),minimizeSprinkle:e=>m.minimizeSprinkle(e),registerSprinkle:(e,t,n)=>m.registerSprinkle(e,t,n?.icon,n?.zone),unregisterSprinkle:e=>m.unregisterSprinkle(e),closeSprinkleContent:e=>m.closeSprinkleContent(e)},()=>{let e=w.getScoops().find(e=>e.isCone);e&&w.stopScoop(e.jid)},{onAttachImage:(e,t,n)=>m.panels.chat.addImageAttachment(e,t,n),inlineSprinkles:J9,execHandler:B9(w)}),window.__slicc_sprinkleManager=_e,DC(B9(w));let be=se(_e,{instanceId:E}),xe=null,Se=null,Ce=typeof BroadcastChannel==`function`?new BroadcastChannel(Xn(E)):null,we=nie({getSync:()=>xe?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};Ce?.postMessage(t)}});w.setForwardLickHandler(e=>{let t=Se?.currentSync;t?t.forwardLick(e):$.warn(`forward-lick dropped: no active follower sync`)});let Te=e=>({workerBaseUrl:e,getMessages:()=>m.panels.chat.getMessages(),getScoopJid:()=>C?.jid??`cone`,getScoops:()=>w.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(_e.opened());return _e.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=_e.available().find(t=>t.name===e);if(!t)return null;try{let e=await g.readFile(t.path,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder(`utf-8`).decode(e)}catch{return null}},onSprinkleLick:(e,t,n,r)=>w.sendSprinkleLick(e,t,n,r),onForwardedLick:e=>w.sendForwardedLick(e),onFollowerMessage:(e,t,n)=>{m.panels.chat.addUserMessage(e,n),ae.sendMessage(e,t,n),xe?.sync.broadcastUserMessage(e,t,n)},onFollowerAbort:()=>ae.stop(),onFollowerCountChanged:e=>{let t=xe?.peers.getPeers()??[];window.localStorage.setItem(`slicc.leaderTrayFollowers`,JSON.stringify(t.map(e=>({runtimeId:e9(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))))},onRemoteTransportsCleaned:e=>we.cleanupRuntime(e),sendWebhookEvent:(e,t,n)=>w.sendWebhookEvent(e,t,n),onCherryHostEvent:(e,t,n)=>w.sendCherryHostEvent(e,t,n),onAgentEvent:e=>ae.onEvent(e),browserAPI:y,browserTransport:S,vfs:g}),Ee=e=>{db(()=>e.reset()),_e.setSendToSprinkleHook((t,n)=>e.sync.broadcastSprinkleUpdate(t,n)),m.panels.chat.setOnLocalUserMessage((t,n,r)=>e.sync.broadcastUserMessage(t,n,r))},De=()=>{db(null),m.panels.chat.setOnLocalUserMessage(void 0),_e.setSendToSprinkleHook(void 0),we.disposeAll()},Oe=async e=>{let{performTrayLeave:t}=await o(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-BhHEXpRy.js`);return{performTrayLeave:e}},[]);return await t({workerBaseUrl:e.workerBaseUrl,requestId:e.requestId},{getLeader:()=>xe,setLeader:e=>{xe=e},getFollower:()=>Se,setFollower:e=>{Se=e},startLeader:e=>l9(Te(e)),clearLeaderHooks:De,wireLeaderHooks:Ee,storage:window.localStorage,log:$})},{installPanelRpcHandler:ke,createPanelRpcEventEmitter:Ae}=await o(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await Promise.resolve().then(()=>oee);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:je}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-Bb_hIEUP.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([46,1,30,4])),Me=Ae({instanceId:E}),Ne=ke({instanceId:E,handlers:je({resetTray:async()=>{if(!xe)throw Error(`no active tray session to reset`);return await xe.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await Oe({workerBaseUrl:e,requestId:t}),emitEvent:(e,t)=>Me.emit(e,t),emitCherrySliccEvent:(e,t,n)=>xe?.sync.emitCherrySliccEvent(e,t,n)??!1,listRemoteTargets:()=>y.listAllTargets(),remoteCdp:we})});window.addEventListener(`beforeunload`,()=>{Ne(),Me.dispose(),we.disposeAll(),Ce?.close()},{once:!0}),await _e.refresh(),m.onSprinkleClose=e=>_e.close(e),m.onSprinkleActivate=e=>{_e.activate(e)},m.getAvailableSprinkles=()=>[],m.onOpenSprinkle=(e,t)=>_e.open(e,t),m.resolveSprinkleIcon=e=>b9(e,g),m.updateAddButtons(),await _e.restoreOpenSprinkles().catch(e=>{$.warn(`Failed to restore open sprinkles`,e)});{let e=window.localStorage.getItem(jr),n=window.localStorage.getItem(Ar);if(t===`hosted-leader`){window.localStorage.removeItem(jr),await new ci().clear();let e=window.localStorage.getItem(Ar);if(!e)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);xe=l9({...Te(e),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.40.3`})}).catch(e=>{$.error(`failed to POST /api/cloud-status`,{error:String(e)})})}}),Ee(xe),(async()=>{await new Promise(e=>setTimeout(e,5e3));try{let e=await fetch(`/api/hosted-bootstrap`);if(!e.ok)return;let t=await e.json(),n=t.accounts??(t.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:t.adobeImsToken}]:[]);t.model?localStorage.setItem(`selected-model`,t.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`);let{applyHostedAccounts:r,prewarmHostedModels:i}=await o(async()=>{let{applyHostedAccounts:e,prewarmHostedModels:t}=await import(`./hosted-config-apply-uAym2aS5.js`);return{applyHostedAccounts:e,prewarmHostedModels:t}},__vite__mapDeps([47,14]));await i(n,{getRefreshModels:e=>P(e).refreshModels});let a=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await r(n,{saveOAuthAccount:U6,addAccount:M,removeAccount:z6,currentProviderIds:()=>N().map(e=>e.providerId),previouslyManaged:()=>a}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(n.map(e=>e.providerId))),$.info(`hosted-leader: cone config applied`,{count:n.length})}catch(e){$.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}})()}else t===`cherry`&&b?(Se=i9({joinUrl:b,runtime:hre,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),onCherrySliccEvent:(e,t)=>x?.emitSliccEventToHost(e,t),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)}),x&&(x.onHostEvent=(e,t)=>Se?.currentSync?.sendCherryHostEvent(e,t))):e?Se=i9({joinUrl:e,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,onForwardingToggle:e=>w.sendSetFollowerForwarding(e),addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)}):n&&(xe=l9(Te(n)),Ee(xe))}oi(e=>{window.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),window.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(ii())),window.addEventListener(`slicc:tray-join`,e=>{let t=e,n=t.detail?.joinUrl,r=t.detail?.requestId;if(!n){$.error(`slicc:tray-join fired without joinUrl — UI dispatcher contract violation`);return}let i=xe;xe=null,db(null),m.panels.chat.setOnLocalUserMessage(void 0),_e.setSendToSprinkleHook(void 0);let a=Se;Se=null;try{i?.stop()}catch(e){$.error(`Leader stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{a?.stop()}catch(e){$.error(`Previous follower stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{Se=i9({joinUrl:n,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,onForwardingToggle:e=>w.sendSetFollowerForwarding(e),addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)})}catch(e){$.error(`slicc:tray-join handler failed — runtime is in a half-state, page reload required`,{joinUrl:n,error:e instanceof Error?e.message:String(e)});try{window.dispatchEvent(new CustomEvent(`slicc:tray-join-failed`,{detail:{joinUrl:n,error:e instanceof Error?e.message:String(e),requestId:r}}))}catch(e){$.error(`slicc:tray-join-failed dispatch itself threw`,{dispatchError:e instanceof Error?e.message:String(e)})}}}),window.addEventListener(`slicc:tray-leave`,e=>{let t=e,n=t.detail?.workerBaseUrl??null,r=t.detail?.requestId;Oe({workerBaseUrl:n,requestId:r}).catch(e=>{$.error(`slicc:tray-leave handler failed`,{workerBaseUrl:n,requestId:r,error:e instanceof Error?e.message:String(e)})})}),window.addEventListener(`beforeunload`,()=>{xe?.stop(),Se?.stop()},{once:!0}),Rr(window.localStorage)||xi(g).then(e=>{e.isFirstRun&&(j.has(`first-run`)&&($.info(`Clearing stale welcome dedup entry — install state is fresh`),j.delete(`first-run`),W9(j)),j.add(`first-run`),W9(j),ve().handleFirstRun())}).catch(e=>$.warn(`Welcome detection failed`,e));function Pe(){let e=le().filter(e=>pe(e)),t=e.map(e=>{let t=P(e);return{id:t.id,name:t.name,description:t.description,requiresApiKey:t.requiresApiKey??!0,requiresBaseUrl:t.requiresBaseUrl??!1,requiresDeployment:!!t.requiresDeployment,requiresApiVersion:!!t.requiresApiVersion,apiKeyPlaceholder:t.apiKeyPlaceholder??void 0,apiKeyEnvVar:t.apiKeyEnvVar??void 0,defaultBaseUrl:t.baseUrlPlaceholder??void 0,baseUrlDescription:t.baseUrlDescription??void 0,deploymentPlaceholder:t.deploymentPlaceholder??void 0,deploymentDescription:t.deploymentDescription??void 0,apiVersionDefault:t.apiVersionDefault??void 0,apiVersionDescription:t.apiVersionDescription??void 0,isOAuth:!!t.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),n={};for(let t of e)try{n[t]=ue(t).filter(e=>!de(e.id)).map(e=>({id:e.id,name:e.name}))}catch{n[t]=[]}return{providers:t,models:n}}globalThis.__slicc_tool_ui_send=(e,t,n)=>{w.sendRaw({type:`tool-ui-action`,requestId:e,action:t,data:n})};let{RemoteTerminalView:Fe}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-C1K2ToGt.js`);return{RemoteTerminalView:e}},__vite__mapDeps([37,1,29,4,14,30,38,39,40])),{fetchSecretEnvVars:Ie}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([41,14])),Le=await Ie(),Re=new Fe({client:w,cwd:`/`,env:Object.keys(Le).length>0?Le:void 0});m.panels.terminal.mountRemoteShell(Re).catch(e=>{$.error(`Failed to mount remote terminal view`,e)});let{installNukeReloadListener:ze}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-Dmc-Sve3.js`);return{installNukeReloadListener:e}},[]),Be=ze();window.addEventListener(`beforeunload`,()=>{k(),be(),Be(),Re.dispose(),re.dispose()},{once:!0}),Y9()&&await X9(m.panels.chat),Q3().catch(()=>{}),D7(O,{isWriter:!h||_.isLeader}),$.info(`Standalone kernel-worker UI ready`)}function qie(){if(typeof chrome<`u`&&chrome?.runtime?.id)return;let e=new Blob([`
|
|
1793
|
+
`,document.head.appendChild(t),window.addEventListener(`message`,e=>{e.source===window.parent&&uie(e.data)&&m.setActiveTab(f9(`http://localhost/?tab=${e.data.tab??``}`))}),window.addEventListener(`keydown`,e=>{e.code===`Semicolon`&&(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&!e.repeat&&(e.preventDefault(),e.stopPropagation(),window.parent.postMessage({type:`slicc-electron-overlay:toggle`},`*`))},!0)}await m.panels.chat.initSession(`session-cone`),$.info(`Session initialized (kernel-worker mode)`);let h=s()===`opfs`,g=await a.create({dbName:`slicc-fs`,...h?{backend:`memory`}:{}});h||m.panels.fileBrowser.setFs(g);let _={isLeader:!0,dispose:()=>{}};if(h){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}},[]),n=await e({logger:$});_={isLeader:n.isLeader,dispose:n.dispose},globalThis.__slicc_opfs_leader={isLeader:n.isLeader,self:n.self,leader:n.leader},n.isLeader?$.info(`OPFS leader election: this tab is the writer`,{tabId:n.self.tabId}):($.warn(`OPFS leader election: another tab is the writer; entering read-only mode`,{self:n.self.tabId,leader:n.leader?.tabId}),t({leaderTabId:n.leader?.tabId}))}Kn().then(async e=>{if(e.length===0)return;let{needsRecovery:t}=await Jn(e,g,$);t.length!==0&&$.warn(`Some mounts could not be recovered in the page VFS`,{count:t.length,paths:t.map(e=>e.path)})}).catch(e=>$.warn(`Failed to restore persisted mounts in page VFS`,e));let v=g;u9({channel:new BroadcastChannel(`preview-vfs`),getReader:()=>v,logger:$});let y,b,x;if(t===`cherry`){let{setupCherryFollower:e}=await o(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-CrHZ2Ygs.js`);return{setupCherryFollower:e}},__vite__mapDeps([45,44,1,14])),t=await e();y=t.browser,b=t.joinUrl,x=t.transport}else{y=new l;try{await y.connect()}catch(e){$.warn(`Initial CDP connect failed; worker-forwarded commands will retry on demand`,e instanceof Error?e.message:String(e))}}let S=y.getTransport();globalThis.__slicc_browser=y;let C=null,w,T=e=>{let t=e.config?.modelId,n=t?a8(t):o8();m.panels.chat.setModelSupportsReasoning(!!n.reasoning,c(n).includes(`xhigh`)),m.panels.chat.setThinkingLevel(e.config?.thinkingLevel)},ee=async e=>{C=e,w.setSelectedScoopJid(e.jid),m.panels.scoops.setSelectedJid(e.jid),m.panels.memory.setSelectedScoop(e.jid),m.setScoopSwitcherSelected?.(e.jid);let t=e.isCone?`session-cone`:`session-${e.folder}`,n=e.isCone?void 0:e.name;await m.panels.chat.switchToContext(t,!e.isCone,n),w.requestScoopMessages(e.jid),w.isProcessing(e.jid)&&m.panels.chat.setProcessing(!0),T(e)},E=typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,{OffscreenClient:D}=await o(async()=>{let{OffscreenClient:e}=await import(`./offscreen-client-COoBiM3s.js`);return{OffscreenClient:e}},__vite__mapDeps([31,14])),te=null,ne=()=>{te?.disarm()},re=r({realCdpTransport:S,instanceId:E,onMigrationStart:()=>{te||=d({root:document.body,logger:$}),te.arm()},onMigrationProgress:e=>{te||(te=d({root:document.body,logger:$}),te.arm()),te.updateProgress(e)},onMigrationFinish:()=>{ne()},callbacks:{onStatusChange:(e,t)=>{m.panels.scoops.updateScoopStatus(e,t),m.updateScoopSwitcherStatus?.(e,t),C?.jid===e&&(m.setAgentProcessing(t===`processing`),t===`processing`?m.panels.chat.setProcessing(!0):t===`ready`&&m.panels.chat.setProcessing(!1))},onScoopCreated:e=>{m.panels.scoops.refreshScoops(),m.refreshScoopSwitcher?.(),C||ee(e)},onScoopListUpdate:()=>{m.panels.scoops.refreshScoops(),m.refreshScoopSwitcher?.()},onIncomingMessage:(e,t)=>{C?.jid===e&&t.channel!==`web`&&P0(t.channel)&&m.panels.chat.addLickMessage(t.id,t.content,t.channel,new Date(t.timestamp).getTime())},onScoopMessagesReplaced:(e,t)=>{C?.jid===e&&m.panels.chat.loadMessages(t)},onCompactionStateChange:(e,t)=>{C?.jid===e&&m.panels.chat.setCompactionState(t)},onReady:()=>{$.info(`Kernel worker ready, scoop count:`,w.getScoops().length);let e=w.getScoops().find(e=>e.isCone);e&&!C&&ee(e)}}});w=re.client,m.panels.scoops.setOrchestrator(w),m.panels.memory.setOrchestrator(w),m.setScoopSwitcherOrchestrator?.(w),m.setScoopSwitcherTranscriptSource?.(e=>w.getScoopTranscript(e)),m.setScoopsRailTranscriptSource?.(e=>w.getScoopTranscript(e)),m.onScoopSelect=ee,m.onClearChat=async()=>{await _r().catch(()=>{}),await new en().clearAll().catch(()=>{});let e=w.getScoops();for(let t of e){let e=t.isCone?`session-cone`:`session-${t.folder}`;await m.panels.chat.deleteSessionById(e)}w.clearAllMessages()},m.onModelChange=e=>{localStorage.setItem(`selected-model`,e),w.updateModel(),C&&T(C)},m.onThinkingLevelChange=e=>{C&&w.setScoopThinkingLevel(C.jid,e)},m.onModelsRefreshed=()=>{C&&T(C)},w.setLocalFS(g);let ie=g,O=g;if(h){let{createRemoteVfsClient:e}=await o(async()=>{let{createRemoteVfsClient:e}=await import(`./remote-vfs-client-BwJhhtIV.js`);return{createRemoteVfsClient:e}},__vite__mapDeps([34,35])),t=e({transport:w.getTransport()});if(m.panels.fileBrowser.setFs(t),v=t,ie=t,_.isLeader){let{createRemoteWritableVfsClient:e}=await o(async()=>{let{createRemoteWritableVfsClient:e}=await import(`./writable-vfs-client-DMYsajEE.js`);return{createRemoteWritableVfsClient:e}},__vite__mapDeps([36,35]));O=e({transport:w.getTransport()}),$.info(`File browser + preview-vfs + writable freezer wired to worker VFS RPC (leader)`)}else $.info(`File browser + preview-vfs wired to worker VFS RPC (follower; freezer uses LFS shadow)`)}m.onClearChat=async e=>{if(h&&!_.isLeader){$.info(`New session affordance skipped (OPFS follower — read-only tab)`);return}if(e?.freeze===`quick`)try{await E7({vfs:O})}catch(e){$.warn(`Quick freezer step failed (clearing anyway)`,{error:String(e)})}else if(e?.freeze!==!1)try{await T7({vfs:O})}catch(e){$.warn(`Freezer step failed (clearing anyway)`,{error:String(e)})}else $.info(`New session: freezer skipped (long-press)`);await m.panels.chat.deleteSessionById(`session-cone`),await w.clearAllMessages()},m.onFrozenSessionOpen=e=>{(async()=>{try{let t=await ie.readFile(u7(e),{encoding:`utf-8`}),n=f7(typeof t==`string`?t:new TextDecoder().decode(t)),r=n.title||e.title;await m.panels.chat.displayFrozenSession({contextId:`frozen:${e.filename}`,messages:n.messages,title:r}),m.setThreadHeaderName(`❄ ${r}`),m.setActiveTab(`chat`)}catch(t){$.warn(`Failed to open frozen session`,{filename:e.filename,error:t instanceof Error?t.message:String(t)})}})()},m.panels.chat.onMessagesChanged=e=>{let t=2e5;try{t=o8().contextWindow??t}catch{}let n=e/t;m.setNewSessionGlow(n)};let ae=w.createAgentHandle();m.panels.chat.setAgent(ae),m.panels.chat.setAttachmentWriter(bx(g)),m.panels.chat.setDeleteQueuedMessageCallback(e=>{$.warn(`deleteQueuedMessage is a no-op in kernel-worker mode`)});try{await re.ready,$.info(`Worker boot handshake complete`)}catch(e){throw $.error(`Worker failed to signal ready`,e),ne(),e}w.requestState(),m.panels.scoops.setVfs(ie);let k=i({send:e=>w.sendRaw(e)}),oe=new Set([`setItem`,`removeItem`,`clear`]);for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);if(t!==null&&!oe.has(t)&&!t.includes(`\0`)){let e=localStorage.getItem(t);e!==null&&w.sendRaw({type:`local-storage-set`,key:t,value:e})}}let{SprinkleManager:A}=await o(async()=>{let{SprinkleManager:e}=await Promise.resolve().then(()=>Nie);return{SprinkleManager:e}},void 0),{installSprinkleManagerHandlerOverChannel:se}=await o(async()=>{let{installSprinkleManagerHandlerOverChannel:e}=await import(`./sprinkle-bridge-channel-gxatjtur.js`);return{installSprinkleManagerHandlerOverChannel:e}},[]),j=U9(),{OnboardingOrchestrator:ce}=await o(async()=>{let{OnboardingOrchestrator:e}=await import(`./onboarding-orchestrator-DaF0PzJJ.js`);return{OnboardingOrchestrator:e}},__vite__mapDeps([42,14])),{addAccount:M,getAccounts:N,getAvailableProviders:le,getProviderConfig:P,getProviderModels:ue,isModelHiddenFromPicker:de,setSelectedModelId:fe,providerOffersLlmModels:pe}=await o(async()=>{let{addAccount:e,getAccounts:t,getAvailableProviders:n,getProviderConfig:r,getProviderModels:i,isModelHiddenFromPicker:a,setSelectedModelId:o,providerOffersLlmModels:s}=await Promise.resolve().then(()=>a6);return{addAccount:e,getAccounts:t,getAvailableProviders:n,getProviderConfig:r,getProviderModels:i,isModelHiddenFromPicker:a,setSelectedModelId:o,providerOffersLlmModels:s}},void 0),{createSprinkleDeviceCodePrompter:me,resolveDeviceCodeDecision:he}=await o(async()=>{let{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}=await import(`./device-code-bridge-CbHxw098.js`);return{createSprinkleDeviceCodePrompter:e,resolveDeviceCodeDecision:t}},[]),ge=null,_e,ve=()=>ge||(ge=new ce({fs:g,postSystemMessage:e=>m.panels.chat.addSystemMessage(e),postDipReference:e=>m.panels.chat.addSystemMessage(e),getProviderCatalogue:Pe,saveAccount:(e,t,n,r,i)=>M(e,t,n,r,i),setSelectedModel:e=>fe(e),resolveModelLabel:(e,t)=>{try{return ue(e).find(e=>e.id===t)?.name??null}catch{return null}},broadcastToDip:e=>TC(e),fireFinalLick:e=>{O7(w),G9(String(e?.action??``),j,()=>w.sendSprinkleLick(`welcome`,e),`orchestrator-worker`)},launchOAuth:async(e,t)=>{try{let n=P(e);if(!n.isOAuth||!n.onOAuthLogin&&!n.onOAuthLoginIntercepted)return{ok:!1,message:`Provider does not support OAuth.`};if(n.requiresBaseUrl&&t&&M(e,``,t),n.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await o(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CT8xGVIF.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 n.onOAuthLoginIntercepted(t,()=>void 0,{presentDeviceCode:me({broadcastToDip:e=>TC(e)})})}else if(n.onOAuthLogin){let{createOAuthLauncher:e}=await o(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CT8xGVIF.js`);return{createOAuthLauncher:e}},__vite__mapDeps([16,1])),t=e();await n.onOAuthLogin(t,()=>void 0)}return{ok:!0,model:k7(e,n,ue,de)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:`OAuth login failed.`}}}}),ge),ye=e=>{if(e.type!==`sprinkle`)return!1;let t=e.sprinkleName===`welcome`||e.sprinkleName===`inline`?e.body?.action:void 0;if(t&&V9.has(t)){if(j.has(t))return $.debug(`Suppressing duplicate welcome lick (worker)`,{action:t}),!0;j.add(t),W9(j)}if(!(t===`first-run`||t===`onboarding-complete`||t===`connect-ready`||t===`connect-attempt`||t===`oauth-attempt`||t===`device-code-decision`||t===`shortcut-migrate`))return!1;let n=e.body,r=t;if(r===`device-code-decision`){let e=n?.data?.decision;return he(e===`cancel`?`cancel`:`continue`),!0}if(r===`first-run`)return ve().handleFirstRun(),!0;if(r===`onboarding-complete`){let e=ve(),t=n?.data??{};return t.mountWorkspace&&Z9(g).catch(e=>$.warn(`Failed to mount workspace from onboarding`,e)),e.handleOnboardingComplete(t).catch(e=>$.warn(`OnboardingOrchestrator failed`,e)),!0}if(r===`connect-ready`){let e=N();if(e.length>0){let t=e[0],n=(()=>{try{return P(t.providerId)}catch{return null}})();return TC({type:`slicc-already-connected`,provider:t.providerId,note:n?.name?`Already connected to ${n.name}.`:`Already connected.`}),Q9(g,t.providerId,e=>{G9(String(e.action??``),j,()=>w.sendSprinkleLick(`welcome`,e),`fast-forward-worker`)}).catch(e=>$.warn(`Failed to fire fast-forward final lick`,e)),!0}return ve().handleConnectReady(),!0}if(r===`connect-attempt`){let e=n?.data;return e&&ve().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=>$.warn(`handleConnectAttempt failed`,e)),!0}if(r===`oauth-attempt`){let e=n?.data;return e&&ve().handleOAuthAttempt({provider:String(e.provider??``),baseUrl:typeof e.baseUrl==`string`&&e.baseUrl?String(e.baseUrl):null}).catch(e=>$.warn(`handleOAuthAttempt failed`,e)),!0}return r===`shortcut-migrate`?(Vie({writableFs:O,isWriter:!h||_.isLeader}),!0):!1};m.panels.chat.onDipLick=(e,t)=>{if(!ye({type:`sprinkle`,sprinkleName:`inline`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{action:e,data:t}})){if(Se){let n=Se.currentSync;n?n.sendSprinkleLick(`inline`,{action:e,data:t}):$.warn(`Dip lick dropped: follower sync mid-reconnect`,{action:e});return}w.sendSprinkleLick(`inline`,{action:e,data:t})}},_e=new A(h?er({reader:ie,writer:O}):g,async e=>{if(e.type===`sprinkle`){if(ye(e)){e.body?.action===`shortcut-migrate`&&_e.close(`welcome`);return}e.sprinkleName&&w.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop)}},{addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e),minimizeSprinkle:e=>m.minimizeSprinkle(e),registerSprinkle:(e,t,n)=>m.registerSprinkle(e,t,n?.icon,n?.zone),unregisterSprinkle:e=>m.unregisterSprinkle(e),closeSprinkleContent:e=>m.closeSprinkleContent(e)},()=>{let e=w.getScoops().find(e=>e.isCone);e&&w.stopScoop(e.jid)},{onAttachImage:(e,t,n)=>m.panels.chat.addImageAttachment(e,t,n),inlineSprinkles:J9,execHandler:B9(w)}),window.__slicc_sprinkleManager=_e,DC(B9(w));let be=se(_e,{instanceId:E}),xe=null,Se=null,Ce=typeof BroadcastChannel==`function`?new BroadcastChannel(Xn(E)):null,we=nie({getSync:()=>xe?.sync??null,postEvent:e=>{let t={type:`panel-rpc-push`,op:`remote-cdp-event`,payload:e};Ce?.postMessage(t)}});w.setForwardLickHandler(e=>{let t=Se?.currentSync;t?t.forwardLick(e):$.warn(`forward-lick dropped: no active follower sync`)});let Te=e=>({workerBaseUrl:e,getMessages:()=>m.panels.chat.getMessages(),getScoopJid:()=>C?.jid??`cone`,getScoops:()=>w.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(_e.opened());return _e.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=_e.available().find(t=>t.name===e);if(!t)return null;try{let e=await g.readFile(t.path,{encoding:`utf-8`});return typeof e==`string`?e:new TextDecoder(`utf-8`).decode(e)}catch{return null}},onSprinkleLick:(e,t,n,r)=>w.sendSprinkleLick(e,t,n,r),onForwardedLick:e=>w.sendForwardedLick(e),onFollowerMessage:(e,t,n)=>{m.panels.chat.addUserMessage(e,n),ae.sendMessage(e,t,n),xe?.sync.broadcastUserMessage(e,t,n)},onFollowerAbort:()=>ae.stop(),onFollowerCountChanged:e=>{let t=xe?.peers.getPeers()??[];window.localStorage.setItem(`slicc.leaderTrayFollowers`,JSON.stringify(t.map(e=>({runtimeId:e9(e.bootstrapId),runtime:e.runtime,connectedAt:e.connectedAt??void 0}))))},onRemoteTransportsCleaned:e=>we.cleanupRuntime(e),sendWebhookEvent:(e,t,n)=>w.sendWebhookEvent(e,t,n),onCherryHostEvent:(e,t,n)=>w.sendCherryHostEvent(e,t,n),onAgentEvent:e=>ae.onEvent(e),browserAPI:y,browserTransport:S,vfs:g}),Ee=e=>{db(()=>e.reset()),_e.setSendToSprinkleHook((t,n)=>e.sync.broadcastSprinkleUpdate(t,n)),m.panels.chat.setOnLocalUserMessage((t,n,r)=>e.sync.broadcastUserMessage(t,n,r))},De=()=>{db(null),m.panels.chat.setOnLocalUserMessage(void 0),_e.setSendToSprinkleHook(void 0),we.disposeAll()},Oe=async e=>{let{performTrayLeave:t}=await o(async()=>{let{performTrayLeave:e}=await import(`./tray-leave-runtime-nyt61r2W.js`);return{performTrayLeave:e}},[]);return await t({workerBaseUrl:e.workerBaseUrl,requestId:e.requestId},{getLeader:()=>xe,setLeader:e=>{xe=e},getFollower:()=>Se,setFollower:e=>{Se=e},startLeader:e=>l9(Te(e)),clearLeaderHooks:De,wireLeaderHooks:Ee,storage:window.localStorage,log:$})},{installPanelRpcHandler:ke,createPanelRpcEventEmitter:Ae}=await o(async()=>{let{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}=await Promise.resolve().then(()=>oee);return{installPanelRpcHandler:e,createPanelRpcEventEmitter:t}},void 0),{createStandalonePanelRpcHandlers:je}=await o(async()=>{let{createStandalonePanelRpcHandlers:e}=await import(`./panel-rpc-handlers-BDD_ByhG.js`);return{createStandalonePanelRpcHandlers:e}},__vite__mapDeps([46,1,30,4])),Me=Ae({instanceId:E}),Ne=ke({instanceId:E,handlers:je({resetTray:async()=>{if(!xe)throw Error(`no active tray session to reset`);return await xe.reset()},leaveTray:async({workerBaseUrl:e,requestId:t})=>await Oe({workerBaseUrl:e,requestId:t}),emitEvent:(e,t)=>Me.emit(e,t),emitCherrySliccEvent:(e,t,n)=>xe?.sync.emitCherrySliccEvent(e,t,n)??!1,listRemoteTargets:()=>y.listAllTargets(),remoteCdp:we})});window.addEventListener(`beforeunload`,()=>{Ne(),Me.dispose(),we.disposeAll(),Ce?.close()},{once:!0}),await _e.refresh(),m.onSprinkleClose=e=>_e.close(e),m.onSprinkleActivate=e=>{_e.activate(e)},m.getAvailableSprinkles=()=>[],m.onOpenSprinkle=(e,t)=>_e.open(e,t),m.resolveSprinkleIcon=e=>b9(e,g),m.updateAddButtons(),await _e.restoreOpenSprinkles().catch(e=>{$.warn(`Failed to restore open sprinkles`,e)});{let e=window.localStorage.getItem(jr),n=window.localStorage.getItem(Ar);if(t===`hosted-leader`){window.localStorage.removeItem(jr),await new ci().clear();let e=window.localStorage.getItem(Ar);if(!e)throw Error(`hosted-leader: TRAY_WORKER_STORAGE_KEY not seeded — runtime-config resolution failed`);xe=l9({...Te(e),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.41.0`})}).catch(e=>{$.error(`failed to POST /api/cloud-status`,{error:String(e)})})}}),Ee(xe),(async()=>{await new Promise(e=>setTimeout(e,5e3));try{let e=await fetch(`/api/hosted-bootstrap`);if(!e.ok)return;let t=await e.json(),n=t.accounts??(t.adobeImsToken?[{providerId:`adobe`,kind:`oauth`,accessToken:t.adobeImsToken}]:[]);t.model?localStorage.setItem(`selected-model`,t.model):localStorage.getItem(`selected-model`)||localStorage.setItem(`selected-model`,`adobe:claude-opus-4-6`);let{applyHostedAccounts:r,prewarmHostedModels:i}=await o(async()=>{let{applyHostedAccounts:e,prewarmHostedModels:t}=await import(`./hosted-config-apply-uAym2aS5.js`);return{applyHostedAccounts:e,prewarmHostedModels:t}},__vite__mapDeps([47,14]));await i(n,{getRefreshModels:e=>P(e).refreshModels});let a=JSON.parse(localStorage.getItem(`slicc_cloud_managed`)??`[]`);await r(n,{saveOAuthAccount:U6,addAccount:M,removeAccount:z6,currentProviderIds:()=>N().map(e=>e.providerId),previouslyManaged:()=>a}),localStorage.setItem(`slicc_cloud_managed`,JSON.stringify(n.map(e=>e.providerId))),$.info(`hosted-leader: cone config applied`,{count:n.length})}catch(e){$.warn(`hosted-leader: bootstrap fetch failed; provider needs manual login`,{error:e instanceof Error?e.message:String(e)})}})()}else t===`cherry`&&b?(Se=i9({joinUrl:b,runtime:hre,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),onCherrySliccEvent:(e,t)=>x?.emitSliccEventToHost(e,t),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)}),x&&(x.onHostEvent=(e,t)=>Se?.currentSync?.sendCherryHostEvent(e,t))):e?Se=i9({joinUrl:e,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,onForwardingToggle:e=>w.sendSetFollowerForwarding(e),addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)}):n&&(xe=l9(Te(n)),Ee(xe))}oi(e=>{window.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(e))}),window.localStorage.setItem(`slicc.leaderTrayStatus`,JSON.stringify(ii())),window.addEventListener(`slicc:tray-join`,e=>{let t=e,n=t.detail?.joinUrl,r=t.detail?.requestId;if(!n){$.error(`slicc:tray-join fired without joinUrl — UI dispatcher contract violation`);return}let i=xe;xe=null,db(null),m.panels.chat.setOnLocalUserMessage(void 0),_e.setSendToSprinkleHook(void 0);let a=Se;Se=null;try{i?.stop()}catch(e){$.error(`Leader stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{a?.stop()}catch(e){$.error(`Previous follower stop threw during tray-join switch — runtime resources may have leaked`,{error:e instanceof Error?e.message:String(e)})}try{Se=i9({joinUrl:n,onSnapshot:e=>m.panels.chat.loadMessages(e),onUserMessage:(e,t,n,r)=>m.panels.chat.addUserMessage(e,r),onStatus:e=>m.panels.chat.setProcessing(e===`processing`),setChatAgent:e=>m.panels.chat.setAgent(e),browserAPI:y,onForwardingToggle:e=>w.sendSetFollowerForwarding(e),addSprinkle:(e,t,n,r,i)=>m.addSprinkle(e,t,n,r,i),removeSprinkle:e=>m.removeSprinkle(e)})}catch(e){$.error(`slicc:tray-join handler failed — runtime is in a half-state, page reload required`,{joinUrl:n,error:e instanceof Error?e.message:String(e)});try{window.dispatchEvent(new CustomEvent(`slicc:tray-join-failed`,{detail:{joinUrl:n,error:e instanceof Error?e.message:String(e),requestId:r}}))}catch(e){$.error(`slicc:tray-join-failed dispatch itself threw`,{dispatchError:e instanceof Error?e.message:String(e)})}}}),window.addEventListener(`slicc:tray-leave`,e=>{let t=e,n=t.detail?.workerBaseUrl??null,r=t.detail?.requestId;Oe({workerBaseUrl:n,requestId:r}).catch(e=>{$.error(`slicc:tray-leave handler failed`,{workerBaseUrl:n,requestId:r,error:e instanceof Error?e.message:String(e)})})}),window.addEventListener(`beforeunload`,()=>{xe?.stop(),Se?.stop()},{once:!0}),Rr(window.localStorage)||xi(g).then(e=>{e.isFirstRun&&(j.has(`first-run`)&&($.info(`Clearing stale welcome dedup entry — install state is fresh`),j.delete(`first-run`),W9(j)),j.add(`first-run`),W9(j),ve().handleFirstRun())}).catch(e=>$.warn(`Welcome detection failed`,e));function Pe(){let e=le().filter(e=>pe(e)),t=e.map(e=>{let t=P(e);return{id:t.id,name:t.name,description:t.description,requiresApiKey:t.requiresApiKey??!0,requiresBaseUrl:t.requiresBaseUrl??!1,requiresDeployment:!!t.requiresDeployment,requiresApiVersion:!!t.requiresApiVersion,apiKeyPlaceholder:t.apiKeyPlaceholder??void 0,apiKeyEnvVar:t.apiKeyEnvVar??void 0,defaultBaseUrl:t.baseUrlPlaceholder??void 0,baseUrlDescription:t.baseUrlDescription??void 0,deploymentPlaceholder:t.deploymentPlaceholder??void 0,deploymentDescription:t.deploymentDescription??void 0,apiVersionDefault:t.apiVersionDefault??void 0,apiVersionDescription:t.apiVersionDescription??void 0,isOAuth:!!t.isOAuth}}).sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),n={};for(let t of e)try{n[t]=ue(t).filter(e=>!de(e.id)).map(e=>({id:e.id,name:e.name}))}catch{n[t]=[]}return{providers:t,models:n}}globalThis.__slicc_tool_ui_send=(e,t,n)=>{w.sendRaw({type:`tool-ui-action`,requestId:e,action:t,data:n})};let{RemoteTerminalView:Fe}=await o(async()=>{let{RemoteTerminalView:e}=await import(`./remote-terminal-view-CCGG0JAl.js`);return{RemoteTerminalView:e}},__vite__mapDeps([37,1,29,4,14,30,38,39,40])),{fetchSecretEnvVars:Ie}=await o(async()=>{let{fetchSecretEnvVars:e}=await import(`./secret-env-DcfTe28K.js`);return{fetchSecretEnvVars:e}},__vite__mapDeps([41,14])),Le=await Ie(),Re=new Fe({client:w,cwd:`/`,env:Object.keys(Le).length>0?Le:void 0});m.panels.terminal.mountRemoteShell(Re).catch(e=>{$.error(`Failed to mount remote terminal view`,e)});let{installNukeReloadListener:ze}=await o(async()=>{let{installNukeReloadListener:e}=await import(`./nuke-command-DoN_uwQe.js`);return{installNukeReloadListener:e}},[]),Be=ze();window.addEventListener(`beforeunload`,()=>{k(),be(),Be(),Re.dispose(),re.dispose()},{once:!0}),Y9()&&await X9(m.panels.chat),Q3().catch(()=>{}),D7(O,{isWriter:!h||_.isLeader}),$.info(`Standalone kernel-worker UI ready`)}function Jie(){if(typeof chrome<`u`&&chrome?.runtime?.id)return;let e=new Blob([`
|
|
1794
1794
|
let lastPong = Date.now();
|
|
1795
1795
|
let frozen = false;
|
|
1796
1796
|
setInterval(() => {
|
|
@@ -1810,4 +1810,4 @@ Long press — discard without saving`),n.setAttribute(`label`,`New session. Cli
|
|
|
1810
1810
|
}
|
|
1811
1811
|
}
|
|
1812
1812
|
};
|
|
1813
|
-
`],{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})}async function
|
|
1813
|
+
`],{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})}async function Yie(){Jie(),QS(),zie();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let t=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&t)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`)){sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),$.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload();return}sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){$.error(`connect-mode SW cleanup failed`,e)}if(`serviceWorker`in navigator&&!t)try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),$.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),$.info(`LLM-proxy SW registered`)}catch(e){$.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`)){sessionStorage.setItem(`slicc-sw-reloaded`,`1`),$.info(`Reloading once to gain SW control`),location.reload();return}sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){$.error(`Preview SW registration failed — preview feature will not work`,e)}await sr(),E6();let{bootstrapOAuthReplicas:n}=await o(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-DfAIGBEv.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([48,1,14]));await Promise.race([n().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),!$6()&&Rr(window.localStorage);let r=typeof chrome<`u`&&!!chrome?.runtime?.id,i=sie(window.location.href,r);if(i===`connect`){globalThis.__slicc_connect_mode=!0;let{mountConnectSurface:t}=await o(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-CaWmpVyD.js`);return{mountConnectSurface:e}},[]);await t(e);return}return i===`extension-detached`?$9(e,{detached:!0}):i===`extension`?$9(e):qie(e,i)}Yie().catch(e=>{$.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{Ax as $,xS as A,Ux as B,uS as C,SS as D,dS as E,Wx as F,Fx as G,Xx as H,Zx as I,Tx as J,kx as K,Hx as L,eS as M,iS as N,hS as O,Kx as P,une as Q,Gx as R,fS as S,_S as T,Ix as U,Qx as V,Mx as W,dne as X,Ox as Y,Ex as Z,wS as _,A6 as a,Mr as at,vS as b,K6 as c,br as ct,b6 as d,ur as dt,jx as et,z6 as f,Zn as ft,tw as g,u8 as h,j6 as i,si as it,aS as j,bS as k,q6 as l,xr as lt,N6 as m,_8 as n,rb as nt,P6 as o,jr as ot,U6 as p,Dx as q,h8 as r,hee as rt,J6 as s,Ar as st,L7 as t,mx as tt,C6 as u,cr as ut,gS as v,pS as w,yS as x,mS as y,Yx as z};
|