sliccy 6.108.0 → 6.108.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +123 -123
- package/dist/ui/assets/{account-store-D-rP3HCi.js → account-store-BoOQBxq_.js} +1 -1
- package/dist/ui/assets/{account-store-CkjnK-Fk.js → account-store-Ds_fREWW.js} +1 -1
- package/dist/ui/assets/{adobe-km7vyLvy.js → adobe-BmQmmCZ8.js} +1 -1
- package/dist/ui/assets/{adobe-DMujRYCq.js → adobe-GJcl8jyr.js} +1 -1
- package/dist/ui/assets/{agent-bridge-C7vK0d56.js → agent-bridge-Dvaymghq.js} +1 -1
- package/dist/ui/assets/{agent-panels-DdqIL0Wx.js → agent-panels-BFW07lEI.js} +1 -1
- package/dist/ui/assets/{apply-layout-DtlE2PDZ.js → apply-layout-iwhCpuVk.js} +1 -1
- package/dist/ui/assets/{apps-CWQl4TRZ.js → apps-BoUfLAvt.js} +1 -1
- package/dist/ui/assets/{azure-openai-D3t84qxg.js → azure-openai-BeN2uYBT.js} +1 -1
- package/dist/ui/assets/{azure-openai-DvoS1u3J.js → azure-openai-Da41DiKw.js} +1 -1
- package/dist/ui/assets/{cerebras-IaLEJ_Gt.js → cerebras-B9eiHzVB.js} +1 -1
- package/dist/ui/assets/{cerebras-5pn-CAyT.js → cerebras-C0WuimUy.js} +1 -1
- package/dist/ui/assets/{connect-surface-Dt5V9TPp.js → connect-surface-Dwe3iCG6.js} +1 -1
- package/dist/ui/assets/{directed-approval-CGI2qBU1.js → directed-approval-BAqNNODV.js} +1 -1
- package/dist/ui/assets/{fs-D0_Ere_F.js → fs-BGQSFWUb.js} +1 -1
- package/dist/ui/assets/{fs-DSCjqPJM.js → fs-aj1JzF11.js} +2 -2
- package/dist/ui/assets/{github-D4ur0CkK.js → github-BngLMnjD.js} +2 -2
- package/dist/ui/assets/{github-BWcPt-er.js → github-WdNypjl-.js} +1 -1
- package/dist/ui/assets/{github-copilot-Bxh_fDn4.js → github-copilot-BBKHa3N_.js} +1 -1
- package/dist/ui/assets/{github-copilot-BDVLOQu-.js → github-copilot-DzH-Yvn-.js} +1 -1
- package/dist/ui/assets/{github-install-BJZJ69Lk.js → github-install-CjSc36VN.js} +1 -1
- package/dist/ui/assets/{github-zip-BD65pzPK.js → github-zip-BmQLkPpT.js} +1 -1
- package/dist/ui/assets/{isomorphic-git-WdgG3efW.js → isomorphic-git-CMFUvX2B.js} +3 -3
- package/dist/ui/assets/{js-realm-worker-DwuJm0N-.js → js-realm-worker-4r4THCXO.js} +1 -1
- package/dist/ui/assets/{kernel-worker-BJSL3rzb.js → kernel-worker-BR-upeev.js} +263 -263
- package/dist/ui/assets/{local-llm-DOZR2r-T.js → local-llm-BwOFno6K.js} +1 -1
- package/dist/ui/assets/{local-llm-C8NCgByo.js → local-llm-DLogN3_D.js} +1 -1
- package/dist/ui/assets/{main-S9RWXKlX.js → main-ChriOijJ.js} +3 -3
- package/dist/ui/assets/{mount-D2cWCQNi.js → mount-Djy3MuFR.js} +2 -2
- package/dist/ui/assets/{mount-S6rjnk0Y.js → mount-dz--0GUQ.js} +1 -1
- package/dist/ui/assets/{mount-recovery-BDSot1Jv.js → mount-recovery-BrxSEJj1.js} +1 -1
- package/dist/ui/assets/{new-session-Bj1JwVlj.js → new-session-nNJq82qZ.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-BSRtxwtE.js → oauth-bootstrap-Ck44WkJd.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-DrFA-wK5.js → onboarding-orchestrator-tYc9g5GB.js} +1 -1
- package/dist/ui/assets/{openai-codex-BOSiYpe7.js → openai-codex-CBzoVUdw.js} +1 -1
- package/dist/ui/assets/{openai-codex-JfntwBbH.js → openai-codex-CsaGGbnG.js} +1 -1
- package/dist/ui/assets/{openrouter-64hDJdKz.js → openrouter-BoyWG207.js} +1 -1
- package/dist/ui/assets/{openrouter-6_4MrC-0.js → openrouter-DqJEt7IP.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-NNxaYvm2.js → openrouter-oauth-BBeVm7Ug.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-B-j4swL7.js → openrouter-oauth-CH_oprz-.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Md3m-4Ki.js → panel-rpc-handlers-WWK0tVp7.js} +2 -2
- package/dist/ui/assets/{panelize-shell-2978kus3.js → panelize-shell-DHEUapCc.js} +1 -1
- package/dist/ui/assets/{provider-CUtn61a-.js → provider-Ck4Av-1p.js} +2 -2
- package/dist/ui/assets/{provider-CI15XjZv.js → provider-Dx4_SDNT.js} +1 -1
- package/dist/ui/assets/{provider-settings-Cz1_j-d2.js → provider-settings-BS6vPXws.js} +1 -1
- package/dist/ui/assets/provider-store-access-BEgIBo-1.js +1 -0
- package/dist/ui/assets/provider-store-access-DkCFeqO2.js +1 -0
- package/dist/ui/assets/{providers-Ap6iytXt.js → providers-95TyImtj.js} +1 -1
- package/dist/ui/assets/{providers-MYG7EqyU.js → providers-DvmKM7--.js} +2 -2
- package/dist/ui/assets/{quick-llm-BI-KX5iM.js → quick-llm-BNah0Kkf.js} +1 -1
- package/dist/ui/assets/{recovery-screen-D3adrdyl.js → recovery-screen-D-pkj9XQ.js} +1 -1
- package/dist/ui/assets/{run-rpSNR_V8.js → run-B5AwO0rT.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DapJLLTi.js → setup-feature-flags-remote-BlbWNliP.js} +1 -1
- package/dist/ui/assets/sidecar-repair-QunFTxmC.js +1 -0
- package/dist/ui/assets/{skills-BhSNElRc.js → skills-DUU7N5bl.js} +1 -1
- package/dist/ui/assets/slicc-version-BZU-hOf1.js +1 -0
- package/dist/ui/assets/{state-rxQbBfWk.js → state-R7D031UZ.js} +1 -1
- package/dist/ui/assets/{store-ilrw6QDg.js → store-BehdBrM6.js} +1 -1
- package/dist/ui/assets/{store-Dt5S8IOA.js → store-CWUoE4oC.js} +1 -1
- package/dist/ui/assets/{sudo-BZXAF0Vb.js → sudo-BRlt30iG.js} +1 -1
- package/dist/ui/assets/{sync-dialog-BKSpZTM8.js → sync-dialog-DF3OUuUL.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-n4IOz4YD.js → tray-sidecar-DU4bBWmt.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DgIwa1DB.js → upgrade-detection-DmRBomaj.js} +1 -1
- package/dist/ui/assets/{voice-reply-eRV9Mms0.js → voice-reply-B0lZhnaR.js} +1 -1
- package/dist/ui/assets/{wc-attach-zVak18ur.js → wc-attach-DvkHwEWE.js} +2 -2
- package/dist/ui/assets/{wc-extension-cnM9p2p1.js → wc-extension-EnN-csY7.js} +2 -2
- package/dist/ui/assets/{wc-float-label-OSRblfX7.js → wc-float-label-DQprtoDu.js} +1 -1
- package/dist/ui/assets/{wc-floatbar-online-7zQfm5gQ.js → wc-floatbar-online-qI6TtF8r.js} +1 -1
- package/dist/ui/assets/{wc-follower-BdQm-Sj2.js → wc-follower-C3QyijjU.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-Botlb57e.js → wc-follower-oauth-BH_z0NbH.js} +1 -1
- package/dist/ui/assets/{wc-live-C4vR3iVv.js → wc-live-iFtSSLXZ.js} +6 -6
- package/dist/ui/assets/{wc-nav-PBa1cf-J.js → wc-nav-DDUPTHtU.js} +2 -2
- package/dist/ui/assets/wc-onboarding-Dv3aqS2R.js +2 -0
- package/dist/ui/assets/{wc-placeholder-BBjh97Bf.js → wc-placeholder-BbcvMQCq.js} +3 -3
- package/dist/ui/assets/{wc-settings-BJNn6iu3.js → wc-settings-D0_CDKNP.js} +3 -3
- package/dist/ui/assets/{wc-shell-_l7HK5oA.js → wc-shell-Ce7_gK_H.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-DaSZO9o_.js → wc-shortcut-config-DMeDhvME.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-D0LHxBYF.js → wc-sprinkles-D_3FmUg9.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-BZuCK5G5.js → wc-transcript-export-BvJ0t1kU.js} +2 -2
- package/dist/ui/assets/{wc-tray-D3xglp9L.js → wc-tray-CaDDIPMX.js} +4 -4
- package/dist/ui/assets/welcome-detection-VnqBEB4J.js +1 -0
- package/dist/ui/assets/{xai-grok-CDEAtYld.js → xai-grok-BaQCEEMQ.js} +1 -1
- package/dist/ui/assets/{xai-grok-SCcrGu5e.js → xai-grok-DGbYjl5N.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/provider-store-access-By7oMDs7.js +0 -1
- package/dist/ui/assets/provider-store-access-Cgj-taCh.js +0 -1
- package/dist/ui/assets/sidecar-repair-Hs1Ru9up.js +0 -1
- package/dist/ui/assets/slicc-version-BO4O1fc-.js +0 -1
- package/dist/ui/assets/wc-onboarding-BnRRD-aa.js +0 -2
- package/dist/ui/assets/welcome-detection-BMyI3rC6.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,n as t,t as n}from"./rolldown-runtime-Dd_uD5pT.js";import{t as r}from"./logger-LESFN7Hj.js";import"./logger-DQgFbfwx.js";import{n as i,r as a,t as o}from"./panel-rpc-BPwAqRch.js";import{a as s,t as c}from"./providers-Ap6iytXt.js";import{r as l,t as u}from"./base64-DzRgusa4.js";import{a as d,i as f,n as p,r as m,s as h,t as g}from"./src-CcFD5QfS.js";import{i as _,r as v,t as y}from"./proxied-fetch-BduXImRw.js";import{_ as b,b as x,d as S,f as C,h as w,i as T,l as E,m as D,p as ee,r as te,u as ne,v as re,y as O}from"./account-store-CkjnK-Fk.js";import{t as ie}from"./runtime-env-DadgceZk.js";import{r as ae}from"./binary-cache-bSOhqXB1.js";import{n as oe,r as se,t as ce}from"./fetch-body-DDu_AU5I.js";import{a as le,i as ue,n as de,o as fe,r as pe,s as k,t as me}from"./api-endpoint-C00IT5T9.js";import{a as he,i as ge,n as _e,t as ve}from"./path-utils-DNJG-zQf.js";import{a as ye,i as be,n as xe,r as Se,t as A}from"./agent-bridge-C7vK0d56.js";import{$ as j,A as Ce,At as we,B as M,Bt as Te,C as N,Ct as Ee,D as P,Dt as F,E as De,Et as Oe,F as ke,Ft as Ae,G as I,H as je,I as Me,It as L,J as Ne,K as Pe,L as Fe,Lt as Ie,M as Le,Mt as Re,N as ze,Nt as Be,O as Ve,Ot as He,P as Ue,Pt as We,Q as Ge,R as Ke,Rt as qe,S as Je,St as Ye,T as Xe,Tt as Ze,U as eee,V as Qe,W as $e,X as et,Y as tt,Z as nt,_ as rt,_t as it,a as at,at as ot,b as st,bt as R,c as tee,ct,d as lt,dt as ut,et as dt,f as ft,ft as pt,g as mt,gt as ht,h as gt,ht as z,i as _t,it as nee,j as vt,jt as yt,k as bt,kt as xt,l as St,lt as Ct,m as wt,mt as B,nt as ree,o as Tt,ot as iee,p as Et,pt as Dt,q as Ot,r as kt,rt as aee,s as At,st as jt,t as Mt,tt as Nt,u as Pt,ut as Ft,v as oee,vt as see,w as cee,wt as lee,x as It,xt as Lt,y as Rt,yt as zt,z as Bt,zt as Vt}from"./core-DpOt0gTq.js";import{a as Ht}from"./models-4WTk3EBD.js";import{o as Ut,t as Wt}from"./compat-Dujkqs4W.js";import{t as Gt}from"./__vite-browser-external-5eBdwsFd.js";import{n as Kt,t as qt}from"./mime-types-D7IV6i7k.js";import"./runtime-env-Dtj99aNH.js";import{t as Jt}from"./image-markers-D3wDAnBQ.js";import{a as Yt,i as Xt,r as Zt}from"./tool-ui-DRnUkp2g.js";import{C as Qt,D as $t,E as en,O as tn,S as nn,T as rn,_ as an,a as uee,b as dee,c as on,d as sn,f as fee,g as cn,h as ln,i as un,k as dn,l as fn,m as pn,n as mn,o as hn,p as gn,r as _n,s as vn,t as yn,u as pee,v as mee,w as hee,x as bn,y as xn}from"./descriptor-Bh6C6cqu.js";import{a as gee,c as _ee,i as Sn,l as Cn,o as wn,r as Tn,s as En,u as Dn}from"./agent-message-to-chat-CjWIKGH-.js";import{n as On,t as kn}from"./thinking-level-5x0UAu9N.js";import{a as An,i as jn,n as Mn,o as Nn,r as Pn,t as Fn}from"./backend-local-_o3dnerJ.js";import{t as In}from"./types-idfTVsM8.js";import{a as Ln,i as Rn,n as zn,o as Bn,r as Vn,s as Hn}from"./mount-S6rjnk0Y.js";import{o as Un}from"./mount-table-store-DrF_Ifaz.js";import{t as Wn}from"./remote-cache-JAv9sQH_.js";import{r as Gn,t as vee}from"./mount-recovery-BDSot1Jv.js";import{a as yee,c as bee,i as Kn,n as xee,o as See,r as Cee,s as wee}from"./lick-urls-51I5JBZv.js";import"./runtime-env-DVGQx9p3.js";import{C as qn,D as Tee,E as Jn,S as Yn,_ as Xn,a as Eee,b as Zn,d as Qn,g as Dee,h as Oee,m as $n,n as kee,o as Aee,r as jee,s as Mee,t as er,u as Nee,w as tr,y as nr}from"./db-DSIYsBgP.js";import{a as rr,i as ir,n as ar,r as or}from"./tray-runtime-config-Dv3NVv5v.js";import{n as sr,r as cr,t as lr}from"./slicc-version-BO4O1fc-.js";import{a as ur,c as dr,i as fr,l as pr,o as mr,r as hr,s as gr,t as _r,u as vr}from"./lick-manager-DsQLFcKr.js";import{i as yr,n as br,r as xr}from"./fs-D0_Ere_F.js";import{a as V,c as Sr,i as Cr,l as wr,n as Tr,o as Er,r as Dr,s as H,u as Or}from"./cost-command-DNKXuXCE.js";import{n as kr,r as Ar,t as jr}from"./subcommand-help-CgO7wRS5.js";import{a as Mr,c as Nr,d as Pr,f as Fr,h as Ir,i as Lr,l as Rr,m as zr,n as Br,o as Vr,p as Hr,r as Ur,s as Wr,u as Gr}from"./sudoers-KgJRnN4b.js";import{a as Kr,i as qr,n as Jr,o as Yr,r as Xr,s as Zr}from"./skills-BhSNElRc.js";import{n as Qr,t as $r}from"./llm-session-id-BZyXP_j2.js";import{n as ei,r as ti}from"./frozen-archive-format-CLzdz05B.js";import{r as ni,t as ri}from"./key-vY4yxo3l.js";import{n as ii,r as ai}from"./derive-D0xHQ8be.js";import{i as oi,r as si}from"./browser-2rCVqcqy.js";import{a as ci,i as li,n as ui,r as di,t as fi}from"./telemetry-BwapcULJ.js";import{n as pi,t as mi}from"./safe-buffer-OLJ0qaLt.js";import"./global-db-DJXlpNui.js";import{_ as hi,a as gi,b as _i,c as vi,d as Pee,f as Fee,g as U,h as yi,i as bi,l as Iee,m as Lee,n as xi,o as Si,p as Ree,r as Ci,s as wi,t as zee,u as Ti,v as Bee,y as Ei}from"./state-rxQbBfWk.js";import{a as Vee,i as Di,r as Oi,t as ki}from"./git-config-Bdgu8kD2.js";import{a as Hee,c as Ai,i as Uee,o as Wee,r as Gee,s as Kee,t as qee}from"./script-catalog-Bt94D0RP.js";import{t as ji}from"./process-manager-BkhAohXT.js";import{F as Jee,I as Mi,M as Ni,P as Pi,S as Yee,_ as Xee,a as Fi,b as Ii,c as Li,d as Ri,f as zi,g as Bi,h as Vi,i as Hi,j as Ui,l as Wi,m as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Zee,v as Qee,w as Qi,x as $i,y as ea}from"./shared-CPVZc-MN.js";import{n as ta,t as na}from"./esbuild-wasm-Dl3vgXvq.js";import{n as $ee,t as ete}from"./wasm-compiler-Ct7QZURL.js";import{n as ra,r as ia,t as tte}from"./just-bash-compat-_TMo8UnL.js";import{_ as nte,a as aa,c as oa,f as sa,g as ca,h as la,l as ua,m as da,n as fa,p as pa,r as ma,u as ha,v as ga,y as _a}from"./github-zip-BD65pzPK.js";import{a as va,c as ya,d as ba,f as xa,i as Sa,l as Ca,n as wa,o as Ta,p as Ea,r as Da,s as Oa,u as ka}from"./github-install-BJZJ69Lk.js";import{n as Aa,t as ja}from"./magick-wasm-266b8ntc.js";import{i as Ma,n as Na,r as Pa,t as Fa}from"./pdf-raster-BWk6ezTX.js";import{t as Ia}from"./permissions-surface-registry-BqPdUk9w.js";import{a as La,c as Ra,d as za,f as Ba,i as Va,l as Ha,n as Ua,o as Wa,p as Ga,r as Ka,s as qa,t as Ja,u as Ya}from"./installer-VcJEC2uC.js";import{t as Xa}from"./local-llm-DOZR2r-T.js";import{t as Za}from"./client-Beg9O208.js";import{t as Qa}from"./redirect-uri-C_VlH29S.js";var $a=class{pending=new Map;issue(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{this.pending.delete(e),i(Error(n))},t);this.pending.set(e,{resolve:r,reject:i,timer:a})})}has(e){return this.pending.has(e)}resolve(e,t){this.take(e)?.resolve(t)}reject(e,t){this.take(e)?.reject(t)}rejectAll(e){for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(Error(e));this.pending.clear()}get size(){return this.pending.size}take(e){let t=this.pending.get(e);if(t)return this.pending.delete(e),clearTimeout(t.timer),t}};function eo(e,t,n){return new Promise((r,i)=>{let a=null,o=!1,s=setTimeout(()=>{o=!0,a?.(),i(Error(n))},t);a=e(e=>{clearTimeout(s),o=!0,a?.(),r(e)}),o&&a()})}const to=r(`cdp`);var no=class{ws=null;nextId=1;_superseded=!1;pending=new $a;listeners=new Map;_state=`disconnected`;get state(){return this._state}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,to.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(to.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),to.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),to.debug(`Send`,{method:e,id:i,sessionId:n});let o=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),o}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return eo(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;to.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(to.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;to.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){let t=e===4001;t?(this._superseded=!0,to.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):to.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size});let n=t?`CDP connection superseded by another SLICC tab/window on this instance`:`CDP connection closed`;this.pending.rejectAll(n),this.cleanup()}cleanup(){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(`CDP client disconnected`)}};const ro=r(`har-recorder`);var io=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n){let r=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await this.client.send(`Network.enable`,{},t),await this.client.send(`Page.enable`,{},t);let i=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,a={id:r,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:i,snapshotCount:0};return this.recordings.set(r,a),this.setupEventListeners(a),await this.ensureDir(`/recordings/${r}`),ro.debug(`Started recording`,{recordingId:r,targetId:e,currentUrl:i}),r}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{n.sessionId===t&&this.handleRequestWillBeSent(e,n)},i=n=>{n.sessionId===t&&this.handleResponseReceived(e,n)},a=n=>{n.sessionId===t&&this.handleLoadingFinished(e,n)},o=n=>{n.sessionId===t&&this.handleLoadingFailed(e,n)},s=r=>{if(r.sessionId!==t)return;let i=r.frame;if(!i?.parentId&&i?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=i.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{ro.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let n=t.requestId,r=t.request,i=t.timestamp;e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let n=t.requestId,r=t.response,i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let n=t.requestId,r=t.timestamp,i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let n=t.requestId;e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return ao(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return ro.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return ro.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),ro.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return ro.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function ao(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){ro.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return ro.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}const oo=`(function() {
|
|
1
|
+
import{i as e,n as t,t as n}from"./rolldown-runtime-Dd_uD5pT.js";import{t as r}from"./logger-LESFN7Hj.js";import"./logger-DQgFbfwx.js";import{n as i,r as a,t as o}from"./panel-rpc-BPwAqRch.js";import{a as s,t as c}from"./providers-95TyImtj.js";import{r as l,t as u}from"./base64-DzRgusa4.js";import{a as d,i as f,n as p,r as m,s as h,t as g}from"./src-CcFD5QfS.js";import{i as _,r as v,t as y}from"./proxied-fetch-BduXImRw.js";import{_ as b,b as x,d as S,f as C,h as w,i as T,l as E,m as D,p as ee,r as te,u as ne,v as re,y as O}from"./account-store-Ds_fREWW.js";import{t as ie}from"./runtime-env-DadgceZk.js";import{r as ae}from"./binary-cache-bSOhqXB1.js";import{n as oe,r as se,t as ce}from"./fetch-body-DDu_AU5I.js";import{a as le,i as ue,n as de,o as fe,r as pe,s as k,t as me}from"./api-endpoint-C00IT5T9.js";import{a as he,i as ge,n as _e,t as ve}from"./path-utils-DNJG-zQf.js";import{a as ye,i as be,n as xe,r as Se,t as A}from"./agent-bridge-Dvaymghq.js";import{$ as j,A as Ce,At as we,B as M,Bt as Te,C as N,Ct as Ee,D as P,Dt as F,E as De,Et as Oe,F as ke,Ft as Ae,G as I,H as je,I as Me,It as L,J as Ne,K as Pe,L as Fe,Lt as Ie,M as Le,Mt as Re,N as ze,Nt as Be,O as Ve,Ot as He,P as Ue,Pt as We,Q as Ge,R as Ke,Rt as qe,S as Je,St as Ye,T as Xe,Tt as Ze,U as eee,V as Qe,W as $e,X as et,Y as tt,Z as nt,_ as rt,_t as it,a as at,at as ot,b as st,bt as R,c as tee,ct,d as lt,dt as ut,et as dt,f as ft,ft as pt,g as mt,gt as ht,h as gt,ht as z,i as _t,it as nee,j as vt,jt as yt,k as bt,kt as xt,l as St,lt as Ct,m as wt,mt as B,nt as ree,o as Tt,ot as iee,p as Et,pt as Dt,q as Ot,r as kt,rt as aee,s as At,st as jt,t as Mt,tt as Nt,u as Pt,ut as Ft,v as oee,vt as see,w as cee,wt as lee,x as It,xt as Lt,y as Rt,yt as zt,z as Bt,zt as Vt}from"./core-DpOt0gTq.js";import{a as Ht}from"./models-4WTk3EBD.js";import{o as Ut,t as Wt}from"./compat-Dujkqs4W.js";import{t as Gt}from"./__vite-browser-external-5eBdwsFd.js";import{n as Kt,t as qt}from"./mime-types-D7IV6i7k.js";import"./runtime-env-Dtj99aNH.js";import{t as Jt}from"./image-markers-D3wDAnBQ.js";import{a as Yt,i as Xt,r as Zt}from"./tool-ui-DRnUkp2g.js";import{C as Qt,D as $t,E as en,O as tn,S as nn,T as rn,_ as an,a as uee,b as dee,c as on,d as sn,f as fee,g as cn,h as ln,i as un,k as dn,l as fn,m as pn,n as mn,o as hn,p as gn,r as _n,s as vn,t as yn,u as pee,v as mee,w as hee,x as bn,y as xn}from"./descriptor-Bh6C6cqu.js";import{a as gee,c as _ee,i as Sn,l as Cn,o as wn,r as Tn,s as En,u as Dn}from"./agent-message-to-chat-CjWIKGH-.js";import{n as On,t as kn}from"./thinking-level-5x0UAu9N.js";import{a as An,i as jn,n as Mn,o as Nn,r as Pn,t as Fn}from"./backend-local-_o3dnerJ.js";import{t as In}from"./types-idfTVsM8.js";import{a as Ln,i as Rn,n as zn,o as Bn,r as Vn,s as Hn}from"./mount-dz--0GUQ.js";import{o as Un}from"./mount-table-store-DrF_Ifaz.js";import{t as Wn}from"./remote-cache-JAv9sQH_.js";import{r as Gn,t as vee}from"./mount-recovery-BrxSEJj1.js";import{a as yee,c as bee,i as Kn,n as xee,o as See,r as Cee,s as wee}from"./lick-urls-51I5JBZv.js";import"./runtime-env-DVGQx9p3.js";import{C as qn,D as Tee,E as Jn,S as Yn,_ as Xn,a as Eee,b as Zn,d as Qn,g as Dee,h as Oee,m as $n,n as kee,o as Aee,r as jee,s as Mee,t as er,u as Nee,w as tr,y as nr}from"./db-DSIYsBgP.js";import{a as rr,i as ir,n as ar,r as or}from"./tray-runtime-config-Dv3NVv5v.js";import{n as sr,r as cr,t as lr}from"./slicc-version-BZU-hOf1.js";import{a as ur,c as dr,i as fr,l as pr,o as mr,r as hr,s as gr,t as _r,u as vr}from"./lick-manager-DsQLFcKr.js";import{i as yr,n as br,r as xr}from"./fs-BGQSFWUb.js";import{a as V,c as Sr,i as Cr,l as wr,n as Tr,o as Er,r as Dr,s as H,u as Or}from"./cost-command-DNKXuXCE.js";import{n as kr,r as Ar,t as jr}from"./subcommand-help-CgO7wRS5.js";import{a as Mr,c as Nr,d as Pr,f as Fr,h as Ir,i as Lr,l as Rr,m as zr,n as Br,o as Vr,p as Hr,r as Ur,s as Wr,u as Gr}from"./sudoers-KgJRnN4b.js";import{a as Kr,i as qr,n as Jr,o as Yr,r as Xr,s as Zr}from"./skills-DUU7N5bl.js";import{n as Qr,t as $r}from"./llm-session-id-BZyXP_j2.js";import{n as ei,r as ti}from"./frozen-archive-format-CLzdz05B.js";import{r as ni,t as ri}from"./key-vY4yxo3l.js";import{n as ii,r as ai}from"./derive-D0xHQ8be.js";import{i as oi,r as si}from"./browser-2rCVqcqy.js";import{a as ci,i as li,n as ui,r as di,t as fi}from"./telemetry-BwapcULJ.js";import{n as pi,t as mi}from"./safe-buffer-OLJ0qaLt.js";import"./global-db-DJXlpNui.js";import{_ as hi,a as gi,b as _i,c as vi,d as Pee,f as Fee,g as U,h as yi,i as bi,l as Iee,m as Lee,n as xi,o as Si,p as Ree,r as Ci,s as wi,t as zee,u as Ti,v as Bee,y as Ei}from"./state-R7D031UZ.js";import{a as Vee,i as Di,r as Oi,t as ki}from"./git-config-Bdgu8kD2.js";import{a as Hee,c as Ai,i as Uee,o as Wee,r as Gee,s as Kee,t as qee}from"./script-catalog-Bt94D0RP.js";import{t as ji}from"./process-manager-BkhAohXT.js";import{F as Jee,I as Mi,M as Ni,P as Pi,S as Yee,_ as Xee,a as Fi,b as Ii,c as Li,d as Ri,f as zi,g as Bi,h as Vi,i as Hi,j as Ui,l as Wi,m as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Zee,v as Qee,w as Qi,x as $i,y as ea}from"./shared-CPVZc-MN.js";import{n as ta,t as na}from"./esbuild-wasm-Dl3vgXvq.js";import{n as $ee,t as ete}from"./wasm-compiler-Ct7QZURL.js";import{n as ra,r as ia,t as tte}from"./just-bash-compat-_TMo8UnL.js";import{_ as nte,a as aa,c as oa,f as sa,g as ca,h as la,l as ua,m as da,n as fa,p as pa,r as ma,u as ha,v as ga,y as _a}from"./github-zip-BmQLkPpT.js";import{a as va,c as ya,d as ba,f as xa,i as Sa,l as Ca,n as wa,o as Ta,p as Ea,r as Da,s as Oa,u as ka}from"./github-install-CjSc36VN.js";import{n as Aa,t as ja}from"./magick-wasm-266b8ntc.js";import{i as Ma,n as Na,r as Pa,t as Fa}from"./pdf-raster-BWk6ezTX.js";import{t as Ia}from"./permissions-surface-registry-BqPdUk9w.js";import{a as La,c as Ra,d as za,f as Ba,i as Va,l as Ha,n as Ua,o as Wa,p as Ga,r as Ka,s as qa,t as Ja,u as Ya}from"./installer-VcJEC2uC.js";import{t as Xa}from"./local-llm-BwOFno6K.js";import{t as Za}from"./client-Beg9O208.js";import{t as Qa}from"./redirect-uri-C_VlH29S.js";var $a=class{pending=new Map;issue(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{this.pending.delete(e),i(Error(n))},t);this.pending.set(e,{resolve:r,reject:i,timer:a})})}has(e){return this.pending.has(e)}resolve(e,t){this.take(e)?.resolve(t)}reject(e,t){this.take(e)?.reject(t)}rejectAll(e){for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(Error(e));this.pending.clear()}get size(){return this.pending.size}take(e){let t=this.pending.get(e);if(t)return this.pending.delete(e),clearTimeout(t.timer),t}};function eo(e,t,n){return new Promise((r,i)=>{let a=null,o=!1,s=setTimeout(()=>{o=!0,a?.(),i(Error(n))},t);a=e(e=>{clearTimeout(s),o=!0,a?.(),r(e)}),o&&a()})}const to=r(`cdp`);var no=class{ws=null;nextId=1;_superseded=!1;pending=new $a;listeners=new Map;_state=`disconnected`;get state(){return this._state}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,to.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(to.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),to.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),to.debug(`Send`,{method:e,id:i,sessionId:n});let o=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),o}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return eo(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;to.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(to.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;to.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){let t=e===4001;t?(this._superseded=!0,to.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):to.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size});let n=t?`CDP connection superseded by another SLICC tab/window on this instance`:`CDP connection closed`;this.pending.rejectAll(n),this.cleanup()}cleanup(){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(`CDP client disconnected`)}};const ro=r(`har-recorder`);var io=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n){let r=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await this.client.send(`Network.enable`,{},t),await this.client.send(`Page.enable`,{},t);let i=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,a={id:r,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:i,snapshotCount:0};return this.recordings.set(r,a),this.setupEventListeners(a),await this.ensureDir(`/recordings/${r}`),ro.debug(`Started recording`,{recordingId:r,targetId:e,currentUrl:i}),r}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{n.sessionId===t&&this.handleRequestWillBeSent(e,n)},i=n=>{n.sessionId===t&&this.handleResponseReceived(e,n)},a=n=>{n.sessionId===t&&this.handleLoadingFinished(e,n)},o=n=>{n.sessionId===t&&this.handleLoadingFailed(e,n)},s=r=>{if(r.sessionId!==t)return;let i=r.frame;if(!i?.parentId&&i?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=i.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{ro.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let n=t.requestId,r=t.request,i=t.timestamp;e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let n=t.requestId,r=t.response,i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let n=t.requestId,r=t.timestamp,i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let n=t.requestId;e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return ao(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return ro.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return ro.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),ro.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return ro.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function ao(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){ro.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return ro.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}const oo=`(function() {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
// ===== DOM Utilities =====
|
|
@@ -1178,7 +1178,7 @@ Created: ${new Date().toISOString()}
|
|
|
1178
1178
|
*/
|
|
1179
1179
|
function ww(e,t){let n=``,r=0,i=-1,a=0,o=`\0`;for(let s=0;s<=e.length;++s){if(s<e.length)o=e[s];else if(o===`/`)break;else o=`/`;if(o===`/`){if(i!==s-1&&a!==1){if(a===2){if(n.length<2||r!==2||n.at(-1)!==`.`||n.at(-2)!==`.`){if(n.length>2){let e=n.lastIndexOf(`/`);e===-1?(n=``,r=0):(n=n.slice(0,e),r=n.length-1-n.lastIndexOf(`/`)),i=s,a=0;continue}if(n.length!==0){n=``,r=0,i=s,a=0;continue}}t&&(n+=n.length>0?`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,s):n=e.slice(i+1,s),r=s-i-1}i=s,a=0}else o===`.`&&a!==-1?++a:a=-1}return n}function Tw(e){return e.length>=2&&/^[a-zA-Z]:/.test(e)?e.slice(0,2):null}function Ew(e){if(!e.length)return`.`;e=e.replace(/\\/g,`/`);let t=Tw(e),n=e[0]===`/`||t!==null&&e[2]===`/`,r=e.at(-1)===`/`,i=ww(t?e.slice(2):e,!n);if(!i.length){let e=t?n?t+`/`:t:n?`/`:`.`;return r&&!n?e+`/`:e}return r&&(i+=`/`),t?n?`${t}/${i}`:`${t}${i}`:n?`/${i}`:i}function Y(...e){if(e.length===0)return`.`;let t;for(let n=0;n<e.length;++n){let r=e[n].replace(/\\/g,`/`);r.length!==0&&(/^[a-zA-Z]:\//.test(r)||t===void 0?t=r:t+=`/`+r)}return t===void 0?`.`:Ew(t)}const Dw=e=>{if(typeof e==`number`)return e;e=e.toLowerCase();let t=parseInt(e);return e.endsWith(`k`)&&(t*=1024),e.endsWith(`m`)&&(t*=1048576),e.endsWith(`g`)&&(t*=1073741824),t},Ow=e=>{if(typeof e==`boolean`)return e;if(e=e.trim().toLowerCase(),e===`true`||e===`yes`||e===`on`)return!0;if(e===`false`||e===`no`||e===`off`)return!1;throw Error(`Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${e}`)},kw={core:{filemode:Ow,bare:Ow,logallrefupdates:Ow,symlinks:Ow,ignorecase:Ow,bigFileThreshold:Dw}},Aw=/^\[([A-Za-z0-9-.]+)(?: "(.*)")?\]$/,jw=/^[A-Za-z0-9-.]+$/,Mw=/^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/,Nw=/^[A-Za-z][A-Za-z-]*$/,Pw=/^(.*?)( *[#;].*)$/,Fw=e=>{let t=Aw.exec(e);if(t!=null){let[e,n]=t.slice(1);return[e,n]}return null},Iw=e=>{let t=Mw.exec(e);if(t!=null){let[e,n=`true`]=t.slice(1),r=Lw(n);return[e,zw(r)]}return null},Lw=e=>{let t=Pw.exec(e);if(t==null)return e;let[n,r]=t.slice(1);return Rw(n)&&Rw(r)?`${n}${r}`:n},Rw=e=>(e.match(/(?:^|[^\\])"/g)||[]).length%2!=0,zw=e=>e.split(``).reduce((e,t,n,r)=>{let i=t===`"`&&r[n-1]!==`\\`,a=t===`\\`&&r[n+1]===`"`;return i||a?e:e+t},``),Bw=e=>e==null?null:e.toLowerCase(),Vw=(e,t,n)=>[Bw(e),t,Bw(n)].filter(e=>e!=null).join(`.`),Hw=e=>{let t=e.split(`.`),n=t.shift(),r=t.pop(),i=t.length?t.join(`.`):void 0;return{section:n,subsection:i,name:r,path:Vw(n,i,r),sectionPath:Vw(n,i,null),isSection:!!n}},Uw=(e,t)=>e.reduce((e,n,r)=>t(n)?r:e,-1);var Ww=class e{constructor(e){let t=null,n=null;this.parsedConfig=e?e.split(`
|
|
1180
1180
|
`).map(e=>{let r=null,i=null,a=e.trim(),o=Fw(a),s=o!=null;if(s)[t,n]=o;else{let e=Iw(a);e!=null&&([r,i]=e)}let c=Vw(t,n,r);return{line:e,isSection:s,section:t,subsection:n,name:r,value:i,path:c}}):[]}static from(t){return new e(t)}async get(e,t=!1){let n=Hw(e).path,r=this.parsedConfig.filter(e=>e.path===n).map(({section:e,name:t,value:n})=>{let r=kw[e]&&kw[e][t];return r?r(n):n});return t?r:r.pop()}async getall(e){return this.get(e,!0)}async getSubsections(e){return this.parsedConfig.filter(t=>t.isSection&&t.section===e).map(e=>e.subsection)}async deleteSection(e,t){this.parsedConfig=this.parsedConfig.filter(n=>n.section!==e||n.subsection!==t)}async append(e,t){return this.set(e,t,!0)}async set(e,t,n=!1){let{section:r,subsection:i,name:a,path:o,sectionPath:s,isSection:c}=Hw(e),l=Uw(this.parsedConfig,e=>e.path===o);if(t==null)l!==-1&&this.parsedConfig.splice(l,1);else if(l!==-1){let e=this.parsedConfig[l],r=Object.assign({},e,{name:a,value:t,modified:!0});n?this.parsedConfig.splice(l+1,0,r):this.parsedConfig[l]=r}else{let e=this.parsedConfig.findIndex(e=>e.path===s),n={section:r,subsection:i,name:a,value:t,modified:!0,path:o};if(jw.test(r)&&Nw.test(a)){if(e>=0)this.parsedConfig.splice(e+1,0,n);else{let e={isSection:c,section:r,subsection:i,modified:!0,path:s};this.parsedConfig.push(e,n)}}}}toString(){return this.parsedConfig.map(({line:e,section:t,subsection:n,name:r,value:i,modified:a=!1})=>a?r!=null&&i!=null?typeof i==`string`&&/[#;]/.test(i)?`\t${r} = "${i}"`:`\t${r} = ${i}`:n==null?`[${t}]`:`[${t} "${n}"]`:e).join(`
|
|
1181
|
-
`)}},Gw=class{static async get({fs:e,gitdir:t}){let n=await e.read(`${t}/config`,{encoding:`utf8`});return Ww.from(n)}static async save({fs:e,gitdir:t,config:n}){await e.write(`${t}/config`,n.toString(),{encoding:`utf8`})}};const Kw=e=>[`${e}`,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],qw=[`config`,`description`,`index`,`shallow`,`commondir`];function Jw(e){if(qw.includes(e))throw new vw(e,`refs/heads/${e}`)}var X=class e{static async updateRemoteRefs({fs:t,gitdir:n,remote:r,refs:i,symrefs:a,tags:o,refspecs:s=void 0,prune:c=!1,pruneTags:l=!1}){for(let e of i.values())if(!e.match(/[0-9a-f]{40}/))throw new _w(e);let u=await Gw.get({fs:t,gitdir:n});if(!s){if(s=await u.getall(`remote.${r}.fetch`),s.length===0)throw new yw(r);s.unshift(`+HEAD:refs/remotes/${r}/HEAD`)}let d=Sw.from(s),f=new Map,p=d.translate([...i.keys()]),m=[];for(let[e,t]of d.translate([...a.keys()])){let n=d.translateOne(a.get(e));n&&m.push([t,`ref: ${n}`])}for(let[,e]of p)Jw(e);for(let[e]of m)Jw(e);if(l){let r=await e.listRefs({fs:t,gitdir:n,filepath:`refs/tags`});await e.deleteRefs({fs:t,gitdir:n,refs:r.map(e=>`refs/tags/${e}`)})}if(o){for(let r of i.keys())if(r.startsWith(`refs/tags`)&&!r.endsWith(`^{}`)&&!await e.exists({fs:t,gitdir:n,ref:r})){let e=i.get(r);f.set(r,e)}}for(let[e,t]of p){let n=i.get(e);f.set(t,n)}for(let[e,t]of m)f.set(e,t);let h=[];if(c){for(let r of d.localNamespaces()){let i=(await e.listRefs({fs:t,gitdir:n,filepath:r})).map(e=>`${r}/${e}`);for(let e of i)f.has(e)||h.push(e)}h.length>0&&await e.deleteRefs({fs:t,gitdir:n,refs:h})}for(let[e,r]of f)await nw(e,async()=>t.write(Y(n,e),`${r.trim()}\n`,`utf8`));return{pruned:h}}static async writeRef({fs:e,gitdir:t,ref:n,value:r}){if(Jw(n),!r.match(/[0-9a-f]{40}/))throw new _w(r);await nw(n,async()=>e.write(Y(t,n),`${r.trim()}\n`,`utf8`))}static async writeSymbolicRef({fs:e,gitdir:t,ref:n,value:r}){Jw(n),await nw(n,async()=>e.write(Y(t,n),`ref: ${r.trim()}\n`,`utf8`))}static async deleteRef({fs:t,gitdir:n,ref:r}){return e.deleteRefs({fs:t,gitdir:n,refs:[r]})}static async deleteRefs({fs:e,gitdir:t,refs:n}){n.forEach(Jw),await Promise.all(n.map(n=>e.rm(Y(t,n))));let r=await nw(`packed-refs`,async()=>e.read(`${t}/packed-refs`,{encoding:`utf8`})),i=bw.from(r),a=i.refs.size;for(let e of n)i.refs.has(e)&&i.delete(e);i.refs.size<a&&(r=i.toString(),await nw(`packed-refs`,async()=>e.write(`${t}/packed-refs`,r,{encoding:`utf8`})))}static async resolve({fs:t,gitdir:n,ref:r,depth:i=void 0,visited:a=new Set}){if(i!==void 0&&(i--,i===-1))return r;if(r.startsWith(`ref: `))return r=r.slice(5),e.resolve({fs:t,gitdir:n,ref:r,depth:i,visited:a});if(r.length===40&&/[0-9a-f]{40}/.test(r))return r;let o=await e.packedRefs({fs:t,gitdir:n}),s=Kw(r).filter(e=>!qw.includes(e));for(let r of s){let s=await nw(r,async()=>await t.read(`${n}/${r}`,{encoding:`utf8`})||o.get(r));if(s){if(a.has(r))throw new J(`Circular reference detected while resolving ref "${r}"`);return a.add(r),e.resolve({fs:t,gitdir:n,ref:s.trim(),depth:i,visited:a})}}throw new hw(r)}static async exists({fs:t,gitdir:n,ref:r}){try{return await e.expand({fs:t,gitdir:n,ref:r}),!0}catch{return!1}}static async expand({fs:t,gitdir:n,ref:r}){if(r.length===40&&/[0-9a-f]{40}/.test(r))return r;let i=await e.packedRefs({fs:t,gitdir:n}),a=Kw(r).filter(e=>!qw.includes(e));for(let e of a)if(await nw(e,async()=>t.exists(`${n}/${e}`))||i.has(e))return e;throw new hw(r)}static async expandAgainstMap({ref:e,map:t}){let n=Kw(e);for(let e of n)if(await t.has(e))return e;throw new hw(e)}static resolveAgainstMap({ref:t,fullref:n=t,depth:r=void 0,map:i}){if(r!==void 0&&(r--,r===-1))return{fullref:n,oid:t};if(t.startsWith(`ref: `))return t=t.slice(5),e.resolveAgainstMap({ref:t,fullref:n,depth:r,map:i});if(t.length===40&&/[0-9a-f]{40}/.test(t))return{fullref:n,oid:t};let a=Kw(t);for(let t of a){let n=i.get(t);if(n)return e.resolveAgainstMap({ref:n.trim(),fullref:t,depth:r,map:i})}throw new hw(t)}static async packedRefs({fs:e,gitdir:t}){let n=await nw(`packed-refs`,async()=>e.read(`${t}/packed-refs`,{encoding:`utf8`}));return bw.from(n).refs}static async listRefs({fs:t,gitdir:n,filepath:r}){let i=e.packedRefs({fs:t,gitdir:n}),a=null;try{a=await t.readdirDeep(`${n}/${r}`),a=a.map(e=>e.replace(`${n}/${r}/`,``))}catch{a=[]}for(let e of(await i).keys())e.startsWith(r)&&(e=e.replace(r+`/`,``),a.includes(e)||a.push(e));return a.sort(Cw),a}static async listBranches({fs:t,gitdir:n,remote:r}){return r?e.listRefs({fs:t,gitdir:n,filepath:`refs/remotes/${r}`}):e.listRefs({fs:t,gitdir:n,filepath:`refs/heads`})}static async listTags({fs:t,gitdir:n}){return(await e.listRefs({fs:t,gitdir:n,filepath:`refs/tags`})).filter(e=>!e.endsWith(`^{}`))}};function Yw(e,t){return RC(Xw(e),Xw(t))}function Xw(e){return e.mode===`040000`?e.path+`/`:e.path}function Zw(e){switch(e){case`040000`:return`tree`;case`100644`:return`blob`;case`100755`:return`blob`;case`120000`:return`blob`;case`160000`:return`commit`}throw new J(`Unexpected GitTree entry mode: ${e}`)}function Qw(e){let t=[],n=0;for(;n<e.length;){let r=e.indexOf(32,n);if(r===-1)throw new J(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next space character.`);let i=e.indexOf(0,n);if(i===-1)throw new J(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next null character.`);let a=e.slice(n,r).toString(`utf8`);a===`40000`&&(a=`040000`);let o=Zw(a),s=e.slice(r+1,i).toString(`utf8`),c=s.replace(/[\u200C-\u200F\u202A-\u202E\u206A-\u206F\uFEFF]/g,``),l=c.split(`:`)[0].toLowerCase().replace(/[. ]+$/,``);if(s.includes(`\\`)||s.includes(`/`)||c===`.`||c===`..`||l===`.git`||/^\.?git~[1-9]$/.test(l))throw new IC(s);let u=e.slice(i+1,i+21).toString(`hex`);n=i+21,t.push({mode:a,path:s,oid:u,type:o})}return t}function $w(e){if(typeof e==`number`&&(e=e.toString(8)),e.match(/^0?4.*/))return`040000`;if(e.match(/^1006.*/))return`100644`;if(e.match(/^1007.*/))return`100755`;if(e.match(/^120.*/))return`120000`;if(e.match(/^160.*/))return`160000`;throw new J(`Could not understand file mode: ${e}`)}function eT(e){return!e.oid&&e.sha&&(e.oid=e.sha),e.mode=$w(e.mode),e.type||=Zw(e.mode),e}var tT=class e{constructor(e){if(Buffer.isBuffer(e))this._entries=Qw(e);else if(Array.isArray(e))this._entries=e.map(eT);else throw new J(`invalid type passed to GitTree constructor`);this._entries.sort(zC)}static from(t){return new e(t)}render(){return this._entries.map(e=>`${e.mode} ${e.type} ${e.oid} ${e.path}`).join(`
|
|
1181
|
+
`)}},Gw=class{static async get({fs:e,gitdir:t}){let n=await e.read(`${t}/config`,{encoding:`utf8`});return Ww.from(n)}static async save({fs:e,gitdir:t,config:n}){await e.write(`${t}/config`,n.toString(),{encoding:`utf8`})}};const Kw=e=>[`${e}`,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],qw=[`config`,`description`,`index`,`shallow`,`commondir`];function Jw(e){if(qw.includes(e))throw new vw(e,`refs/heads/${e}`)}var X=class e{static async updateRemoteRefs({fs:t,gitdir:n,remote:r,refs:i,symrefs:a,tags:o,refspecs:s=void 0,prune:c=!1,pruneTags:l=!1}){for(let e of i.values())if(!e.match(/[0-9a-f]{40}/))throw new _w(e);let u=await Gw.get({fs:t,gitdir:n});if(!s){if(s=await u.getall(`remote.${r}.fetch`),s.length===0)throw new yw(r);s.unshift(`+HEAD:refs/remotes/${r}/HEAD`)}let d=Sw.from(s),f=new Map,p=d.translate([...i.keys()]),m=[];for(let[e,t]of d.translate([...a.keys()])){let n=d.translateOne(a.get(e));n&&m.push([t,`ref: ${n}`])}for(let[,e]of p)Jw(e);for(let[e]of m)Jw(e);if(l){let r=await e.listRefs({fs:t,gitdir:n,filepath:`refs/tags`});await e.deleteRefs({fs:t,gitdir:n,refs:r.map(e=>`refs/tags/${e}`)})}if(o){for(let r of i.keys())if(r.startsWith(`refs/tags`)&&!r.endsWith(`^{}`)&&!await e.exists({fs:t,gitdir:n,ref:r})){let e=i.get(r);f.set(r,e)}}for(let[e,t]of p){let n=i.get(e);f.set(t,n)}for(let[e,t]of m)f.set(e,t);let h=[];if(c){for(let r of d.localNamespaces()){let i=(await e.listRefs({fs:t,gitdir:n,filepath:r})).map(e=>`${r}/${e}`);for(let e of i)f.has(e)||h.push(e)}h.length>0&&await e.deleteRefs({fs:t,gitdir:n,refs:h})}for(let[e,r]of f)await nw(e,async()=>t.write(Y(n,e),`${r.trim()}\n`,`utf8`));return{pruned:h}}static async writeRef({fs:e,gitdir:t,ref:n,value:r}){if(Jw(n),!r.match(/[0-9a-f]{40}/))throw new _w(r);await nw(n,async()=>e.write(Y(t,n),`${r.trim()}\n`,`utf8`))}static async writeSymbolicRef({fs:e,gitdir:t,ref:n,value:r}){Jw(n),await nw(n,async()=>e.write(Y(t,n),`ref: ${r.trim()}\n`,`utf8`))}static async deleteRef({fs:t,gitdir:n,ref:r}){return e.deleteRefs({fs:t,gitdir:n,refs:[r]})}static async deleteRefs({fs:e,gitdir:t,refs:n}){n.forEach(Jw),await Promise.all(n.map(n=>e.rm(Y(t,n))));let r=await nw(`packed-refs`,async()=>e.read(`${t}/packed-refs`,{encoding:`utf8`})),i=bw.from(r),a=i.refs.size;for(let e of n)i.refs.has(e)&&i.delete(e);i.refs.size<a&&(r=i.toString(),await nw(`packed-refs`,async()=>e.write(`${t}/packed-refs`,r,{encoding:`utf8`})))}static async resolve({fs:t,gitdir:n,ref:r,depth:i=void 0,visited:a=new Set}){if(i!==void 0&&(i--,i===-1))return r;if(r.startsWith(`ref: `))return r=r.slice(5),e.resolve({fs:t,gitdir:n,ref:r,depth:i,visited:a});if(r.length===40&&/[0-9a-f]{40}/.test(r))return r;let o=await e.packedRefs({fs:t,gitdir:n}),s=Kw(r).filter(e=>!qw.includes(e));for(let r of s){let s=await nw(r,async()=>await t.read(`${n}/${r}`,{encoding:`utf8`})||o.get(r));if(s){if(a.has(r))throw new J(`Circular reference detected while resolving ref "${r}"`);return a.add(r),e.resolve({fs:t,gitdir:n,ref:s.trim(),depth:i,visited:a})}}throw new hw(r)}static async isUnbornBranch({fs:t,gitdir:n,ref:r}){let i;try{i=await e.resolve({fs:t,gitdir:n,ref:`HEAD`,depth:2})}catch{return!1}return i.startsWith(`refs/heads/`)?r===`HEAD`||Kw(r).includes(i):!1}static async exists({fs:t,gitdir:n,ref:r}){try{return await e.expand({fs:t,gitdir:n,ref:r}),!0}catch{return!1}}static async expand({fs:t,gitdir:n,ref:r}){if(r.length===40&&/[0-9a-f]{40}/.test(r))return r;let i=await e.packedRefs({fs:t,gitdir:n}),a=Kw(r).filter(e=>!qw.includes(e));for(let e of a)if(await nw(e,async()=>t.exists(`${n}/${e}`))||i.has(e))return e;throw new hw(r)}static async expandAgainstMap({ref:e,map:t}){let n=Kw(e);for(let e of n)if(await t.has(e))return e;throw new hw(e)}static resolveAgainstMap({ref:t,fullref:n=t,depth:r=void 0,map:i}){if(r!==void 0&&(r--,r===-1))return{fullref:n,oid:t};if(t.startsWith(`ref: `))return t=t.slice(5),e.resolveAgainstMap({ref:t,fullref:n,depth:r,map:i});if(t.length===40&&/[0-9a-f]{40}/.test(t))return{fullref:n,oid:t};let a=Kw(t);for(let t of a){let n=i.get(t);if(n)return e.resolveAgainstMap({ref:n.trim(),fullref:t,depth:r,map:i})}throw new hw(t)}static async packedRefs({fs:e,gitdir:t}){let n=await nw(`packed-refs`,async()=>e.read(`${t}/packed-refs`,{encoding:`utf8`}));return bw.from(n).refs}static async listRefs({fs:t,gitdir:n,filepath:r}){let i=e.packedRefs({fs:t,gitdir:n}),a=null;try{a=await t.readdirDeep(`${n}/${r}`),a=a.map(e=>e.replace(`${n}/${r}/`,``))}catch{a=[]}for(let e of(await i).keys())e.startsWith(r)&&(e=e.replace(r+`/`,``),a.includes(e)||a.push(e));return a.sort(Cw),a}static async listBranches({fs:t,gitdir:n,remote:r}){return r?e.listRefs({fs:t,gitdir:n,filepath:`refs/remotes/${r}`}):e.listRefs({fs:t,gitdir:n,filepath:`refs/heads`})}static async listTags({fs:t,gitdir:n}){return(await e.listRefs({fs:t,gitdir:n,filepath:`refs/tags`})).filter(e=>!e.endsWith(`^{}`))}};function Yw(e,t){return RC(Xw(e),Xw(t))}function Xw(e){return e.mode===`040000`?e.path+`/`:e.path}function Zw(e){switch(e){case`040000`:return`tree`;case`100644`:return`blob`;case`100755`:return`blob`;case`120000`:return`blob`;case`160000`:return`commit`}throw new J(`Unexpected GitTree entry mode: ${e}`)}function Qw(e){let t=[],n=0;for(;n<e.length;){let r=e.indexOf(32,n);if(r===-1)throw new J(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next space character.`);let i=e.indexOf(0,n);if(i===-1)throw new J(`GitTree: Error parsing buffer at byte location ${n}: Could not find the next null character.`);let a=e.slice(n,r).toString(`utf8`);a===`40000`&&(a=`040000`);let o=Zw(a),s=e.slice(r+1,i).toString(`utf8`),c=s.replace(/[\u200C-\u200F\u202A-\u202E\u206A-\u206F\uFEFF]/g,``),l=c.split(`:`)[0].toLowerCase().replace(/[. ]+$/,``);if(s.includes(`\\`)||s.includes(`/`)||c===`.`||c===`..`||l===`.git`||/^\.?git~[1-9]$/.test(l))throw new IC(s);let u=e.slice(i+1,i+21).toString(`hex`);n=i+21,t.push({mode:a,path:s,oid:u,type:o})}return t}function $w(e){if(typeof e==`number`&&(e=e.toString(8)),e.match(/^0?4.*/))return`040000`;if(e.match(/^1006.*/))return`100644`;if(e.match(/^1007.*/))return`100755`;if(e.match(/^120.*/))return`120000`;if(e.match(/^160.*/))return`160000`;throw new J(`Could not understand file mode: ${e}`)}function eT(e){return!e.oid&&e.sha&&(e.oid=e.sha),e.mode=$w(e.mode),e.type||=Zw(e.mode),e}var tT=class e{constructor(e){if(Buffer.isBuffer(e))this._entries=Qw(e);else if(Array.isArray(e))this._entries=e.map(eT);else throw new J(`invalid type passed to GitTree constructor`);this._entries.sort(zC)}static from(t){return new e(t)}render(){return this._entries.map(e=>`${e.mode} ${e.type} ${e.oid} ${e.path}`).join(`
|
|
1182
1182
|
`)}toObject(){let e=[...this._entries];return e.sort(Yw),Buffer.concat(e.map(e=>{let t=Buffer.from(e.mode.replace(/^0/,``)),n=Buffer.from(` `),r=Buffer.from(e.path,`utf8`),i=Buffer.from([0]),a=Buffer.from(e.oid,`hex`);return Buffer.concat([t,n,r,i,a])}))}entries(){return this._entries}*[Symbol.iterator](){for(let e of this._entries)yield e}},nT=class{static wrap({type:e,object:t}){let n=`${e} ${t.length}\x00`,r=n.length,i=r+t.length,a=new Uint8Array(i);for(let e=0;e<r;e++)a[e]=n.charCodeAt(e);return a.set(t,r),a}static unwrap(e){let t=e.indexOf(32),n=e.indexOf(0),r=e.slice(0,t).toString(`utf8`),i=e.slice(t+1,n).toString(`utf8`),a=e.length-(n+1);if(parseInt(i)!==a)throw new J(`Length mismatch: expected ${i} bytes but got ${a} instead.`);return{type:r,object:Buffer.from(e.slice(n+1))}}};async function rT({fs:e,gitdir:t,oid:n}){let r=`objects/${n.slice(0,2)}/${n.slice(2)}`,i=await e.read(`${t}/${r}`);return i?{object:i,format:`deflated`,source:r}:null}function iT(e,t){let n=new LC(e),r=aT(n);if(r!==t.byteLength)throw new J(`applyDelta expected source buffer to be ${r} bytes but the provided buffer was ${t.length} bytes`);let i=aT(n),a,o=sT(n,t);if(o.byteLength===i)a=o;else{let e=[o],r=o.byteLength;for(;!n.eof();){let i=sT(n,t);e.push(i),r+=i.byteLength}if(i!==r)throw new J(`applyDelta expected target buffer to be ${i} bytes but the resulting buffer was ${r} bytes`);a=Buffer.concat(e,i)}return a}function aT(e){let t=0,n=0,r=null;do r=e.readUInt8(),t|=(r&127)<<n,n+=7;while(r&128);return t}function oT(e,t,n){let r=0,i=0;for(;n--;)t&1&&(r|=e.readUInt8()<<i),t>>=1,i+=8;return r}function sT(e,t){let n=e.readUInt8();if(n&128){let r=oT(e,n&15,4),i=oT(e,(n&112)>>4,3);return i===0&&(i=65536),t.slice(r,r+i)}return e.slice(n)}function Cie(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function cT(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:Cie(e)}var lT=class{constructor(e){if(typeof Buffer>`u`)throw Error(`Missing Buffer dependency`);this.stream=cT(e),this.buffer=null,this.cursor=0,this.undoCursor=0,this.started=!1,this._ended=!1,this._discardedBytes=0}eof(){return this._ended&&this.cursor===this.buffer.length}tell(){return this._discardedBytes+this.cursor}async byte(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(1),this.buffer[this.undoCursor]}async chunk(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(this.buffer.length),this.buffer.slice(this.undoCursor,this.cursor)}async read(e){if(!this.eof())return this.started||await this._init(),this.cursor+e>this.buffer.length&&(this._trim(),await this._accumulate(e)),this._moveCursor(e),this.buffer.slice(this.undoCursor,this.cursor)}async skip(e){this.eof()||(this.started||await this._init(),this.cursor+e>this.buffer.length&&(this._trim(),await this._accumulate(e)),this._moveCursor(e))}async undo(){this.cursor=this.undoCursor}async _next(){this.started=!0;let{done:e,value:t}=await this.stream.next();return e&&(this._ended=!0,!t)?Buffer.alloc(0):(t&&=Buffer.from(t),t)}_trim(){this.buffer=this.buffer.slice(this.undoCursor),this.cursor-=this.undoCursor,this._discardedBytes+=this.undoCursor,this.undoCursor=0}_moveCursor(e){this.undoCursor=this.cursor,this.cursor+=e,this.cursor>this.buffer.length&&(this.cursor=this.buffer.length)}async _accumulate(e){if(this._ended)return;let t=[this.buffer];for(;this.cursor+e>wie(t);){let e=await this._next();if(this._ended)break;t.push(e)}this.buffer=Buffer.concat(t)}async _loadnext(){this._discardedBytes+=this.buffer.length,this.undoCursor=0,this.cursor=0,this.buffer=await this._next()}async _init(){this.buffer=await this._next()}};function wie(e){return e.reduce((e,t)=>e+t.length,0)}async function Tie(e,t){let n=new lT(e),r=await n.read(4);if(r=r.toString(`utf8`),r!==`PACK`)throw new J(`Invalid PACK header '${r}'`);let i=await n.read(4);if(i=i.readUInt32BE(0),i!==2)throw new J(`Invalid packfile version: ${i}`);let a=await n.read(4);if(a=a.readUInt32BE(0),!(a<1))for(;!n.eof()&&a--;){let e=n.tell(),{type:r,length:i,ofs:o,reference:s}=await Eie(n),c=new kC.default.Inflate;for(;!c.result;){let l=await n.chunk();if(!l)break;if(c.push(l,!1),c.err)throw new J(`Pako error: ${c.msg}`);if(c.result){if(c.result.length!==i)throw new J(`Inflated object size is different from that stated in packfile.`);await n.undo(),await n.read(l.length-c.strm.avail_in);let u=n.tell();await t({data:c.result,type:r,num:a,offset:e,end:u,reference:s,ofs:o})}}}}async function Eie(e){let t=await e.byte(),n=t>>4&7,r=t&15;if(t&128){let n=4;do t=await e.byte(),r|=(t&127)<<n,n+=7;while(t&128)}let i,a;if(n===6){let n=0;i=0;let r=[];do t=await e.byte(),i|=(t&127)<<n,n+=7,r.push(t);while(t&128);a=Buffer.from(r)}return n===7&&(a=await e.read(20)),{type:n,length:r,ofs:i,reference:a}}let uT=!1;async function dT(e){return uT===null&&(uT=Oie()),uT?Die(e):kC.default.inflate(e)}async function Die(e){let t=new DecompressionStream(`deflate`),n=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(n).arrayBuffer())}function Oie(){try{if(new DecompressionStream(`deflate`))return!0}catch{}return!1}function kie(e){let t=[],n=0,r=0;do{n=e.readUInt8();let i=n&127;t.push(i),r=n&128}while(r);return t.reduce((e,t)=>e+1<<7|t,-1)}function Aie(e,t){let n=t,r=4,i=null;do i=e.readUInt8(),n|=(i&127)<<r,r+=7;while(i&128);return n}var fT=class e{constructor(e){Object.assign(this,e),this.offsetCache={}}static async fromIdx({idx:t,getExternalRefDelta:n}){let r=new LC(t);if(r.slice(4).toString(`hex`)!==`ff744f63`)return;let i=r.readUInt32BE();if(i!==2)throw new J(`Unable to read version ${i} packfile IDX. (Only version 2 supported)`);if(t.byteLength>2147483648)throw new J(`To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.`);r.seek(r.tell()+1020);let a=r.readUInt32BE(),o=[];for(let e=0;e<a;e++){let t=r.slice(20).toString(`hex`);o[e]=t}r.seek(r.tell()+4*a);let s=new Map;for(let e=0;e<a;e++)s.set(o[e],r.readUInt32BE());let c=r.slice(20).toString(`hex`);return new e({hashes:o,crcs:{},offsets:s,packfileSha:c,getExternalRefDelta:n})}static async fromPack({pack:t,getExternalRefDelta:n,onProgress:r}){let i={1:`commit`,2:`tree`,3:`blob`,4:`tag`,6:`ofs-delta`,7:`ref-delta`},a={},o=t.slice(-20).toString(`hex`),s=[],c={},l=new Map,u=null,d=null;await Tie([t],async({data:e,type:t,reference:n,offset:o,num:s})=>{u===null&&(u=s);let c=Math.floor((u-s)*100/u);c!==d&&r&&await r({phase:`Receiving objects`,loaded:u-s,total:u}),d=c,t=i[t],([`commit`,`tree`,`blob`,`tag`].includes(t)||t===`ofs-delta`||t===`ref-delta`)&&(a[o]={type:t,offset:o})});let f=Object.keys(a).map(Number);for(let[e,n]of f.entries()){let r=e+1===f.length?t.byteLength-20:f[e+1],i=a[n],o=OC.default.buf(t.slice(n,r))>>>0;i.end=r,i.crc=o}let p=new e({pack:Promise.resolve(t),packfileSha:o,crcs:c,hashes:s,offsets:l,getExternalRefDelta:n});d=null;let m=0,h=[0,0,0,0,0,0,0,0,0,0,0,0];for(let e in a){e=Number(e);let t=Math.floor(m*100/u);t!==d&&r&&await r({phase:`Resolving deltas`,loaded:m,total:u}),m++,d=t;let n=a[e];if(!n.oid)try{p.readDepth=0,p.externalReadDepth=0;let{type:t,object:r}=await p.readSlice({start:e});h[p.readDepth]+=1;let i=await KC(nT.wrap({type:t,object:r}));n.oid=i,s.push(i),l.set(i,e),c[i]=n.crc}catch{continue}}return s.sort(),p}async toBuffer(){let e=[],t=(t,n)=>{e.push(Buffer.from(t,n))};t(`ff744f63`,`hex`),t(`00000002`,`hex`);let n=new LC(Buffer.alloc(1024));for(let e=0;e<256;e++){let t=0;for(let n of this.hashes)parseInt(n.slice(0,2),16)<=e&&t++;n.writeUInt32BE(t)}e.push(n.buffer);for(let e of this.hashes)t(e,`hex`);let r=new LC(Buffer.alloc(this.hashes.length*4));for(let e of this.hashes)r.writeUInt32BE(this.crcs[e]);e.push(r.buffer);let i=new LC(Buffer.alloc(this.hashes.length*4));for(let e of this.hashes)i.writeUInt32BE(this.offsets.get(e));e.push(i.buffer),t(this.packfileSha,`hex`);let a=Buffer.concat(e),o=await KC(a),s=Buffer.alloc(20);return s.write(o,`hex`),Buffer.concat([a,s])}async load({pack:e}){this.pack=e}async unload(){this.pack=null}async read({oid:e}){if(!this.offsets.get(e)){if(this.getExternalRefDelta)return this.externalReadDepth++,this.getExternalRefDelta(e);throw new J(`Could not read object ${e} from packfile`)}let t=this.offsets.get(e);return this.readSlice({start:t})}async readSlice({start:e}){if(this.offsetCache[e])return Object.assign({},this.offsetCache[e]);this.readDepth++;let t={16:`commit`,32:`tree`,48:`blob`,64:`tag`,96:`ofs_delta`,112:`ref_delta`},n=await this.pack;if(!n)throw new J(`Could not read packfile data. The packfile may be missing, corrupted, or too large to read into memory.`);let r=n.slice(e),i=new LC(r),a=i.readUInt8(),o=a&112,s=t[o];if(s===void 0)throw new J(`Unrecognized type: 0b`+o.toString(2));let c=a&15,l=c;a&128&&(l=Aie(i,c));let u=null,d=null;if(s===`ofs_delta`){let t=e-kie(i);({object:u,type:s}=await this.readSlice({start:t}))}if(s===`ref_delta`){let e=i.slice(20).toString(`hex`);({object:u,type:s}=await this.read({oid:e}))}let f=r.slice(i.tell());if(d=Buffer.from(await dT(f)),d.byteLength!==l)throw new J(`Packfile told us object would have length ${l} but it had length ${d.byteLength}`);return u&&(d=Buffer.from(iT(d,u))),this.readDepth>3&&(this.offsetCache[e]={type:s,object:d}),{type:s,format:`content`,object:d}}};const pT=Symbol(`PackfileCache`);async function jie({fs:e,filename:t,getExternalRefDelta:n,emitter:r,emitterPrefix:i}){let a=await e.read(t);return fT.fromIdx({idx:a,getExternalRefDelta:n})}function mT({fs:e,cache:t,filename:n,getExternalRefDelta:r,emitter:i,emitterPrefix:a}){t[pT]||(t[pT]=new Map);let o=t[pT].get(n);return o||(o=jie({fs:e,filename:n,getExternalRefDelta:r,emitter:i,emitterPrefix:a}),t[pT].set(n,o)),o}async function Mie(e,{start:t=0,end:n=e.length}={}){return KC(e.subarray(t,n))}async function Nie({fs:e,cache:t,gitdir:n,oid:r,format:i=`content`,getExternalRefDelta:a}){let o=await e.readdir(Y(n,`objects/pack`));o=o.filter(e=>e.endsWith(`.idx`));for(let i of o){let o=`${n}/objects/pack/${i}`,s=await mT({fs:e,cache:t,filename:o,getExternalRefDelta:a});if(s.error)throw new J(s.error);if(s.offsets.has(r)){let t=o.replace(/idx$/,`pack`);s.pack||=e.read(t);let n=await s.pack;if(!n)throw s.pack=null,new J(`Could not read packfile at ${t}. The file may be missing, corrupted, or too large to read into memory.`);if(!s._checksumVerified){let e=s.packfileSha,t=n.subarray(-20),r=Array.from(t).map(e=>e.toString(16).padStart(2,`0`)).join(``);if(r!==e)throw new J(`Packfile trailer mismatch: expected ${e}, got ${r}. The packfile may be corrupted.`);let i=await Mie(n,{start:0,end:n.length-20});if(i!==e)throw new J(`Packfile payload corrupted: calculated ${i} but expected ${e}. The packfile may have been tampered with.`);s._checksumVerified=!0}let c=await s.read({oid:r,getExternalRefDelta:a});return c.format=`content`,c.source=`objects/pack/${i.replace(/idx$/,`pack`)}`,c}}return null}async function hT({fs:e,cache:t,gitdir:n,oid:r,format:i=`content`}){if(![`deflated`,`wrapped`,`content`].includes(i))throw new J(`invalid requested format "${i}"`);let a=r=>hT({fs:e,cache:t,gitdir:n,oid:r}),o;if(r===`4b825dc642cb6eb9a060e54bf8d69288fbee4904`&&(o={format:`wrapped`,object:Buffer.from(`tree 0\0`)}),o||=await rT({fs:e,gitdir:n,oid:r}),!o){if(o=await Nie({fs:e,cache:t,gitdir:n,oid:r,getExternalRefDelta:a}),!o)throw new hw(r);return o}if(i===`deflated`||(o.format===`deflated`&&(o.object=Buffer.from(await dT(o.object)),o.format=`wrapped`),i===`wrapped`))return o;let s=await KC(o.object);if(s!==r)throw new J(`SHA check failed! Expected ${r}, computed ${s}`);let{object:c,type:l}=nT.unwrap(o.object);return o.type=l,o.object=c,o.format=`content`,o}var gT=class e extends PC{constructor(t,n,r=!0){super(`Failed to create ${t} at ${n} because it already exists.${r?` (Hint: use 'force: true' parameter to overwrite existing ${t}.)`:``}`),this.code=this.name=e.code,this.data={noun:t,where:n,canForce:r}}};gT.code=`AlreadyExistsError`;var _T=class e extends PC{constructor(t,n,r){super(`Found multiple ${t} matching "${n}" (${r.join(`, `)}). Use a longer abbreviation length to disambiguate them.`),this.code=this.name=e.code,this.data={nouns:t,short:n,matches:r}}};_T.code=`AmbiguousError`;var vT=class e extends PC{constructor(t){super(`Your local changes to the following files would be overwritten by checkout: ${t.join(`, `)}`),this.code=this.name=e.code,this.data={filepaths:t}}};vT.code=`CheckoutConflictError`;var yT=class e extends PC{constructor(t,n){super(`Cannot cherry-pick merge commit ${t}. Merge commits have ${n} parents and require specifying which parent to use as the base.`),this.code=this.name=e.code,this.data={oid:t,parentCount:n}}};yT.code=`CherryPickMergeCommitError`;var bT=class e extends PC{constructor(t){super(`Cannot cherry-pick root commit ${t}. Root commits have no parents.`),this.code=this.name=e.code,this.data={oid:t}}};bT.code=`CherryPickRootCommitError`;var xT=class e extends PC{constructor(t,n){super(`Failed to checkout "${t}" because commit ${n} is not available locally. Do a git fetch to make the branch available locally.`),this.code=this.name=e.code,this.data={ref:t,oid:n}}};xT.code=`CommitNotFetchedError`;var ST=class e extends PC{constructor(){super(`Cannot create an empty commit when disallowEmpty is true.`),this.code=this.name=e.code,this.data={}}};ST.code=`EmptyCommitError`;var CT=class e extends PC{constructor(){super(`Empty response from git server.`),this.code=this.name=e.code,this.data={}}};CT.code=`EmptyServerResponseError`;var wT=class e extends PC{constructor(){super(`A simple fast-forward merge was not possible.`),this.code=this.name=e.code,this.data={}}};wT.code=`FastForwardError`;var TT=class e extends PC{constructor(t,n){super(`One or more branches were not updated: ${t}`),this.code=this.name=e.code,this.data={prettyDetails:t,result:n}}};TT.code=`GitPushError`;var ET=class e extends PC{constructor(t,n,r){super(`HTTP Error: ${t} ${n}`),this.code=this.name=e.code,this.data={statusCode:t,statusMessage:n,response:r}}};ET.code=`HttpError`;var DT=class e extends PC{constructor(t){let n=`invalid filepath`;t===`leading-slash`||t===`trailing-slash`?n=`"filepath" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.`:t===`directory`&&(n=`"filepath" should not be a directory.`),super(n),this.code=this.name=e.code,this.data={reason:t}}};DT.code=`InvalidFilepathError`;var OT=class e extends PC{constructor(t){super(`Maximum search depth of ${t} exceeded.`),this.code=this.name=e.code,this.data={depth:t}}};OT.code=`MaxDepthError`;var kT=class e extends PC{constructor(){super(`Merges with conflicts are not supported yet.`),this.code=this.name=e.code,this.data={}}};kT.code=`MergeNotSupportedError`;var AT=class e extends PC{constructor(t,n,r,i){super(`Automatic merge failed with one or more merge conflicts in the following files: ${t.toString()}. Fix conflicts then commit the result.`),this.code=this.name=e.code,this.data={filepaths:t,bothModified:n,deleteByUs:r,deleteByTheirs:i}}};AT.code=`MergeConflictError`;var jT=class e extends PC{constructor(t){super(`No name was provided for ${t} in the argument or in the .git/config file.`),this.code=this.name=e.code,this.data={role:t}}};jT.code=`MissingNameError`;var MT=class e extends PC{constructor(t){super(`The function requires a "${t}" parameter but none was provided.`),this.code=this.name=e.code,this.data={parameter:t}}};MT.code=`MissingParameterError`;var NT=class e extends PC{constructor(t){super(`There are multiple errors that were thrown by the method. Please refer to the "errors" property to see more`),this.code=this.name=e.code,this.data={errors:t},this.errors=t}};NT.code=`MultipleGitError`;var PT=class e extends PC{constructor(t,n){super(`Expected "${t}" but received "${n}".`),this.code=this.name=e.code,this.data={expected:t,actual:n}}};PT.code=`ParseError`;var FT=class e extends PC{constructor(t){let n=``;t===`not-fast-forward`?n=` because it was not a simple fast-forward`:t===`tag-exists`&&(n=` because tag already exists`),super(`Push rejected${n}. Use "force: true" to override.`),this.code=this.name=e.code,this.data={reason:t}}};FT.code=`PushRejectedError`;var IT=class e extends PC{constructor(t,n){super(`Remote does not support the "${t}" so the "${n}" parameter cannot be used.`),this.code=this.name=e.code,this.data={capability:t,parameter:n}}};IT.code=`RemoteCapabilityError`;var LT=class e extends PC{constructor(t,n){super(`Remote did not reply using the "smart" HTTP protocol. Expected "001e# service=git-upload-pack" but received: ${t}`),this.code=this.name=e.code,this.data={preview:t,response:n}}};LT.code=`SmartHttpError`;var RT=class e extends PC{constructor(t,n,r){super(`Git remote "${t}" uses an unrecognized transport protocol: "${n}"`),this.code=this.name=e.code,this.data={url:t,transport:n,suggestion:r}}};RT.code=`UnknownTransportError`;var zT=class e extends PC{constructor(t){super(`Cannot parse remote URL: "${t}"`),this.code=this.name=e.code,this.data={url:t}}};zT.code=`UrlParseError`;var BT=class e extends PC{constructor(){super(`The operation was canceled.`),this.code=this.name=e.code,this.data={}}};BT.code=`UserCanceledError`;var Pie=class e extends PC{constructor(t){super(`Could not merge index: Entry for '${t}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`),this.code=this.name=e.code,this.data={filepath:t}}};Pie.code=`IndexResetError`;var VT=class e extends PC{constructor(t){super(`"${t}" does not point to any commit. You're maybe working on a repository with no commits yet. `),this.code=this.name=e.code,this.data={ref:t}}};VT.code=`NoCommitError`;function HT({name:e,email:t,timestamp:n,timezoneOffset:r}){return r=Fie(r),`${e} <${t}> ${n} ${r}`}function Fie(e){let t=Iie(Lie(e));e=Math.abs(e);let n=Math.floor(e/60);e-=n*60;let r=String(n),i=String(e);return r.length<2&&(r=`0`+r),i.length<2&&(i=`0`+i),(t===-1?`-`:`+`)+r+i}function Iie(e){return Math.sign(e)||(Object.is(e,-0)?-1:1)}function Lie(e){return e===0?e:-e}function UT(e){return e=e.replace(/\r/g,``),e=e.replace(/^\n+/,``),e=e.replace(/\n+$/,``)+`
|
|
1183
1183
|
`,e}function WT(e){let[,t,n,r,i]=e.match(/^(.*) <(.*)> (.*) (.*)$/);return{name:t,email:n,timestamp:Number(r),timezoneOffset:Rie(i)}}function Rie(e){let[,t,n,r]=e.match(/(\+|-)(\d\d)(\d\d)/);return r=(t===`+`?1:-1)*(Number(n)*60+Number(r)),zie(r)}function zie(e){return e===0?e:-e}var GT=class e{constructor(t){if(typeof t==`string`)this._tag=t;else if(Buffer.isBuffer(t))this._tag=t.toString(`utf8`);else if(typeof t==`object`)this._tag=e.render(t);else throw new J(`invalid type passed to GitAnnotatedTag constructor`)}static from(t){return new e(t)}static render(e){return`object ${e.object}
|
|
1184
1184
|
type ${e.type}
|
|
@@ -1217,11 +1217,11 @@ gpgsig`)),n=e.slice(e.indexOf(`-----END PGP SIGNATURE-----
|
|
|
1217
1217
|
`)+28);return UT(t+`
|
|
1218
1218
|
`+n)}isolateSignature(){return Bie(this._commit.slice(this._commit.indexOf(`-----BEGIN PGP SIGNATURE-----`),this._commit.indexOf(`-----END PGP SIGNATURE-----`)+27))}static async sign(t,n,r){let i=t.withoutSignature(),a=e.justMessage(t._commit),{signature:o}=await n({payload:i,secretKey:r});o=UT(o);let s=e.justHeaders(t._commit)+`
|
|
1219
1219
|
gpgsig`+KT(o)+`
|
|
1220
|
-
`+a;return e.from(s)}};async function JT({fs:e,cache:t,gitdir:n,oid:r}){if(r===`4b825dc642cb6eb9a060e54bf8d69288fbee4904`)return{tree:tT.from([]),oid:r};let{type:i,object:a}=await hT({fs:e,cache:t,gitdir:n,oid:r});if(i===`tag`)return r=GT.from(a).parse().object,JT({fs:e,cache:t,gitdir:n,oid:r});if(i===`commit`)return r=qT.from(a).parse().tree,JT({fs:e,cache:t,gitdir:n,oid:r});if(i!==`tree`)throw new gw(r,i,`tree`);return{tree:tT.from(a),oid:r}}var Vie=class{constructor({fs:e,gitdir:t,ref:n,cache:r}){this.fs=e,this.cache=r,this.gitdir=t,this.mapPromise=(async()=>{let r=new Map,i;try{i=await X.resolve({fs:e,gitdir:t,ref:n})}catch(
|
|
1220
|
+
`+a;return e.from(s)}};async function JT({fs:e,cache:t,gitdir:n,oid:r}){if(r===`4b825dc642cb6eb9a060e54bf8d69288fbee4904`)return{tree:tT.from([]),oid:r};let{type:i,object:a}=await hT({fs:e,cache:t,gitdir:n,oid:r});if(i===`tag`)return r=GT.from(a).parse().object,JT({fs:e,cache:t,gitdir:n,oid:r});if(i===`commit`)return r=qT.from(a).parse().tree,JT({fs:e,cache:t,gitdir:n,oid:r});if(i!==`tree`)throw new gw(r,i,`tree`);return{tree:tT.from(a),oid:r}}var Vie=class{constructor({fs:e,gitdir:t,ref:n,cache:r}){this.fs=e,this.cache=r,this.gitdir=t,this.mapPromise=(async()=>{let r=new Map,i;try{i=await X.resolve({fs:e,gitdir:t,ref:n})}catch(r){if(r instanceof hw&&await X.isUnbornBranch({fs:e,gitdir:t,ref:n}))i=`4b825dc642cb6eb9a060e54bf8d69288fbee4904`;else throw r}let a=await JT({fs:e,cache:this.cache,gitdir:t,oid:i});return a.type=`tree`,a.mode=`40000`,r.set(`.`,a),r})();let i=this;this.ConstructEntry=class{constructor(e){this._fullpath=e,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return i.type(this)}async mode(){return i.mode(this)}async stat(){return i.stat(this)}async content(){return i.content(this)}async oid(){return i.oid(this)}}}async readdir(e){let t=e._fullpath,{fs:n,cache:r,gitdir:i}=this,a=await this.mapPromise,o=a.get(t);if(!o)throw Error(`No obj for ${t}`);let s=o.oid;if(!s)throw Error(`No oid for obj ${JSON.stringify(o)}`);if(o.type!==`tree`)return null;let{type:c,object:l}=await hT({fs:n,cache:r,gitdir:i,oid:s});if(c!==o.type)throw new gw(s,c,o.type);let u=tT.from(l);for(let e of u)a.set(Y(t,e.path),e);return u.entries().map(e=>Y(t,e.path))}async type(e){if(e._type===!1){let{type:t}=(await this.mapPromise).get(e._fullpath);e._type=t}return e._type}async mode(e){if(e._mode===!1){let{mode:t}=(await this.mapPromise).get(e._fullpath);e._mode=BC(parseInt(t,8))}return e._mode}async stat(e){}async content(e){if(e._content===!1){let t=await this.mapPromise,{fs:n,cache:r,gitdir:i}=this,a=t.get(e._fullpath).oid,{type:o,object:s}=await hT({fs:n,cache:r,gitdir:i,oid:a});e._content=o===`blob`?new Uint8Array(s):void 0}return e._content}async oid(e){return e._oid===!1&&(e._oid=(await this.mapPromise).get(e._fullpath).oid),e._oid}};function YT({ref:e=`HEAD`}={}){let t=Object.create(null);return Object.defineProperty(t,pw,{value:function({fs:t,gitdir:n,cache:r}){return new Vie({fs:t,gitdir:n,ref:e,cache:r})}}),Object.freeze(t),t}var Hie=class{constructor({fs:e,dir:t,gitdir:n,cache:r,refresh:i=!0}){this.fs=e,this.cache=r,this.dir=t,this.gitdir=n,this.refresh=i,this.config=null;let a=this;this.ConstructEntry=class{constructor(e){this._fullpath=e,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(e){if(await e.type()!==`tree`)return null;let t=e._fullpath,{fs:n,dir:r}=this,i=await n.readdir(Y(r,t));return i===null?null:i.map(e=>Y(t,e))}async type(e){return e._type===!1&&await e.stat(),e._type}async mode(e){return e._mode===!1&&await e.stat(),e._mode}async stat(e){if(e._stat===!1){let{fs:t,dir:n}=this,r=await t.lstat(`${n}/${e._fullpath}`);if(!r)throw Error(`ENOENT: no such file or directory, lstat '${e._fullpath}'`);let i=r.isDirectory()?`tree`:`blob`;i===`blob`&&!r.isFile()&&!r.isSymbolicLink()&&(i=`special`),e._type=i,r=UC(r),e._mode=r.mode,r.size===-1&&e._actualSize&&(r.size=e._actualSize),e._stat=r}return e._stat}async content(e){if(e._content===!1){let{fs:t,dir:n,gitdir:r}=this;if(await e.type()===`tree`)e._content=void 0;else{let i;if(await e.mode()>>12==10)i=await t.readlink(`${n}/${e._fullpath}`);else{let a=await(await this._getGitConfig(t,r)).get(`core.autocrlf`);i=await t.read(`${n}/${e._fullpath}`,{autocrlf:a})}e._actualSize=i.length,e._stat&&e._stat.size===-1&&(e._stat.size=e._actualSize),e._content=new Uint8Array(i)}}return e._content}async oid(e){if(e._oid===!1){let t=this,{fs:n,gitdir:r,cache:i}=this,a;await sw.acquire({fs:n,gitdir:r,cache:i},async function(i){let o=i.entriesMap.get(e._fullpath),s=await e.stat(),c=await(await t._getGitConfig(n,r)).get(`core.filemode`),l=typeof process<`u`?process.platform!==`win32`:!0;if(!o||$C(s,o,c,l)){let n=await e.content();n===void 0?a=void 0:(a=await KC(nT.wrap({type:`blob`,object:n})),t.refresh&&o&&a===o.oid&&(!c||s.mode===o.mode)&&$C(s,o,c,l)&&i.insert({filepath:e._fullpath,stats:s,oid:a}))}else a=o.oid}),e._oid=a}return e._oid}async _getGitConfig(e,t){return this.config||=await Gw.get({fs:e,gitdir:t}),this.config}};function XT({refresh:e=!0}={}){let t=Object.create(null);return Object.defineProperty(t,pw,{value:function({fs:t,dir:n,gitdir:r,cache:i}){return new Hie({fs:t,dir:n,gitdir:r,cache:i,refresh:e})}}),Object.freeze(t),t}function Uie(e,t){let n=t-e;return Array.from({length:n},(t,n)=>e+n)}const ZT=Array.prototype.flat===void 0?e=>e.reduce((e,t)=>e.concat(t),[]):e=>e.flat();var Wie=class{constructor(){this.value=null}consider(e){e!=null&&(this.value===null||e<this.value)&&(this.value=e)}reset(){this.value=null}};function*Gie(e){let t=new Wie,n,r=[],i=e.length;for(let n=0;n<i;n++)r[n]=e[n].next().value,r[n]!==void 0&&t.consider(r[n]);if(t.value!==null)for(;;){let a=[];n=t.value,t.reset();for(let o=0;o<i;o++)r[o]!==void 0&&r[o]===n?(a[o]=r[o],r[o]=e[o].next().value):a[o]=null,r[o]!==void 0&&t.consider(r[o]);if(yield a,t.value===null)return}}async function QT({fs:e,cache:t,dir:n,gitdir:r,trees:i,map:a=async(e,t)=>t,reduce:o=async(e,t)=>{let n=ZT(t);return e!==void 0&&n.unshift(e),n},iterate:s=(e,t)=>Promise.all([...t].map(e))}){let c=i.map(i=>i[pw]({fs:e,dir:n,gitdir:r,cache:t})),l=Array(c.length).fill(`.`),u=Uie(0,c.length),d=async e=>(u.forEach(t=>{let n=e[t];e[t]=n&&new c[t].ConstructEntry(n)}),{entries:e,children:Gie((await Promise.all(u.map(t=>{let n=e[t];return n?c[t].readdir(n):[]}))).map(e=>(e===null?[]:e)[Symbol.iterator]()))}),f=async e=>{let{entries:t,children:n}=await d(e),r=t.find(e=>e&&e._fullpath)._fullpath,i=await a(r,t);if(i!==null){let e=await s(f,n);return e=e.filter(e=>e!==void 0),o(i,e)}};return f(l)}async function $T(e,t,n=10){try{await e(t)}catch(r){if(r===null||r.code===`EEXIST`)return;if(r.code!==`ENOENT`)throw r;let i=lw(t);if(i===`.`||i===`/`||i===t)throw r;await $T(e,i,n);for(let r=0;;r++)try{await e(t);return}catch(e){if(e===null||e.code===`EEXIST`)return;if(e.code===`ENOENT`&&r<n){await new Promise(e=>setTimeout(e,0));continue}throw e}}}async function eE(e,t){let n=await e.readdir(t);n==null?await e.rm(t):n.length?await Promise.all(n.map(n=>{let r=Y(t,n);return e.lstat(r).then(t=>{if(t)return t.isDirectory()?eE(e,r):e.rm(r)})})).then(()=>e.rmdir(t)):await e.rmdir(t)}function Kie(e){return qie(e)&&tE(e.then)&&tE(e.catch)}function qie(e){return e&&typeof e==`object`}function tE(e){return typeof e==`function`}function nE(e){return Kie((e=>{try{return e.readFile().catch(e=>e)}catch(e){return e}})(e))}const rE=[`readFile`,`writeFile`,`mkdir`,`rmdir`,`unlink`,`stat`,`lstat`,`readdir`,`readlink`,`symlink`];function iE(e,t){if(nE(t))for(let n of rE)e[`_${n}`]=t[n].bind(t);else for(let n of rE)e[`_${n}`]=(0,AC.default)(t[n].bind(t));nE(t)?(t.cp&&(e._cp=t.cp.bind(t)),e._rm=t.rm?t.rm.bind(t):t.rmdir.length>1?t.rmdir.bind(t):eE.bind(null,e)):(t.cp&&(e._cp=(0,AC.default)(t.cp.bind(t))),e._rm=t.rm?(0,AC.default)(t.rm.bind(t)):t.rmdir.length>2?(0,AC.default)(t.rmdir.bind(t)):eE.bind(null,e))}var Z=class{constructor(e){if(e._original_unwrapped_fs!==void 0)return e;let t=Object.getOwnPropertyDescriptor(e,`promises`);t&&t.enumerable?iE(this,e.promises):iE(this,e),this._original_unwrapped_fs=e}async exists(e,t={}){try{return await this._stat(e),!0}catch(e){if(e.code===`ENOENT`||e.code===`ENOTDIR`||(e.code||``).includes(`ENS`))return!1;throw console.log(`Unhandled error in "FileSystem.exists()" function`,e),e}}async read(e,t={}){try{let n=await this._readFile(e,t);if(t.autocrlf===`true`)try{n=new TextDecoder(`utf8`,{fatal:!0}).decode(n),n=n.replace(/\r\n/g,`
|
|
1221
1221
|
`),n=new TextEncoder().encode(n)}catch{}return typeof n!=`string`&&(n=Buffer.from(n)),n}catch{return null}}async write(e,t,n={}){try{await this._writeFile(e,t,n)}catch{await this.mkdir(lw(e)),await this._writeFile(e,t,n)}}async mkdir(e){await $T(this._mkdir,e)}async rm(e){try{await this._unlink(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async rmdir(e,t){try{t&&t.recursive?await this._rm(e,t):await this._rmdir(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async readdir(e){try{let t=await this._readdir(e);return t.sort(RC),t}catch(e){return e.code===`ENOTDIR`?null:[]}}async readdirDeep(e){let t=await this._readdir(e);return(await Promise.all(t.map(async t=>{let n=e+`/`+t;return(await this._stat(n)).isDirectory()?this.readdirDeep(n):n}))).reduce((e,t)=>e.concat(t),[])}async lstat(e){try{return await this._lstat(e)}catch(e){if(e.code===`ENOENT`||(e.code||``).includes(`ENS`))return null;throw e}}async readlink(e,t={encoding:`buffer`}){try{let n=await this._readlink(e,t);return Buffer.isBuffer(n)?n:Buffer.from(n)}catch(e){if(e.code===`ENOENT`||(e.code||``).includes(`ENS`))return null;throw e}}async writelink(e,t){return this._symlink(t.toString(`utf8`),e)}};function Q(e,t){if(t===void 0)throw new MT(e)}function Jie(e){return e.startsWith(`/`)||/^[a-zA-Z]:[\\/]/.test(e)}async function aE({fsp:e,dotgit:t}){Q(`fsp`,e),Q(`dotgit`,t);let n=await e._stat(t).catch(()=>({isFile:()=>!1,isDirectory:()=>!1}));return n.isDirectory()?t:n.isFile()?e._readFile(t,`utf8`).then(e=>e.trimRight().substr(8)).then(e=>Jie(e)?e:Y(lw(t),e)):t}async function oE(e,t){return!e&&!t?!1:e&&!t||!e&&t?!0:!(await e.type()===`tree`&&await t.type()===`tree`||await e.type()===await t.type()&&await e.mode()===await t.mode()&&await e.oid()===await t.oid())}var sE=class{static async isIgnored({fs:e,dir:t,gitdir:n=Y(t,`.git`),filepath:r}){if(cw(r)===`.git`)return!0;if(r===`.`)return!1;let i=``,a=Y(n,`info`,`exclude`);await e.exists(a)&&(i=await e.read(a,`utf8`));let o=[{gitignore:Y(t,`.gitignore`),filepath:r}],s=r.split(`/`).filter(Boolean);for(let e=1;e<s.length;e++){let n=s.slice(0,e).join(`/`),r=s.slice(e).join(`/`);o.push({gitignore:Y(t,n,`.gitignore`),filepath:r})}let c=!1;for(let t of o){let n;try{n=await e.read(t.gitignore,`utf8`)}catch(e){if(e.code===`NOENT`)continue}let r=(0,jC.default)().add(i);r.add(n);let a=lw(t.filepath);if(a!==`.`&&r.ignores(a))return!0;c=c?!r.test(t.filepath).unignored:r.test(t.filepath).ignored}return c}};async function Yie({fs:e,gitdir:t,object:n,format:r,oid:i}){if(r!==`deflated`)throw new J(`GitObjectStoreLoose expects objects to write to be in deflated format`);let a=`${t}/${`objects/${i.slice(0,2)}/${i.slice(2)}`}`;await e.exists(a)||await e.write(a,n)}let cE=null;async function lE(e){return cE===null&&(cE=Zie()),cE?Xie(e):kC.default.deflate(e)}async function Xie(e){let t=new CompressionStream(`deflate`),n=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(n).arrayBuffer())}function Zie(){try{return new CompressionStream(`deflate`).writable.close(),new Blob([]).stream().cancel(),!0}catch{return!1}}async function uE({fs:e,gitdir:t,type:n,object:r,format:i=`content`,oid:a=void 0,dryRun:o=!1}){return i!==`deflated`&&(i!==`wrapped`&&(r=nT.wrap({type:n,object:r})),a=await KC(r),r=Buffer.from(await lE(r))),o||await Yie({fs:e,gitdir:t,object:r,format:`deflated`,oid:a}),a}function Qie(e){let t;for(;~(t=e.indexOf(92));)e[t]=47;return e}async function dE({fs:e,dir:t,gitdir:n=Y(t,`.git`),filepath:r,cache:i={},force:a=!1,parallel:o=!0}){try{Q(`fs`,e),Q(`dir`,t),Q(`gitdir`,n),Q(`filepath`,r);let s=new Z(e),c=await aE({fsp:s,dotgit:n});await sw.acquire({fs:s,gitdir:c,cache:i},async e=>{let n=await(await Gw.get({fs:s,gitdir:c})).get(`core.autocrlf`);return fE({dir:t,gitdir:c,fs:s,filepath:r,index:e,force:a,parallel:o,autocrlf:n})})}catch(e){throw e.caller=`git.add`,e}}function $ie(e,t){if(e.has({filepath:t}))return!0;let n=`${t}/`;for(let t of e.entriesMap.keys())if(t.startsWith(n))return!0;return!1}async function fE({dir:e,gitdir:t,fs:n,filepath:r,index:i,force:a,parallel:o,autocrlf:s}){r=Array.isArray(r)?r:[r];let c=r.map(async r=>{if(!a&&!$ie(i,r)&&await sE.isIgnored({fs:n,dir:e,gitdir:t,filepath:r}))return;let c=await n.lstat(Y(e,r));if(!c)throw new hw(r);if(c.isDirectory()){let c=await n.readdir(Y(e,r));if(o){let l=c.map(c=>fE({dir:e,gitdir:t,fs:n,filepath:[Y(r,c)],index:i,force:a,parallel:o,autocrlf:s}));await Promise.all(l)}else for(let l of c)await fE({dir:e,gitdir:t,fs:n,filepath:[Y(r,l)],index:i,force:a,parallel:o,autocrlf:s})}else{let a=c.isSymbolicLink()?await n.readlink(Y(e,r)).then(Qie):await n.read(Y(e,r),{autocrlf:s});if(a===null)throw new hw(r);let o=await uE({fs:n,gitdir:t,type:`blob`,object:a});i.insert({filepath:r,stats:c,oid:o})}}),l=await Promise.allSettled(c),u=l.filter(e=>e.status===`rejected`).map(e=>e.reason);if(u.length>1)throw new NT(u);if(u.length===1)throw u[0];return l.filter(e=>e.status===`fulfilled`&&e.value).map(e=>e.value)}async function pE({fs:e,gitdir:t,path:n}){return(await Gw.get({fs:e,gitdir:t})).get(n)}function mE(e,...t){for(let n of t)if(n)for(let t of Object.keys(n)){let r=n[t];r!==void 0&&(e[t]=r)}return e}async function hE({fs:e,gitdir:t,author:n,commit:r}){let i=Math.floor(Date.now()/1e3),a=mE({},{name:await pE({fs:e,gitdir:t,path:`user.name`}),email:await pE({fs:e,gitdir:t,path:`user.email`})||``,timestamp:i,timezoneOffset:new Date(i*1e3).getTimezoneOffset()},r?r.author:void 0,n);if(a.name!==void 0)return a}async function gE({fs:e,gitdir:t,author:n,committer:r,commit:i}){let a=Math.floor(Date.now()/1e3),o=mE({},{name:await pE({fs:e,gitdir:t,path:`user.name`}),email:await pE({fs:e,gitdir:t,path:`user.email`})||``,timestamp:a,timezoneOffset:new Date(a*1e3).getTimezoneOffset()},i?i.committer:void 0,n,r);if(o.name!==void 0)return o}async function _E({fs:e,cache:t,gitdir:n,oid:r}){let{type:i,object:a}=await hT({fs:e,cache:t,gitdir:n,oid:r});if(i===`tag`)return r=GT.from(a).parse().object,_E({fs:e,cache:t,gitdir:n,oid:r});if(i!==`commit`)throw new gw(r,i,`commit`);return{commit:qT.from(a),oid:r}}async function vE({fs:e,cache:t,gitdir:n,oid:r}){let{commit:i,oid:a}=await _E({fs:e,cache:t,gitdir:n,oid:r});return{oid:a,commit:i.parse(),payload:i.withoutSignature()}}async function yE({fs:e,cache:t,onSign:n,gitdir:r,message:i,author:a,committer:o,signingKey:s,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,disallowEmpty:d=!1,ref:f,parent:p,tree:m}){let h=!1,g=!1;f||=(g=!(await e.read(`${r}/HEAD`,{encoding:`utf8`})).startsWith(`ref:`),await X.resolve({fs:e,gitdir:r,ref:`HEAD`,depth:2}));let _,v;try{_=await X.resolve({fs:e,gitdir:r,ref:f}),v=await vE({fs:e,gitdir:r,oid:_,cache:{}})}catch{h=!0}if(c&&h)throw new VT(f);let y=c?await hE({fs:e,gitdir:r,author:a,commit:v.commit}):await hE({fs:e,gitdir:r,author:a});if(!y)throw new jT(`author`);let b=c?await gE({fs:e,gitdir:r,author:y,committer:o,commit:v.commit}):await gE({fs:e,gitdir:r,author:y,committer:o});if(!b)throw new jT(`committer`);return sw.acquire({fs:e,gitdir:r,cache:t,allowUnmerged:!1},async function(t){let a=uw(t.entries).get(`.`);if(m||=await bE({fs:e,gitdir:r,inode:a,dryRun:l}),p=p?await Promise.all(p.map(t=>X.resolve({fs:e,gitdir:r,ref:t}))):c?v.commit.parent:_?[_]:[],d&&!c&&(h&&m===`4b825dc642cb6eb9a060e54bf8d69288fbee4904`||!h&&m===v.commit.tree))throw new ST;if(!i){if(c)i=v.commit.message;else throw new MT(`message`)}let o=qT.from({tree:m,parent:p,author:y,committer:b,message:i});s&&(o=await qT.sign(o,n,s));let x=await uE({fs:e,gitdir:r,type:`commit`,object:o.toObject(),dryRun:l});return!u&&!l&&await X.writeRef({fs:e,gitdir:r,ref:g?`HEAD`:f,value:x}),x})}async function bE({fs:e,gitdir:t,inode:n,dryRun:r}){let i=n.children;for(let n of i)n.type===`tree`&&(n.metadata.mode=`040000`,n.metadata.oid=await bE({fs:e,gitdir:t,inode:n,dryRun:r}));let a=i.map(e=>({mode:e.metadata.mode,path:e.basename,oid:e.metadata.oid,type:e.type}));return await uE({fs:e,gitdir:t,type:`tree`,object:tT.from(a).toObject(),dryRun:r})}async function xE({fs:e,cache:t,gitdir:n,oid:r,filepath:i}){return(await SE({fs:e,cache:t,gitdir:n,oid:r,filepath:i})).oid}async function SE({fs:e,cache:t,gitdir:n,oid:r,filepath:i}){if(i.startsWith(`/`))throw new DT(`leading-slash`);if(i.endsWith(`/`))throw new DT(`trailing-slash`);let a=r,o=await JT({fs:e,cache:t,gitdir:n,oid:r}),s=o.tree;return i===``?{mode:`040000`,oid:o.oid,path:``,type:`tree`}:CE({fs:e,cache:t,gitdir:n,tree:s,pathArray:i.split(`/`),oid:a,filepath:i})}async function CE({fs:e,cache:t,gitdir:n,tree:r,pathArray:i,oid:a,filepath:o}){let s=i.shift();for(let c of r)if(c.path===s){if(i.length===0)return c;{let{type:s,object:l}=await hT({fs:e,cache:t,gitdir:n,oid:c.oid});if(s!==`tree`)throw new gw(a,s,`tree`,o);return r=tT.from(l),CE({fs:e,cache:t,gitdir:n,tree:r,pathArray:i,oid:a,filepath:o})}}throw new hw(`file or directory found at "${a}:${o}"`)}async function wE({fs:e,cache:t,gitdir:n,oid:r,filepath:i=void 0}){i!==void 0&&(r=await xE({fs:e,cache:t,gitdir:n,oid:r,filepath:i}));let{tree:a,oid:o}=await JT({fs:e,cache:t,gitdir:n,oid:r});return{oid:o,tree:a.entries()}}async function eae({fs:e,gitdir:t,tree:n}){return await uE({fs:e,gitdir:t,type:`tree`,object:tT.from(n).toObject(),format:`content`})}const tae=/(^|[/.])([/.]|$)|^@$|@{|[\x00-\x20\x7f~^:?*[\\]|\.lock(\/|$)/;function TE(e,t){if(typeof e!=`string`)throw TypeError(`Reference name must be a string`);return!tae.test(e)&&(!!t||e.includes(`/`))}async function EE({fs:e,gitdir:t,remote:n,url:r,force:i}){if(!TE(n,!0))throw new vw(n,MC.default.clean(n));let a=await Gw.get({fs:e,gitdir:t});if(!i&&(await a.getSubsections(`remote`)).includes(n)&&r!==await a.get(`remote.${n}.url`))throw new gT(`remote`,n);await a.set(`remote.${n}.url`,r),await a.set(`remote.${n}.fetch`,`+refs/heads/*:refs/remotes/${n}/*`),await Gw.save({fs:e,gitdir:t,config:a})}async function DE({fs:e,dir:t,gitdir:n=Y(t,`.git`),remote:r,url:i,force:a=!1}){try{Q(`fs`,e),Q(`gitdir`,n),Q(`remote`,r),Q(`url`,i);let t=new Z(e);return await EE({fs:t,gitdir:await aE({fsp:t,dotgit:n}),remote:r,url:i,force:a})}catch(e){throw e.caller=`git.addRemote`,e}}async function nae({fs:e,cache:t,onSign:n,gitdir:r,ref:i,tagger:a,message:o=i,gpgsig:s,object:c,signingKey:l,force:u=!1}){if(i=i.startsWith(`refs/tags/`)?i:`refs/tags/${i}`,!u&&await X.exists({fs:e,gitdir:r,ref:i}))throw new gT(`tag`,i);let d=await X.resolve({fs:e,gitdir:r,ref:c||`HEAD`}),{type:f}=await hT({fs:e,cache:t,gitdir:r,oid:d}),p=GT.from({object:d,type:f,tag:i.replace(`refs/tags/`,``),tagger:a,message:o,gpgsig:s});l&&(p=await GT.sign(p,n,l));let m=await uE({fs:e,gitdir:r,type:`tag`,object:p.toObject()});await X.writeRef({fs:e,gitdir:r,ref:i,value:m})}async function rae({fs:e,onSign:t,dir:n,gitdir:r=Y(n,`.git`),ref:i,tagger:a,message:o=i,gpgsig:s,object:c,signingKey:l,force:u=!1,cache:d={}}){try{Q(`fs`,e),Q(`gitdir`,r),Q(`ref`,i),l&&Q(`onSign`,t);let n=new Z(e),f=await aE({fsp:n,dotgit:r}),p=await hE({fs:n,gitdir:f,author:a});if(!p)throw new jT(`tagger`);return await nae({fs:n,cache:d,onSign:t,gitdir:f,ref:i,tagger:p,message:o,gpgsig:s,object:c,signingKey:l,force:u})}catch(e){throw e.caller=`git.annotatedTag`,e}}async function iae({fs:e,gitdir:t,ref:n,object:r,checkout:i=!1,force:a=!1}){if(!TE(n,!0))throw new vw(n,MC.default.clean(n));let o=`refs/heads/${n}`;if(!a&&await X.exists({fs:e,gitdir:t,ref:o}))throw new gT(`branch`,n,!1);let s;try{s=await X.resolve({fs:e,gitdir:t,ref:r||`HEAD`})}catch{}s&&await X.writeRef({fs:e,gitdir:t,ref:o,value:s}),i&&await X.writeSymbolicRef({fs:e,gitdir:t,ref:`HEAD`,value:o})}async function OE({fs:e,dir:t,gitdir:n=Y(t,`.git`),ref:r,object:i,checkout:a=!1,force:o=!1}){try{Q(`fs`,e),Q(`gitdir`,n),Q(`ref`,r);let t=new Z(e);return await iae({fs:t,gitdir:await aE({fsp:t,dotgit:n}),ref:r,object:i,checkout:a,force:o})}catch(e){throw e.caller=`git.branch`,e}}async function kE(e,t,n){let r=n.split(`/`);r.pop();let i=t;for(let t of r){if(t===``||t===`.`)continue;i=`${i}/${t}`;let r=await e.lstat(i);if(r&&r.isSymbolicLink())throw new IC(n)}}const AE=(e,t)=>e===`.`||t==null||t.length===0||t===`.`?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);async function jE({fs:e,cache:t,onProgress:n,onPostCheckout:r,dir:i,gitdir:a,remote:o,ref:s,filepaths:c,noCheckout:l,noUpdateHead:u,dryRun:d,force:f,track:p=!0,restoreFromIndex:m=!1,nonBlocking:h=!1,batchSize:g=100}){let _;if(r)try{_=await X.resolve({fs:e,gitdir:a,ref:`HEAD`})}catch{_=`0000000000000000000000000000000000000000`}let v;try{v=await X.resolve({fs:e,gitdir:a,ref:s})}catch(t){if(s===`HEAD`)throw t;let n=`${o}/${s}`;if(v=await X.resolve({fs:e,gitdir:a,ref:n}),p){let t=await Gw.get({fs:e,gitdir:a});await t.set(`branch.${s}.remote`,o),await t.set(`branch.${s}.merge`,`refs/heads/${s}`),await Gw.save({fs:e,gitdir:a,config:t})}await X.writeRef({fs:e,gitdir:a,ref:`refs/heads/${s}`,value:v})}if(!l){let o;try{o=await aae({fs:e,cache:t,onProgress:n,dir:i,gitdir:a,ref:s,force:f,filepaths:c,restoreFromIndex:m})}catch(e){throw e instanceof hw&&e.data.what===v?new xT(s,v):e}let l=o.filter(([e])=>e===`conflict`).map(([e,t])=>t);if(l.length>0)throw new vT(l);let u=o.filter(([e])=>e===`error`).map(([e,t])=>t);if(u.length>0)throw new J(u.join(`, `));if(d){r&&await r({previousHead:_,newHead:v,type:c!=null&&c.length>0?`file`:`branch`});return}let p=0,y=o.length;if(await sw.acquire({fs:e,gitdir:a,cache:t},async function(t){await Promise.all(o.filter(([e])=>e===`delete`||e===`delete-index`).map(async function([r,a]){let o=`${i}/${a}`;r===`delete`&&await e.rm(o),t.delete({filepath:a}),n&&await n({phase:`Updating workdir`,loaded:++p,total:y})}))}),await sw.acquire({fs:e,gitdir:a,cache:t},async function(t){for(let[r,a]of o)if(r===`rmdir`||r===`rmdir-index`){let o=`${i}/${a}`;try{r===`rmdir`&&await e.rmdir(o),t.delete({filepath:a}),n&&await n({phase:`Updating workdir`,loaded:++p,total:y})}catch(e){if(e.code===`ENOTEMPTY`)console.log(`Did not delete ${a} because directory is not empty`);else throw e}}}),await Promise.all(o.filter(([e])=>e===`mkdir`||e===`mkdir-index`).map(async function([t,r]){let a=`${i}/${r}`;await kE(e,i,r),await e.mkdir(a),n&&await n({phase:`Updating workdir`,loaded:++p,total:y})})),h){let r=await ME(`Update Working Dir`,o.filter(([e])=>e===`create`||e===`create-index`||e===`update`||e===`mkdir-index`).map(([n,r,o,s,c])=>()=>sae({fs:e,cache:t,gitdir:a,dir:i},[n,r,o,s,c])),n,g);await sw.acquire({fs:e,gitdir:a,cache:t,allowUnmerged:!0},async function(e){await ME(`Update Index`,r.map(([t,n,r])=>()=>oae({index:e,fullpath:t,oid:n,stats:r})),n,g)})}else await sw.acquire({fs:e,gitdir:a,cache:t,allowUnmerged:!0},async function(r){let s=await Promise.allSettled(o.filter(([e])=>e===`create`||e===`create-index`||e===`update`||e===`mkdir-index`).map(async function([o,s,c,l,u]){let d=`${i}/${s}`;if(o!==`create-index`&&o!==`mkdir-index`){await kE(e,i,s);let{object:n}=await hT({fs:e,cache:t,gitdir:a,oid:c});if(u&&await e.rm(d),l===33188)await e.write(d,n);else if(l===33261)await e.write(d,n,{mode:511});else if(l===40960)await e.writelink(d,n);else throw new J(`Invalid mode 0o${l.toString(8)} detected in blob ${c}`)}let f=await e.lstat(d);l===33261&&(f.mode=493),o===`mkdir-index`&&(f.mode=57344),r.insert({filepath:s,stats:f,oid:c}),n&&await n({phase:`Updating workdir`,loaded:++p,total:y})})),c=[];for(let e of s)e.status===`rejected`&&(c.push(e.reason),console.error(`[isomorphic-git checkout] task rejected:`,e.reason?.stack??e.reason));if(c.length>0)throw new NT(c)});r&&await r({previousHead:_,newHead:v,type:c!=null&&c.length>0?`file`:`branch`})}if(!u){let t=await X.expand({fs:e,gitdir:a,ref:s});t.startsWith(`refs/heads`)?await X.writeSymbolicRef({fs:e,gitdir:a,ref:`HEAD`,value:t}):await X.writeRef({fs:e,gitdir:a,ref:`HEAD`,value:v})}}async function aae({fs:e,cache:t,onProgress:n,dir:r,gitdir:i,ref:a,force:o,filepaths:s,restoreFromIndex:c}){let l=0;return QT({fs:e,cache:t,dir:r,gitdir:i,trees:[c?mw():YT({ref:a}),XT(),mw()],map:async function(e,[t,r,i]){if(e!==`.`){if(s&&!s.some(t=>AE(e,t)))return null;switch(n&&await n({phase:`Analyzing workdir`,loaded:++l}),[!!i,!!t,!!r].map(Number).join(``)){case`000`:return;case`001`:return!c&&o&&s&&s.includes(e)?[`delete`,e]:void 0;case`010`:switch(await t.type()){case`tree`:return[`mkdir`,e];case`blob`:return[`create`,e,await t.oid(),await t.mode()];case`commit`:return[`mkdir-index`,e,await t.oid(),await t.mode()];default:return[`error`,`new entry Unhandled type ${await t.type()}`]}case`011`:switch(`${await t.type()}-${await r.type()}`){case`tree-tree`:return;case`tree-blob`:case`blob-tree`:return[`conflict`,e];case`blob-blob`:return await t.oid()===await r.oid()?await t.mode()===await r.mode()?[`create-index`,e,await t.oid(),await t.mode()]:o?[`update`,e,await t.oid(),await t.mode(),!0]:[`conflict`,e]:o?[`update`,e,await t.oid(),await t.mode(),await t.mode()!==await r.mode()]:[`conflict`,e];case`commit-tree`:return;case`commit-blob`:return[`conflict`,e];default:return[`error`,`new entry Unhandled type ${t.type}`]}case`100`:return[`delete-index`,e];case`101`:switch(await i.type()){case`tree`:return[`rmdir-index`,e];case`blob`:return await i.oid()===await r.oid()||o?[`delete`,e]:[`conflict`,e];case`commit`:return[`rmdir-index`,e];default:return[`error`,`delete entry Unhandled type ${await i.type()}`]}case`110`:case`111`:switch(`${await i.type()}-${await t.type()}`){case`tree-tree`:return;case`blob-blob`:if(await i.oid()===await t.oid()&&await i.mode()===await t.mode()&&!o)return;if(r){if(await r.oid()!==await i.oid()&&await r.oid()!==await t.oid())return o?[`update`,e,await t.oid(),await t.mode(),await t.mode()!==await r.mode()]:[`conflict`,e]}else if(o)return[`update`,e,await t.oid(),await t.mode(),await t.mode()!==await i.mode()];return await t.mode()===await i.mode()?await t.oid()===await i.oid()?void 0:[`update`,e,await t.oid(),await t.mode(),!1]:[`update`,e,await t.oid(),await t.mode(),!0];case`tree-blob`:return[`update-dir-to-blob`,e,await t.oid()];case`blob-tree`:return[`update-blob-to-tree`,e];case`commit-commit`:return[`mkdir-index`,e,await t.oid(),await t.mode()];default:return[`error`,`update entry Unhandled type ${await i.type()}-${await t.type()}`]}}}},reduce:async function(e,t){return t=ZT(t),e?e&&e[0]===`rmdir`?(t.push(e),t):(t.unshift(e),t):t}})}async function oae({index:e,fullpath:t,stats:n,oid:r}){try{e.insert({filepath:t,stats:n,oid:r})}catch(e){console.warn(`Error inserting ${t} into index:`,e)}}async function sae({fs:e,cache:t,gitdir:n,dir:r},[i,a,o,s,c]){let l=`${r}/${a}`;if(i!==`create-index`&&i!==`mkdir-index`){await kE(e,r,a);let{object:i}=await hT({fs:e,cache:t,gitdir:n,oid:o});if(c&&await e.rm(l),s===33188)await e.write(l,i);else if(s===33261)await e.write(l,i,{mode:511});else if(s===40960)await e.writelink(l,i);else throw new J(`Invalid mode 0o${s.toString(8)} detected in blob ${o}`)}let u=await e.lstat(l);return s===33261&&(u.mode=493),i===`mkdir-index`&&(u.mode=57344),[a,o,u]}async function ME(e,t,n,r){let i=[],a=[];for(let o=0;o<t.length;o+=r){let s=t.slice(o,o+r).map(e=>e());(await Promise.allSettled(s)).forEach(t=>{t.status===`fulfilled`?i.push(t.value):(a.push(t.reason),console.error(`[isomorphic-git ${e}] task rejected:`,t.reason?.stack??t.reason))}),n&&await n({phase:`Updating workdir`,loaded:o+s.length,total:t.length})}if(a.length>0)throw new NT(a);return i}async function NE({fs:e,onProgress:t,onPostCheckout:n,dir:r,gitdir:i=Y(r,`.git`),remote:a=`origin`,ref:o,filepaths:s,noCheckout:c=!1,noUpdateHead:l=o===void 0,dryRun:u=!1,force:d=!1,track:f=!0,cache:p={},nonBlocking:m=!1,batchSize:h=100}){try{Q(`fs`,e),Q(`dir`,r),Q(`gitdir`,i);let g=o||`HEAD`,_=o===void 0&&s!=null&&s.length>0,v=new Z(e);return await jE({fs:v,cache:p,onProgress:t,onPostCheckout:n,dir:r,gitdir:await aE({fsp:v,dotgit:i}),remote:a,ref:g,filepaths:s,noCheckout:c,noUpdateHead:l,dryRun:u,force:d,track:f,restoreFromIndex:_,nonBlocking:m,batchSize:h})}catch(e){throw e.caller=`git.checkout`,e}}const PE=/^.*(\r?\n|$)/gm;function cae({branches:e,contents:t}){let n=e[1],r=e[2],i=t[0],a=t[1],o=t[2],s=a.match(PE),c=i.match(PE),l=o.match(PE),u=(0,NC.default)(s,c,l),d=``,f=!0;for(let e of u)e.ok&&(d+=e.ok.join(``)),e.conflict&&(f=!1,d+=`${`<`.repeat(7)} ${n}\n`,d+=e.conflict.a.join(``),d+=`${`=`.repeat(7)}\n`,d+=e.conflict.b.join(``),d+=`${`>`.repeat(7)} ${r}\n`);return{cleanMerge:f,mergedText:d}}async function FE({fs:e,cache:t,dir:n,gitdir:r=Y(n,`.git`),index:i,ourOid:a,baseOid:o,theirOid:s,ourName:c=`ours`,baseName:l=`base`,theirName:u=`theirs`,dryRun:d=!1,abortOnConflict:f=!0,mergeDriver:p}){let m=YT({ref:a}),h=YT({ref:o}),g=YT({ref:s}),_=[],v=[],y=[],b=[],x=await QT({fs:e,cache:t,dir:n,gitdir:r,trees:[m,h,g],map:async function(t,[n,a,o]){let s=cw(t);switch(`${await oE(n,a)}-${await oE(o,a)}`){case`false-false`:return{mode:await a.mode(),path:s,oid:await a.oid(),type:await a.type()};case`false-true`:return!o&&await n.type()===`tree`?{mode:await n.mode(),path:s,oid:await n.oid(),type:await n.type()}:o?{mode:await o.mode(),path:s,oid:await o.oid(),type:await o.type()}:void 0;case`true-false`:return!n&&await o.type()===`tree`?{mode:await o.mode(),path:s,oid:await o.oid(),type:await o.type()}:n?{mode:await n.mode(),path:s,oid:await n.oid(),type:await n.type()}:void 0;case`true-true`:if(n&&o&&await n.type()===`tree`&&await o.type()===`tree`)return{mode:await n.mode(),path:s,oid:await n.oid(),type:`tree`};if(n&&o&&await n.type()===`blob`&&await o.type()===`blob`)return lae({fs:e,gitdir:r,path:s,ours:n,base:a,theirs:o,ourName:c,baseName:l,theirName:u,mergeDriver:p}).then(async e=>{if(e.cleanMerge)f||i.insert({filepath:t,oid:e.mergeResult.oid,stage:0});else if(_.push(t),v.push(t),!f){let e=``;a&&await a.type()===`blob`&&(e=await a.oid());let r=await n.oid(),s=await o.oid();i.delete({filepath:t}),e&&i.insert({filepath:t,oid:e,stage:1}),i.insert({filepath:t,oid:r,stage:2}),i.insert({filepath:t,oid:s,stage:3})}return e.mergeResult});if(a&&!n&&o&&await a.type()===`blob`&&await o.type()===`blob`){if(_.push(t),y.push(t),!f){let e=await a.oid(),n=await o.oid();i.delete({filepath:t}),i.insert({filepath:t,oid:e,stage:1}),i.insert({filepath:t,oid:n,stage:3})}return{mode:await o.mode(),oid:await o.oid(),type:`blob`,path:s}}if(a&&n&&!o&&await a.type()===`blob`&&await n.type()===`blob`){if(_.push(t),b.push(t),!f){let e=await a.oid(),r=await n.oid();i.delete({filepath:t}),i.insert({filepath:t,oid:e,stage:1}),i.insert({filepath:t,oid:r,stage:2})}return{mode:await n.mode(),oid:await n.oid(),type:`blob`,path:s}}if(a&&!n&&!o&&(await a.type()===`blob`||await a.type()===`tree`))return;throw new kT}},reduce:_.length!==0&&(!n||f)?void 0:async(t,n)=>{let i=n.filter(Boolean);if(t&&!(t&&t.type===`tree`&&i.length===0&&t.path!==`.`))return(i.length>0||t.path===`.`&&i.length===0)&&(t.oid=await uE({fs:e,gitdir:r,type:`tree`,object:new tT(i).toObject(),dryRun:d})),t}});return _.length===0?x.oid:(n&&!f&&await QT({fs:e,cache:t,dir:n,gitdir:r,trees:[YT({ref:x.oid})],map:async function(t,[r]){let i=`${n}/${t}`;if(await r.type()===`blob`){let t=await r.mode(),n=await r.content();await e.write(i,n,{mode:t})}return!0}}),new AT(_,v,y,b))}async function lae({fs:e,gitdir:t,path:n,ours:r,base:i,theirs:a,ourName:o,theirName:s,baseName:c,dryRun:l,mergeDriver:u=cae}){let d=`blob`,f=`100755`,p=``,m=``;i&&await i.type()===`blob`&&(f=await i.mode(),p=await i.oid(),m=Buffer.from(await i.content()).toString(`utf8`));let h=f===await r.mode()?await a.mode():await r.mode();if(await r.oid()===await a.oid())return{cleanMerge:!0,mergeResult:{mode:h,path:n,oid:await r.oid(),type:d}};if(await r.oid()===p)return{cleanMerge:!0,mergeResult:{mode:h,path:n,oid:await a.oid(),type:d}};if(await a.oid()===p)return{cleanMerge:!0,mergeResult:{mode:h,path:n,oid:await r.oid(),type:d}};let g=Buffer.from(await r.content()).toString(`utf8`),_=Buffer.from(await a.content()).toString(`utf8`),{mergedText:v,cleanMerge:y}=await u({branches:[c,o,s],contents:[m,g,_],path:n});return{cleanMerge:y,mergeResult:{mode:h,path:n,oid:await uE({fs:e,gitdir:t,type:`blob`,object:Buffer.from(v,`utf8`),dryRun:l}),type:d}}}async function uae({fs:e,dir:t,gitdir:n,stashCommit:r,parentCommit:i,wasStaged:a}){let o=[],s=[],c=await QT({fs:e,cache:{},dir:t,gitdir:n,trees:[YT({ref:i}),YT({ref:r})],map:async(r,[i,c])=>{if(r===`.`||await sE.isIgnored({fs:e,dir:t,gitdir:n,filepath:r}))return;let l=c?await c.type():await i.type();if(l!==`tree`&&l!==`blob`)return;if(!c&&i){let e=l===`tree`?`rmdir`:`rm`;return l===`tree`&&o.push(r),l===`blob`&&a&&s.push({filepath:r,oid:await i.oid()}),{method:e,filepath:r}}let u=await c.oid();if(!i||await i.oid()!==u)return l===`tree`?{method:`mkdir`,filepath:r}:(a&&s.push({filepath:r,oid:u,stats:await e.lstat(Y(t,r))}),{method:`write`,filepath:r,oid:u})}});await nw(n,async()=>{for(let r of c){let i=Y(t,r.filepath);switch(r.method){case`rmdir`:await e.rmdir(i);break;case`mkdir`:await kE(e,t,r.filepath),await e.mkdir(i);break;case`rm`:await e.rm(i);break;case`write`:if(!o.some(e=>i.startsWith(e))){await kE(e,t,r.filepath);let{object:a}=await hT({fs:e,cache:{},gitdir:n,oid:r.oid});await e.exists(i)&&await e.rm(i),await e.write(i,a)}}}}),await sw.acquire({fs:e,gitdir:n,cache:{}},async e=>{s.forEach(({filepath:t,stats:n,oid:r})=>{e.insert({filepath:t,stats:n,oid:r})})})}async function IE({fs:e,cache:t,dir:n,gitdir:r,oid:i,dryRun:a=!1,noUpdateBranch:o=!1,abortOnConflict:s=!0,committer:c,mergeDriver:l}){let{commit:u,oid:d}=await vE({fs:e,cache:t,gitdir:r,oid:i});if(u.parent.length>1)throw new yT(d,u.parent.length);if(u.parent.length===0)throw new bT(d);let f=await X.resolve({fs:e,gitdir:r,ref:`HEAD`}),{commit:p}=await vE({fs:e,cache:t,gitdir:r,oid:f}),m=u.parent[0],{commit:h}=await vE({fs:e,cache:t,gitdir:r,oid:m}),g=await sw.acquire({fs:e,gitdir:r,cache:t,allowUnmerged:!1},async i=>FE({fs:e,cache:t,dir:n,gitdir:r,index:i,ourOid:p.tree,baseOid:h.tree,theirOid:u.tree,ourName:`HEAD`,baseName:`parent of ${d.slice(0,7)}`,theirName:d.slice(0,7),dryRun:a,abortOnConflict:s,mergeDriver:l}));if(g instanceof AT)throw g;let _=await yE({fs:e,cache:t,gitdir:r,message:u.message,tree:g,parent:[f],author:u.author,committer:c,dryRun:a,noUpdateBranch:o});return n&&!a&&!o&&await uae({fs:e,dir:n,gitdir:r,stashCommit:_,parentCommit:f,wasStaged:!0}),_}async function LE({fs:e,dir:t,gitdir:n=Y(t,`.git`),oid:r,cache:i={},committer:a,dryRun:o=!1,noUpdateBranch:s=!1,abortOnConflict:c=!0,mergeDriver:l}){try{Q(`fs`,e),Q(`gitdir`,n),Q(`oid`,r);let u=new Z(e),d=await aE({fsp:u,dotgit:n}),{commit:f}=await vE({fs:u,cache:i,gitdir:d,oid:r});if(f.parent&&f.parent.length>1)return await IE({fs:u,cache:i,dir:t,gitdir:d,oid:r,dryRun:o,noUpdateBranch:s,abortOnConflict:c,committer:void 0,mergeDriver:l});let p=await gE({fs:u,gitdir:d,committer:a});if(!p)throw new jT(`committer`);return await IE({fs:u,cache:i,dir:t,gitdir:d,oid:r,dryRun:o,noUpdateBranch:s,abortOnConflict:c,committer:p,mergeDriver:l})}catch(e){throw e.caller=`git.cherryPick`,e}}const dae=/^refs\/(heads\/|tags\/|remotes\/)?(.*)/;function RE(e){let t=dae.exec(e);return t?t[1]===`remotes/`&&e.endsWith(`/HEAD`)?t[2].slice(0,-5):t[2]:e}async function zE({fs:e,gitdir:t,fullname:n=!1,test:r=!1}){let i=await X.resolve({fs:e,gitdir:t,ref:`HEAD`,depth:2});if(r)try{await X.resolve({fs:e,gitdir:t,ref:i})}catch{return}if(i.startsWith(`refs/`))return n?i:RE(i)}function fae(e){return e=e.replace(/^[^/@:]+@([^/@:]+):/,`https://$1/`),e=e.replace(/^ssh:\/\//,`https://`),e}function BE({username:e=``,password:t=``}){return`Basic ${Buffer.from(`${e}:${t}`).toString(`base64`)}`}async function VE(e,t){let n=cT(e);for(;;){let{value:e,done:r}=await n.next();if(e&&await t(e),r)break}n.return&&n.return()}async function HE(e){let t=0,n=[];await VE(e,e=>{n.push(e),t+=e.byteLength});let r=new Uint8Array(t),i=0;for(let e of n)r.set(e,i),i+=e.byteLength;return r}const UE=/^(https?:\/\/)([^/?#]+)@/i;function WE(e){let t=e.match(UE);return t==null?{url:e,auth:{}}:{url:e.replace(UE,`$1`),auth:pae(e,t[2])}}function pae(e,t){let n=mae(e),r=t.indexOf(`:`)!==-1;if(n!==null)return{username:GE(n.username),password:r?GE(n.password):void 0};let i=t.indexOf(`:`);return{username:r?t.slice(0,i):t,password:r?t.slice(i+1):void 0}}function mae(e){if(typeof URL!=`function`)return null;try{return new URL(e)}catch{return null}}function GE(e){try{return decodeURIComponent(e)}catch{return e}}function KE(e,t){let n=t.toString(16);return`0`.repeat(e-n.length)+n}var qE=class{static flush(){return Buffer.from(`0000`,`utf8`)}static delim(){return Buffer.from(`0001`,`utf8`)}static encode(e){typeof e==`string`&&(e=Buffer.from(e));let t=KE(4,e.length+4);return Buffer.concat([Buffer.from(t,`utf8`),e])}static streamReader(e){let t=new lT(e);return async function(){try{let e=await t.read(4);return e==null||(e=parseInt(e.toString(`utf8`),16),e===0||e===1?null:await t.read(e-4)??!0)}catch(t){return e.error=t,!0}}}};async function JE(e){let t={},n;for(;n=await e(),n!==!0;){if(n===null)continue;n=n.toString(`utf8`).replace(/\n$/,``);let e=n.indexOf(`=`);if(e>-1){let r=n.slice(0,e);t[r]=n.slice(e+1)}else t[n]=!0}return{protocolVersion:2,capabilities2:t}}async function YE(e,{service:t}){let n=new Set,r=new Map,i=new Map,a=qE.streamReader(e),o=await a();for(;o===null;)o=await a();if(o===!0)throw new CT;if(o.includes(`version 2`))return JE(a);if(o.toString(`utf8`).replace(/\n$/,``)!==`# service=${t}`)throw new PT(`# service=${t}\\n`,o.toString(`utf8`));let s=await a();for(;s===null;)s=await a();if(s===!0)return{capabilities:n,refs:r,symrefs:i};if(s=s.toString(`utf8`),s.includes(`version 2`))return JE(a);let[c,l]=XE(s,`\0`,`\\x00`);if(l.split(` `).map(e=>n.add(e)),c!==`0000000000000000000000000000000000000000 capabilities^{}`){let[e,t]=XE(c,` `,` `);for(r.set(t,e);;){let e=await a();if(e===!0)break;if(e!==null){let[t,n]=XE(e.toString(`utf8`),` `,` `);r.set(n,t)}}}for(let e of n)if(e.startsWith(`symref=`)){let t=e.match(/symref=([^:]+):(.*)/);t.length===3&&i.set(t[1],t[2])}return{protocolVersion:1,capabilities:n,refs:r,symrefs:i}}function XE(e,t,n){let r=e.trim().split(t);if(r.length!==2)throw new PT(`Two strings separated by '${n}'`,e.toString(`utf8`));return r}const ZE=(e,t)=>e.endsWith(`?`)?`${e}${t}`:`${e}/${t.replace(/^https?:\/\//,``)}`,QE=(e,t)=>{(t.username||t.password)&&(e.Authorization=BE(t)),t.headers&&Object.assign(e,t.headers)},$E=async e=>{try{let t=Buffer.from(await HE(e.body)),n=t.toString(`utf8`);return{preview:n.length<256?n:n.slice(0,256)+`...`,response:n,data:t}}catch{return{}}};var eD=class{static async capabilities(){return[`discover`,`connect`]}static async discover({http:e,onProgress:t,onAuth:n,onAuthSuccess:r,onAuthFailure:i,corsProxy:a,service:o,url:s,headers:c,protocolVersion:l}){let{url:u,auth:d}=WE(s),f=a?ZE(a,u):u;(d.username||d.password)&&(c.Authorization=BE(d)),l===2&&(c[`Git-Protocol`]=`version=2`);let p,m,h=!1;do if(p=await e.request({onProgress:t,method:`GET`,url:`${f}/info/refs?service=${o}`,headers:c}),m=!1,p.statusCode===401||p.statusCode===203){let e=h?i:n;if(e){if(d=await e(u,{...d,headers:{...c}}),d&&d.cancel)throw new BT;d&&(QE(c,d),h=!0,m=!0)}}else p.statusCode===200&&h&&r&&await r(u,d);while(m);if(p.statusCode!==200){let{response:e}=await $E(p);throw new ET(p.statusCode,p.statusMessage,e)}if(p.headers[`content-type`]===`application/x-${o}-advertisement`){let e=await YE(p.body,{service:o});return e.auth=d,e}{let{preview:e,response:t,data:n}=await $E(p);try{let e=await YE([n],{service:o});return e.auth=d,e}catch{throw new LT(e,t)}}}static async connect({http:e,onProgress:t,corsProxy:n,service:r,url:i,auth:a,body:o,headers:s}){let c=WE(i);c&&(i=c.url),n&&(i=ZE(n,i)),s[`content-type`]=`application/x-${r}-request`,s.accept=`application/x-${r}-result`,QE(s,a);let l=await e.request({onProgress:t,method:`POST`,url:`${i}/${r}`,body:o,headers:s});if(l.statusCode!==200){let{response:e}=$E(l);throw new ET(l.statusCode,l.statusMessage,e)}return l}},tD=class{static getRemoteHelperFor({url:e}){let t=new Map;t.set(`http`,eD),t.set(`https`,eD);let n=gae({url:e});if(!n)throw new zT(e);if(t.has(n.transport))return t.get(n.transport);throw new RT(e,n.transport,n.transport===`ssh`?fae(e):void 0)}};const hae=/^[^/@:]+@[^/@:]+:/;function gae({url:e}){if(hae.test(e))return{transport:`ssh`,address:e};let t=e.match(/(\w+)(:\/\/|::)(.*)/);if(t!==null){if(t[2]===`://`)return{transport:t[1],address:t[0]};if(t[2]===`::`)return{transport:t[1],address:t[3]}}}var nD=class{static async read({fs:e,gitdir:t}){let n=Y(t,`shallow`),r=new Set;return await nw(n,async function(){let t=await e.read(n,{encoding:`utf8`});if(t===null||t.trim()===``)return r;t.trim().split(`
|
|
1222
1222
|
`).map(e=>r.add(e))}),r}static async write({fs:e,gitdir:t,oids:n}){let r=Y(t,`shallow`);if(n.size>0){let t=[...n].join(`
|
|
1223
1223
|
`)+`
|
|
1224
|
-
`;await nw(r,async function(){await e.write(r,t,{encoding:`utf8`})})}else await nw(r,async function(){await e.rm(r)})}};async function _ae({fs:e,gitdir:t,oid:n}){let r=`objects/${n.slice(0,2)}/${n.slice(2)}`;return e.exists(`${t}/${r}`)}async function vae({fs:e,cache:t,gitdir:n,oid:r,getExternalRefDelta:i}){let a=await e.readdir(Y(n,`objects/pack`));a=a.filter(e=>e.endsWith(`.idx`));for(let o of a){let a=await mT({fs:e,cache:t,filename:`${n}/objects/pack/${o}`,getExternalRefDelta:i});if(a.error)throw new J(a.error);if(a.offsets.has(r))return!0}return!1}async function rD({fs:e,cache:t,gitdir:n,oid:r,format:i=`content`}){let a=r=>hT({fs:e,cache:t,gitdir:n,oid:r}),o=await _ae({fs:e,gitdir:n,oid:r});return o||=await vae({fs:e,cache:t,gitdir:n,oid:r,getExternalRefDelta:a}),o}function iD({config:e,onAuth:t}){return t&&(async(n,r)=>{let i=r.username||await e.get(`credential.${n}.username`);return t(n,i?{...r,username:i}:r)})}function yae(e){return e.slice(0,12).toString(`hex`)===`5041434b0000000200000000`}function aD(e,t){let n=e.map(e=>e.split(`=`,1)[0]);return t.filter(e=>{let t=e.split(`=`,1)[0];return n.includes(t)})}const oD={name:`isomorphic-git`,version:`1.41.
|
|
1224
|
+
`;await nw(r,async function(){await e.write(r,t,{encoding:`utf8`})})}else await nw(r,async function(){await e.rm(r)})}};async function _ae({fs:e,gitdir:t,oid:n}){let r=`objects/${n.slice(0,2)}/${n.slice(2)}`;return e.exists(`${t}/${r}`)}async function vae({fs:e,cache:t,gitdir:n,oid:r,getExternalRefDelta:i}){let a=await e.readdir(Y(n,`objects/pack`));a=a.filter(e=>e.endsWith(`.idx`));for(let o of a){let a=await mT({fs:e,cache:t,filename:`${n}/objects/pack/${o}`,getExternalRefDelta:i});if(a.error)throw new J(a.error);if(a.offsets.has(r))return!0}return!1}async function rD({fs:e,cache:t,gitdir:n,oid:r,format:i=`content`}){let a=r=>hT({fs:e,cache:t,gitdir:n,oid:r}),o=await _ae({fs:e,gitdir:n,oid:r});return o||=await vae({fs:e,cache:t,gitdir:n,oid:r,getExternalRefDelta:a}),o}function iD({config:e,onAuth:t}){return t&&(async(n,r)=>{let i=r.username||await e.get(`credential.${n}.username`);return t(n,i?{...r,username:i}:r)})}function yae(e){return e.slice(0,12).toString(`hex`)===`5041434b0000000200000000`}function aD(e,t){let n=e.map(e=>e.split(`=`,1)[0]);return t.filter(e=>{let t=e.split(`=`,1)[0];return n.includes(t)})}const oD={name:`isomorphic-git`,version:`1.41.8`,agent:`git/isomorphic-git@1.41.8`};var sD=class{constructor(){this._queue=[]}write(e){if(this._ended)throw Error(`You cannot write to a FIFO that has already been ended!`);if(this._waiting){let t=this._waiting;this._waiting=null,t({value:e})}else this._queue.push(e)}end(){if(this._ended=!0,this._waiting){let e=this._waiting;this._waiting=null,e({done:!0})}}destroy(e){this.error=e,this.end()}async next(){if(this._queue.length>0)return{value:this._queue.shift()};if(this._ended)return{done:!0};if(this._waiting)throw Error(`You cannot call read until the previous call to read has returned!`);return new Promise(e=>{this._waiting=e})}};function bae(e){let t=e.indexOf(`\r`),n=e.indexOf(`
|
|
1225
1225
|
`);return t===-1&&n===-1?-1:t===-1?n+1:n===-1?t+1:n===t+1?n+1:Math.min(t,n)+1}function cD(e){let t=new sD,n=``;return(async()=>{await VE(e,e=>{for(e=e.toString(`utf8`),n+=e;;){let e=bae(n);if(e===-1||e===n.length&&n[e-1]===`\r`)break;t.write(n.slice(0,e)),n=n.slice(e)}}),n.length>0&&t.write(n),t.end()})(),t}var lD=class{static demux(e){let t=qE.streamReader(e),n=new sD,r=new sD,i=new sD,a=async function(){let o=await t();if(o===null)return a();if(o===!0){n.end(),i.end(),e.error?r.destroy(e.error):r.end();return}switch(o[0]){case 1:r.write(o.slice(1));break;case 2:i.write(o.slice(1));break;case 3:{let e=o.slice(1);i.write(e),n.end(),i.end(),r.destroy(Error(e.toString(`utf8`)));return}default:n.write(o)}a()};return a(),{packetlines:n,packfile:r,progress:i}}};async function xae(e){let{packetlines:t,packfile:n,progress:r}=lD.demux(e),i=[],a=[],o=[],s=!1,c=!1;return new Promise((l,u)=>{VE(t,t=>{let d=t.toString(`utf8`).trim();if(d.startsWith(`shallow`)){let e=d.slice(-41).trim();e.length!==40&&u(new _w(e)),i.push(e)}else if(d.startsWith(`unshallow`)){let e=d.slice(-41).trim();e.length!==40&&u(new _w(e)),a.push(e)}else if(d.startsWith(`ACK`)){let[,e,t]=d.split(` `);o.push({oid:e,status:t}),t||(c=!0)}else d.startsWith(`NAK`)?(s=!0,c=!0):(c=!0,s=!0);c&&(e.error?u(e.error):l({shallows:i,unshallows:a,acks:o,nak:s,packfile:n,progress:r}))}).finally(()=>{c||(e.error?u(e.error):l({shallows:i,unshallows:a,acks:o,nak:s,packfile:n,progress:r}))})})}function Sae({capabilities:e=[],wants:t=[],haves:n=[],shallows:r=[],depth:i=null,since:a=null,exclude:o=[]}){let s=[];t=[...new Set(t)];let c=` ${e.join(` `)}`;for(let e of t)s.push(qE.encode(`want ${e}${c}\n`)),c=``;for(let e of r)s.push(qE.encode(`shallow ${e}\n`));i!==null&&s.push(qE.encode(`deepen ${i}\n`)),a!==null&&s.push(qE.encode(`deepen-since ${Math.floor(a.valueOf()/1e3)}\n`));for(let e of o)s.push(qE.encode(`deepen-not ${e}\n`));s.push(qE.flush());for(let e of n)s.push(qE.encode(`have ${e}\n`));return s.push(qE.encode(`done
|
|
1226
1226
|
`)),s}async function uD({fs:e,cache:t,http:n,onProgress:r,onMessage:i,onAuth:a,onAuthSuccess:o,onAuthFailure:s,gitdir:c,ref:l,remoteRef:u,remote:d,url:f,corsProxy:p,depth:m=null,since:h=null,exclude:g=[],relative:_=!1,tags:v=!1,singleBranch:y=!1,headers:b={},prune:x=!1,pruneTags:S=!1}){let C=l||await zE({fs:e,gitdir:c,test:!0}),w=await Gw.get({fs:e,gitdir:c}),T=d||C&&await w.get(`branch.${C}.remote`)||`origin`,E=f||await w.get(`remote.${T}.url`);if(E===void 0)throw new MT(`remote OR url`);let D=u||C&&await w.get(`branch.${C}.merge`)||l||`HEAD`;p===void 0&&(p=await w.get(`http.corsProxy`));let ee=tD.getRemoteHelperFor({url:E}),te=await ee.discover({http:n,onAuth:iD({config:w,onAuth:a}),onAuthSuccess:o,onAuthFailure:iD({config:w,onAuth:s}),corsProxy:p,service:`git-upload-pack`,url:E,headers:b,protocolVersion:1}),ne=te.auth,re=te.refs;if(re.size===0)return{defaultBranch:null,fetchHead:null,fetchHeadDescription:null};if(m!==null&&!te.capabilities.has(`shallow`))throw new IT(`shallow`,`depth`);if(h!==null&&!te.capabilities.has(`deepen-since`))throw new IT(`deepen-since`,`since`);if(g.length>0&&!te.capabilities.has(`deepen-not`))throw new IT(`deepen-not`,`exclude`);if(_===!0&&!te.capabilities.has(`deepen-relative`))throw new IT(`deepen-relative`,`relative`);let{oid:O,fullref:ie}=X.resolveAgainstMap({ref:D,map:re});for(let e of re.keys())e===ie||e===`HEAD`||e.startsWith(`refs/heads/`)||v&&e.startsWith(`refs/tags/`)||re.delete(e);let ae=aD([...te.capabilities],[`multi_ack_detailed`,`no-done`,`side-band-64k`,`ofs-delta`,`agent=${oD.agent}`]);_&&ae.push(`deepen-relative`);let oe=y?[O]:re.values(),se=y?[C]:await X.listRefs({fs:e,gitdir:c,filepath:`refs`}),ce=[];for(let n of se)try{n=await X.expand({fs:e,gitdir:c,ref:n});let r=await X.resolve({fs:e,gitdir:c,ref:n});await rD({fs:e,cache:t,gitdir:c,oid:r})&&ce.push(r)}catch{}ce=[...new Set(ce)];let le=await nD.read({fs:e,gitdir:c}),ue=te.capabilities.has(`shallow`)?[...le]:[],de=Sae({capabilities:ae,wants:oe,haves:ce,shallows:ue,depth:m,since:h,exclude:g}),fe=Buffer.from(await HE(de)),pe=await ee.connect({http:n,onProgress:r,corsProxy:p,service:`git-upload-pack`,url:E,auth:ne,body:[fe],headers:b}),k=await xae(pe.body);pe.headers&&(k.headers=pe.headers);for(let n of k.shallows)if(!le.has(n))try{let{object:r}=await hT({fs:e,cache:t,gitdir:c,oid:n}),i=new qT(r),a=await Promise.all(i.headers().parent.map(n=>rD({fs:e,cache:t,gitdir:c,oid:n})));a.length===0||a.every(e=>e)||le.add(n)}catch{le.add(n)}for(let e of k.unshallows)le.delete(e);if(await nD.write({fs:e,gitdir:c,oids:le}),y){let t=new Map([[ie,O]]),n=new Map,r=10,i=ie;for(;r--;){let e=te.symrefs.get(i);if(e===void 0)break;n.set(i,e),i=e}let a=re.get(i);a&&t.set(i,a);let{pruned:o}=await X.updateRemoteRefs({fs:e,gitdir:c,remote:T,refs:t,symrefs:n,tags:v,prune:x});x&&(k.pruned=o)}else{let{pruned:t}=await X.updateRemoteRefs({fs:e,gitdir:c,remote:T,refs:re,symrefs:te.symrefs,tags:v,prune:x,pruneTags:S});x&&(k.pruned=t)}if(k.HEAD=te.symrefs.get(`HEAD`),k.HEAD===void 0){let{oid:e}=X.resolveAgainstMap({ref:`HEAD`,map:re});for(let[t,n]of re.entries())if(t!==`HEAD`&&n===e){k.HEAD=t;break}}k.FETCH_HEAD={oid:O,description:`${ie.startsWith(`refs/tags`)?`tag`:`branch`} '${RE(ie)}' of ${E}`},(r||i)&&VE(cD(k.progress),async e=>{if(i&&await i(e),r){let t=e.match(/([^:]*).*\((\d+?)\/(\d+?)\)/);t&&await r({phase:t[1].trim(),loaded:parseInt(t[2],10),total:parseInt(t[3],10)})}});let me=Buffer.from(await HE(k.packfile));if(pe.body.error)throw pe.body.error;let he=me.slice(-20).toString(`hex`),ge={defaultBranch:k.HEAD,fetchHead:k.FETCH_HEAD.oid,fetchHeadDescription:k.FETCH_HEAD.description};if(k.headers&&(ge.headers=k.headers),x&&(ge.pruned=k.pruned),he!==``&&!yae(me)){ge.packfile=`objects/pack/pack-${he}.pack`;let n=Y(c,ge.packfile);await e.write(n,me);let i=await fT.fromPack({pack:me,getExternalRefDelta:n=>hT({fs:e,cache:t,gitdir:c,oid:n}),onProgress:r});await e.write(n.replace(/\.pack$/,`.idx`),await i.toBuffer())}return ge}async function dD({fs:e,bare:t=!1,dir:n,gitdir:r=t?n:Y(n,`.git`),defaultBranch:i=`master`}){if(await e.exists(r+`/config`))return;let a=[`hooks`,`info`,`objects/info`,`objects/pack`,`refs/heads`,`refs/tags`];a=a.map(e=>r+`/`+e);for(let t of a)await e.mkdir(t);await e.write(r+`/config`,`[core]
|
|
1227
1227
|
repositoryformatversion = 0
|
|
@@ -1643,7 +1643,7 @@ except BaseException:
|
|
|
1643
1643
|
`)}}function Sz(e,t,n){let r=!!e.env?.NO_COLOR,i=!1,a=0,o=e=>{i=!0,a=e},s=wz(e.stdin??``,o),c=fz(e.argv),l={write:t,end:()=>void 0,isTTY:!r},u={write:n,end:()=>void 0,isTTY:!r};return{processShim:{argv:c,env:e.env,versions:{node:Mi},version:`v${Mi}`,platform:`linux`,arch:`x64`,cwd:()=>e.cwd,exit:e=>{let t=Number.isFinite(e)?Number(e):0;throw o(t),new yz(t)},stdin:s,stdout:l,stderr:u},getDidCallProcessExit:()=>i,getExitCode:()=>a,recordExit:o}}var Cz=class extends DP.Stream{isTTY=!1;consumed=!1;flowScheduled=!1;paused=!1;buffer;onExit;constructor(e,t){super(),this.buffer=e,this.onExit=t}read(){return this.consumed?null:(this.consumed=!0,this.buffer.length>0?this.buffer:null)}toString(){return this.buffer}setEncoding(e){return this}pause(){return this.paused=!0,this}resume(){return this.paused=!1,this.scheduleFlow(),this}on(e,t){return super.on(e,t),e===`data`&&this.scheduleFlow(),this}addListener(e,t){return this.on(e,t)}once(e,t){return super.once(e,t),e===`data`&&this.scheduleFlow(),this}scheduleFlow(){this.flowScheduled||(this.flowScheduled=!0,queueMicrotask(()=>this.flush()))}flush(){if(this.paused){this.flowScheduled=!1;return}try{this.consumed||(this.consumed=!0,this.buffer.length>0&&this.emit(`data`,this.buffer)),this.readable=!1,this.emit(`end`),this.emit(`close`)}catch(e){if(e instanceof yz){this.onExit(e.code);return}throw e}}[Symbol.asyncIterator](){return{next:async()=>this.consumed?{value:void 0,done:!0}:(this.consumed=!0,{value:this.buffer,done:!1})}}};function wz(e,t){return new Cz(e,t)}function Tz(e){if(e===``)return[];let t=e.split(`
|
|
1644
1644
|
`);return t[t.length-1]===``&&t.pop(),t.map(e=>e.endsWith(`\r`)?e.slice(0,-1):e)}function Ez(e){if(typeof e==`string`)return e;if(e&&typeof e.read==`function`){let t=e.read();return typeof t==`string`?t:``}return``}function Dz(e){return new TextDecoder(`utf-8`).decode(AN(e))}function Oz(e){if(e&&typeof e.write==`function`)return e}var kz=class extends xP{terminal=!1;lines;cursor=0;closed=!1;flushScheduled=!1;output;onExit;constructor(e,t,n){super(),this.lines=Tz(Dz(Ez(e))),this.output=t??n.output,this.onExit=n.onExit}on(e,t){return super.on(e,t),e===`line`&&this.scheduleFlush(),this}once(e,t){return super.once(e,t),e===`line`&&this.scheduleFlush(),this}pause(){return this}resume(){return this}close(){this.closed||(this.closed=!0,this.emit(`close`))}question(e,t,n){let r=typeof t==`function`?t:typeof n==`function`?n:void 0;this.output?.write(String(e));let i=this.cursor<this.lines.length?this.lines[this.cursor++]:``;if(r){queueMicrotask(()=>this.runHandler(()=>r(i)));return}return Promise.resolve(i)}[Symbol.asyncIterator](){return{next:async()=>!this.closed&&this.cursor<this.lines.length?{value:this.lines[this.cursor++],done:!1}:(this.close(),{value:void 0,done:!0})}}scheduleFlush(){this.flushScheduled||this.closed||(this.flushScheduled=!0,queueMicrotask(()=>this.flush()))}flush(){this.flushScheduled=!1,this.runHandler(()=>{for(;!this.closed&&this.cursor<this.lines.length;)this.emit(`line`,this.lines[this.cursor++]);this.close()})}runHandler(e){try{e()}catch(e){if(e instanceof yz&&this.onExit){this.closed=!0,this.onExit(e.code);return}throw e}}};function Az(e){let t=(t,n)=>{let r,i;if(t&&typeof t==`object`&&`input`in t){let e=t;r=e.input,i=Oz(e.output)}else r=t,i=Oz(n);if(r==null)throw TypeError(`readline.createInterface: an 'input' stream is required`);return new kz(r,i,e)},n=(...e)=>{let t=e[e.length-1];return typeof t==`function`&&queueMicrotask(()=>t()),!0},r={createInterface:t,Interface:kz,emitKeypressEvents:()=>void 0,cursorTo:n,moveCursor:n,clearLine:n,clearScreenDown:n};return{...r,promises:r}}var jz=class extends Error{status;statusText;url;body;constructor(e,t,n,r){let i=typeof r==`string`&&r?`: ${r.slice(0,200)}`:r&&typeof r==`object`?`: ${Mz(r).slice(0,200)}`:``;super(`HTTP ${e} ${t} ${n}${i}`),this.status=e,this.statusText=t,this.url=n,this.body=r,this.name=`HttpError`}};function Mz(e){try{return JSON.stringify(e)}catch{return String(e)}}function Nz(e){return new Promise(t=>setTimeout(t,e))}function Pz(e,t,n){let r;if(r=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:e?`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`:t,!n)return r;let i=[];for(let[e,t]of Object.entries(n))if(t!=null){if(Array.isArray(t))for(let n of t)n!=null&&i.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(n))}`);else i.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`)}return i.length===0?r:r+(r.includes(`?`)?`&`:`?`)+i.join(`&`)}function Fz(e,t){let n={};if(e)for(let[t,r]of Object.entries(e))n[t]=r;if(t)for(let[e,r]of Object.entries(t))n[e]=r;return n}function Iz(e){if(!e)return!1;let t=e.toLowerCase();return t.startsWith(`application/json`)||/[+/]json(;|$|\s)/.test(t)}function Lz(e){if(!e)return null;let t=e.trim();if(!t)return null;if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);if(Number.isFinite(e)&&e>=0)return Math.round(e*1e3)}let n=Date.parse(t);if(Number.isFinite(n)){let e=n-Date.now();return e>0?e:0}return null}async function Rz(e){if(Iz(e.headers.get(`content-type`))){let t=await e.text();if(!t)return null;try{return JSON.parse(t)}catch{return t}}return e.text()}function zz(e,t){if(e!=null)return typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<`u`&&e instanceof Blob||typeof FormData<`u`&&e instanceof FormData||typeof URLSearchParams<`u`&&e instanceof URLSearchParams||typeof ReadableStream<`u`&&e instanceof ReadableStream?e:typeof e==`object`?(Object.keys(t).some(e=>e.toLowerCase()===`content-type`)||(t[`Content-Type`]=`application/json`),JSON.stringify(e)):String(e)}function Bz(e){let t=e.sleep??Nz;function n(n){let r=new Set(n.retry?.on??[]),i=Math.max(1,Math.trunc(n.retry?.maxAttempts??1));async function a(a,o,s={}){let c=Pz(n.baseUrl,o,s.params),l=Fz(n.headers,s.headers);if(n.token){let e=await n.token({method:a,path:o,url:c});e&&(Object.keys(l).some(e=>e.toLowerCase()===`authorization`)||(l.Authorization=`Bearer ${e}`))}let u=zz(s.body,l),d={method:a,headers:l};u!==void 0&&(d.body=u);let f=null;for(let a=0;a<i;a++){let o=n.timeoutMs?new AbortController:null,l=o?setTimeout(()=>o.abort(Error(`timeout`)),n.timeoutMs):null,u=s.signal&&o?.signal?AbortSignal.any([s.signal,o.signal]):s.signal??o?.signal,p=u?{...d,signal:u}:d,m;try{m=await e.fetch(c,p)}finally{l!==null&&clearTimeout(l)}if(f=m,m.ok){let e=await Rz(m);return s.raw?{body:e,headers:Object.fromEntries(m.headers.entries()),status:m.status}:e}if(!(a+1<i&&r.has(m.status))){let e=await Rz(m).catch(()=>null);throw new jz(m.status,m.statusText,c,e)}let h=Lz(m.headers.get(`retry-after`)),g=500*2**a;await t(h===null?g:h)}if(f){let e=await Rz(f).catch(()=>null);throw new jz(f.status,f.statusText,c,e)}throw Error(`http: no attempts made for ${a} ${c}`)}return Object.freeze({get:((e,t)=>a(`GET`,e,t)),post:((e,t)=>a(`POST`,e,t)),put:((e,t)=>a(`PUT`,e,t)),patch:((e,t)=>a(`PATCH`,e,t)),delete:((e,t)=>a(`DELETE`,e,t))})}return Object.freeze({client:n})}function Vz(e){let t=new TextEncoder().encode(e),n=``;for(let e=0;e<t.length;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function Hz(e,t,n){let r=[];t.model&&r.push(`--model`,String(t.model)),t.thinking&&r.push(`--thinking`,String(t.thinking)),t.schema&&r.push(`--schema-b64`,Vz(JSON.stringify(t.schema))),t.readOnly!==void 0&&r.push(`--read-only`,Array.isArray(t.readOnly)?t.readOnly.join(`,`):String(t.readOnly));let i=t.cwd===void 0?n||`.`:String(t.cwd),a=t.allowedCommands===void 0?`*`:String(t.allowedCommands);return[`agent`,...r,i,a,String(e)]}function Uz(e,t){let n=t.cwd,r=async(t,r)=>{let i=r??{},a=await e.spawn(Hz(t,i,n)),o=typeof a.exitCode==`number`?a.exitCode:0;return{finalText:String(a.stdout??``).replace(/\n+$/,``),exitCode:o,stderr:String(a.stderr??``).replace(/\n+$/,``)}},i=(async(e,t)=>{let n=t??{},i=await r(e,n);if(i.exitCode!==0)throw Error(`agent: exited with code ${i.exitCode}${i.stderr?`: ${i.stderr}`:``}`);if(n.schema)try{return JSON.parse(i.finalText)}catch{throw Error(`agent: schema response was not valid JSON (exit ${i.exitCode}): ${i.finalText.slice(0,200)}`)}return i.finalText});return i.spawn=r,i}function Wz(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof e.targetId==`string`)return e.targetId;throw TypeError(`browser: expected a tab handle or targetId string`)}function Gz(e){function t(t){return{...t,async update(n){let r={};return n.urlMatch!==void 0&&(r.urlMatch=n.urlMatch===null?null:n.urlMatch instanceof RegExp?n.urlMatch.source:n.urlMatch),n.filter!==void 0&&(r.filter=n.filter),e.call(`browser`,`wsUpdate`,[t.id,r])},async close(){return e.call(`browser`,`wsClose`,[t.id])}}}return{on(n,r={}){let i=Wz(n),a=r.urlMatch===void 0?void 0:r.urlMatch instanceof RegExp?r.urlMatch.source:r.urlMatch,o,s={filter(e){if(typeof e==`function`||typeof e==`string`)throw TypeError(`browser.websocket: filter must be a declarative JSON object, not a function or string`);return o=e,s},async forward(n){return t(await e.call(`browser`,`wsObserve`,[{targetId:i,urlMatch:a,filter:o,forward:n}]))}};return s},async list(){return e.call(`browser`,`wsList`,[])}}}async function Kz(e,t){if(!e&&!(t instanceof Request))return;let n=t instanceof Request?t:null,r=(e?.method??n?.method??`GET`).toUpperCase(),i={};if(e?.headers){if(e.headers instanceof Headers)e.headers.forEach((e,t)=>{i[t]=e});else if(Array.isArray(e.headers))for(let[t,n]of e.headers)i[t]=n;else Object.assign(i,e.headers)}else n&&n.headers.forEach((e,t)=>{i[t]=e});let a,o;if(e?.body!==void 0&&e?.body!==null&&e?.body!==``){let t=await qz(e.body);a=t.body,o=t.defaultContentType}return o&&!Object.keys(i).some(e=>e.toLowerCase()===`content-type`)&&(i[`Content-Type`]=o),{method:r,headers:i,body:a}}async function qz(e){if(typeof e==`string`||e instanceof URLSearchParams)return{body:e.toString()};if(e instanceof Blob)return{body:Jz(new Uint8Array(await e.arrayBuffer())),defaultContentType:e.type||`application/octet-stream`};if(e instanceof ArrayBuffer)return{body:Jz(new Uint8Array(e)),defaultContentType:`application/octet-stream`};if(ArrayBuffer.isView(e))return{body:Jz(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),defaultContentType:`application/octet-stream`};throw typeof FormData<`u`&&e instanceof FormData?Error(`node fetch shim: FormData request bodies are not supported (post raw application/x-www-form-urlencoded with URLSearchParams instead)`):typeof ReadableStream<`u`&&e instanceof ReadableStream?Error(`node fetch shim: ReadableStream request bodies are not supported (collect into a Uint8Array or string before calling fetch)`):Error(`node fetch shim: unsupported request body type (${Object.prototype.toString.call(e)}); use a string, Uint8Array, ArrayBuffer, Blob, or URLSearchParams`)}function Jz(e){let t=[];for(let n=0;n<e.length;n+=32768)t.push(String.fromCharCode(...e.subarray(n,n+32768)));return t.join(``)}function Yz(e){return{findTab:t=>e.call(`browser`,`findTab`,[Zz(t)]),ensureTab:(t,n={})=>e.call(`browser`,`ensureTab`,[t,Qz(n)]),eval:(t,n)=>e.call(`browser`,`eval`,[Wz(t),Xz(n,!1)]),evalAsync:(t,n)=>e.call(`browser`,`evalAsync`,[Wz(t),Xz(n,!0)]),cookie:(t,n)=>e.call(`browser`,`cookie`,[Wz(t),n]),localStorage:(t,n)=>e.call(`browser`,`localStorage`,[Wz(t),n]),fetch:(t,n,r={})=>Bee(n,r).then(n=>e.call(`browser`,`evalAsync`,[Wz(t),n])),websocket:Gz(e)}}function Xz(e,t){if(typeof e==`function`)return`(${e.toString()})()`;if(typeof e==`string`)return e;throw TypeError(`browser.eval/evalAsync: source must be a function or string`)}function Zz(e){let t={};return e.domain!==void 0&&(t.domain=e.domain),e.urlMatch!==void 0&&(t.urlMatch=e.urlMatch instanceof RegExp?e.urlMatch.source:e.urlMatch),t}function Qz(e){return e.matchUrl===void 0?{}:{matchUrl:e.matchUrl instanceof RegExp?e.matchUrl.source:e.matchUrl}}function $z(e){return e===`SIGKILL`?137:e===`SIGINT`?130:143}function eB(e,t,n,r){let i=async()=>{if(!t?.wasUsed())return;let n=t.getMutations();if(n.created.length||n.modified.length||n.deleted.length)try{await e.call(`vfs`,`flushWrites`,[n])}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`[realm-exec] pre-exec sync-fs flush failed (will retry at exit): ${t}`);return}t.resetBaseline()},a=async(i=!1)=>{if(t?.wasUsed())try{let r=await e.call(`vfs`,`snapshot`,[n]);i?t.applySnapshotPreservingMutations(r):t.applySnapshot(r)}catch(e){let t=e instanceof Error?e.message:String(e);r?.(`[sync-fs] re-snapshot after exec failed: ${t}\n`)}},o=async t=>{await i();try{return await e.call(`exec`,`run`,[t])}finally{await a()}},s=async t=>{await i();try{return await e.call(`exec`,`spawn`,[t])}finally{await a()}},c=1,l=Object.assign(o,{spawn:s,start:(t,n)=>{let r=c++,o=[],s=!1,l=!1,u=!1,d,f,p=new Promise((e,t)=>{d=e,f=t}),m=()=>{if(s||u||l)return;l=!0;let c=o.length>0?o.join(``):n?.stdin,p={};c!==void 0&&(p.stdin=c),n?.stdinKind!==void 0&&(p.stdinKind=n.stdinKind),n?.args!==void 0&&(p.args=n.args),(async()=>{try{if(await i(),u){await a(!0);return}s=!0;let n=await e.call(`exec`,`start`,[r,t,p]);await a(!0),d(n)}catch(e){await a(!0),f(e)}})()};return{kill:t=>s?e.call(`exec`,`kill`,[r,t]):(u=!0,d({stdout:``,stderr:``,exitCode:$z(t)}),Promise.resolve(!0)),stdin:{write:e=>{!s&&!u&&o.push(e)},end:()=>m()},done:p}}});return l.exec=l,l}function tB(e){if(e instanceof Uint8Array)return e;if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(e instanceof ArrayBuffer)return new Uint8Array(e);throw TypeError(`expected an ArrayBuffer or typed array`)}function nB(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function rB(e){return e==null?[]:Array.isArray(e)?e:[e]}function iB(e,t){let n=t.handle,r=new Set,i=new Set,a=!1,o=null,s=e=>{let t=e;if(!t||t.handle!==n)return;let i={reportId:t.reportId,data:nB(t.bytes)};for(let e of[...r])try{e(i)}catch{}},c=()=>{a||(a=!0,o=e.onEvent?e.onEvent(`hid-input-report`,s):null,e.call(`hid`,`subscribeInputReports`,[n]).catch(()=>{a=!1,o?.(),o=null}))},l=()=>{!a||r.size>0||(a=!1,o?.(),o=null,e.call(`hid`,`unsubscribeInputReports`,[n]).catch(()=>{}))};return{...t,open:()=>e.call(`hid`,`open`,[n]),close:()=>e.call(`hid`,`close`,[n]),sendReport:(t,r)=>e.call(`hid`,`sendReport`,[n,t,tB(r)]),sendFeatureReport:(t,r)=>e.call(`hid`,`sendFeatureReport`,[n,t,tB(r)]),receiveFeatureReport:async t=>nB((await e.call(`hid`,`receiveFeatureReport`,[n,t])).bytes),addEventListener(e,t){if(e===`inputreport`)r.add(t),c();else if(e===`disconnect`)i.add(t);else throw TypeError(`hid device: unknown event type '${String(e)}'`)},removeEventListener(e,t){e===`inputreport`?(r.delete(t),l()):e===`disconnect`&&i.delete(t)},onInputReport(e){r.add(e),c()}}}function aB(e){return{list:async()=>(await e.call(`hid`,`list`,[])).map(t=>iB(e,t)),request:async t=>{let n=(await e.call(`hid`,`request`,[rB(t)]))[0];if(!n)throw Error(`No device selected.`);return iB(e,n)}}}function oB(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 sB=class{rpc;targetId;selector;index;constructor(e,t,n,r){this.rpc=e,this.targetId=t,this.selector=n,this.index=r}evalOnElement(e){let t=`(() => { const els = document.querySelectorAll(${JSON.stringify(this.selector)}); const el = els[${this.index}]; ${e} })()`;return this.rpc.call(`browser`,`evalAsync`,[this.targetId,t])}async textContent(){return this.evalOnElement(`return el ? el.textContent : null;`)}async getAttribute(e){return this.evalOnElement(`return el ? el.getAttribute(${JSON.stringify(e)}) : null;`)}async isVisible(){return this.evalOnElement(`if (!el) return false; const s = getComputedStyle(el); if (s.display === 'none' || s.visibility === 'hidden' || s.opacity === '0') return false; const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0;`)}async boundingBox(){return this.evalOnElement(`if (!el) return null; const r = el.getBoundingClientRect(); return { x: r.x, y: r.y, width: r.width, height: r.height };`)}},cB=class{rpc;targetId;onClose;closed=!1;constructor(e,t,n){this.rpc=e,this.targetId=t,this.onClose=n}async goto(e,t){await this.rpc.call(`browser`,`navigateTab`,[this.targetId,e])}async waitForLoadState(e){await this.rpc.call(`browser`,`waitForLoadState`,[this.targetId,e??`load`])}async waitForTimeout(e){await new Promise(t=>setTimeout(t,e))}async evaluate(e,...t){let n=typeof e==`string`?e:`(${e.toString()}).apply(null, JSON.parse(${JSON.stringify(JSON.stringify(t))}))`;return this.rpc.call(`browser`,`evalAsync`,[this.targetId,n])}async screenshot(e){let t={};e?.fullPage!==void 0&&(t.fullPage=e.fullPage);let n=oB(await this.rpc.call(`browser`,`screenshotTab`,[this.targetId,t]));return e?.path&&await this.rpc.call(`vfs`,`writeFileBinary`,[e.path,n]),n}async $(e){return await this.rpc.call(`browser`,`evalAsync`,[this.targetId,`!!document.querySelector(${JSON.stringify(e)})`])?new sB(this.rpc,this.targetId,e,0):null}async $$(e){let t=await this.rpc.call(`browser`,`evalAsync`,[this.targetId,`document.querySelectorAll(${JSON.stringify(e)}).length`]),n=[];for(let r=0;r<t;r++)n.push(new sB(this.rpc,this.targetId,e,r));return n}async $$eval(e,t,...n){if(typeof t==`string`)return this.rpc.call(`browser`,`evalAsync`,[this.targetId,t]);let r=`(${t.toString()}).apply(null, [Array.from(document.querySelectorAll(${JSON.stringify(e)}))].concat(JSON.parse(${JSON.stringify(JSON.stringify(n))})))`;return this.rpc.call(`browser`,`evalAsync`,[this.targetId,r])}async content(){return this.rpc.call(`browser`,`evalAsync`,[this.targetId,`document.documentElement.outerHTML`])}async setViewportSize(e){await this.rpc.call(`browser`,`setViewport`,[this.targetId,e.width,e.height])}async close(){this.closed||(this.closed=!0,await this.rpc.call(`browser`,`closeTab`,[this.targetId]),this.onClose?.())}},lB=class{rpc;openPages=[];constructor(e){this.rpc=e}async newPage(e){let t=await this.rpc.call(`browser`,`createTab`,[`about:blank`]);e?.viewport&&await this.rpc.call(`browser`,`setViewport`,[t,e.viewport.width,e.viewport.height]);let n=new cB(this.rpc,t,()=>{let e=this.openPages.indexOf(n);e!==-1&&this.openPages.splice(e,1)});return this.openPages.push(n),n}pages(){return[...this.openPages]}async close(){let e=this.openPages.splice(0,this.openPages.length);for(let t of e)await t.close()}},uB=class{rpc;openPages=[];openContexts=[];constructor(e){this.rpc=e}async newPage(e){let t=await this.rpc.call(`browser`,`createTab`,[`about:blank`]);e?.viewport&&await this.rpc.call(`browser`,`setViewport`,[t,e.viewport.width,e.viewport.height]);let n=new cB(this.rpc,t,()=>{let e=this.openPages.indexOf(n);e!==-1&&this.openPages.splice(e,1)});return this.openPages.push(n),n}async newContext(e){let t=new lB(this.rpc);return this.openContexts.push(t),t}contexts(){return[...this.openContexts]}async close(){let e=this.openPages.splice(0,this.openPages.length);for(let t of e)await t.close();let t=this.openContexts.splice(0,this.openContexts.length);for(let e of t)await e.close()}};function dB(e){let t=async t=>new uB(e),n=async(t,n)=>new uB(e);return{chromium:{launch:t,connect:n,connectOverCDP:n},firefox:{launch:t,connect:n},webkit:{launch:t,connect:n}}}const fB=new Set([`bcrypt`,`better-sqlite3`,`canvas`,`cpu-features`,`fsevents`,`leveldown`,`libxmljs`,`libxmljs2`,`node-gyp-build`,`node-sass`,`puppeteer`,`robotjs`,`sass-embedded`,`sharp`,`snappy`,`sqlite3`,`tree-sitter`,`usb`]),pB={sharp:` Use the built-in 'convert' shell command for image work.`,canvas:` Use the built-in 'convert' / OffscreenCanvas for image work.`,"better-sqlite3":` Use the built-in 'sqlite3' shell command (sql.js WASM).`,sqlite3:` Use the built-in 'sqlite3' shell command (sql.js WASM).`,bcrypt:` Use crypto.subtle.digest() with PBKDF2 / Argon2 in pure JS.`,puppeteer:` Use the built-in browser-automation shell commands.`};function mB(e,t){let n=pB[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${n}`)}function hB(e){return{...e,time:_z,fmt:sP,pool:pz}}function gB(e,t){return e?.startsWith(`/`)?vz(e):t}function _B(e){return e.includes(`require`)||e.includes(`import`)}async function vB(e,t,n,r){return _B(t)?e.call(`module`,`buildGraph`,[t,gB(r,n),r]):{files:[],entryMap:{},edges:{},errors:{}}}function yB(e){if(typeof e!=`object`||!e)return;let t=e;if(t.__esModule&&!Object.prototype.hasOwnProperty.call(t,`default`)&&Object.isExtensible(t))try{Object.defineProperty(t,"default",{value:t,enumerable:!1,configurable:!0})}catch{}}function bB(e){return{playwright:dB(e)}}function xB(e){let{graph:t,fsBridge:n,processShim:r,childProcess:i,nodeConsole:a,sliccyModules:o,shimmedPackages:s={},nodeReadline:c}=e,l=new Map(t.files.map(e=>[e.path,e.cjsSource])),u=new Map(t.files.map(e=>[e.path,e.kind])),d=new Map,f=e=>{if(typeof e==`string`&&e.startsWith(`sliccy:`))return{hit:!0,value:wB(e,o)};let t=e.startsWith(`node:`)?e.slice(5):e,a=SB(t,n,r,i,c);if(a.hit)return a;if(fB.has(t))throw mB(e,t);if(Jee.has(t))throw EB(e,t);return t in s?{hit:!0,value:s[t]}:{hit:!1}},p=(e,n)=>{let r=f(n);if(r.hit)return r.value;let i=e?.[n];if(i)return m(i);throw n in t.errors?Error(t.errors[n]):CB(n)};function m(e){let n=d.get(e);if(n)return n.exports;let i=l.get(e);if(i===void 0)throw Error(`Cannot find module '${e}'`);let o={exports:{}};d.set(e,o);let s=n=>p(t.edges[e],n),c=vz(e);return Function(`module`,`exports`,`require`,`__dirname`,`__filename`,`process`,`console`,`Buffer`,`global`,i)(o,o.exports,s,c,e,r,a,globalThis.Buffer,globalThis),u.get(e)===`cjs`&&yB(o.exports),o.exports}return{require:e=>p(t.entryMap,e)}}function SB(e,t,n,r,i){return e===`fs`||e===`fs/promises`?{hit:!0,value:t}:e===`path`?{hit:!0,value:EF}:e===`crypto`?{hit:!0,value:mF}:e===`child_process`?{hit:!0,value:r}:e===`process`?{hit:!0,value:n}:e===`buffer`?{hit:!0,value:{Buffer:globalThis.Buffer}}:e===`assert`?{hit:!0,value:yP}:e===`assert/strict`?{hit:!0,value:vP}:e===`util`?{hit:!0,value:UP}:e===`events`?{hit:!0,value:SP}:e===`os`?{hit:!0,value:hF}:e===`tty`?{hit:!0,value:DF}:e===`stream`?{hit:!0,value:DP}:e===`url`?{hit:!0,value:AF}:e===`zlib`?{hit:!0,value:uz}:e===`readline`&&i?{hit:!0,value:i}:e===`readline/promises`&&i?{hit:!0,value:i.promises}:{hit:!1}}function CB(e){if(e.startsWith(`.`)||e.startsWith(`/`)||e.startsWith(`node:`))return Error(`Cannot find module '${e}'`);let t=e.startsWith(`@`)?e.split(`/`).slice(0,2).join(`/`):e.split(`/`)[0];return Error(`Cannot find module '${e}' (run: ipk install ${t})`)}function wB(e,t){let n=e.slice(7);if(n===``)throw Error(`require('sliccy:'): empty sliccy: module name`);if(!Object.prototype.hasOwnProperty.call(t,n))throw Error(`require('${e}'): unknown sliccy: module '${n}'. Known names: ${Object.keys(t).sort().join(`, `)}`);return t[n]}const TB={http:` Use fetch() instead.`,https:` Use fetch() instead.`,crypto:` Use globalThis.crypto (Web Crypto API) instead.`};function EB(e,t){return Error(`require('${e}'): Node built-in '${t}' is not available in the browser environment.${TB[t]||``}`)}async function DB(e,t,n,r){let i=Object.keys(t),a=i.map(e=>t[e]),o=Object.getPrototypeOf(async function(){}).constructor,s=new o(...i,`${r?`"use strict";
|
|
1645
1645
|
`:``}${e}`);try{return await s(...a),0}catch(e){return e instanceof yz?e.code:(n(`${e instanceof Error?e.stack??e.message:String(e)}\n`),1)}}function OB(e,t){let n=t.handle;return{...t,open:t=>e.call(`serial`,`open`,[n,t]),close:()=>e.call(`serial`,`close`,[n]),read:(t={})=>e.call(`serial`,`read`,[n,{maxBytes:t.maxBytes??t.bytes,until:t.until?tB(t.until):void 0,timeoutMs:t.timeoutMs}]),write:t=>e.call(`serial`,`write`,[n,tB(t)]),getSignals:()=>e.call(`serial`,`getSignals`,[n]),setSignals:t=>e.call(`serial`,`setSignals`,[n,t])}}function kB(e){return{list:async()=>(await e.call(`serial`,`list`,[])).map(t=>OB(e,t)),request:async t=>OB(e,await e.call(`serial`,`request`,[rB(t)]))}}function AB(e,t){let n=t.handle,r=e=>({status:e.status,data:nB(e.bytes)});return{...t,open:()=>e.call(`usb`,`open`,[n]),close:()=>e.call(`usb`,`close`,[n]),reset:()=>e.call(`usb`,`reset`,[n]),selectConfiguration:t=>e.call(`usb`,`selectConfig`,[n,t]),claimInterface:t=>e.call(`usb`,`claim`,[n,t]),releaseInterface:t=>e.call(`usb`,`release`,[n,t]),controlTransferIn:async(t,i)=>r(await e.call(`usb`,`controlIn`,[n,t,i])),controlTransferOut:(t,r)=>e.call(`usb`,`controlOut`,[n,t,tB(r)]),transferIn:async(t,i)=>r(await e.call(`usb`,`transferIn`,[n,t,i])),transferOut:(t,r)=>e.call(`usb`,`transferOut`,[n,t,tB(r)])}}function jB(e){return{list:async()=>(await e.call(`usb`,`list`,[])).map(t=>AB(e,t)),request:async t=>AB(e,await e.call(`usb`,`request`,[rB(t)]))}}function MB(e){if(!e)return``;let t=e.lastIndexOf(`/`);return t<0?``:t===0?`/`:e.substring(0,t)}function NB(e){return/^[A-Za-z0-9_\-./:@]+$/.test(e)?e:`'`+e.replace(/'/g,`'\\''`)+`'`}function PB(e,t){return e===``?t:e===`/`?`/${t}`:`${e}/${t}`}function FB(e){let t=MB(e.argv[1]??``),n=PB(t,`references`),r=PB(t,`assets`),i=PB(t,`.config`);async function a(){let t;try{t=await e.fs.exists(i)}catch{return null}if(!t)return null;let n;try{n=await e.fs.readFile(i)}catch{return null}let r=typeof n==`string`?n:String(n);if(!r.trim())return null;let a;try{a=JSON.parse(r)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`skill.config(): failed to parse ${i}: ${t}`)}if(a&&typeof a==`object`&&!Array.isArray(a))return a;throw Error(`skill.config(): ${i} must contain a JSON object`)}async function o(t){let n=await a();if(t===void 0)return n;if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`skill.config(updates): updates must be a plain object`);let r={...n??{},...t};return await e.fs.writeFile(i,JSON.stringify(r,null,2)+`
|
|
1646
|
-
`),r}async function s(t){if(typeof t!=`string`||!t.trim())throw TypeError(`skill.token(providerId): providerId must be a non-empty string`);let n=`oauth-token ${NB(t)}`,{stdout:r,stderr:i,exitCode:a}=await e.exec(n);if(a!==0){let e=i.trim()||`oauth-token exited with code ${a}`;throw Error(`skill.token('${t}'): ${e}`)}return r.replace(/\r?\n+$/,``)}return Object.freeze({dir:t,refs:n,assets:r,config:o,token:s})}const IB=new Map,LB=new Map;function RB(e){let t=crypto.randomUUID();return IB.set(t,e),t}function zB(e){return IB.get(e)??null}function BB(e,t){if(!IB.has(e))return t.abort(),()=>{};let n=LB.get(e);return n||(n=new Set,LB.set(e,n)),n.add(t),()=>{let n=LB.get(e);n&&(n.delete(t),n.size===0&&LB.delete(e))}}function VB(e){IB.delete(e);let t=LB.get(e);if(t){LB.delete(e);for(let e of t)e.signal.aborted||e.abort()}}function HB(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return typeof n==`string`&&/^E[A-Z]+$/.test(n)?{ok:!1,errno:n,message:t}:{ok:!1,errno:`EIO`,message:t}}async function UB(e){let t=zB(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-fs: unknown or revoked token`};let{fs:n,cwd:r}=t;try{let t=n.resolvePath(r,e.path);switch(e.op){case`read`:return{ok:!0,kind:`bytes`,bytes:await n.readFileBuffer(t)};case`write`:return await n.writeFile(t,e.body??new Uint8Array),{ok:!0,kind:`void`};case`exists`:return{ok:!0,kind:`json`,json:await n.exists(t)};case`stat`:{let e=await n.stat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink,size:e.size}}}case`lstat`:{let e=await n.lstat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink??!1,size:e.size}}}case`readdir`:return{ok:!0,kind:`json`,json:await n.readdir(t)};case`mkdir`:return await n.mkdir(t,{recursive:!0}),{ok:!0,kind:`void`};case`rm`:return await n.rm(t,{recursive:!0}),{ok:!0,kind:`void`};case`rename`:{let i=n.resolvePath(r,e.arg2??``),a=n;if(a.rename)await a.rename(t,i);else if(a.mv)await a.mv(t,i);else{let e=await n.readFileBuffer(t);await n.writeFile(i,e),await n.rm(t,{recursive:!0})}return{ok:!0,kind:`void`}}default:return{ok:!1,errno:`EINVAL`,message:`sync-fs: unknown op '${e.op}'`}}}catch(e){return HB(e)}}function WB(e){return`slicc-sync-fs-`+e}const GB=`sync-fs-ack`,KB=`sync-fs-res`,qB=6e5,JB=5e3,YB=`exec`;function XB(e){return e.channel===YB}function ZB(e){let{command:t}=e;if(Array.isArray(t)){if(t.length===0||!t.every(e=>typeof e==`string`))return{errno:`EINVAL`,message:`sync-exec: argv must be a non-empty string[]`};let[e,...n]=t;return{cmd:e,args:n}}return typeof t!=`string`||t.length===0?{errno:`EINVAL`,message:`sync-exec: command must be a non-empty string`}:e.args===void 0?{cmd:t}:!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`)?{errno:`EINVAL`,message:`sync-exec: args must be a string[]`}:{cmd:t,args:e.args}}function QB(e,t){return Math.min(typeof e!=`number`||!Number.isFinite(e)||e<=0?t:e,qB)}async function $B(e){let t=zB(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-exec: unknown or revoked token`};if(!t.exec)return{ok:!1,errno:`ENOSYS`,message:`sync-exec: exec is not available`};let n=ZB(e);if(`errno`in n)return{ok:!1,errno:n.errno,message:n.message};let r=new AbortController,i=!1,a=setTimeout(()=>{i=!0,r.abort()},QB(e.timeoutMs,qB)),o=BB(e.token,r);try{let i=await t.exec(n.cmd,{cwd:t.cwd,signal:r.signal,...n.args===void 0?{}:{args:n.args},...e.stdin===void 0?{}:{stdin:e.stdin}});return{ok:!0,kind:`json`,json:{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}catch(e){return i?{ok:!1,errno:`ETIMEDOUT`,message:`sync-exec: timed out — ${e instanceof Error?e.message:String(e)}`}:r.signal.aborted?{ok:!1,errno:`ECANCELED`,message:`sync-exec: realm disposed`}:HB(e)}finally{clearTimeout(a),o()}}function eV(e,t){return Object.assign(Error(`${e}: ${t}`),{code:e})}function tV(e){let t=rV(e);if(iV(t))return new Uint8Array(t.response);if(t.status>=200&&t.status<300)throw eV(`EIO`,e.label);aV(t,e.label)}function nV(e){let t=tV(e);try{return JSON.parse(new TextDecoder().decode(t))}catch{throw eV(`EIO`,e.label)}}function rV(e){let t=new XMLHttpRequest;try{t.open(e.method,e.url,!1),t.responseType=`arraybuffer`,t.timeout=e.timeoutMs,t.setRequestHeader(`x-slicc-fs-token`,e.token),e.body?t.send(new Uint8Array(e.body)):t.send()}catch{throw eV(`EIO`,e.label)}return t}function iV(e){return e.status>=200&&e.status<300&&e.getResponseHeader(`x-slicc-fs`)===`1`}function aV(e,t){throw eV(e.getResponseHeader(`x-slicc-fs`)===`1`&&e.getResponseHeader(`x-slicc-fs-errno`)||`EIO`,t)}function oV(e){return(t,n,r)=>{let i=nV({method:`POST`,url:`/__slicc/exec-sync`,token:e,body:new TextEncoder().encode(JSON.stringify({...t,channel:YB})),timeoutMs:n+JB,label:r});if(!i||typeof i.stdout!=`string`||typeof i.stderr!=`string`||typeof i.exitCode!=`number`)throw eV(`EIO`,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}function sV(e,t){let n=e.getMutations();for(let e of n.deleted)t.rm(e);for(let e of n.created)e.isDirectory?t.mkdir(e.path):t.writeFile(e.path,e.content);for(let e of n.modified)t.writeFile(e.path,e.content);e.resetBaseline()}function cV(e,t={}){let n=t.timeoutMs??12e4,{syncFs:r,fsBridge:i}=t,a=t.transport??oV(e);return{run(e,t={}){let o=r?.wasUsed()===!0&&i!==void 0;o&&sV(r,i);let s=`sync-exec bridge, '${Array.isArray(e)?e.join(` `):e}'`,c=QB(t.timeout,n),l={command:e,...t.args===void 0?{}:{args:t.args},...t.input===void 0?{}:{stdin:t.input},timeoutMs:c};try{return a(l,c,s)}finally{o&&r.invalidate()}}}}function lV(e,t){return eV(e,`sync-fs bridge, '${t}'`)}function uV(e,t){let n=`/__slicc/fs-sync`+(e.startsWith(`/`)?e:`/${e}`).split(`/`).map(encodeURIComponent).join(`/`);return t?`${n}?op=${t}`:n}function dV(e,t={}){let n=t.timeoutMs??3e4;function r(t,r,i,a){return{method:t,url:uV(r,a),token:e,...i?{body:i}:{},timeoutMs:n,label:`sync-fs bridge, '${r}'`}}return{readFile(e){return tV(r(`GET`,e))},writeFile(e,t){tV(r(`POST`,e,t))},stat(e){let t=nV(r(`GET`,e,void 0,`stat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw lV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},lstat(e){let t=nV(r(`GET`,e,void 0,`lstat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw lV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},readdir(e){let t=nV(r(`GET`,e,void 0,`readdir`));if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw lV(`EIO`,e);return t},exists(e){let t=nV(r(`GET`,e,void 0,`exists`));if(typeof t!=`boolean`)throw lV(`EIO`,e);return t},mkdir(e){tV(r(`POST`,e,void 0,`mkdir`))},rm(e){tV(r(`POST`,e,void 0,`rm`))}}}const fV=new TextEncoder,pV=new TextDecoder;function mV(e){if(!e.ok)return{status:4,payload:fV.encode(JSON.stringify({errno:e.errno,message:e.message}))};switch(e.kind){case`bytes`:return{status:1,payload:e.bytes};case`json`:return{status:2,payload:fV.encode(JSON.stringify(e.json))};default:return{status:3,payload:new Uint8Array}}}function hV(e,t){switch(e){case 1:return{ok:!0,kind:`bytes`,bytes:t};case 3:return{ok:!0,kind:`void`};case 2:try{return{ok:!0,kind:`json`,json:JSON.parse(pV.decode(t))}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed json payload`}}case 4:try{let e=JSON.parse(pV.decode(t)),n=typeof e.errno==`string`&&/^E[A-Z]+$/.test(e.errno)?e.errno:`EIO`;return{ok:!1,errno:n,message:String(e.message??n)}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed errno payload`}}default:return{ok:!1,errno:`EIO`,message:`sync-sab: unknown status ${e}`}}}function gV(e){if(e.byteLength<4160)throw Error(`sync-sab: buffer too small (${e.byteLength} < 4160)`);return{header:new Int32Array(e,0,16),window:new Uint8Array(e,64)}}function _V(){if(typeof SharedArrayBuffer>`u`||typeof Atomics>`u`)return!1;let e=globalThis.crossOriginIsolated;return e===void 0||e===!0}function vV(e,t,n={}){let{header:r,window:i}=gV(e),a=n.wait??((e,t,n,r)=>Atomics.wait(e,t,n,r)),o=n.now??(()=>performance.now()),s=0;function c(e,t,n){for(;;){let i=t-o();if(i<=0)throw eV(`ETIMEDOUT`,n);if(a(r,0,1,i),Atomics.load(r,0)===2&&Atomics.load(r,1)===e)return;Atomics.load(r,0)===2&&Atomics.store(r,0,1)}}return{call(e,n,a){let l=++s,u=o()+n,d=null,f=0,p=0;try{for(;;){Atomics.store(r,0,1);let n=p===0?{type:`sync-sab-req`,id:l,req:e}:{type:`sync-sab-next`,id:l,offset:p};try{t.postMessage(n)}catch{throw eV(`EIO`,a)}c(l,u,a);let o=Atomics.load(r,3),s=Atomics.load(r,4);if(Atomics.load(r,5)!==p||s<0||o<0||p+s>o)throw eV(`EIO`,a);if(d===null&&(f=Atomics.load(r,2),d=new Uint8Array(o)),d.set(i.subarray(0,s),p),p+=s,p>=o)break;if(s===0)throw eV(`EIO`,a)}}finally{Atomics.store(r,0,0)}return hV(f,d)}}}function yV(e,t){return eV(e,`sync-sab bridge, '${t}'`)}function bV(e){let t=e;return!!t&&typeof t.isFile==`boolean`&&typeof t.isDirectory==`boolean`&&typeof t.size==`number`}function xV(e,t={}){let n=t.timeoutMs??25e3;function r(t,r){let i=e.call(t,n,`sync-sab bridge, '${r}'`);if(!i.ok)throw yV(i.errno,r);return i}function i(e,t){let n=r(e,t);if(n.ok&&n.kind===`bytes`)return n.bytes;throw yV(`EIO`,t)}function a(e,t){let n=r(e,t);if(n.ok&&n.kind===`json`)return n.json;throw yV(`EIO`,t)}return{readFile:e=>i({op:`read`,path:e},e),writeFile:(e,t)=>{r({op:`write`,path:e,body:t},e)},stat:e=>{let t=a({op:`stat`,path:e},e);if(!bV(t))throw yV(`EIO`,e);return t},lstat:e=>{let t=a({op:`lstat`,path:e},e);if(!bV(t))throw yV(`EIO`,e);return t},readdir:e=>{let t=a({op:`readdir`,path:e},e);if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw yV(`EIO`,e);return t},exists:e=>{let t=a({op:`exists`,path:e},e);if(typeof t!=`boolean`)throw yV(`EIO`,e);return t},mkdir:e=>{r({op:`mkdir`,path:e},e)},rm:e=>{r({op:`rm`,path:e},e)}}}function SV(e){return(t,n,r)=>{let i=e.call({...t,channel:YB},n+JB,r);if(!i.ok)throw eV(i.errno,r);let a=i.kind===`json`?i.json:null;if(!a||typeof a.stdout!=`string`||typeof a.stderr!=`string`||typeof a.exitCode!=`number`)throw eV(`EIO`,r);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}}async function CV(e,t,n){let r;try{r=await e.call(`vfs`,`snapshot`,[t])}catch(e){n?.(e instanceof Error?e.message:String(e)),r={entries:[]}}return new ON(r)}function wV(e,t){if(e.syncFsToken)return e=>t(`[sync-fs] snapshot failed, sync metadata will be incomplete: ${e}\n`)}function TV(e,t){return t?xV(t):e.syncFsToken?dV(e.syncFsToken):void 0}function EV(e,t){if(!(!e.syncSab||typeof Atomics>`u`||typeof Atomics.wait!=`function`))return vV(e.syncSab,t)}function DV(e,t,n,r,i){let a=EV(e,t),o=TV(e,a);if(Object.assign(r,JN(n,e.cwd,o,i)),e.syncFsToken)return cV(e.syncFsToken,{syncFs:n,...o?{fsBridge:o}:{},...a?{transport:SV(a)}:{}})}function OV(e=globalThis){Object.prototype.hasOwnProperty.call(e,`SLICC_VERSION`)||Object.defineProperty(e,"SLICC_VERSION",{value:sr().version,writable:!1,enumerable:!1,configurable:!1})}function kV(e,t,n){let r=ZN({isTTY:!e,noColor:e});return{colorApi:r,cliApi:YN({writeStdout:t,writeStderr:n,exit:e=>{throw new yz(e)},color:r})}}function AV(e,t,n){return{readStdinBytes:()=>AN(e.stdin??``),writeStdout:t,writeStderr:n}}function jV(e){return{usbBridge:jB(e),serialBridge:kB(e),hidBridge:aB(e)}}async function MV(e,t){let n=[],r=[],i=e=>{n.push(typeof e==`string`?e:String(e))},a=e=>{r.push(typeof e==`string`?e:String(e))},o=xz(i,a),s=Sz(e,i,a),{colorApi:c,cliApi:l}=kV(!!e.env?.NO_COLOR,i,a),u=new zM(t),d=AV(e,i,a),f=HN(u,C,d),p=await CV(u,e.cwd,wV(e,a)),m=DV(e,t,p,f,d),h=eB(u,p,e.cwd,a),g=Uz(h,{cwd:e.cwd}),_=FB({argv:e.argv,fs:f,exec:h}),v=Yz(u),{usbBridge:y,serialBridge:b,hidBridge:x}=jV(u),S=Bz({fetch:C});async function C(e,t){let n=e instanceof Request?e.url:e instanceof URL?e.toString():String(e),r=await u.call(`fetch`,`request`,[n,await Kz(t,e)]),i=r.body.byteLength===0?null:r.body.buffer.slice(r.body.byteOffset,r.body.byteOffset+r.body.byteLength),a=new Response(i,{status:r.status,statusText:r.statusText,headers:r.headers});return Object.defineProperty(a,"url",{value:r.url||n}),a}let w=hB({exec:h,agent:g,skill:_,http:S,browser:v,usb:y,serial:b,hid:x,cli:l,color:c}),T=e.filename,E=vz(T),D=await vB(u,e.code,e.cwd,T),ee=xB({graph:D,fsBridge:f,processShim:s.processShim,childProcess:QP(h,m),nodeConsole:o,sliccyModules:w,shimmedPackages:bB(u),nodeReadline:Az({output:{write:i},onExit:s.recordExit})}).require,te={exports:{},filename:e.filename},ne=D.entrySource!==void 0,re=D.entrySource??e.code,O=globalThis;OV(),O.__slicc_compileWasm=e=>u.call(`wasm`,`compile`,[e]);let ie=await DB(re,{process:s.processShim,console:o,require:ee,module:te,exports:te.exports,fetch:C,__dirname:E,__filename:T},a,ne);await NV(u,p,a),s.getDidCallProcessExit()?ie=s.getExitCode():await PV(u),delete O.__slicc_compileWasm,u.dispose(),t.postMessage({type:`realm-done`,stdout:n.join(``),stderr:r.join(``),exitCode:ie})}async function NV(e,t,n){let r=t.getMutations();if(r.created.length||r.modified.length||r.deleted.length)try{await e.call(`vfs`,`flushWrites`,[r])}catch(e){let t=e instanceof Error?e.message:String(e);n(`[sync-fs] ERROR: flush failed — ${r.created.length+r.modified.length} write(s) + ${r.deleted.length} delete(s) were NOT persisted: ${t}\n`)}}async function PV(e){let t=Date.now()+1e3,n=0;do await new Promise(e=>setTimeout(e,0)),n++;while(e.pendingCount>0&&n<50&&Date.now()<t)}function FV(){let e=new Set,t=new Set;return{realmSide:{postMessage:e=>{queueMicrotask(()=>{for(let n of[...t])n({data:e})})},addEventListener:(t,n)=>{e.add(n)},removeEventListener:(t,n)=>{e.delete(n)}},hostSide:{postMessage:t=>{queueMicrotask(()=>{for(let n of[...e])n({data:t})})},addEventListener:(e,n)=>{t.add(n)},removeEventListener:(e,n)=>{t.delete(n)}}}}function IV(){return async({kind:e})=>{if(e!==`js`)throw Error(`createInProcessJsRealmFactory: only kind:js is supported`);let{realmSide:t,hostSide:n}=FV(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`js`&&MV(n,t).catch(e=>{let n={type:`realm-error`,message:e instanceof Error?e.message:String(e)};t.postMessage(n)})};return t.addEventListener(`message`,r),{controlPort:n,terminate(){t.removeEventListener(`message`,r)}}}}function LV(){return async({kind:e})=>{if(e!==`py`)throw Error(`createInProcessPyRealmFactory: only kind:py is supported`);let{realmSide:t,hostSide:n}=FV(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`py`&&XM(n,t).catch(e=>{let n={type:`realm-error`,message:e instanceof Error?e.message:String(e)};t.postMessage(n)})};return t.addEventListener(`message`,r),{controlPort:n,terminate(){t.removeEventListener(`message`,r)}}}}const RV=IV(),zV=LV();function BV(){return async({kind:e,ctx:t})=>e===`py`?typeof Worker<`u`?HV():zV({kind:e,ctx:t}):typeof Worker<`u`?VV():RV({kind:e,ctx:t})}function VV(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return UV(new Worker(new URL(`/assets/js-realm-worker-DwuJm0N-.js`,``+import.meta.url),{type:`module`}))}function HV(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return UV(new Worker(new URL(`/assets/py-realm-worker-D1gqcTkl.js`,``+import.meta.url),{type:`module`}))}function UV(e){let t={postMessage:(t,n)=>n?e.postMessage(t,n):e.postMessage(t),addEventListener:(t,n)=>e.addEventListener(t,n),removeEventListener:(t,n)=>e.removeEventListener(t,n)},n=!1;return{controlPort:t,isolatedThread:!0,addEventListener:(t,n,r)=>e.addEventListener(t,n,r),removeEventListener:(t,n)=>e.removeEventListener(t,n),terminate(){if(!n){n=!0;try{e.terminate()}catch{}}}}}function WV(){if(Ji())return decodeURIComponent(Bi(`pyodide/pyodide.mjs`,`../../../../../node_modules/pyodide/`).pathname)}function GV(e){let t=e.startsWith(`/`)?e:`/${e}`;return new URL(`file://${t}`).href}function KV(e){return e instanceof Error?e.message:String(e)}function qV(e){return`${(e&&e.length>0?e:`[eval]`).replace(/\.[^./]+$/,``)}.js`}async function JV(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:qV(n),supported:{"dynamic-import":!1},define:{"import.meta.url":JSON.stringify(r)}})).code}async function YV(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:qV(n),supported:{"dynamic-import":!1},...r?{define:{"import.meta.url":JSON.stringify(r)}}:{}})).code}const XV=/\bimport\s*\.\s*meta\s*\.\s*url\b/g,ZV=/\bimport\s*\.\s*meta\b/g;function QV(e,t){let n=JSON.stringify(t);return e.replace(XV,n).replace(ZV,`({ url: ${n} })`)}async function $V(e,t,n,r){let i=await e();return i.transpileModule(QV(t,r),{compilerOptions:{module:i.ModuleKind.CommonJS,target:i.ScriptTarget.ES2020,esModuleInterop:!0},fileName:`${n.replace(/\.[^./]+$/,``)}.ts`}).outputText}function eH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>Ri(t));return async({source:e,path:t,kind:i})=>{if(i!==`esm`||!$i(e))return e;let a=GV(t),o;try{return await JV(n,e,t,a)}catch(e){o=e}try{return await $V(r,e,t,a)}catch(e){throw Error(`Failed to transpile ESM module '${t}': ${KV(o)}; typescript fallback: ${KV(e)}`)}}}function tH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>Ri(t));return async({source:e,filename:t})=>{if(!$i(e)&&!Ii(e))return e;let i=typeof t==`string`&&t.startsWith(`/`),a=i?GV(t):void 0,o=i?t:`[eval].js`,s;try{return await YV(n,e,t,a)}catch(e){s=e}try{return await $V(r,e,o,a??``)}catch(e){throw Error(`Failed to transpile entry source: ${KV(s)}; typescript fallback: ${KV(e)}`)}}}function nH(e){if(!e.startsWith(`#!`))return e;let t=e.indexOf(`
|
|
1646
|
+
`),r}async function s(t){if(typeof t!=`string`||!t.trim())throw TypeError(`skill.token(providerId): providerId must be a non-empty string`);let n=`oauth-token ${NB(t)}`,{stdout:r,stderr:i,exitCode:a}=await e.exec(n);if(a!==0){let e=i.trim()||`oauth-token exited with code ${a}`;throw Error(`skill.token('${t}'): ${e}`)}return r.replace(/\r?\n+$/,``)}return Object.freeze({dir:t,refs:n,assets:r,config:o,token:s})}const IB=new Map,LB=new Map;function RB(e){let t=crypto.randomUUID();return IB.set(t,e),t}function zB(e){return IB.get(e)??null}function BB(e,t){if(!IB.has(e))return t.abort(),()=>{};let n=LB.get(e);return n||(n=new Set,LB.set(e,n)),n.add(t),()=>{let n=LB.get(e);n&&(n.delete(t),n.size===0&&LB.delete(e))}}function VB(e){IB.delete(e);let t=LB.get(e);if(t){LB.delete(e);for(let e of t)e.signal.aborted||e.abort()}}function HB(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return typeof n==`string`&&/^E[A-Z]+$/.test(n)?{ok:!1,errno:n,message:t}:{ok:!1,errno:`EIO`,message:t}}async function UB(e){let t=zB(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-fs: unknown or revoked token`};let{fs:n,cwd:r}=t;try{let t=n.resolvePath(r,e.path);switch(e.op){case`read`:return{ok:!0,kind:`bytes`,bytes:await n.readFileBuffer(t)};case`write`:return await n.writeFile(t,e.body??new Uint8Array),{ok:!0,kind:`void`};case`exists`:return{ok:!0,kind:`json`,json:await n.exists(t)};case`stat`:{let e=await n.stat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink,size:e.size}}}case`lstat`:{let e=await n.lstat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink??!1,size:e.size}}}case`readdir`:return{ok:!0,kind:`json`,json:await n.readdir(t)};case`mkdir`:return await n.mkdir(t,{recursive:!0}),{ok:!0,kind:`void`};case`rm`:return await n.rm(t,{recursive:!0}),{ok:!0,kind:`void`};case`rename`:{let i=n.resolvePath(r,e.arg2??``),a=n;if(a.rename)await a.rename(t,i);else if(a.mv)await a.mv(t,i);else{let e=await n.readFileBuffer(t);await n.writeFile(i,e),await n.rm(t,{recursive:!0})}return{ok:!0,kind:`void`}}default:return{ok:!1,errno:`EINVAL`,message:`sync-fs: unknown op '${e.op}'`}}}catch(e){return HB(e)}}function WB(e){return`slicc-sync-fs-`+e}const GB=`sync-fs-ack`,KB=`sync-fs-res`,qB=6e5,JB=5e3,YB=`exec`;function XB(e){return e.channel===YB}function ZB(e){let{command:t}=e;if(Array.isArray(t)){if(t.length===0||!t.every(e=>typeof e==`string`))return{errno:`EINVAL`,message:`sync-exec: argv must be a non-empty string[]`};let[e,...n]=t;return{cmd:e,args:n}}return typeof t!=`string`||t.length===0?{errno:`EINVAL`,message:`sync-exec: command must be a non-empty string`}:e.args===void 0?{cmd:t}:!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`)?{errno:`EINVAL`,message:`sync-exec: args must be a string[]`}:{cmd:t,args:e.args}}function QB(e,t){return Math.min(typeof e!=`number`||!Number.isFinite(e)||e<=0?t:e,qB)}async function $B(e){let t=zB(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-exec: unknown or revoked token`};if(!t.exec)return{ok:!1,errno:`ENOSYS`,message:`sync-exec: exec is not available`};let n=ZB(e);if(`errno`in n)return{ok:!1,errno:n.errno,message:n.message};let r=new AbortController,i=!1,a=setTimeout(()=>{i=!0,r.abort()},QB(e.timeoutMs,qB)),o=BB(e.token,r);try{let i=await t.exec(n.cmd,{cwd:t.cwd,signal:r.signal,...n.args===void 0?{}:{args:n.args},...e.stdin===void 0?{}:{stdin:e.stdin}});return{ok:!0,kind:`json`,json:{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}catch(e){return i?{ok:!1,errno:`ETIMEDOUT`,message:`sync-exec: timed out — ${e instanceof Error?e.message:String(e)}`}:r.signal.aborted?{ok:!1,errno:`ECANCELED`,message:`sync-exec: realm disposed`}:HB(e)}finally{clearTimeout(a),o()}}function eV(e,t){return Object.assign(Error(`${e}: ${t}`),{code:e})}function tV(e){let t=rV(e);if(iV(t))return new Uint8Array(t.response);if(t.status>=200&&t.status<300)throw eV(`EIO`,e.label);aV(t,e.label)}function nV(e){let t=tV(e);try{return JSON.parse(new TextDecoder().decode(t))}catch{throw eV(`EIO`,e.label)}}function rV(e){let t=new XMLHttpRequest;try{t.open(e.method,e.url,!1),t.responseType=`arraybuffer`,t.timeout=e.timeoutMs,t.setRequestHeader(`x-slicc-fs-token`,e.token),e.body?t.send(new Uint8Array(e.body)):t.send()}catch{throw eV(`EIO`,e.label)}return t}function iV(e){return e.status>=200&&e.status<300&&e.getResponseHeader(`x-slicc-fs`)===`1`}function aV(e,t){throw eV(e.getResponseHeader(`x-slicc-fs`)===`1`&&e.getResponseHeader(`x-slicc-fs-errno`)||`EIO`,t)}function oV(e){return(t,n,r)=>{let i=nV({method:`POST`,url:`/__slicc/exec-sync`,token:e,body:new TextEncoder().encode(JSON.stringify({...t,channel:YB})),timeoutMs:n+JB,label:r});if(!i||typeof i.stdout!=`string`||typeof i.stderr!=`string`||typeof i.exitCode!=`number`)throw eV(`EIO`,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}function sV(e,t){let n=e.getMutations();for(let e of n.deleted)t.rm(e);for(let e of n.created)e.isDirectory?t.mkdir(e.path):t.writeFile(e.path,e.content);for(let e of n.modified)t.writeFile(e.path,e.content);e.resetBaseline()}function cV(e,t={}){let n=t.timeoutMs??12e4,{syncFs:r,fsBridge:i}=t,a=t.transport??oV(e);return{run(e,t={}){let o=r?.wasUsed()===!0&&i!==void 0;o&&sV(r,i);let s=`sync-exec bridge, '${Array.isArray(e)?e.join(` `):e}'`,c=QB(t.timeout,n),l={command:e,...t.args===void 0?{}:{args:t.args},...t.input===void 0?{}:{stdin:t.input},timeoutMs:c};try{return a(l,c,s)}finally{o&&r.invalidate()}}}}function lV(e,t){return eV(e,`sync-fs bridge, '${t}'`)}function uV(e,t){let n=`/__slicc/fs-sync`+(e.startsWith(`/`)?e:`/${e}`).split(`/`).map(encodeURIComponent).join(`/`);return t?`${n}?op=${t}`:n}function dV(e,t={}){let n=t.timeoutMs??3e4;function r(t,r,i,a){return{method:t,url:uV(r,a),token:e,...i?{body:i}:{},timeoutMs:n,label:`sync-fs bridge, '${r}'`}}return{readFile(e){return tV(r(`GET`,e))},writeFile(e,t){tV(r(`POST`,e,t))},stat(e){let t=nV(r(`GET`,e,void 0,`stat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw lV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},lstat(e){let t=nV(r(`GET`,e,void 0,`lstat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw lV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},readdir(e){let t=nV(r(`GET`,e,void 0,`readdir`));if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw lV(`EIO`,e);return t},exists(e){let t=nV(r(`GET`,e,void 0,`exists`));if(typeof t!=`boolean`)throw lV(`EIO`,e);return t},mkdir(e){tV(r(`POST`,e,void 0,`mkdir`))},rm(e){tV(r(`POST`,e,void 0,`rm`))}}}const fV=new TextEncoder,pV=new TextDecoder;function mV(e){if(!e.ok)return{status:4,payload:fV.encode(JSON.stringify({errno:e.errno,message:e.message}))};switch(e.kind){case`bytes`:return{status:1,payload:e.bytes};case`json`:return{status:2,payload:fV.encode(JSON.stringify(e.json))};default:return{status:3,payload:new Uint8Array}}}function hV(e,t){switch(e){case 1:return{ok:!0,kind:`bytes`,bytes:t};case 3:return{ok:!0,kind:`void`};case 2:try{return{ok:!0,kind:`json`,json:JSON.parse(pV.decode(t))}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed json payload`}}case 4:try{let e=JSON.parse(pV.decode(t)),n=typeof e.errno==`string`&&/^E[A-Z]+$/.test(e.errno)?e.errno:`EIO`;return{ok:!1,errno:n,message:String(e.message??n)}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed errno payload`}}default:return{ok:!1,errno:`EIO`,message:`sync-sab: unknown status ${e}`}}}function gV(e){if(e.byteLength<4160)throw Error(`sync-sab: buffer too small (${e.byteLength} < 4160)`);return{header:new Int32Array(e,0,16),window:new Uint8Array(e,64)}}function _V(){if(typeof SharedArrayBuffer>`u`||typeof Atomics>`u`)return!1;let e=globalThis.crossOriginIsolated;return e===void 0||e===!0}function vV(e,t,n={}){let{header:r,window:i}=gV(e),a=n.wait??((e,t,n,r)=>Atomics.wait(e,t,n,r)),o=n.now??(()=>performance.now()),s=0;function c(e,t,n){for(;;){let i=t-o();if(i<=0)throw eV(`ETIMEDOUT`,n);if(a(r,0,1,i),Atomics.load(r,0)===2&&Atomics.load(r,1)===e)return;Atomics.load(r,0)===2&&Atomics.store(r,0,1)}}return{call(e,n,a){let l=++s,u=o()+n,d=null,f=0,p=0;try{for(;;){Atomics.store(r,0,1);let n=p===0?{type:`sync-sab-req`,id:l,req:e}:{type:`sync-sab-next`,id:l,offset:p};try{t.postMessage(n)}catch{throw eV(`EIO`,a)}c(l,u,a);let o=Atomics.load(r,3),s=Atomics.load(r,4);if(Atomics.load(r,5)!==p||s<0||o<0||p+s>o)throw eV(`EIO`,a);if(d===null&&(f=Atomics.load(r,2),d=new Uint8Array(o)),d.set(i.subarray(0,s),p),p+=s,p>=o)break;if(s===0)throw eV(`EIO`,a)}}finally{Atomics.store(r,0,0)}return hV(f,d)}}}function yV(e,t){return eV(e,`sync-sab bridge, '${t}'`)}function bV(e){let t=e;return!!t&&typeof t.isFile==`boolean`&&typeof t.isDirectory==`boolean`&&typeof t.size==`number`}function xV(e,t={}){let n=t.timeoutMs??25e3;function r(t,r){let i=e.call(t,n,`sync-sab bridge, '${r}'`);if(!i.ok)throw yV(i.errno,r);return i}function i(e,t){let n=r(e,t);if(n.ok&&n.kind===`bytes`)return n.bytes;throw yV(`EIO`,t)}function a(e,t){let n=r(e,t);if(n.ok&&n.kind===`json`)return n.json;throw yV(`EIO`,t)}return{readFile:e=>i({op:`read`,path:e},e),writeFile:(e,t)=>{r({op:`write`,path:e,body:t},e)},stat:e=>{let t=a({op:`stat`,path:e},e);if(!bV(t))throw yV(`EIO`,e);return t},lstat:e=>{let t=a({op:`lstat`,path:e},e);if(!bV(t))throw yV(`EIO`,e);return t},readdir:e=>{let t=a({op:`readdir`,path:e},e);if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw yV(`EIO`,e);return t},exists:e=>{let t=a({op:`exists`,path:e},e);if(typeof t!=`boolean`)throw yV(`EIO`,e);return t},mkdir:e=>{r({op:`mkdir`,path:e},e)},rm:e=>{r({op:`rm`,path:e},e)}}}function SV(e){return(t,n,r)=>{let i=e.call({...t,channel:YB},n+JB,r);if(!i.ok)throw eV(i.errno,r);let a=i.kind===`json`?i.json:null;if(!a||typeof a.stdout!=`string`||typeof a.stderr!=`string`||typeof a.exitCode!=`number`)throw eV(`EIO`,r);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}}async function CV(e,t,n){let r;try{r=await e.call(`vfs`,`snapshot`,[t])}catch(e){n?.(e instanceof Error?e.message:String(e)),r={entries:[]}}return new ON(r)}function wV(e,t){if(e.syncFsToken)return e=>t(`[sync-fs] snapshot failed, sync metadata will be incomplete: ${e}\n`)}function TV(e,t){return t?xV(t):e.syncFsToken?dV(e.syncFsToken):void 0}function EV(e,t){if(!(!e.syncSab||typeof Atomics>`u`||typeof Atomics.wait!=`function`))return vV(e.syncSab,t)}function DV(e,t,n,r,i){let a=EV(e,t),o=TV(e,a);if(Object.assign(r,JN(n,e.cwd,o,i)),e.syncFsToken)return cV(e.syncFsToken,{syncFs:n,...o?{fsBridge:o}:{},...a?{transport:SV(a)}:{}})}function OV(e=globalThis){Object.prototype.hasOwnProperty.call(e,`SLICC_VERSION`)||Object.defineProperty(e,"SLICC_VERSION",{value:sr().version,writable:!1,enumerable:!1,configurable:!1})}function kV(e,t,n){let r=ZN({isTTY:!e,noColor:e});return{colorApi:r,cliApi:YN({writeStdout:t,writeStderr:n,exit:e=>{throw new yz(e)},color:r})}}function AV(e,t,n){return{readStdinBytes:()=>AN(e.stdin??``),writeStdout:t,writeStderr:n}}function jV(e){return{usbBridge:jB(e),serialBridge:kB(e),hidBridge:aB(e)}}async function MV(e,t){let n=[],r=[],i=e=>{n.push(typeof e==`string`?e:String(e))},a=e=>{r.push(typeof e==`string`?e:String(e))},o=xz(i,a),s=Sz(e,i,a),{colorApi:c,cliApi:l}=kV(!!e.env?.NO_COLOR,i,a),u=new zM(t),d=AV(e,i,a),f=HN(u,C,d),p=await CV(u,e.cwd,wV(e,a)),m=DV(e,t,p,f,d),h=eB(u,p,e.cwd,a),g=Uz(h,{cwd:e.cwd}),_=FB({argv:e.argv,fs:f,exec:h}),v=Yz(u),{usbBridge:y,serialBridge:b,hidBridge:x}=jV(u),S=Bz({fetch:C});async function C(e,t){let n=e instanceof Request?e.url:e instanceof URL?e.toString():String(e),r=await u.call(`fetch`,`request`,[n,await Kz(t,e)]),i=r.body.byteLength===0?null:r.body.buffer.slice(r.body.byteOffset,r.body.byteOffset+r.body.byteLength),a=new Response(i,{status:r.status,statusText:r.statusText,headers:r.headers});return Object.defineProperty(a,"url",{value:r.url||n}),a}let w=hB({exec:h,agent:g,skill:_,http:S,browser:v,usb:y,serial:b,hid:x,cli:l,color:c}),T=e.filename,E=vz(T),D=await vB(u,e.code,e.cwd,T),ee=xB({graph:D,fsBridge:f,processShim:s.processShim,childProcess:QP(h,m),nodeConsole:o,sliccyModules:w,shimmedPackages:bB(u),nodeReadline:Az({output:{write:i},onExit:s.recordExit})}).require,te={exports:{},filename:e.filename},ne=D.entrySource!==void 0,re=D.entrySource??e.code,O=globalThis;OV(),O.__slicc_compileWasm=e=>u.call(`wasm`,`compile`,[e]);let ie=await DB(re,{process:s.processShim,console:o,require:ee,module:te,exports:te.exports,fetch:C,__dirname:E,__filename:T},a,ne);await NV(u,p,a),s.getDidCallProcessExit()?ie=s.getExitCode():await PV(u),delete O.__slicc_compileWasm,u.dispose(),t.postMessage({type:`realm-done`,stdout:n.join(``),stderr:r.join(``),exitCode:ie})}async function NV(e,t,n){let r=t.getMutations();if(r.created.length||r.modified.length||r.deleted.length)try{await e.call(`vfs`,`flushWrites`,[r])}catch(e){let t=e instanceof Error?e.message:String(e);n(`[sync-fs] ERROR: flush failed — ${r.created.length+r.modified.length} write(s) + ${r.deleted.length} delete(s) were NOT persisted: ${t}\n`)}}async function PV(e){let t=Date.now()+1e3,n=0;do await new Promise(e=>setTimeout(e,0)),n++;while(e.pendingCount>0&&n<50&&Date.now()<t)}function FV(){let e=new Set,t=new Set;return{realmSide:{postMessage:e=>{queueMicrotask(()=>{for(let n of[...t])n({data:e})})},addEventListener:(t,n)=>{e.add(n)},removeEventListener:(t,n)=>{e.delete(n)}},hostSide:{postMessage:t=>{queueMicrotask(()=>{for(let n of[...e])n({data:t})})},addEventListener:(e,n)=>{t.add(n)},removeEventListener:(e,n)=>{t.delete(n)}}}}function IV(){return async({kind:e})=>{if(e!==`js`)throw Error(`createInProcessJsRealmFactory: only kind:js is supported`);let{realmSide:t,hostSide:n}=FV(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`js`&&MV(n,t).catch(e=>{let n={type:`realm-error`,message:e instanceof Error?e.message:String(e)};t.postMessage(n)})};return t.addEventListener(`message`,r),{controlPort:n,terminate(){t.removeEventListener(`message`,r)}}}}function LV(){return async({kind:e})=>{if(e!==`py`)throw Error(`createInProcessPyRealmFactory: only kind:py is supported`);let{realmSide:t,hostSide:n}=FV(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`py`&&XM(n,t).catch(e=>{let n={type:`realm-error`,message:e instanceof Error?e.message:String(e)};t.postMessage(n)})};return t.addEventListener(`message`,r),{controlPort:n,terminate(){t.removeEventListener(`message`,r)}}}}const RV=IV(),zV=LV();function BV(){return async({kind:e,ctx:t})=>e===`py`?typeof Worker<`u`?HV():zV({kind:e,ctx:t}):typeof Worker<`u`?VV():RV({kind:e,ctx:t})}function VV(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return UV(new Worker(new URL(`/assets/js-realm-worker-4r4THCXO.js`,``+import.meta.url),{type:`module`}))}function HV(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return UV(new Worker(new URL(`/assets/py-realm-worker-D1gqcTkl.js`,``+import.meta.url),{type:`module`}))}function UV(e){let t={postMessage:(t,n)=>n?e.postMessage(t,n):e.postMessage(t),addEventListener:(t,n)=>e.addEventListener(t,n),removeEventListener:(t,n)=>e.removeEventListener(t,n)},n=!1;return{controlPort:t,isolatedThread:!0,addEventListener:(t,n,r)=>e.addEventListener(t,n,r),removeEventListener:(t,n)=>e.removeEventListener(t,n),terminate(){if(!n){n=!0;try{e.terminate()}catch{}}}}}function WV(){if(Ji())return decodeURIComponent(Bi(`pyodide/pyodide.mjs`,`../../../../../node_modules/pyodide/`).pathname)}function GV(e){let t=e.startsWith(`/`)?e:`/${e}`;return new URL(`file://${t}`).href}function KV(e){return e instanceof Error?e.message:String(e)}function qV(e){return`${(e&&e.length>0?e:`[eval]`).replace(/\.[^./]+$/,``)}.js`}async function JV(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:qV(n),supported:{"dynamic-import":!1},define:{"import.meta.url":JSON.stringify(r)}})).code}async function YV(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:qV(n),supported:{"dynamic-import":!1},...r?{define:{"import.meta.url":JSON.stringify(r)}}:{}})).code}const XV=/\bimport\s*\.\s*meta\s*\.\s*url\b/g,ZV=/\bimport\s*\.\s*meta\b/g;function QV(e,t){let n=JSON.stringify(t);return e.replace(XV,n).replace(ZV,`({ url: ${n} })`)}async function $V(e,t,n,r){let i=await e();return i.transpileModule(QV(t,r),{compilerOptions:{module:i.ModuleKind.CommonJS,target:i.ScriptTarget.ES2020,esModuleInterop:!0},fileName:`${n.replace(/\.[^./]+$/,``)}.ts`}).outputText}function eH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>Ri(t));return async({source:e,path:t,kind:i})=>{if(i!==`esm`||!$i(e))return e;let a=GV(t),o;try{return await JV(n,e,t,a)}catch(e){o=e}try{return await $V(r,e,t,a)}catch(e){throw Error(`Failed to transpile ESM module '${t}': ${KV(o)}; typescript fallback: ${KV(e)}`)}}}function tH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>Ri(t));return async({source:e,filename:t})=>{if(!$i(e)&&!Ii(e))return e;let i=typeof t==`string`&&t.startsWith(`/`),a=i?GV(t):void 0,o=i?t:`[eval].js`,s;try{return await YV(n,e,t,a)}catch(e){s=e}try{return await $V(r,e,o,a??``)}catch(e){throw Error(`Failed to transpile entry source: ${KV(s)}; typescript fallback: ${KV(e)}`)}}}function nH(e){if(!e.startsWith(`#!`))return e;let t=e.indexOf(`
|
|
1647
1647
|
`);return t===-1?``:e.slice(t+1)}function rH(e){return he(e).dir}const iH=[`node`,`require`,`default`],aH=[`node`,`import`,`default`],oH=/\brequire\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,sH=/\bimport\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,cH=/(?:^|[;\n}])\s*import\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,lH=/(?:^|[;\n}])\s*export\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,uH=/(?:^|[;\n}])\s*import\s*(['"])([^'"]+)\1/g;function dH(e,t,n){let r=t[0].indexOf(n);return r<0?!1:e.startsWith(n,t.index+r)}function fH(e){let t=Yee(e),n=new Map,r=(r,i,a)=>{r.lastIndex=0;let o;for(;(o=r.exec(e))!==null;){if(!dH(t,o,a))continue;let e=o[2];n.get(e)!==`import`&&n.set(e,i)}};return r(oH,`require`,`require`),r(sH,`import`,`import`),r(cH,`import`,`import`),r(lH,`import`,`export`),r(uH,`import`,`import`),[...n].map(([e,t])=>({specifier:e,kind:t}))}async function pH(e,t,n,r){if(n===`json`)return`module.exports = JSON.parse(${JSON.stringify(e)});\n`;let i=nH(e);if(n===`esm`){if(!r)throw Error(`Cannot load ESM module '${t}': no transpile hook configured (run: ${Zi} esbuild-wasm)`);return await r({source:i,path:t,kind:n})}return i}async function mH(e){let{entrySpecifiers:t,fromDir:n,reader:r,conditions:i,transpile:a}=e,o=e.requireConditions??iH,s=e.importConditions??aH,c=i??o,l=new Map,u=[],d={};async function f(e,t){if(l.has(e))return;let n=await r.readFile(e),i=await pH(n,e,t,a);l.set(e,{path:e,source:n,cjsSource:i,kind:t});let c=rH(e),p={};for(let{specifier:t,kind:i}of fH(n)){let n;try{n=await Qi(t,c,r,{conditions:i===`import`?s:o})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`While loading '${e}': ${n}`)}n.type===`file`&&(p[t]=n.path,await f(n.path,n.moduleKind))}d[e]=p,u.push(e)}let p={};for(let e of t){let t=await Qi(e,n,r,{conditions:c});t.type===`file`&&(p[e]=t.path,await f(t.path,t.moduleKind))}return{files:u.map(e=>{let t=l.get(e);if(!t)throw Error(`module-loader: missing built module for '${e}'`);return t}),entryMap:p,edges:d}}function hH(e){return!(e.startsWith(`sliccy:`)||e.startsWith(`node:`)||Pi.has(e)||fB.has(e))}async function gH(e){let{entryCode:t,fromDir:n,entryFilename:r,reader:i,transpile:a,transpileEntry:o}=e,s=new Map,c=[],l={},u={},d={};for(let{specifier:e,kind:r}of fH(t))if(hH(e))try{let t=await mH({entrySpecifiers:[e],fromDir:n,reader:i,transpile:a,conditions:r===`import`?aH:iH,requireConditions:iH,importConditions:aH});for(let e of t.files)s.has(e.path)||(s.set(e.path,e),c.push(e.path));Object.assign(l,t.entryMap);for(let[e,n]of Object.entries(t.edges))u[e]={...u[e]??{},...n}}catch(t){d[e]=t instanceof Error?t.message:String(t)}let f;o&&($i(t)||Ii(t))&&(f=await o({source:t,filename:r??`[eval]`,fromDir:n}));let p={files:c.map(e=>{let t=s.get(e);if(!t)throw Error(`module-loader: missing built module for '${e}'`);return{path:t.path,cjsSource:t.cjsSource,kind:t.kind}}),entryMap:l,edges:u,errors:d};return f!==void 0&&(p.entrySource=f),p}function _H(){return globalThis.navigator?.hid??null}function vH(e){let t=e.collections?.[0];return t?`${t.usagePage??``}:${t.usage??``}`:``}function yH(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.productName??``)===(t.productName??``)&&vH(e)===vH(t)&&!!e.productName}var bH=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(yH(n,e))return this.byHandle.set(t,e),t;let t=`hid${++this.counter}`;return this.byHandle.set(t,e),t}get(e){return this.byHandle.get(e)}remove(e){return this.byHandle.delete(e)}list(){return[...this.byHandle].map(([e,t])=>({handle:e,device:t}))}};let xH=null;function SH(){return xH||=new bH,xH}const CH=4194304;function wH(e,t){let n=t.collections?.[0];return{handle:e,vendorId:t.vendorId,productId:t.productId,...t.productName?{productName:t.productName}:{},...n?.usagePage===void 0?{}:{usagePage:n.usagePage},...n?.usage===void 0?{}:{usage:n.usage},opened:t.opened}}function TH(e,t){let n=e.get(t);if(!n)throw Error(`unknown hid handle '${t}'`);return n}async function EH(e){e.opened||await e.open()}function DH(e,t){if(e>4194304)throw Error(`${t} exceeds the ${CH}-byte (4 MiB) v1 limit`)}function OH(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),t}async function kH(e,t){return(await t.getDevices()).map(t=>wH(e.register(t),t))}async function AH(e,t,n){let r=await t.requestDevice({filters:n});if(r.length===0)throw Error(`No device selected.`);return r.map(t=>wH(e.register(t),t))}function jH(e,t){return wH(t,TH(e,t))}async function MH(e,t){await TH(e,t).open()}async function NH(e,t){await TH(e,t).close()}async function PH(e,t,n,r){DH(r.byteLength,`send report payload`);let i=TH(e,t);await EH(i),await i.sendReport(n,r)}async function FH(e,t,n,r){DH(r.byteLength,`send feature report payload`);let i=TH(e,t);await EH(i),await i.sendFeatureReport(n,r)}async function IH(e,t,n){let r=TH(e,t);return await EH(r),{reportId:n,bytes:OH(await r.receiveFeatureReport(n))}}async function LH(e,t,n){let r=TH(e,t);await EH(r);let i=e=>{n({reportId:e.reportId,bytes:OH(e.data)})};return r.addEventListener(`inputreport`,i),()=>r.removeEventListener(`inputreport`,i)}const RH=6e4;function zH(){return jn()}function BH(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),RH);An(`hid-device`,e??[],void 0,{timeoutMs:RH}).then(e=>{let t=e;t.cancelled?r({cancelled:!0}):typeof t.error==`string`?r({error:t.error}):t.granted&&t.info?r({granted:!0,info:t.info}):r({error:`hid picker returned an unexpected response`})}).catch(e=>{r({error:e instanceof Error?e.message:`Failed to open HID picker`})})})}function VH(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var HH=class{registry;constructor(e){this.registry=e}hid(){let e=_H();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}list(){return kH(this.registry,this.hid())}async request(e){if(zH()){let t=await BH(e);if(`cancelled`in t)throw Error(`user cancelled the HID picker`);if(`error`in t)throw Error(t.error);let n=await this.reacquireAll(t.info);if(n.length===0)throw Error(`granted device could not be re-acquired`);return n.map(e=>wH(this.registry.register(e),e))}return AH(this.registry,this.hid(),e)}async reacquireAll(e){return(await this.hid().getDevices()).filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId)}info(e){return Promise.resolve(jH(this.registry,e))}open(e){return MH(this.registry,e)}close(e){return NH(this.registry,e)}sendReport(e,t,n){return PH(this.registry,e,t,VH(n))}sendFeatureReport(e,t,n){return FH(this.registry,e,t,VH(n))}async receiveFeatureReport(e,t){let n=await IH(this.registry,e,t);return{reportId:n.reportId,bytes:new Uint8Array(n.bytes)}}async subscribeInputReports(e,t){return LH(this.registry,e,e=>t({reportId:e.reportId,bytes:new Uint8Array(e.bytes)}))}},UH=class e{rpc;constructor(e){this.rpc=e}static REQUEST_TIMEOUT_MS=3e5;async list(){return(await this.rpc.call(`hid-list`,void 0)).devices}async request(t){return(await this.rpc.call(`hid-request`,{filters:t},{timeoutMs:e.REQUEST_TIMEOUT_MS})).devices}async info(e){return(await this.rpc.call(`hid-device-info`,{handle:e})).device}async open(e){await this.rpc.call(`hid-open`,{handle:e})}async close(e){await this.rpc.call(`hid-close`,{handle:e})}async sendReport(e,t,n){await this.rpc.call(`hid-send-report`,{handle:e,reportId:t,bytes:VH(n)})}async sendFeatureReport(e,t,n){await this.rpc.call(`hid-send-feature-report`,{handle:e,reportId:t,bytes:VH(n)})}async receiveFeatureReport(e,t){let n=await this.rpc.call(`hid-receive-feature-report`,{handle:e,reportId:t});return{reportId:n.reportId,bytes:new Uint8Array(n.bytes)}}async subscribeInputReports(e,t){let n=this.rpc.onEvent(`hid-input-report`,n=>{let r=n;!r||r.handle!==e||t({reportId:r.reportId,bytes:new Uint8Array(r.bytes)})});try{await this.rpc.call(`hid-subscribe-input-reports`,{handle:e})}catch(e){throw n(),e}return async()=>{n();try{await this.rpc.call(`hid-unsubscribe-input-reports`,{handle:e})}catch{}}}};function WH(e,t){return e&&_H()?new HH(SH()):t?new UH(t):null}function GH(e){return async function(t,n){let r=t instanceof Request?t:null,i=KH(t),a=(n?.method??r?.method??`GET`).toUpperCase(),o=JH(r?.headers,n?.headers),s=await ZH(n,r,a,o);s.defaultContentType&&!YH(o,`content-type`)&&(o[`Content-Type`]=s.defaultContentType);let c=await e(i,{method:a,headers:o,body:s.body}),l=new Headers;for(let[e,t]of Object.entries(c.headers))try{l.set(e,t)}catch{}let u=c.status===204||c.status===205||c.status===304||!c.body||c.body.byteLength===0?null:c.body,d=new Response(u,{status:c.status,statusText:c.statusText,headers:l});try{Object.defineProperty(d,"url",{value:c.url||i,writable:!1,configurable:!0,enumerable:!1})}catch{}return d}}function KH(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function qH(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}if(Array.isArray(e)){let t={};for(let[n,r]of e)t[n]=r;return t}return{...e}}}function JH(e,t){let n={};e&&e.forEach((e,t)=>{n[t]=e});let r=qH(t);if(r)for(let[e,t]of Object.entries(r))n[e]=t;return n}function YH(e,t){return XH(e,t)!==void 0}function XH(e,t){let n=t.toLowerCase(),r;for(let[t,i]of Object.entries(e))t.toLowerCase()===n&&(r=i);return r}async function ZH(e,t,n,r){if(e&&`body`in e&&e.body!==void 0){let t=eU(e.body,n);return{body:await QH(e.body,n),defaultContentType:t}}if(t&&n!==`GET`&&n!==`HEAD`){let e=t.body!==null,n=new Uint8Array(await t.arrayBuffer()),i=XH(r,`content-type`)??``,a=e&&(!i||!_(i));return{body:n.byteLength===0?void 0:a?tU(n):new TextDecoder(`utf-8`).decode(n),defaultContentType:a?`application/octet-stream`:void 0}}return{}}async function QH(e,t){if(e!=null&&t!==`GET`&&t!==`HEAD`){if(typeof e==`string`)return e;if(e instanceof URLSearchParams)return e.toString();if(e instanceof Uint8Array)return tU(e);if(e instanceof ArrayBuffer)return tU(new Uint8Array(e));if(ArrayBuffer.isView(e)){let t=e;return tU(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}if(typeof Blob<`u`&&e instanceof Blob)return tU(new Uint8Array(await e.arrayBuffer()));throw typeof FormData<`u`&&e instanceof FormData?Error(`node fetch shim: FormData request bodies are not supported (post raw application/x-www-form-urlencoded with URLSearchParams instead)`):typeof ReadableStream<`u`&&e instanceof ReadableStream?Error(`node fetch shim: ReadableStream request bodies are not supported (collect into a Uint8Array or string before calling fetch)`):Error(`node fetch shim: unsupported request body type (${Object.prototype.toString.call(e)}); use a string, Uint8Array, ArrayBuffer, Blob, or URLSearchParams`)}}function $H(e){return e instanceof Uint8Array||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<`u`&&e instanceof Blob}function eU(e,t){if(e instanceof URLSearchParams)return`application/x-www-form-urlencoded;charset=UTF-8`;if(!(t===`GET`||t===`HEAD`||!$H(e)))return typeof Blob<`u`&&e instanceof Blob&&e.type?e.type:`application/octet-stream`}function tU(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t)n+=String.fromCharCode(...e.subarray(r,r+t));return n}function nU(){return globalThis.navigator?.serial??null}var rU=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(n.port===e)return t;let t=`serial${++this.counter}`;return this.byHandle.set(t,{port:e,opened:!1}),t}get(e){return this.byHandle.get(e)}remove(e){return this.byHandle.delete(e)}list(){return[...this.byHandle].map(([e,t])=>({handle:e,entry:t}))}retainOnly(e){let t=[];for(let[n,r]of[...this.byHandle])e.includes(r.port)||(this.byHandle.delete(n),t.push({handle:n,entry:r}));return t}};let iU=null;function aU(){return iU||=new rU,iU}const oU=4194304;function sU(e,t){let n=t.port.getInfo();return{handle:e,...n.usbVendorId===void 0?{}:{usbVendorId:n.usbVendorId},...n.usbProductId===void 0?{}:{usbProductId:n.usbProductId},opened:t.opened}}function cU(e,t){let n=e.get(t);if(!n)throw Error(`unknown serial handle '${t}'`);return n}function lU(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}function uU(e,t,n){if(t.length===0)return-1;outer:for(let r=Math.max(0,n);r+t.length<=e.length;r++){for(let n=0;n<t.length;n++)if(e[r+n]!==t[n])continue outer;return r}return-1}async function dU(e){if(e.reader){try{await e.reader.cancel()}catch{}try{e.reader.releaseLock()}catch{}e.reader=void 0}if(e.pendingRead=void 0,e.leftover=void 0,e.writer){try{e.writer.releaseLock()}catch{}e.writer=void 0}}async function fU(e){if(await dU(e),e.opened){try{await e.port.close()}catch{}e.opened=!1}}async function pU(e,t){let n=await t.getPorts();for(let{entry:t}of e.retainOnly(n))await fU(t);return n.map(t=>{let n=e.register(t);return sU(n,e.get(n))})}async function mU(e,t,n){let r=await t.requestPort(n.length?{filters:n}:{}),i=e.register(r);return sU(i,e.get(i))}function hU(e,t){return sU(t,cU(e,t))}async function gU(e,t,n){let r=cU(e,t);try{await r.port.open(n)}catch(e){throw Error(`${e instanceof Error?e.message:String(e)} (handle '${t}' may be stale after a device reset — re-run 'serial list' to pick up the current handle)`)}r.opened=!0}async function _U(e,t){let n=cU(e,t);await dU(n);try{await n.port.close()}catch(e){if(!vU(e))throw e}n.opened=!1}function vU(e){let t=e instanceof Error?e.message:String(e);return/already closed|not open/i.test(t)}function yU(e){if(!e.reader){if(!e.port.readable)throw Error(`serial port is not readable (is it open?)`);e.reader=e.port.readable.getReader()}return e.reader}function bU(e){if(!e.writer){if(!e.port.writable)throw Error(`serial port is not writable (is it open?)`);e.writer=e.port.writable.getWriter()}return e.writer}async function xU(e,t,n){let r=cU(e,t),i=Math.min(n.maxBytes??4194304,oU),a=n.until?.length?n.until:void 0,o=n.timeoutMs??1e3,s=Date.now()+Math.max(0,o),c=r.leftover??new Uint8Array;r.leftover=void 0;let l=0,u=()=>{if(a){let e=uU(c,a,Math.max(0,l-(a.length-1)));if(e>=0){let t=e+a.length;return r.leftover=c.slice(t),c.slice(0,t)}}return c.length>=i?(r.leftover=c.slice(i),c.slice(0,i)):null},d=u();if(d)return d;let f=yU(r);for(;Date.now()<s;){let e=s-Date.now(),t=r.pendingRead??f.read();r.pendingRead=t;let n,i=new Promise(t=>{n=setTimeout(()=>t(`__timeout`),e)}),a;try{a=await Promise.race([t,i])}finally{n&&clearTimeout(n)}if(a===`__timeout`)break;if(r.pendingRead=void 0,a.done){r.reader=void 0;break}if(a.value?.length){l=c.length,c=lU(c,a.value);let e=u();if(e)return e}}return c}async function SU(e,t,n){if(n.length>4194304)throw Error(`serial write payload exceeds the ${oU}-byte (4 MiB) v1 limit`);return await bU(cU(e,t)).write(n),n.length}async function CU(e,t){return cU(e,t).port.getSignals()}async function wU(e,t,n){await cU(e,t).port.setSignals(n)}const TU=6e4;function EU(){return jn()}function DU(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),TU);An(`serial-port`,e??[],void 0,{timeoutMs:TU}).then(e=>{let t=e;t.cancelled?r({cancelled:!0}):typeof t.error==`string`?r({error:t.error}):t.granted&&t.info?r({granted:!0,info:t.info}):r({error:`serial picker returned an unexpected response`})}).catch(e=>{r({error:e instanceof Error?e.message:`Failed to open serial picker`})})})}function OU(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var kU=class{registry;constructor(e){this.registry=e}serial(){let e=nU();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}list(){return pU(this.registry,this.serial())}async request(e){if(EU()){let t=await DU(e);if(`cancelled`in t)throw Error(`user cancelled the serial picker`);if(`error`in t)throw Error(t.error);let n=await this.reacquire(t.info);if(!n)throw Error(`granted port could not be re-acquired`);let r=this.registry.register(n);return sU(r,this.registry.get(r))}return mU(this.registry,this.serial(),e)}async reacquire(e){let t=await this.serial().getPorts(),n=t.filter(t=>{let n=t.getInfo();return!(e.usbVendorId!==void 0&&n.usbVendorId!==e.usbVendorId||e.usbProductId!==void 0&&n.usbProductId!==e.usbProductId)}),r=n.length?n:t,i=this.registry.list().map(e=>e.entry.port);return r.find(e=>!i.includes(e))??r[0]??null}info(e){return Promise.resolve(hU(this.registry,e))}open(e,t){return gU(this.registry,e,t)}close(e){return _U(this.registry,e)}read(e,t){return xU(this.registry,e,t)}write(e,t){return SU(this.registry,e,t)}getSignals(e){return CU(this.registry,e)}setSignals(e,t){return wU(this.registry,e,t)}},AU=class e{rpc;constructor(e){this.rpc=e}static REQUEST_TIMEOUT_MS=3e5;static READ_MARGIN_MS=3e4;async list(){return(await this.rpc.call(`serial-list`,void 0)).devices}async request(t){return(await this.rpc.call(`serial-request`,{filters:t},{timeoutMs:e.REQUEST_TIMEOUT_MS})).device}async info(e){return(await this.rpc.call(`serial-device-info`,{handle:e})).device}async open(e,t){await this.rpc.call(`serial-open`,{handle:e,options:t})}async close(e){await this.rpc.call(`serial-close`,{handle:e})}async read(t,n){let r=(n.timeoutMs??1e3)+e.READ_MARGIN_MS,i=await this.rpc.call(`serial-read`,{handle:t,maxBytes:n.maxBytes,until:n.until?OU(n.until):void 0,timeoutMs:n.timeoutMs},{timeoutMs:r});return new Uint8Array(i.bytes)}async write(e,t){return(await this.rpc.call(`serial-write`,{handle:e,bytes:OU(t)})).bytesWritten}async getSignals(e){return(await this.rpc.call(`serial-get-signals`,{handle:e})).signals}async setSignals(e,t){await this.rpc.call(`serial-set-signals`,{handle:e,signals:t})}};function jU(e,t){return e&&nU()?new kU(aU()):t?new AU(t):null}function MU(){return globalThis.navigator?.usb??null}function NU(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.serialNumber??``)===(t.serialNumber??``)&&!!e.serialNumber}var PU=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(NU(n,e))return this.byHandle.set(t,e),t;let t=`usb${++this.counter}`;return this.byHandle.set(t,e),t}get(e){return this.byHandle.get(e)}remove(e){return this.byHandle.delete(e)}list(){return[...this.byHandle].map(([e,t])=>({handle:e,device:t}))}};let FU=null;function IU(){return FU||=new PU,FU}const LU=4194304;function RU(e,t){return{handle:e,vendorId:t.vendorId,productId:t.productId,...t.productName?{productName:t.productName}:{},...t.manufacturerName?{manufacturerName:t.manufacturerName}:{},...t.serialNumber?{serialNumber:t.serialNumber}:{},opened:t.opened}}function zU(e,t){let n=e.get(t);if(!n)throw Error(`unknown usb handle '${t}'`);return n}function BU(e,t){if(e>4194304)throw Error(`${t} exceeds the ${LU}-byte (4 MiB) v1 limit`)}function VU(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}async function HU(e,t){return(await t.getDevices()).map(t=>RU(e.register(t),t))}async function UU(e,t,n){let r=await t.requestDevice({filters:n});return RU(e.register(r),r)}function WU(e,t){return RU(t,zU(e,t))}async function GU(e,t){await zU(e,t).open()}async function KU(e,t){await zU(e,t).close()}async function qU(e,t,n){await zU(e,t).selectConfiguration(n)}async function JU(e,t,n){await zU(e,t).claimInterface(n)}async function YU(e,t,n){await zU(e,t).releaseInterface(n)}async function XU(e,t,n,r){BU(r,`control-in length`);let i=await zU(e,t).controlTransferIn(n,r);return{status:i.status??`ok`,bytes:i.data?VU(i.data):new ArrayBuffer(0)}}async function ZU(e,t,n,r){BU(r.byteLength,`control-out payload`);let i=await zU(e,t).controlTransferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function QU(e,t,n,r){BU(r,`transfer-in length`);let i=await zU(e,t).transferIn(n,r);return{status:i.status??`ok`,bytes:i.data?VU(i.data):new ArrayBuffer(0)}}async function $U(e,t,n,r){BU(r.byteLength,`transfer-out payload`);let i=await zU(e,t).transferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function eW(e,t){await zU(e,t).reset()}const tW=6e4;function nW(){return jn()}function rW(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),tW);An(`usb-device`,e??[],void 0,{timeoutMs:tW}).then(e=>{let t=e;t.cancelled?r({cancelled:!0}):typeof t.error==`string`?r({error:t.error}):t.granted&&t.info?r({granted:!0,info:t.info}):r({error:`usb picker returned an unexpected response`})}).catch(e=>{r({error:e instanceof Error?e.message:`Failed to open USB picker`})})})}function iW(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var aW=class{registry;constructor(e){this.registry=e}usb(){let e=MU();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}list(){return HU(this.registry,this.usb())}async request(e){if(nW()){let t=await rW(e);if(`cancelled`in t)throw Error(`user cancelled the USB picker`);if(`error`in t)throw Error(t.error);let n=await this.reacquire(t.info);if(!n)throw Error(`granted device could not be re-acquired`);return RU(this.registry.register(n),n)}return UU(this.registry,this.usb(),e)}async reacquire(e){return(await this.usb().getDevices()).find(t=>t.vendorId===e.vendorId&&t.productId===e.productId&&(!e.serialNumber||t.serialNumber===e.serialNumber))??null}info(e){return Promise.resolve(WU(this.registry,e))}open(e){return GU(this.registry,e)}close(e){return KU(this.registry,e)}selectConfig(e,t){return qU(this.registry,e,t)}claim(e,t){return JU(this.registry,e,t)}release(e,t){return YU(this.registry,e,t)}async controlIn(e,t,n){let r=await XU(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}controlOut(e,t,n){return ZU(this.registry,e,t,iW(n))}async transferIn(e,t,n){let r=await QU(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}transferOut(e,t,n){return $U(this.registry,e,t,iW(n))}reset(e){return eW(this.registry,e)}},oW=class e{rpc;constructor(e){this.rpc=e}static REQUEST_TIMEOUT_MS=3e5;async list(){return(await this.rpc.call(`usb-list`,void 0)).devices}async request(t){return(await this.rpc.call(`usb-request`,{filters:t},{timeoutMs:e.REQUEST_TIMEOUT_MS})).device}async info(e){return(await this.rpc.call(`usb-device-info`,{handle:e})).device}async open(e){await this.rpc.call(`usb-open`,{handle:e})}async close(e){await this.rpc.call(`usb-close`,{handle:e})}async selectConfig(e,t){await this.rpc.call(`usb-select-configuration`,{handle:e,configurationValue:t})}async claim(e,t){await this.rpc.call(`usb-claim-interface`,{handle:e,interfaceNumber:t})}async release(e,t){await this.rpc.call(`usb-release-interface`,{handle:e,interfaceNumber:t})}async controlIn(e,t,n){let r=await this.rpc.call(`usb-control-transfer-in`,{handle:e,setup:t,length:n});return{status:r.status,bytes:new Uint8Array(r.bytes)}}async controlOut(e,t,n){return this.rpc.call(`usb-control-transfer-out`,{handle:e,setup:t,bytes:iW(n)})}async transferIn(e,t,n){let r=await this.rpc.call(`usb-transfer-in`,{handle:e,endpointNumber:t,length:n});return{status:r.status,bytes:new Uint8Array(r.bytes)}}async transferOut(e,t,n){return this.rpc.call(`usb-transfer-out`,{handle:e,endpointNumber:t,bytes:iW(n)})}async reset(e){await this.rpc.call(`usb-reset`,{handle:e})}};function sW(e,t){return e&&MU()?new aW(IU()):t?new oW(t):null}function cW(e,t,n,r={}){let{header:i,window:a}=gV(t),o=new Map,s=!1,c=r.dispatch??(e=>XB(e)?$B(e):UB(e));function l(e){let t=o.get(e);t&&(clearTimeout(t.timer),o.delete(e))}function u(e,t,n){let r=Math.min(a.byteLength,t.payload.byteLength-n);r>0&&a.set(t.payload.subarray(n,n+r)),Atomics.store(i,2,t.status),Atomics.store(i,3,t.payload.byteLength),Atomics.store(i,4,r),Atomics.store(i,5,n),Atomics.store(i,1,e),Atomics.store(i,0,2),Atomics.notify(i,0),n+r>=t.payload.byteLength&&l(e)}function d(e,t){if(s)return;let{status:n,payload:r}=mV(t);l(e);let i={status:n,payload:r,timer:setTimeout(()=>l(e),605e3)};o.set(e,i),u(e,i,0)}let f=e=>{let t=e.data;if(!t||typeof t.id!=`number`)return;if(t.type===`sync-sab-next`){let e=o.get(t.id),n=t.offset;if(!e||typeof n!=`number`||!Number.isInteger(n)||n<0||n>e.payload.byteLength){d(t.id,{ok:!1,errno:`EIO`,message:`sync-sab: bad continuation`});return}u(t.id,e,n);return}if(t.type!==`sync-sab-req`||!t.req||typeof t.req!=`object`)return;let r=t.id,i={...t.req,token:n},a;try{a=c(i)}catch(e){d(r,{ok:!1,errno:`EIO`,message:e instanceof Error?e.message:String(e)});return}a.then(e=>d(r,e),e=>d(r,{ok:!1,errno:`EIO`,message:e instanceof Error?e.message:String(e)}))};return e.addEventListener(`message`,f),{dispose:()=>{if(!s){s=!0,e.removeEventListener(`message`,f);for(let e of[...o.keys()])l(e)}}}}const lW=r(`realm-host`);function uW(e,t,n={}){let r=new Map,i=n.syncFsBridgeEnabled?RB({fs:t.fs,...t.exec?{exec:t.exec}:{},cwd:t.cwd}):void 0,a=!1,o={subscriptions:r,pushEvent:(t,n=[])=>{if(!a)try{e.postMessage(t,n)}catch{}}},s=new Map,c={spawns:s,opts:n},l=r=>{if(r.data?.type!==`realm-rpc-req`)return;let i=r.data;dW(e,i,t,n,o,c)};e.addEventListener(`message`,l);let u=i&&n.syncSab?cW(e,n.syncSab,i):void 0;return e.start?.(),{syncFsToken:i,dispose:()=>{if(!a){a=!0,u?.dispose(),i&&VB(i),e.removeEventListener(`message`,l);for(let{controller:e}of s.values())try{e.signal.aborted||e.abort()}catch{}s.clear();for(let e of r.values())try{Promise.resolve(e()).catch(()=>{})}catch{}r.clear()}}}}async function dW(e,t,n,r,i,a){try{let o=await fW(t,n,r,i,a),s={type:`realm-rpc-res`,id:t.id,result:o},c=tG(o);e.postMessage(s,c)}catch(n){let r=n instanceof Error?n.message:String(n),i={type:`realm-rpc-res`,id:t.id,error:r};e.postMessage(i)}}async function fW(e,t,n,r,i){switch(e.channel){case`vfs`:return vW(e.op,e.args,t);case`exec`:return jW(e.op,e.args,t,i);case`fetch`:return FW(e.op,e.args,t);case`browser`:return zW(e.op,e.args,pW(n),n);case`usb`:return QW(e.op,e.args,hW(n));case`serial`:return $W(e.op,e.args,gW(n));case`hid`:return eG(e.op,e.args,_W(n),r);case`module`:return LW(e.op,e.args,t);case`wasm`:return RW(e.op,e.args,t);default:throw Error(`realm-host: unknown channel '${e.channel}'`)}}function pW(e){if(e.browser)return e.browser;let t=globalThis;if(t.__slicc_browser)return t.__slicc_browser;throw Error(`browser is not available in this runtime`)}function mW(e){if(e.wsSubscribers)return e.wsSubscribers;let t=globalThis;if(t.__slicc_wsSubscribers)return t.__slicc_wsSubscribers;throw Error(`browser.websocket is not available in this runtime`)}function hW(e){if(e.usbBackend)return e.usbBackend;let t=sW(a(),i());if(!t)throw Error(`usb is not available in this runtime`);return t}function gW(e){if(e.serialBackend)return e.serialBackend;let t=jU(a(),i());if(!t)throw Error(`serial is not available in this runtime`);return t}function _W(e){if(e.hidBackend)return e.hidBackend;let t=WH(a(),i());if(!t)throw Error(`hid is not available in this runtime`);return t}async function vW(e,t,n){let r=typeof t[0]==`string`?t[0]:null,i=r===null?null:n.fs.resolvePath(n.cwd,r);switch(e){case`readFile`:return n.fs.readFile(i);case`readFileBinary`:return n.fs.readFileBuffer(i);case`writeFile`:return await n.fs.writeFile(i,t[1]),!0;case`writeFileBinary`:return await n.fs.writeFile(i,t[1]),!0;case`readDir`:return n.fs.readdir(i);case`exists`:return n.fs.exists(i);case`stat`:{let e=await n.fs.stat(i);return{isDirectory:e.isDirectory,isFile:e.isFile,size:e.size}}case`mkdir`:return await n.fs.mkdir(i,{recursive:!0}),!0;case`rm`:return await n.fs.rm(i,{recursive:!0}),!0;case`rename`:{let e=n.fs.resolvePath(n.cwd,t[1]),r=n.fs;if(r.rename)await r.rename(i,e);else{let t=await n.fs.readFileBuffer(i);await n.fs.writeFile(e,t),await n.fs.rm(i,{recursive:!0})}return!0}case`resolvePath`:return n.fs.resolvePath(n.cwd,t[0]);case`invalidatePaths`:{let e=t[0],r=n.fs;return r.invalidatePaths&&r.invalidatePaths(e),!0}case`snapshot`:return DW(n,typeof t[0]==`string`?t[0]:n.cwd);case`flushWrites`:{let e=t[0];return await OW(n,e),!0}default:throw Error(`realm-host: unknown vfs op '${e}'`)}}const yW=10485760;function bW(e){return e.fileCount>=500||e.totalBytes>=yW}function xW(e){return e.entries.length>=2e4}async function SW(e,t,n,r){r.entries.push({path:t,content:new Uint8Array,isDirectory:!0});let i;try{i=await e.fs.readdir(t)}catch{return}for(let e of i)e!==`node_modules`&&n.push(t===`/`?`/${e}`:`${t}/${e}`)}async function CW(e,t,n,r){let i=``;try{i=await e.fs.readlink(t)}catch{return}r.entries.push({path:t,content:new Uint8Array,isDirectory:!1,isSymbolicLink:!0,symlinkTarget:i,size:n})}async function wW(e,t,n,r,i){if(n>1048576||bW(r)||r.totalBytes+n>yW){r.entries.push({path:t,content:new Uint8Array,isDirectory:!1,truncated:!0,size:n});return}let a;try{a=await e.fs.readFileBuffer(t)}catch{await TW(e,t,i,r);return}r.entries.push({path:t,content:a,isDirectory:!1}),r.fileCount+=1,r.totalBytes+=a.byteLength}async function TW(e,t,n,r){let i;try{i=await e.fs.stat(t)}catch{return}if(i.isDirectory){await SW(e,t,n,r);return}r.entries.push({path:t,content:new Uint8Array,isDirectory:!1,truncated:!0,size:i.size})}async function EW(e,t,n){if(xW(n))return;let r=[t];for(;r.length>0;){if(xW(n))return;let t=r.pop(),i;try{i=await e.fs.lstat(t)}catch{}if(i?.isSymbolicLink){await CW(e,t,i.size,n);continue}let a;try{a=await e.fs.stat(t)}catch{continue}a.isDirectory?await SW(e,t,r,n):a.isFile&&await wW(e,t,a.size,n,r)}}async function DW(e,t){let n={entries:[],totalBytes:0,fileCount:0};return await EW(e,t,n),t!==`/tmp`&&await EW(e,`/tmp`,n),{entries:n.entries}}async function OW(e,t){let n=[],r=async(e,t)=>{try{await t()}catch(t){n.push(`${e}: ${t instanceof Error?t.message:String(t)}`)}};for(let n of t.deleted)await r(n,()=>e.fs.rm(n,{recursive:!0}));for(let n of t.created)n.isSymbolicLink?await r(n.path,()=>e.fs.symlink(n.symlinkTarget??``,n.path)):n.isDirectory?await r(n.path,()=>e.fs.mkdir(n.path,{recursive:!0})):await r(n.path,()=>e.fs.writeFile(n.path,n.content));for(let n of t.modified)await r(n.path,()=>e.fs.writeFile(n.path,n.content));if(n.length>0)throw Error(`sync-fs flush failed for ${n.length} path(s): ${n.join(`; `)}`)}const kW=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]),AW=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`]);async function jW(e,t,n,r){if(!n.exec)throw Error(`exec is not available in this runtime`);if(e===`run`){let e=t[0],r=await n.exec(e,{cwd:n.cwd});return{stdout:r.stdout,stderr:r.stderr,exitCode:r.exitCode}}if(e===`spawn`){let e=t[0];if(!Array.isArray(e)||e.length===0||!e.every(e=>typeof e==`string`))throw Error(`exec.spawn: argv must be a non-empty string[]`);let[r,...i]=e,a=await n.exec(r,{cwd:n.cwd,args:i});return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}if(e===`start`)return NW(t,n,r);if(e===`kill`)return PW(t,r);throw Error(`realm-host: unknown exec op '${e}'`)}function MW(e){if(e.stdin!==void 0&&typeof e.stdin!=`string`)throw Error(`exec.start: stdin must be a string`);if(e.stdinKind!==void 0&&e.stdinKind!==`text`&&e.stdinKind!==`bytes`)throw Error(`exec.start: stdinKind must be 'text' or 'bytes'`);if(e.args!==void 0&&(!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`)))throw Error(`exec.start: args must be a string[]`)}async function NW(e,t,n){let[r,i,a]=e;if(typeof r!=`number`)throw Error(`exec.start: spawnId must be a number`);if(n.spawns.has(r))throw Error(`exec.start: spawnId ${r} is already in use`);let o,s,c;if(Array.isArray(i)){if(i.length===0||!i.every(e=>typeof e==`string`))throw Error(`exec.start: argv must be a non-empty string[]`);[o,...s]=i,c=i.slice()}else if(typeof i==`string`)o=i,c=[i];else throw Error(`exec.start: command must be a string or a non-empty string[]`);let l=a??{};MW(l);let u=new AbortController,{pm:d,owner:f}=n.opts,p=0;d&&f&&(p=d.spawn({kind:`shell`,argv:c,cwd:t.cwd,owner:f,...n.opts.ppid===void 0?{}:{ppid:n.opts.ppid},adoptAbort:u}).pid),n.spawns.set(r,{controller:u,pid:p});let m;try{let e={cwd:t.cwd,signal:u.signal};return l.stdin!==void 0&&(e.stdin=l.stdin),l.stdinKind!==void 0&&(e.stdinKind=l.stdinKind),s===void 0?l.args!==void 0&&(e.args=l.args):e.args=s,m=await t.exec(o,e),{stdout:m.stdout,stderr:m.stderr,exitCode:m.exitCode}}finally{if(n.spawns.delete(r),d&&p){let e=d.get(p);d.exit(p,e?.terminatedBy?null:m?.exitCode??1)}}}function PW(e,t){let[n,r]=e,i=t.spawns.get(n);if(!i)return!1;let a=typeof r==`string`&&kW.has(r)?r:`SIGTERM`;AW.has(a)&&!i.controller.signal.aborted&&i.controller.abort();let{pm:o}=t.opts;return o&&i.pid?o.signal(i.pid,a):!0}async function FW(e,t,n){if(e!==`request`)throw Error(`realm-host: unknown fetch op '${e}'`);let[r,i]=t,a=await(n.fetch?GH(n.fetch):globalThis.fetch.bind(globalThis))(r,i),o={};a.headers.forEach((e,t)=>{o[t]=e});let s=new Uint8Array(await a.arrayBuffer());return{status:a.status,statusText:a.statusText,headers:o,body:s,url:a.url}}function IW(e){let t=t=>e.fs.resolvePath(e.cwd,t);return{exists:n=>e.fs.exists(t(n)),isDirectory:async n=>{try{return(await e.fs.stat(t(n))).isDirectory}catch{return!1}},readFile:async n=>{let r=await e.fs.readFile(t(n));return typeof r==`string`?r:new TextDecoder().decode(r)}}}async function LW(e,t,n){if(e!==`buildGraph`)throw Error(`realm-host: unknown module op '${e}'`);let r=typeof t[0]==`string`?t[0]:``,i=typeof t[1]==`string`&&t[1]?t[1]:n.cwd,a=typeof t[2]==`string`?t[2]:``,o=IW(n),s={reader:o,readBytes:e=>n.fs.readFileBuffer(e),fromDir:i};return gH({entryCode:r,fromDir:i,entryFilename:a,reader:o,transpile:eH({ipk:s}),transpileEntry:tH({ipk:s})})}async function RW(e,t,n){if(e!==`compile`)throw Error(`realm-host: unknown wasm op '${e}'`);let r=typeof t[0]==`string`?t[0]:null;if(r===null)throw Error(`realm-host: wasm.compile requires a path argument`);let i=n.fs.resolvePath(n.cwd,r);return ete(e=>n.fs.readFileBuffer(e),i)}async function zW(e,t,n,r){switch(e){case`findTab`:return HW(n,t[0]??{});case`ensureTab`:{let e=t[0];return UW(n,e,t[1]??{})}case`eval`:{let e=t[0],r=t[1];return WW(n,e,r,!1)}case`evalAsync`:{let e=t[0],r=t[1];return WW(n,e,r,!0)}case`cookie`:{let e=t[0],r=t[1];return JW(n,e,r)}case`localStorage`:{let e=t[0],r=t[1];return YW(n,e,r)}case`wsObserve`:{let e={...t[0],scoopJid:r.scoopJid};return await mW(r).observe(e)}case`wsUpdate`:{let e=t[0],n=t[1]??{};return mW(r).update(e,n)}case`wsClose`:{let e=t[0];return mW(r).close(e)}case`wsList`:return mW(r).list();case`createTab`:{let e=t[0];return n.createPage(e)}case`closeTab`:{let e=t[0];return n.closePage(e)}case`setViewport`:{let e=t[0],r=t[1],i=t[2];return n.withTab(e,async()=>{await n.setViewportOverride(e,r,i)})}case`navigateTab`:{let e=t[0],r=t[1];return n.withTab(e,async()=>{await n.navigate(r)})}case`screenshotTab`:{let e=t[0],r=t[1];return n.withTab(e,async()=>(await n.bringToFront(),n.screenshot(r)))}case`waitForLoadState`:{let e=t[0],r=t[1];return qW(n,e,r)}default:throw Error(`realm-host: unknown browser op '${e}'`)}}function BW(){try{let e=globalThis.localStorage;return e?!!(e.getItem(`slicc.trayWorkerBaseUrl`)||e.getItem(`slicc.trayJoinUrl`)):!1}catch{return!1}}async function VW(e){if(typeof e.listAllTargets!=`function`)return(await e.listPages()).map(e=>({targetId:e.targetId,url:e.url,title:e.title}));let t=(await e.listAllTargets()).map(e=>({targetId:e.targetId,url:e.url,title:e.title})),n=BW()?i():null;if(n)try{let{targets:e}=await n.call(`list-remote-targets`,void 0,{timeoutMs:3e3}),r=new Set(t.map(e=>e.targetId));for(let n of e)r.has(n.targetId)||(r.add(n.targetId),t.push({targetId:n.targetId,url:n.url,title:n.title}))}catch(e){lW.debug(`panel-rpc list-remote-targets failed`,{err:String(e)})}return t}async function HW(e,t){let n=await VW(e);if(t.domain){let e=t.domain.toLowerCase();for(let t of n){let n=XW(t.url);if(n&&n.toLowerCase()===e)return t}return null}if(t.urlMatch){let e;try{e=new RegExp(t.urlMatch)}catch(e){throw Error(`browser.findTab: invalid urlMatch regex: ${e instanceof Error?e.message:String(e)}`)}for(let t of n)if(e.test(t.url))return t;return null}throw Error("browser.findTab: query requires `domain` or `urlMatch`")}async function UW(e,t,n){let r=await VW(e);if(n.matchUrl){let e;try{e=new RegExp(n.matchUrl)}catch(e){throw Error(`browser.ensureTab: invalid matchUrl regex: ${e instanceof Error?e.message:String(e)}`)}let t=r.find(t=>e.test(t.url));if(t)return t}else{let e=ZW(t);if(e){let t=r.find(t=>ZW(t.url)===e);if(t)return t}}return{targetId:await e.createPage(t),url:t,title:``}}async function WW(e,t,n,r){return e.withTab(t,async()=>GW(await e.evaluate(n,{awaitPromise:r,returnByValue:!0})))}function GW(e){if(typeof e!=`string`)return e;let t=KW(e);if(t===void 0)return e;if(typeof t==`object`&&t)return t;if(typeof t==`string`){let e=t.trim();if(e.length>0&&(e[0]===`{`||e[0]===`[`)){let e=KW(t);if(typeof e==`object`&&e)return e}return t}return e}function KW(e){let t=e.trim();if(t.length===0)return;let n=t[0];if(n===`{`||n===`[`||n===`"`||n===`-`||n>=`0`&&n<=`9`||t===`true`||t===`false`||t===`null`)try{return JSON.parse(t)}catch{return}}async function qW(e,t,n){if(n===`networkidle`)return e.withTab(t,async()=>{for(let t=0;t<20;t++)if(await new Promise(e=>setTimeout(e,250)),await e.evaluate(`(function(){
|
|
1648
1648
|
try {
|
|
1649
1649
|
var entries = performance.getEntriesByType('resource');
|
|
@@ -1660,7 +1660,7 @@ except BaseException:
|
|
|
1660
1660
|
})()`,{returnByValue:!0}))return})}async function JW(e,t,n){return e.withTab(t,async()=>{let t=((await e.sendCDP(`Network.getCookies`)).cookies??[]).find(e=>e.name===n);return t&&typeof t.value==`string`?t.value:null})}async function YW(e,t,n){return e.withTab(t,async()=>{let t=await e.evaluate(`(function(){try{var v=window.localStorage.getItem(${JSON.stringify(n)});return v===null?null:String(v);}catch(e){return null;}})()`,{returnByValue:!0});return t==null?null:typeof t==`string`?t:String(t)})}function XW(e){try{return new URL(e).hostname}catch{return null}}function ZW(e){try{return new URL(e).origin}catch{return null}}async function QW(e,t,n){switch(e){case`list`:return n.list();case`request`:return n.request(t[0]??[]);case`info`:return n.info(t[0]);case`open`:return n.open(t[0]);case`close`:return n.close(t[0]);case`reset`:return n.reset(t[0]);case`selectConfig`:return n.selectConfig(t[0],t[1]);case`claim`:return n.claim(t[0],t[1]);case`release`:return n.release(t[0],t[1]);case`controlIn`:return n.controlIn(t[0],t[1],t[2]);case`controlOut`:return n.controlOut(t[0],t[1],t[2]);case`transferIn`:return n.transferIn(t[0],t[1],t[2]);case`transferOut`:return n.transferOut(t[0],t[1],t[2]);default:throw Error(`realm-host: unknown usb op '${e}'`)}}async function $W(e,t,n){switch(e){case`list`:return n.list();case`request`:return n.request(t[0]??[]);case`info`:return n.info(t[0]);case`open`:return n.open(t[0],t[1]);case`close`:return n.close(t[0]);case`read`:{let e=t[1]??{};return n.read(t[0],e)}case`write`:return n.write(t[0],t[1]);case`getSignals`:return n.getSignals(t[0]);case`setSignals`:return n.setSignals(t[0],t[1]);default:throw Error(`realm-host: unknown serial op '${e}'`)}}async function eG(e,t,n,r){switch(e){case`list`:return n.list();case`request`:return n.request(t[0]??[]);case`info`:return n.info(t[0]);case`open`:return n.open(t[0]);case`close`:return n.close(t[0]);case`sendReport`:return n.sendReport(t[0],t[1],t[2]);case`sendFeatureReport`:return n.sendFeatureReport(t[0],t[1],t[2]);case`receiveFeatureReport`:return n.receiveFeatureReport(t[0],t[1]);case`subscribeInputReports`:{let e=t[0];if(r.subscriptions.has(e))return!0;let i=await n.subscribeInputReports(e,t=>{let n=t.bytes instanceof Uint8Array?t.bytes:new Uint8Array(t.bytes),i={type:`realm-event`,channel:`hid-input-report`,payload:{handle:e,reportId:t.reportId,bytes:n}};r.pushEvent(i,[n.buffer])});return r.subscriptions.set(e,i),!0}case`unsubscribeInputReports`:{let e=t[0],n=r.subscriptions.get(e);return!n||(r.subscriptions.delete(e),await n(),!0)}default:throw Error(`realm-host: unknown hid op '${e}'`)}}function tG(e){if(e instanceof Uint8Array)return[e.buffer];if(e&&typeof e==`object`){let t=e;if(t.body instanceof Uint8Array)return[t.body.buffer];if(t.bytes instanceof Uint8Array)return[t.bytes.buffer]}return[]}async function nG(e){let t=e.procKind??`jsh`,n=e.pm.spawn({kind:t,argv:e.argv,cwd:e.cwd,env:e.env,owner:e.owner,ppid:e.ppid}),r;try{r=await e.realmFactory({kind:e.kind,ctx:e.ctx})}catch(t){let r=t instanceof Error?t.message:String(t);return e.pm.exit(n.pid,1),{stdout:``,stderr:`realm-runner: ${r}\n`,exitCode:1}}let i=r.isolatedThread?rG(e.syncSabBytes):void 0,a=uW(r.controlPort,e.ctx,{...e.owner.scoopJid===void 0?{}:{scoopJid:e.owner.scoopJid},pm:e.pm,owner:e.owner,ppid:n.pid,syncFsBridgeEnabled:!!e.syncFsBridgeEnabled||i!==void 0,...i?{syncSab:i}:{}});return new Promise(t=>{let o=!1,s=null,c=null,l=null,u=null,d=()=>{c&&r.controlPort.removeEventListener(`message`,c),r.removeEventListener&&(l&&r.removeEventListener(`error`,l),u&&r.removeEventListener(`messageerror`,u)),s?.(),a.dispose()},f=(i,a)=>{if(!o){o=!0,d();try{r.terminate()}catch{}e.pm.exit(n.pid,a),t(i)}};c=e=>{let t=e.data;if(t?.type===`realm-done`){let t=e.data;f({stdout:t.stdout,stderr:t.stderr,exitCode:t.exitCode},t.exitCode)}else if(t?.type===`realm-error`){let t=e.data;f({stdout:``,stderr:t.message+`
|
|
1661
1661
|
`,exitCode:1},1)}},l=e=>{let t=e.message??`realm error`;f({stdout:``,stderr:t+`
|
|
1662
1662
|
`,exitCode:1},1)},u=()=>{f({stdout:``,stderr:`realm-runner: worker message could not be deserialized
|
|
1663
|
-
`,exitCode:1},1)},s=e.pm.onSignal((e,t)=>{e.pid===n.pid&&(t===`SIGKILL`?f({stdout:``,stderr:``,exitCode:137},137):t===`SIGINT`?f({stdout:``,stderr:``,exitCode:130},130):t===`SIGTERM`&&f({stdout:``,stderr:``,exitCode:143},143))}),r.controlPort.addEventListener(`message`,c),r.addEventListener&&(r.addEventListener(`error`,l),r.addEventListener(`messageerror`,u));let p={type:`realm-init`,kind:e.kind,code:e.code,argv:e.realmArgv??e.argv,env:e.env,cwd:e.cwd,filename:e.filename,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,opfsMountDbName:e.opfsMountDbName,mountPoints:e.mountPoints,...a.syncFsToken===void 0?{}:{syncFsToken:a.syncFsToken},...i?{syncSab:i}:{}};r.controlPort.postMessage(p)})}function rG(e){if(_V())try{return new SharedArrayBuffer(64+(e??1048576))}catch{return}}let iG=!1;function aG(e){iG=e}function oG(){return iG}const sG=Object.freeze({anthropic:`ANTHROPIC_API_KEY`,"ant-ling":`ANT_LING_API_KEY`,"qwen-token-plan":`QWEN_TOKEN_PLAN_API_KEY`,"qwen-token-plan-cn":`QWEN_TOKEN_PLAN_CN_API_KEY`,"qwen-token-plan-individual":`QWEN_TOKEN_PLAN_API_KEY`,openai:`OPENAI_API_KEY`,"azure-openai-responses":`AZURE_OPENAI_API_KEY`,nvidia:`NVIDIA_API_KEY`,deepseek:`DEEPSEEK_API_KEY`,google:`GEMINI_API_KEY`,"google-vertex":`GOOGLE_CLOUD_API_KEY`,groq:`GROQ_API_KEY`,cerebras:`CEREBRAS_API_KEY`,xai:`XAI_API_KEY`,radius:`RADIUS_API_KEY`,openrouter:`OPENROUTER_API_KEY`,"vercel-ai-gateway":`AI_GATEWAY_API_KEY`,zai:`ZAI_API_KEY`,"zai-coding-cn":`ZAI_CODING_CN_API_KEY`,mistral:`MISTRAL_API_KEY`,minimax:`MINIMAX_API_KEY`,"minimax-cn":`MINIMAX_CN_API_KEY`,moonshotai:`MOONSHOT_API_KEY`,"moonshotai-cn":`MOONSHOT_API_KEY`,huggingface:`HF_TOKEN`,fireworks:`FIREWORKS_API_KEY`,together:`TOGETHER_API_KEY`,baseten:`BASETEN_API_KEY`,opencode:`OPENCODE_API_KEY`,"opencode-go":`OPENCODE_API_KEY`,"kimi-coding":`KIMI_API_KEY`,"cloudflare-workers-ai":`CLOUDFLARE_API_KEY`,"cloudflare-ai-gateway":`CLOUDFLARE_API_KEY`,xiaomi:`XIAOMI_API_KEY`,"xiaomi-token-plan-cn":`XIAOMI_TOKEN_PLAN_CN_API_KEY`,"xiaomi-token-plan-ams":`XIAOMI_TOKEN_PLAN_AMS_API_KEY`,"xiaomi-token-plan-sgp":`XIAOMI_TOKEN_PLAN_SGP_API_KEY`});function cG(e){return sG[e]??null}function lG(e,t){let n=cG(e);if(!n)return{};let r=t.find(t=>t.providerId===e)?.apiKey?.trim();return r?{[n]:r}:{}}let uG=null;function dG(e){let t=uG;return uG=e,t}async function fG(){if(!uG)return{};try{return await uG()??{}}catch{return{}}}function pG(){return async()=>{let{getAccounts:e,getSelectedProvider:t}=await import(`./account-store-
|
|
1663
|
+
`,exitCode:1},1)},s=e.pm.onSignal((e,t)=>{e.pid===n.pid&&(t===`SIGKILL`?f({stdout:``,stderr:``,exitCode:137},137):t===`SIGINT`?f({stdout:``,stderr:``,exitCode:130},130):t===`SIGTERM`&&f({stdout:``,stderr:``,exitCode:143},143))}),r.controlPort.addEventListener(`message`,c),r.addEventListener&&(r.addEventListener(`error`,l),r.addEventListener(`messageerror`,u));let p={type:`realm-init`,kind:e.kind,code:e.code,argv:e.realmArgv??e.argv,env:e.env,cwd:e.cwd,filename:e.filename,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,opfsMountDbName:e.opfsMountDbName,mountPoints:e.mountPoints,...a.syncFsToken===void 0?{}:{syncFsToken:a.syncFsToken},...i?{syncSab:i}:{}};r.controlPort.postMessage(p)})}function rG(e){if(_V())try{return new SharedArrayBuffer(64+(e??1048576))}catch{return}}let iG=!1;function aG(e){iG=e}function oG(){return iG}const sG=Object.freeze({anthropic:`ANTHROPIC_API_KEY`,"ant-ling":`ANT_LING_API_KEY`,"qwen-token-plan":`QWEN_TOKEN_PLAN_API_KEY`,"qwen-token-plan-cn":`QWEN_TOKEN_PLAN_CN_API_KEY`,"qwen-token-plan-individual":`QWEN_TOKEN_PLAN_API_KEY`,openai:`OPENAI_API_KEY`,"azure-openai-responses":`AZURE_OPENAI_API_KEY`,nvidia:`NVIDIA_API_KEY`,deepseek:`DEEPSEEK_API_KEY`,google:`GEMINI_API_KEY`,"google-vertex":`GOOGLE_CLOUD_API_KEY`,groq:`GROQ_API_KEY`,cerebras:`CEREBRAS_API_KEY`,xai:`XAI_API_KEY`,radius:`RADIUS_API_KEY`,openrouter:`OPENROUTER_API_KEY`,"vercel-ai-gateway":`AI_GATEWAY_API_KEY`,zai:`ZAI_API_KEY`,"zai-coding-cn":`ZAI_CODING_CN_API_KEY`,mistral:`MISTRAL_API_KEY`,minimax:`MINIMAX_API_KEY`,"minimax-cn":`MINIMAX_CN_API_KEY`,moonshotai:`MOONSHOT_API_KEY`,"moonshotai-cn":`MOONSHOT_API_KEY`,huggingface:`HF_TOKEN`,fireworks:`FIREWORKS_API_KEY`,together:`TOGETHER_API_KEY`,baseten:`BASETEN_API_KEY`,opencode:`OPENCODE_API_KEY`,"opencode-go":`OPENCODE_API_KEY`,"kimi-coding":`KIMI_API_KEY`,"cloudflare-workers-ai":`CLOUDFLARE_API_KEY`,"cloudflare-ai-gateway":`CLOUDFLARE_API_KEY`,xiaomi:`XIAOMI_API_KEY`,"xiaomi-token-plan-cn":`XIAOMI_TOKEN_PLAN_CN_API_KEY`,"xiaomi-token-plan-ams":`XIAOMI_TOKEN_PLAN_AMS_API_KEY`,"xiaomi-token-plan-sgp":`XIAOMI_TOKEN_PLAN_SGP_API_KEY`});function cG(e){return sG[e]??null}function lG(e,t){let n=cG(e);if(!n)return{};let r=t.find(t=>t.providerId===e)?.apiKey?.trim();return r?{[n]:r}:{}}let uG=null;function dG(e){let t=uG;return uG=e,t}async function fG(){if(!uG)return{};try{return await uG()??{}}catch{return{}}}function pG(){return async()=>{let{getAccounts:e,getSelectedProvider:t}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t);return lG(t(),e())}}async function mG(e,t,n,r,i={}){return await n.fs.exists(e)?hG(await n.fs.readFile(e),[`node`,e,...t],n,r,{...i,filename:e}):{stdout:``,stderr:`jsh: cannot find script '${e}'\n`,exitCode:127}}async function hG(e,t,n,r,i={}){let a=i.realmFactory??gG(),o=r?.processManager??yG()??vG(),s=r?.owner??{kind:`system`},c=i.filename??t[1]??`<eval>`;return await nG({pm:o,realmFactory:a,owner:s,kind:`js`,code:e,argv:t,env:{...s.kind===`scoop`?{}:await fG(),...Object.fromEntries(n.env.entries())},cwd:n.cwd,filename:c,stdin:ra(n.stdin),ctx:n,ppid:r?.getParentPid?.(),syncFsBridgeEnabled:oG()})}function gG(){return typeof Worker<`u`||typeof document<`u`?BV():IV()}let _G=null;function vG(){return _G||=new ji,_G}function yG(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}function bG(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}var xG=class{aggregator=null;now;explicitSink;scrubLabel;ids=new Map;seq=0;constructor(e={}){this.now=e.now??Date.now,this.explicitSink=e.sink,this.scrubLabel=e.scrubLabel}allocateId(e=`p`){return this.seq+=1,`${e}-${this.seq}`}hasSink(){return this.resolveSink()!==null}setAggregator(e){this.aggregator=e}emit(e){let t=this.aggregator;if(t&&e.id!==t.id)return t.onChild(e),!0;let n=this.resolveSink();if(!n)return e.phase===`end`&&this.ids.delete(e.id),!1;let r=this.ids.get(e.id);if(e.phase===`update`){if(!r)return!1;let t=this.now();return t-r.lastUpdateAt<250?!1:(r.lastUpdateAt=t,this.deliver(r,n,e),!0)}if(e.phase===`start`){let t={lastUpdateAt:-1/0,rawLabel:e.label,label:this.scrubbed(e.label),tail:Promise.resolve()};return this.ids.set(e.id,t),this.deliver(t,n,e),!0}return r?(this.ids.delete(e.id),this.deliver(r,n,e),!0):!1}resolveSink(){if(this.explicitSink)return this.explicitSink;let e=Yt();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:`progress`,progress:e}]})}}scrubbed(e){return this.scrubLabel?SG(this.scrubLabel,e):e}deliver(e,t,n){n.label!==e.rawLabel&&(e.rawLabel=n.label,e.label=this.scrubbed(n.label));let{label:r}=e;if(typeof r==`string`){let e=CG(r);t(e===n.label?n:{...n,label:e});return}e.tail=e.tail.then(async()=>{let i=await r;e.label=i,t({...n,label:CG(i)})})}};async function SG(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function CG(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function wG(e,t){return t.length?`${e} ${t.join(` `)}`:e}function TG(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function EG(e,t=Date.now){let n=new Map,r=e=>n.get(e)?.[0];return{start(r,i){if(!e.hasSink())return;let a={id:e.allocateId(`net`),label:TG(r),startedAt:t()},o=n.get(r);o?o.push(a):n.set(r,[a]),e.emit({id:a.id,label:a.label,fraction:i===void 0?void 0:0,done:0,total:i,unit:`bytes`,phase:`start`})},chunk(n,i,a){let o=r(n);if(!o)return;let s,c;if(a!==void 0&&a>0){s=Math.min(1,i/a);let e=t()-o.startedAt;i>0&&(c=Math.max(0,e/i*(a-i)))}e.emit({id:o.id,label:o.label,fraction:s,etaMs:c,done:i,total:a,unit:`bytes`,phase:`update`})},end(t){let r=n.get(t),i=r?.shift();r&&r.length===0&&n.delete(t),i&&e.emit({id:i.id,label:i.label,fraction:1,etaMs:0,unit:`bytes`,phase:`end`})}}}const DG={timeout:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`)&&e[t]!==`--`;)[`-k`,`--kill-after`,`-s`,`--signal`].includes(e[t])&&(t+=1),t+=1;return e[t]===`--`&&(t+=1),t+1},env:e=>{let t=0;for(;t<e.length&&(e[t].startsWith(`-`)||e[t].includes(`=`));)t+=1;return t},nohup:()=>0,nice:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`);)t+=1;return t}},OG=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function kG(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function AG(e,t){switch(e.type){case`CommandSubstitution`:return VG(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=AG(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function jG(e,t){let n=0;for(let r of e.parts){let e=AG(r,t);if(e===null)return null;n+=e}return n}function MG(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=jG(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=jG(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=kG(e.name);if(r===null||OG.has(r))return null;if(!t.has(r))return n;n+=1;let i=DG[r];if(i){let r=e.args.map(kG);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(OG.has(a))return null;t.has(a)&&(n+=1)}return n}function NG(e){let t=typeof e.start==`number`?e.start:Number(e.start),n=typeof e.end==`number`?e.end:Number(e.end);if(!Number.isFinite(t)||!Number.isFinite(n)){let t=String(e.start),n=String(e.end);return t.length!==1||n.length!==1?null:Math.abs(n.charCodeAt(0)-t.charCodeAt(0))+1}let r=Math.abs(e.step??1)||1;return Math.floor(Math.abs(n-t)/r)+1}function PG(e){if(e.parts.length!==1||e.parts[0].type!==`CommandSubstitution`)return null;let t=e.parts[0].body;if(t.statements.length!==1)return null;let n=t.statements[0];if(n.pipelines.length!==1||n.pipelines[0].commands.length!==1)return null;let r=n.pipelines[0].commands[0];if(r.type!==`SimpleCommand`||!r.name||kG(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=kG(e);return t===null?NaN:Number(t)});if(i.some(e=>!Number.isFinite(e)))return null;let a=1,o=1,s;if(i.length===1)[s]=i;else if(i.length===2)[a,s]=i;else if(i.length===3)[a,o,s]=i;else return null;if(o===0)return null;let c=Math.floor((s-a)/o)+1;return c>0?c:0}function FG(e){let t=0;for(let n of e){let e=n.type===`Word`?IG(n.word):NG(n);if(e===null)return null;t+=e}return t}function IG(e){let t=PG(e);if(t!==null)return t;let n=1;for(let t of e.parts)switch(t.type){case`Literal`:case`SingleQuoted`:case`Escaped`:break;case`DoubleQuoted`:if(t.parts.some(e=>e.type!==`Literal`&&e.type!==`Escaped`))return null;break;case`BraceExpansion`:{let e=FG(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function LG(e){let t=0;for(let n of e){let e=IG(n);if(e===null)return null;t+=e}return t}function RG(e,t){let n=0;for(let r of e){let e=BG(r,t);if(e===null)return null;n+=e}return n}function zG(e,t){switch(e.type){case`SimpleCommand`:return MG(e,t);case`For`:{if(!e.words)return null;let n=LG(e.words),r=RG(e.body,t);return n===null||r===null?null:e.words.filter(e=>PG(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return RG(e.body,t);case`FunctionDef`:return 0;default:return null}}function BG(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=zG(e,t);if(r===null)return null;n+=r}return n}function VG(e,t){return RG(e.statements,t)}function HG(e,t){let n=VG(e,t);return{totalSteps:n!==null&&n>0?n:null}}function UG(e){return e.split(`
|
|
1664
1664
|
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var WG=class{plan;emitter;label;now;id;steps=0;startedAt;finished=!1;children=new Map;constructor(e,t,n,r=Date.now){this.plan=e,this.emitter=t,this.label=n,this.now=r,this.id=t.allocateId(`script`),this.startedAt=r(),this.emitter.setAggregator(this),this.publish(`start`)}stepDone(){this.finished||(this.steps+=1,this.publish(`update`))}onChild(e){if(!this.finished){if(e.phase===`end`){this.children.delete(e.id);return}this.children.set(e.id,{fraction:e.fraction,label:e.label}),(e.fraction!==void 0||e.phase===`start`)&&this.publish(`update`)}}end(){this.finished||(this.finished=!0,this.emitter.setAggregator(null),this.emitter.emit({id:this.id,label:this.label,fraction:1,etaMs:0,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:`end`}))}fraction(){let e=[...this.children.values()].at(-1)?.fraction,t=this.plan.totalSteps;if(t===null)return e;let n=e??0;return Math.min(1,(this.steps+n)/t)}publish(e){let t=this.fraction(),n=this.now()-this.startedAt,r=t!==void 0&&t>0&&t<1?Math.max(0,n/t*(1-t)):t===1?0:void 0,i=[...this.children.values()].at(-1);this.emitter.emit({id:this.id,label:i?`${this.label} · ${i.label}`:this.label,fraction:t,etaMs:r,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:e})}};const GG=globalThis.setTimeout.bind(globalThis);function KG(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function qG(e,t={}){let n=t.now??Date.now,r=t.setTimeout??GG,i=t.isAborted??(()=>!1),a=t.label??KG,o=e=>new Promise(t=>r(t,e));return async t=>{let r=Math.max(0,t),s=e.allocateId(`sleep`),c=a(r),l=n();e.emit({id:s,label:c,fraction:0,etaMs:r,done:0,total:r,unit:`ms`,phase:`start`});try{let t=0;for(;t<r;){if(i())return;if(await o(Math.min(250,r-t)),t=n()-l,t<r){let n=Math.min(1,t/r);e.emit({id:s,label:c,fraction:n,etaMs:Math.max(0,r-t),done:Math.min(t,r),total:r,unit:`ms`,phase:`update`})}}}finally{e.emit({id:s,label:c,fraction:1,etaMs:0,done:r,total:r,unit:`ms`,phase:`end`})}}}const JG=globalThis.setTimeout.bind(globalThis);function YG(e){let t=/^(\d+(?:\.\d+)?|\.\d+)([smhd]?)$/.exec(e.trim());return t?Number(t[1])*({"":1e3,s:1e3,m:6e4,h:36e5,d:864e5}[t[2]]??1e3):null}function XG(e){let t=0;for(;t<e.length;){let n=e[t];if(n===`--`)return t+1<e.length?t+1:-1;if(!n.startsWith(`-`))return t;[`-k`,`--kill-after`,`-s`,`--signal`].includes(n)&&(t+=1),t+=1}return-1}function ZG(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??JG;return{...e,async execute(n,a){let o=XG(n),s=o>=0?YG(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=wG(e.name,n),u=r(),d=!0,f=()=>{if(!d)return;let e=r()-u,n=Math.min(1,e/s);t.emit({id:c,label:l,fraction:n,etaMs:Math.max(0,s-e),done:Math.min(e,s),total:s,unit:`ms`,phase:`update`}),e<s&&i(f,250)};t.emit({id:c,label:l,fraction:0,etaMs:s,done:0,total:s,unit:`ms`,phase:`start`}),i(f,250);try{return await e.execute(n,a)}finally{d=!1,t.emit({id:c,label:l,fraction:1,etaMs:0,done:s,total:s,unit:`ms`,phase:`end`})}}}}const QG=new Set(`sleep,echo,printf,true,false,test,[,cd,pwd,export,unset,set,shift,local,return,break,continue,exit,:,read,let,declare,typeset,readonly,eval,exec,source,.,alias,unalias,type,command,builtin,wait,trap,basename,dirname,seq,expr`.split(`,`));function $G(e,t,n={}){if((n.skip??QG).has(e.name))return e;let r=e.name;return{...e,async execute(n,i){if(!t.hasSink())return e.execute(n,i);let a=t.allocateId(`cmd`),o=wG(r,n);t.emit({id:a,label:o,phase:`start`});try{return await e.execute(n,i)}finally{t.emit({id:a,label:o,phase:`end`})}}}}function eK(e){return Kr(`sudo`,e)}async function tK(e,t){let n=e.trim();if(!n||Lr(Rr(t.policy,n),t.defaultDisposition??`allow`)!==`require-approval`)return{allowed:!0};let r=await t.broker.requestApproval({kind:`command`,detail:n});if(r.decision===`deny`)return{allowed:!1,message:eK(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function nK(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function rK(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function iK(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:rK(e.installAll)},affinity:{apps:nK(e.apps),tasks:nK(e.tasks),role:nK(e.role),purpose:nK(e.purpose)},priority:n}})}const aK={apps:3,tasks:2,role:1,purpose:1};function oK(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*aK.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*aK.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=aK.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=aK.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function sK(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function cK(e){let t=new Set;try{let n=await e.readDir(ca);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function lK(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function uK(e){return typeof e!=`string`||!e?null:e.toLowerCase().trim().replace(/[^a-z0-9]+/g,`-`).replace(/(^-+|-+$)/g,``)||null}function dK(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function fK(e,t){try{let n=uK(t);if(!n)return[];let r=await e(`${nte}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?iK(se(r.body).data):[]}catch{return[]}}async function pK(e){let t;try{t=await e(ga,{headers:{Accept:`application/json`}})}catch(e){throw Error(ha(e,ga))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return iK(se(t.body).data)}function mK(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function hK(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await Ta(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function gK(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await Da(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await wa(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function _K(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await hK(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=mK(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await Ta(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,y=Math.round((i-r.count)*v/1e3),b=r.count<i?` (~${y}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${b}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${b}\n`)}return{errors:[],results:l,output:u}}async function vK(e,t,n,r,i,a,o,s,c,l){let u=await ua(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await gK(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await wa(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function yK(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function bK(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=lK(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=lK(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([pK(t),fK(t,a.company),cK(e)]);o=dK(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${ga}: ${e instanceof Error?e.message:String(e)}`])}let c=oK(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=yK(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await ma(a,o,t);return c.status===`error`?vK(n,i,a,o,d,u,r,s,t,e):_K(n,i,aa(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await ya(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function xK(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let SK,CK;async function wK(e){if(SK)return SK;if(CK!==void 0)return CK;CK=(async()=>{let t;try{t=await e(la,{headers:{Accept:`application/json`}})}catch(e){throw Error(ha(e,la))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=se(t.body),r=Array.isArray(n)?n:n.skills??[];return SK=r,r})();try{return await CK}catch(e){throw CK=void 0,e}}async function TK(e,t){let n=await wK(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const EK=/^[A-Za-z0-9._-]+$/;function DK(e){return!e||e===`.`||e===`..`?!1:EK.test(e)}function OK(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!DK(r)||!DK(i))return null;let a=xK(r);return DK(a)?{hostname:a,task:i}:null}function kK(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function AK(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
|
|
1665
1665
|
`)}function jK(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
|
|
1666
1666
|
`)}function MK(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
|
|
@@ -1767,7 +1767,7 @@ Examples:
|
|
|
1767
1767
|
skill list
|
|
1768
1768
|
skill info bluebubbles
|
|
1769
1769
|
skill read bluebubbles
|
|
1770
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-
|
|
1770
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-DUU7N5bl.js`).then(e=>e.t);try{switch(r){case`list`:{let t=await i.discoverSkills(e);return t.length===0?{stdout:`No discoverable skills found.\n\n${FK()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0}:{stdout:LK(t,`Discoverable skills`),stderr:``,exitCode:0}}case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
1771
1771
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:RK(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
|
|
1772
1772
|
`,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
|
|
1773
1773
|
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const VK=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&gr(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Sa(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>dr(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function HK(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=VK.find(e=>e.names.includes(r));if(i){let r=e[++n];if(!r||!i.validate(r))return t.error=i.error,t;i.apply(t,r)}else if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--json`)t.json=!0;else if(r.startsWith(`-`))return t.error=`upskill: unknown option "${r}" for update`,t;else t.skills.push(r)}return t}function UK(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function WK(e,t){try{let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(String(n))}catch{return}}async function GK(e,t,n,r){let i=await WK(e,t);return pa(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?UK(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function KK(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await GK(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await da(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function qK(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await ua(t),d=await ba(s,c,o.ref,u,!0);if(d&&r.sha===d&&await JK(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await YK(s,c,l,n,o.ref,t,u);if(`error`in f)return{...o,outcome:`error`,error:f.error};let p=f.files,m=f.path;if(p.size===0)return{...o,outcome:`error`,error:`no files at ${s}/${c}${m?`/${m}`:``} — the skill may have moved or been removed upstream`};let{changes:h,writes:g,removals:_}=await KK(e,`${ca}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let y=d??r.sha;return v&&await eq(e,{changes:h,writes:g,removals:_}),await Ea(e,n,{...r,ref:o.ref,path:m,sha:y,files:[...p.keys()].sort()}),{...o,to:y,outcome:v?`updated`:`current`,changes:h}}async function JK(e,t,n){if(!n.files?.length)return!1;for(let r of n.files)if(!await e.exists(`/workspace/skills/${t}/${r}`))return!1;return!0}async function YK(e,t,n,r,i,a,o){let s=await ma(e,t,a,i??`main`);if(s.status===`ok`){let i=aa(s.files),a=n||XK(i,r);return a===null?{error:`could not find "${r}/SKILL.md" in ${e}/${t} — pass --path <dir> to say where the skill lives`}:{files:$K(i,a),path:a}}try{return{files:QK(ZK(await fa(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function XK(e,t){let n=[];for(let r of Object.keys(e))r===`SKILL.md`?n.push(``):(r.endsWith(`/${t}/SKILL.md`)||r===`${t}/SKILL.md`)&&n.push(r.slice(0,-9));return n.length===0?null:(n.sort((e,t)=>e.split(`/`).length-t.split(`/`).length||e.localeCompare(t)),n[0])}function ZK(e){return new Map([...e].filter(([e])=>oa(e)))}function QK(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function $K(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);oa(e)&&r.set(e,i)}return QK(r)}async function eq(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function tq(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await NK(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${ca}/${n}/SKILL.md`,u=await WK(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&jK(new TextDecoder().decode(u))===jK(c.content);if(UK(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${ca}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Ea(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function nq(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function rq(e,t,n,r){let i=Sa(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function iq(e,t,n){if(t.length===0){let t=await xa(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await ka(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?rq(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function aq(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
@@ -1800,7 +1800,7 @@ Examples:
|
|
|
1800
1800
|
`,{stdout:s,stderr:``,exitCode:0}}function xq(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
1801
1801
|
`,exitCode:1}:gr(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
|
|
1802
1802
|
`,exitCode:1}}function Sq(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!dr(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
|
|
1803
|
-
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=xq(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function Cq(e){let t=await(await import(`./skills-
|
|
1803
|
+
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=xq(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function Cq(e){let t=await(await import(`./skills-DUU7N5bl.js`).then(e=>e.t)).discoverSkills(e);return t.length===0?{stdout:`No discoverable local skills found.\n\n${FK()}`,stderr:``,exitCode:0}:{stdout:LK(t,`Discoverable local skills`),stderr:``,exitCode:0}}async function wq(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./skills-DUU7N5bl.js`).then(e=>e.t);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await ka(n,t),a=i?Ca(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:RK(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
|
|
1804
1804
|
`,stderr:``,exitCode:0}}async function Tq(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Ta(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function Eq(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await wa(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function Dq(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await wa(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function Oq(e,t,n){let r=`Available skills in ${t}/${n}:\n\n`;for(let t of e)r+=` ${t.name.padEnd(30)} ${t.path}\n`;return r+=`\nFound ${e.length} skill(s)\n`,r}async function kq(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await ua(r),l=await Da(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:Oq(l.skills,i,a)+`\nTo install: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let u=l.skills;if(t.selectedSkills.length>0){u=l.skills.filter(e=>t.selectedSkills.includes(e.name));for(let e of t.selectedSkills)if(!l.skills.find(t=>t.name===e))return{stdout:``,stderr:`upskill: skill "${e}" not found in ${i}/${a}\n`,exitCode:1}}else if(!t.installAll)return{stdout:Oq(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await ma(i,a,r,o);if(e.status===`ok`){let r=await ba(i,a,o,c),s=await Tq(u,i,a,aa(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=s)}else{let e=await Eq(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Dq(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await ya()),{stdout:p,stderr:m,exitCode:+!!m}}async function Aq(e,t,n,r){switch(e[0]){case`tabs`:return yq(t,n,r,e.includes(`--json`));case`recommendations`:return bq(t,n,e.includes(`--install`));case`update`:case`upgrade`:return lq(e.slice(1),t,n);case`list`:return Cq(t);case`info`:case`read`:return wq(e[0],e[1],t);case`search`:return Mq(e,n);default:return null}}function jq(e,t,n){return H(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return zK();let a=await Aq(r,e,t,n);if(a)return a;let o=Sq(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return zK();if(o.sourceRef.startsWith(`tessl:`))return Nq(o.sourceRef,o.force,e,t);let s=OK(o.sourceRef);if(s)return PK(s.hostname,s.task,e,t,o.force);let c=Sa(o.sourceRef);return c?kq(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function Mq(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?mq(a,t,i):zK()}async function Nq(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
1805
1805
|
`,exitCode:1};let a=await dq(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await ua(r);return wa(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Pq(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
1806
1806
|
|
|
@@ -2208,7 +2208,7 @@ Examples:
|
|
|
2208
2208
|
`;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
|
|
2209
2209
|
`;return t}async function uZ(e){let t=V(e.slice(1),{});if(`error`in t)return sZ(t.error);if(!at()){let e=await eZ();if(!e)return rZ(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
2210
2210
|
`,stderr:``,exitCode:0}:{stdout:lZ(t),stderr:``,exitCode:0}}let{ok:n,data:r}=await aZ(`GET`,``);if(!n)return{stdout:``,stderr:`crontask: failed to list: ${r.error??`unknown error`}\n`,exitCode:1};let i=r;return i.length===0?{stdout:`No active cron tasks
|
|
2211
|
-
`,stderr:``,exitCode:0}:{stdout:lZ(i),stderr:``,exitCode:0}}async function dZ(e){let t=e[0],n=V(e.slice(1),{});if(`error`in n)return sZ(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`crontask: ${t} requires an ID\n`,exitCode:1};if(!at()){let e=await eZ();return e?await e.deleteCronTask(r)?{stdout:`Deleted cron task "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${r}" not found\n`,exitCode:1}:rZ(`delete`)}let{ok:i,status:a,data:o}=await aZ(`DELETE`,`/${r}`);return i?{stdout:`Deleted cron task "${r}"\n`,stderr:``,exitCode:0}:a===404?{stdout:``,stderr:`crontask: task "${r}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${o.error??`unknown error`}\n`,exitCode:1}}function fZ(){return H(`crontask`,async(e,t)=>{let n=e[0];if(!n||jr(e,{valueFlags:oZ}))return iZ();try{switch(n){case`create`:return await cZ(e,t.env);case`list`:return await uZ(e);case`delete`:case`kill`:return await dZ(e);default:return{stdout:``,stderr:`crontask: unknown command "${n}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function pZ(e){return H(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-
|
|
2211
|
+
`,stderr:``,exitCode:0}:{stdout:lZ(i),stderr:``,exitCode:0}}async function dZ(e){let t=e[0],n=V(e.slice(1),{});if(`error`in n)return sZ(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`crontask: ${t} requires an ID\n`,exitCode:1};if(!at()){let e=await eZ();return e?await e.deleteCronTask(r)?{stdout:`Deleted cron task "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${r}" not found\n`,exitCode:1}:rZ(`delete`)}let{ok:i,status:a,data:o}=await aZ(`DELETE`,`/${r}`);return i?{stdout:`Deleted cron task "${r}"\n`,stderr:``,exitCode:0}:a===404?{stdout:``,stderr:`crontask: task "${r}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${o.error??`unknown error`}\n`,exitCode:1}}function fZ(){return H(`crontask`,async(e,t)=>{let n=e[0];if(!n||jr(e,{valueFlags:oZ}))return iZ();try{switch(n){case`create`:return await cZ(e,t.env);case`list`:return await uZ(e);case`delete`:case`kill`:return await dZ(e);default:return{stdout:``,stderr:`crontask: unknown command "${n}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function pZ(e){return H(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-B5AwO0rT.js`);return r(e,t,n)})}const mZ=`slicc-fs`;async function hZ(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===mZ)}catch{return!0}}async function gZ(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(mZ)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function _Z(){if(!await hZ())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await gZ();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function vZ(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
2212
2212
|
|
|
2213
2213
|
Usage:
|
|
2214
2214
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -2740,58 +2740,58 @@ Options:
|
|
|
2740
2740
|
`)}catch{return t}}async function Y4(e,t){let n=await e.evaluate(`JSON.stringify({ url: location.href, title: document.title })`),{url:r,title:i}=JSON.parse(n),a=await e.getAccessibilityTree(),o=new Map,s=new Map,c=new Map,l=R4(a,o,s,{value:0}).join(`
|
|
2741
2741
|
`);return t?.noIframes||(l=await J4(e,l,r,o,s,c)),{url:r,title:i,text:l,refToSelector:o,refToBackendNodeId:s,refToFrameId:c}}async function X4(e,t,n,r){await e.attachToPage(n);let{url:i,title:a,text:o,refToSelector:s,refToBackendNodeId:c,refToFrameId:l}=await Y4(e,r),u={url:i,title:a,refToSelector:s,refToBackendNodeId:c,refToFrameId:l,content:o,timestamp:Date.now()};return t.snapshots.set(n,u),{snapshot:u,output:[`Page URL: ${i}`,`Page Title: ${a}`,``,o].join(`
|
|
2742
2742
|
`)}}const Z4=async({browser:e,fs:t,state:n,positional:r,flags:i})=>{let a=r[0]||`about:blank`,o=i.filter;await z4(e,n);let s=await e.createPage(a),c=e.getTransport(),l=(await c.send(`Target.attachToTarget`,{targetId:s,flatten:!0})).sessionId;n.harRecorder||=e.createHarRecorder(t,c);let u=await n.harRecorder.startRecording(s,l,o);return{stdout:`Recording started (targetId: ${s}, recordingId: ${u}) at ${a}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}},Q4=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
|
|
2743
|
-
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},$4=r(`playwright-route`);function e3(e){let t=new TextEncoder().encode(e),n=``;for(let e=0;e<t.length;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function t3(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function n3(e,t,n
|
|
2744
|
-
`,exitCode:1};let i=U(r);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0],o={pattern:a,regex:t3(a),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&$4.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();o.headers[n]=r}}}t.routeCleanup.has(i.targetId)||(t.routes.has(i.targetId)||t.routes.set(i.targetId,[]),await
|
|
2743
|
+
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},$4=r(`playwright-route`);function e3(e){let t=new TextEncoder().encode(e),n=``;for(let e=0;e<t.length;e++)n+=String.fromCharCode(t[e]);return btoa(n)}function t3(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function n3(e,t,n,r,i){if(i.sessionId!==t)return;let{requestId:a,request:o}=i,s=(n.routes.get(r)??[]).find(e=>e.regex.test(o.url));if(!s){await e.send(`Fetch.continueRequest`,{requestId:a},t).catch(e=>{$4.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:a,err:e})});return}let c=[{name:`Content-Type`,value:s.contentType},...Object.entries(s.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:a,responseCode:s.status,responseHeaders:c,body:s.body?e3(s.body):void 0},t).catch(e=>{$4.warn(`Fetch.fulfillRequest failed`,{requestId:a,url:o.url,err:e})})}async function r3(e,t,n){await e.withTab(n,async r=>{let i=e.getTransport();await i.send(`Fetch.enable`,{patterns:[{urlPattern:`*`,requestStage:`Request`}]},r);let a=e=>{n3(i,r,t,n,e)};t.routeCleanup.set(n,()=>{i.off(`Fetch.requestPaused`,a),i.send(`Fetch.disable`,{},r).catch(()=>void 0)}),i.on(`Fetch.requestPaused`,a)})}const i3=async({browser:e,state:t,positional:n,flags:r})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
|
|
2744
|
+
`,exitCode:1};let i=U(r);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0],o={pattern:a,regex:t3(a),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&$4.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();o.headers[n]=r}}}t.routeCleanup.has(i.targetId)||(t.routes.has(i.targetId)||t.routes.set(i.targetId,[]),await r3(e,t,i.targetId));let s=t.routes.get(i.targetId)??[];return s.unshift(o),t.routes.set(i.targetId,s),{stdout:`Route added: ${a}\n`,stderr:``,exitCode:0}},a3=async({state:e,flags:t})=>{let n=U(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
|
|
2745
2745
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
2746
2746
|
`)+`
|
|
2747
|
-
`,stderr:``,exitCode:0}},
|
|
2748
|
-
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}};async function
|
|
2749
|
-
`),f=`/.playwright/snapshots/page-${vi(new Date)}.yml`;return await t.writeFile(f,d),f})}catch{return null}}async function
|
|
2747
|
+
`,stderr:``,exitCode:0}},o3=async({state:e,positional:t,flags:n})=>{let r=U(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
|
|
2748
|
+
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}};async function s3(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Fee(e))throw e}t.sessionDirsCreated=!0}}async function c3(e,t,n,r){try{return await e.withTab(n,async()=>{let{url:i,title:a,text:o,refToSelector:s,refToBackendNodeId:c,refToFrameId:l}=await Y4(e),u={url:i,title:a,refToSelector:s,refToBackendNodeId:c,refToFrameId:l,content:o,timestamp:Date.now()};r.snapshots.set(n,u);let d=[`Page URL: ${i}`,`Page Title: ${a}`,``,o].join(`
|
|
2749
|
+
`),f=`/.playwright/snapshots/page-${vi(new Date)}.yml`;return await t.writeFile(f,d),f})}catch{return null}}async function l3(e,t,n){await s3(e,t);let r=new Date().toISOString(),i=`playwright-cli ${n.command}${n.args.length?` `+n.args.join(` `):``}`,a=n.result.exitCode===0?n.result.stdout.trim()||`OK`:`Error: ${n.result.stderr.trim()}`,o=[`### ${i}`,`- **Time**: ${r}`];if(n.tabUrl||n.targetId){let e=n.tabUrl?`${n.tabUrl}${n.targetId?` (targetId: ${n.targetId})`:``}`:`targetId: ${n.targetId}`;o.push(`- **Tab**: ${e}`)}o.push(`- **Result**: ${a}`),n.snapshotPath&&o.push(``,`[Snapshot](${n.snapshotPath})`),o.push(`---`,``);let s=o.join(`
|
|
2750
2750
|
`)+`
|
|
2751
|
-
`,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}async function
|
|
2752
|
-
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function
|
|
2751
|
+
`,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}async function u3(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=R4(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
2752
|
+
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function d3(e,t){let n=e.getTransport(),r=e.getSessionId();await n.send(`DOM.enable`,{},r),await n.send(`Runtime.enable`,{},r);let i=(await n.send(`DOM.resolveNode`,{backendNodeId:t},r)).object;if(i?.objectId)return(await n.send(`Runtime.callFunctionOn`,{objectId:i.objectId,functionDeclaration:`function() {
|
|
2753
2753
|
this.scrollIntoView({ block: 'center' });
|
|
2754
2754
|
const r = this.getBoundingClientRect();
|
|
2755
2755
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
2756
|
-
}`,returnByValue:!0},r)).result?.value}async function
|
|
2756
|
+
}`,returnByValue:!0},r)).result?.value}async function f3(e,t){let n=await e.evaluate(`(function() {
|
|
2757
2757
|
const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
|
|
2758
2758
|
if (!el) return null;
|
|
2759
2759
|
el.scrollIntoView({ block: 'center' });
|
|
2760
2760
|
const r = el.getBoundingClientRect();
|
|
2761
2761
|
return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
|
|
2762
|
-
})()`);return n?JSON.parse(n):void 0}async function
|
|
2763
|
-
`,stderr:``,exitCode:0}},
|
|
2762
|
+
})()`);return n?JSON.parse(n):void 0}async function p3(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return d3(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return f3(e,i)}const m3=async({browser:e,fs:t,state:n,positional:r,flags:i})=>{let a=U(i);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};r[0];let o=i[`no-iframes`]===`true`;i.depth&&parseInt(i.depth,10),i.boxes;let s=await e.withTab(a.targetId,async()=>{let t=await hi(e,i);return t?u3(e,n,a.targetId,t):(await X4(e,n,a.targetId,{noIframes:o})).output});return i.filename?(await t.writeFile(i.filename,s),{stdout:`Snapshot saved to ${i.filename}\n`,stderr:``,exitCode:0}):{stdout:s+`
|
|
2763
|
+
`,stderr:``,exitCode:0}},h3=async({browser:e,flags:t})=>{let n=U(t);return`error`in n?{stdout:``,stderr:n.error,exitCode:1}:{stdout:await e.withTab(n.targetId,async()=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
|
|
2764
2764
|
`)}`)+`
|
|
2765
|
-
`,stderr:``,exitCode:0}},
|
|
2766
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${i}\n`,stderr:``,exitCode:0}},
|
|
2767
|
-
`,stderr:``,exitCode:0}},
|
|
2765
|
+
`,stderr:``,exitCode:0}},g3=async({browser:e,fs:t,flags:n})=>{let r=U(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=n.filename||`/tmp/page-${vi(new Date)}.pdf`;try{await e.withTab(r.targetId,async n=>{let r=(await e.getTransport().send(`Page.printToPDF`,{},n)).data,a=wi(r);await t.writeFile(i,a)})}catch(e){let t=e instanceof Error?e.message:String(e);return ie()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
2766
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${i}\n`,stderr:``,exitCode:0}},_3=async({browser:e,fs:t,state:n,positional:r,flags:i})=>{let a=U(i);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=await e.withTab(a.targetId,async()=>{let o;if(r[0]?.startsWith(`e`)){let t=n.snapshots.get(a.targetId);if(!t)throw Error(`No snapshot available. Run "snapshot" first.`);if(o=await p3(e,t,r[0]),!o||o.width<=0||o.height<=0)return{error:`could not resolve element ${r[0]} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}}let s=i[`max-width`]?parseInt(i[`max-width`],10):void 0,c=await e.screenshot({fullPage:i.fullPage===`true`||i[`full-page`]===`true`,...o?{clip:o}:{},...s?{maxWidth:s}:{}}),l=i.filename||`/tmp/screenshot-${Date.now()}.png`,u=wi(c);await t.writeFile(l,u);try{await s3(t,n);let e=`/.playwright/screenshots/screenshot-${vi(new Date)}.png`;await t.writeFile(e,u)}catch{}return{message:`Screenshot saved to ${l} (${Math.round(u.length/1024)} KB)`}});return`error`in o?{stdout:``,stderr:`screenshot: ${o.error}\n`,exitCode:1}:{stdout:o.message+`
|
|
2767
|
+
`,stderr:``,exitCode:0}},v3=async({browser:e,fs:t,positional:n,flags:r})=>{let i=U(r);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=r.filename??n[0]??`/.playwright/storage-state.json`,o=[],s=[],c=``;o=(await e.sendCDP(`Network.getCookies`)).cookies??[],await e.withTab(i.targetId,async t=>{let n=e.getTransport();c=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;s=JSON.parse(r)});let l=JSON.stringify({cookies:o,origins:c?[{origin:c,localStorage:s}]:[]},null,2);return await t.writeFile(a,l),{stdout:`Saved storage state to ${a}\n`,stderr:``,exitCode:0}},y3=async({browser:e,fs:t,positional:n,flags:r})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
2768
2768
|
`,exitCode:1};let i=U(r);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0],o;try{let e=await t.readTextFile(a);o=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${a}\n`,exitCode:1}}o.cookies?.length&&await e.sendCDP(`Network.setCookies`,{cookies:o.cookies});let s=[];o.origins?.length&&await e.withTab(i.targetId,async t=>{let n=e.getTransport(),r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=o.origins.filter(e=>e.origin===r);s=o.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
|
|
2769
2769
|
var items = ${JSON.stringify(e)};
|
|
2770
2770
|
for (var i = 0; i < items.length; i++) {
|
|
2771
2771
|
localStorage.setItem(items[i].name, items[i].value);
|
|
2772
2772
|
}
|
|
2773
|
-
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let c=``;return s.length>0&&(c=`Skipped localStorage for non-matching origins: ${s.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${a}\n`,stderr:c,exitCode:0}};function
|
|
2773
|
+
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let c=``;return s.length>0&&(c=`Skipped localStorage for non-matching origins: ${s.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${a}\n`,stderr:c,exitCode:0}};function b3(e,t){return{list:async({browser:e,flags:n})=>{let r=U(n);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await e.withTab(r.targetId,async()=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
|
|
2774
2774
|
`)})+`
|
|
2775
2775
|
`,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let a=U(i);return`error`in a?{stdout:``,stderr:a.error,exitCode:1}:{stdout:await n.withTab(a.targetId,async()=>{let e=await n.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(e===null)throw Error(`Key "${r[0]}" not found in ${t}`);return e})+`
|
|
2776
|
-
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let a=U(i);return`error`in a?{stdout:``,stderr:a.error,exitCode:1}:(await n.withTab(a.targetId,async()=>{await n.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let a=U(i);return`error`in a?{stdout:``,stderr:a.error,exitCode:1}:(await n.withTab(a.targetId,async()=>{await n.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n})=>{let r=U(n);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await e.withTab(r.targetId,async()=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const b3
|
|
2777
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${a} in new tab [targetId: ${s}]\n`,stderr:``,exitCode:0}},
|
|
2776
|
+
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let a=U(i);return`error`in a?{stdout:``,stderr:a.error,exitCode:1}:(await n.withTab(a.targetId,async()=>{await n.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let a=U(i);return`error`in a?{stdout:``,stderr:a.error,exitCode:1}:(await n.withTab(a.targetId,async()=>{await n.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n})=>{let r=U(n);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await e.withTab(r.targetId,async()=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const x3=b3(`localstorage`,`localStorage`),S3=b3(`sessionstorage`,`sessionStorage`),C3=r(`playwright`),w3=async({browser:e,fs:t,state:n,positional:r,flags:i})=>{let a=r[0]||`about:blank`,o=i.runtime;await z4(e,n);let s;if(s=o?await e.createRemotePage(o,a):await e.createPage(a),i.foreground===`true`||i.fg===`true`)try{await e.withTab(s,async t=>{await e.getTransport().send(`Page.bringToFront`,{},t)})}catch(e){C3.debug(`open/tab-new --foreground bringToFront failed`,{targetId:s,error:e instanceof Error?e.message:String(e)})}let c=i[`teleport-start`],l=i[`teleport-return`];if(c&&l){C3.info(`Arming teleport via open/tab-new flags`),C3.debug(`Arming teleport via open/tab-new flags details`,{targetId:s,startPattern:c,returnPattern:l});let t,r;try{t=new RegExp(c)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${c}\n`,exitCode:1}}try{r=new RegExp(l)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${l}\n`,exitCode:1}}let o=i.timeout?parseInt(i.timeout,10):300,u=n.teleportWatchers.get(s);u&&(c4(u),n.teleportWatchers.delete(s)),l4(e,n,t,r,o*1e3,i[`teleport-runtime`],a,s)}if(i.discover===`true`){let{browseShWarning:e,...n}=await f2(a,{discover:!0,fs:t}),r={action:`open`,targetId:s,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
2777
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${a} in new tab [targetId: ${s}]\n`,stderr:``,exitCode:0}},Aae=async({browser:e,state:t})=>{let n=await W4(e,t);return n.length===0?{stdout:`No tabs open
|
|
2778
2778
|
`,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
|
|
2779
2779
|
`)+`
|
|
2780
|
-
`,stderr:``,exitCode:0}},T3=async({browser:e,state:t,flags:n})=>{let r=U(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},
|
|
2780
|
+
`,stderr:``,exitCode:0}},T3=async({browser:e,state:t,flags:n})=>{let r=U(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},jae=async({browser:e,state:t,positional:n})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
|
|
2781
2781
|
`,exitCode:1};let r=n[0];if(!/^[0-9]+$/.test(r))return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
2782
2782
|
`,exitCode:1};let i=parseInt(r,10);if(i<1)return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
2783
|
-
`,exitCode:1};let a=await W4(e,t);if(i>a.length)return{stdout:``,stderr:`tab-select index ${i} out of range (${a.length} tab${a.length===1?``:`s`} open)\n`,exitCode:1};let o=a[i-1].targetId;return await e.withTab(o,async t=>{await e.getTransport().send(`Page.bringToFront`,{},t)}),{stdout:`Selected tab ${i} [targetId: ${o}]\n`,stderr:``,exitCode:0}},
|
|
2783
|
+
`,exitCode:1};let a=await W4(e,t);if(i>a.length)return{stdout:``,stderr:`tab-select index ${i} out of range (${a.length} tab${a.length===1?``:`s`} open)\n`,exitCode:1};let o=a[i-1].targetId;return await e.withTab(o,async t=>{await e.getTransport().send(`Page.bringToFront`,{},t)}),{stdout:`Selected tab ${i} [targetId: ${o}]\n`,stderr:``,exitCode:0}},Mae=async({browser:e,state:t,positional:n,flags:r})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
2784
2784
|
`,exitCode:1};let i=U(r);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=parseInt(n[0],10),o=parseInt(n[1],10);return isNaN(a)||isNaN(o)||a<=0||o<=0?{stdout:``,stderr:`resize requires positive integer width and height
|
|
2785
|
-
`,exitCode:1}:(await e.withTab(i.targetId,async()=>{await e.setViewportOverride(i.targetId,a,o)}),t.snapshots.delete(i.targetId),{stdout:`Resized viewport to ${a}x${o}\n`,stderr:``,exitCode:0})},E3=r(`playwright-teleport`);function
|
|
2785
|
+
`,exitCode:1}:(await e.withTab(i.targetId,async()=>{await e.setViewportOverride(i.targetId,a,o)}),t.snapshots.delete(i.targetId),{stdout:`Resized viewport to ${a}x${o}\n`,stderr:``,exitCode:0})},E3=r(`playwright-teleport`);function Nae(){E3.info(`Listing available follower runtimes`);let e=o4();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
2786
2786
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
2787
2787
|
`,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
|
|
2788
2788
|
`)+`
|
|
2789
|
-
`,stderr:``,exitCode:0}}function
|
|
2790
|
-
`,stderr:``,exitCode:0}}function
|
|
2791
|
-
`,exitCode:1};let o=
|
|
2792
|
-
`,exitCode:1};let c=n.runtime;if(c){let e=
|
|
2789
|
+
`,stderr:``,exitCode:0}}function Pae({state:e,flags:t}){let n=U(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};E3.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(c4(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
2790
|
+
`,stderr:``,exitCode:0}}function Fae(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function Iae(e){return(o4()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function Lae({browser:e,state:t,flags:n}){let r=U(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=n.start||n[`teleport-start`],a=n.return||n[`teleport-return`];if(!i||!a)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
|
|
2791
|
+
`,exitCode:1};let o=Fae(i,a);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.timeout?parseInt(n.timeout,10):300;if(isNaN(s)||s<=0)return{stdout:``,stderr:`--timeout must be a positive number
|
|
2792
|
+
`,exitCode:1};let c=n.runtime;if(c){let e=Iae(c);if(e)return{stdout:``,stderr:e,exitCode:1}}let l=t.teleportWatchers.get(r.targetId);l&&(E3.info(`Disarming existing teleport watcher before re-arming`,{targetId:r.targetId}),c4(l),t.teleportWatchers.delete(r.targetId));let u;try{await e.attachToPage(r.targetId);let t=await e.evaluate(`window.location.href`);u=typeof t==`string`?t:String(t)}catch{}return E3.info(`Arming teleport via explicit subcommand`,{targetId:r.targetId,timeoutSec:s,runtimeSelection:c?`explicit`:`auto`}),E3.debug(`Arming teleport via explicit subcommand details`,{targetId:r.targetId,startPattern:i,returnPattern:a,timeoutSec:s,runtimeId:c??`auto`,leaderUrl:u}),l4(e,t,o.startPattern,o.returnPattern,s*1e3,c,u,r.targetId),{stdout:`Teleport armed on tab ${r.targetId}. Will trigger when URL matches ${i}\n`,stderr:``,exitCode:0}}const Rae=async e=>e.flags.list===`true`?Nae():e.flags.off===`true`?Pae(e):Lae(e),zae={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function Bae(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return zae[t]??`application/octet-stream`}function Vae(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}const Hae=new Map([[`teleport`,Rae],[`open`,w3],[`tab-new`,w3],[`fetch`,p2],[`goto`,_4],[`navigate`,_4],[`snapshot`,m3],[`frames`,h3],[`screenshot`,_3],[`click`,y2],[`type`,b2],[`fill`,x2],[`eval`,s2],[`eval-file`,c2],[`press`,S2],[`keydown`,C2],[`keyup`,w2],[`go-back`,v4],[`go-forward`,y4],[`reload`,b4],[`tab-list`,Aae],[`tab-close`,T3],[`close`,T3],[`dblclick`,T2],[`hover`,E2],[`select`,D2],[`check`,O2],[`uncheck`,k2],[`drag`,A2],[`resize`,Mae],[`dialog-accept`,n2],[`dialog-dismiss`,r2],[`cookie-list`,X0],[`cookie-get`,Z0],[`cookie-set`,Q0],[`cookie-delete`,kae],[`cookie-clear`,$0],[`localstorage-list`,x3.list],[`localstorage-get`,x3.get],[`localstorage-set`,x3.set],[`localstorage-delete`,x3.del],[`localstorage-clear`,x3.clear],[`sessionstorage-list`,S3.list],[`sessionstorage-get`,S3.get],[`sessionstorage-set`,S3.set],[`sessionstorage-delete`,S3.del],[`sessionstorage-clear`,S3.clear],[`record`,Z4],[`stop-recording`,Q4],[`tab-select`,jae],[`pdf`,g3],[`network-state-set`,x4],[`upload`,async({browser:e,fs:t,state:n,positional:r,flags:i})=>{if(r.length===0)return{stdout:``,stderr:`upload requires at least one file path
|
|
2793
2793
|
`,exitCode:1};let a=U(i);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=null,s=r,c=n.snapshots.get(a.targetId);if(c&&r.length>0&&c.refToBackendNodeId.has(r[0])&&(o=r[0],s=r.slice(1)),s.length===0)return{stdout:``,stderr:`upload requires at least one file path
|
|
2794
|
-
`,exitCode:1};let l=[];for(let e of s){let n=await t.readFile(e),r=e.split(`/`).pop()??e,i=
|
|
2794
|
+
`,exitCode:1};let l=[];for(let e of s){let n=await t.readFile(e),r=e.split(`/`).pop()??e,i=Bae(r),a=Vae(typeof n==`string`?new TextEncoder().encode(n):n);l.push({name:r,type:i,base64:a})}if(o){let t=c.refToBackendNodeId.get(o);await e.withTab(a.targetId,async n=>{let r=e.getTransport();await r.send(`DOM.enable`,{},n);let{object:i}=await r.send(`DOM.resolveNode`,{backendNodeId:t},n),a=await r.send(`Runtime.callFunctionOn`,{objectId:i.objectId,functionDeclaration:`function(filesData) {
|
|
2795
2795
|
const el = this;
|
|
2796
2796
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
2797
2797
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -2822,7 +2822,7 @@ Options:
|
|
|
2822
2822
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
2823
2823
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
2824
2824
|
return el.files.length;
|
|
2825
|
-
})()`,r=await e.getTransport().send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},t);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let u=s.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${s.length} file(s): ${u}\n`,stderr:``,exitCode:0}}],[`state-save`,
|
|
2825
|
+
})()`,r=await e.getTransport().send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},t);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let u=s.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${s.length} file(s): ${u}\n`,stderr:``,exitCode:0}}],[`state-save`,v3],[`state-load`,y3],[`console`,G0],[`requests`,E4],[`request`,D4],[`request-headers`,O4],[`request-body`,k4],[`response-headers`,A4],[`response-body`,j4],[`mousemove`,F2],[`mousedown`,I2],[`mouseup`,L2],[`mousewheel`,R2],[`drop`,z2],[`route`,i3],[`route-list`,a3],[`unroute`,o3],[`generate-locator`,e2],[`highlight`,t2]]);function D3(e){return`Usage: ${e} <command> [args...]
|
|
2826
2826
|
|
|
2827
2827
|
Commands:
|
|
2828
2828
|
open [url|/vfs/path] [--foreground|--fg] [--runtime=<id>] [--discover]
|
|
@@ -2949,12 +2949,12 @@ Commands:
|
|
|
2949
2949
|
Highlight an element with a visual overlay (--hide to remove)
|
|
2950
2950
|
help Show this help message
|
|
2951
2951
|
|
|
2952
|
-
Aliases: ${Ci.filter(t=>t!==e).join(`, `)}`}function
|
|
2953
|
-
`;return{...n,stderr:n.stderr+a}}async function
|
|
2954
|
-
`,stderr:``,exitCode:0};let s=o[0],c=o.slice(1),l=await
|
|
2955
|
-
`);let a=[];for(let[e,t]of
|
|
2952
|
+
Aliases: ${Ci.filter(t=>t!==e).join(`, `)}`}function Uae(e,t){return Ar(e,t,D3(e))}function Wae(){let e=(bi.string??[]).map(e=>`--${e}`),t=new Set(bi.boolean??[]);for(let[e,n]of Object.entries(bi.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function Gae(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function Kae(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}function qae(e){return typeof e.getTabLockStats==`function`?e.getTabLockStats():void 0}function Jae(e,t,n){if(!t||typeof e.getTabLockStats!=`function`)return n;let r=e.getTabLockStats(),i=r.totalWaitMs-t.totalWaitMs;if(i<2e3)return n;let a=`note: browser bridge contended — tab-lock waits totaled ${(i/1e3).toFixed(1)}s while this command ran (queue depth ${r.queueDepth}). playwright-cli commands share one browser and run serialized; stagger concurrent callers or reduce fan-out.
|
|
2953
|
+
`;return{...n,stderr:n.stderr+a}}async function Yae(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Iee(e,t.tab,n):null)??r}\n`,exitCode:1}}async function Xae(e,t,n,r){let i=V(Gae(n),Kae(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Lee(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`)return{answer:{stdout:Uae(e,t),stderr:``,exitCode:0}};let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-DEw-pWqJ.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function Zae(e,t,n){let r=D3(e),i=t?Pee(t,n):null,a=Wae();return H(e,async o=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`)return{stdout:r+`
|
|
2954
|
+
`,stderr:``,exitCode:0};let s=o[0],c=o.slice(1),l=await Xae(e,s,c,a);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=qae(t),p,m=Hae.get(s);if(!m)p={stdout:``,stderr:`Unknown command: ${s}\nRun "playwright-cli help" for usage.\n`,exitCode:1};else try{p=await m({browser:t,fs:n,state:i,positional:u,flags:d})}catch(e){p=await Yae(t,d,e)}let h=d.tab??null,g=null;zee.has(s)&&p.exitCode===0&&h&&(g=await c3(t,n,h,i));try{await l3(n,i,{command:s,args:c,result:p,snapshotPath:g,targetId:h})}catch{}return Jae(t,f,p)})}const Qae=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`screencapture`]],[`Audio`,[`say`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`]],[`Build tools`,[`tsc`,`test`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Ci,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`fswatch`]],[`Scoops & agents`,[`agent`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`meminfo`]]]);function $ae(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
|
|
2955
|
+
`);let a=[];for(let[e,t]of Qae){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
|
|
2956
2956
|
`)+`
|
|
2957
|
-
`}function
|
|
2957
|
+
`}function eoe(e={}){return H(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
2958
2958
|
|
|
2959
2959
|
Usage: commands [command]
|
|
2960
2960
|
|
|
@@ -2965,7 +2965,7 @@ If a command name is provided, shows help for that command.
|
|
|
2965
2965
|
Otherwise, lists all available commands.
|
|
2966
2966
|
|
|
2967
2967
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
2968
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout
|
|
2968
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:$ae(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function toe(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
2969
2969
|
|
|
2970
2970
|
Usage:
|
|
2971
2971
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
@@ -2987,8 +2987,8 @@ Notes:
|
|
|
2987
2987
|
unless --force is passed.
|
|
2988
2988
|
- Weights are read by the speech engines via the preview SW from the
|
|
2989
2989
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
2990
|
-
`,stderr:``,exitCode:e}}function O3(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const
|
|
2991
|
-
`)}\n`}function L3(e){return`${
|
|
2990
|
+
`,stderr:``,exitCode:e}}function O3(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const noe=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function roe(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return noe.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function k3(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function ioe(e,t,n){let r=roe(e);if(`error`in r)return O3(r.error);let i=Ga(r.repo,r.to,t.cwd),a=``;try{let e=await Ba({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${k3(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${k3(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof za?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):O3(e instanceof Error?e.message:String(e))}}function aoe(e){return{name:`hf`,async execute(t,n){if(t.length===0||jr(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return toe(+(t.length===0));let r=t[0];return r===`download`?ioe(t.slice(1),n,e.fetch):O3(`unknown subcommand: ${r}`)}}}const ooe=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function soe(e){return _i(e,ooe)}function A3(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function coe(e){let t={};return e.has(`--vid`)&&(t.vendorId=A3(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=A3(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=A3(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=A3(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function j3(e){let t=ra(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function M3(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function loe(e){return e.toString(16).padStart(2,`0`)}function N3(e){return`0x${e.toString(16).padStart(4,`0`)}`}function P3(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${N3(e.usagePage)}:${N3(e.usage??0)}`;return`${e.handle}\t${N3(e.vendorId)}:${N3(e.productId)}${r}\t${t}${n}`}function F3(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function I3(e){return`${e.map(P3).join(`
|
|
2991
|
+
`)}\n`}function L3(e){return`${loe(e.reportId)} ${M3(e.bytes)}`.trimEnd()}function R3(e){return{stdout:e,stderr:``,exitCode:0}}function z3(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const uoe=`hid - access HID devices via WebHID
|
|
2992
2992
|
|
|
2993
2993
|
Usage: hid <subcommand> [options]
|
|
2994
2994
|
|
|
@@ -3012,21 +3012,21 @@ Options:
|
|
|
3012
3012
|
-h, --help
|
|
3013
3013
|
|
|
3014
3014
|
Report payloads are capped at ${CH} bytes (4 MiB).
|
|
3015
|
-
`;function B3(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return R3(t)}return R3(e.length?`${M3(e)}\n`:``)}function
|
|
3015
|
+
`;function B3(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return R3(t)}return R3(e.length?`${M3(e)}\n`:``)}function doe(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function foe(e){let t=await e.list();return t.length===0?R3(`no granted HID devices
|
|
3016
3016
|
`):R3(`${t.map(P3).join(`
|
|
3017
|
-
`)}\n`)}async function
|
|
3018
|
-
`)}\n`:``)}async function
|
|
3017
|
+
`)}\n`)}async function poe(e,t){let n=e.get(`--__resolved`),r=coe(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?z3(`request: missing resolved handle`):R3(I3(F3(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Yt();return a?moe(r,i,a,t):R3(I3(F3(await t.request(r),i)))}async function moe(e,t,n,r){let i=await Nn(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=_H();if(!t)return z3(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=SH(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return z3(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=F3(s.length>0?s:[],t);return c.length===0?z3(`request: granted device could not be re-acquired`):R3(I3(c))}async function hoe(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),R3(``)):z3(`${e}: handle required`)}async function goe(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return z3(`${e}: handle and report-id required`);let o=A3(a,`report-id`),s=j3(n);return s.length>4194304?z3(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),R3(``))}async function _oe(e,t,n){let[,r,i]=e;return!r||i===void 0?z3(`feature-get: handle and report-id required`):B3((await t.receiveFeatureReport(r,A3(i,`report-id`))).bytes,n)}async function voe(e,t,n){let r=e[1];if(!r)return z3(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(L3(e))});try{await doe(t.signal)}finally{await a()}return R3(i.length?`${i.join(`
|
|
3018
|
+
`)}\n`:``)}async function yoe(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return z3(`query: handle and report-id required`);let s=A3(o,`report-id`),c=j3(t);if(c.length>4194304)return z3(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?A3(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?z3(`query: no input report within ${l}ms`):i?B3(t.bytes,!0):R3(`${L3(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function boe(e,t,n){let{positionals:r,flags:i,bools:a}=soe(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return foe(n);case`request`:return poe(i,n);case`open`:case`close`:return hoe(o,r,n);case`send`:case`feature-send`:return goe(o,r,t,n);case`feature-get`:return _oe(r,n,s);case`watch`:return voe(r,t,n);case`query`:return yoe(r,t,i,n,s);default:return z3(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function xoe(){return H(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return R3(uoe);let n=WH(a(),i());if(!n)return z3(`WebHID is unavailable in this environment`);try{return await boe(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?z3(`user cancelled or no device selected`):z3(t)}})}function V3(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
3019
3019
|
|
|
3020
3020
|
Usage: imgcat <path> [path...]
|
|
3021
3021
|
|
|
3022
3022
|
Options:
|
|
3023
3023
|
-h, --help Show this help message
|
|
3024
|
-
`,stderr:``,exitCode:0}}function
|
|
3024
|
+
`,stderr:``,exitCode:0}}function Soe(e={}){return H(`imgcat`,async(t,n)=>{if(t.length===0||jr(t))return V3();let r=V(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return V3();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
|
|
3025
3025
|
`,exitCode:1};if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
3026
|
-
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=qt(t);if(!Kt(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
3027
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
3028
|
-
`]),
|
|
3029
|
-
`)}\n`}function
|
|
3026
|
+
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=qt(t);if(!Kt(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const Coe=new Set([`run`,`run-script`]),woe=new Set([`test`,`start`,`stop`,`restart`]),Toe=new Set([` `,` `,`
|
|
3027
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),Eoe=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
3028
|
+
`]),Doe=/^[A-Za-z_][A-Za-z0-9_]*=/,Ooe=/^[@A-Za-z0-9._-]+$/,koe=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),Aoe=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),joe=new Set([`ipx`,`npx`]);function Moe(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function Noe(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*H3(e){let t=_e(e);for(;yield t,t!==`/`;)t=he(t).dir}function Poe(e){if(typeof e!=`object`||!e)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function U3(e){return typeof e==`string`?e:void 0}async function Foe(e,t){for(let n of H3(t)){let t=ve(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await Noe(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:U3(r.name),version:U3(r.version),scripts:Poe(r.scripts)}}return null}function Ioe(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(Toe.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function Loe(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(Eoe.has(i)){r=!0,n++;continue}let a=Ioe(e,n);if(a.end===a.start){n++;continue}if(r&&!Doe.test(a.text)){if(Aoe.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function Roe(e,t){return!Ooe.test(e)||koe.has(e)||joe.has(e)?!1:!t.isRegistered(e)}async function zoe(e,t){let n=Loe(e).filter(e=>Roe(e.text,t));if(n.length===0)return e;let r=[];for(let e of n)await t.hasLocalBin(e.text)&&r.push(e);if(r.length===0)return e;let i=e;for(let e of[...r].reverse())i=`${i.slice(0,e.start)}ipx ${i.slice(e.start)}`;return i}function W3(e){let t=[];for(let n of H3(e))t.push(ve(n,`node_modules`,`.bin`));return t}function Boe(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...W3(e.dir),i].filter(e=>e!==``).join(`:`),npm_lifecycle_event:t,npm_lifecycle_script:n};return e.name!==void 0&&(a.npm_package_name=e.name),e.version!==void 0&&(a.npm_package_version=e.version),a}function G3(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function Voe(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${ve(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${G3(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
3029
|
+
`)}\n`}function Hoe(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function Uoe(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}Hoe(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function K3(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function Woe(e,t,n,r){let i=r.length>0?` ${r.map(Moe).join(` `)}`:``,a=[],o=e.scripts[`pre${t}`];o!==void 0&&a.push({event:`pre${t}`,body:o}),a.push({event:t,body:`${n}${i}`});let s=e.scripts[`post${t}`];return s!==void 0&&a.push({event:`post${t}`,body:s}),a}async function Goe(e,t,n,r){if(n===`start`&&await r.exists(ve(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function Koe(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of W3(t.dir))if(await e.exists(ve(r,n)))return!0;return!1}}}async function qoe(e,t,n,r,i,a){let o=i.exec;if(!o)return K3(e,`run requires shell exec support, which this context does not provide`);let s=Koe(a.fs,t,i),c=G3(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await zoe(a.body,s),{cwd:t.dir,env:Boe(t,a.event,a.body,i),stdin:ra(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function q3(e,t,n,r){let i;try{i=await Foe(r.fs,n.cwd)}catch(t){return K3(e,t instanceof Error?t.message:String(t))}if(!i)return K3(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=Uoe(t);if(o===void 0)return{stdout:Voe(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await Goe(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return K3(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${ve(i.dir,`package.json`)} defines no scripts)`}`)}return qoe(e,i,Woe(i,o,c,s),a,n,r)}const Joe=new Set([`install`,`i`,`add`]),Yoe=new Set([`uninstall`,`remove`,`rm`,`un`]),Xoe=new Set([`list`,`ls`]),Zoe=new Set([`-g`,`--global`,`--location=global`]);function J3(e){return`${e} - install packages from the npm registry into node_modules
|
|
3030
3030
|
and run package.json scripts
|
|
3031
3031
|
|
|
3032
3032
|
Usage:
|
|
@@ -3087,15 +3087,15 @@ are recorded in <cwd>/package.json under dependencies. With -g, packages go
|
|
|
3087
3087
|
to /shared/lib/node_modules and deps are recorded in /shared/lib/package.json.
|
|
3088
3088
|
Existing fields are preserved. Idempotent: re-installing an already-satisfied
|
|
3089
3089
|
package is a clean no-op.
|
|
3090
|
-
`}function
|
|
3090
|
+
`}function Qoe(e){return Y3(e)}function Y3(e){let t=!1,n=[];for(let r of e){if(Zoe.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function $oe(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function X3(e){return e instanceof Error?e.message:String(e)}async function Z3(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function ese(e,t,n){let r;try{r=await Ua({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Ja?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${X3(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${X3(t.error)}`);return{stdout:i.length>0?`${i.join(`
|
|
3091
3091
|
`)}\n`:``,stderr:a.length>0?`${a.join(`
|
|
3092
|
-
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function Q3(e,t,n,r){let{global:i,specs:a}=
|
|
3092
|
+
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function Q3(e,t,n,r){let{global:i,specs:a}=Qoe(t);if(i&&a.length===0)return{stdout:``,stderr:`${e}: global install requires at least one package name\n`,exitCode:1};if(a.length===0)return ese(e,n,r);let o;try{o=await Ka(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${X3(t)}\n`,exitCode:1}}let s=o.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),c=o.errors.map(t=>`${e}: failed to install ${t.spec}: ${X3(t.error)}`);return i&&o.results.length>0&&await Z3(r),{stdout:s.length>0?`${s.join(`
|
|
3093
3093
|
`)}\n`:``,stderr:c.length>0?`${c.join(`
|
|
3094
|
-
`)}\n`:``,exitCode:o.errors.length===0?0:1}}function
|
|
3095
|
-
`)}\n`}async function
|
|
3094
|
+
`)}\n`:``,exitCode:o.errors.length===0?0:1}}function tse(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
|
|
3095
|
+
`)}\n`}async function nse(e,t,n,r){let{global:i,specs:a}=Y3(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await Wa(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${X3(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${X3(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await Z3(r),{stdout:s.length>0?`${s.join(`
|
|
3096
3096
|
`)}\n`:``,stderr:l.length>0?`${l.join(`
|
|
3097
|
-
`)}\n`:``,exitCode:+!!u}}async function
|
|
3098
|
-
`)}\n`}const
|
|
3097
|
+
`)}\n`:``,exitCode:+!!u}}async function rse(e,t,n,r){let{global:i}=Y3(t);try{let e=i?await Va(r.fs):await La(r.fs,n.cwd);return{stdout:tse(i?Ni:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${X3(t)}\n`,exitCode:1}}}async function ise(e,t,n,r){let{global:i}=Y3(t);return{stdout:`${i?Ui:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function $3(e,t){let n=e===`i`;return H(e,async(r,i)=>{if($oe(r))return{stdout:J3(e),stderr:``,exitCode:0};if(n)return Q3(e,r,i,t);if(r.length===0)return{stdout:J3(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return Joe.has(a)?Q3(e,o,i,t):Yoe.has(a)?nse(e,o,i,t):Xoe.has(a)?rse(e,o,i,t):a===`root`?ise(e,o,i,t):Coe.has(a)?q3(e,o,i,{fs:t.fs}):woe.has(a)?q3(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const e6=`0.5.424`,t6=`v86 is not installed in node_modules: run \`${Zi} v86@${e6}\` (no network fallback)`;let n6=null;async function ase(e={}){return n6||=ose(e.ipk).catch(e=>{throw n6=null,e}),n6}async function r6(e){let t;try{t=await Qi(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=he(t.path).dir,r=`${n}/build/libv86.mjs`,i=`${n}/build/v86.wasm`;if(!await e.reader.exists(r)||!await e.reader.exists(i))return null;try{let n=await e.reader.readFile(t.path),a=String(JSON.parse(n).version??`0.5.424`);return{jsSource:await e.reader.readFile(r),wasmBytes:await e.readBytes(i),version:a}}catch{return null}}async function ose(e){if(Ji())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(t6);let t=await r6(e);if(!t)throw Error(t6);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await $ee(t.wasmBytes),version:t.version}}function sse(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const i6={command:`biome`,example:`biome check foo.js`,bootstrap:`${Zi} ${JJ}`},a6={command:`playwright-cli`,example:`playwright-cli open https://example.com`},o6={command:`puppeteer`,example:`puppeteer open https://example.com`},s6={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${Zi} @imagemagick/magick-wasm@${ja}`},c6={...s6,command:`magick`,example:`magick input.png output.jpg`},l6={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},u6={"@biomejs/biome":i6,biome:i6,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${Zi} esbuild-wasm@${na}`},playwright:a6,"@playwright/test":a6,"playwright-core":a6,puppeteer:o6,"puppeteer-core":o6,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Yi},"pdf-poppler":l6,"pdf-to-img":l6,pdf2pic:l6,"pdf-img-convert":l6,poppler:l6,"poppler-utils":l6,imagemagick:s6,"imagemagick-cli":s6,"imagemagick-convert":s6,"magick-cli":c6,"@imagemagick/magick-wasm":c6,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${Zi} @ffmpeg/core@${b1}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${Zi} @ffmpeg/core@${b1}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${Zi} v86@${e6}`}};function cse(e){return Object.hasOwn(u6,e)?u6[e]:void 0}function d6(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function lse(e,t,n,r){let i=n.length?[r.command,...n].map(d6).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(d6).join(` `)}`),`${a.join(`
|
|
3098
|
+
`)}\n`}const use=/require\(\s*["']([^"']+)["']\s*\)/;function f6(e){return`${e} - run an installed package's executable bin
|
|
3099
3099
|
|
|
3100
3100
|
Usage:
|
|
3101
3101
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -3108,12 +3108,12 @@ Options:
|
|
|
3108
3108
|
--force Install a package even when a SLICC built-in shadows it
|
|
3109
3109
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
3110
3110
|
-h, --help Show this help message
|
|
3111
|
-
`}async function p6(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function m6(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function
|
|
3112
|
-
`)}\n`:``}}catch(n){return{error:y6(e,`failed to install '${t}': ${v6(n)}`)}}}async function
|
|
3113
|
-
`,exitCode:1};let r=
|
|
3114
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
3115
|
-
`,exitCode:2};let i=x6(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=
|
|
3116
|
-
`,exitCode:2}:
|
|
3111
|
+
`}async function p6(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function m6(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function dse(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*h6(e,t=!1){if(t){yield Ui;return}let n=_e(e);for(;yield ve(n,`node_modules`),n!==`/`;)n=he(n).dir;yield Ui}async function fse(e,t,n,r=!1){for(let i of h6(t,r)){let t=ve(i,`.bin`,n);if(!await m6(e,t))continue;let r=await p6(e,t),a=use.exec(r),o=he(t).dir;return{binFilePath:a?ve(o,a[1]):t,argvName:t}}return null}function g6(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function pse(e,t){if(typeof e==`string`)return{binName:g6(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,g6(t)];for(let t of n){let n=Object.getOwnPropertyDescriptor(e,t)?.value;if(typeof n==`string`)return{binName:t,binPath:n}}let r=Object.entries(e).filter(e=>typeof e[1]==`string`);if(r.length===1){let[e,t]=r[0];return{binName:e,binPath:t}}return null}async function mse(e,t,n,r=!1){for(let i of h6(t,r)){let t=ve(i,n),r=ve(t,`package.json`);if(!await m6(e,r))continue;let a;try{a=JSON.parse(await p6(e,r))}catch{return null}let o=pse(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:ve(t,s),argvName:ve(i,`.bin`,o.binName)}}return null}async function _6(e,t,n,r=!1){return await fse(e,t,n,r)??await mse(e,t,n,r)}async function hse(e,t,n){for(let r of h6(t))if(await m6(e,ve(r,n,`package.json`)))return!0;return!1}function v6(e){return e instanceof Error?e.message:String(e)}function y6(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function gse(e,t,n,r){try{let i=await Ka([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:y6(e,`failed to install '${t}': ${v6(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
|
|
3112
|
+
`)}\n`:``}}catch(n){return{error:y6(e,`failed to install '${t}': ${v6(n)}`)}}}async function _se(e,t,n,r){return await m6(r,n)?null:await dse(r,n)?y6(e,`bin target '${n}' is a directory, not a file`):y6(e,`bin file '${n}' for '${t}' does not exist`)}async function vse(e,t,n,r,i,a){if(await hse(a.fs,i.cwd,t))return{error:y6(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:cse(t);if(o)return{error:{stdout:``,stderr:lse(e,t,n,o),exitCode:1}};let s=await gse(e,t,i,a);if(`error`in s)return s;let c=await _6(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:y6(e,`package '${t}' was installed but does not expose an executable bin`)}}function b6(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:f6(e),stderr:``,exitCode:+(n.length===0)};let i=n[0]===`--force`,a=i?n.slice(1):n,o=a[0]===`--global`;o&&(a=a.slice(1));let s=a;if(s.length===0)return{stdout:f6(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await _6(t.fs,r.cwd,c,o)}catch(t){return y6(e,v6(t))}let d=``;if(!u){if(o)return y6(e,`no global bin '${c}' found in ${Ui}`);let n=await vse(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await _se(e,c,u.binFilePath,t.fs);if(f)return f;let p=await hG(nH(await p6(t.fs,u.binFilePath)),[`node`,u.argvName,...l],r,void 0,{filename:u.binFilePath});return{stdout:p.stdout,stderr:d+p.stderr,exitCode:p.exitCode}}}}const yse=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function bse(e={}){return H(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Tse();let n=e.processManager??xse();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
3113
|
+
`,exitCode:1};let r=Sse(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Cse(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
3114
|
+
`)}\n`:``,exitCode:+!i}})}function xse(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Sse(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
|
|
3115
|
+
`,exitCode:2};let i=x6(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=wse(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
|
|
3116
|
+
`,exitCode:2}:yse.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Cse(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function x6(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function wse(e){return e===`-9`?`SIGKILL`:x6(e.slice(1))}function Tse(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
3117
3117
|
|
|
3118
3118
|
Send a signal to one or more processes tracked by the kernel.
|
|
3119
3119
|
|
|
@@ -3156,8 +3156,8 @@ Examples:
|
|
|
3156
3156
|
panels List the registered panel ids
|
|
3157
3157
|
|
|
3158
3158
|
Zones: ${S6.join(`, `)}
|
|
3159
|
-
`,
|
|
3160
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const k6=Xa.id;function
|
|
3159
|
+
`,Ese=new Set([`files`,`term`,`memory`,`monitor`]),w6=`sprinkle:`;function T6(e){return e===`chat`||Ese.has(e)||e.startsWith(w6)?e:`${w6}${e}`}function Dse(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const E6=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Ose(e){let t=e[0],n=t?mb(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function kse(e){let t=e[0];return S6.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${S6.join(`|`)}>`}}function Ase(e){let[t,n]=e;return!t||!S6.includes(n)?{error:`usage: layout open <surfaceId> <${S6.join(`|`)}>`}:{kind:`open`,surfaceId:T6(t),zone:n}}function jse(e){let t=e[0];return t?{kind:`close`,surfaceId:T6(t)}:{error:`usage: layout close <surfaceId>`}}function Mse(e){let[t,n]=e;return!t||!S6.includes(n)?{error:`usage: layout move <surfaceId> <${S6.join(`|`)}>`}:{kind:`move`,surfaceId:T6(t),zone:n}}function Nse(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=Dse(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function Pse(e){let t=e[0];if(!t)return{error:E6};let n={};for(let t=1;t<e.length;t+=2){let r=Nse(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:E6}:{kind:`size`,surfaceId:T6(t),size:n}}function Fse(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function D6(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function O6(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:T6(n)}:{kind:`hide`,panelId:T6(n)}:{error:`usage: layout ${e} <panelId>`}}function Ise(){let e=mb(ub);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Lse(e){let[t,...n]=e;switch(t){case`set`:return Ose(n);case`chat`:return kse(n);case`open`:return Ase(n);case`close`:return jse(n);case`move`:return Mse(n);case`size`:return Pse(n);case`reset`:return{kind:`reset`};case`edit`:return Ise();case`load`:return D6(`load`,n);case`save`:return Fse(n);case`delete`:return D6(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return O6(`show`,n);case`hide`:return O6(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function Rse(){return H(`layout`,async e=>{if(jr(e))return{stdout:e[0]?.startsWith(`-`)?C6:Ar(`layout`,e[0],C6),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(pb).join(`, `)}\ndefault: ${ub}\n`,stderr:``,exitCode:0};let t=Lse(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=i();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
|
|
3160
|
+
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const k6=Xa.id;function zse(){return`local-llm — inspect and configure the Local LLM provider
|
|
3161
3161
|
|
|
3162
3162
|
Usage:
|
|
3163
3163
|
local-llm Show current config + verify connection
|
|
@@ -3176,20 +3176,20 @@ Common base URLs:
|
|
|
3176
3176
|
llama.cpp http://localhost:8080/v1
|
|
3177
3177
|
vLLM http://localhost:8000/v1
|
|
3178
3178
|
Jan http://localhost:1337/v1
|
|
3179
|
-
`}function A6(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function j6(e){return e.map(e=>` • ${e}`)}function
|
|
3179
|
+
`}function A6(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function j6(e){return e.map(e=>` • ${e}`)}function Bse(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${A6(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
3180
3180
|
`)+`
|
|
3181
|
-
`,exitCode:1}}function
|
|
3181
|
+
`,exitCode:1}}function Vse(e,t){return{stdout:[`✓ ${e}`,` runtime: ${A6(t.runtime,!0)}`,` models: ${t.models.length}`,...j6(t.models)].join(`
|
|
3182
3182
|
`)+`
|
|
3183
|
-
`,stderr:``,exitCode:0}}function
|
|
3183
|
+
`,stderr:``,exitCode:0}}function Hse(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${A6(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...j6(t.models)].join(`
|
|
3184
3184
|
`)+`
|
|
3185
|
-
`,stderr:``,exitCode:0}}function
|
|
3186
|
-
`,exitCode:1};let c=await a(s,t(k6)??void 0);if(!c.ok)return
|
|
3185
|
+
`,stderr:``,exitCode:0}}function Use(){return H(k6,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:zse(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BwOFno6K.js`).then(e=>e.n),o=e[0]??`status`;if(o!==`status`&&o!==`discover`)return{stdout:``,stderr:`Unknown subcommand: ${o}. See \`local-llm --help\`.\n`,exitCode:2};let s=r(k6);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
3186
|
+
`,exitCode:1};let c=await a(s,t(k6)??void 0);if(!c.ok)return Bse(s,c);if(o===`discover`){let e=n(k6)??``;return i(k6,e,s,c.models.join(`, `)),Hse(s,c)}return Vse(s,c)})}function Wse(){return{stdout:`usage: man <topic>
|
|
3187
3187
|
|
|
3188
3188
|
Fetches documentation for a given topic from sliccy.com.
|
|
3189
|
-
`,stderr:``,exitCode:0}}function
|
|
3189
|
+
`,stderr:``,exitCode:0}}function Gse(e){return e.replace(/<[^>]*>/g,``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).trimEnd()}function Kse(){let e=y();return H(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return Wse();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
3190
3190
|
For example, try 'man commands'.
|
|
3191
|
-
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:
|
|
3192
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
3191
|
+
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:Gse(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
3192
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const qse=[`--silent`,`-s`,`--interactive`,`-i`],M6=r(`mcp-command`),N6=`/workspace/.mcp/aliases`;function P6(e){return{stdout:e,stderr:``,exitCode:0}}function F6(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function I6(e){return F6(`mcp: ${e}`)}function Jse(){return`usage: mcp <command> [args]
|
|
3193
3193
|
|
|
3194
3194
|
Commands:
|
|
3195
3195
|
add <url> <name> Register an MCP server. Runs OAuth if required.
|
|
@@ -3211,7 +3211,7 @@ Examples:
|
|
|
3211
3211
|
mcp search forecast
|
|
3212
3212
|
mcp auth weather
|
|
3213
3213
|
mcp delete weather
|
|
3214
|
-
`}function
|
|
3214
|
+
`}function Yse(e={}){return H(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return P6(Jse());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await Xse(r,e);case`list`:case`ls`:return await Qse(r,e);case`delete`:case`rm`:return await tce(r,e);case`invoke`:return await nce(r,e);case`search`:return await $se(r,e);case`refresh`:return await fce(r,e);case`auth`:return await pce(r,e);default:return F6(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return M6.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof Za?F6(`mcp ${n}: ${t}`,124):F6(`mcp ${n}: ${t}`)}})}async function Xse(e,t){if(jr(e))return P6(`usage: mcp add <url> <name>
|
|
3215
3215
|
|
|
3216
3216
|
Probes <url> with an unauthenticated MCP \`initialize\`. If the server
|
|
3217
3217
|
returns 401, runs OAuth discovery → dynamic client registration → PKCE
|
|
@@ -3220,20 +3220,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
3220
3220
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
3221
3221
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
3222
3222
|
short name resolves on the PATH.
|
|
3223
|
-
`);let n=V(e,{});if(`error`in n)return I6(n.error);if(n.positionals.length<2)return F6(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return F6(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return F6(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-
|
|
3223
|
+
`);let n=V(e,{});if(`error`in n)return I6(n.error);if(n.positionals.length<2)return F6(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return F6(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return F6(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r);if(await a(i,t.fs))return F6(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-Beg9O208.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await Zse(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>V6(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await gce(i,t);let m=await W6(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Dx4_SDNT.js`);e({name:i,serverUrl:r,auth:u})}return P6([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${N6}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
3224
3224
|
`)+`
|
|
3225
|
-
`)}async function
|
|
3226
|
-
`);let n=V(e,{});if(`error`in n)return I6(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-
|
|
3225
|
+
`)}async function Zse(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),c=await mce(r.oauthFetchImpl),l=r.oauthLauncher??await H6(),u=await i(e,n,c);M6.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await Qa(),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function Qse(e,t){if(jr(e))return P6(`usage: mcp list
|
|
3226
|
+
`);let n=V(e,{});if(`error`in n)return I6(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-Dx4_SDNT.js`);await r();let{listServers:i}=await import(`./store-BehdBrM6.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return P6("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return P6(L6(s))}function L6(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
|
|
3227
3227
|
`)+`
|
|
3228
|
-
`}async function
|
|
3228
|
+
`}async function $se(e,t){if(jr(e))return P6(`usage: mcp search <query>
|
|
3229
3229
|
|
|
3230
3230
|
Case-insensitive substring search across the cached tools of every
|
|
3231
3231
|
registered MCP server. Matches tool name OR description and prints a
|
|
3232
3232
|
table of (server, tool, description, match-field) rows.
|
|
3233
|
-
`);let n=V(e,{});if(`error`in n)return I6(n.error);if(n.positionals.length===0)return F6(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-
|
|
3234
|
-
`);let n=V(e,{});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-
|
|
3233
|
+
`);let n=V(e,{});if(`error`in n)return I6(n.error);if(n.positionals.length===0)return F6(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-Dx4_SDNT.js`);await a();let{listServers:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return P6("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return P6(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,ece(e.description),e.match]);return P6(L6(u))}function ece(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function tce(e,t){if(e.length===0||jr(e))return e.length===0?F6(`mcp delete: expected <name>`):P6(`usage: mcp delete <name>
|
|
3234
|
+
`);let n=V(e,{});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-Dx4_SDNT.js`);await i(r);let{deleteServer:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r),s=await o(r,t.fs);await _ce(r,t),await vce(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){M6.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?F6(`mcp delete: no server, alias, or account found for "${r}"`):P6([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
|
|
3235
3235
|
`)+`
|
|
3236
|
-
`)}async function
|
|
3236
|
+
`)}async function nce(e,t){if(e.length===0)return F6(`mcp invoke: expected <name>`);if(jr(e.slice(0,1)))return P6(ice());let n=V([e[0]],{});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-Dx4_SDNT.js`);await a(r);let{getServer:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return F6(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||jr(i.slice(0,1)))return P6(ace(r,s,c));let l=V([i[0]],{});if(`error`in l)return I6(l.error);let u=l.positionals[0];if(!u)return F6(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return F6(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=rce(i.slice(1));if(jr(p))return P6(oce(r,d));let h=sce(p,d.inputSchema);if(!h.ok)return F6(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-Beg9O208.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>V6(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=dce(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function rce(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=R6(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=R6(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function R6(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function ice(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
3237
3237
|
|
|
3238
3238
|
mcp invoke <name> List tools on <name>.
|
|
3239
3239
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -3250,20 +3250,20 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
3250
3250
|
string/integer/number/boolean. Bare \`--flag\` (no value or "--" next)
|
|
3251
3251
|
is treated as true. Repeating a flag accumulates into an array when
|
|
3252
3252
|
the schema declares \`type: array\`.
|
|
3253
|
-
`}function
|
|
3253
|
+
`}function ace(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
|
|
3254
3254
|
`)+`
|
|
3255
|
-
`}function z6(e){return e??{}}function
|
|
3255
|
+
`}function z6(e){return e??{}}function oce(e,t){let n=z6(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
|
|
3256
3256
|
`)+`
|
|
3257
3257
|
`;a.push(``),a.push(`Flags:`);let s=o.map(e=>` --${e} <${r[e]?.type??`string`}>`),c=s.reduce((e,t)=>Math.max(e,t.length),0);for(let e=0;e<o.length;e++){let t=o[e],n=r[t]?.description??``,l=i.has(t)?` (required)`:``;a.push(`${s[e].padEnd(c)} ${n}${l}`.trimEnd())}return a.join(`
|
|
3258
3258
|
`)+`
|
|
3259
|
-
`}function
|
|
3259
|
+
`}function sce(e,t){let n=z6(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a={},o=0;for(;o<e.length;){let t=cce(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!(e in a))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function cce(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=lce(i),s=n[a],c=s?.type??`string`,l=c===`array`,u=(l?s?.items?.type:void 0)??`string`,d=o,f;if(d===void 0){let n=e[t+1];if(c===`boolean`&&(n===void 0||n.startsWith(`--`)))return r[a]=!0,{ok:!0,nextIndex:t+1};if(n===void 0)return{ok:!1,error:`flag --${a} requires a value`};d=n,f=t+2}else f=t+1;let p=uce(d,l?u:c);if(!p.ok)return{ok:!1,error:`--${a}: ${p.error}`};if(l){let e=r[a];Array.isArray(e)?e.push(p.value):r[a]=[p.value]}else r[a]=p.value;return{ok:!0,nextIndex:f}}function lce(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function uce(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};default:return{ok:!0,value:e}}}function dce(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
|
|
3260
3260
|
`),a=i.endsWith(`
|
|
3261
3261
|
`)?``:`
|
|
3262
|
-
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function
|
|
3262
|
+
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function fce(e,t){if(e.length===0||jr(e))return e.length===0?F6(`mcp refresh: expected <name>`):P6(`usage: mcp refresh <name>
|
|
3263
3263
|
|
|
3264
3264
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
3265
3265
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
3266
|
-
`);let n=V(e,{});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-
|
|
3266
|
+
`);let n=V(e,{});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-Dx4_SDNT.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return F6(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-Beg9O208.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>V6(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return F6(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await W6(r,f,t);return P6(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function pce(e,t){if(jr(e))return P6(`usage: mcp auth <name> [--silent | --interactive]
|
|
3267
3267
|
|
|
3268
3268
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
3269
3269
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -3275,7 +3275,7 @@ Options:
|
|
|
3275
3275
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
3276
3276
|
directly. Use after revoking a refresh token or
|
|
3277
3277
|
when the AS no longer accepts the cached one.
|
|
3278
|
-
`);let n=V(e,{bool:
|
|
3278
|
+
`);let n=V(e,{bool:qse});if(`error`in n)return I6(n.error);let r=n.positionals[0];if(!r)return F6(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return F6(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-Dx4_SDNT.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-BehdBrM6.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return F6(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return F6(`mcp auth: server "${r}" does not use OAuth`);if(!s)return F6(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-95TyImtj.js`).then(e=>e.r),f=d(u);if(!f)return F6(`mcp auth: provider "${u}" is not registered`);if(a)return await B6(r,f,t);if(!f.onSilentRenew)return i?F6(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await B6(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return F6(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);M6.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?P6(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?F6(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await B6(r,f,t)}async function B6(e,t,n){if(!t.onOAuthLogin)return F6(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await H6(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?P6(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):F6(`mcp auth: interactive login for "${e}" did not complete`)}async function V6(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-95TyImtj.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){M6.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function H6(){let{createOAuthLauncher:e}=await import(`./oauth-service-CUpgufjo.js`);return e()}async function mce(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-BduXImRw.js`).then(e=>e.n),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function U6(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-BGQSFWUb.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function hce(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
3279
3279
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
3280
3280
|
const argv = Array.isArray(process.argv) ? process.argv.slice(2) : [];
|
|
3281
3281
|
const escape = (s) => {
|
|
@@ -3289,8 +3289,8 @@ const r = await exec(cmd);
|
|
|
3289
3289
|
if (r.stdout) process.stdout.write(r.stdout);
|
|
3290
3290
|
if (r.stderr) process.stderr.write(r.stderr);
|
|
3291
3291
|
process.exit(r.exitCode || 0);
|
|
3292
|
-
`}async function
|
|
3293
|
-
`)}\n`}function
|
|
3292
|
+
`}async function gce(e,t){let n=await U6(t.fs);await n.mkdir(N6,{recursive:!0}),await n.writeFile(`${N6}/${e}.jsh`,hce(e)),t.scriptCatalog?.invalidateJsh()}async function _ce(e,t){let n=await U6(t.fs),r=`${N6}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){M6.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function vce(e,t){let{removeAppSprinkles:n}=await import(`./apps-BoUfLAvt.js`);await n(e,t.fs)}async function W6(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-BoUfLAvt.js`);return(await r(e,t,n.fs)).length}catch(t){return M6.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function G6(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function K6(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function yce(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function bce(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function xce(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function Sce(e){let t=[`total: ${K6(e.bytes)}`],n=[...e.breakdown].filter(e=>e.bytes>0).sort((e,t)=>t.bytes-e.bytes);if(n.length>0){t.push(``,`BYTES TYPES ATTRIBUTION`);for(let e of n)t.push(`${K6(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${yce(e)}`)}return`${t.join(`
|
|
3293
|
+
`)}\n`}function Cce(e={}){return H(`meminfo`,async t=>{let n=xce(t);if(`error`in n)return G6(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
3294
3294
|
|
|
3295
3295
|
Usage:
|
|
3296
3296
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -3301,8 +3301,8 @@ Notes:
|
|
|
3301
3301
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
3302
3302
|
report why instead.
|
|
3303
3303
|
- The browser randomizes measurement timing — expect a short delay.
|
|
3304
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
3305
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
3304
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??bce();if(!r&&!e.measure)return G6(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return G6(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return G6(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Sce(a),stderr:``,exitCode:0}})}const q6=`/.cache/artificial-analysis.json`,wce=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],J6=[`--provider`];function Y6(e){return{stdout:``,stderr:e.endsWith(`
|
|
3305
|
+
`)?e:`${e}\n`,exitCode:1}}async function Tce(e){try{let t=await e.readFile(q6),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function Ece(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Dce(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function Oce(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(q6,JSON.stringify(n))}catch{}}async function kce(e,t=!1){if(e&&!t){let t=await Tce(e);if(t)return t}let n={Accept:`application/json`},r=Ece();r&&(n[`x-api-key`]=r);let i=y(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=Dce(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await Oce(e,c),c}function X6(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function Ace(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=X6(e),a=t.find(e=>X6(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function jce(){return`models - list available LLM models
|
|
3306
3306
|
|
|
3307
3307
|
Usage: models [options]
|
|
3308
3308
|
|
|
@@ -3314,24 +3314,24 @@ Options:
|
|
|
3314
3314
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
3315
3315
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
3316
3316
|
-h, --help Show this help message
|
|
3317
|
-
`}function
|
|
3317
|
+
`}function Mce(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function Z6(e){return`$${e.toFixed(2)}`}const Nce=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function Pce(e){let t=`${e.id} ${e.name??``}`;return!Nce.test(t)}function Fce(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function Ice(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),Fce(t)??t.replace(/-[\d.]+$/,``)}function Lce(e){let t=new Map;for(let n of e){let e=Ice(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function Rce(e,t,n,r,i){let a=i?Ace(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function zce(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${Z6(e.cost.input)} / ${Z6(e.cost.output)}`,a=`${Mce(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
|
|
3318
3318
|
`)+`
|
|
3319
|
-
`}function
|
|
3320
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
3319
|
+
`}function Bce(e){let t=V(e,{bool:wce,value:J6});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function Vce(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function Hce(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(Pce);if(o.length===0)return[];let s=o.map(e=>Rce(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=Lce(s)),s}function Uce(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function Wce(e,t){if(jr(e,{valueFlags:J6}))return{stdout:jce(),stderr:``,exitCode:0};let n=Bce(e);if(`error`in n)return Y6(`models: ${n.error}`);let r=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t);if(r.getAccounts().length===0)return Y6(`No provider accounts configured. Run the provider settings to add one.
|
|
3320
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await kce(t,n.forceRefresh);e.length>0&&(l=e)}let u=Vce(r,n,s);if(`error`in u)return Y6(u.error);let d=[],f=[];for(let e of u){let t=Hce(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return Y6(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(zce(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
3321
3321
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
3322
|
-
`),f.push(
|
|
3323
|
-
`),stderr:``,exitCode:0})}function
|
|
3324
|
-
`,stderr:``,exitCode:0}}function
|
|
3322
|
+
`),f.push(Uce(o,a,s,c)),{stdout:f.join(`
|
|
3323
|
+
`),stderr:``,exitCode:0})}function Gce(e){return H(`models`,async t=>Wce(t,e))}const Q6=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function Kce(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`-e`||n===`--eval`||Q6.has(n)||!n.startsWith(`-`))return t}return e.length}function qce(){return{stdout:`usage: node -e <code> [args...]
|
|
3324
|
+
`,stderr:``,exitCode:0}}function Jce(){return{stdout:`${Ki}\n`,stderr:``,exitCode:0}}async function Yce(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
|
|
3325
3325
|
`,exitCode:9}};if(e.length>0&&Q6.has(e[0]))return{kind:`ok`,code:ia(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return ia(t.stdin).trim().length>0?{kind:`ok`,code:ia(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
|
|
3326
|
-
`,exitCode:9}}}function
|
|
3326
|
+
`,exitCode:9}}}function Xce(e={}){return{name:`node`,trusted:!0,async execute(t,n){let r=t.slice(0,Kce(t));if(r.includes(`--help`)||r.includes(`-h`))return qce();if(r.includes(`--version`)||r.includes(`-v`))return Jce();let i=await Yce(t,n);if(i.kind===`result`)return i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i;return hG(nH(a),s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const Zce=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function Qce(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const $6=[],$ce=[`--yes`];function ele(){return H(`nuke`,async e=>{if(jr(e,{valueFlags:$6}))return{stdout:`Usage: nuke <launch-code>
|
|
3327
3327
|
|
|
3328
3328
|
Completely reset the environment by deleting all local data and reloading.
|
|
3329
3329
|
Destroys the file system, chat history, and scoops database.
|
|
3330
3330
|
Requires the secret launch code to proceed.
|
|
3331
|
-
`,stderr:``,exitCode:0};let t=V(e,{value:$6,bool
|
|
3331
|
+
`,stderr:``,exitCode:0};let t=V(e,{value:$6,bool:$ce});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await Qce(),tle(Zce)})(),{stdout:`Nuking everything…
|
|
3332
3332
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
3333
3333
|
Run nuke again with the secret launch code to proceed.
|
|
3334
|
-
`,exitCode:1}})}function
|
|
3334
|
+
`,exitCode:1}})}function tle(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function e8(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
3335
3335
|
|
|
3336
3336
|
Usage:
|
|
3337
3337
|
oauth-domain list List extra domains for every provider
|
|
@@ -3356,13 +3356,13 @@ Examples:
|
|
|
3356
3356
|
oauth-domain add adobe '*.da.live'
|
|
3357
3357
|
oauth-domain list adobe
|
|
3358
3358
|
oauth-domain remove adobe admin.da.live
|
|
3359
|
-
`}function t8(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function
|
|
3359
|
+
`}function t8(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function nle(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
|
|
3360
3360
|
`)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
|
|
3361
3361
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
3362
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
3363
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
3364
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
3365
|
-
`,exitCode:1}}async function
|
|
3362
|
+
`)}\n`,stderr:``,exitCode:0}}async function rle(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
3363
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function ile(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
3364
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function ale(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
|
|
3365
|
+
`,exitCode:1}}async function ole(e,t,n,r){switch(t){case`list`:return nle(e,n);case`add`:return rle(e,n,r);case`remove`:return ile(e,n,r);case`clear`:return ale(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${e8()}`,exitCode:1}}}function sle(){return H(`oauth-domain`,async e=>{if(e.length===0||jr(e))return{stdout:e8(),stderr:``,exitCode:0};let t=V(e);if(`error`in t)return t8(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t);try{return await ole(a,n,r,i)}catch(e){return t8(e instanceof Error?e.message:String(e))}})}const cle={repo:[`repo:status`,`repo_deployment`,`public_repo`,`repo:invite`,`security_events`],user:[`read:user`,`user:email`,`user:follow`],project:[`read:project`]},lle={"admin:":[`write:`,`read:`],"write:":[`read:`]};function n8(e){return e?new Set(e.split(/[\s,]+/).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)):new Set}function ule(e){let t=[...cle[e]??[]];for(let[n,r]of Object.entries(lle)){if(!e.startsWith(n))continue;let i=e.slice(n.length);if(i)for(let e of r)t.push(`${e}${i}`)}return t}function dle(e){let t=new Set(e),n=[...e];for(;n.length>0;){let e=n.pop();for(let r of ule(e))t.has(r)||(t.add(r),n.push(r))}return t}function fle(e,t){let n=n8(e);if(n.size===0)return!1;let r=n8(t);if(r.size===0)return!0;let i=dle(n);for(let e of r)if(!i.has(e))return!1;return!0}const r8=[`--provider`,`--scope`,`--from-file`,`--authorize-url`,`--redirect-pattern`,`--rewrite`],ple=[`--list`,`--expire`,`--renew`,`--intercept`,`--force-login`,`--leave-tab`];function mle(){return`oauth-token — get an OAuth access token for a provider, or run an
|
|
3366
3366
|
ad-hoc OAuth interception against an arbitrary authorize URL.
|
|
3367
3367
|
|
|
3368
3368
|
Usage:
|
|
@@ -3426,12 +3426,12 @@ Examples:
|
|
|
3426
3426
|
--authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
|
|
3427
3427
|
--redirect-pattern 'http://127.0.0.1:56121/*'
|
|
3428
3428
|
curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
|
|
3429
|
-
`}function
|
|
3429
|
+
`}function hle(){return H(`oauth-token`,gle)}async function gle(e,t){let n=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),r=await import(`./providers-95TyImtj.js`).then(e=>e.r);if(jr(e,{valueFlags:r8}))return{stdout:mle(),stderr:``,exitCode:0};let i=V(e,{value:r8,bool:ple});if(`error`in i)return l8(`oauth-token: ${i.error}`);if(i.bools.has(`--list`))return Mle(n.getAccounts,r.getRegisteredProviderIds,r.getRegisteredProviderConfig,n.getOAuthAccountInfo);if(i.bools.has(`--expire`))return Tle(i.positionals);if(i.bools.has(`--renew`))return Ele(i.positionals);if(i.values.has(`--from-file`)||i.bools.has(`--intercept`))return Dle(i,e,t);let a=_le(i);if(!a.ok)return a.result;let o=i.bools.has(`--force-login`),s=vle(i,n,r);if(!s.ok)return s.result;let c=yle(s.value,r.getRegisteredProviderConfig);if(!c.ok)return c.result;if(!o){let e=await ble(s.value,c.value,n.getOAuthAccountInfo,a.value);if(e)return e}return xle(s.value,c.value,a.value,n.getOAuthAccountInfo)}function _le(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:l8(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function vle(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:l8(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(i8(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>i8(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:l8(`oauth-token: no OAuth providers configured`)}}function i8(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function yle(e,t){let n=t(e);return n?i8(n)?{ok:!0,value:n}:{ok:!1,result:l8(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:l8(`oauth-token: unknown provider "${e}"`)}}async function ble(e,t,n,r){let i=n(e);return i&&!i.expired?a8(e,i,r):!i?.expired||!t.onSilentRenew||!await wle(t.onSilentRenew)?null:a8(e,n(e),r)}function a8(e,t,n){return n&&!fle(t?.scopes,n)?null:o8(e,t?.maskedValue)}function o8(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:l8(`oauth-token: no masked value for ${e} (try logging in again)`)}async function xle(e,t,n,r){try{let i=await Sle(e,t,n);return i.error?i.error:Cle(e,r,i.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),l8(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),l8(`oauth-token: login failed: ${n}`))}}async function Sle(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-CUpgufjo.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:l8(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-CUpgufjo.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:l8(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function Cle(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),l8(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let r=t(e);return r?.token&&!r.expired?o8(e,r.maskedValue):r?.token?l8(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),l8(`oauth-token: login completed but no token was saved`))}async function wle(e){try{return await e()!==null}catch{return!1}}function s8(e,t,n,r){let i=e[0];if(i)return i;let a=t();return n(a)?.onSilentRenew?a:r().find(e=>n(e)?.onSilentRenew)}async function Tle(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-95TyImtj.js`).then(e=>e.r),o=s8(e,n,i,a);if(!o)return l8(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return l8(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return l8(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return l8(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return l8(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function Ele(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-Ds_fREWW.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-95TyImtj.js`).then(e=>e.r),a=s8(e,t,r,i);if(!a)return l8(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return l8(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return l8(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${c8(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(d)l.push(` silent renewal: ERROR — ${d}`);else if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` after: ${c8(e)}`)}else l.push(` silent renewal: FAILED (onSilentRenew returned null)`),l.push(` → no window should have appeared. Open DevTools console and`),l.push(` look for "[oauth-service] Extension OAuth error" / "[adobe]" to see`),l.push(` the IMS/Chrome reason (e.g. login_required).`);return{stdout:l.join(`
|
|
3430
3430
|
`)+`
|
|
3431
|
-
`,stderr:``,exitCode:+!u}}function c8(e){if(!e)return`no token`;if(e.expired)return`expired`;if(e.expiresAt){let t=e.expiresAt-Date.now();if(t>0){let e=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4);return e>0?`valid, expires in ${e}h ${n}m`:`valid, expires in ${n}m`}}return`valid`}async function
|
|
3431
|
+
`,stderr:``,exitCode:+!u}}function c8(e){if(!e)return`no token`;if(e.expired)return`expired`;if(e.expiresAt){let t=e.expiresAt-Date.now();if(t>0){let e=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4);return e>0?`valid, expires in ${e}h ${n}m`:`valid, expires in ${n}m`}}return`valid`}async function Dle(e,t,n){let{parseInterceptOAuthConfig:r}=await import(`./intercepted-oauth-BIKnTjZm.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:i}=await import(`./oauth-service-CUpgufjo.js`),a=await Ole(e,t,n);if(!a.ok)return a.result;let o=r(a.value);if(!o.ok)return l8(`oauth-token: invalid intercept config: ${o.error}`);let s=await i();if(!s)return l8(`oauth-token: no CDP transport available in this runtime; --intercept needs the controlled browser.`);let c=await s(o.config);return c?{stdout:`${c}\n`,stderr:``,exitCode:0}:l8(`oauth-token: intercept timed out or was cancelled`)}function Ole(e,t,n){return e.values.has(`--from-file`)?kle(e.values.get(`--from-file`),n):Ale(e,t)}async function kle(e,t){if(!e)return{ok:!1,result:l8(`oauth-token: --from-file requires a path`)};try{let n=t.fs.resolvePath(t.cwd,e),r=await t.fs.readFile(n),i=typeof r==`string`?r:new TextDecoder().decode(r);return{ok:!0,value:JSON.parse(i)}}catch(t){return{ok:!1,result:l8(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function Ale(e,t){let n=e.values.get(`--authorize-url`),r=e.values.get(`--redirect-pattern`);if(!n)return{ok:!1,result:l8(`oauth-token: --authorize-url is required`)};if(!r)return{ok:!1,result:l8(`oauth-token: --redirect-pattern is required`)};let i=jle(t);return i.ok?{ok:!0,value:{authorizeUrl:n,redirectUriPattern:r,onCapture:e.bools.has(`--leave-tab`)?`leave`:`close`,...i.value.length>0?{rewrite:i.value}:{}}}:i}function jle(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`)break;if(r!==`--rewrite`&&!r.startsWith(`--rewrite=`))continue;let i=r===`--rewrite`?e[++n]:r.slice(10);if(!i)return{ok:!1,result:l8(`oauth-token: --rewrite requires a value`)};let a=i.split(`=`);if(a.length<3)return{ok:!1,result:l8(`oauth-token: --rewrite "${i}" must be "<match>=<key>=<value>"`)};let[o,s,...c]=a;t.push({match:o,appendParams:{[s]:c.join(`=`)}})}return{ok:!0,value:t}}function l8(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function Mle(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
|
|
3432
3432
|
`,stderr:``,exitCode:0};let a=[];for(let e of i){let t=r(e);if(!t)a.push(`${e} (no token)`);else if(t.expired){let n=t.userName?` as ${t.userName}`:``;a.push(`${e} (expired${n})`)}else{let n=[];if(t.userName?n.push(`logged in as ${t.userName}`):n.push(`logged in`),t.expiresAt){let e=t.expiresAt-Date.now();if(e>0){let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4);t>0?n.push(`expires in ${t}h`):n.push(`expires in ${r}m`)}}t.scopes&&n.push(`scopes: ${t.scopes}`),a.push(`${e} (${n.join(`, `)})`)}}return{stdout:a.join(`
|
|
3433
3433
|
`)+`
|
|
3434
|
-
`,stderr:``,exitCode:0}}const
|
|
3434
|
+
`,stderr:``,exitCode:0}}const Nle=[`--download`,`-d`,`--view`,`-v`],u8=[`--size`],d8={low:256,medium:768,high:1536};function f8(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
3435
3435
|
|
|
3436
3436
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
3437
3437
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -3445,19 +3445,19 @@ Examples:
|
|
|
3445
3445
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
3446
3446
|
box like 512x512. The image is fit inside the box
|
|
3447
3447
|
with aspect ratio preserved and is never upscaled.
|
|
3448
|
-
`,stderr:``,exitCode:0}}function
|
|
3448
|
+
`,stderr:``,exitCode:0}}function Ple(e){let t=``,n=8192;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function Fle(e){if(e in d8){let t=d8[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function Ile(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function Lle(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
3449
3449
|
--size low (256x256)
|
|
3450
3450
|
--size medium (768x768)
|
|
3451
3451
|
--size high (1536x1536)
|
|
3452
3452
|
--size WxH (custom box, e.g. 512x512)
|
|
3453
|
-
`}const
|
|
3454
|
-
`)}async function
|
|
3455
|
-
`);let r;try{r=await n(e)}catch(e){return h8(`${e instanceof Error?e.message:String(e)}\n`)}return m8(`opened ${e}${g8(r)}`)}async function
|
|
3456
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return h8(`open: no such file: ${e}\n`)}if(!i.isFile)return h8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return h8(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Fi(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=Hi(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),m8(`downloaded ${t}`)}async function
|
|
3457
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Li(t.fs,i?e:qi(e)),o=ea(e,a),s;try{s=await r(o)}catch(e){return h8(`${e instanceof Error?e.message:String(e)}\n`)}return m8(`opened ${e} → ${o}${g8(s)}`)}async function
|
|
3458
|
-
`);if(zi(e))return
|
|
3453
|
+
`}const Rle=new Set([`image/png`,`image/webp`]);function p8(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function zle(e,t){let n=p8(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Ble(e,t,n,r){let i=p8(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=Ile(e,t)?Rle.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Vle(e){let t=V(e,{bool:Nle,value:u8});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function m8(e){return{ok:!0,message:e}}function h8(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function g8(e){return e?` (targetId: ${e})`:``}function Hle(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function Ule(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),m8(`opened sprinkle ${e} from ${a}`)}catch(e){return h8(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Li(t.fs,qi(a)),n=ea(a,e),r;try{r=await i(n)}catch(e){return h8(`${e instanceof Error?e.message:String(e)}\n`)}return m8(`opened ${a} → ${n}${g8(r)}`)}return h8(`open: sprinkle manager not initialized
|
|
3454
|
+
`)}async function Wle(e,t,n){if(!t)return h8(`open: browser APIs are unavailable in this environment
|
|
3455
|
+
`);let r;try{r=await n(e)}catch(e){return h8(`${e instanceof Error?e.message:String(e)}\n`)}return m8(`opened ${e}${g8(r)}`)}async function Gle(e,t,n,r){let i;try{i=await n.fs.stat(t)}catch{return h8(`open: no such file: ${e}\n`)}if(!i.isFile)return h8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return h8(`open: failed to read: ${e}\n`)}let o=Fi(t),s=new Uint8Array(a),c=null;if(r!==void 0&&(c=Fle(r),!c))return h8(`open: invalid --size spec '${r}' (expected low|medium|high or WxH such as 512x512)\n`);if(!c){let n;try{n=await zle(s,o)}catch(t){return h8(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(s.byteLength/1024);return h8(`open --view: ${t} is ${n.width}x${n.height} (${r} KB, ${o})\n`+Lle())}let l;try{l=await Ble(s,o,c.maxW,c.maxH)}catch(t){return h8(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let u=Ple(l.bytes),d=Math.round(l.bytes.byteLength/1024);return m8(`${t} (${l.nativeWidth}x${l.nativeHeight} → ${l.width}x${l.height}, ${d} KB, ${l.mime})\n<img:data:${l.mime};base64,${u}>`)}async function Kle(e,t,n,r){if(!r)return h8(`open: --download requires the in-panel terminal (DOM-only)
|
|
3456
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return h8(`open: no such file: ${e}\n`)}if(!i.isFile)return h8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return h8(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Fi(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=Hi(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),m8(`downloaded ${t}`)}async function qle(e,t,n,r){if(!n)return h8(`open: browser APIs are unavailable in this environment
|
|
3457
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Li(t.fs,i?e:qi(e)),o=ea(e,a),s;try{s=await r(o)}catch(e){return h8(`${e instanceof Error?e.message:String(e)}\n`)}return m8(`opened ${e} → ${o}${g8(s)}`)}async function Jle(e,t,n,r){if(!zi(e)&&e.endsWith(`.shtml`)&&t.fs)return Ule(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return h8(`open: browser APIs are unavailable in this environment
|
|
3458
|
+
`);if(zi(e))return Wle(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Gle(e,i,t,n.sizeSpec):n.download?Kle(e,i,t,r.hasDom):qle(i,t,r.canOpenWindow,r.openExternal)}function Yle(e){return H(`open`,async(t,n)=>{if(t.length===0||jr(t,{valueFlags:u8}))return f8();let r=Vle(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:a,view:o,sizeSpec:s,targets:c}=r;if(c.length===0)return f8();let l=globalThis.__slicc_sprinkleManager,u=typeof window<`u`&&typeof document<`u`,d=u?null:i(),f={canOpenWindow:!!e||u||!!d,hasDom:u,sprinkleManager:l,openExternal:Hle(e,u,d)},p=[];for(let e of c){let t=await Jle(e,n,{view:o,download:a,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
|
|
3459
3459
|
`)+`
|
|
3460
|
-
`,stderr:``,exitCode:0}})}function _8(e=`pdftk`){return H(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-ChkY2Agc.js`);return r(e,t,n)})}function
|
|
3460
|
+
`,stderr:``,exitCode:0}})}function _8(e=`pdftk`){return H(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-ChkY2Agc.js`);return r(e,t,n)})}function Xle(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
3461
3461
|
|
|
3462
3462
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
3463
3463
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -3484,8 +3484,8 @@ Examples:
|
|
|
3484
3484
|
pdftoppm -png -r 150 doc.pdf page
|
|
3485
3485
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
3486
3486
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
3487
|
-
`,stderr:``,exitCode:0}}function v8(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function
|
|
3488
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
3487
|
+
`,stderr:``,exitCode:0}}function v8(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Zle(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Qle(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Zle(e[++d]),t=`jpeg`;break;case`-r`:n=v8(e[++d],`-r`);break;case`-f`:r=v8(e[++d],`-f`);break;case`-l`:i=v8(e[++d],`-l`);break;case`-scale-to`:a=v8(e[++d],`-scale-to`);break;case`-scale-to-x`:o=v8(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=v8(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function $le(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function eue(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function tue(e){return e===`jpeg`?`jpg`:`png`}function nue(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Fa(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function rue(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Na(r))throw Error(`${t}: not a PDF file`);return r}function y8(e=`pdftoppm`){return H(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Xle();let r;try{r=Qle(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await rue(n,r.inputPath),i=tue(r.format),a=r.outputRoot??$le(Hi(r.inputPath)),o=[];return await Ma(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...nue(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:eue(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
|
|
3488
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function iue(e=`pdftotext`){return H(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function aue(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function oue(){a4(()=>()=>DY()),i4(()=>()=>aue(DY()))}const b8=`/workspace/.plugins/sources`;function x8(e){return{stdout:e,stderr:``,exitCode:0}}function S8(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function C8(e,t){let n=V(t,{});return`error`in n?S8(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function sue(){return`usage: plugin <command> [args]
|
|
3489
3489
|
|
|
3490
3490
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
3491
3491
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -3517,7 +3517,7 @@ Examples:
|
|
|
3517
3517
|
plugin list
|
|
3518
3518
|
plugin info my-plugin
|
|
3519
3519
|
plugin remove my-plugin
|
|
3520
|
-
`}function
|
|
3520
|
+
`}function cue(e={}){return H(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return x8(sue());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await uue(i,a,e);case`list`:case`ls`:return await mue(i,e);case`info`:return await hue(i,e);case`validate`:return await gue(i,a,e);case`remove`:case`rm`:case`delete`:return await _ue(i,e);default:return S8(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return S8(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function w8(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-BGQSFWUb.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function T8(e,t,n){let r=vue(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-CjSc36VN.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function lue(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function E8(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${b8}/${t.map(lue).join(`--`)}`}async function D8(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-BmQLkPpT.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function O8(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function uue(e,t,n){if(jr(e))return x8(`usage: plugin install <path|repo>
|
|
3521
3521
|
|
|
3522
3522
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
3523
3523
|
reference (owner/repo, owner/repo@branch, or
|
|
@@ -3528,25 +3528,25 @@ mcp.json. On success the plugin is recorded in
|
|
|
3528
3528
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
3529
3529
|
standard skills discovery, and each supported streamable-http MCP server
|
|
3530
3530
|
is registered in the MCP store as "<plugin>:<server>".
|
|
3531
|
-
`);let r=C8(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return S8(`plugin install: expected <path|repo>`);let i=await w8(n),a=await T8(r.positionals[0],t,i);if(a.kind===`error`)return S8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return S8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=E8(a.ref),s=a.ref.display;let e=await D8(a.ref,o,i,n.fetch);if(e)return S8(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-B23_5sFw.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await O8(i,o),S8(`plugin install: plugin at ${s??o} was rejected:\n${k8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-
|
|
3531
|
+
`);let r=C8(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return S8(`plugin install: expected <path|repo>`);let i=await w8(n),a=await T8(r.positionals[0],t,i);if(a.kind===`error`)return S8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return S8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=E8(a.ref),s=a.ref.display;let e=await D8(a.ref,o,i,n.fetch);if(e)return S8(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-B23_5sFw.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await O8(i,o),S8(`plugin install: plugin at ${s??o} was rejected:\n${k8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-CWUoE4oC.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await O8(i,o),S8(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await pue(u,n),g=await fue(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),x8(due(u,h,g,s??o,l.diagnostics))}function due(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,k8(i)),c.join(`
|
|
3532
3532
|
`)+`
|
|
3533
|
-
`}async function
|
|
3534
|
-
`);let n=C8(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-
|
|
3533
|
+
`}async function fue(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-BehdBrM6.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function pue(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-BehdBrM6.js`).then(e=>e.r),{McpClient:a}=await import(`./client-Beg9O208.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function mue(e,t){if(jr(e))return x8(`usage: plugin list
|
|
3534
|
+
`);let n=C8(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-CWUoE4oC.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return x8("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return x8(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
3535
3535
|
`)+`
|
|
3536
|
-
`)}async function
|
|
3537
|
-
`);let n=C8(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return S8(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-
|
|
3536
|
+
`)}async function hue(e,t){if(jr(e))return x8(`usage: plugin info <name>
|
|
3537
|
+
`);let n=C8(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return S8(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-CWUoE4oC.js`),a=await i(r,t.fs);if(!a)return S8(`plugin info: no installed plugin named "${r}"`);let o=await w8(t),{loadPluginFromDirectory:s}=await import(`./loader-B23_5sFw.js`),c=await s(o,a.root);if(!c.ok)return S8(`plugin info: plugin at ${a.root} no longer loads:\n${k8(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,k8(c.diagnostics)),x8(d.join(`
|
|
3538
3538
|
`)+`
|
|
3539
|
-
`)}async function
|
|
3539
|
+
`)}async function gue(e,t,n){if(jr(e))return x8(`usage: plugin validate <path|repo>
|
|
3540
3540
|
`);let r=C8(`validate`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return S8(`plugin validate: expected <path|repo>`);let i=await w8(n),a=await T8(r.positionals[0],t,i);if(a.kind===`error`)return S8(`plugin validate: ${a.message}`);let o,s=null;if(a.kind===`github`){if(!n.fetch)return S8(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);s=`/tmp/.plugin-validate/${E8(a.ref).split(`/`).pop()}`;let e=await D8(a.ref,s,i,n.fetch);if(e)return S8(`plugin validate: ${e}`);o=s}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-B23_5sFw.js`),l;try{l=await c(i,o)}finally{s&&await O8(i,s)}if(!l.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${k8(l.diagnostics)}\n`,exitCode:1};let{plugin:u}=l,d=u.mcp.servers.filter(e=>e.status===`supported`).length,f=[`plugin validate: OK — "${u.manifest.name}"${u.manifest.version?` v${u.manifest.version}`:``}`,` skills: ${u.skills.length}`,` mcp servers: ${d} supported, ${u.mcp.servers.length-d} skipped (mcp.json ${u.mcp.status})`];return l.diagnostics.length>0&&f.push(`Diagnostics:`,k8(l.diagnostics)),x8(f.join(`
|
|
3541
3541
|
`)+`
|
|
3542
|
-
`)}async function
|
|
3543
|
-
`);let n=C8(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return S8(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-
|
|
3542
|
+
`)}async function _ue(e,t){if(jr(e))return x8(`usage: plugin remove <name>
|
|
3543
|
+
`);let n=C8(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return S8(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-CWUoE4oC.js`),o=await i(r,t.fs);if(!o)return S8(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-BehdBrM6.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${b8}/`);return c&&await O8(await w8(t),o.root),x8([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
3544
3544
|
`)+`
|
|
3545
|
-
`)}function
|
|
3546
|
-
`)}const A8=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],
|
|
3547
|
-
`,exitCode:1};let r=V(t,{bool:
|
|
3545
|
+
`)}function vue(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function k8(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
3546
|
+
`)}const A8=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],yue=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],bue={running:`R`,pending:`S`,exited:`Z`,killed:`K`},xue=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],j8=[`-o`,`--columns`];function Sue(e={}){return H(`ps`,async t=>{if(jr(t,{valueFlags:j8}))return Pue();let n=e.processManager??Cue();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
3547
|
+
`,exitCode:1};let r=V(t,{bool:xue,value:j8});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=yue,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=wue(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=(a?Nue(l):l.map(e=>({proc:e,depth:0}))).map(({proc:e,depth:t})=>Due(e,i,t,a));return{stdout:[Tue(i),...u].join(`
|
|
3548
3548
|
`)+`
|
|
3549
|
-
`,stderr:``,exitCode:0}})}function
|
|
3549
|
+
`,stderr:``,exitCode:0}})}function Cue(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function wue(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!A8.includes(e))return Error(`unknown column '${e}'; supported: ${A8.join(`, `)}`);n.push(e)}return n}function Tue(e){return e.map(e=>Eue(e)).join(` `)}function Eue(e){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(10);case`command`:return`COMMAND`}}function Due(e,t,n,r){return t.map(t=>Oue(e,t,n,r)).join(` `)}function Oue(e,t,n,r){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return bue[e.status];case`start`:return kue(e.startedAt);case`scoop`:return Aue(e).padEnd(10);case`command`:return jue(e,n,r)}}function kue(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function Aue(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.scoopJid?.slice(0,10)??`scoop`}function jue(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(Mue).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function Mue(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function Nue(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function Pue(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
3550
3550
|
|
|
3551
3551
|
List processes tracked by the kernel.
|
|
3552
3552
|
|
|
@@ -3576,9 +3576,9 @@ Examples:
|
|
|
3576
3576
|
ps -T live tree
|
|
3577
3577
|
ps -a -T full tree
|
|
3578
3578
|
ps -o pid,kind,stat just three columns
|
|
3579
|
-
`,stderr:``,exitCode:0}}const
|
|
3580
|
-
`,stderr:``,exitCode:0}}function
|
|
3581
|
-
`,stderr:``,exitCode:0}}async function
|
|
3579
|
+
`,stderr:``,exitCode:0}}const Fue=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function Iue(e,t=Fue){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function Lue(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function Rue(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function zue(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function Bue(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function Vue(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function Hue(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
3580
|
+
`,stderr:``,exitCode:0}}function Uue(){return{stdout:`Python 3.14 (Pyodide)
|
|
3581
|
+
`,stderr:``,exitCode:0}}async function Wue(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return ia(n.stdin).trim().length>0?{kind:`ok`,code:ia(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function Gue(e){let t=zue(e),n=await KM(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${WM}\n`,exitCode:1}};let r=await Bue(t.reader,n);return r?r===HM?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${Vue(r,HM)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${WM}\n`,exitCode:1}}}function M8(e,t={}){return H(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return Hue();if(n.includes(`--version`)||n.includes(`-V`))return Uue();let i=await Wue(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await Iue(r.fs),u=Lue(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??Kue(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??BV(),g=t.pyodideIndexURL??WV(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await Gue(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:ia(r.stdin),y=Rue();return f?nG({pm:f,realmFactory:h,owner:p,kind:`py`,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:y,mountPoints:u,procKind:`py`,ppid:m}):que({realmFactory:h,owner:p,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:y,mountPoints:u})})}function Kue(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let N8=null;async function que(e){if(!N8){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);N8=new e}return nG({pm:N8,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`})}function P8(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function Jue(){return null}function Yue(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=F8(r),o=F8(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function F8(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function I8(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
3582
3582
|
|
|
3583
3583
|
Usage:
|
|
3584
3584
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -3594,21 +3594,21 @@ Examples:
|
|
|
3594
3594
|
rsync /workspace follower-abc123:/workspace
|
|
3595
3595
|
rsync --delete /shared leader:/shared
|
|
3596
3596
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
3597
|
-
`,stderr:``,exitCode:0}}async function L8(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function R8(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function
|
|
3597
|
+
`,stderr:``,exitCode:0}}async function L8(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function R8(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function Xue(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function Zue(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function z8(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function Que(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,u=P8(await L8(e,i),await R8(t,o,a),{delete:n.delete});if(s||c){for(let e of u.toAdd)r.push(`+ ${e}`);for(let e of u.toUpdate)r.push(`~ ${e}`);for(let e of u.toDelete)r.push(`- ${e}`);if(s)for(let e of u.toSkip)r.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
|
|
3598
3598
|
`)+`
|
|
3599
|
-
`,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await
|
|
3599
|
+
`,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await Zue(t,o,z8(c));let u=await e.readFile(s,{encoding:`binary`}),d=await t(o,{op:`writeFile`,path:c,content:l(u),encoding:`base64`});if(!d[0].ok)return{stdout:r.join(`
|
|
3600
3600
|
`)+`
|
|
3601
3601
|
`,stderr:`Error writing ${c}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let n=a+`/`+e,i=await t(o,{op:`rm`,path:n});if(!i[0].ok)return{stdout:r.join(`
|
|
3602
3602
|
`)+`
|
|
3603
3603
|
`,stderr:`Error deleting ${n}: ${i[0].error}\n`,exitCode:1}}return r.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
|
|
3604
3604
|
`)+`
|
|
3605
|
-
`,stderr:``,exitCode:0}}async function
|
|
3605
|
+
`,stderr:``,exitCode:0}}async function $ue(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,l=P8(await R8(t,o,a),await L8(e,i),{delete:n.delete});if(s||c){for(let e of l.toAdd)r.push(`+ ${e}`);for(let e of l.toUpdate)r.push(`~ ${e}`);for(let e of l.toDelete)r.push(`- ${e}`);if(s)for(let e of l.toSkip)r.push(` ${e} (up to date)`)}let d=l.toAdd.length+l.toUpdate.length+l.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
|
|
3606
3606
|
`)+`
|
|
3607
|
-
`,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=z8(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let l=await
|
|
3607
|
+
`,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=z8(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let l=await Xue(t,o,r),d=u(l);await e.writeFile(s,d)}for(let t of l.toDelete){let n=i+`/`+t;await e.rm(n)}return r.push(`${d} file(s) transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
|
|
3608
3608
|
`)+`
|
|
3609
|
-
`,stderr:``,exitCode:0}}function
|
|
3609
|
+
`,stderr:``,exitCode:0}}function ede(e={}){let t=e.fs,n=e.getSendFsRequest??Jue;return H(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return I8();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
3610
3610
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
3611
|
-
`,exitCode:1};let i=
|
|
3611
|
+
`,exitCode:1};let i=Yue(e);if(`error`in i)return i.error===`__help__`?I8():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await Que(t,r,i):await $ue(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function B8(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
3612
3612
|
say --status | --warmup
|
|
3613
3613
|
|
|
3614
3614
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -3628,11 +3628,11 @@ Examples:
|
|
|
3628
3628
|
`,stderr:``,exitCode:0}}function V8(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
3629
3629
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
3630
3630
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
3631
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function H8(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function U8(e){return e instanceof Error?e.message:String(e)}let W8=!1,G8=null;function K8(){return W8?Promise.resolve(speechSynthesis.getVoices()):(G8||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){W8=!0,e(t);return}let n=()=>{W8=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),W8=!0,e(speechSynthesis.getVoices())},1e3)}),G8)}const q8={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function
|
|
3631
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function H8(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function U8(e){return e instanceof Error?e.message:String(e)}let W8=!1,G8=null;function K8(){return W8?Promise.resolve(speechSynthesis.getVoices()):(G8||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){W8=!0,e(t);return}let n=()=>{W8=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),W8=!0,e(speechSynthesis.getVoices())},1e3)}),G8)}const q8={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function tde(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function nde(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in q8){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return H8(`${i} requires ${q8[i]}`);let a=tde(t,i,n);if(a)return H8(a)}else if(i.startsWith(`-`)&&i!==`--list`)return H8(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function J8(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function rde(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>J8({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await K8()).map(e=>J8({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
3632
3632
|
`)+`
|
|
3633
3633
|
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>J8(e)).join(`
|
|
3634
3634
|
`)+`
|
|
3635
|
-
`,stderr:``,exitCode:0}}catch(e){return H8(U8(e))}}async function
|
|
3635
|
+
`,stderr:``,exitCode:0}}catch(e){return H8(U8(e))}}async function ide(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await K8()).map(e=>({name:e.name}));return[...n,...r]}async function ade(e,t){let n=(await ide(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:H8(`voice "${t}" not found. Use --list to see available voices.`)}}async function Y8(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:V8(t?n():e()),stderr:``,exitCode:0}}return{stdout:V8(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return H8(U8(e))}}async function ode(e,t){return t.includes(`--list`)?rde(e):t.includes(`--status`)?Y8(e,!1):t.includes(`--warmup`)?Y8(e,!0):null}async function sde(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return H8(`speech synthesis error: ${U8(e)}`)}}async function cde(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return H8(U8(e))}}async function lde(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return H8(U8(e))}}async function ude(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return H8(U8(e))}}async function dde(e,t,n,r){let i=e.local?await lde(r):await ude(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return H8(`failed to write ${n}: ${U8(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}function fde(){return H(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return B8();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:i()};if(!n.local&&!n.panelRpc)return H8(`Web Speech API unavailable in this environment`);let r=await ode(n,e);if(r)return r;let a=nde(e);if(`exitCode`in a)return a;if(!a.text)return B8();if(!a.lang)return H8(`-l language tag is required`);let o;if(a.voiceName){let{resolved:e,error:t}=await ade(n,a.voiceName);if(t)return t;o=e}let s={text:a.text,lang:a.lang,voice:o,rate:a.rate};return a.outFile?dde(n,t,a.outFile,s):n.local?sde(s):cde(n,s)})}const pde=[`--clipboard`,`-c`,`--view`,`-v`];function X8(e){return{stdout:``,stderr:`screencapture: ${e}\n`,exitCode:1}}function mde(e,t){return!e&&!t?X8(`browser APIs are unavailable in this environment`):e&&!c1()&&!navigator.mediaDevices?.getDisplayMedia?X8(`screen capture is not supported in this browser`):null}async function hde(e,t,n,r){try{if(c1())return{bytes:(await u1({kind:`screen`,mimeType:n,quality:r})).bytes};if(e)return{bytes:(await xde(n,r)).bytes};let i=await t.call(`screencapture`,{mimeType:n,quality:r},{timeoutMs:3e5});return{bytes:new Uint8Array(i.bytes)}}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Permission denied`)||t.includes(`NotAllowedError`)?{error:X8(`user cancelled or permission denied`)}:{error:X8(t)}}}async function gde(e,t,n,r){try{if(c1()&&typeof document<`u`&&typeof document.hasFocus==`function`&&!document.hasFocus())return X8(`clipboard capture needs a focused window; save to a file instead`);if(n){let n=await Cde(e,t),r=new ArrayBuffer(n.byteLength);new Uint8Array(r).set(n);let i=new Blob([r],{type:`image/png`});return await wde(),await navigator.clipboard.write([new ClipboardItem({"image/png":i})]),{stdout:`captured ${Math.round(i.size/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}return await r.call(`clipboard-write-image`,{bytes:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),mimeType:t},{timeoutMs:3e5}),{stdout:`captured ${Math.round(e.byteLength/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}catch(e){return X8(`failed to copy to clipboard: ${e instanceof Error?e.message:String(e)}`)}}async function _de(e,t,n,r,i){let a=i.fs.resolvePath(i.cwd,t);try{await i.fs.writeFile(a,e)}catch(e){return X8(`failed to write file: ${e instanceof Error?e.message:String(e)}`)}let o=Math.round(e.length/1024);return r?{stdout:`${a} (${o} KB)\n<img:data:${n};base64,${yde(e)}>`,stderr:``,exitCode:0}:{stdout:`captured ${o} KB to ${Hi(a)}\n`,stderr:``,exitCode:0}}function vde(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
|
|
3636
3636
|
|
|
3637
3637
|
Usage: screencapture [options] <output-file>
|
|
3638
3638
|
|
|
@@ -3648,7 +3648,7 @@ Examples:
|
|
|
3648
3648
|
screencapture screenshot.png # Capture to file
|
|
3649
3649
|
screencapture -c # Capture to clipboard
|
|
3650
3650
|
screencapture -v capture.png # Capture and return for agent vision
|
|
3651
|
-
`,stderr:``,exitCode:0}}function
|
|
3651
|
+
`,stderr:``,exitCode:0}}function yde(e){let t=``,n=8192;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function bde(e){switch(e.split(`.`).pop()?.toLowerCase()){case`jpg`:case`jpeg`:return`image/jpeg`;case`webp`:return`image/webp`;default:return`image/png`}}async function xde(e,t){let n=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let r=document.createElement(`video`);r.srcObject=n,r.muted=!0,r.playsInline=!0,await new Promise((e,t)=>{r.onloadedmetadata=()=>r.play().then(()=>e()).catch(t),r.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100));let i=r.videoWidth,a=r.videoHeight,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(r,0,0,i,a);let c=await new Promise((n,r)=>{o.toBlob(e=>e?n(e):r(Error(`Failed to create image blob`)),e,t)});return{bytes:new Uint8Array(await c.arrayBuffer()),mimeType:e}}finally{n.getTracks().forEach(e=>{e.stop()})}}function Sde(){return H(`screencapture`,async(e,t)=>{if(jr(e))return vde();let n=V(e,{bool:pde});if(`error`in n)return X8(n.error);let r=a(),o=i(),s=mde(r,o);if(s)return s;let c=n.bools.has(`--clipboard`)||n.bools.has(`-c`),l=n.bools.has(`--view`)||n.bools.has(`-v`),u=n.positionals[0];if(!c&&!u)return X8(`output file required (or use -c for clipboard)`);let d=u||`screenshot.png`,f=bde(d),p=await hde(r,o,f,f===`image/png`?1:.92);return`error`in p?p.error:c?gde(p.bytes,f,r,o):_de(p.bytes,d,f,l,t)})}async function Cde(e,t){if(t===`image/png`)return e;let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=new Blob([n],{type:t}),i=URL.createObjectURL(r);try{let e=new Image;await new Promise((t,n)=>{e.onload=()=>t(),e.onerror=()=>n(Error(`Failed to load image for conversion`)),e.src=i});let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)throw Error(`Failed to get canvas context`);n.drawImage(e,0,0);let r=await new Promise((e,n)=>{t.toBlob(t=>t?e(t):n(Error(`Failed to create PNG blob`)),`image/png`)});return new Uint8Array(await r.arrayBuffer())}finally{URL.revokeObjectURL(i)}}async function wde(e=3e5){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}function Tde(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;if(r){n(Error(r.message??`chrome.runtime.lastError`));return}t(e)})})}async function Z8(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(ue(`/api/secrets${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}function Ede(){return{async list(){let[e,t]=await Promise.all([Z8(`GET`,``),Z8(`GET`,`/session`)]),n=[];if(e.ok)for(let t of e.data)n.push({name:t.name,domains:t.domains,persisted:!0});if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});return n},async getInfo(e){return(await this.list()).find(t=>t.name===e)??null},async getMasked(e){let{ok:t,data:n}=await Z8(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await Z8(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await Z8(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error($8(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await Z8(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error($8(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await Z8(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error($8(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await Z8(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error($8(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function Q8(e){let t=t=>e(t);return{async list(){let[e,n]=await Promise.all([t({type:`secrets.list`}),t({type:`secrets.session.list`})]),r=[];for(let t of e?.entries??[])r.push({name:t.name,domains:t.domains,persisted:!0});for(let e of n?.entries??[])r.push({name:e.name,domains:e.domains,persisted:!1});return r},async getInfo(e){return(await this.list()).find(t=>t.name===e)??null},async getMasked(e){return((await t({type:`secrets.list-masked-entries`}))?.entries??[]).find(t=>t.name===e)??null},async peek(e){let n=await t({type:`secrets.peek`,name:e});if(n?.error)throw Error(n.error);return n?.record??null},async setSession(e,n,r){let i=await t({type:`secrets.session.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.session.set failed`)},async setPersisted(e,n,r){let i=await t({type:`secrets.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.set failed`)},async setScope(e,n){let r=await t({type:`secrets.set-domains`,name:e,domains:n});if(!r?.ok)throw Error(r?.error??`secrets.set-domains failed`)},async delete(e){let n=await t({type:`secrets.delete`,name:e});if(!n?.ok)throw Error(n?.error??`secrets.delete failed`);return{removed:n.removed??!0,fromSession:n.fromSession}}}}function Dde(){return Q8(e=>Tde(e))}function Ode(){return Q8(e=>{let{type:t,...n}=e;return _t(t,n)})}function $8(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function kde(e){switch(e){case`extension-direct`:return Dde();case`extension-delegate`:return Ode();default:return Ede()}}const e5=[`--domain`],Ade=[`--persist`];function jde(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
3652
3652
|
|
|
3653
3653
|
No approval (session-only, in-memory, never persisted):
|
|
3654
3654
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -3685,23 +3685,23 @@ Examples:
|
|
|
3685
3685
|
secret peek OPENAI_KEY
|
|
3686
3686
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
3687
3687
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
3688
|
-
`}function t5(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function n5(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const
|
|
3688
|
+
`}function t5(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function n5(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const Mde={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},Nde=new Set;function r5(e,t){if(e===t)return!0;try{return Vr(e).test(t)}catch{return!1}}function Pde(e,t){for(let n of e)if(r5(n,t))return!0;return!1}function i5(e){return{stdout:``,stderr:`${Kr(`secret`,e)}\n`,exitCode:1}}function Fde(e){let t=Tt(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??kde(t),i=e.grants??Nde,a=e.broker,o=()=>(a??=k_(),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(Pde(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${Mde[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&r5(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&qx(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}}}}function Ide(e){let t=ia(e);if(t.length!==0)return t.endsWith(`\r
|
|
3689
3689
|
`)?t.slice(0,-2):t.endsWith(`
|
|
3690
|
-
`)?t.slice(0,-1):t}async function
|
|
3691
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
3690
|
+
`)?t.slice(0,-1):t}async function Lde(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):i5(i)}async function Rde(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return i5(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function zde(e,t,n){let r=V(e.slice(1),{value:e5,bool:Ade});if(`error`in r)return n5(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
3691
|
+
`,exitCode:1};let a=r.positionals[1],o=Ide(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
3692
3692
|
`,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
|
|
3693
3693
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
3694
|
-
`,exitCode:1};let c=t5(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?
|
|
3695
|
-
`,exitCode:1}}async function
|
|
3696
|
-
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
3697
|
-
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
3694
|
+
`,exitCode:1};let c=t5(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?Lde(i,s,c,n):Rde(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
3695
|
+
`,exitCode:1}}async function Bde(e,t){let n=V(e.slice(1),{});if(`error`in n)return n5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
3696
|
+
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function Vde(e,t){let n=V(e.slice(1),{});if(`error`in n)return n5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
3697
|
+
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function Hde(e,t){let n=V(e.slice(1),{value:e5});if(`error`in n)return n5(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
3698
3698
|
`,exitCode:1};let i=t5(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
3699
|
-
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):i5(a)}async function
|
|
3700
|
-
`,stderr:``,exitCode:0};let i=Math.max(4,...r.map(e=>e.name.length)),a=`${`NAME`.padEnd(i)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;a+=`${e.name.padEnd(i)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:a,stderr:``,exitCode:0}}async function
|
|
3701
|
-
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let o=(await t.backend.list()).find(e=>e.name===r);return o?d(o.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${o.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
3699
|
+
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):i5(a)}async function Ude(e,t){let n=V(e.slice(1),{});if(`error`in n)return n5(n.error);let r=await t.backend.list();if(r.length===0)return{stdout:`No secrets stored
|
|
3700
|
+
`,stderr:``,exitCode:0};let i=Math.max(4,...r.map(e=>e.name.length)),a=`${`NAME`.padEnd(i)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;a+=`${e.name.padEnd(i)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:a,stderr:``,exitCode:0}}async function Wde(e,t,n){let r=V(e.slice(1),{});if(`error`in r)return n5(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`secret: ${t} requires a <name>\n`,exitCode:1};let a=await n.backend.delete(i);return a.removed?{stdout:`Removed ${a.fromSession===!0?`session`:`persisted`} secret "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${i}"\n`,exitCode:1}}async function Gde(e,t){let n=V(e.slice(1),{});if(`error`in n)return n5(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
3701
|
+
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let o=(await t.backend.list()).find(e=>e.name===r);return o?d(o.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${o.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function Kde(e,t){let n=V(e.slice(1),{});if(`error`in n)return n5(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
3702
3702
|
(changes are picked up on the next request — no restart needed)
|
|
3703
3703
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
3704
|
-
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function
|
|
3704
|
+
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function qde(e,t,n){let r=e[0];switch(r){case`set`:return zde(e,t,n);case`get`:case`read`:return Bde(e,n);case`peek`:return Vde(e,n);case`scope`:return Hde(e,n);case`list`:return Ude(e,n);case`delete`:case`rm`:return Wde(e,r,n);case`test`:return Gde(e,n);case`edit`:return Kde(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function Jde(e={}){let t=Fde(e);return H(`secret`,async(e,n)=>{if(e.length===0||jr(e,{valueFlags:e5}))return{stdout:jde(),stderr:``,exitCode:0};try{return await qde(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Yde(){return null}function a5(){return null}function o5(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
3705
3705
|
serve --logs [<token>] [--lines <n>]
|
|
3706
3706
|
serve --truncate [<token>]
|
|
3707
3707
|
|
|
@@ -3723,28 +3723,28 @@ Examples:
|
|
|
3723
3723
|
--truncate [t] Clear lifecycle records and re-arm the announcement latch.
|
|
3724
3724
|
--project Obsolete; ignored. Root-absolute paths work natively
|
|
3725
3725
|
under unified preview.
|
|
3726
|
-
`,stderr:``,exitCode:0}}function
|
|
3727
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
3726
|
+
`,stderr:``,exitCode:0}}function Xde(e){return`error`in e}function Zde(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
|
|
3727
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function Qde(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
|
|
3728
3728
|
`};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
3729
3729
|
`};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
|
|
3730
3730
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
3731
|
-
`}}function
|
|
3731
|
+
`}}function $de(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function efe(e,t,n){let r=Qde(e,t,n);if(r)return r;let i=$de(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
3732
3732
|
`};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
|
|
3733
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
3733
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=Zde(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
3734
3734
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
3735
3735
|
`}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
|
|
3736
3736
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
3737
|
-
`}:(n.directory=e,{skip:0})}function
|
|
3738
|
-
`,exitCode:1};if(t.webhookId){let n=await eZ();if(!n)return{stdout:`Preview revoked: ${e}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${t.webhookId}\`.\n`,exitCode:0};try{await n.deleteWebhook(t.webhookId)}catch(n){return{stdout:`Preview revoked: ${e}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${n instanceof Error?n.message:String(n)}. Delete it with \`webhook delete ${t.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${e}\n`,stderr:``,exitCode:0}}async function
|
|
3737
|
+
`}:(n.directory=e,{skip:0})}function tfe(e){let t={entry:`index.html`,bridge:!1,noBridge:!1,project:!1,list:!1,quiet:!1};for(let n=0;n<e.length;n+=1){let r=efe(e[n],e[n+1],t);if(Xde(r))return{...t,error:r.error};n+=r.skip}return t}async function nfe(e,t,n,r){if(!Gi(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=Qee(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function rfe(e){return`exitCode`in e}async function ife(e){let t,n=a5();if(n)t=await n({type:`stop`,previewToken:e});else{let n=i();if(!n)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=await n.call(`tray-revoke-preview`,{previewToken:e})}if(!t.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
|
|
3738
|
+
`,exitCode:1};if(t.webhookId){let n=await eZ();if(!n)return{stdout:`Preview revoked: ${e}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${t.webhookId}\`.\n`,exitCode:0};try{await n.deleteWebhook(t.webhookId)}catch(n){return{stdout:`Preview revoked: ${e}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${n instanceof Error?n.message:String(n)}. Delete it with \`webhook delete ${t.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${e}\n`,stderr:``,exitCode:0}}async function afe(){let e=a5();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
3739
3739
|
`,stderr:``,exitCode:0}:{stdout:s5(t),stderr:``,exitCode:0}}let t=i();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
|
|
3740
|
-
`,stderr:``,exitCode:0}:{stdout:s5(n),stderr:``,exitCode:0}}function s5(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${e.mode??`live`} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function
|
|
3741
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
3740
|
+
`,stderr:``,exitCode:0}:{stdout:s5(n),stderr:``,exitCode:0}}function s5(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${e.mode??`live`} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function ofe(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function sfe(e){let t,n=a5();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=i();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
|
|
3741
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(ofe).join(``)}`,stderr:``,exitCode:0}}async function cfe(e){let t,n,r=a5();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=i();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let a=await r.call(`tray-preview-truncate`,{previewToken:e});t=a.cleared,n=a.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function lfe(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:qt(s)})}return n}function c5(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function ufe(e){let t=Yde();if(t)return t(e);let n=i();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function dfe(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function ffe(e,t){if(!e)return{ok:!0};let n=await eZ();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function pfe(e,t,n,r,i,a,o){let s;try{s=await ufe({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await eZ();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await dfe(s.url,o),l=`${s.pushed} follower${s.pushed===1?``:`s`}`,u=c?` (targetId: ${c})`:``;return{stdout:`Preview URL: ${s.url}${u}\nPushed to ${l}\n`,stderr:i,exitCode:0}}async function mfe(e){if(e.stop){let t=e.stop;return c5(()=>ife(t))}if(e.list)return c5(()=>afe());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
3742
3742
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
3743
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return c5(()=>
|
|
3743
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return c5(()=>sfe({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return c5(()=>cfe(t))}}function hfe(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
3744
3744
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
3745
|
-
`,exitCode:1}}async function
|
|
3746
|
-
`:``,f=await
|
|
3747
|
-
`;function
|
|
3745
|
+
`,exitCode:1}}async function gfe(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return lfe(t,n)}}async function _fe(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return o5();let i=tfe(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await mfe(i);if(a)return a;if(!i.directory)return o5();let o=hfe(i);if(o)return o;let s=await nfe(i.directory,i.entry,t.fs,t.cwd);if(rfe(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await gfe(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
|
|
3746
|
+
`:``,f=await ffe(!i.noBridge&&i.bridge,d);return f.ok?pfe(i,c,l,f.webhookId,d,u,n):f.result}function vfe(e,t){return H(`serve`,(n,r)=>_fe(n,r,e,t))}const l5=`usage: session export [--id <id>] [--output <path>]
|
|
3747
|
+
`;function yfe(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function bfe(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${l5}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${l5}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${l5}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${l5}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${l5}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${l5}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function xfe(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||Hv(r)!==a.sha256)throw new m(`transfer-corrupt`);return r}function Sfe(){return H(`session`,async(e,t)=>{let n=e[0];if(jr(e))return{stdout:l5,stderr:``,exitCode:0};if(n!==`export`)return{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(n??``)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1};let r=bfe(e);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:1};let{sessionId:i,outputPath:a}=r.args;if(a!==null){let e=yfe(a);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${l5}`,exitCode:1}}let o=i==null?{kind:`active`}:{kind:`frozen`,sessionId:i};try{let e=await B_().export(o,{}),n=await xfe(e),r=a??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof m?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Cfe(){return H(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-Bj7sL3Vx.js`);return await n(e,t)})}const u5=`leader`;function wfe(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function Tfe(e){return+!!e.leader+e.followers.length}function d5(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
3748
3748
|
|
|
3749
3749
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
3750
3750
|
open <name> Open a sprinkle by name
|
|
@@ -3762,22 +3762,22 @@ Examples:
|
|
|
3762
3762
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
3763
3763
|
Use data-action="name" on buttons for callbacks
|
|
3764
3764
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
3765
|
-
`,stderr:``,exitCode:0}}function
|
|
3765
|
+
`,stderr:``,exitCode:0}}function Efe(){return globalThis.__slicc_sprinkleManager??null}function f5(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function p5(){return[u5,...DY().map(e=>e.runtimeId)]}function m5(e){return`unknown runtime "${e}"\nknown runtimes: ${p5().join(`, `)}\nRun \`host\` to see connected followers.`}async function Dfe(e,t){let n=e.slice(1).join(` `);if(!n){let e=ia(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
|
|
3766
3766
|
`,exitCode:1};let r=await Zt({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
3767
3767
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
3768
|
-
`,stderr:``,exitCode:0}}function
|
|
3769
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
3768
|
+
`,stderr:``,exitCode:0}}function Ofe(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function kfe(e){return[...e.map(e=>({name:e,runtimeId:u5})),...wfe()]}async function Afe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return f5(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!p5().includes(r))return f5(`list`,m5(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
3769
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=kfe([...a]).filter(e=>r===void 0||e.runtimeId===r),s=[];for(let e of i){let t=o.filter(t=>t.name===e.name);if(r!==void 0&&t.length===0)continue;let n=a.has(e.name)?` [open]`:``;s.push(` ${e.name}${n} ${e.title} (${e.path})`),s.push(...Ofe(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
3770
3770
|
`)+`
|
|
3771
|
-
`,stderr:``,exitCode:0}}function
|
|
3771
|
+
`,stderr:``,exitCode:0}}function jfe(e,t){let n=XX(void 0,t);return!n||Gg(e)?null:(Kg(e,n),Gg(e)===n?n:null)}async function Mfe(e,t,n){let r=V(t.slice(1),{});if(`error`in r)return f5(`open`,r.error);let i=r.positionals[0];if(!i)return f5(`open`,`name required`);let a=jfe(i,n);try{await e.open(i)}catch(e){return a&&qg(i),f5(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${a?`; licks route to "${a}"`:``}.\n`,stderr:``,exitCode:0}}function Nfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return f5(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):f5(`close`,`name required`)}async function Pfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return f5(`reload`,n.error);let r=n.positionals[0];if(!r)return f5(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return f5(`reload`,e instanceof Error?e.message:String(e))}}async function Ffe(e,t){let n=V(t.slice(1),{});if(`error`in n)return f5(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function Ife(e){let t=V(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return f5(`route`,t.error);let n=t.positionals[0];if(!n){let e=Jg(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
3772
3772
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
3773
3773
|
route for follower-forwarded licks too):
|
|
3774
3774
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
3775
3775
|
`)+`
|
|
3776
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return qg(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Gg(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Kg(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function
|
|
3777
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
3778
|
-
`,stderr:``,exitCode:0}}function
|
|
3779
|
-
`)}\n`:``}async function
|
|
3780
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
3776
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return qg(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Gg(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Kg(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function Lfe(e){let t=[];return e.leader&&t.push(u5),t.push(...e.followers),t.join(`, `)}async function Rfe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return f5(`send`,n.error);let r=n.positionals[0];if(!r)return f5(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return f5(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return f5(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!p5().includes(o))return f5(`send`,m5(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return f5(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return f5(`send`,m5(s.unknownRuntime));let c=Tfe(s);return c===0?f5(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${Lfe(s)}).\n`,stderr:``,exitCode:0}}function zfe(){return H(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return d5();let n=e[0];if(jr(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:Ar(`sprinkle`,n,d5().stdout),stderr:``,exitCode:0};if(n===`chat`)return Dfe(kr(e),t);let r=Efe();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
3777
|
+
`,exitCode:1};switch(n){case`list`:return Afe(r,e);case`open`:return Mfe(r,e,t.env);case`close`:return Nfe(r,e);case`reload`:return Pfe(r,e);case`refresh`:return Ffe(r,e);case`route`:return Ife(e);case`send`:return Rfe(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function Bfe(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
3778
|
+
`,stderr:``,exitCode:0}}function Vfe(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||ia(t.stdin).trim()}}function Hfe(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function Ufe(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function Wfe(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function Gfe(e){let t=e.flatMap(e=>e.values.map(e=>e.map(Wi).join(`|`)));return t.length>0?`${t.join(`
|
|
3779
|
+
`)}\n`:``}async function Kfe(e,t,n){let r=await Zee(),i=Hfe(e,n),a=await Ufe(r,i,n),o=a.exec(t);return await Wfe(a,i,n),a.close(),Gfe(o)}function h5(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function g5(e=`sqlite3`){return H(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return Bfe();let{database:r,sql:i}=Vfe(t,n);if(!i)return h5(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await Kfe(r,i,n),stderr:``,exitCode:0}}catch(t){return h5(e,t)}})}function _5(e){return{stdout:``,stderr:e.endsWith(`
|
|
3780
|
+
`)?e:`${e}\n`,exitCode:1}}function qfe(){return{stdout:`ssh - run a command on a connected tray follower
|
|
3781
3781
|
|
|
3782
3782
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
3783
3783
|
ssh --list
|
|
@@ -3800,11 +3800,11 @@ Examples:
|
|
|
3800
3800
|
ssh --list
|
|
3801
3801
|
ssh follower-abc123 "uname -a"
|
|
3802
3802
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
3803
|
-
`,stderr:``,exitCode:0}}function
|
|
3803
|
+
`,stderr:``,exitCode:0}}function Jfe(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
3804
3804
|
Start one with: slicc <join-url> follow sh -c
|
|
3805
3805
|
`;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`)}return`${n.join(`
|
|
3806
|
-
`)}\n`}function
|
|
3807
|
-
Usage: ssh <runtime-id> <command...>`);let r=i();if(!r)return _5(`ssh: not available in this environment (needs the standalone app)`);let a=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,o=()=>{r.call(`tray-exec-signal`,{execToken:a}).catch(()=>{})};t.signal?.addEventListener(`abort`,o,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,i=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:a,timeoutMs:e,stdin:
|
|
3806
|
+
`)}\n`}function Yfe(e){if(e.stdin===void 0)return;let t=ra(e.stdin);if(t.length===0)return;let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return l(n)}function Xfe(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function Zfe(){return H(`ssh`,async(e,t)=>{let n=Xfe(e);if(`help`in n)return qfe();if(`error`in n)return _5(n.error);if(n.list||n.runtimeId===void 0)return{stdout:Jfe(DY()),stderr:``,exitCode:0};if(!n.command)return _5(`ssh: missing command
|
|
3807
|
+
Usage: ssh <runtime-id> <command...>`);let r=i();if(!r)return _5(`ssh: not available in this environment (needs the standalone app)`);let a=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,o=()=>{r.call(`tray-exec-signal`,{execToken:a}).catch(()=>{})};t.signal?.addEventListener(`abort`,o,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,i=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:a,timeoutMs:e,stdin:Yfe(t)},{timeoutMs:(e??864e5)+5e3});return i.error?{stdout:i.stdout,stderr:`${i.stderr}ssh: ${i.error}\n`,exitCode:i.exitCode||1}:{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}catch(e){return _5(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,o)}})}function Qfe(e){return{stdout:``,stderr:`${Kr(`sudo`,e)}\n`,exitCode:1}}function $fe(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return H(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
|
|
3808
3808
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
3809
3809
|
|
|
3810
3810
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -3818,14 +3818,14 @@ Options:
|
|
|
3818
3818
|
-h, --help Show this help message and exit.
|
|
3819
3819
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
3820
3820
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
3821
|
-
`,exitCode:1};let a=e.join(` `).trim(),o=await t.requestApproval({kind:`command`,detail:a});if(o.decision===`deny`)return
|
|
3822
|
-
`,exitCode:1};let i=await Promise.all(r.map(e
|
|
3823
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
3824
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
3825
|
-
`,stderr:``,exitCode:0}}function x5(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function
|
|
3826
|
-
`)}\n`:``,stderr:``,exitCode:0}}async function
|
|
3827
|
-
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=
|
|
3828
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
3821
|
+
`,exitCode:1};let a=e.join(` `).trim(),o=await t.requestApproval({kind:`command`,detail:a});if(o.decision===`deny`)return Qfe(o);if(o.decision===`always`){let e=o.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function v5(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function y5(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function b5(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function epe(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await y5(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${v5(e)}\n`}}}function tpe(){return H(`rm`,async(e,t)=>{let n={recursive:b5(e,`r`)||b5(e,`R`)||e.includes(`--recursive`),force:b5(e,`f`)||e.includes(`--force`),verbose:b5(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
|
|
3822
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>epe(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function npe(e,t,n){let r=n.isSymbolicLink?`symbolic link`:n.isDirectory?`directory`:`regular file`;return e.replace(/%n/g,t).replace(/%N/g,`'${t}'`).replace(/%s/g,String(n.size)).replace(/%F/g,r).replace(/%a/g,n.mode.toString(8))}function rpe(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function ipe(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await y5(e,r);return{stdout:n.format?`${npe(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function ape(){return H(`stat`,async(e,t)=>{let n=rpe(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
3823
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>ipe(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function ope(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function spe(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await y5(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${v5(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=ope(a)}return{stdout:o,stderr:``}}function cpe(){return H(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
|
|
3824
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>spe(t,e,n,r))),o=a.map(e=>e.stdout).join(``),s=a.map(e=>e.stderr).join(``);return{stdout:o,stderr:s,exitCode:+!!s}})}function lpe(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
3825
|
+
`,stderr:``,exitCode:0}}function x5(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function upe(e,t){if(e.mode)return x5(`exactly one of -c, -x, or -t is required`);e.mode=t}function dpe(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const fpe={c:`create`,x:`extract`,t:`list`};function ppe(e,t,n,r,i){let a=fpe[e];if(a)return{nextIndex:r,error:upe(i,a)};if(e===`z`)return i.gzip=!0,{nextIndex:r};if(e===`v`)return i.verbose=!0,{nextIndex:r};if(e!==`f`&&e!==`C`)return{nextIndex:r,error:x5(`unsupported option -${e}`)};let o=dpe(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:x5(`option -${e} requires an argument`)}}function mpe(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=ppe(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function hpe(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return x5(`unsupported option ${r}`);let i=mpe(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function gpe(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):Hi(t)}async function S5(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await S5(e,Vi(t,n),`${a}${n}`,r)}function _pe(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?qa(e):e;return Ha(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function vpe(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return Xi(t,i)?i:void 0}async function ype(e,t){if(e.paths.length===0)return x5(`create mode requires at least one input path`);let n=[],r=t.fs.resolvePath(t.cwd,e.directory);for(let i of e.paths){let e=t.fs.resolvePath(r,i);await S5(t,e,gpe(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Ya(n);return await t.fs.writeFile(i,e.gzip?Ra(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
3826
|
+
`)}\n`:``,stderr:``,exitCode:0}}async function bpe(e,t){if(e.paths.length>0)return x5(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=_pe(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
|
|
3827
|
+
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=vpe(t,i,e.path);if(!n)return x5(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=qi(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
|
|
3828
|
+
`)}\n`:``,stderr:``,exitCode:0}}function xpe(){return H(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return lpe();let n=hpe(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?x5(`-C is only supported in create or extract mode`):n.mode===`create`?ype(n,t):bpe(n,t):x5(`option -f requires an archive path`):x5(`exactly one of -c, -x, or -t is required`)})}var Spe=`/**
|
|
3829
3829
|
* Standalone assertions - no dependency on test runner
|
|
3830
3830
|
*
|
|
3831
3831
|
* Each assertion:
|
|
@@ -4013,7 +4013,7 @@ function sameMembers(a, b) {
|
|
|
4013
4013
|
}
|
|
4014
4014
|
|
|
4015
4015
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
4016
|
-
`,
|
|
4016
|
+
`,Cpe=`/**
|
|
4017
4017
|
* tst - minimal test runner
|
|
4018
4018
|
*
|
|
4019
4019
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -4667,27 +4667,27 @@ Install:
|
|
|
4667
4667
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
4668
4668
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
4669
4669
|
with a clear \`ipk add\` hint.
|
|
4670
|
-
`;function
|
|
4671
|
-
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function
|
|
4672
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
4670
|
+
`;function wpe(e){let t=[],n=!1,r=null,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){i=!0;continue}if(s===`-v`||s===`--version`){a=!0;continue}if(s===`--noEmit`){n=!0;continue}if(s===`--outDir`){let t=e[o+1];if(typeof t!=`string`||t.startsWith(`-`))throw Error(`tsc: --outDir requires a value`);r=t,o+=1;continue}if(s.startsWith(`--outDir=`)){r=s.slice(9);continue}if(s.startsWith(`-`))throw Error(`tsc: unknown option: ${s}`);t.push(s)}return{files:t,noEmit:n,outDir:r,showHelp:i,showVersion:a}}function Tpe(e,t){let n=`${Hi(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${qi(e)}/${n}`}async function Epe(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=qi(n)}return null}const T5={target:`ES2022`,module:`ESNext`,moduleResolution:`Bundler`,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0};async function Dpe(e,t,n){let r=await Epe(e,n);if(!r)return{compilerOptions:{...T5}};let i;try{i=await e.readFile(r)}catch{return{compilerOptions:{...T5}}}let{config:a,error:o}=t.parseConfigFileTextToJson(r,i);if(o||!a)return{compilerOptions:{...T5}};let s=a.compilerOptions??{};return{compilerOptions:{...T5,...s}}}function E5(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
4671
|
+
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function Ope(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function D5(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function kpe(e,t,n,r){let{outputText:i,diagnostics:a}=D5(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>E5(e,t)),s=o.length>0?`${o.join(`
|
|
4672
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function Ape(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}Ope(e,a);let{outputText:s,diagnostics:c}=D5(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${E5(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,Tpe(a,r.outDir));try{await t.fs.writeFile(d,s)}catch(e){l.push(`tsc: ${d}: ${e instanceof Error?e.message:String(e)}\n`),u=!0}return{stderr:l.join(``),hadError:u}}async function jpe(e,t){let n;try{n=wpe(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:w5,stderr:``,exitCode:0}};let r;try{r=await Ri(C5(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function Mpe(){return H(`tsc`,async(e,t)=>{let n=await jpe(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await Dpe(t.fs,i,t.cwd);if(r.files.length===0){let e=ia(t.stdin);return e?kpe(i,r,a,e):{stdout:w5,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await Ape(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const Npe=[`**/*.test.{js,ts}`];function Ppe(e){let t=[],n=`tap`,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`-h`||a===`--help`){r=!0;continue}if(a===`--reporter`){let t=e[i+1];if(t!==`tap`&&t!==`spec`)throw Error(`test: --reporter must be tap or spec`);n=t,i+=1;continue}if(a.startsWith(`--reporter=`)){let e=a.slice(11);if(e!==`tap`&&e!==`spec`)throw Error(`test: --reporter must be tap or spec`);n=e;continue}if(a.startsWith(`-`))throw Error(`test: unknown option: ${a}`);t.push(a)}return{globs:t.length>0?t:[...Npe],reporter:n,showHelp:r}}function O5(e){let t=e.indexOf(`{`);if(t===-1)return[e];let n=e.indexOf(`}`,t);if(n===-1)return[e];let r=e.slice(0,t),i=e.slice(n+1),a=e.slice(t+1,n).split(`,`),o=[];for(let e of a)for(let t of O5(`${r}${e}${i}`))o.push(t);return o}function Fpe(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function Ipe(e,t,n){let r=n.flatMap(O5).map(Fpe),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let k5=null;async function Lpe(e){if(k5)return k5;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return k5=`
|
|
4673
4673
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
4674
4674
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
4675
4675
|
}
|
|
4676
4676
|
const __tst_assert_exports = (function () {
|
|
4677
4677
|
const module = { exports: {} };
|
|
4678
4678
|
const exports = module.exports;
|
|
4679
|
-
${e.transpileModule(
|
|
4679
|
+
${e.transpileModule(Spe,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
4680
4680
|
return module.exports;
|
|
4681
4681
|
})();
|
|
4682
4682
|
const __tst_module_exports = (function () {
|
|
4683
4683
|
const module = { exports: {} };
|
|
4684
4684
|
const exports = module.exports;
|
|
4685
|
-
${e.transpileModule(
|
|
4685
|
+
${e.transpileModule(Cpe,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("test: fork mode is not supported in the realm"))`)}
|
|
4686
4686
|
return module.exports;
|
|
4687
4687
|
})();
|
|
4688
4688
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
4689
4689
|
__tst.manual = true;
|
|
4690
|
-
`.trim(),k5}function A5(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function
|
|
4690
|
+
`.trim(),k5}function A5(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function Rpe(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function zpe(e,t,n){let r=_e(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function Bpe(e,t,n,r,i){let a=new Map,o=new Map,s=[{path:n,cjs:r}];for(;s.length>0;){let{path:n,cjs:r}=s.shift(),c=qi(n),l=new Map;for(let n of Rpe(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await zpe(e,c,n);if(!r||(l.set(n,r),a.has(r)))continue;let o=await e.readFile(r),u=t.transpileModule(o,{compilerOptions:i,fileName:r}).outputText;a.set(r,u),s.push({path:r,cjs:u})}o.set(n,l)}return{modules:a,edgeRewrites:o}}function Vpe(e,t,n,r,i,a){let o=r===`spec`?`pretty`:`tap`,s=[];for(let[e,t]of i.entries()){let n=A5(t,a.get(e)??new Map);s.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}return`"use strict";
|
|
4691
4691
|
${e}
|
|
4692
4692
|
const __tstReq = (id) => {
|
|
4693
4693
|
if (id === "tst") return __tst_module_exports;
|
|
@@ -4719,7 +4719,7 @@ const __state = await __tst.run({ format: ${JSON.stringify(o)} });
|
|
|
4719
4719
|
await Promise.resolve();
|
|
4720
4720
|
await new Promise((resolve) => setTimeout(resolve));
|
|
4721
4721
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
4722
|
-
`}const
|
|
4722
|
+
`}const Hpe={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function Upe(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...Hpe}}async function Wpe(e,t){let n;try{n=Ppe(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`test - run *.test.{js,ts} files with the bundled tst runner
|
|
4723
4723
|
|
|
4724
4724
|
Usage:
|
|
4725
4725
|
test [options] [glob...]
|
|
@@ -4732,7 +4732,7 @@ Notes:
|
|
|
4732
4732
|
- Default glob: **/*.test.{js,ts}, walked from the current cwd.
|
|
4733
4733
|
- .ts files are transpiled via the bundled typescript package.
|
|
4734
4734
|
- Each file runs in its own realm (same engine as 'node').
|
|
4735
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
4735
|
+
`,stderr:``,exitCode:0}};let r=await Ipe(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`test: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await Ri(C5(t))}catch(e){return{done:{stdout:``,stderr:`test: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await Lpe(i);return{parsed:n,files:r,ts:i,harness:a,userOpts:Upe(i)}}function Gpe(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function Kpe(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c;try{c=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`test: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let l;try{l=i.transpileModule(c,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`test: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let u,d;try{({modules:u,edgeRewrites:d}=await Bpe(e.fs,i,n,l,o))}catch(e){return{stdout:``,stderr:`test: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f=await hG(Vpe(a,n,l,s.reporter,u,d),[`node`,n],e,void 0,{filename:n});return{stdout:r?`# ${n}\n${f.stdout}`:f.stdout,stderr:f.stderr,failed:f.exitCode!==0||Gpe(f.stdout)}}function qpe(){return H(`test`,async(e,t)=>{let n=await Wpe(e,t);if(`done`in n)return n.done;let r=n.files.length>1,i=``,a=``,o=!1;for(let e of n.files){let s=await Kpe(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}return{stdout:i,stderr:a,exitCode:+!!o}})}const j5=[],M5=`usage: theme <subcommand> [args]
|
|
4736
4736
|
|
|
4737
4737
|
Subcommands:
|
|
4738
4738
|
list List available preset and custom themes
|
|
@@ -4741,23 +4741,23 @@ Subcommands:
|
|
|
4741
4741
|
reset Reset to the default theme
|
|
4742
4742
|
current Show the currently active theme
|
|
4743
4743
|
export <id> <path> Export a theme to a VFS path
|
|
4744
|
-
`;function N5(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function
|
|
4745
|
-
`),stderr:``,exitCode:0}}async function
|
|
4746
|
-
`,stderr:``,exitCode:0}}async function
|
|
4744
|
+
`;function N5(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function Jpe(){return H(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:M5,stderr:``,exitCode:0};let n=e[0];return jr(e.slice(1),{valueFlags:j5})?{stdout:Ar(`theme`,n,M5),stderr:``,exitCode:0}:n===`list`?Ype(e):n===`current`?Xpe(e):n===`reset`?Zpe(e):n===`apply`?Qpe(e.slice(1),t):n===`export`?$pe(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${M5}`,exitCode:1}})}async function Ype(e){let t=V(e.slice(1),{value:j5});if(`error`in t)return N5(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
|
|
4745
|
+
`),stderr:``,exitCode:0}}async function Xpe(e){let t=V(e.slice(1),{value:j5});return`error`in t?N5(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
4746
|
+
`,stderr:``,exitCode:0}}async function Zpe(e){let t=V(e.slice(1),{value:j5});if(`error`in t)return N5(`reset`,t.error);let n=i();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
4747
4747
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
4748
|
-
`,exitCode:1}}async function
|
|
4748
|
+
`,exitCode:1}}async function Qpe(e,t){let n=V(e,{value:j5});if(`error`in n)return N5(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
4749
4749
|
`,exitCode:1};let r=i();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
4750
4750
|
`,exitCode:1};let a=n.positionals[0],{PRESETS:o}=await import(`./theme-presets-xiOb9AFN.js`),s=o.find(e=>e.id===a);if(s){let e=JSON.stringify(s);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${s.name}\n`,stderr:``,exitCode:0}}let c=t.fs.resolvePath(t.cwd,a),l;try{l=await t.fs.readFile(c)}catch{return{stdout:``,stderr:`theme apply: "${a}" is not a known preset id and file not found at ${c}\n`,exitCode:1}}try{let e=JSON.parse(l);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
|
|
4751
4751
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
4752
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
4753
|
-
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const P5=`unknown`,F5=`usage: uname [-amnorsv]`,I5=[`s`,`n`,`r`,`v`,`m`,`o`];function
|
|
4754
|
-
`),stderr:``,exitCode:0}}function
|
|
4752
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function $pe(e,t){let n=V(e,{value:j5});if(`error`in n)return N5(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
4753
|
+
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const P5=`unknown`,F5=`usage: uname [-amnorsv]`,I5=[`s`,`n`,`r`,`v`,`m`,`o`];function eme(){return{stdout:[F5,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
|
|
4754
|
+
`),stderr:``,exitCode:0}}function tme(){let{releasedAt:e,buildId:t}=sr();return e?`${t} (${e})`:t}function nme(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:P5}function rme(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:P5}function ime(e){switch(e){case`s`:return`SLICC`;case`n`:return bee();case`r`:return sr().version;case`v`:return tme();case`m`:return nme();case`o`:return rme()}}function ame(e){return{stdout:``,stderr:`uname: ${e}\n${F5}\n`,exitCode:1}}function ome(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of I5)t.add(e);continue}if(!I5.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function sme(){return H(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return eme();let t=ome(e);return`error`in t?ame(t.error):{stdout:`${(t.size>0?I5.filter(e=>t.has(e)):[`s`]).map(ime).join(` `)}\n`,stderr:``,exitCode:0}})}function cme(){return H(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
4755
4755
|
Remove FILE. Symbolic links are removed without following their target.
|
|
4756
4756
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
4757
4757
|
`:`unlink: extra operand
|
|
4758
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function
|
|
4759
|
-
`,stderr:``,exitCode:0}}function
|
|
4760
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
4758
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function lme(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
4759
|
+
`,stderr:``,exitCode:0}}function ume(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
|
|
4760
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function dme(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Xi(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=qi(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function fme(){return H(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return lme();let n=ume(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=si(a),s=0;for(let[e,n]of Object.entries(o)){let r=await dme(t,i,e,n);if(r===!0)s++;else if(r!==!1)return r}return{stdout:`extracted ${s} file(s) to ${i}\n`,stderr:``,exitCode:0}})}const L5=`ai-ecoverse/slicc`,R5=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,z5=`packages/vfs-root`,B5=3e4,pme=[`${z5}/workspace/skills/`,`${z5}/shared/sprinkles/`,`${z5}/shared/sounds/`,`${z5}/shared/MEMORY.md`,`${z5}/etc/`],mme=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function hme(){return Object.fromEntries(mme.map(e=>[e,0]))}function V5(e,t,n,r){let i=hme();for(let e of n)i[e.classification]+=1;return`${JSON.stringify({ok:r.length===0&&i[`needs-review`]===0,from:e,to:t,results:n.map(({path:e,classification:t,sidecar:n})=>({path:e,status:t,...n?{sidecar:n}:{}})),summary:i,errors:r})}\n`}function gme(e){if(e[0]!==`apply`)throw Error(R5);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function H5(e){return e.startsWith(`v`)?e:`v${e}`}function _me(e){if(!pme.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function U5(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${B5}ms`)),B5)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function W5(e,t){let n=await U5(t,`https://api.github.com/repos/${L5}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=se(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=_me(e.path);t&&i.set(t,e.path)}return i}function G5(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${L5}/${encodeURIComponent(e)}/${n}`}function K5(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function vme(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function q5(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function J5(e,t,n,r,i){let a=`${t}.upgrade-${H5(n)}-to-${H5(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function yme(e,t,n,r,i,a,o){let s=await q5(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:K5(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(K5(i,a)||K5(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(K5(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(vme);if(c!==null&&l!==null&&u!==null){let i=Se(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${H5(n)}:${t}`,other:`${H5(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await J5(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await J5(e.fs,t,n,r,o)}}async function bme(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function xme(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await q5(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await bme(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function Sme(e,t,n){let r=H5(t),i=H5(n),[a,o]=await Promise.all([W5(r,e.fetch),W5(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?U5(e.fetch,G5(r,a.get(t))).then(e=>oe(e.body)):void 0,o.has(t)?U5(e.fetch,G5(i,o.get(t))).then(e=>oe(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await yme(e,r,t,n,i,a,l));return await xme(e.fs,u),u}async function Cme(e){let{version:t,releasedAt:n,buildId:r}=sr(),i=[],a=null,o=e.getLastSeen??lr();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function wme(e){return H(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${R5}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:V5(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await Cme(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=gme(t));let i=await Sme(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:V5(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:V5(n,r,[],[t]),stderr:``,exitCode:1}}})}const Tme=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function Eme(e){return _i(e,Tme)}function Y5(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function Dme(e){let t={};return e.has(`--vid`)&&(t.vendorId=Y5(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Y5(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Y5(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Y5(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Y5(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const Ome=new Set([`standard`,`class`,`vendor`]),kme=new Set([`device`,`interface`,`endpoint`,`other`]);function X5(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!Ome.has(t))throw Error(`invalid --request-type: '${t}'`);if(!kme.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Y5(e.get(`--request`)??`0`,`request`),value:Y5(e.get(`--value`)??`0`,`value`),index:Y5(e.get(`--index`)??`0`,`index`)}}function Z5(e){let t=ra(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Ame(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Q5(e){return`0x${e.toString(16).padStart(4,`0`)}`}function $5(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${Q5(e.vendorId)}:${Q5(e.productId)}\t${t}${n}${r}`}function e7(e){return{stdout:e,stderr:``,exitCode:0}}function t7(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const jme=`usb - access USB devices via WebUSB
|
|
4761
4761
|
|
|
4762
4762
|
Usage: usb <subcommand> [options]
|
|
4763
4763
|
|
|
@@ -4786,9 +4786,9 @@ Options:
|
|
|
4786
4786
|
-h, --help
|
|
4787
4787
|
|
|
4788
4788
|
Transfers are capped at ${LU} bytes (4 MiB).
|
|
4789
|
-
`;function n7(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return e7(t)}return e7(e.length?`${
|
|
4789
|
+
`;function n7(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return e7(t)}return e7(e.length?`${Ame(e)}\n`:``)}async function Mme(e){let t=await e.list();return t.length===0?e7(`no granted USB devices
|
|
4790
4790
|
`):e7(`${t.map($5).join(`
|
|
4791
|
-
`)}\n`)}async function
|
|
4791
|
+
`)}\n`)}async function Nme(e,t){let n=e.get(`--__resolved`);if(n)return e7(`${$5(await t.info(n))}\n`);let r=Dme(e),i=Yt();if(i){let e=await Nn(`usb-device`,r,i);if(e.handle)return e7(`${$5(await t.info(e.handle))}\n`);let n=e.info,a=MU();if(!a)return t7(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));return o?e7(`${$5(RU(IU().register(o),o))}\n`):t7(`request: granted device could not be re-acquired`)}return e7(`${$5(await t.request(r))}\n`)}async function Pme(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):e===`close`?await n.close(r):await n.reset(r),e7(``)):t7(`${e}: handle required`)}async function Fme(e,t){let[,n,r]=e;return!n||r===void 0?t7(`select-config: handle and value required`):(await t.selectConfig(n,Y5(r,`configuration`)),e7(``))}async function Ime(e,t,n){let[,r,i]=t;return!r||i===void 0?t7(`${e}: handle and interface required`):(await(e===`claim`?n.claim:n.release).call(n,r,Y5(i,`interface`)),e7(``))}async function Lme(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return t7(`control-in: handle and length required`);let o=Y5(a,`length`);return o>4194304?t7(`control-in length exceeds 4 MiB limit`):n7((await n.controlIn(i,X5(t),o)).bytes,r)}async function Rme(e,t,n,r){let i=e[1];if(!i)return t7(`control-out: handle required`);let a=Z5(t);return a.length>4194304?t7(`control-out payload exceeds 4 MiB limit`):e7(`${(await r.controlOut(i,X5(n),a)).bytesWritten} bytes written\n`)}async function zme(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return t7(`transfer-in: handle, endpoint and length required`);let s=Y5(o,`length`);return s>4194304?t7(`transfer-in length exceeds 4 MiB limit`):n7((await n.transferIn(i,Y5(a,`endpoint`),s)).bytes,r)}async function Bme(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return t7(`transfer-out: handle and endpoint required`);let o=Z5(t);return o.length>4194304?t7(`transfer-out payload exceeds 4 MiB limit`):e7(`${(await r.transferOut(i,Y5(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function Vme(e,t,n){let{positionals:r,flags:i,bools:a}=Eme(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Mme(n);case`request`:return Nme(i,n);case`open`:case`close`:case`reset`:return Pme(o,r,n);case`select-config`:return Fme(r,n);case`claim`:case`release`:return Ime(o,r,n);case`control-in`:return Lme(r,i,n,s);case`control-out`:return Rme(r,t,i,n);case`transfer-in`:return zme(r,i,n,s);case`transfer-out`:return Bme(r,t,i,n);default:return t7(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function Hme(){return H(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return e7(jme);let n=sW(a(),i());if(!n)return t7(`WebUSB is unavailable in this environment`);try{return await Vme(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?t7(`user cancelled or no device selected`):t7(t)}})}const r7=new Map;function i7(e){return r7.get(e)}function Ume(){return[...r7.values()]}function Wme(e){r7.set(e.name,e)}function Gme(e){r7.delete(e)}function a7(e){e.serve&&=(clearInterval(e.serve.timer),null)}function Kme(e){let{emulator:t}=e;t.add_listener(`serial0-output-byte`,t=>{e.serial.buffer+=String.fromCharCode(t),e.serial.buffer.length>262144&&(e.serial.buffer=e.serial.buffer.slice(-262144))}),t.v86?.cpu?.devices?.vga?.graphical_mode&&(e.screen.mode=`graphical`);let n=t.screen_adapter;if(!n)return;let r=n.set_mode;n.set_mode=t=>{e.screen.mode=t?`graphical`:`text`,r?.call(n,t)};let i=n.set_size_graphical;n.set_size_graphical=(t,r,a,o)=>{e.screen.width=t,e.screen.height=r,e.screen.frame=null,i?.call(n,t,r,a,o)};let a=n.update_buffer;n.update_buffer=t=>{let r=t[t.length-1];r&&(e.screen.frame={data:r.image_data.data,width:r.image_data.width,height:r.image_data.height}),a?.call(n,t)}}function o7(e){e.emulator.v86?.cpu?.devices?.vga?.screen_fill_buffer();let t=e.screen.frame;return!t||t.width===0||t.height===0?null:{data:new Uint8ClampedArray(t.data.slice(0,t.width*t.height*4)),width:t.width,height:t.height}}function s7(e){let t=e.emulator.screen_adapter?.get_text_screen?.();return t?t.map(e=>e.replace(/\s+$/u,``)).join(`
|
|
4792
4792
|
`):null}const c7=`/workspace/.v86`,l7=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
4793
4793
|
|
|
4794
4794
|
Requires: ${Zi} v86@${e6}
|
|
@@ -4842,10 +4842,10 @@ Notes:
|
|
|
4842
4842
|
mkdir -p ${c7}
|
|
4843
4843
|
curl -o ${c7}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
4844
4844
|
curl -o ${c7}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
4845
|
-
or pass -bios / -vgabios with explicit VFS paths.`,d7={"-n":f7,"-name":f7,"--name":f7,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>p7(e,`cdrom`,t),"-hda":(e,t)=>p7(e,`hda`,t),"-fda":(e,t)=>p7(e,`fda`,t),"-kernel":(e,t)=>p7(e,`kernel`,t),"-initrd":(e,t)=>p7(e,`initrd`,t),"-append":(e,t)=>p7(e,`append`,t),"-bios":(e,t)=>p7(e,`bios`,t),"-vgabios":(e,t)=>p7(e,`vgabios`,t),"-state":(e,t)=>p7(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function f7(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function p7(e,t,n){return e[t]=n,null}const
|
|
4845
|
+
or pass -bios / -vgabios with explicit VFS paths.`,d7={"-n":f7,"-name":f7,"--name":f7,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>p7(e,`cdrom`,t),"-hda":(e,t)=>p7(e,`hda`,t),"-fda":(e,t)=>p7(e,`fda`,t),"-kernel":(e,t)=>p7(e,`kernel`,t),"-initrd":(e,t)=>p7(e,`initrd`,t),"-append":(e,t)=>p7(e,`append`,t),"-bios":(e,t)=>p7(e,`bios`,t),"-vgabios":(e,t)=>p7(e,`vgabios`,t),"-state":(e,t)=>p7(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function f7(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function p7(e,t,n){return e[t]=n,null}const qme=[...Object.keys(d7),`--fps`,`--tail`,`--send`,`--to`];function Jme(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(d7,r)?d7[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}const m7={enter:[28],tab:[15],esc:[1],escape:[1],space:[57],backspace:[14],delete:[224,83],up:[224,72],down:[224,80],left:[224,75],right:[224,77],home:[224,71],end:[224,79],pageup:[224,73],pagedown:[224,81],insert:[224,82],f1:[59],f2:[60],f3:[61],f4:[62],f5:[63],f6:[64],f7:[65],f8:[66],f9:[67],f10:[68],f11:[87],f12:[88]},h7={ctrl:[29],alt:[56],shift:[42]};function Yme(e){let t=`1234567890`.indexOf(e);if(t!==-1)return[t===9?11:2+t];let n=[16,17,18,19,20,21,22,23,24,25,30,31,32,33,34,35,36,37,38,44,45,46,47,48,49,50],r=`qwertyuiopasdfghjklzxcvbnm`.indexOf(e.toLowerCase());return r===-1?null:[n[r]]}function Xme(e){let t=e.toLowerCase().split(/[-+]/u).filter(Boolean);if(t.length===0)return null;let n=[],r=[];for(let e=0;e<t.length;e++){let i=t[e];if(e!==t.length-1&&h7[i]){n.push(h7[i]);continue}let a=m7[i]??(i===`del`?m7.delete:void 0)??h7[i]??(i.length===1?Yme(i):null);if(!a)return null;r.push(a)}if(r.length===0)return null;let i=e=>e,a=e=>e.length===2?[e[0],e[1]|128]:[e[0]|128],o=[];for(let e of n)o.push(...i(e));for(let e of r)o.push(...i(e),...a(e));for(let e of[...n].reverse())o.push(...a(e));return o}function g7(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function _7(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function v7(e=``){return{stdout:e,stderr:``,exitCode:0}}function y7(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function b7(e){return i7(e)||_7(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function x7(e){return`exitCode`in e}async function S7(e){if(typeof OffscreenCanvas>`u`)throw Error(`screenshot requires OffscreenCanvas, unavailable in this runtime`);let t=new OffscreenCanvas(e.width,e.height),n=t.getContext(`2d`);if(!n)throw Error(`could not acquire 2d canvas context`);let r=e.data;n.putImageData(new ImageData(r,e.width,e.height),0,0);let i=await t.convertToBlob({type:`image/png`});return new Uint8Array(await i.arrayBuffer())}async function C7(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return _7(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const Zme={a:801,c:306,d:531};function w7(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Qme(e={}){return H(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return v7(l7);if(t[0]===`--version`)return $me(n,e);let r=t[0];if(jr(t.slice(1),{valueFlags:qme}))return v7(Ar(`v86`,r,l7,{prefix:`v86`}));let i=kr(t.slice(1));try{switch(r){case`start`:return await ihe(i,n,e);case`ls`:return ahe();case`type`:return ohe(i);case`key`:return she(i);case`mouse`:return lhe(i);case`screenshot`:return await uhe(i,n);case`text`:return dhe(i);case`serve`:return await phe(i,n);case`serial`:return mhe(i);case`state`:return await hhe(i,n);case`stop`:return await ghe(i,e);default:return _7(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return _7(e instanceof Error?e.message:String(e))}})}async function $me(e,t){if(t.loadEngine)return v7(`v86 ${(await t.loadEngine(g7(e))).version} (qemu-flavored CLI)\n`);let n=await r6(g7(e));return n?v7(`v86 ${n.version} (qemu-flavored CLI)\n`):_7(t6)}async function ehe(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await C7(t,e.bios??`${c7}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:_7(u7.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await C7(t,e.vgabios??`${c7}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:_7(u7.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function the(e,t,n){let r=await ehe(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await C7(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=Zme[e.boot]),e.state){let r=await C7(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const T7=6e4;function nhe(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${T7/1e3}s`)),T7);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function rhe(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return _7(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??y();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function ihe(e,t,n){let r=Jme(e);if(!r.ok)return _7(r.error);let i=r.parsed;if(i7(i.name))return _7(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=g7(t),o=n.loadEngine?await n.loadEngine(a):await ase({ipk:a}),s={wasm_fn:sse(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await the(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??w7();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{E7(u,d)})}Wme(u);try{if(await nhe(l),i.netRelay===`fetch`){let e=rhe(l,n);if(e)return await E7(u,d),e}Kme(u),await l.run()}catch(e){return await E7(u,d),_7(`boot failed: ${e instanceof Error?e.message:String(e)}`)}let f=u.pid===null?``:` (pid ${u.pid})`;return v7(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function E7(e,t){a7(e),Gme(e.name);try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function ahe(){let e=Ume();if(e.length===0)return v7(`no VMs running
|
|
4846
4846
|
`);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return v7(`${t.join(`
|
|
4847
|
-
`)}\n`)}function
|
|
4848
|
-
`).replace(/\\t/gu,` `);return r.emulator.keyboard_send_text(i),v7()}function
|
|
4847
|
+
`)}\n`)}function ohe(e){let{name:t,rest:n}=y7(e),r=b7(t);if(x7(r))return r;if(n.length===0)return _7(`type: no text supplied`);let i=n.join(` `).replace(/\\n/gu,`
|
|
4848
|
+
`).replace(/\\t/gu,` `);return r.emulator.keyboard_send_text(i),v7()}function she(e){let{name:t,rest:n}=y7(e),r=b7(t);if(x7(r))return r;if(n.length===0)return _7(`key: no chord supplied`);let i=[];for(let e of n){let t=Xme(e);if(!t)return _7(`key: unknown chord '${e}'`);i.push(t)}for(let e of i)r.emulator.keyboard_send_scancodes(e);return v7()}const che=[`left`,`middle`,`right`];function D7(e,t){let n=[t===`left`,t===`middle`,t===`right`];e.emulator.bus.send(`mouse-click`,n),e.emulator.bus.send(`mouse-click`,[!1,!1,!1])}function lhe(e){let{name:t,rest:n}=y7(e),r=b7(t);if(x7(r))return r;let i=n.indexOf(`--to`);if(i!==-1){let e=n[i+1],t=e?/^(\d+),(\d+)$/u.exec(e):null;if(!t)return _7(`mouse: --to requires <x>,<y>`);let[a,o]=[Number(t[1]),Number(t[2])];return r.emulator.bus.send(`mouse-delta`,[-16384,16384]),r.emulator.bus.send(`mouse-delta`,[a,-o]),v7()}let a=n[0];if(a===`move`){let e=Number.parseInt(n[1]??``,10),t=Number.parseInt(n[2]??``,10);return!Number.isFinite(e)||!Number.isFinite(t)?_7(`mouse: move requires <dx> <dy>`):(r.emulator.bus.send(`mouse-delta`,[e,-t]),v7())}if(a===`click`){let e=n[1]??`left`;return che.includes(e)?(D7(r,e),n.includes(`--double`)&&D7(r,e),v7()):_7(`mouse: unknown button '${n[1]}'`)}return _7(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function uhe(e,t){let{name:n,rest:r}=y7(e),i=b7(n);if(x7(i))return i;let a=o7(i);if(!a)return _7(`no graphical frame for '${n}' — the guest is in text mode; use \`v86 text -n ${n}\``);let o=t.fs.resolvePath(t.cwd,r[0]??`/tmp/v86-${n}.png`),s=await S7(a);return await t.fs.writeFile(o,s),v7(`${o} (${a.width}x${a.height})\n`)}function dhe(e){let{name:t}=y7(e),n=b7(t);if(x7(n))return n;let r=s7(n);return r===null?_7(n.screen.mode===`graphical`?`'${t}' is in graphical mode — use \`v86 screenshot -n ${t}\``:`text screen unavailable for '${t}'`):v7(`${r}\n`)}function fhe(e,t){return`<!DOCTYPE html>
|
|
4849
4849
|
<html lang="en"><head><meta charset="utf-8"><title>v86 — ${e}</title><style>
|
|
4850
4850
|
html,body{margin:0;height:100%;background:#111;color:#ddd;font-family:monospace}
|
|
4851
4851
|
body{display:flex;align-items:center;justify-content:center}
|
|
@@ -4877,10 +4877,10 @@ async function tick() {
|
|
|
4877
4877
|
}
|
|
4878
4878
|
tick();
|
|
4879
4879
|
<\/script></body></html>
|
|
4880
|
-
`}async function O7(e,t,n,r){let i=`text`,a=e.screen.mode===`graphical`?o7(e):null;if(a)await t.fs.writeFile(`${n}/frame.png`,await S7(a)),i=`graphical`;else{let r=s7(e);await t.fs.writeFile(`${n}/screen.txt`,r??`(no screen output yet)`)}let o={name:e.name,mode:i,seq:r,ts:Date.now()};await t.fs.writeFile(`${n}/state.json`,JSON.stringify(o))}async function
|
|
4880
|
+
`}async function O7(e,t,n,r){let i=`text`,a=e.screen.mode===`graphical`?o7(e):null;if(a)await t.fs.writeFile(`${n}/frame.png`,await S7(a)),i=`graphical`;else{let r=s7(e);await t.fs.writeFile(`${n}/screen.txt`,r??`(no screen output yet)`)}let o={name:e.name,mode:i,seq:r,ts:Date.now()};await t.fs.writeFile(`${n}/state.json`,JSON.stringify(o))}async function phe(e,t){let{name:n,rest:r}=y7(e),i=b7(n);if(x7(i))return i;if(r.includes(`--stop`)){if(!i.serve)return _7(`serve: no screen serve running for '${n}'`);let e=i.serve.dir;return a7(i),v7(`screen serve for '${n}' stopped (${e} left in place)\n`)}if(i.serve)return _7(`serve: already serving '${n}' at ${i.serve.dir} — --stop first`);let a=2,o=r.indexOf(`--fps`);if(o!==-1&&(a=Number.parseInt(r[o+1]??``,10),!Number.isFinite(a)||a<1||a>10))return _7(`serve: --fps requires 1-10`);let s=`/tmp/v86-serve-${n}`;await t.fs.mkdir(s,{recursive:!0}),await t.fs.writeFile(`${s}/index.html`,fhe(n,a));let c=0,l=!1,u=setInterval(()=>{l||(l=!0,O7(i,t,s,c++).catch(()=>{}).finally(()=>{l=!1}))},Math.round(1e3/a));return i.serve={dir:s,fps:a,timer:u},await O7(i,t,s,c++).catch(()=>{}),v7(`serving '${n}' screen at ${s} (${a} fps).\nMint an iframe-able URL with: serve ${s}\nStop with: v86 serve -n ${n} --stop\n`)}function mhe(e){let{name:t,rest:n}=y7(e),r=b7(t);if(x7(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
4881
4881
|
`);return e?(r.emulator.serial0_send(e),v7()):_7(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return v7(`${r.serial.buffer.split(`
|
|
4882
4882
|
`).slice(-Math.max(1,e)).join(`
|
|
4883
|
-
`)}\n`)}return v7(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
4883
|
+
`)}\n`)}return v7(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function hhe(e,t){let{name:n,rest:r}=y7(e),i=b7(n);if(x7(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return _7(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),v7(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return _7(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),v7()}async function ghe(e,t){let{name:n,rest:r}=y7(e),i=b7(n);if(x7(i))return i;let a=t.processManager??w7();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),v7(`VM '${n}' killed\n`)):(await E7(i,a),v7(`VM '${n}' stopped\n`))}const k7=[`--name`,`--filter`,`--scoop`],_he={state:`inactive`,session:null};function A7(){return{stdout:`usage: webhook <command> [options]
|
|
4884
4884
|
|
|
4885
4885
|
Commands:
|
|
4886
4886
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -4899,15 +4899,15 @@ Examples:
|
|
|
4899
4899
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
4900
4900
|
webhook list
|
|
4901
4901
|
webhook delete abc123
|
|
4902
|
-
`,stderr:``,exitCode:0}}function j7(e){return e().session?.webhookUrl??null}function M7(e,t,n){return t?xee(t,e):n()?Cee(self.location.href,e):`(URL unavailable — connect a leader tray)`}function N7(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function
|
|
4903
|
-
`,exitCode:1};let s=
|
|
4904
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
4905
|
-
`,exitCode:1};let r=await eZ();return r?await r.deleteWebhook(n)?{stdout:`Deleted webhook "${n}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${n}" not found\n`,exitCode:1}:N7(`delete`)}function
|
|
4906
|
-
`,exitCode:1}}return null}function
|
|
4902
|
+
`,stderr:``,exitCode:0}}function j7(e){return e().session?.webhookUrl??null}function M7(e,t,n){return t?xee(t,e):n()?Cee(self.location.href,e):`(URL unavailable — connect a leader tray)`}function N7(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function vhe(e,t,n){let r=V(e.slice(1),{value:k7});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=XX(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
|
|
4903
|
+
`,exitCode:1};let s=xhe(t);if(s)return s;let c=await eZ();if(!c)return N7(`create`);let l=await nZ(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=She(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function yhe(e,t){let n=V(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await eZ();if(!r)return N7(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
4904
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Che(t);return{stdout:whe(i.map(e=>({id:e.id,name:e.name,url:M7(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function bhe(e){let t=V(e.slice(1),{});if(`error`in t)return{stdout:``,stderr:`webhook delete: ${t.error}\n`,exitCode:1};let n=t.positionals[0];if(!n)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
4905
|
+
`,exitCode:1};let r=await eZ();return r?await r.deleteWebhook(n)?{stdout:`Deleted webhook "${n}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${n}" not found\n`,exitCode:1}:N7(`delete`)}function xhe(e){if(e.hasLocalNodeServer())return null;if(!j7(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
|
|
4906
|
+
`,exitCode:1}}return null}function She(e,t){try{return M7(e,j7(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Che(e){try{return{trayUrlBase:j7(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function whe(e,t,n,r){let i=`Active webhooks:
|
|
4907
4907
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
4908
4908
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
4909
4909
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
4910
|
-
`),i}function
|
|
4910
|
+
`),i}function The(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>_he)};return H(`webhook`,async(e,n)=>{if(e.length===0)return A7();let r=e[0];if(jr(e,{valueFlags:r===`create`?k7:void 0}))return A7();try{switch(r){case`create`:return await vhe(e,t,n.env);case`list`:return await yhe(e,t);case`delete`:return await bhe(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function Ehe(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
4911
4911
|
|
|
4912
4912
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
4913
4913
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -4949,19 +4949,19 @@ EXAMPLES:
|
|
|
4949
4949
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
4950
4950
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
4951
4951
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
4952
|
-
`,stderr:``,exitCode:0}}const P7=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function
|
|
4952
|
+
`,stderr:``,exitCode:0}}const P7=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function Dhe(e){let t={text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1},n=(n,r)=>{let i=e[n].indexOf(`=`);if(i!==-1&&e[n].startsWith(r))return{value:e[n].slice(i+1),next:n};let a=e[n+1];return a===void 0?(t.error=`websocat: missing value for ${r}\n`,null):{value:a,next:n+1}};for(let r=0;r<e.length;r+=1){let i=e[r];if(i===`-h`||i===`--help`)return t.showHelp=!0,t;if(P7.has(i)||P7.has(i.split(`=`)[0]))return t.error=`websocat: flag '${i}' is not supported in slicc's minimal client\n`,t;if(i===`-t`||i===`--text`){t.text=!0,t.binary=!1;continue}if(i===`-b`||i===`--binary`){t.binary=!0,t.text=!1;continue}if(i===`-1n`||i===`-n1`){t.oneMessage=!0,t.noClose=!0;continue}if(i===`-1`||i===`--one-message`){t.oneMessage=!0;continue}if(i===`-n`||i===`--no-close`){t.noClose=!0;continue}if(i===`-E`||i===`--exit-on-eof`){t.exitOnEof=!0;continue}if(i===`-u`||i===`--unidirectional`){t.unidirectional=!0;continue}if(i===`-U`||i===`--unidirectional-reverse`){t.unidirectionalReverse=!0;continue}if(i===`-k`||i===`--insecure`){t.insecure=!0;continue}if(i===`-q`){t.quiet=!0;continue}if(i===`-v`){t.verbose+=1;continue}if(i===`-vv`){t.verbose+=2;continue}if(i===`-0`||i===`--null-terminated`){t.nullTerminated=!0;continue}if(i===`--base64`){t.base64=!0;continue}if(i===`--jsonrpc`){t.jsonrpc=!0;continue}if(i===`--jsonrpc-omit-jsonrpc`){t.jsonrpcOmit=!0,t.jsonrpc=!0;continue}if(i===`--close-status-code`||i.startsWith(`--close-status-code=`)){let e=n(r,`--close-status-code`);if(!e)return t;let i=Number(e.value);if(!Number.isFinite(i)||i<1e3||i>4999)return t.error=`websocat: --close-status-code expects 1000..4999, got '${e.value}'\n`,t;t.closeStatus=i,r=e.next;continue}if(i===`--close-reason`||i.startsWith(`--close-reason=`)){let e=n(r,`--close-reason`);if(!e)return t;t.closeReason=e.value,r=e.next;continue}if(i===`-B`||i===`--buffer-size`||i.startsWith(`--buffer-size=`)){let e=n(r,i===`-B`?`-B`:`--buffer-size`);if(!e)return t;let a=Number(e.value);if(!Number.isFinite(a)||a<=0)return t.error=`websocat: --buffer-size expects positive integer
|
|
4953
4953
|
`,t;t.bufferSize=a,r=e.next;continue}if(i===`--max-messages`||i.startsWith(`--max-messages=`)){let e=n(r,`--max-messages`);if(!e)return t;let i=Number(e.value);if(!Number.isFinite(i)||i<=0)return t.error=`websocat: --max-messages expects positive integer
|
|
4954
4954
|
`,t;t.maxMessages=i,r=e.next;continue}if(i===`--protocol`||i.startsWith(`--protocol=`)){let e=n(r,`--protocol`);if(!e)return t;t.protocol=e.value,r=e.next;continue}if(i===`--ping-interval`||i.startsWith(`--ping-interval=`)){let e=n(r,`--ping-interval`);if(!e)return t;t.pingInterval=Number(e.value),r=e.next;continue}if(i===`--conn-timeout`||i.startsWith(`--conn-timeout=`)){let e=n(r,`--conn-timeout`);if(!e)return t;let i=Number(e.value);if(!Number.isFinite(i)||i<=0)return t.error=`websocat: --conn-timeout expects positive seconds
|
|
4955
4955
|
`,t;t.connTimeoutMs=Math.round(i*1e3),r=e.next;continue}if(i===`-H`||i===`--header`||i.startsWith(`--header=`)){let e=n(r,i===`-H`?`-H`:`--header`);if(!e)return t;t.customHeaders.push(e.value),r=e.next;continue}if(i.startsWith(`-`))return t.error=`websocat: unknown flag '${i}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${i}' — advanced mode is not supported\n`,t;t.url=i}return t.closeReason!==void 0&&t.closeStatus===void 0&&(t.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
|
|
4956
|
-
`),t}function
|
|
4957
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
4956
|
+
`),t}function Ohe(e,t){if(!e)return[];let n=t?`\0`:`
|
|
4957
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function khe(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function F7(e){let t=``;for(let n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return btoa(t)}function Ahe(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return F7(e)}}async function jhe(e,t,n={}){let r=Dhe(e);if(r.showHelp)return Ehe();if(r.error)return{stdout:``,stderr:r.error,exitCode:2};if(!r.url)return{stdout:``,stderr:`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
4958
4958
|
`,exitCode:2};if(!/^wss?:\/\//i.test(r.url))return{stdout:``,stderr:`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`,exitCode:2};let i=n.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0);if(!i)return{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
4959
4959
|
`,exitCode:1};let a=[],o=e=>{r.quiet||a.push(`websocat: ${e}`)};r.verbose>=1&&(r.customHeaders.length>0&&o(`-H/--header is accepted for parity but browsers do not allow setting WebSocket request headers; only --protocol is honored`),r.pingInterval!==void 0&&o(`--ping-interval has no effect in browsers (no ping API exposed)`),r.insecure&&o(`-k/--insecure has no effect in browsers`));let s=[],c=r.nullTerminated?`\0`:`
|
|
4960
|
-
`,l;try{l=r.protocol?new i(r.url,r.protocol):new i(r.url)}catch(e){return{stdout:``,stderr:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}l.binaryType=`arraybuffer`;let u=0,d=1e4,f=0,p=!1,m,h,g=new Promise((e,t)=>{m=e,h=t}),_,v=!1,y=new Promise(e=>{_=t=>{v||(v=!0,e(t))}}),b=0,x=!1,S=setTimeout(()=>{x=!0;try{l.close()}catch{}p||h(Error(`connect timeout`))},r.connTimeoutMs);l.onopen=()=>{clearTimeout(S),p=!0,m()};let C=!1;l.onmessage=e=>{if(!C){if(!r.unidirectional){let t,n=!1;typeof e.data==`string`?t=new TextEncoder().encode(e.data):e.data instanceof ArrayBuffer?(t=new Uint8Array(e.data),n=!0):ArrayBuffer.isView(e.data)?(t=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength),n=!0):t=new TextEncoder().encode(String(e.data)),t.length>r.bufferSize&&(o(`inbound message of ${t.length} bytes exceeds --buffer-size ${r.bufferSize}; truncating`),t=t.slice(0,r.bufferSize));let i=n&&r.base64?F7(t):
|
|
4960
|
+
`,l;try{l=r.protocol?new i(r.url,r.protocol):new i(r.url)}catch(e){return{stdout:``,stderr:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}l.binaryType=`arraybuffer`;let u=0,d=1e4,f=0,p=!1,m,h,g=new Promise((e,t)=>{m=e,h=t}),_,v=!1,y=new Promise(e=>{_=t=>{v||(v=!0,e(t))}}),b=0,x=!1,S=setTimeout(()=>{x=!0;try{l.close()}catch{}p||h(Error(`connect timeout`))},r.connTimeoutMs);l.onopen=()=>{clearTimeout(S),p=!0,m()};let C=!1;l.onmessage=e=>{if(!C){if(!r.unidirectional){let t,n=!1;typeof e.data==`string`?t=new TextEncoder().encode(e.data):e.data instanceof ArrayBuffer?(t=new Uint8Array(e.data),n=!0):ArrayBuffer.isView(e.data)?(t=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength),n=!0):t=new TextEncoder().encode(String(e.data)),t.length>r.bufferSize&&(o(`inbound message of ${t.length} bytes exceeds --buffer-size ${r.bufferSize}; truncating`),t=t.slice(0,r.bufferSize));let i=n&&r.base64?F7(t):Ahe(t);s.length<d?s.push(i):(f===0&&o(`output buffer reached ${d} messages; dropping further inbound messages — use -1, --max-messages, or pipe to a file with a different tool for long-running streams`),f+=1)}if(u+=1,r.maxMessages!==void 0&&u>=r.maxMessages){C=!0,T();return}r.oneMessage&&(C=!0,T())}},l.onerror=()=>{x||(o(`websocket error`),b=1,p||h(Error(`connect failed`)))},l.onclose=e=>{if(clearTimeout(S),x){_(124);return}r.verbose>=1&&o(`closed code=${e.code} reason=${JSON.stringify(e.reason||``)}`),b===0&&e.code!==1e3&&e.code!==1005&&e.code!==1001&&(b=1),p||h(Error(`connect closed (code ${e.code})`)),_(b)};function w(e,t){try{t===void 0?l.close(e):l.close(e,t)}catch{}}function T(){if(r.noClose){_(b);return}w(r.closeStatus??1e3,r.closeReason)}try{await g}catch(e){clearTimeout(S);let t=e instanceof Error?e.message:String(e);return{stdout:s.join(c)+(s.length?c:``),stderr:a.concat([`websocat: ${t}`]).join(`
|
|
4961
4961
|
`)+`
|
|
4962
|
-
`,exitCode:t===`connect timeout`?124:1}}if(r.unidirectionalReverse)!r.noClose&&r.exitOnEof&&!r.oneMessage&&setTimeout(()=>{w(r.closeStatus??1e3,r.closeReason)},0);else{let e=
|
|
4962
|
+
`,exitCode:t===`connect timeout`?124:1}}if(r.unidirectionalReverse)!r.noClose&&r.exitOnEof&&!r.oneMessage&&setTimeout(()=>{w(r.closeStatus??1e3,r.closeReason)},0);else{let e=Ohe(t.stdin,r.nullTerminated),n=1,i=0,a=r.oneMessage?e.slice(0,1):e;for(let e of a){let t=e;r.jsonrpc&&(t=khe(e,n,r.jsonrpcOmit),n+=1),r.binary?l.send(new TextEncoder().encode(t).buffer):l.send(t),i+=1}!r.oneMessage&&!r.noClose&&(r.exitOnEof||i===0)&&setTimeout(()=>{w(r.closeStatus??1e3,r.closeReason)},0)}let E=await y;return f>0&&o(`dropped ${f} inbound message(s) due to output buffer cap`),{stdout:s.length?s.join(c)+c:``,stderr:a.length?a.join(`
|
|
4963
4963
|
`)+`
|
|
4964
|
-
`:``,exitCode:E}}function
|
|
4964
|
+
`:``,exitCode:E}}function Mhe(){return H(`websocat`,async(e,t)=>jhe(e,{stdin:ia(t.stdin)}))}function Nhe(){return H(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}async function Phe(e,t){let n=t===void 0?void 0:Ai(t);return e.scriptCatalog?e.scriptCatalog.getJshCommands(n):e.fs?Kee(e.fs,n):new Map}async function Fhe(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Uee(e.fs):new Map}function Ihe(e,t,n,r,i,a){if(r.has(e)){let r=[`/usr/bin/${e}`];return(t||n)&&r.push(` (shadowed by built-in ${e})`),{lines:r,found:!0}}if(t){let e=[t];return n&&e.push(` ${n.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return n?{lines:[`${n.path} (workflow)`],found:!0}:i.has(e)&&!a.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function Lhe(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return H(`which`,async(e,n)=>{if(jr(e))return{stdout:`which - locate a command
|
|
4965
4965
|
|
|
4966
4966
|
Usage: which <command> [command...]
|
|
4967
4967
|
|
|
@@ -4971,9 +4971,9 @@ Prints the path of the given command(s).
|
|
|
4971
4971
|
|
|
4972
4972
|
Exit code 0 if all commands found, 1 if any not found.
|
|
4973
4973
|
`,stderr:``,exitCode:0};let r=V(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
|
|
4974
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
4974
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await Phe(t,n.env.get(`PATH`)),s=await Fhe(t),c=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,l=new Set(t.getScriptRegisteredNames?.()??[]),u=[],d=!0;for(let e of r.positionals){let t=Ihe(e,o.get(e),s.get(e),c,a,l);u.push(...t.lines),t.found||(d=!1)}return{stdout:u.length>0?u.join(`
|
|
4975
4975
|
`)+`
|
|
4976
|
-
`:``,stderr:``,exitCode:+!d}})}const I7=`__slicc_workflows`,
|
|
4976
|
+
`:``,stderr:``,exitCode:+!d}})}const I7=`__slicc_workflows`,Rhe=String.raw`
|
|
4977
4977
|
class WorkflowError extends Error {}
|
|
4978
4978
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
4979
4979
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -5086,40 +5086,40 @@ function log(message) {
|
|
|
5086
5086
|
}
|
|
5087
5087
|
const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
|
|
5088
5088
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
5089
|
-
`;function L7(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function
|
|
5089
|
+
`;function L7(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function zhe(e){let t=Hhe(e);return t===null?{name:null,description:null}:{name:z7(t,`name`),description:z7(t,`description`)}}function Bhe(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function Vhe(e){return`const __emit = console.log.bind(console);
|
|
5090
5090
|
const __stringify = JSON.stringify.bind(JSON);
|
|
5091
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
5091
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${Bhe(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function R7(e,t){let n=e.split(`
|
|
5092
5092
|
`);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
|
|
5093
|
-
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function
|
|
5093
|
+
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function Hhe(e){let t=/\bmeta\s*=\s*\{/.exec(e);if(!t)return null;let n=t.index+t[0].length-1,r=0;for(let t=n;t<e.length;t++)if(e[t]===`{`)r++;else if(e[t]===`}`&&--r===0)return e.slice(n+1,t);return null}function z7(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const B7=r(`workflow-command`),V7=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
5094
5094
|
workflow run --script '<inline js>' [...]
|
|
5095
5095
|
workflow list
|
|
5096
5096
|
workflow status <runId>
|
|
5097
5097
|
workflow stop <runId>
|
|
5098
5098
|
workflow save <runId> <name> [--force]
|
|
5099
5099
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
5100
|
-
pass --wait to block and print the full result.`,
|
|
5101
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
5100
|
+
pass --wait to block and print the full result.`,Uhe=new Set([`list`,`status`,`stop`,`save`]);function H7(){return globalThis[I7]}function Whe(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function Ghe(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function Khe(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=Whe(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=Ghe(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function qhe(e={}){return H(`workflow`,async(t,n)=>{if(Uhe.has(t[0])&&jr(t.slice(1)))return{stdout:V7+`
|
|
5101
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return Qhe(t,n);if(t[0]===`save`)return Zhe(t,n,e);let r=Khe(t);if(r.help)return{stdout:V7+`
|
|
5102
5102
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
5103
|
-
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=
|
|
5104
|
-
`,exitCode:1};let s=L7().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=L7(),u=
|
|
5105
|
-
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const
|
|
5106
|
-
`,exitCode:1};if(!
|
|
5103
|
+
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=zhe(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
5104
|
+
`,exitCode:1};let s=L7().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=L7(),u=Vhe({prelude:Rhe,config:{...r.hasArgs?{args:r.args}:{},cap:r.cap??8,budget:r.budget??null,cwd:n.cwd,agentCwd:c},body:i,sentinel:l});return r.wait?Jhe(u,a,l,o,n):Yhe({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function Jhe(e,t,n,r,i){let a;try{a=await hG(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return B7.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $he(r,a,n)}async function Yhe(e){let t=H7();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
5105
|
+
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const Xhe=/^[a-z0-9][a-z0-9-]*$/,U7=`/workspace/.workflows`;async function Zhe(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
|
|
5106
|
+
`,exitCode:1};if(!Xhe.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=H7()?.getRun(a);if(!c)return{stdout:``,stderr:`workflow: no run '${a}' (only backgrounded runs are saveable; --wait runs are not)\n`,exitCode:1};if(!c.source)return{stdout:``,stderr:`workflow: run '${a}' has no source to save\n`,exitCode:1};let l=`${U7}/${o}.workflow.js`;if(await t.fs.exists(l)){if(!r)return{stdout:``,stderr:`workflow: ${l} already exists (pass --force to overwrite)\n`,exitCode:1}}else if(new Set(t.getRegisteredCommands?.()??[]).has(o))return{stdout:``,stderr:`workflow: '${o}' is already a command — choose another name\n`,exitCode:1};await t.fs.mkdir(U7,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){B7.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function Qhe(e,t){let n=H7();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
5107
5107
|
`,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
|
|
5108
5108
|
`):`(no runs)`)+`
|
|
5109
5109
|
`,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
|
|
5110
5110
|
`)+`
|
|
5111
|
-
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function
|
|
5111
|
+
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function $he(e,t,n){let{result:r,log:i,hadResult:a}=R7(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?ege(i)+`
|
|
5112
5112
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
5113
5113
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
5114
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
5114
|
+
`,stderr:t.stderr,exitCode:0}}function ege(e){return e.split(`
|
|
5115
5115
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
5116
|
-
`)}function W7(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function
|
|
5116
|
+
`)}function W7(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function tge(e){if(e==null)throw Error(`missing option value`);let t=e.startsWith(`-`),n=t||e.startsWith(`+`)?e.slice(1):e,r;if(/^0x[0-9a-fA-F]+$/.test(n))r=parseInt(n.slice(2),16);else if(/^[0-9]+$/.test(n))r=parseInt(n,10);else throw Error(`invalid number: ${e}`);return t?-r:r}function G7(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function K7(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function nge(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function rge(e,t,n,r,i){let a=[];for(let o=0;o<e.length;o+=t){let s=Math.min(o+t,e.length),c=(i+o).toString(16).padStart(8,`0`),l=``;for(let i=0;i<t;i++)n>0&&i>0&&i%n===0&&(l+=` `),l+=o+i<s?G7(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
|
|
5117
5117
|
`)+`
|
|
5118
|
-
`:``}function
|
|
5119
|
-
`}return r}function
|
|
5118
|
+
`:``}function ige(e,t,n){let r=``;for(let i=0;i<e.length;i+=t){let a=``;for(let r=0;r<t&&i+r<e.length;r++)a+=G7(e[i+r],n);r+=a+`
|
|
5119
|
+
`}return r}function age(e,t,n,r){let i=Array.from(e,e=>`0x${G7(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
5120
5120
|
`);return r===null?i.length?o+`
|
|
5121
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
5122
|
-
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const
|
|
5121
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function oge(e){let t=e.replace(/[^0-9a-fA-F]/g,``),n=Math.floor(t.length/2),r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=parseInt(t.substr(e*2,2),16);return r}function sge(e){let t=[],n=0;for(let r of e.split(`
|
|
5122
|
+
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const cge={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},lge=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function uge(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=cge[r];if(i){t[i]=!0;continue}let a=lge.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=tge(a.exact.includes(r)?e[++n]:r.slice(2));continue}if(r!==`-`&&r.startsWith(`-`)&&r.length>1)throw Error(`invalid option ${r}`);t.positional.push(r)}return t}function dge(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function fge(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=ra(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function pge(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?ige(t,a,e.upper):e.include?age(t,a,e.upper,i?null:nge(r??``)):rge(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function mge(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function hge(){return H(`xxd`,async(e,t)=>{if(dge(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
5123
5123
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
5124
5124
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
5125
5125
|
-l len stop after len octets
|
|
@@ -5129,31 +5129,31 @@ pass --wait to block and print the full result.`,Hhe=new Set([`list`,`status`,`s
|
|
|
5129
5129
|
-i output in C include style
|
|
5130
5130
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
5131
5131
|
-h show this help
|
|
5132
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
5133
|
-
`,stderr:``,exitCode:0}}function
|
|
5132
|
+
`,stderr:``,exitCode:0};let n;try{n=uge(e)}catch(e){return W7(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await fge(t,r,a)}catch{return W7(`${r}: No such file or directory`)}if(n.revert){let e=K7(o),r=n.plain?oge(e):sge(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:K7(r),stderr:``,exitCode:0}}let{data:s,base:c}=mge(n,o),l=pge(n,s,c,r,a);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),l),{stdout:``,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}})}async function q7(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=Vi(t,o),s=n?`${n}/${o}`:o;a+=await q7(e,i,s,r)}return a}function gge(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
5133
|
+
`,stderr:``,exitCode:0}}function _ge(){return H(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return gge();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
|
|
5134
5134
|
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||Hi(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await q7(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
5135
|
-
`,exitCode:1};let c=oi(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function _ge(e={}){let t=[$ae({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),IY(),Xfe(),Sfe(),_fe(e.browserAPI,e.fs),Jle(e.browserAPI),pZ(e.browserAPI),xoe(e),gge(),dme(),bpe(),epe(),spe(),ipe(),cX(),mge(),g5(`sqlite3`),g5(`sqllite`),jpe(),Kpe(),m$(),bY(),Yce({buildProcessConfig:e.buildProcessConfig}),M8(`python3`,{buildProcessConfig:e.buildProcessConfig}),M8(`python`,{buildProcessConfig:e.buildProcessConfig}),...e.fs&&e.fetch?[$3(`ipk`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),$3(`npm`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),$3(`i`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),b6(`ipx`,{fs:e.fs,fetch:e.fetch}),b6(`npx`,{fs:e.fs,fetch:e.fetch}),ZZ(`di`,{fs:e.fs,fetch:e.fetch}),ZZ(`uv`,{fs:e.fs,fetch:e.fetch}),Cme({fs:e.fs,fetch:e.fetch})]:[],...e.fetch?[ioe({fetch:e.fetch})]:[],n0(),whe(e.webhook),jhe(),fZ(),Jse({fs:e.fs,scriptCatalog:e.scriptCatalog}),sue({fs:e.fs,fetch:e.fetch}),E0(),Rfe(),_8(`pdftk`),_8(`pdf`),xY(`biscotto`),xY(`biscotti`),y8(`pdftoppm`),y8(`pdftocairo`),rue(`pdftotext`),YX(`convert`),YX(`magick`),Ihe({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),qpe(),ome(),sme(),Gse(),zQ(),mle(),ole(),Hse(),qde({setEnv:e.setEnv}),$ue({fs:e.fs}),xde(),aX(),oX(),sX(`xclip`),sX(`xsel`),dde(),B0(),Xq(),Zq(),Wce(e.fs),Tr(),$ce(),gJ({getParentJid:e.getParentJid}),qQ(),xue({processManager:e.processManager}),yse({processManager:e.processManager}),Sce(),Lse(),Vme(),boe(),X$(),Zme({processManager:e.processManager}),s1(),QY({registry:e.cherryRuntimeRegistry}),bZ(),DZ({fs:e.fs}),OZ({fs:e.fs}),Qfe(e.sudoCommand),Khe({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Mhe(),xfe()];return e.fs&&(aue(),t.push(...Ci.map(t=>Xae(t,e.browserAPI,e.fs)))),t}const vge=Reflect.get(wr,`DefenseInDepthBox`);function J7(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?`vfs-ino:${e}`:void 0}var yge=class{vfs;registeredCommandsFn=null;constructor(e){this.vfs=e}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=vge?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let t=_e(e),n=await this.vfs.readFile(t,{encoding:`binary`}),r=n instanceof Uint8Array?n:new TextEncoder().encode(n);try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(r)}catch{let e=Array(r.length);for(let t=0;t<r.length;t++)e[t]=String.fromCharCode(r[t]);return e.join(``)}})}async readFileBuffer(e){return this.trusted(async()=>{let t=_e(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async writeFile(e,t,n){return this.trusted(async()=>{let n=_e(e);if(typeof t==`string`){let e=ae(t);if(e){await this.vfs.writeFile(n,e);return}let r=!1;for(let e=0;e<t.length;e++)if(t.charCodeAt(e)>255){r=!0;break}if(r)await this.vfs.writeFile(n,new TextEncoder().encode(t));else{let e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);await this.vfs.writeFile(n,e)}}else await this.vfs.writeFile(n,t)})}async appendFile(e,t,n){return this.trusted(async()=>{let n=_e(e);try{if((await this.vfs.stat(n)).type===`directory`)throw new In(`EISDIR`,`is a directory`,n)}catch(e){if(e instanceof In&&e.code===`EISDIR`)throw e}let r=new Uint8Array;try{let e=await this.vfs.readFile(n,{encoding:`binary`});r=e instanceof Uint8Array?new Uint8Array(e):new TextEncoder().encode(e)}catch(e){if(!(e instanceof In&&e.code===`ENOENT`))throw e}let i;if(typeof t==`string`){i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e)&255}else i=t instanceof Uint8Array?t:new Uint8Array(t);let a=new Uint8Array(r.length+i.length);a.set(r),a.set(i,r.length),await this.vfs.writeFile(n,a)})}async exists(e){return this.trusted(async()=>{let t=_e(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=_e(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.type===`directory`?493:420,size:r.size,mtime:new Date(r.mtime),identity:J7(r.ino)};let i=await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.type===`directory`?493:420,size:i.size,mtime:new Date(i.mtime),identity:J7(i.ino)}})}async lstat(e){return this.trusted(async()=>{let t=_e(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.type===`directory`?493:r.type===`symlink`?511:420,size:r.size,mtime:new Date(r.mtime),identity:J7(r.ino)};let i=await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.type===`directory`?493:i.type===`symlink`?511:420,size:i.size,mtime:new Date(i.mtime),identity:J7(i.ino)}})}async mkdir(e,t){return this.trusted(async()=>{await this.vfs.mkdir(_e(e),t)})}async readdir(e){return this.trusted(async()=>{let t=_e(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);return n===null?(await this.vfs.readDir(t)).map(e=>e.name):n.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=_e(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t);return this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.trusted(async()=>{await this.vfs.rm(_e(e),t)})}async cp(e,t,n){return this.trusted(async()=>{let r=_e(e),i=_e(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new In(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=ve(e,r.name),i=ve(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.trusted(async()=>{await this.vfs.rename(_e(e),_e(t))})}resolvePath(e,t){return t.startsWith(`/`)?_e(t):_e(ve(e,t))}getAllPaths(){return[]}async chmod(e,t){}async symlink(e,t){return this.trusted(async()=>{await this.vfs.symlink(e,_e(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(_e(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(_e(e)))}async utimes(e,t,n){}invalidatePaths(e){let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function Y7(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?Y7(e.getUnderlyingFS?.()):null}async function bge(){await c(`github`)?.getValidAccessToken?.()}const xge=r(`almost-bash-shell`),X7=`__SLICC_RUN_PID`,Z7=`__SLICC_OUTPUT_TEE__`;function Q7(e){let t=e?.get(X7);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function Sge(e){if(!(X7 in e)&&!(Z7 in e))return{...e};let{[X7]:t,[Z7]:n,...r}=e;return r}var $7=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(Q7(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:kj,PATH:Wee,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return _ge({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}})}constructor(t){this.options=t,this.vfsAdapter=new yge(t.fs),this.progress=new xG({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Oj({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:bge}),this.mountCommands=new eS({fs:t.fs,isScoop:t.isScoop});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=Y7(i)??Y7(a);this.scriptCatalog=t.scriptCatalog??new qee({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=y({progress:EG(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),BK(t.fs),jq(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Or(),...Sr()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Er({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:qG(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1})}),this.allowedCommands!==null){let e=this.bash;for(let t of Sr())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Or(),...Sr()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let i=await this.runCommand(e,t,n,r,o);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return mG(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:this.lastEnv,cwd:t?.cwd??this.cwd})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Ai(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await Aj(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=jj(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){xge.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i){let a=e.trim().split(/\s+/)[0]||`unknown`;di(a),await this.waitForInitialJshSync(t);let o={env:{...this.lastEnv,...n===void 0?{}:{[X7]:String(n)},...i===void 0?{}:{[Z7]:i}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},s=this.lastEnv.PATH;this.activeRunSignal=t;let c=this.beginScriptRun(e),l;try{l=await this.bash.exec(e,o)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(c)}if(await this.flushPendingCommandGrants(),l.env&&(this.lastEnv=Sge(l.env)),l.env&&this.lastEnv.PATH!==s&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(l.env?.PWD&&(this.cwd=l.env.PWD),l.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}return l}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?ZG(t,this.progress):$G(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t);return{...n,async execute(e,t){try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(Z7);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=HG(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new WG(t,this.progress,UG(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=t=>this.gateCommandDispatch(e.name,t);return{name:e.name,trusted:e.trusted,async execute(n,r){return await t(n)||e.execute(n,r)}}}async gateCommandDispatch(e,t){let n=this.options.sudo;if(!n)return null;let r=`${e} ${t.join(` `)}`.trim();if(this.consumeSudoBypass(r))return null;let i=n.getPolicy();if(!i)return null;let a=await tK(r,{policy:i,broker:n.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:n.defaultDisposition});return a.allowed?null:{stdout:``,stderr:`${a.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=zr(e);if(!n)return;let r=`${Br}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof In&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
5136
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=await this.getFilteredWorkflowCommands();for(let[t,n]of e)this.isCommandAllowed(t)&&(this.builtinCommandNames.has(t)&&!this.registeredJshCommands.has(t)||this.registeredJshCommands.get(t)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(t))),this.registeredJshCommands.set(t,n),this.builtinCommandNames.add(t)));for(let e of t.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return hG(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(Q7(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=Gee(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return H(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return H(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?bG(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await hG(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:this.lastEnv,cwd:t?.cwd??this.cwd})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};function
|
|
5135
|
+
`,exitCode:1};let c=oi(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function vge(e={}){let t=[eoe({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),IY(),Zfe(),Cfe(),vfe(e.browserAPI,e.fs),Yle(e.browserAPI),pZ(e.browserAPI),Soe(e),_ge(),fme(),xpe(),tpe(),cpe(),ape(),cX(),hge(),g5(`sqlite3`),g5(`sqllite`),Mpe(),qpe(),m$(),bY(),Xce({buildProcessConfig:e.buildProcessConfig}),M8(`python3`,{buildProcessConfig:e.buildProcessConfig}),M8(`python`,{buildProcessConfig:e.buildProcessConfig}),...e.fs&&e.fetch?[$3(`ipk`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),$3(`npm`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),$3(`i`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),b6(`ipx`,{fs:e.fs,fetch:e.fetch}),b6(`npx`,{fs:e.fs,fetch:e.fetch}),ZZ(`di`,{fs:e.fs,fetch:e.fetch}),ZZ(`uv`,{fs:e.fs,fetch:e.fetch}),wme({fs:e.fs,fetch:e.fetch})]:[],...e.fetch?[aoe({fetch:e.fetch})]:[],n0(),The(e.webhook),Mhe(),fZ(),Yse({fs:e.fs,scriptCatalog:e.scriptCatalog}),cue({fs:e.fs,fetch:e.fetch}),E0(),zfe(),_8(`pdftk`),_8(`pdf`),xY(`biscotto`),xY(`biscotti`),y8(`pdftoppm`),y8(`pdftocairo`),iue(`pdftotext`),YX(`convert`),YX(`magick`),Lhe({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),Jpe(),sme(),cme(),Kse(),zQ(),hle(),sle(),Use(),Jde({setEnv:e.setEnv}),ede({fs:e.fs}),Sde(),aX(),oX(),sX(`xclip`),sX(`xsel`),fde(),B0(),Xq(),Zq(),Gce(e.fs),Tr(),ele(),gJ({getParentJid:e.getParentJid}),qQ(),Sue({processManager:e.processManager}),bse({processManager:e.processManager}),Cce(),Rse(),Hme(),xoe(),X$(),Qme({processManager:e.processManager}),s1(),QY({registry:e.cherryRuntimeRegistry}),bZ(),DZ({fs:e.fs}),OZ({fs:e.fs}),$fe(e.sudoCommand),qhe({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Nhe(),Sfe()];return e.fs&&(oue(),t.push(...Ci.map(t=>Zae(t,e.browserAPI,e.fs)))),t}const yge=Reflect.get(wr,`DefenseInDepthBox`);function J7(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?`vfs-ino:${e}`:void 0}var bge=class{vfs;registeredCommandsFn=null;constructor(e){this.vfs=e}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=yge?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let t=_e(e),n=await this.vfs.readFile(t,{encoding:`binary`}),r=n instanceof Uint8Array?n:new TextEncoder().encode(n);try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(r)}catch{let e=Array(r.length);for(let t=0;t<r.length;t++)e[t]=String.fromCharCode(r[t]);return e.join(``)}})}async readFileBuffer(e){return this.trusted(async()=>{let t=_e(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async writeFile(e,t,n){return this.trusted(async()=>{let n=_e(e);if(typeof t==`string`){let e=ae(t);if(e){await this.vfs.writeFile(n,e);return}let r=!1;for(let e=0;e<t.length;e++)if(t.charCodeAt(e)>255){r=!0;break}if(r)await this.vfs.writeFile(n,new TextEncoder().encode(t));else{let e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);await this.vfs.writeFile(n,e)}}else await this.vfs.writeFile(n,t)})}async appendFile(e,t,n){return this.trusted(async()=>{let n=_e(e);try{if((await this.vfs.stat(n)).type===`directory`)throw new In(`EISDIR`,`is a directory`,n)}catch(e){if(e instanceof In&&e.code===`EISDIR`)throw e}let r=new Uint8Array;try{let e=await this.vfs.readFile(n,{encoding:`binary`});r=e instanceof Uint8Array?new Uint8Array(e):new TextEncoder().encode(e)}catch(e){if(!(e instanceof In&&e.code===`ENOENT`))throw e}let i;if(typeof t==`string`){i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e)&255}else i=t instanceof Uint8Array?t:new Uint8Array(t);let a=new Uint8Array(r.length+i.length);a.set(r),a.set(i,r.length),await this.vfs.writeFile(n,a)})}async exists(e){return this.trusted(async()=>{let t=_e(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=_e(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.type===`directory`?493:420,size:r.size,mtime:new Date(r.mtime),identity:J7(r.ino)};let i=await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.type===`directory`?493:420,size:i.size,mtime:new Date(i.mtime),identity:J7(i.ino)}})}async lstat(e){return this.trusted(async()=>{let t=_e(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.type===`directory`?493:r.type===`symlink`?511:420,size:r.size,mtime:new Date(r.mtime),identity:J7(r.ino)};let i=await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.type===`directory`?493:i.type===`symlink`?511:420,size:i.size,mtime:new Date(i.mtime),identity:J7(i.ino)}})}async mkdir(e,t){return this.trusted(async()=>{await this.vfs.mkdir(_e(e),t)})}async readdir(e){return this.trusted(async()=>{let t=_e(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);return n===null?(await this.vfs.readDir(t)).map(e=>e.name):n.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=_e(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t);return this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.trusted(async()=>{await this.vfs.rm(_e(e),t)})}async cp(e,t,n){return this.trusted(async()=>{let r=_e(e),i=_e(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new In(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=ve(e,r.name),i=ve(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.trusted(async()=>{await this.vfs.rename(_e(e),_e(t))})}resolvePath(e,t){return t.startsWith(`/`)?_e(t):_e(ve(e,t))}getAllPaths(){return[]}async chmod(e,t){}async symlink(e,t){return this.trusted(async()=>{await this.vfs.symlink(e,_e(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(_e(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(_e(e)))}async utimes(e,t,n){}invalidatePaths(e){let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function Y7(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?Y7(e.getUnderlyingFS?.()):null}async function xge(){await c(`github`)?.getValidAccessToken?.()}const Sge=r(`almost-bash-shell`),X7=`__SLICC_RUN_PID`,Z7=`__SLICC_OUTPUT_TEE__`;function Q7(e){let t=e?.get(X7);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function Cge(e){if(!(X7 in e)&&!(Z7 in e))return{...e};let{[X7]:t,[Z7]:n,...r}=e;return r}var $7=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(Q7(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:kj,PATH:Wee,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return vge({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}})}constructor(t){this.options=t,this.vfsAdapter=new bge(t.fs),this.progress=new xG({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Oj({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:xge}),this.mountCommands=new eS({fs:t.fs,isScoop:t.isScoop});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=Y7(i)??Y7(a);this.scriptCatalog=t.scriptCatalog??new qee({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=y({progress:EG(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),BK(t.fs),jq(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Or(),...Sr()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Er({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:qG(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1})}),this.allowedCommands!==null){let e=this.bash;for(let t of Sr())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Or(),...Sr()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let i=await this.runCommand(e,t,n,r,o);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return mG(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:this.lastEnv,cwd:t?.cwd??this.cwd})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Ai(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await Aj(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=jj(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){Sge.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i){let a=e.trim().split(/\s+/)[0]||`unknown`;di(a),await this.waitForInitialJshSync(t);let o={env:{...this.lastEnv,...n===void 0?{}:{[X7]:String(n)},...i===void 0?{}:{[Z7]:i}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},s=this.lastEnv.PATH;this.activeRunSignal=t;let c=this.beginScriptRun(e),l;try{l=await this.bash.exec(e,o)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(c)}if(await this.flushPendingCommandGrants(),l.env&&(this.lastEnv=Cge(l.env)),l.env&&this.lastEnv.PATH!==s&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(l.env?.PWD&&(this.cwd=l.env.PWD),l.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}return l}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?ZG(t,this.progress):$G(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t);return{...n,async execute(e,t){try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(Z7);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=HG(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new WG(t,this.progress,UG(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=t=>this.gateCommandDispatch(e.name,t);return{name:e.name,trusted:e.trusted,async execute(n,r){return await t(n)||e.execute(n,r)}}}async gateCommandDispatch(e,t){let n=this.options.sudo;if(!n)return null;let r=`${e} ${t.join(` `)}`.trim();if(this.consumeSudoBypass(r))return null;let i=n.getPolicy();if(!i)return null;let a=await tK(r,{policy:i,broker:n.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:n.defaultDisposition});return a.allowed?null:{stdout:``,stderr:`${a.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=zr(e);if(!n)return;let r=`${Br}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof In&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
5136
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=await this.getFilteredWorkflowCommands();for(let[t,n]of e)this.isCommandAllowed(t)&&(this.builtinCommandNames.has(t)&&!this.registeredJshCommands.has(t)||this.registeredJshCommands.get(t)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(t))),this.registeredJshCommands.set(t,n),this.builtinCommandNames.add(t)));for(let e of t.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return hG(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(Q7(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=Gee(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return H(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return H(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?bG(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await hG(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:this.lastEnv,cwd:t?.cwd??this.cwd})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};function wge(e){let{isCone:t,folder:n,secretEnv:r,tmpDir:i,lickTarget:a}=e,o=a?{SLICC_LICK_TARGET:a}:{};return t?{...r,TMPDIR:i,...o}:{...r,HOME:`/scoops/${n}/home`,TMPDIR:i,USER:n,PATH:[`/usr/bin`,`/scoops/${n}/workspace/skills`,`/scoops/${n}/workspace/bin`,...Hee].join(`:`),...o}}function Tge(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function Ege({sudoManager:e,unit:t,folder:n,onSudoRequest:r}){if(!e)return null;let i=e,{policy:a}=t,o=a.approvalAuthority===`user`,s=r,c=o||!s?i.getBroker():{requestApproval:e=>s(e)},l=o?()=>i.getPolicy():()=>i.getPolicyForScoop(n),u=a.sudoDefaultDisposition,d=i.getShellConfig(),f=a.persistCommandGrants?d.persistCommandGrant:async()=>{},p={broker:c,getPolicy:l,defaultDisposition:u,shellConfig:{...d,broker:c,getPolicy:l,defaultDisposition:u,persistCommandGrant:f}};return a.persistCommandGrants||(p.onGrant=async()=>{}),p}const Dge=r(`scoop-context`);async function Oge(e){let{scoop:t,unit:n,fs:r,skillsFs:i}=e,a=n.workspace.root,o=e.getBrowserAPI();n.policy.filesystem.kind===`full-workspace`&&await Db(r,mn);let s=i??r,c=await Xx(),l=Ege({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),u=l?qr(r,{broker:l.broker,getPolicy:l.getPolicy,defaultDisposition:l.defaultDisposition,...l.onGrant?{onGrant:l.onGrant}:{}}):r,d=wge({isCone:n.policy.filesystem.kind===`full-workspace`,folder:t.folder,secretEnv:c,tmpDir:e.tmpDir,...e.lickTarget?{lickTarget:e.lickTarget}:{}}),f=new $7({fs:u,cwd:a,env:Object.keys(d).length>0?d:void 0,browserAPI:o,webhook:{hasLocalNodeServer:at,getLeaderStatus:Kn},jshDiscoveryFs:i?s:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:l?.shellConfig,scrubProgressLabel:kt(),processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid});return Dge.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:f,gatedFs:u,skills:await Cb(s,mn)}}const e9=51200;function t9(e){if(e.length===0)return[];let t=e.split(`
|
|
5137
5137
|
`);return e.endsWith(`
|
|
5138
|
-
`)&&t.pop(),t}function n9(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function
|
|
5139
|
-
`),d=Buffer.byteLength(u,`utf-8`);return{content:u,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:d,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function r9(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=t9(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`,u=!1;for(let e=a.length-1;e>=0&&s.length<n;e--){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(s.length>0);if(c+n>r){if(l=`bytes`,s.length===0){let e=
|
|
5140
|
-
`),f=Buffer.byteLength(d,`utf-8`);return{content:d,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:f,lastLinePartial:u,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function
|
|
5141
|
-
`)||e.length===0?e:`${e}\n`}${
|
|
5142
|
-
`)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await p9(e,t,l),f;try{await e.fs.writeFile(i,d),f=i}catch(e){i9.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){i9.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=r9(
|
|
5143
|
-
`),a=t.length,o=Math.max(0,r-1),s=o+1;if(o>=t.length)return{content:`Offset ${r} is beyond end of file (${a} lines total)`,isError:!0};let c=i===void 0?t.slice(o):t.slice(o,Math.min(o+i,t.length)),l=i===void 0?void 0:c.length,u=
|
|
5144
|
-
`));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${n9(new TextEncoder().encode(t[o]??``).length)}, exceeds ${n9(e9)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${e9}]`};let d=u.content,f=``;if(u.truncated){let e=s+u.outputLines-1,t=e+1;f=u.truncatedBy===`lines`?`\n\n[Showing lines ${s}-${e} of ${a}. Use offset=${t} to continue.]`:`\n\n[Showing lines ${s}-${e} of ${a} (${n9(e9)} limit). Use offset=${t} to continue.]`}else l!==void 0&&o+l<t.length&&(f=`\n\n[${t.length-(o+l)} more lines in file. Use offset=${o+l+1} to continue.]`);return{content:d+f}}catch(e){let t=e instanceof Error?e.message:String(e);return m9.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function
|
|
5145
|
-
`)}async function
|
|
5146
|
-
`)}`}}function
|
|
5147
|
-
`)}}function
|
|
5148
|
-
`)}`}}async function w_e(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),h9.info(`Global memory updated`),{content:`Global memory updated successfully.`}}catch(e){return{content:`Failed to update global memory: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function T_e(e){return{name:`send_message`,description:`Send a progress message while still working. Your final output is also sent.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`The message text to send`},sender:{type:`string`,description:`Optional sender name/role (e.g., "Researcher"). Defaults to assistant name.`}},required:[`text`]},execute:t=>i_e(t,e)}}function E_e(e){return{name:`sudo_request`,description:`Ask the cone for an explicit sudo escalation before running a sensitive action. Use this when you know up-front that a command, read, or write will be gated and you want a clean approval round-trip instead of letting the gate fire mid-action. Resolves with the cone's decision (allow / always / deny). 'always' durably widens your sandbox by appending a NOPASSWD rule to /scoops/<folder>/etc/sudoers. 'deny' (or a timeout / dropped cone) resolves fail-closed.`,inputSchema:{type:`object`,properties:{kind:{type:`string`,enum:[...b9],description:`The kind of sensitive action being requested. command = a shell command; read/write = a VFS path; secret = a credential read. Only command/read/write can be persisted with "always" (no sudoers Secret directive).`},detail:{type:`string`,description:`The concrete subject of the request (e.g., the command line "git push origin main" or the VFS path "/workspace/.git/config"). The cone sees this verbatim.`},suggested_pattern:{type:`string`,description:`Optional pre-filled glob pattern for an "always" grant (e.g., "git push*" for a command or "/workspace/.git/**" for a path). The cone may override this.`}},required:[`kind`,`detail`]},execute:t=>s_e(t,e)}}function D_e(e){return{name:`feed_scoop`,description:`Give a scoop a task. Provide a complete, self-contained prompt — the scoop has no access to your conversation. You'll be notified when it finishes.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop"). Must be a scoop you own — use list_scoops to see them.`},prompt:{type:`string`,description:`Complete, self-contained instructions for the scoop. Include ALL context — the scoop cannot see your conversation.`}},required:[`scoop_name`,`prompt`]},execute:t=>c_e(t,e)}}function O_e(e){return{name:`list_scoops`,description:`List the scoops you own (your own subtree). Names from this list are the only ones feed_scoop / drop_scoop / scoop_mute / scoop_unmute / scoop_wait can resolve.`,inputSchema:{type:`object`,properties:{}},execute:()=>l_e(e)}}function k_e(e){return{name:`scoop_scoop`,description:`Create a new scoop. Optionally specify a model, a prompt, and per-scoop sandbox shape (visible/writable paths + command allow-list). If prompt is provided, the scoop starts working immediately after creation (no separate feed_scoop needed).`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Display name for the scoop (e.g., "hero-block")`},model:{type:`string`,description:`Model ID for this scoop (e.g., "claude-sonnet-4-6"). If omitted, uses the same model as the cone.`},prompt:{type:`string`,description:`Task prompt for the scoop. If provided, the scoop starts working immediately after creation.`},visiblePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ (not write). Pure replace — what you set is what you get. Omit to use the default: YOUR OWN workspace plus the shared skills tree — ["/workspace/"] for the primary cone, ["/cones/<folder>/workspace/", "/workspace/skills/"] for any other. Prefer omitting it over naming "/workspace/" explicitly, which would point the scoop at a different cone's files. Pass [] for no extra read-only paths. Note: the scoop's writablePaths are always readable too, so a true read-nothing sandbox also requires writablePaths: []. Mounts remain readable regardless. Trailing slash recommended (e.g. "/shared/data/").`},writablePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ AND WRITE. Pure replace. Omit to use the default ["/scoops/<folder>/", "/shared/"] which gives the scoop its own sandbox plus shared space. Pass [] to block all writes — note that /tmp stays readable and writable regardless, as shared scratch space every scoop gets (so nothing secret belongs there). Trailing slash recommended.`},allowedCommands:{type:`array`,items:{type:`string`},description:`Shell command allow-list. Omit for unrestricted access to every built-in, custom, and .jsh command (the default). Pass a list of command names to restrict the scoop's shell — e.g. ["echo","cat","grep"] for a read-only text-processing scoop. Pass ["*"] for explicit unrestricted. Applies to pipelines, substitutions, and network commands too.`},thinking:{type:`string`,enum:[...kn],description:`Reasoning / thinking-level for this scoop (pi-ai effort). One of: off, minimal, low, medium, high, xhigh. Omit to inherit the global default ("off"). Non-reasoning models always clamp to "off"; "xhigh" clamps to "high" on models that do not support the max tier.`},background_after:{type:`number`,description:`Seconds this scoop's bash tool waits for a command before detaching it to the background and continuing (default 600). Lower it for a scoop that must never stall on a slow command — nobody can cancel a scoop's turn, and its detached commands report back via a Background Command lick. Use 0 to detach every command immediately.`}},required:[`name`]},execute:t=>f_e(t,e)}}function A_e(e){return{name:`drop_scoop`,description:`Remove a scoop and stop its work. The scoop will be unregistered and its context destroyed.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop"). Must be a scoop you own — use list_scoops to see them.`}},required:[`scoop_name`]},execute:t=>p_e(t,e)}}function j_e(e){return{name:`scoop_mute`,description:`Suspend scoop→cone notifications for the given scoops. While muted, a scoop's completion is stashed and will be delivered to the cone when you call scoop_unmute (or scoop_wait which consumes it). Use this when coordinating parallel work so each scoop's completion does not trigger its own cone turn.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to mute (e.g., ["writer-scoop", "reviewer-scoop"]).`}},required:[`scoop_names`]},execute:t=>m_e(t,e)}}function M_e(e){return{name:`scoop_unmute`,description:`Resume scoop→cone notifications for the given scoops. Any completion that landed while a scoop was muted is returned in this tool result (NOT dispatched as a new cone turn), so you can read all stashed summaries in the current turn. Scoops with no stashed completion are simply unmuted.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to unmute (e.g., ["writer-scoop"]).`}},required:[`scoop_names`]},execute:t=>g_e(t,e)}}function N_e(e){return{name:`scoop_wait`,description:"Schedule a non-blocking wait for the given scoops. Returns immediately — the cone keeps its turn — and a `scoop-wait` lick is delivered when every listed scoop completes or the optional timeout fires. Use this to coordinate parallel work without freezing the cone: feed several scoops, call scoop_wait, then continue with other work; you'll be woken by the lick with all per-scoop summaries in one shot. Already-completed scoops (including those whose completion arrived while you were processing your previous turn) are folded into the same lick.",inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops YOU own (e.g., ["writer-scoop", "reviewer-scoop"]). Another cone's scoop is not a valid target.`},timeout_ms:{type:`number`,description:"Optional timeout in milliseconds. If any listed scoop has not completed by the deadline, it is reported as timed-out in the eventual `scoop-wait` lick. Omit for no timeout."}},required:[`scoop_names`]},execute:t=>y_e(t,e)}}function P_e(e){return{name:`lick_confirm`,description:`Confirm (approve) a pending actionable lick by its lick_id — currently a scoop sudo escalation raised via sudo_request. With always=true, the orchestrator additionally appends a NOPASSWD <directive> <pattern> rule to the requesting scoop's /scoops/<folder>/etc/sudoers so the same action won't prompt again. always=false (the default) is allow-once.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in the [sudo-request] notification, e.g. "lick-…"). Use list_sudo_requests to see outstanding ids.`},always:{type:`boolean`,description:`If true, persist a NOPASSWD rule into the requesting scoop's per-scoop sudoers so the action won't prompt again. Defaults to false (allow-once).`},pattern:{type:`string`,description:`Optional glob pattern to persist when always=true (e.g., "git push*" or "/workspace/.git/**"). Defaults to the request's suggestedPattern, then to the exact detail. Ignored when always=false.`}},required:[`lick_id`]},execute:t=>x_e(t,e)}}function F_e(e){return{name:`lick_dismiss`,description:`Dismiss a pending actionable lick by its lick_id. For scoop sudo escalation this denies the sensitive action. For llms.txt discovery this silently appends the advertising host to /etc/llmstxtignore.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in a sudo-request or llms.txt discovery notification).`}},required:[`lick_id`]},execute:t=>S_e(t,e)}}function I_e(e){return{name:`list_sudo_requests`,description:`List all pending cone-mediated sudo requests (lick id, requesting scoop, kind, detail). Use to find a lick_id for lick_confirm / lick_dismiss.`,inputSchema:{type:`object`,properties:{}},execute:()=>C_e(e)}}function L_e(e){return{name:`update_global_memory`,description:`Update the global CLAUDE.md memory file that is shared across all scoops. Use this instead of write_file for /shared/CLAUDE.md.`,inputSchema:{type:`object`,properties:{content:{type:`string`,description:`The new content for the global memory file`}},required:[`content`]},execute:t=>w_e(t,e)}}function R_e(e){let t=[],n=rn(e.scoop);return en(e.scoop)||(t.push(T_e(e)),e.onSudoRequest&&t.push(E_e(e))),n.canManageChildren&&(e.onFeedScoop&&t.push(D_e(e)),t.push(O_e(e)),e.onScoopScoop&&t.push(k_e(e)),e.onDropScoop&&t.push(A_e(e)),e.onMuteScoops&&t.push(j_e(e)),e.onUnmuteScoops&&t.push(M_e(e)),e.onScheduleScoopWait&&t.push(N_e(e)),e.onSudoResolve&&(t.push(P_e(e)),t.push(F_e(e))),e.onListSudoRequests&&t.push(I_e(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(L_e(e))),t}const z_e=r(`scoop-context`);function B_e(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-Odk1glKI.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function V_e(e){let{scoop:t,unit:n,callbacks:r}=e,i=R_e({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:w,onDropScoop:r.onDropScoop,onMuteScoops:r.onMuteScoops,onUnmuteScoops:r.onUnmuteScoops,onScheduleScoopWait:r.onScheduleScoopWait,onSetGlobalMemory:r.setGlobalMemory,getGlobalMemory:r.getGlobalMemory,onSudoRequest:r.onSudoRequest,onSudoResolve:r.onSudoResolve,onListSudoRequests:r.onListSudoRequests}),a=[...Yge(e.gatedFs),Hge(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:kt(),fireLick:e=>{let n=globalThis.__slicc_lick_handler;if(!n){z_e.warn(`No lick handler for background bash completion`,{folder:t.folder});return}n(e)}}),...i];if(t.config?.structuredOutputSchema){let{createStructuredOutputTool:n}=await import(`./structured-output-tool-BDaIhclx.js`);a.push(n(t.config.structuredOutputSchema,e.onStructuredOutput))}let o={scrubToolResult:kt()},s=B_e(e);return e.processManager?Mt(a,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},o,s):Mt(a,void 0,o,s)}const w9=r(`scoop-context`);async function H_e(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();w9.info(`Filesystem ready`,{folder:t.folder}),await Gx(r,t,n,a);let{shell:o,gatedFs:s,skills:c}=await Dge({scoop:t,unit:n,fs:r,tmpDir:a,skillsFs:e.skillsFs,getBrowserAPI:i.getBrowserAPI,sudoManager:e.sudoManager,onSudoRequest:i.onSudoRequest,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget()});e.onShellReady(o);let l=await V_e({getTurnGuestGates:e.getTurnGuestGates,scoop:t,unit:n,callbacks:i,shell:o,fs:r,gatedFs:s,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:u,globalMemory:d}=await Tx(r,n,()=>i.getGlobalMemory());if(!Dx(t))return w9.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let f=kx(t,n),p=Mx(t,n,d,u,c),m=await e.sessions.restore(),{streamWithSessionId:h,compactFn:g,getCompactionApiKey:_}=await Kx(f,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>Dx(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:e=>i.onCompactionStateChange?.(e)});if(e.isDisposed())return{kind:`abandoned`};let v=nn(t);return{kind:`ready`,agent:Ux({model:f,tools:l,systemPrompt:p,messages:m,thinkingLevel:Px(Fx()??v.level,f),getApiKey:()=>Dx(t)??void 0,transformContext:g,streamFn:h,captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:g,getCompactionApiKey:_,effortOverride:v.effortOverride,toolCount:l.length}}const T9=r(`scoop-context`);var U_e=class{deps;timer=null;createdAt=0;constructor(e){this.deps=e}get sessionId(){return this.deps.sessionId}get store(){return this.deps.store}async restore(){let e=await this.restoreCanonical();if(e)return e;let t=this.deps.store;if(!t)return[];try{let e=await t.load(this.deps.sessionId);if(e){let t=St(e.messages);return this.createdAt=e.createdAt,T9.info(`Restored agent session`,{folder:this.deps.folder,messageCount:t.length,droppedOrphans:e.messages.length-t.length}),t}}catch(e){T9.error(`Failed to restore agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.deps.onRestoreError(`Conversation history could not be restored. Starting fresh.`)}return[]}async restoreCanonical(){let e=this.deps.canonical;if(!e)return null;let t=null;try{t=await e.store.load(e.identity.key)}catch(e){return T9.warn(`Canonical conversation read failed; falling back to the legacy session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),null}let n=ii(t);if(n.length===0)return null;let r=St(n);return t&&(this.createdAt=t.createdAt),T9.info(`Restored conversation from the canonical work-unit record`,{folder:this.deps.folder,messageCount:r.length,droppedOrphans:n.length-r.length}),r}persistNow(e){this.timer!==null&&(clearTimeout(this.timer),this.timer=null);let t=this.deps.getMessages()??e??[];if(t.length===0)return;this.persistCanonical(t);let n=this.deps.store;n&&n.save({id:this.deps.sessionId,messages:t,config:{},createdAt:this.createdAt||Date.now(),updatedAt:Date.now()}).catch(e=>{T9.error(`Failed to save agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})}persistCanonical(e){let t=this.deps.canonical;t&&t.store.syncAgentMessages(t.identity,e,{createdAt:this.createdAt||Date.now()}).catch(e=>{T9.error(`Failed to save the canonical conversation record`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})}async clear(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.createdAt=0;let e=this.deps.canonical;e&&await e.store.delete(e.identity.key);try{await this.deps.store?.delete(this.deps.sessionId)}catch(e){T9.warn(`Failed to clear the legacy agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})}}schedule(){this.deps.isDisposed()||!this.deps.store&&!this.deps.canonical||this.timer===null&&(this.timer=setTimeout(()=>{this.timer=null,this.deps.isDisposed()||this.persistNow()},1e3))}};function W_e(e,t){if(!e)return null;let{text:n}=t,r=n.length>200?`${n.slice(0,197)}…`:n;return e.spawn({kind:`scoop-turn`,argv:[`prompt`,r],cwd:t.cwd,owner:t.owner,adoptAbort:t.abortController})}function G_e(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function E9(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const D9=r(`scoop-context`);var K_e=class{deps;constructor(e){this.deps=e}async run(e,t,n,r){let i=null;for(let a=1;a<=3;a++){if(this.deps.isDisposed()||r.aborted)return null;let o=await this.tryAgentPrompt(e,t,n,r);if(!o||this.deps.isDisposed()||r.aborted||(i=o,await this.handleAttemptError(o,a,r)))return null}return i}reportExhausted(e){let t=e.message;D9.error(`Agent error after retries exhausted`,{folder:this.deps.folder,error:t,maxRetries:3}),this.fail(`Scoop "${this.deps.scoopName}" failed after 3 attempts: ${t}`,t)}async tryAgentPrompt(e,t,n,r){this.deps.beginAttempt();try{if(await e.prompt(t,n),this.deps.isDisposed()||r.aborted)return null;let i=this.deps.overflow.pendingRecovery;if(i!==null&&(await i,this.deps.overflow.clearPendingRecovery(i),this.deps.isDisposed()||r.aborted))return null;let a=this.deps.getStreamError();return a?Error(a):null}catch(e){return e instanceof Error?e:Error(String(e))}}async handleAttemptError(e,t,n){let r=e.message;return this.handleStaleAssetError(r)||this.handleNonRetryableError(r)?!0:!await this.handleRetryableError(r,t,n)&&(D9.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:fx(r)}),!!(t<3&&(await px(O9(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return dx(e)?(D9.error(`Non-retryable agent error`,{folder:this.deps.folder,error:e}),this.fail(`Scoop "${this.deps.scoopName}" failed with unrecoverable error: ${e}`,e),!0):!1}handleStaleAssetError(e){return Ho(e)?(D9.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),Go(this.deps.isInteractive),this.fail(`Scoop "${this.deps.scoopName}" hit a stale build after a deploy; reloading to recover.`,e),!0):!1}async handleRetryableError(e,t,n){if(!fx(e)||t>=3)return!1;let r=O9(t);return D9.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await px(r,n)&&!this.deps.isDisposed()}fail(e,t){li(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function O9(e){return 1e3*2**(e-1)}function q_e(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){D9.info(`Queueing prompt via ${r.steer?`steer`:`followUp`} while processing`,{folder:r.folder,isProcessing:r.isProcessing,agentIsStreaming:i});let a={role:`user`,content:[{type:`text`,text:t},...n],timestamp:Date.now()};return r.steer?e.steer(a):e.followUp(a),!0}return!1}const k9=r(`scoop-context`);var J_e=class{scoop;callbacks;fs=null;shell=null;agent=null;status=`initializing`;isProcessing=!1;disposed=!1;didStreamDeltas=!1;promptStreamErrorMessage=null;unsubscribe=null;promptAbortController=null;processManager=null;currentTurnProcess=null;compactFn=null;getCompactionApiKey=null;coneJid;unit;owner;skillsFs=null;sudoManager=null;structuredOutputValue;activeEffortOverride;structuredOutputCaptured=!1;sessions;runBounds;bashJobs;imageRecovery;overflow;turnRunner;eventSink={textDelta:e=>{this.didStreamDeltas=!0,this.callbacks.onResponse(e,!0)},toolStart:(e,t,n)=>this.callbacks.onToolStart?.(e,t,n),toolUI:(e,t,n)=>this.callbacks.onToolUI?.(e,t,n),toolUIDone:e=>this.callbacks.onToolUIDone?.(e),toolProgress:(e,t,n)=>this.callbacks.onToolProgress?.(e,t,n),toolResult:(e,t,n,r)=>this.callbacks.onToolEnd?.(e,t,n,r),checkpoint:()=>this.sessions.schedule(),assistantMessageEnd:e=>this.handleAssistantMessageEnd(e),turnStart:()=>this.runBounds.enforceOnTurnStart(),turnCompleted:()=>this.runBounds.recordCompletedTurn(),responseDone:()=>this.callbacks.onResponseDone(),agentEnd:(e,t)=>this.handleAgentEndEvent(e,t)};constructor(e,t,n,r,i,a,o,s,c){this.scoop=e,this.unit=vn(e),this.owner={kind:mee(e),scoopJid:e.jid},this.callbacks=t,this.fs=n,this.skillsFs=i??null,this.coneJid=a,this.processManager=o??null,this.sudoManager=s??null,this.sessions=new U_e({store:r??null,canonical:c?{store:c,identity:{key:ri(e),workUnitId:e.jid,workspaceId:ni(e),folder:e.folder,legacyKeys:{agentSessionId:e.jid,chatSessionId:sn(e)}}}:null,sessionId:e.jid,folder:e.folder,getMessages:()=>this.agent?.state?.messages,isDisposed:()=>this.disposed,onRestoreError:e=>this.callbacks.onError(e)}),this.runBounds=new Hx({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new bx({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new Sx({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new Vx({getAgent:()=>this.agent,isDisposed:()=>this.disposed,getTurnSignal:()=>this.promptAbortController?.signal,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),isImageRecoveryActive:()=>this.imageRecovery.isActive,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onExhausted:e=>this.reportExhaustedOverflow(e),setStatus:e=>this.setStatus(e),scoopName:e.name,folder:e.folder}),this.turnRunner=new K_e({isDisposed:()=>this.disposed,overflow:this.overflow,beginAttempt:()=>{this.didStreamDeltas=!1,this.promptStreamErrorMessage=null},getStreamError:()=>this.promptStreamErrorMessage,setStatus:e=>this.setStatus(e),onError:e=>this.callbacks.onError(e),onFatalError:t.onFatalError?e=>this.callbacks.onFatalError?.(e):void 0,isInteractive:this.unit.completion.mode===`interactive`,scoopName:e.name,folder:e.folder})}ownLickTarget(){return wge(this.unit,this.scoop,tn(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return hn(this.callbacks.getScoops(),this.scoop)}getStructuredOutput(){return{captured:this.structuredOutputCaptured,value:this.structuredOutputValue}}get isBusy(){return this.isProcessing||(this.agent?.state?.isStreaming??!1)}async init(){this.setStatus(`initializing`);try{if(!this.fs)throw Error(`Filesystem not provided`);let e=await H_e({scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,callbacks:this.callbacks,sessions:this.sessions,sudoManager:this.sudoManager,processManager:this.processManager,processOwner:this.owner,coneJid:this.coneJid,getTurnPid:()=>this.currentTurnProcess?.pid,getTurnGuestGates:()=>this.turnGuestGates,getLickTarget:()=>this.ownLickTarget(),getTmpDir:()=>this.ownTmpDir(),getEffortOverride:()=>this.activeEffortOverride,isDisposed:()=>this.disposed,onShellReady:e=>{this.shell=e},onStructuredOutput:e=>{this.structuredOutputValue=e,this.structuredOutputCaptured=!0},spawnBashJob:e=>this.bashJobs.spawn(e)});if(e.kind===`abandoned`)return;if(e.kind===`deferred`){this.setStatus(`ready`);return}this.compactFn=e.compactFn,this.getCompactionApiKey=e.getCompactionApiKey,this.activeEffortOverride=e.effortOverride,this.agent=e.agent,this.unsubscribe=this.agent.subscribe((e,t)=>this.handleAgentEvent(e,t)),this.setStatus(`ready`),k9.info(`ScoopContext initialized`,{folder:this.scoop.folder,toolCount:e.toolCount})}catch(e){if(this.disposed)return;let t=e instanceof Error?e.message:String(e);k9.error(`ScoopContext init failed`,{folder:this.scoop.folder,error:t}),this.setStatus(`error`),this.callbacks.onError(`Failed to initialize: ${t}`)}}async ensureAgentReady(){return this.agent||(await this.init(),this.agent)?!0:(this.callbacks.onError(jx(this.scoop)),!1)}cleanupPromptState(e,t,n,r){this.runBounds.disarm();let i=this.runBounds.takeExceededNote();i!==null&&this.callbacks.onError(`agent run terminated: ${i}`),(n||r.aborted)&&this.sessions.persistNow(),this.isProcessing=!1,!this.disposed&&this.status===`processing`&&this.setStatus(`ready`),this.promptAbortController===e&&(this.promptAbortController=null),G_e(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}turnGuestGates=[];async prompt(e,t=[],n){if(!await this.ensureAgentReady())return;let r=n?.guestGates??[];if(q_e(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder})){for(let e of r)this.addTurnGuestGate(e);return}this.turnGuestGates=[...r];let i=this.agent;this.promptAbortController?.abort();let a=new AbortController;this.promptAbortController=a;let o=a.signal;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let s=W_e(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:a});this.currentTurnProcess=s,this.runBounds.arm();let c=null;try{if(c=await this.turnRunner.run(i,e,t,o),c&&!this.disposed&&!o.aborted){this.turnRunner.reportExhausted(c);return}!this.disposed&&!o.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(a,s,c,o)}}addTurnGuestGate(e){let t=JSON.stringify(e);this.turnGuestGates.some(e=>JSON.stringify(e)===t)||this.turnGuestGates.push(e)}stop(){E9(this.processManager,this.currentTurnProcess,`SIGINT`,this.promptAbortController),this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.isProcessing=!1,this.status!==`error`&&this.setStatus(`ready`)}clearMessages(){this.agent&&(this.agent.state.messages=[])}async clearSession(){this.clearMessages(),await this.sessions.clear()}getAgentMessages(){return this.agent?.state?.messages?structuredClone(this.agent.state.messages):[]}getContextFill(){return Ax(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=Lx(this.agent,this.scoop))}async reloadSkills(){this.agent&&await zx(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){return this.agent?Fx()?this.agent.state.thinkingLevel:(this.activeEffortOverride=t,Rx(this.agent,e)):`off`}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}dispose(){this.sessions.persistNow(),this.disposed=!0,this.runBounds.disarm(),E9(this.processManager,this.currentTurnProcess,`SIGTERM`,this.promptAbortController),this.bashJobs.reapAll(),this.promptAbortController=null,this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.unsubscribe?.(),this.unsubscribe=null,this.shell?.dispose(),this.compactFn=null,this.getCompactionApiKey=null,this.agent=null,this.shell=null,this.fs=null}handleAgentEvent(e,t){this.disposed||gx(e,this.eventSink,t)}setStatus(e){this.disposed||(this.status=e,this.callbacks.onStatusChange(e))}handleAssistantMessageEnd(e){e.errorMessage||this.overflow.markAssistantSucceeded();let t=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);t&&!this.didStreamDeltas&&this.callbacks.onResponse(t,!1)}handleAgentEndEvent(e,t){this.disposed||t?.aborted||mx(e,{imageRecovery:this.imageRecovery,overflow:this.overflow,isProcessing:()=>this.isProcessing,didStreamDeltas:()=>this.didStreamDeltas,latchStreamError:e=>{this.promptStreamErrorMessage=e},onError:e=>this.callbacks.onError(e),persist:e=>this.sessions.persistNow(e)},t)}reportExhaustedOverflow(e){this.unit.completion.mode===`interactive`?this.callbacks.onError(e):this.callbacks.onFatalError?this.callbacks.onFatalError(e):this.callbacks.onError(e)}};const A9=r(`scoop-lifecycle-manager`);var Y_e=class{deps;units=new Map;constructor(e){this.deps=e}getUnit(e){return this.units.get(e)}ensureUnit(e){let t=this.units.get(e);return(!t||t.isClosed)&&(t=new lx(e,{getScoop:e=>this.deps.getScoops().get(e),sendPrompt:(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,[],i),clearIdleTimer:e=>this.deps.idleTimers.clear(e),forgetCompletion:(e,t)=>this.deps.completionService.forgetScoop(e,t),unregister:e=>this.unregister(e)}),this.units.set(e,t)),t}getContexts(){let e=new Map;for(let[t,n]of this.units)n.context&&e.set(t,n.context);return e}getContext(e){return this.units.get(e)?.context??void 0}syncReadGrants(e){for(let t of this.deps.getScoops().values()){if(e!==void 0&&t.folder!==e)continue;let n=this.getContext(t.jid)?.getFS();this.applyPolicyReadGrants(t,n)}}getTab(e){return this.units.get(e)?.tab??void 0}observe(e,t){return this.ensureUnit(e).observe(t)}displayJidFor(e){let t=this.deps.approverFor(e)?.jid;return t&&t!==e?t:void 0}dispatch(e,t,...n){this.units.get(e)?.dispatch(t,...n)}parentOf(e){let t=this.deps.getScoops();return(e.parentJid===null?void 0:t.get(e.parentJid))??tn(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return $t(t.values(),e)??tn(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){A9.warn(`Failed to initialize per-scoop sudo policy; continuing with existing policy`,{folder:e.folder,error:t instanceof Error?t.message:String(t)})}}applyPolicyReadGrants(e,t){if(!(t instanceof xr))return;let n=this.deps.getSudoManager()?.getPolicyForScoop(e.folder);n&&t.setReadGrants(n.read.filter(e=>e.nopasswd).map(e=>e.pattern))}async createTab(e){let t=this.deps.getScoops().get(e);if(!t)throw Error(`Scoop not found: ${e}`);let n=this.ensureUnit(e);if(n.context){if(n.tab?.status===`error`)A9.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{A9.debug(`Context already exists`,{jid:e});return}}let r=this.deps.getSharedFs();if(!r)throw Error(`Shared filesystem not initialized`);let i=`scoop-${t.folder}-${Date.now()}`,a=vn(t).policy.filesystem,o=a.kind===`full-workspace`?r:new xr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`);a.kind===`restricted`&&(await this.ensureSudoersLoaded(t),this.applyPolicyReadGrants(t,o));let s=this.buildContextCallbacks(e,t),c=this.rootOf(t)?.jid,l=new J_e(t,s,o,this.deps.getSessionStore()??void 0,r??void 0,c,this.deps.getProcessManager()??void 0,this.deps.getSudoManager(),this.deps.getConversationStore());n.attachContext(l,i),await l.init(),n.tab?.status===`initializing`&&n.transition(`ready`)&&(this.deps.callbacks.onStatusChange(e,`ready`),this.dispatch(e,`onStatusChange`,`ready`),Promise.resolve().then(()=>this.deps.messageRouter.flushOnIdle(e)).catch(t=>{A9.warn(`Initial idle queue probe failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}));let u=this.deps.getScoops().get(e);u&&u.parentJid!==null&&this.deps.idleTimers.start(e),A9.info(`Scoop context created`,{jid:e,contextId:i})}destroyTab(e){this.deps.idleTimers.clear(e);let t=this.units.get(e);t&&(t.teardown(),this.units.delete(e),A9.info(`Scoop context destroyed`,{jid:e}))}getTabsMap(){let e=new Map;for(let[t,n]of this.units)n.tab&&e.set(t,n.tab);return e}markTabError(e,t){let n=this.ensureUnit(e);n.transition(`error`,{contextId:n.tab?.contextId??`scoop-error-${e}`,error:t})}dispatchEvent(e,t,...n){this.dispatch(e,t,...n)}stopAndClearAllContexts(){for(let e of this.units.values())e.detachContext()}async destroyAllTabs(){for(let e of Array.from(this.units.keys()))this.destroyTab(e)}async waitForTabReady(e,t=1e4){let n=Date.now();for(;Date.now()-n<t;){let t=this.getTab(e);if(!t)return!1;if(t.status===`ready`||t.status===`processing`)return!0;if(t.status===`error`)return!1;await new Promise(e=>setTimeout(e,100))}return A9.warn(`Timed out waiting for tab to become ready`,{jid:e}),!1}async sendPrompt(e,t,n,r,i=[],a){let o=this.getContext(e);o||=(await this.createTab(e),this.getContext(e));let s=this.units.get(e);if(s?.tab?.status===`initializing`){if(A9.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){A9.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}o=this.getContext(e)}if(!o||!s){A9.error(`Context not found after creation`,{jid:e});return}this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),s.tab&&s.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),A9.debug(`Prompt sent to scoop`,{jid:e,textLength:t.length,imageCount:i.length}),await o.prompt(t,i,a)}async register(e){let t=this.deps.getScoops();if(an(e),this.inheritModel(e),e.parentJid!==null){let n=[];for(let r of t.values())r.jid!==e.jid&&n.push(r.folder);let r=Qt(e.folder,n);r!==e.folder&&(A9.warn(`Scoop folder already taken — registering under a free variant`,{jid:e.jid,requested:e.folder,folder:r}),e.folder=r,e.trigger=`@${r}`,e.assistantLabel=r)}t.set(e.jid,e);try{await this.deps.db.saveScoop(e)}catch(n){throw t.delete(e.jid),n}this.deps.messageRouter.ensureQueue(e.jid),A9.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&ci(`spawn`,e.folder)}catch(n){A9.error(`Scoop init failed`,{jid:e.jid,name:e.name,error:n instanceof Error?n.message:String(n)});try{this.destroyTab(e.jid)}catch(t){A9.warn(`Failed to destroy scoop runtime during init rollback`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}throw t.delete(e.jid),this.deps.messageRouter.forgetScoop(e.jid),await this.deps.db.deleteScoop(e.jid).catch(t=>{A9.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}}inheritModel(e){if(ln(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?pn(t):void 0)??zb();n&&xn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=t.get(e);if(n&&n.parentJid===null&&tn(t.values()).length<=1)throw Error(`Cannot drop the last cone`);let r=this.deps.getLickManager();if(n&&r){let{webhooks:e,cronTasks:t}=await r.getLicksForScoopFromDb(n.name,n.folder),i=this.deps.buildActiveLicksError(n.folder,e,t);if(i)throw i}this.deps.costTracker.snapshot(e);let i=globalThis.__slicc_wsSubscribers;i&&i.dropForScoop(e).catch(t=>{A9.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),n&&this.deps.getConversationStore()?.delete(ri(n)),this.deps.getSessionStore()?.delete(e).catch(t=>{A9.warn(`Failed to delete agent session`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.deleteScoop(e),t.delete(e),this.deps.messageRouter.forgetScoop(e),this.deps.completionService.forgetScoop(e,`unregister`);let a=this.deps.approvalRouter.failScoop(e);if(a>0&&A9.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:a}),n&&this.deps.getSudoManager()?.forgetScoopPolicies(n.folder),A9.info(`Scoop unregistered`,{jid:e}),n)try{this.deps.callbacks.onScoopUnregistered?.(n)}catch(t){A9.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}async setModel(e,t){let n=this.deps.getScoops().get(e);if(!n)return!1;let r=n.model;xn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return xn(n,r),this.getContext(e)?.updateModel(),A9.warn(`Failed to persist unit model; rolled back`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}return!0}refreshModels(){let e=this.getContexts();for(let t of e.values())t.updateModel();A9.info(`Models re-resolved on all active contexts`,{contextCount:e.size})}async reloadAllSkills(){let e=[];for(let[t,n]of this.getContexts()){let r=this.getTab(t);(r?.status===`ready`||r?.status===`processing`)&&e.push(n.reloadSkills().catch(e=>{A9.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),A9.info(`Skills reloaded across all contexts`,{count:e.length})}async setThinkingLevel(e,t,n){let r=this.deps.getScoops().get(e);if(!r)return null;let i=this.getContext(e),a=i?i.setThinkingLevel(t,n):null;dee(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){A9.warn(`Failed to persist thinkingLevel`,{jid:e,error:t instanceof Error?t.message:String(t)})}return a}buildContextCallbacks(e,t){let{callbacks:n,completionService:r,cone:i}=this.deps,a=()=>this.deps.getScoops(),{policy:o,completion:s}=vn(t),c=s.mode!==`interactive`;return{onResponse:(t,i)=>{a().has(e)&&(n.onResponse(e,t,i),this.dispatch(e,`onResponse`,t,i),c&&(i?r.appendResponseChunk(e,t):r.setResponseFull(e,t)))},onResponseDone:()=>{a().has(e)&&(this.units.get(e)?.touch(),n.onResponseDone(e))},onError:r=>{a().has(e)&&(this.units.get(e)?.transition(`error`,{error:r}),ci(`error`,t.folder,r),n.onError(e,r),n.onStatusChange(e,`error`),this.dispatch(e,`onError`,r),this.dispatch(e,`onStatusChange`,`error`))},onFatalError:t=>this.handleFatalError(e,t),onStatusChange:t=>{a().has(e)&&(this.units.get(e)?.transition(t),n.onStatusChange(e,t),this.dispatch(e,`onStatusChange`,t),t===`ready`&&this.deps.messageRouter.flushOnIdle(e),t===`ready`&&c&&r.notifyCompletion(e))},onCompactionStateChange:t=>{n.onCompactionStateChange?.(e,t)},onToolStart:(t,r,i)=>{n.onToolStart?.(e,t,r,i)},onToolEnd:(t,r,i,a)=>{n.onToolEnd?.(e,t,r,i,a)},onToolUI:(t,r,i)=>{n.onToolUI?.(e,t,r,i,this.displayJidFor(e))},onToolUIDone:t=>{n.onToolUIDone?.(e,t,this.displayJidFor(e))},onToolProgress:(t,r,i)=>{n.onToolProgress?.(e,t,r,i)},onSendMessage:(t,r)=>{let i=`${r?`[${r}] `:``}${t}`;n.onSendMessage(e,i),this.dispatch(e,`onSendMessage`,t)},getScoops:()=>i.getScoops(),getScoopTabState:o.canManageChildren?e=>this.getTab(e):void 0,onFeedScoop:o.canManageChildren?(e,n)=>i.delegateToScoop(e,n,t.assistantLabel):void 0,onScoopScoop:o.canCreateChildren?async e=>{let n={...e,jid:`scoop_${e.folder}_${Date.now()}`,parentJid:t.jid};return await i.registerScoop(n),n}:void 0,onDropScoop:o.canManageChildren?async e=>{await i.unregisterScoop(e)}:void 0,onMuteScoops:o.canManageChildren?e=>i.muteScoops(e):void 0,onUnmuteScoops:o.canManageChildren?e=>i.unmuteScoops(e):void 0,onScheduleScoopWait:o.canManageChildren?(e,t)=>i.scheduleScoopWait(e,t):void 0,getGlobalMemory:()=>i.getGlobalMemory(),setGlobalMemory:o.canWriteSharedMemory?e=>i.setGlobalMemory(e):void 0,appendConeMemory:o.canWriteSharedMemory?(e,n)=>i.appendConeMemory(e,{...n,memoryPath:on(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),approveGuestToolCall:e=>i.approveDirectedOrUser(e),onSudoResolve:o.canResolveApprovals?(n,r)=>i.resolveActionableLick(n,r,en(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(en(t)?void 0:e):void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(A9.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),ci(`error`,r.folder,t),this.units.get(e)?.transition(`error`,{error:t}),this.deps.callbacks.onError(e,t),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,t),this.dispatch(e,`onStatusChange`,`error`),vn(r).completion.mode===`interactive`)return;this.deps.completionService.forgetScoop(e,`fatal-error`);let i=this.parentOf(r);if(!i)return;let a={id:`scoop-error-${e}-${Date.now()}`,chatJid:i.jid,senderId:r.folder,senderName:r.assistantLabel,content:`[@${r.assistantLabel} FAILED]: ${t}`,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-error`};try{this.deps.callbacks.onIncomingMessage?.(i.jid,a)}catch(e){A9.warn(`onIncomingMessage for scoop-error threw`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}this.deps.handleMessage(a).catch(e=>{A9.error(`Failed to route fatal error to cone`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})})}};const j9=r(`scoop-message-router`);var X_e=class{deps;messageQueues=new Map;lastAgentTimestamp=new Map;pollInterval=null;debounceStates=new Map;processing=new Map;busyDeferrals=new Map;constructor(e){this.deps=e}ensureQueue(e){this.messageQueues.has(e)||this.messageQueues.set(e,[])}setLastAgentTimestamp(e,t){this.lastAgentTimestamp.set(e,t)}forgetScoop(e){this.cancelDebounce(e),this.messageQueues.delete(e),this.lastAgentTimestamp.delete(e),this.clearBusyDeferral(e)}async handleMessage(e){if(j9.info(`handleMessage`,{id:e.id,chatJid:e.chatJid,sender:e.senderName,channel:e.channel,contentPreview:e.content.slice(0,80)}),this.deps.isExternalLickChannel(e.channel))try{this.deps.notifyIncomingMessage(e.chatJid,e)}catch(t){j9.warn(`onIncomingMessage for external lick channel threw`,{channel:e.channel,error:t instanceof Error?t.message:String(t)})}await this.deps.db.saveMessage(e),await this.routeToScoop(e)}async delegateToScoop(e,t,n){let r=this.deps.getScoops().get(e);if(!r)throw Error(`Scoop not found: ${e}`);ci(`feed`,r.folder);let i={id:`delegate-${Date.now()}-${Math.random().toString(36).slice(2)}`,chatJid:e,senderId:`cone`,senderName:n,content:t,timestamp:new Date().toISOString(),fromAssistant:!0,channel:`delegation`};await this.deps.db.saveMessage(i),this.deps.notifyIncomingMessage(e,i),j9.info(`Delegating to scoop`,{scoopJid:e,scoopName:r.name,promptLength:t.length}),this.deps.sendPrompt(e,t,`cone`,n).catch(t=>{let n=t instanceof Error?t.message:String(t);j9.error(`Delegation failed`,{scoopJid:e,error:n}),this.deps.onError(e,`Delegation failed: ${n}`)})}async routeToScoop(e){let t=this.deps.getScoops().get(e.chatJid);if(!t){j9.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){j9.info(`routeToScoop: trigger not found in content`,{chatJid:e.chatJid,trigger:t.trigger,contentPreview:e.content.slice(0,80)});return}let n=this.messageQueues.get(e.chatJid)??[];n.push(e),this.messageQueues.set(e.chatJid,n);let r=this.deps.getTabs().get(e.chatJid);if(j9.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){j9.info(`routeToScoop: tab in error state, retrying init`,{chatJid:e.chatJid});try{await this.deps.createScoopTab(e.chatJid),r=this.deps.getTabs().get(e.chatJid)}catch{j9.warn(`routeToScoop: retry init failed`,{chatJid:e.chatJid})}}if(r?.status===`ready`||r?.status===`processing`){if(this.deps.isExternalLickChannel(e.channel)){await this.scheduleScoopQueue(e.chatJid,e.id);return}await this.flushScoopQueue(e.chatJid)}}passesTriggerGate(e,t){let n=t.channel===`webhook`||t.channel===`cron`||t.channel===`fswatch`||t.channel===`sprinkle`||t.channel===`bash`;return!e||e.parentJid===null||!e.requiresTrigger||!e.trigger||n||t.content.includes(e.trigger)}scheduleScoopQueue(e,t){let n=this.debounceStates.get(e)??{startedAt:Date.now(),waiters:[]};n.timer!==void 0&&clearTimeout(n.timer);let r=new Promise((e,r)=>{n.waiters.push({messageId:t,resolve:e,reject:r})}),i=Math.max(0,3e3-(Date.now()-n.startedAt));return n.timer=setTimeout(()=>{n.timer=void 0,this.flushScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);j9.error(`Debounced message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)})},Math.min(1e3,i)),this.debounceStates.set(e,n),r}async flushScoopQueue(e){let t=this.takeDebounce(e);if(t&&this.processing.has(e)&&this.shouldDeferQueuedLicks(e)){for(let e of t.waiters)e.resolve();this.recordBusyDeferral(e,this.messageQueues.get(e)?.length??0);return}try{await this.processScoopQueue(e);for(let e of t?.waiters??[])e.resolve()}catch(e){for(let n of t?.waiters??[])n.reject(e);throw e}}async flushOnIdle(e){if(this.messageQueues.has(e))try{await this.flushScoopQueue(e)}catch(t){let n=t instanceof Error?t.message:String(t);j9.error(`Idle message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)}}shouldDeferQueuedLicks(e){let t=this.messageQueues.get(e);return t!==void 0&&t.length>0&&t.every(e=>this.deps.isExternalLickChannel(e.channel))}recordBusyDeferral(e,t){let n=this.busyDeferrals.get(e)??{startedAt:Date.now(),reported:!1,count:t??0};t!==void 0&&(n.count=t),this.busyDeferrals.set(e,n);let r=Date.now()-n.startedAt;n.reported||r<3e5||(n.reported=!0,j9.warn(`Busy lick queue may be starved`,{jid:e,error:`Lick queue remained deferred while scoop was busy for 300s`}),this.emitLickBackpressure(e,{count:n.count,waitingMs:r}))}clearBusyDeferral(e){let t=this.busyDeferrals.get(e);this.busyDeferrals.delete(e),t?.reported&&this.emitLickBackpressure(e,{count:0,waitingMs:Date.now()-t.startedAt})}emitLickBackpressure(e,t){try{this.deps.onLickBackpressure?.(e,t)}catch(t){j9.warn(`Lick backpressure callback failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}}takeDebounce(e){let t=this.debounceStates.get(e);return t?.timer!==void 0&&clearTimeout(t.timer),this.debounceStates.delete(e),t}cancelDebounce(e){let t=this.takeDebounce(e);for(let e of t?.waiters??[])e.resolve()}cancelDebounces(){for(let e of this.debounceStates.keys())this.cancelDebounce(e)}cancelDebounceWaiter(e,t){let n=this.debounceStates.get(e);if(!n)return;let r=[];for(let e of n.waiters)e.messageId===t?e.resolve():r.push(e);n.waiters=r,r.length===0&&this.cancelDebounce(e)}async processScoopQueue(e){let t=this.processing.get(e);if(t){t.rerun=!0,await t.done.catch(()=>{});return}let n={rerun:!1,done:Promise.resolve()};return this.processing.set(e,n),n.done=this.drainScoopQueue(e,n),n.done}async drainScoopQueue(e,t){let n=!1,r;try{do{t.rerun=!1;try{await this.runScoopQueue(e)}catch(e){n||(n=!0,r=e)}}while(t.rerun)}finally{this.processing.delete(e)}if(n)throw r}async runScoopQueue(e){let t=this.messageQueues.get(e);if(!t){j9.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){j9.debug(`processScoopQueue: tab not ready`,{jid:e,status:n?.status??`no-tab`});return}let r=this.deps.getScoops().get(e),i=r?.assistantLabel??e,a=this.lastAgentTimestamp.get(e)??``,o=await this.deps.db.getMessagesSince(e,a,i),s=o.filter(e=>this.passesTriggerGate(r,e));if(j9.debug(`processScoopQueue: DB query`,{jid:e,scoopName:r?.name,excludeName:i,since:a,dbMessageCount:o.length,eligibleMessageCount:s.length,queueLength:t.length}),o.length===0){j9.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){j9.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=Jn(er(Zn(a),o));this.lastAgentTimestamp.set(e,t),await this.deps.db.setState(`lastAgentTs_${e}`,t);return}if(s.every(e=>this.deps.isExternalLickChannel(e.channel))&&this.deps.getContexts().get(e)?.isBusy){j9.debug(`processScoopQueue: deferring lick batch while scoop is busy`,{jid:e,messageCount:s.length}),this.recordBusyDeferral(e,s.length);return}this.clearBusyDeferral(e);let c=s.map(e=>`[${new Date(e.timestamp).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0})}] ${e.senderName}: ${mg(e.content,e.attachments)}`).join(`
|
|
5149
|
-
`),l=s.flatMap(e=>hg(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=Jn(er(Zn(a),o));this.lastAgentTimestamp.set(e,d),await this.deps.db.setState(`lastAgentTs_${e}`,d);let f=s.some(e=>e.steer),p=new Set,m=[];for(let e of s){if(!e.guestGate)continue;let t=JSON.stringify(e.guestGate);p.has(t)||(p.add(t),m.push(e.guestGate))}await this.deps.sendPrompt(e,c,u.senderId,u.senderName,l,{steer:f,...m.length>0?{guestGates:m}:{}})}startMessageLoop(){this.pollInterval||=setInterval(()=>{let e=this.deps.getTabs();for(let t of this.deps.getScoops().keys()){let n=e.get(t);this.recordBusyDeferralIfPresent(t);let r=(this.messageQueues.get(t)?.length??0)>0;n?.status===`ready`&&r&&!this.debounceStates.has(t)&&this.processScoopQueue(t).catch(e=>{let n=e instanceof Error?e.message:String(e);j9.error(`Message queue processing failed`,{jid:t,error:n}),this.deps.onError(t,`Queue processing failed: ${n}`)})}},2e3)}recordBusyDeferralIfPresent(e){this.busyDeferrals.has(e)&&this.recordBusyDeferral(e)}stopMessageLoop(){this.cancelDebounces(),this.pollInterval&&=(clearInterval(this.pollInterval),null)}async clearScoopMessages(e,t){this.cancelDebounce(e),t&&await t.clearSession().catch(t=>{j9.warn(`Failed to clear the durable conversation for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.clearMessagesForScoop(e).catch(t=>{j9.warn(`Failed to clear persisted channel history for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.lastAgentTimestamp.delete(e),this.messageQueues.set(e,[]),this.clearBusyDeferral(e),j9.info(`Scoop messages cleared`,{jid:e})}async clearAllMessages(){this.cancelDebounces(),await this.deps.db.clearAllMessages();let e=this.deps.getSessionStore();e&&await e.clearAll().catch(e=>{j9.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})}),await Promise.all([...this.deps.getContexts().values()].map(e=>e.clearSession().catch(e=>{j9.warn(`Failed to clear a durable conversation`,{error:e instanceof Error?e.message:String(e)})}))),this.lastAgentTimestamp.clear();for(let e of this.busyDeferrals.keys())this.clearBusyDeferral(e);for(let e of this.deps.getScoops().keys())this.messageQueues.set(e,[]);this.deps.resetCostTracker(),j9.info(`All messages cleared`)}getQueuedMessageIds(e){return(this.messageQueues.get(e)??[]).map(e=>e.id)}async clearQueuedMessages(e){this.cancelDebounce(e);let t=this.messageQueues.get(e)??[],n=this.deps.getScoops().get(e)?.assistantLabel??e,r=this.lastAgentTimestamp.get(e)??``,i=await this.deps.db.getMessagesSince(e,r,n),a=new Set([...t,...i].map(e=>e.id));for(let e of a)await this.deps.db.deleteMessage(e);this.messageQueues.set(e,[]),this.clearBusyDeferral(e)}async deleteQueuedMessage(e,t){let n=this.messageQueues.get(e);if(n){let r=n.findIndex(e=>e.id===t);r!==-1&&n.splice(r,1),n.length===0&&this.clearBusyDeferral(e)}this.cancelDebounceWaiter(e,t),await this.deps.db.deleteMessage(t)}};const M9=r(`orchestrator`),Z_e={decision:`deny`};var Q_e=class{scoops=new Map;workUnits=new Xg(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new Mb({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;fsWatcher=null;sudoManager=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new ox({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),findParent:e=>this.parentOrDefaultRoot(e),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new ix({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new Qb({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findParent:e=>this.parentOrDefaultRoot(e),hasScoop:e=>this.scoops.has(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),handleMessage:e=>this.handleMessage(e),reportError:(e,t)=>this.callbacks.onError(e,t)});processManager=null;unregisterExportService=null;approvalRouter=new Wb({getScoops:()=>this.scoops,findApprover:e=>this.parentOrDefaultRoot(e),getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>$n(e),saveMessage:e=>Yn(e)});lickRegistry=new Fb({getConeShell:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},getConeFs:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new X_e({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),getContexts:()=>this.lifecycle.getContexts(),createScoopTab:e=>this.createScoopTab(e),sendPrompt:(e,t,n,r,i,a)=>this.sendPrompt(e,t,n,r,i??[],a),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),onError:(e,t)=>this.callbacks.onError(e,t),onLickBackpressure:(e,t)=>this.callbacks.onLickBackpressure?.(e,t),getSessionStore:()=>this.sessionStore,resetCostTracker:()=>this.costTracker.reset(),db:{saveMessage:e=>Yn(e),deleteMessage:e=>Eee(e),clearMessagesForScoop:e=>jee(e),clearAllMessages:()=>kee(),getMessagesSince:(e,t,n)=>Oee(e,t,n),setState:(e,t)=>Tee(e,t)},isExternalLickChannel:Tg});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new Y_e({getScoops:()=>this.scoops,approverFor:e=>this.ownerRootOrDefault(e),getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getConversationStore:()=>this.conversationStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>qn(e),deleteScoop:e=>Aee(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>_r(e,t,n),messageRouter:{ensureQueue:e=>this.messageRouter.ensureQueue(e),forgetScoop:e=>this.messageRouter.forgetScoop(e),flushOnIdle:e=>this.messageRouter.flushOnIdle(e)},costTracker:{snapshot:e=>this.costTracker.snapshot(e)},approvalRouter:{failScoop:e=>this.approvalRouter.failScoop(e)},cone:{delegateToScoop:(e,t,n)=>this.delegateToScoop(e,t,n),registerScoop:e=>this.registerScoop(e),unregisterScoop:e=>this.unregisterScoop(e),muteScoops:e=>this.muteScoops(e),unmuteScoops:e=>this.unmuteScoops(e),scheduleScoopWait:(e,t)=>this.scheduleScoopWait(e,t),getScoops:()=>this.getScoops(),getGlobalMemory:()=>this.getGlobalMemory(),setGlobalMemory:e=>this.setGlobalMemory(e),appendConeMemory:(e,t)=>this.appendConeMemory(e,t),enqueueSudoRequest:(e,t)=>this.enqueueSudoRequest(e,t),resolveActionableLick:(e,t,n)=>this.resolveActionableLick(e,t,n),approveDirectedOrUser:e=>this.approveDirectedOrUser(e),listPendingSudoRequests:e=>this.listPendingSudoRequests(e)},handleMessage:e=>this.handleMessage(e)})}setProcessManager(e){this.processManager=e}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return Bb(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new L_({fs:e,watcher:t,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new x_(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new Rb(e,t),await this.modelPolicyFile.init(),n(),Nee()),n,{stagePrefix:`orchestrator-init`})}async init(e){await nr(),this.sharedFs=await Bb(e=>br.create({dbName:`slicc-fs`,onRepairProgress:e}),e),this.sessionStore=new vg,this.conversationStore=new Jy,this.fsWatcher=new yr,this.sharedFs.setWatcher(this.fsWatcher),globalThis.__slicc_fs_watcher=this.fsWatcher;let t=await this.initPolicyLayerAndLoadRecords(this.sharedFs,this.fsWatcher,e),n=Object.values(t).find(e=>gn(e))?.jid;for(let e of Object.values(t)){await this.backfillParent(e,n),an(e),this.migrateScoopConfig(e,Object.values(t)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let r=await Dee(`lastAgentTs_${e.jid}`);r&&this.messageRouter.setLastAgentTimestamp(e.jid,r)}await this.backfillModels(),await this.migrateConversations(e),await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new Hb({onTaskRun:async(e,t)=>{M9.info(`Running scheduled task`,{taskId:e.id,scoop:t.name}),await this.sendPrompt(t.jid,`[SCHEDULED TASK]\n\n${e.prompt}`,`scheduler`,`Scheduled Task`)},getScoop:e=>{for(let t of this.scoops.values())if(t.folder===e)return t}}),this.scheduler.start(),M9.info(`Orchestrator initialized`,{scoopCount:this.scoops.size});for(let t of this.scoops.values())try{await this.createScoopTab(t.jid)}catch(e){let n=e instanceof Error?e.message:String(e);M9.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:t.jid,folder:t.folder,root:t.parentJid===null,error:n}),t.parentJid!==null&&this.lifecycle.markTabError(t.jid,n)}finally{e?.(`scoop-restored:${t.jid}`)}Cr(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=z_(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new xg;try{await Hy({store:t,units:[...this.scoops.values()],loadAgentSession:async e=>{let t=await this.sessionStore?.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},loadChatSession:async e=>{let t=await n.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},onProgress:e})}catch(e){M9.warn(`Canonical conversation migration failed; staying on the legacy stores`,{error:e instanceof Error?e.message:String(e)})}}async backfillParent(e,t){if(e.parentJid===void 0){e.parentJid=gn(e)?null:t??null;try{await qn(e)}catch(t){M9.warn(`Failed to persist backfilled parentJid; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}async backfillModels(){let e=[...this.scoops.values()].filter(e=>!ln(e));if(e.length===0)return;let t=zb(),n=[...e].sort((e,t)=>Number(e.parentJid!==null)-Number(t.parentJid!==null));for(let e of n){let n=e.parentJid?this.scoops.get(e.parentJid):void 0,r=(n?pn(n):void 0)??t;if(r){xn(e,r);try{await qn(e)}catch(t){M9.warn(`Failed to persist backfilled model; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}}migrateScoopConfig(e,t){if(e.parentJid===null)return;let n=e.configSchemaVersion??0;if(!(n>=3)){if(n<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),n<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),n<3){let n=`${yn.root}/`,r=un(uee(t,e)),i=e.config?.visiblePaths,a=i?.length===1&&i[0]===n;r[0]!==n&&a&&(e.config={...e.config,visiblePaths:r})}e.configSchemaVersion=3}}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/home/user`,`/tmp`,`/mnt`])try{await this.sharedFs.mkdir(e,{recursive:!0})}catch{}}getGlobalMemory(){return this.memoryStore.getGlobalMemory()}setGlobalMemory(e){return this.memoryStore.setGlobalMemory(e)}appendConeMemory(e,t){return this.memoryStore.appendConeMemory(e,t)}getSharedFS(){return this.sharedFs}getSessionStore(){return this.sessionStore}getConversationStore(){return this.conversationStore}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),e.setUnitRosterProvider?.(()=>this.getScoops().map(e=>({name:e.name,folder:e.folder}))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){return this.lickManager?.handleWebhookEvent(e,t,n)}handleCherryHostEvent(e,t,n){this.lickManager?.emitEvent({type:`cherry`,cherryRuntimeId:e,cherryName:t,cherryOrigin:void 0,body:n,timestamp:new Date().toISOString()})}handlePreviewLick(e){this.lickManager?.emitEvent(e)}observeScoop(e,t){return this.lifecycle.observe(e,t)}muteScoops(e){this.completionService.muteScoops(e)}unmuteScoops(e){return this.completionService.unmuteScoops(e)}isScoopMuted(e){return this.completionService.isScoopMuted(e)}waitForScoops(e,t){return this.completionService.waitForScoops(e,t)}scheduleScoopWait(e,t){return this.completionService.scheduleScoopWait(e,t)}async enqueueSudoRequest(e,t){return this.approvalRouter.enqueueSudoRequest(e,t)}async approveDirectedOrUser(e){let{runDirectedApproval:t}=await import(`./directed-approval-CGI2qBU1.js`);return t(e,{scoops:this.scoops,ownerRootOf:e=>this.ownerRootOrDefault(e),enqueue:(e,t,n)=>this.approvalRouter.enqueueSudoRequest(e,t,n),getSharedFs:()=>this.sharedFs,workspaceFor:on,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):(M9.warn(`Guest approval before SudoManager init — failing closed`),Z_e)}})}async enqueueDirectedApproval(e,t){return this.approveDirectedOrUser({...t,approver:e})}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t,n){return this.approvalRouter.resolveSudoRequestAndPersist(e,t,n)}registerNavigateLick(e){return this.lickRegistry.registerNavigate(e)}registerSessionReloadLick(e){return this.lickRegistry.registerSessionReload(e)}registerUpgradeLick(e){return this.lickRegistry.registerUpgrade(e)}registerDiscoveryLick(e){return this.lickRegistry.registerDiscovery(e)}async resolveActionableLick(e,t,n){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t,n)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(e){return this.approvalRouter.listPendingSudoRequests(e)}registerScoop(e){return this.lifecycle.register(e)}unregisterScoop(e){return this.lifecycle.unregister(e)}getScoops(){return Array.from(this.scoops.values())}getScoop(e){return this.scoops.get(e)}getScoopTabState(e){return this.lifecycle.getTab(e)}defaultRoot(){return tn(this.scoops.values())[0]}parentOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return(t?.parentJid?this.scoops.get(t.parentJid):void 0)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return $t(this.scoops.values(),t)??this.defaultRoot()}getWorkUnits(){return this.workUnits}getLiveUnit(e){return this.lifecycle.getUnit(e)}ensureLiveUnit(e){return this.lifecycle.ensureUnit(e)}async resetFilesystem(){this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await br.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await Db(this.sharedFs).catch(e=>{M9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new L_({fs:this.sharedFs,watcher:this.fsWatcher,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=new x_(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new Rb(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),M9.info(`Filesystem reset and defaults re-seeded`)}clearScoopMessages(e){return this.messageRouter.clearScoopMessages(e,this.lifecycle.getContext(e))}clearAllMessages(){return this.messageRouter.clearAllMessages()}handleMessage(e){return this.messageRouter.handleMessage(e)}delegateToScoop(e,t,n){return this.messageRouter.delegateToScoop(e,t,n)}createScoopTab(e){return this.lifecycle.createTab(e)}async destroyScoopTab(e){this.lifecycle.destroyTab(e)}isProcessing(e){return this.lifecycle.getTab(e)?.status===`processing`}getScoopContext(e){return this.lifecycle.getContext(e)}getQueuedMessageIds(e){return this.messageRouter.getQueuedMessageIds(e)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return $n(e)}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}setScoopModel(e,t){return this.lifecycle.setModel(e,t)}refreshModels(){this.lifecycle.refreshModels()}setScoopThinkingLevel(e,t,n){return this.lifecycle.setThinkingLevel(e,t,n)}reloadAllSkills(){return this.lifecycle.reloadAllSkills()}stopScoop(e){this.lifecycle.getContext(e)?.stop()}getSessionCosts(e){return this.costTracker.getSessionCosts(e)}async getSessionCostsForCommand(e){let t=this.getSessionCosts({includeDropped:e===`all`});if(e===`live`||!this.sharedFs)return t;let{readSessionsIndex:n}=await import(`./frozen-archive-format-CLzdz05B.js`).then(e=>e.t),r=await n(this.sharedFs);return[...t,...r.map(Dr)]}getModelCosts(e){return this.costTracker.getModelCosts(e)}getBurnRate(e){return this.costTracker.getBurnRate(e)}getContextFills(){return this.costTracker.getContextFills()}async shutdown(){this.stopMessageLoop(),this.idleTimers.clearAll(),this.scheduler?.stop(),this.scheduler=null,this.completionService.shutdown();let e=this.approvalRouter.failAll();e>0&&M9.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.lifecycle.destroyAllTabs(),this.lickManager?.setDiscoveryIgnore?.(null),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=null,this.modelPolicyFile?.dispose(),this.modelPolicyFile=null,this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,M9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new xg,t=this.sharedFs;return new cy({collection:{listScoops:()=>this.getScoops(),isProcessing:e=>this.isProcessing(e),getAgentMessages:e=>this.getScoopContext(e)?.getAgentMessages()??null,loadPersistedSessions:()=>this.sessionStore?.loadAll()??Promise.resolve([]),loadUiChatSessions:async()=>{let t=await e.list();return(await Promise.all(t.map(t=>e.load(t)))).filter(e=>e!==null)},wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:Dy(),snapshotStore:{read:e=>yy(t,e),write:(e,n)=>vy(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.108.0`})}};const N9=r(`workflow-run-manager`),P9=`/shared/workflow-runs`,F9=1e3;function $_e(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function eve(e){let t=new Map,n=new Map,r=e=>{let r=t.get(e);if(r)for(let t of n.get(e)??[])try{t(r)}catch(e){N9.warn(`observeRun handler threw`,e)}},i=(e,n)=>ave(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=$_e(e,a.parentJid),d={id:c,name:a.name,source:a.source,origin:u.origin,lickTarget:u.lickTarget,status:`running`,currentPhase:null,agentsStarted:0,agentsDone:0,logs:[],startedAt:new Date().toISOString(),finishedAt:null,resultPath:null,preview:null,error:null,pid:null};t.set(c,d),rve(t,n);let f=i(a.ctx,c),p=ive(e.processManager,d,c,()=>r(c));return e.runRealm(a.code,[`workflow`,a.filename,c],f).then(e=>o(c,l,e)).catch(e=>s(c,e instanceof Error?e.message:String(e))).finally(()=>p()).catch(e=>N9.warn(`workflow run lifecycle error`,e)),{runId:c}}async function o(t,n,r){let{result:i,hadResult:a}=e.splitResult(r.stdout,n);return r.exitCode===137?c(t,`killed`,null,r.stderr||`killed (SIGKILL)`):r.exitCode!==0||!a?c(t,`error`,null,r.stderr||(a?`exit ${r.exitCode}`:`script produced no result`)):c(t,`done`,i,null)}function s(e,t){return c(e,`error`,null,t)}async function c(n,i,a,o){let s=t.get(n);if(!s||s.status!==`running`&&s.status!==`paused`)return;let c=`${P9}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(P9,{recursive:!0}),await e.sharedFs.writeFile(c,JSON.stringify({name:s.name,status:i,result:i===`done`?a:null,error:o,logs:s.logs,startedAt:s.startedAt,finishedAt:u},null,2)),s.resultPath=c}catch(e){let t=e instanceof Error?e.message:String(e);N9.error(`failed to write run result file`,{runId:n,resultPath:c,error:t}),o=`result file write failed: ${t}`,i===`done`&&(i=`error`)}s.status=i,s.error=o,s.finishedAt=u,s.preview=i===`done`?nve(a):o??``,r(n),l(s)}function l(t){t.origin===`cone`&&e.fireLick({type:`workflow`,targetScoop:t.lickTarget,workflowRunId:t.id,workflowName:t.name??void 0,resultPath:t.resultPath??void 0,preview:t.preview??t.error??void 0,timestamp:new Date().toISOString(),body:{runId:t.id,status:t.status,error:t.error}})}return{start:a,getRun:e=>t.get(e)??null,listRuns:()=>Array.from(t.values()),observeRun(e,r){let i=n.get(e);i||(i=new Set,n.set(e,i)),i.add(r);let a=t.get(e);if(a)try{r(a)}catch(e){N9.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function tve(e){let t=eve(e);return globalThis[I7]=t,N9.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function nve(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function rve(e,t,n=100){if(e.size<=n)return;let r=[...e.values()].filter(e=>e.status!==`running`&&e.status!==`paused`).sort((e,t)=>(e.finishedAt??e.startedAt).localeCompare(t.finishedAt??t.startedAt)),i=e.size-n;for(let n of r){if(i<=0)break;e.delete(n.id),t.delete(n.id),i--}}function ive(e,t,n,r){let i=e.on(`spawn`,e=>{t.pid===null&&e.argv.includes(n)&&(t.pid=e.pid,r(),i())});return i}function ave(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?ove(n,t,a?.args??[],r):e===`agent`?sve(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function ove(e,t,n,r){let i=e.get(t);if(i&&i.status===`running`){let[e,t=``]=n;e===`phase`?(i.currentPhase=t,i.logs.push(t)):e===`log`&&i.logs.push(t),i.logs.length>F9&&i.logs.splice(0,i.logs.length-F9),r()}return{stdout:``,stderr:``,exitCode:0}}async function sve(e,t,n,r){let i=e.get(t);i&&i.status===`running`&&(i.agentsStarted++,r());try{return await n()}finally{let n=e.get(t);n&&n.status===`running`&&(n.agentsDone++,r())}}const cve=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function lve(e,t,n){let r=uve(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=dve(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function uve(e){let t=new Map;return I9(t,e.discoveryOrigin),I9(t,e.discoveryUrl),[...t.values()]}function I9(e,t){if(t){L9(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);L9(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!cve.has(e)))L9(e,t,1,`substring`)}catch{}}}function L9(e,t,n,r){if(t.length===0)return;let i=`${r}:${t}`,a=e.get(i);(!a||n>a.weight)&&e.set(i,{text:t,weight:n,match:r})}function dve(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=pve(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)fve(a,e)&&(r+=e.weight*o)}return r}function fve(e,t){if(t.match===`substring`)return e.includes(t.text);let n=t.text.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|[^a-z0-9.-])(?:www\\.)?${n}($|[^a-z0-9.-])`).test(e)}function pve(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}var mve=class{kind=`proc`;source=void 0;profile=void 0;mountId;pm;closed=!1;constructor(e,t={}){this.pm=e,this.mountId=t.mountId??`proc-${Date.now().toString(36)}`}async readDir(e){this.assertOpen(e);let t=B9(e);if(t.length===0){let e=this.pm.list(),t=e.map(e=>({name:String(e.pid),kind:`directory`}));return e.some(e=>e.pid===1)||t.push({name:`1`,kind:`directory`}),t.sort((e,t)=>Number(e.name)-Number(t.name)),t.push({name:z9,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===z9)throw new In(`ENOTDIR`,`not a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);return R9.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new In(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=B9(e);if(t.length===1&&t[0]===z9)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new In(`EISDIR`,`is a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new In(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new In(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=B9(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===z9)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new In(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new In(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new In(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new In(`EACCES`,`read-only filesystem`,e)}async refresh(){return{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:`/proc`,extra:`kernel processes (read-only)`}}async close(){this.closed=!0}assertOpen(e){if(this.closed)throw new In(`EBADF`,`mount closed`,e)}pidExists(e){return e===1||this.pm.get(e)!==null}fileSize(e,t){return this.renderProcFile(e,t).length}fileMtime(e){if(e===1)return 0;let t=this.pm.get(e);return t?t.finishedAt??t.startedAt:0}renderTable(){let e={stats:this.pm.stats(),processes:this.pm.list().map(e=>({pid:e.pid,ppid:e.ppid,kind:e.kind,state:H9(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:U9(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
|
|
5150
|
-
`}renderProcFile(e,t){if(e===1)return
|
|
5138
|
+
`)&&t.pop(),t}function n9(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function kge(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=t9(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};if(Buffer.byteLength(a[0],`utf-8`)>r)return{content:``,truncated:!0,truncatedBy:`bytes`,totalLines:o,totalBytes:i,outputLines:0,outputBytes:0,lastLinePartial:!1,firstLineExceedsLimit:!0,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`;for(let e=0;e<a.length&&e<n;e++){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(e>0);if(c+n>r){l=`bytes`;break}s.push(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let u=s.join(`
|
|
5139
|
+
`),d=Buffer.byteLength(u,`utf-8`);return{content:u,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:d,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function r9(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=t9(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`,u=!1;for(let e=a.length-1;e>=0&&s.length<n;e--){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(s.length>0);if(c+n>r){if(l=`bytes`,s.length===0){let e=Age(t,r);s.unshift(e),c=Buffer.byteLength(e,`utf-8`),u=!0}break}s.unshift(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let d=s.join(`
|
|
5140
|
+
`),f=Buffer.byteLength(d,`utf-8`);return{content:d,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:f,lastLinePartial:u,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function Age(e,t){let n=Buffer.from(e,`utf-8`);if(n.length<=t)return e;let r=n.length-t;for(;r<n.length&&(n[r]&192)==128;)r++;return n.slice(r).toString(`utf-8`)}const i9=r(`tool:bash`),a9=40960,o9=1048576,s9=`\0slicc-img:`;function jge(e){let t=Jt(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=o9;for(let e=t.length-1;e>=0;e--){let i=t[e].marker.length;if(i>r&&n.size>0)break;r-=i,n.add(e)}let i=new Map,a=``,o=0;return t.forEach((t,r)=>{if(a+=e.slice(o,t.index),n.has(r)){let e=`${s9}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${o9/1024}KB image budget. View it on its own to see it.]`;o=t.index+t.marker.length}),a+=e.slice(o),{text:a,markers:i}}function Mge(e){let t=Jt(e).filter(e=>e.kind===`image`);if(t.length===0)return e;let n=``,r=0;for(let i of t)n+=`${e.slice(r,i.index)}[image]`,r=i.index+i.marker.length;return n+e.slice(r)}function Nge(e){return e.replaceAll(RegExp(`${s9}\\d+`,`g`),`[image]`)}function c9(e,t){if(t.size===0)return e;let n=e;for(let[e,r]of t)n.includes(e)&&(n=n.replace(e,()=>r));return n}async function Pge(e,t,n,r){let{text:i,markers:a}=jge(e),o=r9(i,{maxBytes:a9});if(!o.truncated)return c9(i,a);let s=`showing the last ${n9(o.outputBytes)} of ${n9(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,Nge(i)),c9(`${o.content}\n\n[Output truncated: ${s}. Full output written to ${c} — read specific ranges with \`sed -n 'START,ENDp' ${c}\`, \`tail -n +N ${c}\`, or \`grep\`.]`,a)}catch(e){return i9.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),c9(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const Fge=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function l9(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function Ige(e){let t=e.statements[e.statements.length-1],n=t?.pipelines[t.pipelines.length-1];if(!n||n.negated)return null;let r=n.commands[n.commands.length-1];if(r?.type!==`SimpleCommand`||!r.name)return null;let i=l9(r.name);if(i!==`command`)return i;let a=r.args[0];return a?l9(a):null}function Lge(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=Ige(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&Fge.has(i)}function u9(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function Rge(e){return`Execute a bash command. Full shell with pipes, redirects, chaining, control flow. Includes: grep, rg, sed, awk, jq, find, curl, git, node, python3, sqlite3, open (--view for vision), playwright-cli (browser automation). Run \`commands\` for full list. Output is capped at ${a9/1024}KB (the tail is kept); when truncated the full output is written to a temp file named in the result so you can page it. Inline images (\`open --view\`) do not count against that cap — up to ${o9/1024}KB of images per command reaches you as pictures, not base64. A command still running after background_after seconds (default ${e}) is detached: you get a job id at once and a Background Command lick delivers its exit code and output later, so a stuck command never wedges the turn.`}function zge(e){return{type:`object`,properties:{command:{type:`string`,description:`The bash command to execute.`},timeout:{type:`number`,description:`Hard ceiling in seconds: the command is killed and this call returns an error — no job, no lick. Omit for no ceiling (the default), which detaches a slow command instead of killing it.`},background_after:{type:`number`,description:`Seconds to wait before detaching the command. Defaults to ${e}. Use 0 to detach immediately (dev servers, watchers), or a large value when you must have the output in this turn. A smaller timeout wins: the command is killed, not detached.`}},required:[`command`]}}function Bge(e){return{content:`Command timed out after ${e}s and was killed; no output was captured. Re-run it with a larger timeout, a larger background_after so it detaches instead of dying, or narrow the command so it finishes sooner.`,isError:!0}}function Vge(e,t,n){let r=new AbortController,i=e.options.jobHost?.spawn(t)??null,a=()=>r.abort();n?.aborted?r.abort():n?.addEventListener(`abort`,a,{once:!0}),i&&(i.signal.aborted?r.abort():i.signal.addEventListener(`abort`,()=>r.abort(),{once:!0}));let o=[],s,c,l=Promise.resolve(),u=()=>{if(s===void 0||c===void 0)return;let t=s,n=c,r=o.join(``);l=l.then(async()=>{let i=await p9(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>i9.warn(`Failed to tee background bash output`,{jobId:n,outputPath:t,error:e instanceof Error?e.message:String(e)}))};return{job:i,controller:r,settled:e.shell.executeCommand(t,r.signal,i?.pid,void 0,{onOutput:e=>{o.push(e),u()}}).then(e=>({ok:!0,result:e}),e=>({ok:!1,error:e instanceof Error?e.message:String(e)})),releaseTurnSignal:()=>n?.removeEventListener(`abort`,a),getTeedOutput:()=>o.join(``),startPersisting:(e,t)=>{s=e,c=t,u()},flushPersist:()=>l,killedByTimeout:!1}}function d9(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function f9(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function Hge(e,t,n,r,i){let a=i===void 0?``:` Its ${i}s timeout still applies.`;return{content:`Still running after ${n}s — detached as background job ${e}. This turn is NOT blocked on it: continue with other work, and do not re-run the command. A "Background Command" lick will arrive with the exit code and a preview once it finishes, and its full output is being written to ${r} as it runs.${t===void 0?``:` Pid ${t}: \`ps\` lists it, \`kill ${t}\` stops it.`}${a}`}}function Uge(e,t,n,r={}){let i=0,a=0,o={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:u9(r.defaultBackgroundAfterSeconds)??600,nextOutputSeq:()=>i+=1,nextJobId:()=>`bg-${a+=1}`};return{name:`bash`,description:Rge(o.defaultBackgroundAfter),inputSchema:zge(o.defaultBackgroundAfter),execute:(e,t)=>Yge(o,e,t)}}async function p9(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return i9.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function Wge(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function Gge(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function Kge(e,t,n,r,i,a,o,s){await o.flushPersist();let c=o.killedByTimeout||Wge(a),l,u;if(c){let e=o.getTeedOutput();u=124,l=`${e.endsWith(`
|
|
5141
|
+
`)||e.length===0?e:`${e}\n`}${Gge(s,u)}`}else if(a.ok)l=[a.result.stdout,a.result.stderr].filter(Boolean).join(``)||`(exit code: ${a.result.exitCode})`,u=a.result.exitCode;else{let e=o.getTeedOutput();u=1,l=e?`${e.endsWith(`
|
|
5142
|
+
`)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await p9(e,t,l),f;try{await e.fs.writeFile(i,d),f=i}catch(e){i9.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){i9.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=r9(Mge(d),{maxBytes:2048});e.options.fireLick({type:`bash`,bashJobId:t,bashCommand:r,bashExitCode:u,...n===void 0?{}:{bashJobPid:n},resultPath:f,preview:p.content,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t,pid:n??null,command:r,exitCode:u,resultPath:f??null}})}function qge(e,t,n,r,i,a){let o=e.nextJobId(),s=t.job?.pid,c=`${e.tempDir}/bash-${o}.txt`;t.startPersisting(c,o);let l=i===void 0?void 0:i-a,u=l===void 0?void 0:setTimeout(()=>d9(t,`timeout`),l*1e3);return t.settled.then(r=>(u!==void 0&&clearTimeout(u),f9(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),Kge(e,o,s,n,c,r,t,i))).catch(e=>i9.error(`Background bash delivery failed`,{jobId:o,error:e})),i9.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:l}),Hge(o,s,r,c,i)}async function Jge(e,t,n){i9.debug(`Result`,{exitCode:n.exitCode,stdoutLength:n.stdout.length,stderrLength:n.stderr.length});let r=``;return n.stdout&&(r+=n.stdout),n.stderr&&(r+=n.stderr),r||=`(exit code: ${n.exitCode})`,{content:await Pge(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!Lge(e.shell,t,n.exitCode,n.stderr)}}async function Yge(e,t,n){let r=t.command,i=u9(t.timeout),a=u9(t.background_after)??e.defaultBackgroundAfter;i9.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=Vge(e,r,n),s=i!==void 0&&i<=a,c=s?i:a,l,u=new Promise(e=>{l=setTimeout(()=>e(`elapsed`),c*1e3)});try{let t=await Promise.race([o.settled,u]);return t===`elapsed`&&s?(d9(o,`timeout`),i9.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),Bge(c)):t===`elapsed`?qge(e,o,r,c,i,a):(f9(o,t.ok?t.result.exitCode:1),t.ok?await Jge(e,r,t.result):(i9.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const m9=r(`tool:fs`);function Xge(e){return[Zge(e),Qge(e),$ge(e)]}function Zge(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${e9/1024}KB (whichever is hit first); use offset/limit for large files and the \`offset=N\` in the footer to page through the rest.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to read.`},offset:{type:`number`,description:`Line number to start reading from (1-based). Optional.`},limit:{type:`number`,description:`Maximum number of lines to read. Optional.`}},required:[`path`]},async execute(t){let n=t.path,r=t.offset??1,i=t.limit;m9.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
|
|
5143
|
+
`),a=t.length,o=Math.max(0,r-1),s=o+1;if(o>=t.length)return{content:`Offset ${r} is beyond end of file (${a} lines total)`,isError:!0};let c=i===void 0?t.slice(o):t.slice(o,Math.min(o+i,t.length)),l=i===void 0?void 0:c.length,u=kge(c.join(`
|
|
5144
|
+
`));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${n9(new TextEncoder().encode(t[o]??``).length)}, exceeds ${n9(e9)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${e9}]`};let d=u.content,f=``;if(u.truncated){let e=s+u.outputLines-1,t=e+1;f=u.truncatedBy===`lines`?`\n\n[Showing lines ${s}-${e} of ${a}. Use offset=${t} to continue.]`:`\n\n[Showing lines ${s}-${e} of ${a} (${n9(e9)} limit). Use offset=${t} to continue.]`}else l!==void 0&&o+l<t.length&&(f=`\n\n[${t.length-(o+l)} more lines in file. Use offset=${o+l+1} to continue.]`);return{content:d+f}}catch(e){let t=e instanceof Error?e.message:String(e);return m9.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function Qge(e){return{name:`write_file`,description:`Write content to a file. Creates the file if it does not exist, or overwrites it if it does. Parent directories are created automatically.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to write.`},content:{type:`string`,description:`The content to write to the file.`}},required:[`path`,`content`]},async execute(t){let n=t.path,r=t.content;m9.debug(`Write`,{path:n,contentLength:r.length});try{return await e.writeFile(n,r),{content:`File written: ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);return m9.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function $ge(e){return{name:`edit_file`,description:`Edit a file by replacing an exact string match. The old_string must appear exactly once in the file. Use this instead of write_file when making targeted changes to existing files.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to edit.`},old_string:{type:`string`,description:`The exact string to find and replace. Must be unique in the file.`},new_string:{type:`string`,description:`The replacement string.`}},required:[`path`,`old_string`,`new_string`]},async execute(t){let n=t.path,r=t.old_string,i=t.new_string;m9.debug(`Edit`,{path:n,oldLength:r.length,newLength:i.length});try{let t=await e.readTextFile(n),a=t.split(r).length-1;if(a===0)return{content:`old_string not found in ${n}`,isError:!0};if(a>1)return{content:`old_string found ${a} times in ${n}. It must be unique. Provide more context.`,isError:!0};let o=t.replace(r,i);return await e.writeFile(n,o),{content:`File edited: ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);return m9.error(`Edit failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const h9=r(`scoop-management-tools`);function g9(e){return dn(e.getScoops(),e.scoop.jid)}function _9(e){return g9(e).filter(t=>t.jid!==e.scoop.jid&&t.parentJid!==null)}function v9(e){return t=>t.folder===e||t.name===e}function y9(e,t){let n=_9(t),r=[],i=[];for(let t of e){let e=n.find(v9(t));e?r.push(e):i.push(t)}return{resolved:r,unknown:i}}const b9=[`command`,`read`,`write`,`secret`];function e_e(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,50)+`-scoop`}function t_e(e){return e===void 0?{ok:!0}:On(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${kn.join(`, `)}.`,isError:!0}}function n_e(e){return e===void 0?{ok:!0}:typeof e!=`number`||!Number.isFinite(e)||e<0?{ok:!1,content:`Invalid background_after "${String(e)}". Must be a number of seconds >= 0.`}:{ok:!0,seconds:e}}function r_e(e,t){if(e===void 0||!t)return{ok:!0,modelId:e};let n=t(e);return n.ok?{ok:!0,modelId:n.selection.modelId,providerId:n.selection.providerId}:{ok:!1,content:`Unknown model "${e}": ${n.error}. Run the "models" shell command to list available model IDs.`,isError:!0}}function x9(e,t){let n=_9(t).map(e=>e.folder).join(`, `);return{content:`Scoop "${e}" not found in your scoops (${t.scoop.folder}). Available: ${n||`(none)`}`,isError:!0}}function i_e(e,t){let n=t?.(e.jid),r=n?.status??`unknown`,i=n?.lastActivity?new Date(n.lastActivity).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0}):``,a=i?` — ${r} (since ${i})`:` — ${r}`;return e.parentJid===null?`- ${e.assistantLabel} (${e.folder}) [CONE]${a}`:`- ${e.name} (${e.folder})${a}`}async function a_e(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),h9.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function o_e(e){let{kind:t,detail:n,suggested_pattern:r}=e;return b9.includes(t)?typeof n!=`string`||n.trim().length===0?{ok:!1,result:{content:`detail must be a non-empty string.`,isError:!0}}:{ok:!0,request:{kind:t,detail:n,...r?{suggestedPattern:r}:{}}}:{ok:!1,result:{content:`Invalid sudo kind "${t}". Must be one of: ${b9.join(`, `)}.`,isError:!0}}}function s_e(e){let t=[`Cone decision: ${e.decision}.`];return e.decision===`always`&&e.pattern&&t.push(`Persisted pattern: ${e.pattern}`),e.decision===`deny`&&t.push(`The sensitive action was not approved. Do not retry without addressing the reason for refusal.`),t.join(`
|
|
5145
|
+
`)}async function c_e(e,t){let n=o_e(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return h9.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:s_e(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function l_e(e,t){let{scoop_name:n,prompt:r}=e,i=g9(t).find(v9(n));if(i?.jid===t.scoop.jid)return{content:`Cannot feed yourself.`,isError:!0};if(!i)return x9(n,t);try{return await t.onFeedScoop(i.jid,r),h9.info(`Fed scoop`,{target:i.folder,promptLength:r.length}),{content:`Task sent to ${i.folder}. You will be notified when it completes.`}}catch(e){return{content:`Failed to feed scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function u_e(e){let t=g9(e);return t.length===0?{content:`No scoops registered.`}:{content:`Registered scoops:\n${t.map(t=>i_e(t,e.getScoopTabState)).join(`
|
|
5146
|
+
`)}`}}function d_e({name:e,folder:t,model:n,modelProviderId:r,visiblePaths:i,writablePaths:a,allowedCommands:o,thinkingLevel:s,backgroundAfterSeconds:c,parentJid:l,defaultVisibleRoots:u}){return{name:e,folder:t,trigger:`@${t}`,requiresTrigger:!0,assistantLabel:t,addedAt:new Date().toISOString(),config:{...n?{modelId:n}:{},...n&&r?{modelProviderId:r}:{},visiblePaths:i??u,writablePaths:a??[`/scoops/${t}/`,`/shared/`],...o?{allowedCommands:o}:{},...s?{thinkingLevel:s}:{},...c===void 0?{}:{backgroundAfterSeconds:c}},configSchemaVersion:3,parentJid:l}}async function f_e(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return h9.error(`Auto-feed failed`,{name:n,error:t}),{content:`Scoop "${n}" created as "${r}" but the initial task could not be sent: ${t}. Use feed_scoop to retry.`,isError:!0}}return{content:`Scoop "${n}" created as "${r}" and task sent. It is now working on it.`}}async function p_e(e,t){let{name:n,model:r,prompt:i,visiblePaths:a,writablePaths:o,allowedCommands:s,thinking:c,background_after:l}=e,u=t_e(c);if(!u.ok)return{content:u.content,isError:u.isError};let d=n_e(l);if(!d.ok)return{content:d.content,isError:!0};let f=r_e(r,t.resolveModelSelection);if(!f.ok)return{content:f.content,isError:f.isError};let p=e_e(n),m=_9(t).find(e=>e.name===n||e.folder===p);if(m)return{content:`A scoop named "${m.name}" (${m.folder}) already exists in your scoops. Use feed_scoop to give it another task, or drop_scoop first.`,isError:!0};let h=Qt(p,t.getScoops().map(e=>e.folder));try{let e=d_e({name:n,folder:h,model:f.modelId,modelProviderId:f.providerId,visiblePaths:a,writablePaths:o,allowedCommands:s,thinkingLevel:u.level,backgroundAfterSeconds:d.seconds,parentJid:t.scoop.jid,defaultVisibleRoots:un(on(t.scoop))}),r=await t.onScoopScoop(e);return h9.info(`Scoop created`,{name:n,folder:h}),i&&t.onFeedScoop?f_e(r,i,n,h,t.onFeedScoop):{content:`Scoop "${n}" created as "${h}". Use feed_scoop to give it a task.`}}catch(e){return{content:`Failed to create scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function m_e(e,t){let{scoop_name:n}=e,r=g9(t).find(v9(n));if(r?.jid===t.scoop.jid)return{content:`Cannot drop yourself.`,isError:!0};if(!r)return x9(n,t);try{return await t.onDropScoop(r.jid),h9.info(`Scoop dropped`,{name:r.name,folder:r.folder}),{content:`Scoop "${r.name}" (${r.folder}) has been dropped.`}}catch(e){return{content:`Failed to drop scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function S9(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}function C9(e,t){let n=_9(t).map(e=>e.folder).join(`, `);return{content:`No matching scoops found in your scoops (${t.scoop.folder}). Unknown: ${e.join(`, `)}. Available: ${n||`(none)`}`,isError:!0}}async function h_e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return S9();let{resolved:r,unknown:i}=y9(n,t);return r.length===0?C9(i,t):(t.onMuteScoops(r.map(e=>e.jid)),h9.info(`Scoops muted`,{names:r.map(e=>e.folder)}),{content:`Muted: ${r.map(e=>e.folder).join(`, `)}${i.length>0?` (unknown: ${i.join(`, `)})`:``}`})}function g_e(e,t){if(e.length===0)return[`No stashed completions.`];let n=[``,`Stashed completions:`];for(let r of e){let e=t.get(r.jid)??r.jid;n.push(`--- ${e} ---`),r.notificationPath&&n.push(`VFS path: ${r.notificationPath}`),n.push(r.summary)}return n}async function __e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return S9();let{resolved:r,unknown:i}=y9(n,t);if(r.length===0)return C9(i,t);let a=r.map(e=>e.jid),o=new Map(r.map(e=>[e.jid,e.folder])),s=await t.onUnmuteScoops(a);h9.info(`Scoops unmuted`,{names:r.map(e=>e.folder),stashedCount:s.length});let c=[`Unmuted: ${r.map(e=>e.folder).join(`, `)}${i.length>0?` (unknown: ${i.join(`, `)})`:``}`];return c.push(...g_e(s,o)),{content:c.join(`
|
|
5147
|
+
`)}}function v_e(e,t){return!Array.isArray(e)||e.length===0?S9():t!==void 0&&(typeof t!=`number`||!Number.isFinite(t)||t<0)?{content:`timeout_ms must be a non-negative finite number (or omitted).`,isError:!0}:null}function y_e(e,t,n,r){return`scoop_wait scheduled for: ${e}${r===void 0?` (no timeout)`:` (timeout: ${r}ms)`}.${t.length>0?` Unknown (skipped): ${t.join(`, `)}.`:``}${n?` Dropped before schedule (skipped): ${n}.`:``} Continue with other work — a 'scoop-wait' lick will be delivered when all listed scoops complete or the timeout fires.`}async function b_e(e,t){let{scoop_names:n,timeout_ms:r}=e,i=v_e(n,r);if(i)return i;let{resolved:a,unknown:o}=y9(n,t);if(a.length===0)return C9(o,t);let s=a.map(e=>e.jid),c=t.onScheduleScoopWait(s,r),l=new Map(a.map(e=>[e.jid,e.folder])),u=c.scheduled.map(e=>l.get(e)??e).join(`, `),d=c.unknown.map(e=>l.get(e)??e).join(`, `);return h9.info(`Wait scheduled`,{scheduled:c.scheduled.map(e=>l.get(e)??e),droppedAtSchedule:d?d.split(`, `):[],unknownNames:o,timeout_ms:r}),c.scheduled.length===0?{content:`scoop_wait could not be scheduled — every listed scoop was unregistered before the wait could start (dropped: ${d||c.unknown.join(`, `)}).${o.length>0?` Unknown names: ${o.join(`, `)}.`:``}`,isError:!0}:{content:y_e(u,o,d,r)}}function x_e(e,t){return t?e.persisted?`Approved (always) — persisted NOPASSWD rule for ${e.kind??`unknown`} pattern "${e.persistedPattern}" in /scoops/${e.scoopFolder??`<unknown>`}/etc/sudoers.`:e.persistError?`Approved (always) but could NOT persist a rule (${e.persistError}). The current action is allowed; future occurrences will prompt again.`:`Approved (always) — no persistable rule applied for this request.`:`Approved (once) — the current action proceeds; future ones will prompt again.`}async function S_e(e,t){let{lick_id:n,always:r,pattern:i}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};let a=r?{decision:`always`,...i?{pattern:i}:{}}:{decision:`allow`};try{let e=await t.onSudoResolve(n,a);return e.settled?(h9.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:x_e(e,!!r)}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_confirm failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function C_e(e,t){let{lick_id:n}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};try{let e=await t.onSudoResolve(n,{decision:`deny`});return e.settled?(h9.info(`Lick dismissed`,{id:n}),e.message?{content:e.message}:{content:`Denied — the scoop will not run this action.`}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_dismiss failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function w_e(e){let t=e.onListSudoRequests();return t.length===0?{content:`No pending sudo requests.`}:{content:`Pending sudo requests:\n${t.map(t=>{let n=e.getScoops().find(e=>e.jid===t.scoopJid)?.folder??t.scoopJid,r=t.request.suggestedPattern?` (suggested: ${t.request.suggestedPattern})`:``;return`- ${t.id} — ${n} — ${t.request.kind}: ${t.request.detail}${r}`}).join(`
|
|
5148
|
+
`)}`}}async function T_e(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),h9.info(`Global memory updated`),{content:`Global memory updated successfully.`}}catch(e){return{content:`Failed to update global memory: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function E_e(e){return{name:`send_message`,description:`Send a progress message while still working. Your final output is also sent.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`The message text to send`},sender:{type:`string`,description:`Optional sender name/role (e.g., "Researcher"). Defaults to assistant name.`}},required:[`text`]},execute:t=>a_e(t,e)}}function D_e(e){return{name:`sudo_request`,description:`Ask the cone for an explicit sudo escalation before running a sensitive action. Use this when you know up-front that a command, read, or write will be gated and you want a clean approval round-trip instead of letting the gate fire mid-action. Resolves with the cone's decision (allow / always / deny). 'always' durably widens your sandbox by appending a NOPASSWD rule to /scoops/<folder>/etc/sudoers. 'deny' (or a timeout / dropped cone) resolves fail-closed.`,inputSchema:{type:`object`,properties:{kind:{type:`string`,enum:[...b9],description:`The kind of sensitive action being requested. command = a shell command; read/write = a VFS path; secret = a credential read. Only command/read/write can be persisted with "always" (no sudoers Secret directive).`},detail:{type:`string`,description:`The concrete subject of the request (e.g., the command line "git push origin main" or the VFS path "/workspace/.git/config"). The cone sees this verbatim.`},suggested_pattern:{type:`string`,description:`Optional pre-filled glob pattern for an "always" grant (e.g., "git push*" for a command or "/workspace/.git/**" for a path). The cone may override this.`}},required:[`kind`,`detail`]},execute:t=>c_e(t,e)}}function O_e(e){return{name:`feed_scoop`,description:`Give a scoop a task. Provide a complete, self-contained prompt — the scoop has no access to your conversation. You'll be notified when it finishes.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop"). Must be a scoop you own — use list_scoops to see them.`},prompt:{type:`string`,description:`Complete, self-contained instructions for the scoop. Include ALL context — the scoop cannot see your conversation.`}},required:[`scoop_name`,`prompt`]},execute:t=>l_e(t,e)}}function k_e(e){return{name:`list_scoops`,description:`List the scoops you own (your own subtree). Names from this list are the only ones feed_scoop / drop_scoop / scoop_mute / scoop_unmute / scoop_wait can resolve.`,inputSchema:{type:`object`,properties:{}},execute:()=>u_e(e)}}function A_e(e){return{name:`scoop_scoop`,description:`Create a new scoop. Optionally specify a model, a prompt, and per-scoop sandbox shape (visible/writable paths + command allow-list). If prompt is provided, the scoop starts working immediately after creation (no separate feed_scoop needed).`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Display name for the scoop (e.g., "hero-block")`},model:{type:`string`,description:`Model ID for this scoop (e.g., "claude-sonnet-4-6"). If omitted, uses the same model as the cone.`},prompt:{type:`string`,description:`Task prompt for the scoop. If provided, the scoop starts working immediately after creation.`},visiblePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ (not write). Pure replace — what you set is what you get. Omit to use the default: YOUR OWN workspace plus the shared skills tree — ["/workspace/"] for the primary cone, ["/cones/<folder>/workspace/", "/workspace/skills/"] for any other. Prefer omitting it over naming "/workspace/" explicitly, which would point the scoop at a different cone's files. Pass [] for no extra read-only paths. Note: the scoop's writablePaths are always readable too, so a true read-nothing sandbox also requires writablePaths: []. Mounts remain readable regardless. Trailing slash recommended (e.g. "/shared/data/").`},writablePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ AND WRITE. Pure replace. Omit to use the default ["/scoops/<folder>/", "/shared/"] which gives the scoop its own sandbox plus shared space. Pass [] to block all writes — note that /tmp stays readable and writable regardless, as shared scratch space every scoop gets (so nothing secret belongs there). Trailing slash recommended.`},allowedCommands:{type:`array`,items:{type:`string`},description:`Shell command allow-list. Omit for unrestricted access to every built-in, custom, and .jsh command (the default). Pass a list of command names to restrict the scoop's shell — e.g. ["echo","cat","grep"] for a read-only text-processing scoop. Pass ["*"] for explicit unrestricted. Applies to pipelines, substitutions, and network commands too.`},thinking:{type:`string`,enum:[...kn],description:`Reasoning / thinking-level for this scoop (pi-ai effort). One of: off, minimal, low, medium, high, xhigh. Omit to inherit the global default ("off"). Non-reasoning models always clamp to "off"; "xhigh" clamps to "high" on models that do not support the max tier.`},background_after:{type:`number`,description:`Seconds this scoop's bash tool waits for a command before detaching it to the background and continuing (default 600). Lower it for a scoop that must never stall on a slow command — nobody can cancel a scoop's turn, and its detached commands report back via a Background Command lick. Use 0 to detach every command immediately.`}},required:[`name`]},execute:t=>p_e(t,e)}}function j_e(e){return{name:`drop_scoop`,description:`Remove a scoop and stop its work. The scoop will be unregistered and its context destroyed.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop"). Must be a scoop you own — use list_scoops to see them.`}},required:[`scoop_name`]},execute:t=>m_e(t,e)}}function M_e(e){return{name:`scoop_mute`,description:`Suspend scoop→cone notifications for the given scoops. While muted, a scoop's completion is stashed and will be delivered to the cone when you call scoop_unmute (or scoop_wait which consumes it). Use this when coordinating parallel work so each scoop's completion does not trigger its own cone turn.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to mute (e.g., ["writer-scoop", "reviewer-scoop"]).`}},required:[`scoop_names`]},execute:t=>h_e(t,e)}}function N_e(e){return{name:`scoop_unmute`,description:`Resume scoop→cone notifications for the given scoops. Any completion that landed while a scoop was muted is returned in this tool result (NOT dispatched as a new cone turn), so you can read all stashed summaries in the current turn. Scoops with no stashed completion are simply unmuted.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to unmute (e.g., ["writer-scoop"]).`}},required:[`scoop_names`]},execute:t=>__e(t,e)}}function P_e(e){return{name:`scoop_wait`,description:"Schedule a non-blocking wait for the given scoops. Returns immediately — the cone keeps its turn — and a `scoop-wait` lick is delivered when every listed scoop completes or the optional timeout fires. Use this to coordinate parallel work without freezing the cone: feed several scoops, call scoop_wait, then continue with other work; you'll be woken by the lick with all per-scoop summaries in one shot. Already-completed scoops (including those whose completion arrived while you were processing your previous turn) are folded into the same lick.",inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops YOU own (e.g., ["writer-scoop", "reviewer-scoop"]). Another cone's scoop is not a valid target.`},timeout_ms:{type:`number`,description:"Optional timeout in milliseconds. If any listed scoop has not completed by the deadline, it is reported as timed-out in the eventual `scoop-wait` lick. Omit for no timeout."}},required:[`scoop_names`]},execute:t=>b_e(t,e)}}function F_e(e){return{name:`lick_confirm`,description:`Confirm (approve) a pending actionable lick by its lick_id — currently a scoop sudo escalation raised via sudo_request. With always=true, the orchestrator additionally appends a NOPASSWD <directive> <pattern> rule to the requesting scoop's /scoops/<folder>/etc/sudoers so the same action won't prompt again. always=false (the default) is allow-once.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in the [sudo-request] notification, e.g. "lick-…"). Use list_sudo_requests to see outstanding ids.`},always:{type:`boolean`,description:`If true, persist a NOPASSWD rule into the requesting scoop's per-scoop sudoers so the action won't prompt again. Defaults to false (allow-once).`},pattern:{type:`string`,description:`Optional glob pattern to persist when always=true (e.g., "git push*" or "/workspace/.git/**"). Defaults to the request's suggestedPattern, then to the exact detail. Ignored when always=false.`}},required:[`lick_id`]},execute:t=>S_e(t,e)}}function I_e(e){return{name:`lick_dismiss`,description:`Dismiss a pending actionable lick by its lick_id. For scoop sudo escalation this denies the sensitive action. For llms.txt discovery this silently appends the advertising host to /etc/llmstxtignore.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in a sudo-request or llms.txt discovery notification).`}},required:[`lick_id`]},execute:t=>C_e(t,e)}}function L_e(e){return{name:`list_sudo_requests`,description:`List all pending cone-mediated sudo requests (lick id, requesting scoop, kind, detail). Use to find a lick_id for lick_confirm / lick_dismiss.`,inputSchema:{type:`object`,properties:{}},execute:()=>w_e(e)}}function R_e(e){return{name:`update_global_memory`,description:`Update the global CLAUDE.md memory file that is shared across all scoops. Use this instead of write_file for /shared/CLAUDE.md.`,inputSchema:{type:`object`,properties:{content:{type:`string`,description:`The new content for the global memory file`}},required:[`content`]},execute:t=>T_e(t,e)}}function z_e(e){let t=[],n=rn(e.scoop);return en(e.scoop)||(t.push(E_e(e)),e.onSudoRequest&&t.push(D_e(e))),n.canManageChildren&&(e.onFeedScoop&&t.push(O_e(e)),t.push(k_e(e)),e.onScoopScoop&&t.push(A_e(e)),e.onDropScoop&&t.push(j_e(e)),e.onMuteScoops&&t.push(M_e(e)),e.onUnmuteScoops&&t.push(N_e(e)),e.onScheduleScoopWait&&t.push(P_e(e)),e.onSudoResolve&&(t.push(F_e(e)),t.push(I_e(e))),e.onListSudoRequests&&t.push(L_e(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(R_e(e))),t}const B_e=r(`scoop-context`);function V_e(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-Odk1glKI.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function H_e(e){let{scoop:t,unit:n,callbacks:r}=e,i=z_e({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:w,onDropScoop:r.onDropScoop,onMuteScoops:r.onMuteScoops,onUnmuteScoops:r.onUnmuteScoops,onScheduleScoopWait:r.onScheduleScoopWait,onSetGlobalMemory:r.setGlobalMemory,getGlobalMemory:r.getGlobalMemory,onSudoRequest:r.onSudoRequest,onSudoResolve:r.onSudoResolve,onListSudoRequests:r.onListSudoRequests}),a=[...Xge(e.gatedFs),Uge(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:kt(),fireLick:e=>{let n=globalThis.__slicc_lick_handler;if(!n){B_e.warn(`No lick handler for background bash completion`,{folder:t.folder});return}n(e)}}),...i];if(t.config?.structuredOutputSchema){let{createStructuredOutputTool:n}=await import(`./structured-output-tool-BDaIhclx.js`);a.push(n(t.config.structuredOutputSchema,e.onStructuredOutput))}let o={scrubToolResult:kt()},s=V_e(e);return e.processManager?Mt(a,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},o,s):Mt(a,void 0,o,s)}const w9=r(`scoop-context`);async function U_e(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();w9.info(`Filesystem ready`,{folder:t.folder}),await Gx(r,t,n,a);let{shell:o,gatedFs:s,skills:c}=await Oge({scoop:t,unit:n,fs:r,tmpDir:a,skillsFs:e.skillsFs,getBrowserAPI:i.getBrowserAPI,sudoManager:e.sudoManager,onSudoRequest:i.onSudoRequest,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget()});e.onShellReady(o);let l=await H_e({getTurnGuestGates:e.getTurnGuestGates,scoop:t,unit:n,callbacks:i,shell:o,fs:r,gatedFs:s,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:u,globalMemory:d}=await Tx(r,n,()=>i.getGlobalMemory());if(!Dx(t))return w9.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let f=kx(t,n),p=Mx(t,n,d,u,c),m=await e.sessions.restore(),{streamWithSessionId:h,compactFn:g,getCompactionApiKey:_}=await Kx(f,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>Dx(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:e=>i.onCompactionStateChange?.(e)});if(e.isDisposed())return{kind:`abandoned`};let v=nn(t);return{kind:`ready`,agent:Ux({model:f,tools:l,systemPrompt:p,messages:m,thinkingLevel:Px(Fx()??v.level,f),getApiKey:()=>Dx(t)??void 0,transformContext:g,streamFn:h,captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:g,getCompactionApiKey:_,effortOverride:v.effortOverride,toolCount:l.length}}const T9=r(`scoop-context`);var W_e=class{deps;timer=null;createdAt=0;constructor(e){this.deps=e}get sessionId(){return this.deps.sessionId}get store(){return this.deps.store}async restore(){let e=await this.restoreCanonical();if(e)return e;let t=this.deps.store;if(!t)return[];try{let e=await t.load(this.deps.sessionId);if(e){let t=St(e.messages);return this.createdAt=e.createdAt,T9.info(`Restored agent session`,{folder:this.deps.folder,messageCount:t.length,droppedOrphans:e.messages.length-t.length}),t}}catch(e){T9.error(`Failed to restore agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.deps.onRestoreError(`Conversation history could not be restored. Starting fresh.`)}return[]}async restoreCanonical(){let e=this.deps.canonical;if(!e)return null;let t=null;try{t=await e.store.load(e.identity.key)}catch(e){return T9.warn(`Canonical conversation read failed; falling back to the legacy session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),null}let n=ii(t);if(n.length===0)return null;let r=St(n);return t&&(this.createdAt=t.createdAt),T9.info(`Restored conversation from the canonical work-unit record`,{folder:this.deps.folder,messageCount:r.length,droppedOrphans:n.length-r.length}),r}persistNow(e){this.timer!==null&&(clearTimeout(this.timer),this.timer=null);let t=this.deps.getMessages()??e??[];if(t.length===0)return;this.persistCanonical(t);let n=this.deps.store;n&&n.save({id:this.deps.sessionId,messages:t,config:{},createdAt:this.createdAt||Date.now(),updatedAt:Date.now()}).catch(e=>{T9.error(`Failed to save agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})}persistCanonical(e){let t=this.deps.canonical;t&&t.store.syncAgentMessages(t.identity,e,{createdAt:this.createdAt||Date.now()}).catch(e=>{T9.error(`Failed to save the canonical conversation record`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})}async clear(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.createdAt=0;let e=this.deps.canonical;e&&await e.store.delete(e.identity.key);try{await this.deps.store?.delete(this.deps.sessionId)}catch(e){T9.warn(`Failed to clear the legacy agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})}}schedule(){this.deps.isDisposed()||!this.deps.store&&!this.deps.canonical||this.timer===null&&(this.timer=setTimeout(()=>{this.timer=null,this.deps.isDisposed()||this.persistNow()},1e3))}};function G_e(e,t){if(!e)return null;let{text:n}=t,r=n.length>200?`${n.slice(0,197)}…`:n;return e.spawn({kind:`scoop-turn`,argv:[`prompt`,r],cwd:t.cwd,owner:t.owner,adoptAbort:t.abortController})}function K_e(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function E9(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const D9=r(`scoop-context`);var q_e=class{deps;constructor(e){this.deps=e}async run(e,t,n,r){let i=null;for(let a=1;a<=3;a++){if(this.deps.isDisposed()||r.aborted)return null;let o=await this.tryAgentPrompt(e,t,n,r);if(!o||this.deps.isDisposed()||r.aborted||(i=o,await this.handleAttemptError(o,a,r)))return null}return i}reportExhausted(e){let t=e.message;D9.error(`Agent error after retries exhausted`,{folder:this.deps.folder,error:t,maxRetries:3}),this.fail(`Scoop "${this.deps.scoopName}" failed after 3 attempts: ${t}`,t)}async tryAgentPrompt(e,t,n,r){this.deps.beginAttempt();try{if(await e.prompt(t,n),this.deps.isDisposed()||r.aborted)return null;let i=this.deps.overflow.pendingRecovery;if(i!==null&&(await i,this.deps.overflow.clearPendingRecovery(i),this.deps.isDisposed()||r.aborted))return null;let a=this.deps.getStreamError();return a?Error(a):null}catch(e){return e instanceof Error?e:Error(String(e))}}async handleAttemptError(e,t,n){let r=e.message;return this.handleStaleAssetError(r)||this.handleNonRetryableError(r)?!0:!await this.handleRetryableError(r,t,n)&&(D9.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:fx(r)}),!!(t<3&&(await px(O9(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return dx(e)?(D9.error(`Non-retryable agent error`,{folder:this.deps.folder,error:e}),this.fail(`Scoop "${this.deps.scoopName}" failed with unrecoverable error: ${e}`,e),!0):!1}handleStaleAssetError(e){return Ho(e)?(D9.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),Go(this.deps.isInteractive),this.fail(`Scoop "${this.deps.scoopName}" hit a stale build after a deploy; reloading to recover.`,e),!0):!1}async handleRetryableError(e,t,n){if(!fx(e)||t>=3)return!1;let r=O9(t);return D9.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await px(r,n)&&!this.deps.isDisposed()}fail(e,t){li(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function O9(e){return 1e3*2**(e-1)}function J_e(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){D9.info(`Queueing prompt via ${r.steer?`steer`:`followUp`} while processing`,{folder:r.folder,isProcessing:r.isProcessing,agentIsStreaming:i});let a={role:`user`,content:[{type:`text`,text:t},...n],timestamp:Date.now()};return r.steer?e.steer(a):e.followUp(a),!0}return!1}const k9=r(`scoop-context`);var Y_e=class{scoop;callbacks;fs=null;shell=null;agent=null;status=`initializing`;isProcessing=!1;disposed=!1;didStreamDeltas=!1;promptStreamErrorMessage=null;unsubscribe=null;promptAbortController=null;processManager=null;currentTurnProcess=null;compactFn=null;getCompactionApiKey=null;coneJid;unit;owner;skillsFs=null;sudoManager=null;structuredOutputValue;activeEffortOverride;structuredOutputCaptured=!1;sessions;runBounds;bashJobs;imageRecovery;overflow;turnRunner;eventSink={textDelta:e=>{this.didStreamDeltas=!0,this.callbacks.onResponse(e,!0)},toolStart:(e,t,n)=>this.callbacks.onToolStart?.(e,t,n),toolUI:(e,t,n)=>this.callbacks.onToolUI?.(e,t,n),toolUIDone:e=>this.callbacks.onToolUIDone?.(e),toolProgress:(e,t,n)=>this.callbacks.onToolProgress?.(e,t,n),toolResult:(e,t,n,r)=>this.callbacks.onToolEnd?.(e,t,n,r),checkpoint:()=>this.sessions.schedule(),assistantMessageEnd:e=>this.handleAssistantMessageEnd(e),turnStart:()=>this.runBounds.enforceOnTurnStart(),turnCompleted:()=>this.runBounds.recordCompletedTurn(),responseDone:()=>this.callbacks.onResponseDone(),agentEnd:(e,t)=>this.handleAgentEndEvent(e,t)};constructor(e,t,n,r,i,a,o,s,c){this.scoop=e,this.unit=vn(e),this.owner={kind:mee(e),scoopJid:e.jid},this.callbacks=t,this.fs=n,this.skillsFs=i??null,this.coneJid=a,this.processManager=o??null,this.sudoManager=s??null,this.sessions=new W_e({store:r??null,canonical:c?{store:c,identity:{key:ri(e),workUnitId:e.jid,workspaceId:ni(e),folder:e.folder,legacyKeys:{agentSessionId:e.jid,chatSessionId:sn(e)}}}:null,sessionId:e.jid,folder:e.folder,getMessages:()=>this.agent?.state?.messages,isDisposed:()=>this.disposed,onRestoreError:e=>this.callbacks.onError(e)}),this.runBounds=new Hx({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new bx({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new Sx({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new Vx({getAgent:()=>this.agent,isDisposed:()=>this.disposed,getTurnSignal:()=>this.promptAbortController?.signal,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),isImageRecoveryActive:()=>this.imageRecovery.isActive,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onExhausted:e=>this.reportExhaustedOverflow(e),setStatus:e=>this.setStatus(e),scoopName:e.name,folder:e.folder}),this.turnRunner=new q_e({isDisposed:()=>this.disposed,overflow:this.overflow,beginAttempt:()=>{this.didStreamDeltas=!1,this.promptStreamErrorMessage=null},getStreamError:()=>this.promptStreamErrorMessage,setStatus:e=>this.setStatus(e),onError:e=>this.callbacks.onError(e),onFatalError:t.onFatalError?e=>this.callbacks.onFatalError?.(e):void 0,isInteractive:this.unit.completion.mode===`interactive`,scoopName:e.name,folder:e.folder})}ownLickTarget(){return Tge(this.unit,this.scoop,tn(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return hn(this.callbacks.getScoops(),this.scoop)}getStructuredOutput(){return{captured:this.structuredOutputCaptured,value:this.structuredOutputValue}}get isBusy(){return this.isProcessing||(this.agent?.state?.isStreaming??!1)}async init(){this.setStatus(`initializing`);try{if(!this.fs)throw Error(`Filesystem not provided`);let e=await U_e({scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,callbacks:this.callbacks,sessions:this.sessions,sudoManager:this.sudoManager,processManager:this.processManager,processOwner:this.owner,coneJid:this.coneJid,getTurnPid:()=>this.currentTurnProcess?.pid,getTurnGuestGates:()=>this.turnGuestGates,getLickTarget:()=>this.ownLickTarget(),getTmpDir:()=>this.ownTmpDir(),getEffortOverride:()=>this.activeEffortOverride,isDisposed:()=>this.disposed,onShellReady:e=>{this.shell=e},onStructuredOutput:e=>{this.structuredOutputValue=e,this.structuredOutputCaptured=!0},spawnBashJob:e=>this.bashJobs.spawn(e)});if(e.kind===`abandoned`)return;if(e.kind===`deferred`){this.setStatus(`ready`);return}this.compactFn=e.compactFn,this.getCompactionApiKey=e.getCompactionApiKey,this.activeEffortOverride=e.effortOverride,this.agent=e.agent,this.unsubscribe=this.agent.subscribe((e,t)=>this.handleAgentEvent(e,t)),this.setStatus(`ready`),k9.info(`ScoopContext initialized`,{folder:this.scoop.folder,toolCount:e.toolCount})}catch(e){if(this.disposed)return;let t=e instanceof Error?e.message:String(e);k9.error(`ScoopContext init failed`,{folder:this.scoop.folder,error:t}),this.setStatus(`error`),this.callbacks.onError(`Failed to initialize: ${t}`)}}async ensureAgentReady(){return this.agent||(await this.init(),this.agent)?!0:(this.callbacks.onError(jx(this.scoop)),!1)}cleanupPromptState(e,t,n,r){this.runBounds.disarm();let i=this.runBounds.takeExceededNote();i!==null&&this.callbacks.onError(`agent run terminated: ${i}`),(n||r.aborted)&&this.sessions.persistNow(),this.isProcessing=!1,!this.disposed&&this.status===`processing`&&this.setStatus(`ready`),this.promptAbortController===e&&(this.promptAbortController=null),K_e(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}turnGuestGates=[];async prompt(e,t=[],n){if(!await this.ensureAgentReady())return;let r=n?.guestGates??[];if(J_e(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder})){for(let e of r)this.addTurnGuestGate(e);return}this.turnGuestGates=[...r];let i=this.agent;this.promptAbortController?.abort();let a=new AbortController;this.promptAbortController=a;let o=a.signal;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let s=G_e(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:a});this.currentTurnProcess=s,this.runBounds.arm();let c=null;try{if(c=await this.turnRunner.run(i,e,t,o),c&&!this.disposed&&!o.aborted){this.turnRunner.reportExhausted(c);return}!this.disposed&&!o.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(a,s,c,o)}}addTurnGuestGate(e){let t=JSON.stringify(e);this.turnGuestGates.some(e=>JSON.stringify(e)===t)||this.turnGuestGates.push(e)}stop(){E9(this.processManager,this.currentTurnProcess,`SIGINT`,this.promptAbortController),this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.isProcessing=!1,this.status!==`error`&&this.setStatus(`ready`)}clearMessages(){this.agent&&(this.agent.state.messages=[])}async clearSession(){this.clearMessages(),await this.sessions.clear()}getAgentMessages(){return this.agent?.state?.messages?structuredClone(this.agent.state.messages):[]}getContextFill(){return Ax(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=Lx(this.agent,this.scoop))}async reloadSkills(){this.agent&&await zx(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){return this.agent?Fx()?this.agent.state.thinkingLevel:(this.activeEffortOverride=t,Rx(this.agent,e)):`off`}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}dispose(){this.sessions.persistNow(),this.disposed=!0,this.runBounds.disarm(),E9(this.processManager,this.currentTurnProcess,`SIGTERM`,this.promptAbortController),this.bashJobs.reapAll(),this.promptAbortController=null,this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.unsubscribe?.(),this.unsubscribe=null,this.shell?.dispose(),this.compactFn=null,this.getCompactionApiKey=null,this.agent=null,this.shell=null,this.fs=null}handleAgentEvent(e,t){this.disposed||gx(e,this.eventSink,t)}setStatus(e){this.disposed||(this.status=e,this.callbacks.onStatusChange(e))}handleAssistantMessageEnd(e){e.errorMessage||this.overflow.markAssistantSucceeded();let t=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);t&&!this.didStreamDeltas&&this.callbacks.onResponse(t,!1)}handleAgentEndEvent(e,t){this.disposed||t?.aborted||mx(e,{imageRecovery:this.imageRecovery,overflow:this.overflow,isProcessing:()=>this.isProcessing,didStreamDeltas:()=>this.didStreamDeltas,latchStreamError:e=>{this.promptStreamErrorMessage=e},onError:e=>this.callbacks.onError(e),persist:e=>this.sessions.persistNow(e)},t)}reportExhaustedOverflow(e){this.unit.completion.mode===`interactive`?this.callbacks.onError(e):this.callbacks.onFatalError?this.callbacks.onFatalError(e):this.callbacks.onError(e)}};const A9=r(`scoop-lifecycle-manager`);var X_e=class{deps;units=new Map;constructor(e){this.deps=e}getUnit(e){return this.units.get(e)}ensureUnit(e){let t=this.units.get(e);return(!t||t.isClosed)&&(t=new lx(e,{getScoop:e=>this.deps.getScoops().get(e),sendPrompt:(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,[],i),clearIdleTimer:e=>this.deps.idleTimers.clear(e),forgetCompletion:(e,t)=>this.deps.completionService.forgetScoop(e,t),unregister:e=>this.unregister(e)}),this.units.set(e,t)),t}getContexts(){let e=new Map;for(let[t,n]of this.units)n.context&&e.set(t,n.context);return e}getContext(e){return this.units.get(e)?.context??void 0}syncReadGrants(e){for(let t of this.deps.getScoops().values()){if(e!==void 0&&t.folder!==e)continue;let n=this.getContext(t.jid)?.getFS();this.applyPolicyReadGrants(t,n)}}getTab(e){return this.units.get(e)?.tab??void 0}observe(e,t){return this.ensureUnit(e).observe(t)}displayJidFor(e){let t=this.deps.approverFor(e)?.jid;return t&&t!==e?t:void 0}dispatch(e,t,...n){this.units.get(e)?.dispatch(t,...n)}parentOf(e){let t=this.deps.getScoops();return(e.parentJid===null?void 0:t.get(e.parentJid))??tn(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return $t(t.values(),e)??tn(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){A9.warn(`Failed to initialize per-scoop sudo policy; continuing with existing policy`,{folder:e.folder,error:t instanceof Error?t.message:String(t)})}}applyPolicyReadGrants(e,t){if(!(t instanceof xr))return;let n=this.deps.getSudoManager()?.getPolicyForScoop(e.folder);n&&t.setReadGrants(n.read.filter(e=>e.nopasswd).map(e=>e.pattern))}async createTab(e){let t=this.deps.getScoops().get(e);if(!t)throw Error(`Scoop not found: ${e}`);let n=this.ensureUnit(e);if(n.context){if(n.tab?.status===`error`)A9.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{A9.debug(`Context already exists`,{jid:e});return}}let r=this.deps.getSharedFs();if(!r)throw Error(`Shared filesystem not initialized`);let i=`scoop-${t.folder}-${Date.now()}`,a=vn(t).policy.filesystem,o=a.kind===`full-workspace`?r:new xr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`);a.kind===`restricted`&&(await this.ensureSudoersLoaded(t),this.applyPolicyReadGrants(t,o));let s=this.buildContextCallbacks(e,t),c=this.rootOf(t)?.jid,l=new Y_e(t,s,o,this.deps.getSessionStore()??void 0,r??void 0,c,this.deps.getProcessManager()??void 0,this.deps.getSudoManager(),this.deps.getConversationStore());n.attachContext(l,i),await l.init(),n.tab?.status===`initializing`&&n.transition(`ready`)&&(this.deps.callbacks.onStatusChange(e,`ready`),this.dispatch(e,`onStatusChange`,`ready`),Promise.resolve().then(()=>this.deps.messageRouter.flushOnIdle(e)).catch(t=>{A9.warn(`Initial idle queue probe failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}));let u=this.deps.getScoops().get(e);u&&u.parentJid!==null&&this.deps.idleTimers.start(e),A9.info(`Scoop context created`,{jid:e,contextId:i})}destroyTab(e){this.deps.idleTimers.clear(e);let t=this.units.get(e);t&&(t.teardown(),this.units.delete(e),A9.info(`Scoop context destroyed`,{jid:e}))}getTabsMap(){let e=new Map;for(let[t,n]of this.units)n.tab&&e.set(t,n.tab);return e}markTabError(e,t){let n=this.ensureUnit(e);n.transition(`error`,{contextId:n.tab?.contextId??`scoop-error-${e}`,error:t})}dispatchEvent(e,t,...n){this.dispatch(e,t,...n)}stopAndClearAllContexts(){for(let e of this.units.values())e.detachContext()}async destroyAllTabs(){for(let e of Array.from(this.units.keys()))this.destroyTab(e)}async waitForTabReady(e,t=1e4){let n=Date.now();for(;Date.now()-n<t;){let t=this.getTab(e);if(!t)return!1;if(t.status===`ready`||t.status===`processing`)return!0;if(t.status===`error`)return!1;await new Promise(e=>setTimeout(e,100))}return A9.warn(`Timed out waiting for tab to become ready`,{jid:e}),!1}async sendPrompt(e,t,n,r,i=[],a){let o=this.getContext(e);o||=(await this.createTab(e),this.getContext(e));let s=this.units.get(e);if(s?.tab?.status===`initializing`){if(A9.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){A9.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}o=this.getContext(e)}if(!o||!s){A9.error(`Context not found after creation`,{jid:e});return}this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),s.tab&&s.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),A9.debug(`Prompt sent to scoop`,{jid:e,textLength:t.length,imageCount:i.length}),await o.prompt(t,i,a)}async register(e){let t=this.deps.getScoops();if(an(e),this.inheritModel(e),e.parentJid!==null){let n=[];for(let r of t.values())r.jid!==e.jid&&n.push(r.folder);let r=Qt(e.folder,n);r!==e.folder&&(A9.warn(`Scoop folder already taken — registering under a free variant`,{jid:e.jid,requested:e.folder,folder:r}),e.folder=r,e.trigger=`@${r}`,e.assistantLabel=r)}t.set(e.jid,e);try{await this.deps.db.saveScoop(e)}catch(n){throw t.delete(e.jid),n}this.deps.messageRouter.ensureQueue(e.jid),A9.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&ci(`spawn`,e.folder)}catch(n){A9.error(`Scoop init failed`,{jid:e.jid,name:e.name,error:n instanceof Error?n.message:String(n)});try{this.destroyTab(e.jid)}catch(t){A9.warn(`Failed to destroy scoop runtime during init rollback`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}throw t.delete(e.jid),this.deps.messageRouter.forgetScoop(e.jid),await this.deps.db.deleteScoop(e.jid).catch(t=>{A9.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}}inheritModel(e){if(ln(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?pn(t):void 0)??zb();n&&xn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=t.get(e);if(n&&n.parentJid===null&&tn(t.values()).length<=1)throw Error(`Cannot drop the last cone`);let r=this.deps.getLickManager();if(n&&r){let{webhooks:e,cronTasks:t}=await r.getLicksForScoopFromDb(n.name,n.folder),i=this.deps.buildActiveLicksError(n.folder,e,t);if(i)throw i}this.deps.costTracker.snapshot(e);let i=globalThis.__slicc_wsSubscribers;i&&i.dropForScoop(e).catch(t=>{A9.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),n&&this.deps.getConversationStore()?.delete(ri(n)),this.deps.getSessionStore()?.delete(e).catch(t=>{A9.warn(`Failed to delete agent session`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.deleteScoop(e),t.delete(e),this.deps.messageRouter.forgetScoop(e),this.deps.completionService.forgetScoop(e,`unregister`);let a=this.deps.approvalRouter.failScoop(e);if(a>0&&A9.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:a}),n&&this.deps.getSudoManager()?.forgetScoopPolicies(n.folder),A9.info(`Scoop unregistered`,{jid:e}),n)try{this.deps.callbacks.onScoopUnregistered?.(n)}catch(t){A9.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}async setModel(e,t){let n=this.deps.getScoops().get(e);if(!n)return!1;let r=n.model;xn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return xn(n,r),this.getContext(e)?.updateModel(),A9.warn(`Failed to persist unit model; rolled back`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}return!0}refreshModels(){let e=this.getContexts();for(let t of e.values())t.updateModel();A9.info(`Models re-resolved on all active contexts`,{contextCount:e.size})}async reloadAllSkills(){let e=[];for(let[t,n]of this.getContexts()){let r=this.getTab(t);(r?.status===`ready`||r?.status===`processing`)&&e.push(n.reloadSkills().catch(e=>{A9.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),A9.info(`Skills reloaded across all contexts`,{count:e.length})}async setThinkingLevel(e,t,n){let r=this.deps.getScoops().get(e);if(!r)return null;let i=this.getContext(e),a=i?i.setThinkingLevel(t,n):null;dee(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){A9.warn(`Failed to persist thinkingLevel`,{jid:e,error:t instanceof Error?t.message:String(t)})}return a}buildContextCallbacks(e,t){let{callbacks:n,completionService:r,cone:i}=this.deps,a=()=>this.deps.getScoops(),{policy:o,completion:s}=vn(t),c=s.mode!==`interactive`;return{onResponse:(t,i)=>{a().has(e)&&(n.onResponse(e,t,i),this.dispatch(e,`onResponse`,t,i),c&&(i?r.appendResponseChunk(e,t):r.setResponseFull(e,t)))},onResponseDone:()=>{a().has(e)&&(this.units.get(e)?.touch(),n.onResponseDone(e))},onError:r=>{a().has(e)&&(this.units.get(e)?.transition(`error`,{error:r}),ci(`error`,t.folder,r),n.onError(e,r),n.onStatusChange(e,`error`),this.dispatch(e,`onError`,r),this.dispatch(e,`onStatusChange`,`error`))},onFatalError:t=>this.handleFatalError(e,t),onStatusChange:t=>{a().has(e)&&(this.units.get(e)?.transition(t),n.onStatusChange(e,t),this.dispatch(e,`onStatusChange`,t),t===`ready`&&this.deps.messageRouter.flushOnIdle(e),t===`ready`&&c&&r.notifyCompletion(e))},onCompactionStateChange:t=>{n.onCompactionStateChange?.(e,t)},onToolStart:(t,r,i)=>{n.onToolStart?.(e,t,r,i)},onToolEnd:(t,r,i,a)=>{n.onToolEnd?.(e,t,r,i,a)},onToolUI:(t,r,i)=>{n.onToolUI?.(e,t,r,i,this.displayJidFor(e))},onToolUIDone:t=>{n.onToolUIDone?.(e,t,this.displayJidFor(e))},onToolProgress:(t,r,i)=>{n.onToolProgress?.(e,t,r,i)},onSendMessage:(t,r)=>{let i=`${r?`[${r}] `:``}${t}`;n.onSendMessage(e,i),this.dispatch(e,`onSendMessage`,t)},getScoops:()=>i.getScoops(),getScoopTabState:o.canManageChildren?e=>this.getTab(e):void 0,onFeedScoop:o.canManageChildren?(e,n)=>i.delegateToScoop(e,n,t.assistantLabel):void 0,onScoopScoop:o.canCreateChildren?async e=>{let n={...e,jid:`scoop_${e.folder}_${Date.now()}`,parentJid:t.jid};return await i.registerScoop(n),n}:void 0,onDropScoop:o.canManageChildren?async e=>{await i.unregisterScoop(e)}:void 0,onMuteScoops:o.canManageChildren?e=>i.muteScoops(e):void 0,onUnmuteScoops:o.canManageChildren?e=>i.unmuteScoops(e):void 0,onScheduleScoopWait:o.canManageChildren?(e,t)=>i.scheduleScoopWait(e,t):void 0,getGlobalMemory:()=>i.getGlobalMemory(),setGlobalMemory:o.canWriteSharedMemory?e=>i.setGlobalMemory(e):void 0,appendConeMemory:o.canWriteSharedMemory?(e,n)=>i.appendConeMemory(e,{...n,memoryPath:on(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),approveGuestToolCall:e=>i.approveDirectedOrUser(e),onSudoResolve:o.canResolveApprovals?(n,r)=>i.resolveActionableLick(n,r,en(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(en(t)?void 0:e):void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(A9.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),ci(`error`,r.folder,t),this.units.get(e)?.transition(`error`,{error:t}),this.deps.callbacks.onError(e,t),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,t),this.dispatch(e,`onStatusChange`,`error`),vn(r).completion.mode===`interactive`)return;this.deps.completionService.forgetScoop(e,`fatal-error`);let i=this.parentOf(r);if(!i)return;let a={id:`scoop-error-${e}-${Date.now()}`,chatJid:i.jid,senderId:r.folder,senderName:r.assistantLabel,content:`[@${r.assistantLabel} FAILED]: ${t}`,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-error`};try{this.deps.callbacks.onIncomingMessage?.(i.jid,a)}catch(e){A9.warn(`onIncomingMessage for scoop-error threw`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}this.deps.handleMessage(a).catch(e=>{A9.error(`Failed to route fatal error to cone`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})})}};const j9=r(`scoop-message-router`);var Z_e=class{deps;messageQueues=new Map;lastAgentTimestamp=new Map;pollInterval=null;debounceStates=new Map;processing=new Map;busyDeferrals=new Map;constructor(e){this.deps=e}ensureQueue(e){this.messageQueues.has(e)||this.messageQueues.set(e,[])}setLastAgentTimestamp(e,t){this.lastAgentTimestamp.set(e,t)}forgetScoop(e){this.cancelDebounce(e),this.messageQueues.delete(e),this.lastAgentTimestamp.delete(e),this.clearBusyDeferral(e)}async handleMessage(e){if(j9.info(`handleMessage`,{id:e.id,chatJid:e.chatJid,sender:e.senderName,channel:e.channel,contentPreview:e.content.slice(0,80)}),this.deps.isExternalLickChannel(e.channel))try{this.deps.notifyIncomingMessage(e.chatJid,e)}catch(t){j9.warn(`onIncomingMessage for external lick channel threw`,{channel:e.channel,error:t instanceof Error?t.message:String(t)})}await this.deps.db.saveMessage(e),await this.routeToScoop(e)}async delegateToScoop(e,t,n){let r=this.deps.getScoops().get(e);if(!r)throw Error(`Scoop not found: ${e}`);ci(`feed`,r.folder);let i={id:`delegate-${Date.now()}-${Math.random().toString(36).slice(2)}`,chatJid:e,senderId:`cone`,senderName:n,content:t,timestamp:new Date().toISOString(),fromAssistant:!0,channel:`delegation`};await this.deps.db.saveMessage(i),this.deps.notifyIncomingMessage(e,i),j9.info(`Delegating to scoop`,{scoopJid:e,scoopName:r.name,promptLength:t.length}),this.deps.sendPrompt(e,t,`cone`,n).catch(t=>{let n=t instanceof Error?t.message:String(t);j9.error(`Delegation failed`,{scoopJid:e,error:n}),this.deps.onError(e,`Delegation failed: ${n}`)})}async routeToScoop(e){let t=this.deps.getScoops().get(e.chatJid);if(!t){j9.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){j9.info(`routeToScoop: trigger not found in content`,{chatJid:e.chatJid,trigger:t.trigger,contentPreview:e.content.slice(0,80)});return}let n=this.messageQueues.get(e.chatJid)??[];n.push(e),this.messageQueues.set(e.chatJid,n);let r=this.deps.getTabs().get(e.chatJid);if(j9.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){j9.info(`routeToScoop: tab in error state, retrying init`,{chatJid:e.chatJid});try{await this.deps.createScoopTab(e.chatJid),r=this.deps.getTabs().get(e.chatJid)}catch{j9.warn(`routeToScoop: retry init failed`,{chatJid:e.chatJid})}}if(r?.status===`ready`||r?.status===`processing`){if(this.deps.isExternalLickChannel(e.channel)){await this.scheduleScoopQueue(e.chatJid,e.id);return}await this.flushScoopQueue(e.chatJid)}}passesTriggerGate(e,t){let n=t.channel===`webhook`||t.channel===`cron`||t.channel===`fswatch`||t.channel===`sprinkle`||t.channel===`bash`;return!e||e.parentJid===null||!e.requiresTrigger||!e.trigger||n||t.content.includes(e.trigger)}scheduleScoopQueue(e,t){let n=this.debounceStates.get(e)??{startedAt:Date.now(),waiters:[]};n.timer!==void 0&&clearTimeout(n.timer);let r=new Promise((e,r)=>{n.waiters.push({messageId:t,resolve:e,reject:r})}),i=Math.max(0,3e3-(Date.now()-n.startedAt));return n.timer=setTimeout(()=>{n.timer=void 0,this.flushScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);j9.error(`Debounced message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)})},Math.min(1e3,i)),this.debounceStates.set(e,n),r}async flushScoopQueue(e){let t=this.takeDebounce(e);if(t&&this.processing.has(e)&&this.shouldDeferQueuedLicks(e)){for(let e of t.waiters)e.resolve();this.recordBusyDeferral(e,this.messageQueues.get(e)?.length??0);return}try{await this.processScoopQueue(e);for(let e of t?.waiters??[])e.resolve()}catch(e){for(let n of t?.waiters??[])n.reject(e);throw e}}async flushOnIdle(e){if(this.messageQueues.has(e))try{await this.flushScoopQueue(e)}catch(t){let n=t instanceof Error?t.message:String(t);j9.error(`Idle message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)}}shouldDeferQueuedLicks(e){let t=this.messageQueues.get(e);return t!==void 0&&t.length>0&&t.every(e=>this.deps.isExternalLickChannel(e.channel))}recordBusyDeferral(e,t){let n=this.busyDeferrals.get(e)??{startedAt:Date.now(),reported:!1,count:t??0};t!==void 0&&(n.count=t),this.busyDeferrals.set(e,n);let r=Date.now()-n.startedAt;n.reported||r<3e5||(n.reported=!0,j9.warn(`Busy lick queue may be starved`,{jid:e,error:`Lick queue remained deferred while scoop was busy for 300s`}),this.emitLickBackpressure(e,{count:n.count,waitingMs:r}))}clearBusyDeferral(e){let t=this.busyDeferrals.get(e);this.busyDeferrals.delete(e),t?.reported&&this.emitLickBackpressure(e,{count:0,waitingMs:Date.now()-t.startedAt})}emitLickBackpressure(e,t){try{this.deps.onLickBackpressure?.(e,t)}catch(t){j9.warn(`Lick backpressure callback failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}}takeDebounce(e){let t=this.debounceStates.get(e);return t?.timer!==void 0&&clearTimeout(t.timer),this.debounceStates.delete(e),t}cancelDebounce(e){let t=this.takeDebounce(e);for(let e of t?.waiters??[])e.resolve()}cancelDebounces(){for(let e of this.debounceStates.keys())this.cancelDebounce(e)}cancelDebounceWaiter(e,t){let n=this.debounceStates.get(e);if(!n)return;let r=[];for(let e of n.waiters)e.messageId===t?e.resolve():r.push(e);n.waiters=r,r.length===0&&this.cancelDebounce(e)}async processScoopQueue(e){let t=this.processing.get(e);if(t){t.rerun=!0,await t.done.catch(()=>{});return}let n={rerun:!1,done:Promise.resolve()};return this.processing.set(e,n),n.done=this.drainScoopQueue(e,n),n.done}async drainScoopQueue(e,t){let n=!1,r;try{do{t.rerun=!1;try{await this.runScoopQueue(e)}catch(e){n||(n=!0,r=e)}}while(t.rerun)}finally{this.processing.delete(e)}if(n)throw r}async runScoopQueue(e){let t=this.messageQueues.get(e);if(!t){j9.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){j9.debug(`processScoopQueue: tab not ready`,{jid:e,status:n?.status??`no-tab`});return}let r=this.deps.getScoops().get(e),i=r?.assistantLabel??e,a=this.lastAgentTimestamp.get(e)??``,o=await this.deps.db.getMessagesSince(e,a,i),s=o.filter(e=>this.passesTriggerGate(r,e));if(j9.debug(`processScoopQueue: DB query`,{jid:e,scoopName:r?.name,excludeName:i,since:a,dbMessageCount:o.length,eligibleMessageCount:s.length,queueLength:t.length}),o.length===0){j9.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){j9.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=Jn(er(Zn(a),o));this.lastAgentTimestamp.set(e,t),await this.deps.db.setState(`lastAgentTs_${e}`,t);return}if(s.every(e=>this.deps.isExternalLickChannel(e.channel))&&this.deps.getContexts().get(e)?.isBusy){j9.debug(`processScoopQueue: deferring lick batch while scoop is busy`,{jid:e,messageCount:s.length}),this.recordBusyDeferral(e,s.length);return}this.clearBusyDeferral(e);let c=s.map(e=>`[${new Date(e.timestamp).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0})}] ${e.senderName}: ${mg(e.content,e.attachments)}`).join(`
|
|
5149
|
+
`),l=s.flatMap(e=>hg(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=Jn(er(Zn(a),o));this.lastAgentTimestamp.set(e,d),await this.deps.db.setState(`lastAgentTs_${e}`,d);let f=s.some(e=>e.steer),p=new Set,m=[];for(let e of s){if(!e.guestGate)continue;let t=JSON.stringify(e.guestGate);p.has(t)||(p.add(t),m.push(e.guestGate))}await this.deps.sendPrompt(e,c,u.senderId,u.senderName,l,{steer:f,...m.length>0?{guestGates:m}:{}})}startMessageLoop(){this.pollInterval||=setInterval(()=>{let e=this.deps.getTabs();for(let t of this.deps.getScoops().keys()){let n=e.get(t);this.recordBusyDeferralIfPresent(t);let r=(this.messageQueues.get(t)?.length??0)>0;n?.status===`ready`&&r&&!this.debounceStates.has(t)&&this.processScoopQueue(t).catch(e=>{let n=e instanceof Error?e.message:String(e);j9.error(`Message queue processing failed`,{jid:t,error:n}),this.deps.onError(t,`Queue processing failed: ${n}`)})}},2e3)}recordBusyDeferralIfPresent(e){this.busyDeferrals.has(e)&&this.recordBusyDeferral(e)}stopMessageLoop(){this.cancelDebounces(),this.pollInterval&&=(clearInterval(this.pollInterval),null)}async clearScoopMessages(e,t){this.cancelDebounce(e),t&&await t.clearSession().catch(t=>{j9.warn(`Failed to clear the durable conversation for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.clearMessagesForScoop(e).catch(t=>{j9.warn(`Failed to clear persisted channel history for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.lastAgentTimestamp.delete(e),this.messageQueues.set(e,[]),this.clearBusyDeferral(e),j9.info(`Scoop messages cleared`,{jid:e})}async clearAllMessages(){this.cancelDebounces(),await this.deps.db.clearAllMessages();let e=this.deps.getSessionStore();e&&await e.clearAll().catch(e=>{j9.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})}),await Promise.all([...this.deps.getContexts().values()].map(e=>e.clearSession().catch(e=>{j9.warn(`Failed to clear a durable conversation`,{error:e instanceof Error?e.message:String(e)})}))),this.lastAgentTimestamp.clear();for(let e of this.busyDeferrals.keys())this.clearBusyDeferral(e);for(let e of this.deps.getScoops().keys())this.messageQueues.set(e,[]);this.deps.resetCostTracker(),j9.info(`All messages cleared`)}getQueuedMessageIds(e){return(this.messageQueues.get(e)??[]).map(e=>e.id)}async clearQueuedMessages(e){this.cancelDebounce(e);let t=this.messageQueues.get(e)??[],n=this.deps.getScoops().get(e)?.assistantLabel??e,r=this.lastAgentTimestamp.get(e)??``,i=await this.deps.db.getMessagesSince(e,r,n),a=new Set([...t,...i].map(e=>e.id));for(let e of a)await this.deps.db.deleteMessage(e);this.messageQueues.set(e,[]),this.clearBusyDeferral(e)}async deleteQueuedMessage(e,t){let n=this.messageQueues.get(e);if(n){let r=n.findIndex(e=>e.id===t);r!==-1&&n.splice(r,1),n.length===0&&this.clearBusyDeferral(e)}this.cancelDebounceWaiter(e,t),await this.deps.db.deleteMessage(t)}};const M9=r(`orchestrator`),Q_e={decision:`deny`};var $_e=class{scoops=new Map;workUnits=new Xg(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new Mb({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;fsWatcher=null;sudoManager=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new ox({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),findParent:e=>this.parentOrDefaultRoot(e),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new ix({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new Qb({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findParent:e=>this.parentOrDefaultRoot(e),hasScoop:e=>this.scoops.has(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),handleMessage:e=>this.handleMessage(e),reportError:(e,t)=>this.callbacks.onError(e,t)});processManager=null;unregisterExportService=null;approvalRouter=new Wb({getScoops:()=>this.scoops,findApprover:e=>this.parentOrDefaultRoot(e),getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>$n(e),saveMessage:e=>Yn(e)});lickRegistry=new Fb({getConeShell:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},getConeFs:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new Z_e({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),getContexts:()=>this.lifecycle.getContexts(),createScoopTab:e=>this.createScoopTab(e),sendPrompt:(e,t,n,r,i,a)=>this.sendPrompt(e,t,n,r,i??[],a),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),onError:(e,t)=>this.callbacks.onError(e,t),onLickBackpressure:(e,t)=>this.callbacks.onLickBackpressure?.(e,t),getSessionStore:()=>this.sessionStore,resetCostTracker:()=>this.costTracker.reset(),db:{saveMessage:e=>Yn(e),deleteMessage:e=>Eee(e),clearMessagesForScoop:e=>jee(e),clearAllMessages:()=>kee(),getMessagesSince:(e,t,n)=>Oee(e,t,n),setState:(e,t)=>Tee(e,t)},isExternalLickChannel:Tg});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new X_e({getScoops:()=>this.scoops,approverFor:e=>this.ownerRootOrDefault(e),getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getConversationStore:()=>this.conversationStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>qn(e),deleteScoop:e=>Aee(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>_r(e,t,n),messageRouter:{ensureQueue:e=>this.messageRouter.ensureQueue(e),forgetScoop:e=>this.messageRouter.forgetScoop(e),flushOnIdle:e=>this.messageRouter.flushOnIdle(e)},costTracker:{snapshot:e=>this.costTracker.snapshot(e)},approvalRouter:{failScoop:e=>this.approvalRouter.failScoop(e)},cone:{delegateToScoop:(e,t,n)=>this.delegateToScoop(e,t,n),registerScoop:e=>this.registerScoop(e),unregisterScoop:e=>this.unregisterScoop(e),muteScoops:e=>this.muteScoops(e),unmuteScoops:e=>this.unmuteScoops(e),scheduleScoopWait:(e,t)=>this.scheduleScoopWait(e,t),getScoops:()=>this.getScoops(),getGlobalMemory:()=>this.getGlobalMemory(),setGlobalMemory:e=>this.setGlobalMemory(e),appendConeMemory:(e,t)=>this.appendConeMemory(e,t),enqueueSudoRequest:(e,t)=>this.enqueueSudoRequest(e,t),resolveActionableLick:(e,t,n)=>this.resolveActionableLick(e,t,n),approveDirectedOrUser:e=>this.approveDirectedOrUser(e),listPendingSudoRequests:e=>this.listPendingSudoRequests(e)},handleMessage:e=>this.handleMessage(e)})}setProcessManager(e){this.processManager=e}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return Bb(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new L_({fs:e,watcher:t,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new x_(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new Rb(e,t),await this.modelPolicyFile.init(),n(),Nee()),n,{stagePrefix:`orchestrator-init`})}async init(e){await nr(),this.sharedFs=await Bb(e=>br.create({dbName:`slicc-fs`,onRepairProgress:e}),e),this.sessionStore=new vg,this.conversationStore=new Jy,this.fsWatcher=new yr,this.sharedFs.setWatcher(this.fsWatcher),globalThis.__slicc_fs_watcher=this.fsWatcher;let t=await this.initPolicyLayerAndLoadRecords(this.sharedFs,this.fsWatcher,e),n=Object.values(t).find(e=>gn(e))?.jid;for(let e of Object.values(t)){await this.backfillParent(e,n),an(e),this.migrateScoopConfig(e,Object.values(t)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let r=await Dee(`lastAgentTs_${e.jid}`);r&&this.messageRouter.setLastAgentTimestamp(e.jid,r)}await this.backfillModels(),await this.migrateConversations(e),await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new Hb({onTaskRun:async(e,t)=>{M9.info(`Running scheduled task`,{taskId:e.id,scoop:t.name}),await this.sendPrompt(t.jid,`[SCHEDULED TASK]\n\n${e.prompt}`,`scheduler`,`Scheduled Task`)},getScoop:e=>{for(let t of this.scoops.values())if(t.folder===e)return t}}),this.scheduler.start(),M9.info(`Orchestrator initialized`,{scoopCount:this.scoops.size});for(let t of this.scoops.values())try{await this.createScoopTab(t.jid)}catch(e){let n=e instanceof Error?e.message:String(e);M9.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:t.jid,folder:t.folder,root:t.parentJid===null,error:n}),t.parentJid!==null&&this.lifecycle.markTabError(t.jid,n)}finally{e?.(`scoop-restored:${t.jid}`)}Cr(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=z_(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new xg;try{await Hy({store:t,units:[...this.scoops.values()],loadAgentSession:async e=>{let t=await this.sessionStore?.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},loadChatSession:async e=>{let t=await n.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},onProgress:e})}catch(e){M9.warn(`Canonical conversation migration failed; staying on the legacy stores`,{error:e instanceof Error?e.message:String(e)})}}async backfillParent(e,t){if(e.parentJid===void 0){e.parentJid=gn(e)?null:t??null;try{await qn(e)}catch(t){M9.warn(`Failed to persist backfilled parentJid; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}async backfillModels(){let e=[...this.scoops.values()].filter(e=>!ln(e));if(e.length===0)return;let t=zb(),n=[...e].sort((e,t)=>Number(e.parentJid!==null)-Number(t.parentJid!==null));for(let e of n){let n=e.parentJid?this.scoops.get(e.parentJid):void 0,r=(n?pn(n):void 0)??t;if(r){xn(e,r);try{await qn(e)}catch(t){M9.warn(`Failed to persist backfilled model; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}}migrateScoopConfig(e,t){if(e.parentJid===null)return;let n=e.configSchemaVersion??0;if(!(n>=3)){if(n<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),n<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),n<3){let n=`${yn.root}/`,r=un(uee(t,e)),i=e.config?.visiblePaths,a=i?.length===1&&i[0]===n;r[0]!==n&&a&&(e.config={...e.config,visiblePaths:r})}e.configSchemaVersion=3}}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/home/user`,`/tmp`,`/mnt`])try{await this.sharedFs.mkdir(e,{recursive:!0})}catch{}}getGlobalMemory(){return this.memoryStore.getGlobalMemory()}setGlobalMemory(e){return this.memoryStore.setGlobalMemory(e)}appendConeMemory(e,t){return this.memoryStore.appendConeMemory(e,t)}getSharedFS(){return this.sharedFs}getSessionStore(){return this.sessionStore}getConversationStore(){return this.conversationStore}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),e.setUnitRosterProvider?.(()=>this.getScoops().map(e=>({name:e.name,folder:e.folder}))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){return this.lickManager?.handleWebhookEvent(e,t,n)}handleCherryHostEvent(e,t,n){this.lickManager?.emitEvent({type:`cherry`,cherryRuntimeId:e,cherryName:t,cherryOrigin:void 0,body:n,timestamp:new Date().toISOString()})}handlePreviewLick(e){this.lickManager?.emitEvent(e)}observeScoop(e,t){return this.lifecycle.observe(e,t)}muteScoops(e){this.completionService.muteScoops(e)}unmuteScoops(e){return this.completionService.unmuteScoops(e)}isScoopMuted(e){return this.completionService.isScoopMuted(e)}waitForScoops(e,t){return this.completionService.waitForScoops(e,t)}scheduleScoopWait(e,t){return this.completionService.scheduleScoopWait(e,t)}async enqueueSudoRequest(e,t){return this.approvalRouter.enqueueSudoRequest(e,t)}async approveDirectedOrUser(e){let{runDirectedApproval:t}=await import(`./directed-approval-BAqNNODV.js`);return t(e,{scoops:this.scoops,ownerRootOf:e=>this.ownerRootOrDefault(e),enqueue:(e,t,n)=>this.approvalRouter.enqueueSudoRequest(e,t,n),getSharedFs:()=>this.sharedFs,workspaceFor:on,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):(M9.warn(`Guest approval before SudoManager init — failing closed`),Q_e)}})}async enqueueDirectedApproval(e,t){return this.approveDirectedOrUser({...t,approver:e})}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t,n){return this.approvalRouter.resolveSudoRequestAndPersist(e,t,n)}registerNavigateLick(e){return this.lickRegistry.registerNavigate(e)}registerSessionReloadLick(e){return this.lickRegistry.registerSessionReload(e)}registerUpgradeLick(e){return this.lickRegistry.registerUpgrade(e)}registerDiscoveryLick(e){return this.lickRegistry.registerDiscovery(e)}async resolveActionableLick(e,t,n){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t,n)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(e){return this.approvalRouter.listPendingSudoRequests(e)}registerScoop(e){return this.lifecycle.register(e)}unregisterScoop(e){return this.lifecycle.unregister(e)}getScoops(){return Array.from(this.scoops.values())}getScoop(e){return this.scoops.get(e)}getScoopTabState(e){return this.lifecycle.getTab(e)}defaultRoot(){return tn(this.scoops.values())[0]}parentOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return(t?.parentJid?this.scoops.get(t.parentJid):void 0)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return $t(this.scoops.values(),t)??this.defaultRoot()}getWorkUnits(){return this.workUnits}getLiveUnit(e){return this.lifecycle.getUnit(e)}ensureLiveUnit(e){return this.lifecycle.ensureUnit(e)}async resetFilesystem(){this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await br.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await Db(this.sharedFs).catch(e=>{M9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new L_({fs:this.sharedFs,watcher:this.fsWatcher,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=new x_(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new Rb(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),M9.info(`Filesystem reset and defaults re-seeded`)}clearScoopMessages(e){return this.messageRouter.clearScoopMessages(e,this.lifecycle.getContext(e))}clearAllMessages(){return this.messageRouter.clearAllMessages()}handleMessage(e){return this.messageRouter.handleMessage(e)}delegateToScoop(e,t,n){return this.messageRouter.delegateToScoop(e,t,n)}createScoopTab(e){return this.lifecycle.createTab(e)}async destroyScoopTab(e){this.lifecycle.destroyTab(e)}isProcessing(e){return this.lifecycle.getTab(e)?.status===`processing`}getScoopContext(e){return this.lifecycle.getContext(e)}getQueuedMessageIds(e){return this.messageRouter.getQueuedMessageIds(e)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return $n(e)}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}setScoopModel(e,t){return this.lifecycle.setModel(e,t)}refreshModels(){this.lifecycle.refreshModels()}setScoopThinkingLevel(e,t,n){return this.lifecycle.setThinkingLevel(e,t,n)}reloadAllSkills(){return this.lifecycle.reloadAllSkills()}stopScoop(e){this.lifecycle.getContext(e)?.stop()}getSessionCosts(e){return this.costTracker.getSessionCosts(e)}async getSessionCostsForCommand(e){let t=this.getSessionCosts({includeDropped:e===`all`});if(e===`live`||!this.sharedFs)return t;let{readSessionsIndex:n}=await import(`./frozen-archive-format-CLzdz05B.js`).then(e=>e.t),r=await n(this.sharedFs);return[...t,...r.map(Dr)]}getModelCosts(e){return this.costTracker.getModelCosts(e)}getBurnRate(e){return this.costTracker.getBurnRate(e)}getContextFills(){return this.costTracker.getContextFills()}async shutdown(){this.stopMessageLoop(),this.idleTimers.clearAll(),this.scheduler?.stop(),this.scheduler=null,this.completionService.shutdown();let e=this.approvalRouter.failAll();e>0&&M9.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.lifecycle.destroyAllTabs(),this.lickManager?.setDiscoveryIgnore?.(null),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=null,this.modelPolicyFile?.dispose(),this.modelPolicyFile=null,this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,M9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new xg,t=this.sharedFs;return new cy({collection:{listScoops:()=>this.getScoops(),isProcessing:e=>this.isProcessing(e),getAgentMessages:e=>this.getScoopContext(e)?.getAgentMessages()??null,loadPersistedSessions:()=>this.sessionStore?.loadAll()??Promise.resolve([]),loadUiChatSessions:async()=>{let t=await e.list();return(await Promise.all(t.map(t=>e.load(t)))).filter(e=>e!==null)},wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:Dy(),snapshotStore:{read:e=>yy(t,e),write:(e,n)=>vy(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.108.2`})}};const N9=r(`workflow-run-manager`),P9=`/shared/workflow-runs`,F9=1e3;function eve(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function tve(e){let t=new Map,n=new Map,r=e=>{let r=t.get(e);if(r)for(let t of n.get(e)??[])try{t(r)}catch(e){N9.warn(`observeRun handler threw`,e)}},i=(e,n)=>ove(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=eve(e,a.parentJid),d={id:c,name:a.name,source:a.source,origin:u.origin,lickTarget:u.lickTarget,status:`running`,currentPhase:null,agentsStarted:0,agentsDone:0,logs:[],startedAt:new Date().toISOString(),finishedAt:null,resultPath:null,preview:null,error:null,pid:null};t.set(c,d),ive(t,n);let f=i(a.ctx,c),p=ave(e.processManager,d,c,()=>r(c));return e.runRealm(a.code,[`workflow`,a.filename,c],f).then(e=>o(c,l,e)).catch(e=>s(c,e instanceof Error?e.message:String(e))).finally(()=>p()).catch(e=>N9.warn(`workflow run lifecycle error`,e)),{runId:c}}async function o(t,n,r){let{result:i,hadResult:a}=e.splitResult(r.stdout,n);return r.exitCode===137?c(t,`killed`,null,r.stderr||`killed (SIGKILL)`):r.exitCode!==0||!a?c(t,`error`,null,r.stderr||(a?`exit ${r.exitCode}`:`script produced no result`)):c(t,`done`,i,null)}function s(e,t){return c(e,`error`,null,t)}async function c(n,i,a,o){let s=t.get(n);if(!s||s.status!==`running`&&s.status!==`paused`)return;let c=`${P9}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(P9,{recursive:!0}),await e.sharedFs.writeFile(c,JSON.stringify({name:s.name,status:i,result:i===`done`?a:null,error:o,logs:s.logs,startedAt:s.startedAt,finishedAt:u},null,2)),s.resultPath=c}catch(e){let t=e instanceof Error?e.message:String(e);N9.error(`failed to write run result file`,{runId:n,resultPath:c,error:t}),o=`result file write failed: ${t}`,i===`done`&&(i=`error`)}s.status=i,s.error=o,s.finishedAt=u,s.preview=i===`done`?rve(a):o??``,r(n),l(s)}function l(t){t.origin===`cone`&&e.fireLick({type:`workflow`,targetScoop:t.lickTarget,workflowRunId:t.id,workflowName:t.name??void 0,resultPath:t.resultPath??void 0,preview:t.preview??t.error??void 0,timestamp:new Date().toISOString(),body:{runId:t.id,status:t.status,error:t.error}})}return{start:a,getRun:e=>t.get(e)??null,listRuns:()=>Array.from(t.values()),observeRun(e,r){let i=n.get(e);i||(i=new Set,n.set(e,i)),i.add(r);let a=t.get(e);if(a)try{r(a)}catch(e){N9.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function nve(e){let t=tve(e);return globalThis[I7]=t,N9.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function rve(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function ive(e,t,n=100){if(e.size<=n)return;let r=[...e.values()].filter(e=>e.status!==`running`&&e.status!==`paused`).sort((e,t)=>(e.finishedAt??e.startedAt).localeCompare(t.finishedAt??t.startedAt)),i=e.size-n;for(let n of r){if(i<=0)break;e.delete(n.id),t.delete(n.id),i--}}function ave(e,t,n,r){let i=e.on(`spawn`,e=>{t.pid===null&&e.argv.includes(n)&&(t.pid=e.pid,r(),i())});return i}function ove(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?sve(n,t,a?.args??[],r):e===`agent`?cve(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function sve(e,t,n,r){let i=e.get(t);if(i&&i.status===`running`){let[e,t=``]=n;e===`phase`?(i.currentPhase=t,i.logs.push(t)):e===`log`&&i.logs.push(t),i.logs.length>F9&&i.logs.splice(0,i.logs.length-F9),r()}return{stdout:``,stderr:``,exitCode:0}}async function cve(e,t,n,r){let i=e.get(t);i&&i.status===`running`&&(i.agentsStarted++,r());try{return await n()}finally{let n=e.get(t);n&&n.status===`running`&&(n.agentsDone++,r())}}const lve=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function uve(e,t,n){let r=dve(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=fve(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function dve(e){let t=new Map;return I9(t,e.discoveryOrigin),I9(t,e.discoveryUrl),[...t.values()]}function I9(e,t){if(t){L9(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);L9(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!lve.has(e)))L9(e,t,1,`substring`)}catch{}}}function L9(e,t,n,r){if(t.length===0)return;let i=`${r}:${t}`,a=e.get(i);(!a||n>a.weight)&&e.set(i,{text:t,weight:n,match:r})}function fve(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=mve(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)pve(a,e)&&(r+=e.weight*o)}return r}function pve(e,t){if(t.match===`substring`)return e.includes(t.text);let n=t.text.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|[^a-z0-9.-])(?:www\\.)?${n}($|[^a-z0-9.-])`).test(e)}function mve(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}var hve=class{kind=`proc`;source=void 0;profile=void 0;mountId;pm;closed=!1;constructor(e,t={}){this.pm=e,this.mountId=t.mountId??`proc-${Date.now().toString(36)}`}async readDir(e){this.assertOpen(e);let t=B9(e);if(t.length===0){let e=this.pm.list(),t=e.map(e=>({name:String(e.pid),kind:`directory`}));return e.some(e=>e.pid===1)||t.push({name:`1`,kind:`directory`}),t.sort((e,t)=>Number(e.name)-Number(t.name)),t.push({name:z9,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===z9)throw new In(`ENOTDIR`,`not a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);return R9.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new In(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=B9(e);if(t.length===1&&t[0]===z9)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new In(`EISDIR`,`is a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new In(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new In(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=B9(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===z9)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new In(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new In(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new In(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new In(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new In(`EACCES`,`read-only filesystem`,e)}async refresh(){return{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:`/proc`,extra:`kernel processes (read-only)`}}async close(){this.closed=!0}assertOpen(e){if(this.closed)throw new In(`EBADF`,`mount closed`,e)}pidExists(e){return e===1||this.pm.get(e)!==null}fileSize(e,t){return this.renderProcFile(e,t).length}fileMtime(e){if(e===1)return 0;let t=this.pm.get(e);return t?t.finishedAt??t.startedAt:0}renderTable(){let e={stats:this.pm.stats(),processes:this.pm.list().map(e=>({pid:e.pid,ppid:e.ppid,kind:e.kind,state:H9(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:U9(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
|
|
5150
|
+
`}renderProcFile(e,t){if(e===1)return bve(t);let n=this.pm.get(e);switch(t){case`status`:return gve(n);case`cmdline`:return _ve(n);case`cwd`:return vve(n);case`stat`:return yve(n)}}};const R9=[`status`,`cmdline`,`cwd`,`stat`],z9=`table`;function B9(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function V9(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function gve(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${H9(e.status)} (${e.status})`,`Owner:\t${U9(e)}`,`StartedAt:\t${new Date(e.startedAt).toISOString()}`];return e.finishedAt!==null&&t.push(`FinishedAt:\t${new Date(e.finishedAt).toISOString()}`),e.terminatedBy!==null&&t.push(`TerminatedBy:\t${e.terminatedBy}`),e.exitCode!==null&&t.push(`ExitCode:\t${e.exitCode}`),t.push(`Cmdline:\t${e.argv.join(` `)}`),t.join(`
|
|
5151
5151
|
`)+`
|
|
5152
|
-
`}function
|
|
5153
|
-
`}function
|
|
5154
|
-
`}function H9(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function U9(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.scoopJid?`scoop/${e.owner.scoopJid}`:`scoop`}function
|
|
5152
|
+
`}function _ve(e){return e.argv.join(`\0`)+`\0`}function vve(e){return e.cwd+`
|
|
5153
|
+
`}function yve(e){return[e.pid,`(${e.kind})`,H9(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
|
|
5154
|
+
`}function H9(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function U9(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.scoopJid?`scoop/${e.owner.scoopJid}`:`scoop`}function bve(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
|
|
5155
5155
|
`)+`
|
|
5156
5156
|
`;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
|
|
5157
5157
|
`;case`stat`:return`1 (kernel-host) R 0 - 0 -
|
|
5158
|
-
`}}function
|
|
5159
|
-
`,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function Ave(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-1UPwiSVX.js`);return t(e,{locationHref:self.location.href,lickWsUrl:n??null}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function jve(e,t,n){let r=e.getTransport();if(r.isExtensionBridge)return n.debug?.(`Skipping NavigationWatcher: extension-bridge transport rejects sessionless Target.* discovery; the service worker observes handoffs via chrome.webRequest`),null;try{let e=new Gre(r,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},Mve(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Mve(e){let t=y();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,n)=>{let r=t(e,{method:n?.method??`GET`}),i=n?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>Kre()}}function Nve(e,t,n){(async()=>{try{let{getAllMountEntries:r,removeMountEntry:i}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:a}=await import(`./mount-recovery-BDSot1Jv.js`).then(e=>e.n),{hostShadowedEntries:o,mountConfiguredHostMounts:s,withoutHostMountedTargets:c}=await import(`./auto-mount-table-B5XJxoBU.js`),l=await s(e,n),u=await r(),d=c(u,l);for(let e of o(u,l))i(e.targetPath).catch(t=>{n.warn(`failed to purge host-owned mount row`,{path:e.targetPath,error:t instanceof Error?t.message:String(t)})});if(d.length===0)return;let{needsRecovery:f}=await a(d,e,n);if(f.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:f}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function Pve(){cr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-DgIwa1DB.js`);return e()})}function Fve(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-DgIwa1DB.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Ive(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog--Df_ThJG.js`),{ScriptCatalog:r}=await import(`./script-catalog-Bt94D0RP.js`).then(e=>e.n),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}function Lve(){return at()}async function Rve(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Pve();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await Tve(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?xe(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new mve(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Eve(l,e,o);s(`lick-manager-ready`),f&&Ove({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),W9().__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await kve({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});W9().__slicc_wsSubscribers=h;let g=null;Lve()&&(g=await Ave(p,o,e.localLickWsUrl??null));let _=jve(n,p,o);f&&Nve(f,p,o),a||await Dve(l),s(`cone-bootstrapped`),f&&Fve(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await Ive(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=bve({nonce:e.syncFsChannelNonce}).dispose);let x=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:p,sharedFs:f??null,processManager:c,async dispose(){x||(x=!0,await zve({unsubLeader:u,unsubFollower:d,bshWatchdogStop:v,scriptCatalogDispose:y,lickWsBridgeStop:g,navigationWatcherStop:_,syncFsResponderDispose:b,sharedFs:f,wsRegistry:h,wsBridge:m,processManager:c,lickManager:p,browser:n,log:o}))}}}async function zve(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.syncFsResponderDispose?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}Bve({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Bve(e){let t=W9();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,dG(null)),t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[I7]}const G9=`x-bypass-llm-proxy`;function Vve(e,t,n){return t?(r,i)=>{if(!Hve(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(G9)||a.set(G9,`1`),e(r,{...i,headers:a})}:e}function Hve(e,t,n){if(Wve(e,t))return!0;let r=n?.()??null;return r?Uve(e,r,t):!1}function Uve(e,t,n){let r=K9(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname.startsWith(`/api/`)}function Wve(e,t){let n=K9(e);try{return new URL(n,t).origin===t}catch{return!0}}function K9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Gve(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var Kve=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!qve(e)||e.source!==`panel`)return;let t=e.payload;Jve(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n,t.shell.applySessionOverrides?.({cwd:e.cwd,env:e.env});let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=``;if(e.stdin)try{i=tte(u(e.stdin))}catch{this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec with invalid stdin (expected base64)`,e.sid);return}let a=await t.shell.executeCommand(e.command,n.signal,r?.pid,i);await this.emitExecSuccess(e,a,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?q9(r?.terminatedBy??`SIGINT`):t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,q9(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function qve(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function q9(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Jve(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var Yve=class extends $7{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};function Xve(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new Kve({transport:t,processManager:i,createShell:(a,o)=>new Yve(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??at,getLeaderStatus:e.webhook?.getLeaderStatus??Kn},processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function Zve(e){let t=new Qve(e);return t.start(),{stop:()=>t.dispose()}}var Qve=class{transport;client;writableClient;getWatcher;log;unsubscribe=null;watches=new Map;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.getWatcher=e.getWatcher??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!$ve(e)||e.source!==`panel`)return;let t=e.payload;if(eye(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(tye(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(nye(t)){this.handleWatchControl(t);return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.watches)for(let t of e)t();this.watches.clear()}handleWatchControl(e){e.type===`vfs-watch`?this.handleWatch(e):this.handleUnwatch(e)}handleWatch(e){this.dropWatch(e.subscriptionId);let t=this.getWatcher?.()??null;if(!t){this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!1,error:{code:`ENOSYS`,message:`vfs-rpc-host has no watcher wired`}});return}let n=e.basePaths.map(n=>t.watch(n,()=>!0,t=>{if(!this.watches.has(e.subscriptionId))return;let n={type:`vfs-watch-event`,subscriptionId:e.subscriptionId,events:t.map(e=>({type:e.type,path:e.path,...e.entryType?{entryType:e.entryType}:{}}))};this.transport.send(n)}));this.watches.set(e.subscriptionId,n),this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!0})}handleUnwatch(e){this.dropWatch(e.subscriptionId)}dropWatch(e){let t=this.watches.get(e);if(t){this.watches.delete(e);for(let e of t)e()}}sendWatchAck(e){this.transport.send(e)}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e.requestId,new In(`EIO`,`readFile(binary) did not return Uint8Array`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`binary`,data:n},r=n.buffer,i=typeof ArrayBuffer<`u`&&r instanceof ArrayBuffer?[r]:void 0;this.transport.send(t,i)}else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new In(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(rye(e.type),e.requestId,new In(`EACCES`,`vfs-rpc-host has no writable backend wired`),iye(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient);case`vfs-list-mount-points`:return this.handleListMountPoints(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new In(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new In(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}async handleListMountPoints(e,t){if(!t.listMountPoints){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,new In(`EACCES`,`vfs-rpc-host has no mount-aware backend wired`),``);return}try{let n=await t.listMountPoints(),r={type:`vfs-list-mount-points-result`,requestId:e.requestId,ok:!0,mountPoints:n};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=J9(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=J9(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-list-mount-points-result`:{let e={type:`vfs-list-mount-points-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function $ve(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function eye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function tye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`||t===`vfs-list-mount-points`}function nye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function rye(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`;case`vfs-list-mount-points`:return`vfs-list-mount-points-result`}}function iye(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof In?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function aye(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Vve(e.bind(globalThis),t,oye)}function oye(){let e=pe();if(!e)return null;try{return new URL(e).origin}catch{return null}}function sye(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let Y9=null,X9=null,Z9=null,Q9=null,$9=null;const cye=Gve(e=>dye(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&cye.handle(e.data)});function lye(e){let t=qo(e.pageBuildId,`6.108.0-mtdjccbg`);return()=>{t&&ui(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.108.0-mtdjccbg`)}}function uye(e){aye(),k(e.localApiBaseUrl??null),le(e.bridgeToken??null),aG(e.syncFsBridgeEnabled??!1),fe(e.extensionDelegateId??null),sye(e.localStorageSeed??{}),e.flagFloat&&Fo(e.flagFloat)}async function dye(e){Wo(e.instanceId);let t=lye(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{uye(e),fi().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=rte(e.kernelPort),a=new u_(r),o=u_.createCallbacks(a),c=new ite(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new fo(c);Y9=await Rve({container:{},browser:l,bridge:a,callbacks:o,logger:console,localLickWsUrl:e.localLickWsUrl??null,syncFsChannelNonce:e.syncFsChannelNonce??null,onBootProgress:n});let{createSprinkleManagerProxyOverChannel:u}=await import(`./sprinkle-bridge-channel-CftxYQ9D.js`),d=u({instanceId:e.instanceId});globalThis.__slicc_sprinkleManager=d;let f=Y9.sharedFs?.getWatcher();if(f){let e=[`/workspace`,`/shared`,`/scoops`],t=null,n=new Set;for(let r of e)f.watch(r,e=>e.endsWith(`.shtml`),e=>{for(let t of e){let e=t.path.split(`/`).pop()?.replace(/\.shtml$/,``);e&&n.add(e)}t||=setTimeout(()=>{t=null;for(let e of n)d.reload(e).catch(()=>{});n.clear()},300)})}let{createPanelRpcClient:p}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i);$9=p({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=$9,l.setTrayTargetProvider(vo(i));let m=await pye({host:Y9,transport:r,browser:l,instanceId:e.instanceId});m&&(X9=m.stopTerminalHost,Z9=m.stopVfsRpcHost,Q9=m.stopSpeechAssetsResponder),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){fye(e.kernelPort,t)}}function fye(e,t){Ko(t);try{let n=t instanceof Error?t.message:String(t),r=t?.code;e.postMessage({type:`kernel-worker-boot-error`,message:n,...typeof r==`string`?{code:r}:{},...t instanceof Error&&t.stack?{stack:t.stack}:{}})}catch{}throw t}async function pye(e){let t=e.host.sharedFs;if(!t)return console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),null;let n=Xve({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=Zve({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),i=await mye(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function mye(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CmarhXRU.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-BduXImRw.js`).then(e=>e.n),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(X9?.(),X9=null,Z9?.(),Z9=null,Q9?.(),Q9=null,$9?.dispose(),$9=null,Y9?.dispose())});
|
|
5158
|
+
`}}function xve(e={}){let t=e.channel===void 0;if(t&&!e.nonce)throw Error(`installSyncFsResponder: a nonce (or a test channel) is required`);let n=e.channel??new BroadcastChannel(WB(e.nonce)),r=e=>n.postMessage(e),i=new Map,a=e=>{let t=e.data;if(t?.type!==`sync-fs-req`||typeof t.id!=`string`)return;let n=t;if(!zB(n.token))return;let a=i.get(n.id);if(a){r({type:GB,id:n.id}),a.result&&r({type:KB,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:GB,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),605e3),r({type:KB,id:n.id,...e})};(XB(n)?$B(n):UB(n)).then(s).catch(e=>s({ok:!1,errno:`EIO`,message:e instanceof Error?e.message:String(e)}))};return n.addEventListener(`message`,a),{dispose:()=>{n.removeEventListener(`message`,a);for(let e of i.values())e.timer&&clearTimeout(e.timer);i.clear(),t&&n.close?.()}}}function W9(){return globalThis}function Sve(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`mount-recovery`;case`workflow`:return e.workflowName??e.workflowRunId??`workflow`;case`bash`:return e.bashJobId??`bash`;case`preview`:return e.previewOrigin??`preview`;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function Cve(e){switch(e.type){case`webhook`:return e.webhookId;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchId;case`navigate`:return e.navigateUrl;case`upgrade`:return`upgrade-${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`session-reload-${e.timestamp}`;case`workflow`:return`workflow-${e.workflowRunId??`unknown`}`;case`bash`:return`bash-${e.bashJobId??`unknown`}`;case`preview`:return e.previewConnId??`preview-${e.timestamp}`;case`discovery`:return e.discoveryUrl??`discovery-${e.timestamp}`;default:return e.cronId}}function wve(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}Tve(e,t)}function Tve(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=tn(r),a=e.type===`discovery`&&!e.targetScoop?uve(e,i.filter(y_),e=>t.getScoopContext?.(e.jid)?.getAgentMessages()??[]):void 0,o=e.targetScoop?Xo(r,e.targetScoop):a??i[0];if(!o){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!y_(o)){n.debug?.(`dropping discovery lick for non-browsing scoop`,{scoop:o.folder});return}e.type===`navigate`?e.lickId=t.registerNavigateLick(e):e.type===`session-reload`?e.lickId=t.registerSessionReloadLick(e):e.type===`upgrade`?e.lickId=t.registerUpgradeLick(e):e.type===`discovery`&&(e.lickId=t.registerDiscoveryLick(e)??void 0);let s=zg(e);if(s===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let c=Sve(e),l=Cve(e),u=e.type,d={id:`${u}-${l}-${Date.now()}`,chatJid:o.jid,senderId:u,senderName:`${u}:${c}`,content:s.content,timestamp:e.timestamp,fromAssistant:!1,channel:u,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(d).catch(e=>{n.warn(`Lick message routing failed`,{channel:u,eventName:c,error:String(e)})})}async function Eve(e,t,n,r,i){let a=new ji,o=new $_e(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a),W9().__slicc_pm=a,dG(pG()),W9().__slicc_browser=t,await n.bind(o,t);let s=See(()=>n.emitTrayRuntimeStatus()),c=Mre(()=>n.emitTrayRuntimeStatus());return await o.init(i),await n.seedBuffersFromAgentState(),{processManager:a,orchestrator:o,unsubLeader:s,unsubFollower:c,sharedFs:o.getSharedFS()}}async function Dve(e,t,n){let{registerSessionCostsProvider:r}=await import(`./cost-command-DNKXuXCE.js`).then(e=>e.t);r(t=>e.getSessionCostsForCommand(t));let{getLickManager:i}=await import(`./lick-manager-DsQLFcKr.js`).then(e=>e.n),a=i();await a.init(),e.setLickManager(a);let o=t.lickEventHandler??wve,s={orchestrator:e,lickManager:a,log:n};return a.setEventHandler(e=>o(e,s)),a}async function Ove(e){let t=e.getScoops();tn(t).length>0||await e.registerScoop({jid:`cone_${Date.now()}`,name:`Cone`,folder:`cone`,parentJid:null,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()})}function kve(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:i}=e;nve({sharedFs:i,getStartingRoot:e=>{let n=tn(t.getScoops()),r=n.find(t=>t.jid===e);return r?{jid:r.jid,lickTarget:r.jid===n[0]?.jid?void 0:r.folder}:null},fireLick:e=>r.emitEvent(e),processManager:n,runRealm:(e,t,n)=>hG(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>L7().slice(10,22),splitResult:(e,t)=>R7(e,t)})}async function Ave(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-DI26JBMr.js`),{WsSubscriberRegistry:s}=await import(`./ws-subscribers-CKHqIv8e.js`),c=new o({browser:t});return{wsBridge:c,wsRegistry:new s({bridge:c,webhooks:{has:e=>n.getWebhook(e)!==void 0},dispatcher:{webhook:(e,t)=>{n.handleWebhookEvent(e,{},t)},scoop:(e,t)=>{if(!r.getScoops().find(t=>t.jid===e)){a.warn?.(`browser.websocket: scoop sink not found`,{jid:e});return}let n={id:`ws-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,chatJid:e,senderId:`browser.websocket`,senderName:`browser.websocket`,content:typeof t==`string`?t:JSON.stringify(t,null,2),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`browser.websocket`};r.handleMessage(n)},vfs:async(e,t)=>{if(!i)return;let n=(typeof t==`string`?t:JSON.stringify(t))+`
|
|
5159
|
+
`,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function jve(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-1UPwiSVX.js`);return t(e,{locationHref:self.location.href,lickWsUrl:n??null}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function Mve(e,t,n){let r=e.getTransport();if(r.isExtensionBridge)return n.debug?.(`Skipping NavigationWatcher: extension-bridge transport rejects sessionless Target.* discovery; the service worker observes handoffs via chrome.webRequest`),null;try{let e=new Gre(r,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},Nve(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Nve(e){let t=y();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,n)=>{let r=t(e,{method:n?.method??`GET`}),i=n?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>Kre()}}function Pve(e,t,n){(async()=>{try{let{getAllMountEntries:r,removeMountEntry:i}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:a}=await import(`./mount-recovery-BrxSEJj1.js`).then(e=>e.n),{hostShadowedEntries:o,mountConfiguredHostMounts:s,withoutHostMountedTargets:c}=await import(`./auto-mount-table-B5XJxoBU.js`),l=await s(e,n),u=await r(),d=c(u,l);for(let e of o(u,l))i(e.targetPath).catch(t=>{n.warn(`failed to purge host-owned mount row`,{path:e.targetPath,error:t instanceof Error?t.message:String(t)})});if(d.length===0)return;let{needsRecovery:f}=await a(d,e,n);if(f.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:f}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function Fve(){cr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-DmRBomaj.js`);return e()})}function Ive(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-DmRBomaj.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Lve(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog--Df_ThJG.js`),{ScriptCatalog:r}=await import(`./script-catalog-Bt94D0RP.js`).then(e=>e.n),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}function Rve(){return at()}async function zve(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Fve();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await Eve(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?xe(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new hve(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Dve(l,e,o);s(`lick-manager-ready`),f&&kve({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),W9().__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await Ave({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});W9().__slicc_wsSubscribers=h;let g=null;Rve()&&(g=await jve(p,o,e.localLickWsUrl??null));let _=Mve(n,p,o);f&&Pve(f,p,o),a||await Ove(l),s(`cone-bootstrapped`),f&&Ive(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await Lve(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=xve({nonce:e.syncFsChannelNonce}).dispose);let x=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:p,sharedFs:f??null,processManager:c,async dispose(){x||(x=!0,await Bve({unsubLeader:u,unsubFollower:d,bshWatchdogStop:v,scriptCatalogDispose:y,lickWsBridgeStop:g,navigationWatcherStop:_,syncFsResponderDispose:b,sharedFs:f,wsRegistry:h,wsBridge:m,processManager:c,lickManager:p,browser:n,log:o}))}}}async function Bve(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.syncFsResponderDispose?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}Vve({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Vve(e){let t=W9();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,dG(null)),t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[I7]}const G9=`x-bypass-llm-proxy`;function Hve(e,t,n){return t?(r,i)=>{if(!Uve(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(G9)||a.set(G9,`1`),e(r,{...i,headers:a})}:e}function Uve(e,t,n){if(Gve(e,t))return!0;let r=n?.()??null;return r?Wve(e,r,t):!1}function Wve(e,t,n){let r=K9(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname.startsWith(`/api/`)}function Gve(e,t){let n=K9(e);try{return new URL(n,t).origin===t}catch{return!0}}function K9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Kve(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var qve=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!Jve(e)||e.source!==`panel`)return;let t=e.payload;Yve(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n,t.shell.applySessionOverrides?.({cwd:e.cwd,env:e.env});let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=``;if(e.stdin)try{i=tte(u(e.stdin))}catch{this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec with invalid stdin (expected base64)`,e.sid);return}let a=await t.shell.executeCommand(e.command,n.signal,r?.pid,i);await this.emitExecSuccess(e,a,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?q9(r?.terminatedBy??`SIGINT`):t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,q9(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function Jve(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function q9(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Yve(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var Xve=class extends $7{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};function Zve(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new qve({transport:t,processManager:i,createShell:(a,o)=>new Xve(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??at,getLeaderStatus:e.webhook?.getLeaderStatus??Kn},processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function Qve(e){let t=new $ve(e);return t.start(),{stop:()=>t.dispose()}}var $ve=class{transport;client;writableClient;getWatcher;log;unsubscribe=null;watches=new Map;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.getWatcher=e.getWatcher??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!eye(e)||e.source!==`panel`)return;let t=e.payload;if(tye(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(nye(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(rye(t)){this.handleWatchControl(t);return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.watches)for(let t of e)t();this.watches.clear()}handleWatchControl(e){e.type===`vfs-watch`?this.handleWatch(e):this.handleUnwatch(e)}handleWatch(e){this.dropWatch(e.subscriptionId);let t=this.getWatcher?.()??null;if(!t){this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!1,error:{code:`ENOSYS`,message:`vfs-rpc-host has no watcher wired`}});return}let n=e.basePaths.map(n=>t.watch(n,()=>!0,t=>{if(!this.watches.has(e.subscriptionId))return;let n={type:`vfs-watch-event`,subscriptionId:e.subscriptionId,events:t.map(e=>({type:e.type,path:e.path,...e.entryType?{entryType:e.entryType}:{}}))};this.transport.send(n)}));this.watches.set(e.subscriptionId,n),this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!0})}handleUnwatch(e){this.dropWatch(e.subscriptionId)}dropWatch(e){let t=this.watches.get(e);if(t){this.watches.delete(e);for(let e of t)e()}}sendWatchAck(e){this.transport.send(e)}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e.requestId,new In(`EIO`,`readFile(binary) did not return Uint8Array`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`binary`,data:n},r=n.buffer,i=typeof ArrayBuffer<`u`&&r instanceof ArrayBuffer?[r]:void 0;this.transport.send(t,i)}else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new In(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(iye(e.type),e.requestId,new In(`EACCES`,`vfs-rpc-host has no writable backend wired`),aye(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient);case`vfs-list-mount-points`:return this.handleListMountPoints(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new In(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new In(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}async handleListMountPoints(e,t){if(!t.listMountPoints){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,new In(`EACCES`,`vfs-rpc-host has no mount-aware backend wired`),``);return}try{let n=await t.listMountPoints(),r={type:`vfs-list-mount-points-result`,requestId:e.requestId,ok:!0,mountPoints:n};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=J9(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=J9(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-list-mount-points-result`:{let e={type:`vfs-list-mount-points-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function eye(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function tye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function nye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`||t===`vfs-list-mount-points`}function rye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function iye(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`;case`vfs-list-mount-points`:return`vfs-list-mount-points-result`}}function aye(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof In?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function oye(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Hve(e.bind(globalThis),t,sye)}function sye(){let e=pe();if(!e)return null;try{return new URL(e).origin}catch{return null}}function cye(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let Y9=null,X9=null,Z9=null,Q9=null,$9=null;const lye=Kve(e=>fye(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&lye.handle(e.data)});function uye(e){let t=qo(e.pageBuildId,`6.108.2-mtdmmthb`);return()=>{t&&ui(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.108.2-mtdmmthb`)}}function dye(e){oye(),k(e.localApiBaseUrl??null),le(e.bridgeToken??null),aG(e.syncFsBridgeEnabled??!1),fe(e.extensionDelegateId??null),cye(e.localStorageSeed??{}),e.flagFloat&&Fo(e.flagFloat)}async function fye(e){Wo(e.instanceId);let t=uye(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{dye(e),fi().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=rte(e.kernelPort),a=new u_(r),o=u_.createCallbacks(a),c=new ite(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new fo(c);Y9=await zve({container:{},browser:l,bridge:a,callbacks:o,logger:console,localLickWsUrl:e.localLickWsUrl??null,syncFsChannelNonce:e.syncFsChannelNonce??null,onBootProgress:n});let{createSprinkleManagerProxyOverChannel:u}=await import(`./sprinkle-bridge-channel-CftxYQ9D.js`),d=u({instanceId:e.instanceId});globalThis.__slicc_sprinkleManager=d;let f=Y9.sharedFs?.getWatcher();if(f){let e=[`/workspace`,`/shared`,`/scoops`],t=null,n=new Set;for(let r of e)f.watch(r,e=>e.endsWith(`.shtml`),e=>{for(let t of e){let e=t.path.split(`/`).pop()?.replace(/\.shtml$/,``);e&&n.add(e)}t||=setTimeout(()=>{t=null;for(let e of n)d.reload(e).catch(()=>{});n.clear()},300)})}let{createPanelRpcClient:p}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i);$9=p({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=$9,l.setTrayTargetProvider(vo(i));let m=await mye({host:Y9,transport:r,browser:l,instanceId:e.instanceId});m&&(X9=m.stopTerminalHost,Z9=m.stopVfsRpcHost,Q9=m.stopSpeechAssetsResponder),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){pye(e.kernelPort,t)}}function pye(e,t){Ko(t);try{let n=t instanceof Error?t.message:String(t),r=t?.code;e.postMessage({type:`kernel-worker-boot-error`,message:n,...typeof r==`string`?{code:r}:{},...t instanceof Error&&t.stack?{stack:t.stack}:{}})}catch{}throw t}async function mye(e){let t=e.host.sharedFs;if(!t)return console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),null;let n=Zve({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=Qve({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),i=await hye(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function hye(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CmarhXRU.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-BduXImRw.js`).then(e=>e.n),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(X9?.(),X9=null,Z9?.(),Z9=null,Q9?.(),Q9=null,$9?.dispose(),$9=null,Y9?.dispose())});
|