sliccy 6.99.5 → 6.99.6

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.
Files changed (82) hide show
  1. package/dist/node-server/routes/oauth-callback.d.ts +9 -0
  2. package/dist/ui/.vite/manifest.json +123 -123
  3. package/dist/ui/assets/SKILL-DsJ4mys3.js +1 -0
  4. package/dist/ui/assets/{account-store-B6Zka-_Q.js → account-store-4CR3QuSJ.js} +1 -1
  5. package/dist/ui/assets/{account-store-DcTHuaYs.js → account-store-DcZy--PI.js} +1 -1
  6. package/dist/ui/assets/{adobe-9_q-cwrQ.js → adobe-Cf5S3FAd.js} +1 -1
  7. package/dist/ui/assets/{adobe-DdWNo5mh.js → adobe-Cikl7RUn.js} +1 -1
  8. package/dist/ui/assets/{apply-layout-D6_JR0VB.js → apply-layout-CNXWqIiD.js} +1 -1
  9. package/dist/ui/assets/{apps-B7jN2fow.js → apps-BobRGPt6.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-kUjuFa-s.js → azure-openai-B0sqY2kJ.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-WG_0CGpK.js → azure-openai-CnjVnpum.js} +1 -1
  12. package/dist/ui/assets/{cdp-DijNlzAg.js → cdp-ByIHQG_1.js} +1 -1
  13. package/dist/ui/assets/{cerebras-LxZiu9By.js → cerebras-AamZLke0.js} +1 -1
  14. package/dist/ui/assets/{cerebras-B3VeDTCT.js → cerebras-CJYn7pze.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-d0IMzt6Y.js → connect-surface-BCXB5YMx.js} +1 -1
  16. package/dist/ui/assets/{fs-CZIZCIGv.js → fs-BYhuqz39.js} +1 -1
  17. package/dist/ui/assets/{fs-C_lEuswJ.js → fs-Cd4gZHa6.js} +2 -2
  18. package/dist/ui/assets/{github-C7Ei7lfR.js → github-D9O9vXDc.js} +1 -1
  19. package/dist/ui/assets/{github-copilot-B2LzGewc.js → github-copilot-BzcoVtJX.js} +1 -1
  20. package/dist/ui/assets/{github-copilot-DsY97KeB.js → github-copilot-DzJuFcY1.js} +1 -1
  21. package/dist/ui/assets/{github-install-teuMA0AB.js → github-install-dG6nbsuB.js} +1 -1
  22. package/dist/ui/assets/{github-x1xw0KtD.js → github-quMUzVLo.js} +2 -2
  23. package/dist/ui/assets/{github-zip-CIvQnVWw.js → github-zip-BtBW41Sy.js} +1 -1
  24. package/dist/ui/assets/{js-realm-worker-BLPgQ7_q.js → js-realm-worker-Br00Fodv.js} +1 -1
  25. package/dist/ui/assets/{kernel-worker-9RL-1qbh.js → kernel-worker-BM28OeYl.js} +242 -241
  26. package/dist/ui/assets/{local-llm-DQ_6wrrj.js → local-llm-BRKE9XNv.js} +1 -1
  27. package/dist/ui/assets/{local-llm-BOag0PRI.js → local-llm-D9Nfa9d2.js} +1 -1
  28. package/dist/ui/assets/{main-cherry-MBr7V1Gu.js → main-cherry-3UVAQhqV.js} +1 -1
  29. package/dist/ui/assets/{main-Br-1g3a3.js → main-sZVw5O4X.js} +3 -3
  30. package/dist/ui/assets/{mount-Dip7rbI6.js → mount-BHIxcQBV.js} +1 -1
  31. package/dist/ui/assets/{mount-CvUPHxlo.js → mount-nCXVU9_4.js} +2 -2
  32. package/dist/ui/assets/{mount-recovery-DIFfyUcI.js → mount-recovery-CMDznnSn.js} +1 -1
  33. package/dist/ui/assets/{new-session-Bq5-4Dfa.js → new-session-DoojOQQe.js} +2 -2
  34. package/dist/ui/assets/{oauth-bootstrap-BKx7I8Kv.js → oauth-bootstrap-CjFszhr3.js} +2 -2
  35. package/dist/ui/assets/{openai-codex-BXSmt2x8.js → openai-codex-B6C1mWGw.js} +1 -1
  36. package/dist/ui/assets/{openai-codex-Xbd7CeE3.js → openai-codex-xDd5f1-t.js} +1 -1
  37. package/dist/ui/assets/{openrouter-DGYUEyKg.js → openrouter-Cd54zCV_.js} +1 -1
  38. package/dist/ui/assets/{openrouter-CKjYOLVC.js → openrouter-DvkbHTdB.js} +1 -1
  39. package/dist/ui/assets/{openrouter-oauth-ChxFnJYo.js → openrouter-oauth-B59rjzyw.js} +1 -1
  40. package/dist/ui/assets/{openrouter-oauth-A2rrenaX.js → openrouter-oauth-BAdnxdL3.js} +1 -1
  41. package/dist/ui/assets/{panel-rpc-handlers-BvT9z7E6.js → panel-rpc-handlers-CXRSw4ph.js} +2 -2
  42. package/dist/ui/assets/{provider-Dh8rn79C.js → provider-C8BCYyOV.js} +1 -1
  43. package/dist/ui/assets/{provider-B7PIvKeg.js → provider-DgqytUPA.js} +2 -2
  44. package/dist/ui/assets/{provider-settings-ESBXURmC.js → provider-settings-BauKD_sq.js} +1 -1
  45. package/dist/ui/assets/{provider-settings-CKCGh4DD.js → provider-settings-CXlHr9kC.js} +1 -1
  46. package/dist/ui/assets/provider-store-access-BVlGBiIp.js +1 -0
  47. package/dist/ui/assets/{provider-store-access-DasneuAA.js → provider-store-access-CFg-WMGM.js} +2 -2
  48. package/dist/ui/assets/{providers-C6ZynSII.js → providers-B4KUbVvY.js} +2 -2
  49. package/dist/ui/assets/{providers-rNbxX5Js.js → providers-CU4-75kP.js} +1 -1
  50. package/dist/ui/assets/{quick-llm-CAr1c9IB.js → quick-llm-BiPtVtRD.js} +1 -1
  51. package/dist/ui/assets/{recovery-screen-Bz2i4uVy.js → recovery-screen-BYEl4gaz.js} +1 -1
  52. package/dist/ui/assets/{redirect-uri-BYheNl-Q.js → redirect-uri-BHJJZEAC.js} +1 -1
  53. package/dist/ui/assets/{run-DLs1-rFE.js → run-CtZwCMnc.js} +1 -1
  54. package/dist/ui/assets/{session-freezer-B6KdlOfF.js → session-freezer-CgRfBKhH.js} +3 -3
  55. package/dist/ui/assets/{setup-feature-flags-remote-QFy3Fsly.js → setup-feature-flags-remote-CKrMXvv8.js} +1 -1
  56. package/dist/ui/assets/{setup-standalone-prelude-CMgbvcqU.js → setup-standalone-prelude-C_6PudII.js} +2 -2
  57. package/dist/ui/assets/{setup-sudo-BN_-LCOr.js → setup-sudo-BYQFCRxI.js} +2 -2
  58. package/dist/ui/assets/{skills-DoL_3MkV.js → skills-CjSmgIMj.js} +1 -1
  59. package/dist/ui/assets/slicc-version-AaOP2MgH.js +1 -0
  60. package/dist/ui/assets/{state-DOBL8rDV.js → state-C-QkG9RC.js} +1 -1
  61. package/dist/ui/assets/{store-B0LOCSNJ.js → store-CYcDJ2BI.js} +1 -1
  62. package/dist/ui/assets/{store-I-VVSiCJ.js → store-DHI68ltt.js} +1 -1
  63. package/dist/ui/assets/{sudo-ckkoCMkh.js → sudo-DnMgeNx-.js} +1 -1
  64. package/dist/ui/assets/{upgrade-detection-krx52_Jm.js → upgrade-detection-DXI2D0Qu.js} +1 -1
  65. package/dist/ui/assets/{wc-extension-DBzo8_-8.js → wc-extension-Ck0fOjXh.js} +2 -2
  66. package/dist/ui/assets/{wc-follower-PjL_sC10.js → wc-follower-D5V1JgFP.js} +3 -3
  67. package/dist/ui/assets/{wc-live-B2InLYR8.js → wc-live-5T_4ztZ1.js} +4 -4
  68. package/dist/ui/assets/{wc-nav-FErDdNiD.js → wc-nav-hINhT65d.js} +2 -2
  69. package/dist/ui/assets/{wc-onboarding-h9yLj215.js → wc-onboarding-Boca2a-C.js} +2 -2
  70. package/dist/ui/assets/{wc-placeholder-DTJHVFYJ.js → wc-placeholder-DJLRUk_N.js} +2 -2
  71. package/dist/ui/assets/{wc-settings-DYhwUVMt.js → wc-settings-BBqg7iUm.js} +2 -2
  72. package/dist/ui/assets/{wc-shell-pKA-DwAj.js → wc-shell-Du9hZ_z9.js} +2 -2
  73. package/dist/ui/assets/{wc-sprinkles-S2V-1GSY.js → wc-sprinkles-BuVmgJFq.js} +2 -2
  74. package/dist/ui/assets/{wc-tray-Bft2lesl.js → wc-tray-BQVFWVJw.js} +2 -2
  75. package/dist/ui/assets/{xai-grok-CFp21916.js → xai-grok-BFcEaAjX.js} +1 -1
  76. package/dist/ui/assets/{xai-grok-ep0KvdW5.js → xai-grok-kdgIVAT-.js} +1 -1
  77. package/dist/ui/index.html +6 -6
  78. package/dist/ui/packages/webapp/index.html +6 -6
  79. package/package.json +1 -1
  80. package/dist/ui/assets/SKILL-C64EeuQq.js +0 -1
  81. package/dist/ui/assets/provider-store-access-D0NM6sJk.js +0 -1
  82. package/dist/ui/assets/slicc-version-CcnO6Df2.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-rNbxX5Js.js";import{a as l,i as u,o as d,r as f,t as p}from"./proxied-fetch-Co-pb0x0.js";import{a as m,i as h,n as g,r as _,s as v,t as y}from"./src-CcFD5QfS.js";import{$t as b,An as x,At as S,Bt as C,Cn as w,Ct as T,D as E,Dn as D,Dt as ee,E as te,En as ne,Et as re,Fn as O,Ft as ie,Gt as ae,Ht as oe,In as se,It as ce,Jt as le,Kt as ue,L as de,Ln as k,Lt as fe,M as A,Mn as j,Mt as pe,Nn as me,Nt as he,On as ge,Ot as _e,Pn as ve,Pt as ye,Q as be,Qt as M,R as N,Rn as xe,Rt as Se,Sn as P,St as Ce,Tn as F,Tt as we,Ut as I,V as L,Vt as Te,Wt as Ee,X as De,Xt as Oe,Y as R,Yt as ke,Z as Ae,Zt as je,_n as Me,_t as Ne,an as Pe,at as Fe,bn as Ie,bt as Le,cn as Re,ct as ze,dn as Be,dt as Ve,en as He,et as Ue,fn as z,ft as We,gn as eee,gt as Ge,h as Ke,hn as qe,ht as Je,in as Ye,it as Xe,jn as Ze,jt as Qe,kn as $e,kt as et,ln as tt,lt as nt,m as rt,mn as it,mt as at,nn as tee,nt as ot,on as st,ot as ct,pn as lt,pt as ut,qt as dt,rn as ft,rt as pt,sn as mt,st as ht,tn as gt,tt as _t,un as vt,ut as yt,vn as B,vt as bt,w as xt,wn as St,wt as Ct,xn as wt,xt as Tt,yn as Et,yt as Dt,zt as Ot}from"./account-store-DcTHuaYs.js";import{t as kt}from"./runtime-env-DadgceZk.js";import{r as At}from"./binary-cache-bSOhqXB1.js";import{n as jt,r as Mt,t as Nt}from"./fetch-body-DDu_AU5I.js";import{a as Pt,i as Ft,n as It,o as Lt,r as Rt,s as zt,t as Bt}from"./api-endpoint-C00IT5T9.js";import{a as Vt,i as Ht,n as Ut,t as Wt}from"./path-utils-DNJG-zQf.js";import{a as Gt}from"./models-4WTk3EBD.js";import{d as Kt,o as qt}from"./claude-model-version-Csn7RPVg.js";import{t as Jt}from"./__vite-browser-external-5eBdwsFd.js";import{n as Yt,t as Xt}from"./mime-types-D7IV6i7k.js";import"./runtime-env-Dtj99aNH.js";import{t as Zt}from"./image-markers-CdcIBWOf.js";import{a as Qt,i as $t,r as en}from"./tool-ui-DRnUkp2g.js";import{A as tn,C as nn,D as rn,E as an,O as on,S as sn,T as nee,_ as cn,a as ln,b as un,c as dn,d as fn,f as pn,g as mn,h as hn,i as gn,k as _n,l as vn,m as yn,o as bn,p as xn,r as Sn,s as Cn,t as wn,u as Tn,v as En,w as Dn,x as On,y as kn}from"./key-BKGnJdkU.js";import{a as An,c as jn,i as Mn,l as Nn,o as Pn,r as Fn,s as In,t as Ln,u as Rn}from"./agent-message-to-chat-LqFvUGRI.js";import{a as zn,i as Bn,n as ree,o as Vn,r as iee,t as Hn}from"./backend-local-B6kc_FvN.js";import"./runtime-env-DVGQx9p3.js";import{t as Un}from"./types-idfTVsM8.js";import{a as aee,i as oee,n as see,o as cee,r as lee,s as Wn}from"./mount-Dip7rbI6.js";import{o as Gn}from"./mount-table-store-DrF_Ifaz.js";import{t as Kn}from"./remote-cache-JAv9sQH_.js";import{r as qn,t as Jn}from"./mount-recovery-DIFfyUcI.js";import{a as Yn,c as Xn,i as Zn,n as Qn,o as $n,r as er,s as tr}from"./lick-urls-DcXOqXGm.js";import{C as nr,D as rr,E as ir,S as ar,_ as or,a as sr,b as cr,d as lr,g as ur,h as dr,m as fr,n as pr,o as mr,r as hr,s as gr,t as _r,u as vr,w as yr,y as br}from"./db-DSIYsBgP.js";import{a as xr,i as Sr,n as Cr,r as wr}from"./tray-runtime-config-CVoPQrT2.js";import{n as Tr,r as Er,t as Dr}from"./slicc-version-CcnO6Df2.js";import{a as Or,c as kr,d as Ar,i as jr,l as Mr,n as Nr,o as Pr,s as Fr,t as Ir,u as Lr}from"./lick-manager-DFmMezV-.js";import{a as Rr,n as zr,r as Br}from"./fs-CZIZCIGv.js";import{a as Vr,c as V,d as Hr,f as Ur,i as Wr,l as Gr,n as Kr,o as qr,p as Jr,r as Yr,s as Xr,u as H}from"./cost-command-BQWpaecs.js";import{_ as uee,a as Zr,b as Qr,c as $r,d as dee,f as fee,g as pee,h as ei,i as mee,l as ti,m as ni,n as hee,o as gee,p as _ee,r as ri,s as vee,u as yee,v as ii,x as ai,y as oi}from"./skills-DoL_3MkV.js";import{n as bee,t as xee}from"./llm-session-id-BZyXP_j2.js";import{n as si,r as ci}from"./frozen-archive-format-CLzdz05B.js";import{n as li,r as ui}from"./derive-Do9C10kj.js";import{i as di,r as fi}from"./browser-2rCVqcqy.js";import{a as pi,i as mi,n as hi,r as gi,t as _i}from"./telemetry-BwapcULJ.js";import{n as vi,t as yi}from"./safe-buffer-B2wnAhUx.js";import"./global-db-DJXlpNui.js";import{_ as bi,a as xi,b as Si,c as Ci,d as wi,f as Ti,g as U,h as Ei,i as Di,l as Oi,m as ki,n as Ai,o as ji,p as Mi,r as Ni,s as Pi,t as Fi,u as Ii,v as Li,y as Ri}from"./state-DOBL8rDV.js";import{a as zi,i as Bi,r as Vi,t as Hi}from"./git-config-DA8M5e8O.js";import{a as Ui,c as Wi,i as Gi,o as Ki,r as qi,s as Ji,t as Yi}from"./script-catalog-Bt94D0RP.js";import{t as Xi}from"./process-manager-BkhAohXT.js";import{F as Zi,I as Qi,M as $i,P as ea,S as ta,_ as na,a as ra,b as ia,c as aa,d as oa,f as sa,g as ca,h as la,i as ua,j as da,l as fa,m as pa,n as ma,o as ha,p as ga,r as _a,s as va,t as ya,u as ba,v as xa,w as Sa,x as Ca,y as wa}from"./shared-BzvvjAZt.js";import{n as Ta,t as Ea}from"./esbuild-wasm-DUOZmSly.js";import{n as Da,t as Oa}from"./wasm-compiler-Ct7QZURL.js";import{_ as ka,a as Aa,c as ja,f as Ma,g as Na,h as Pa,l as Fa,m as Ia,n as La,p as Ra,r as za,u as Ba,v as Va,y as Ha}from"./github-zip-CIvQnVWw.js";import{a as Ua,c as Wa,d as Ga,f as Ka,i as qa,l as Ja,n as Ya,o as Xa,p as Za,r as Qa,s as $a,u as eo}from"./github-install-teuMA0AB.js";import{n as to,t as no}from"./magick-wasm-BpzBj-21.js";import{t as ro}from"./permissions-surface-registry-BqPdUk9w.js";import{a as io,c as ao,d as oo,f as so,i as co,l as lo,n as uo,o as fo,p as po,r as mo,s as ho,t as go,u as _o}from"./installer-CufDPCfO.js";import{t as vo}from"./local-llm-BOag0PRI.js";import{t as yo}from"./client-DVC0x03n.js";import{t as bo}from"./redirect-uri-BYheNl-Q.js";var xo=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 So(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 Co=r(`cdp`);var wo=class{ws=null;nextId=1;_superseded=!1;pending=new xo;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,Co.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Co.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(),Co.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),Co.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 So(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;Co.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Co.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;Co.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,Co.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):Co.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 To=r(`har-recorder`);var See=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}`),To.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=>{To.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 Cee(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return To.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 To.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)),To.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 To.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 Cee(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){To.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return To.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}const Eo=`(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-CU4-75kP.js";import{a as l,i as u,o as d,r as f,t as p}from"./proxied-fetch-Co-pb0x0.js";import{a as m,i as h,n as g,r as _,s as v,t as y}from"./src-CcFD5QfS.js";import{$t as b,An as x,At as S,Bt as C,Cn as w,Ct as T,D as E,Dn as D,Dt as ee,E as te,En as ne,Et as re,Fn as O,Ft as ie,Gt as ae,Ht as oe,In as se,It as ce,Jt as le,Kt as ue,L as de,Ln as k,Lt as fe,M as A,Mn as j,Mt as pe,Nn as me,Nt as he,On as ge,Ot as _e,Pn as ve,Pt as ye,Q as be,Qt as M,R as N,Rn as xe,Rt as Se,Sn as P,St as Ce,Tn as F,Tt as we,Ut as I,V as L,Vt as Te,Wt as Ee,X as De,Xt as Oe,Y as R,Yt as ke,Z as Ae,Zt as je,_n as Me,_t as Ne,an as Pe,at as Fe,bn as Ie,bt as Le,cn as Re,ct as ze,dn as Be,dt as Ve,en as He,et as Ue,fn as z,ft as We,gn as eee,gt as Ge,h as Ke,hn as qe,ht as Je,in as Ye,it as Xe,jn as Ze,jt as Qe,kn as $e,kt as et,ln as tt,lt as nt,m as rt,mn as it,mt as at,nn as tee,nt as ot,on as st,ot as ct,pn as lt,pt as ut,qt as dt,rn as ft,rt as pt,sn as mt,st as ht,tn as gt,tt as _t,un as vt,ut as yt,vn as B,vt as bt,w as xt,wn as St,wt as Ct,xn as wt,xt as Tt,yn as Et,yt as Dt,zt as Ot}from"./account-store-DcZy--PI.js";import{t as kt}from"./runtime-env-DadgceZk.js";import{r as At}from"./binary-cache-bSOhqXB1.js";import{n as jt,r as Mt,t as Nt}from"./fetch-body-DDu_AU5I.js";import{a as Pt,i as Ft,n as It,o as Lt,r as Rt,s as zt,t as Bt}from"./api-endpoint-C00IT5T9.js";import{a as Vt,i as Ht,n as Ut,t as Wt}from"./path-utils-DNJG-zQf.js";import{a as Gt}from"./models-4WTk3EBD.js";import{d as Kt,o as qt}from"./claude-model-version-Csn7RPVg.js";import{t as Jt}from"./__vite-browser-external-5eBdwsFd.js";import{n as Yt,t as Xt}from"./mime-types-D7IV6i7k.js";import"./runtime-env-Dtj99aNH.js";import{t as Zt}from"./image-markers-CdcIBWOf.js";import{a as Qt,i as $t,r as en}from"./tool-ui-DRnUkp2g.js";import{A as tn,C as nn,D as rn,E as an,O as on,S as sn,T as nee,_ as cn,a as ln,b as un,c as dn,d as fn,f as pn,g as mn,h as hn,i as gn,k as _n,l as vn,m as yn,o as bn,p as xn,r as Sn,s as Cn,t as wn,u as Tn,v as En,w as Dn,x as On,y as kn}from"./key-BKGnJdkU.js";import{a as An,c as jn,i as Mn,l as Nn,o as Pn,r as Fn,s as In,t as Ln,u as Rn}from"./agent-message-to-chat-LqFvUGRI.js";import{a as zn,i as Bn,n as ree,o as Vn,r as iee,t as Hn}from"./backend-local-B6kc_FvN.js";import"./runtime-env-DVGQx9p3.js";import{t as Un}from"./types-idfTVsM8.js";import{a as aee,i as oee,n as see,o as cee,r as lee,s as Wn}from"./mount-BHIxcQBV.js";import{o as Gn}from"./mount-table-store-DrF_Ifaz.js";import{t as Kn}from"./remote-cache-JAv9sQH_.js";import{r as qn,t as Jn}from"./mount-recovery-CMDznnSn.js";import{a as Yn,c as Xn,i as Zn,n as Qn,o as $n,r as er,s as tr}from"./lick-urls-DcXOqXGm.js";import{C as nr,D as rr,E as ir,S as ar,_ as or,a as sr,b as cr,d as lr,g as ur,h as dr,m as fr,n as pr,o as mr,r as hr,s as gr,t as _r,u as vr,w as yr,y as br}from"./db-DSIYsBgP.js";import{a as xr,i as Sr,n as Cr,r as wr}from"./tray-runtime-config-CVoPQrT2.js";import{n as Tr,r as Er,t as Dr}from"./slicc-version-AaOP2MgH.js";import{a as Or,c as kr,d as Ar,i as jr,l as Mr,n as Nr,o as Pr,s as Fr,t as Ir,u as Lr}from"./lick-manager-DFmMezV-.js";import{a as Rr,n as zr,r as Br}from"./fs-BYhuqz39.js";import{a as Vr,c as V,d as Hr,f as Ur,i as Wr,l as Gr,n as Kr,o as qr,p as Jr,r as Yr,s as Xr,u as H}from"./cost-command-BQWpaecs.js";import{_ as uee,a as Zr,b as Qr,c as $r,d as dee,f as fee,g as pee,h as ei,i as mee,l as ti,m as ni,n as hee,o as gee,p as _ee,r as ri,s as vee,u as yee,v as ii,x as ai,y as oi}from"./skills-CjSmgIMj.js";import{n as bee,t as xee}from"./llm-session-id-BZyXP_j2.js";import{n as si,r as ci}from"./frozen-archive-format-CLzdz05B.js";import{n as li,r as ui}from"./derive-Do9C10kj.js";import{i as di,r as fi}from"./browser-2rCVqcqy.js";import{a as pi,i as mi,n as hi,r as gi,t as _i}from"./telemetry-BwapcULJ.js";import{n as vi,t as yi}from"./safe-buffer-B2wnAhUx.js";import"./global-db-DJXlpNui.js";import{_ as bi,a as xi,b as Si,c as Ci,d as wi,f as Ti,g as U,h as Ei,i as Di,l as Oi,m as ki,n as Ai,o as ji,p as Mi,r as Ni,s as Pi,t as Fi,u as Ii,v as Li,y as Ri}from"./state-C-QkG9RC.js";import{a as zi,i as Bi,r as Vi,t as Hi}from"./git-config-DA8M5e8O.js";import{a as Ui,c as Wi,i as Gi,o as Ki,r as qi,s as Ji,t as Yi}from"./script-catalog-Bt94D0RP.js";import{t as Xi}from"./process-manager-BkhAohXT.js";import{F as Zi,I as Qi,M as $i,P as ea,S as ta,_ as na,a as ra,b as ia,c as aa,d as oa,f as sa,g as ca,h as la,i as ua,j as da,l as fa,m as pa,n as ma,o as ha,p as ga,r as _a,s as va,t as ya,u as ba,v as xa,w as Sa,x as Ca,y as wa}from"./shared-BzvvjAZt.js";import{n as Ta,t as Ea}from"./esbuild-wasm-DUOZmSly.js";import{n as Da,t as Oa}from"./wasm-compiler-Ct7QZURL.js";import{_ as ka,a as Aa,c as ja,f as Ma,g as Na,h as Pa,l as Fa,m as Ia,n as La,p as Ra,r as za,u as Ba,v as Va,y as Ha}from"./github-zip-BtBW41Sy.js";import{a as Ua,c as Wa,d as Ga,f as Ka,i as qa,l as Ja,n as Ya,o as Xa,p as Za,r as Qa,s as $a,u as eo}from"./github-install-dG6nbsuB.js";import{n as to,t as no}from"./magick-wasm-BpzBj-21.js";import{t as ro}from"./permissions-surface-registry-BqPdUk9w.js";import{a as io,c as ao,d as oo,f as so,i as co,l as lo,n as uo,o as fo,p as po,r as mo,s as ho,t as go,u as _o}from"./installer-CufDPCfO.js";import{t as vo}from"./local-llm-D9Nfa9d2.js";import{t as yo}from"./client-DVC0x03n.js";import{t as bo}from"./redirect-uri-BHJJZEAC.js";var xo=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 So(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 Co=r(`cdp`);var wo=class{ws=null;nextId=1;_superseded=!1;pending=new xo;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,Co.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Co.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(),Co.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),Co.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 So(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;Co.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Co.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;Co.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,Co.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):Co.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 To=r(`har-recorder`);var See=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}`),To.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=>{To.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 Cee(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return To.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 To.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)),To.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 To.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 Cee(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){To.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return To.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}const Eo=`(function() {
2
2
  'use strict';
3
3
 
4
4
  // ===== DOM Utilities =====
@@ -868,7 +868,7 @@ import{i as e,n as t,t as n}from"./rolldown-runtime-Dd_uD5pT.js";import{t as r}f
868
868
  } catch(e) {
869
869
  return { role: 'RootWebArea', name: '', description: 'Error: ' + (e.message || String(e)) };
870
870
  }
871
- })()`;function Do(e,t=``){if(e==null)return t;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return JSON.stringify(e)??t}catch{return String(e)}}function wee(e){try{let t=atob(e.slice(0,48));return(t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19))>>>0}catch{return 0}}const Oo=r(`browser-api`);function ko(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var Tee=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;_frameContextCache=new Map;_mainWorldContextCache=new Map;_tabLock=Promise.resolve();_onSessionChange;_lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.client.send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),Oo.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){Oo.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=e.sessionId;if(typeof t==`string`&&t!==this.sessionId)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this._mainWorldContextCache.set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=e.sessionId;if(typeof t==`string`&&t!==this.sessionId)return;let n=e.executionContextId;if(typeof n==`number`)for(let[e,t]of this._mainWorldContextCache)t===n&&this._mainWorldContextCache.delete(e)};handleExecutionContextsCleared=e=>{let t=e.sessionId;(typeof t!=`string`||t===this.sessionId)&&this._mainWorldContextCache.clear()};constructor(e){this.client=e??new wo,this.localClient=this.client,this.addDialogListener(this.client),this.addExecutionContextListeners(this.client)}getTransport(){return this.client}createHarRecorder(e,t=this.client){return new See(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t){let n,r=new Promise(e=>{n=e}),i=this._tabLock;this._tabLock=r,await i;try{return await t(await this.attachToPage(e))}finally{n()}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){this._lastConnectOptions=e?{...e}:{},await this.client.connect({url:e?.url??ko(),timeout:e?.timeout,...e?.protocols===void 0?{}:{protocols:e.protocols}}),this.supersededNotified=!1}primeConnectOptions(e){this._lastConnectOptions=e?{...e}:{}}setCdpSupersededHandler(e){this.supersededHandler=e}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let t=this.trayTargetProvider.createRemoteTransport(n,r);try{await t.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}this.attachedTargetId===e&&(this.remoteTargetInfo&&=(this.setClient(this.localClient),null),this.sessionId=null,this.attachedTargetId=null);return}}await this.localClient.send(`Target.closeTarget`,{targetId:e}),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disconnect(){this.sessionId=null,this.attachedTargetId=null,this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){if(await this.ensureConnected(),this.sessionId&&this.attachedTargetId===e)return this.sessionId;if(this._frameContextCache.clear(),this._mainWorldContextCache.clear(),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let t=this.trayTargetProvider.createRemoteTransport(n,r);this.setClient(t),this.remoteTargetInfo={runtimeId:n,localTargetId:r};let i=await this.client.send(`Target.attachToTarget`,{targetId:r,flatten:!0});return this.sessionId=i.sessionId,this.attachedTargetId=e,await this.client.send(`Page.enable`,{},this.sessionId),this._onSessionChange?.(this.sessionId,this.client),this.sessionId}}this.remoteTargetInfo&&=(this.trayTargetProvider?.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),null),await this.ensureLocalConnected();let t=await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0});return this.sessionId=t.sessionId,this.attachedTargetId=e,await this.localClient.send(`Page.enable`,{},this.sessionId),this._onSessionChange?.(this.sessionId,this.localClient),this.sessionId}async detach(){if(this.sessionId){try{await this.client.send(`Target.detachFromTarget`,{sessionId:this.sessionId})}catch{}this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null),this.sessionId=null,this.attachedTargetId=null}}async navigate(e){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Page.enable`,{},this.sessionId);let t=this.client.once(`Page.loadEventFired`);await this.client.send(`Page.navigate`,{url:e},this.sessionId),await t}async bringToFront(){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Page.bringToFront`,{},this.sessionId??void 0)}async wakeCaptureAndRestoreFocus(e){let t=this.getAttachedTargetId(),n=await this.findFocusedLocalPage(t).catch(()=>null);t&&await this.attachToPage(t);try{return await this.client.send(`Page.bringToFront`,{},this.sessionId),await this.client.send(`Page.captureScreenshot`,e,this.sessionId)}finally{if(n&&t)try{await this.attachToPage(n),await this.client.send(`Page.bringToFront`,{},this.sessionId),await this.attachToPage(t)}catch{}}}async findFocusedLocalPage(e){let t=await this.listPages();for(let n of t)if(!(!n.targetId||n.targetId===e)&&!n.targetId.includes(`:`))try{if(await this.attachToPage(n.targetId),await this.evaluate(`document.hasFocus()`)===!0)return n.targetId}catch{}return null}async screenshot(e){await this.ensureConnected(),this.ensureAttached();try{let t={format:e?.format??`png`,captureBeyondViewport:!!(e?.clip||e?.fullPage)};if(e?.quality!==void 0&&(t.quality=e.quality),e?.clip||e?.fullPage){let n=0,r=0;try{await this.client.send(`Runtime.enable`,{},this.sessionId);let e=await this.client.send(`Runtime.evaluate`,{expression:`JSON.stringify({ w: window.innerWidth, h: document.documentElement.scrollHeight })`,returnByValue:!0},this.sessionId),t=JSON.parse(e.result?.value??`{}`);n=t.w??0,r=t.h??0}catch(e){Oo.warn(`fullPage: failed to evaluate scroll dimensions, falling back to viewport`,e)}t.clip=e?.clip?{...e.clip,scale:e.clip.scale??1}:{x:0,y:0,width:n||1280,height:r||800,scale:1}}let n;try{n=await this.client.send(`Page.captureScreenshot`,t,this.sessionId)}catch(r){if(e?.foregroundFallback===!1)throw r;n=await this.wakeCaptureAndRestoreFocus(t)}let r=n.data;return e?.maxWidth&&(r=await this._applyMaxWidth(r,e.maxWidth,t)),r}finally{}}async _applyMaxWidth(e,t,n){let r=wee(e);if(!r||r<=t)return e;let i=t/r,a=n.clip;if(a)a.scale=i;else{let e=1280,t=800;try{await this.client.send(`Runtime.enable`,{},this.sessionId);let n=await this.client.send(`Runtime.evaluate`,{expression:`JSON.stringify({w:window.innerWidth,h:window.innerHeight})`,returnByValue:!0},this.sessionId),r=JSON.parse(n.result?.value??`{}`);e=r.w||1280,t=r.h||800}catch{}n.clip={x:0,y:0,width:e,height:t,scale:i}}n.captureBeyondViewport=!0;try{return(await this.client.send(`Page.captureScreenshot`,n,this.sessionId)).data}catch(t){return Oo.warn(`maxWidth re-capture failed, returning original`,t),e}}async evaluate(e,t){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Runtime.enable`,{},this.sessionId);let n=await this.client.send(`Runtime.evaluate`,{expression:e,awaitPromise:t?.awaitPromise??!0,returnByValue:t?.returnByValue??!0},this.sessionId),r=n.exceptionDetails;if(r){let e=r.exception?.description??r.text;throw Error(`Evaluation failed: ${e}`)}return n.result.value}async click(e,t=0){await this.ensureConnected(),this.ensureAttached();let n=await this.boundingBox(e);if(!n)throw Error(`Element not found: ${e}`);let r=n.x+n.width/2,i=n.y+n.height/2;await this.client.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r,y:i,button:`left`,clickCount:1,modifiers:t},this.sessionId),await this.client.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r,y:i,button:`left`,clickCount:1,modifiers:t},this.sessionId)}async type(e){await this.ensureConnected(),this.ensureAttached();for(let t of e)await this.client.send(`Input.dispatchKeyEvent`,{type:`keyDown`,text:t},this.sessionId),await this.client.send(`Input.dispatchKeyEvent`,{type:`keyUp`,text:t},this.sessionId)}async insertText(e){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Input.insertText`,{text:e},this.sessionId)}async waitForSelector(e,t){await this.ensureConnected(),this.ensureAttached();let n=t?.timeout??3e4,r=t?.interval??100,i=Date.now();for(;Date.now()-i<n;){if(await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await new Promise(e=>setTimeout(e,r))}throw Error(`waitForSelector timed out after ${n}ms: ${e}`)}async getAccessibilityTree(){await this.ensureConnected(),this.ensureAttached();let e=await this.evaluate(Eo,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=jo(e);try{let e=(await this.client.send(`Accessibility.getFullAXTree`,{},this.sessionId)).nodes;Array.isArray(e)&&Ao(t,Eee(e))}catch{}return t}async clickByBackendNodeId(e,t=0){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`DOM.enable`,{},this.sessionId),await this.client.send(`Runtime.enable`,{},this.sessionId);let n=(await this.client.send(`DOM.resolveNode`,{backendNodeId:e},this.sessionId)).object;if(!n?.objectId)throw Error(`Could not resolve backend node ${e} to a DOM element`);let r=(await this.client.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
871
+ })()`;function Do(e,t=``){if(e==null)return t;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return JSON.stringify(e)??t}catch{return String(e)}}function wee(e){try{let t=atob(e.slice(0,48));return(t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19))>>>0}catch{return 0}}const Oo=r(`browser-api`);function ko(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var Tee=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;_frameContextCache=new Map;_mainWorldContextCache=new Map;_tabLock=Promise.resolve();_viewportOverrides=new Map;_tabLockQueueDepth=0;_tabLockTotalWaitMs=0;_tabLockAcquisitions=0;_onSessionChange;_lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.client.send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),Oo.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){Oo.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=e.sessionId;if(typeof t==`string`&&t!==this.sessionId)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this._mainWorldContextCache.set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=e.sessionId;if(typeof t==`string`&&t!==this.sessionId)return;let n=e.executionContextId;if(typeof n==`number`)for(let[e,t]of this._mainWorldContextCache)t===n&&this._mainWorldContextCache.delete(e)};handleExecutionContextsCleared=e=>{let t=e.sessionId;(typeof t!=`string`||t===this.sessionId)&&this._mainWorldContextCache.clear()};constructor(e){this.client=e??new wo,this.localClient=this.client,this.addDialogListener(this.client),this.addExecutionContextListeners(this.client)}getTransport(){return this.client}createHarRecorder(e,t=this.client){return new See(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t){let n,r=new Promise(e=>{n=e}),i=this._tabLock;this._tabLock=r,this._tabLockQueueDepth+=1;let a=Date.now();await i,this._tabLockTotalWaitMs+=Date.now()-a,this._tabLockAcquisitions+=1;try{return await t(await this.attachToPage(e))}finally{--this._tabLockQueueDepth,n()}}getTabLockStats(){return{queueDepth:this._tabLockQueueDepth,totalWaitMs:this._tabLockTotalWaitMs,acquisitions:this._tabLockAcquisitions}}async setViewportOverride(e,t,n){let r=await this.attachToPage(e);await this.client.send(`Emulation.setDeviceMetricsOverride`,{width:t,height:n,deviceScaleFactor:1,mobile:!1},r),this._viewportOverrides.set(e,{width:t,height:n})}async reapplyViewportOverride(e,t){let n=this._viewportOverrides.get(e);if(n)try{await this.client.send(`Emulation.setDeviceMetricsOverride`,{width:n.width,height:n.height,deviceScaleFactor:1,mobile:!1},t)}catch(t){Oo.warn(`Failed to re-apply viewport override on re-attach`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){this._lastConnectOptions=e?{...e}:{},await this.client.connect({url:e?.url??ko(),timeout:e?.timeout,...e?.protocols===void 0?{}:{protocols:e.protocols}}),this.supersededNotified=!1}primeConnectOptions(e){this._lastConnectOptions=e?{...e}:{}}setCdpSupersededHandler(e){this.supersededHandler=e}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this._viewportOverrides.delete(e),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let t=this.trayTargetProvider.createRemoteTransport(n,r);try{await t.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}this.attachedTargetId===e&&(this.remoteTargetInfo&&=(this.setClient(this.localClient),null),this.sessionId=null,this.attachedTargetId=null);return}}await this.localClient.send(`Target.closeTarget`,{targetId:e}),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disconnect(){this.sessionId=null,this.attachedTargetId=null,this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){if(await this.ensureConnected(),this.sessionId&&this.attachedTargetId===e)return this.sessionId;if(this._frameContextCache.clear(),this._mainWorldContextCache.clear(),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let t=this.trayTargetProvider.createRemoteTransport(n,r);this.setClient(t),this.remoteTargetInfo={runtimeId:n,localTargetId:r};let i=await this.client.send(`Target.attachToTarget`,{targetId:r,flatten:!0});return this.sessionId=i.sessionId,this.attachedTargetId=e,await this.client.send(`Page.enable`,{},this.sessionId),await this.reapplyViewportOverride(e,this.sessionId),this._onSessionChange?.(this.sessionId,this.client),this.sessionId}}this.remoteTargetInfo&&=(this.trayTargetProvider?.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),null),await this.ensureLocalConnected();let t=await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0});return this.sessionId=t.sessionId,this.attachedTargetId=e,await this.localClient.send(`Page.enable`,{},this.sessionId),await this.reapplyViewportOverride(e,this.sessionId),this._onSessionChange?.(this.sessionId,this.localClient),this.sessionId}async detach(){if(this.sessionId){try{await this.client.send(`Target.detachFromTarget`,{sessionId:this.sessionId})}catch{}this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null),this.sessionId=null,this.attachedTargetId=null}}async navigate(e){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Page.enable`,{},this.sessionId);let t=this.client.once(`Page.loadEventFired`);await this.client.send(`Page.navigate`,{url:e},this.sessionId),await t}async bringToFront(){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Page.bringToFront`,{},this.sessionId??void 0)}async wakeCaptureAndRestoreFocus(e){let t=this.getAttachedTargetId(),n=await this.findFocusedLocalPage(t).catch(()=>null);t&&await this.attachToPage(t);try{return await this.client.send(`Page.bringToFront`,{},this.sessionId),await this.client.send(`Page.captureScreenshot`,e,this.sessionId)}finally{if(n&&t)try{await this.attachToPage(n),await this.client.send(`Page.bringToFront`,{},this.sessionId),await this.attachToPage(t)}catch{}}}async findFocusedLocalPage(e){let t=await this.listPages();for(let n of t)if(!(!n.targetId||n.targetId===e)&&!n.targetId.includes(`:`))try{if(await this.attachToPage(n.targetId),await this.evaluate(`document.hasFocus()`)===!0)return n.targetId}catch{}return null}async screenshot(e){await this.ensureConnected(),this.ensureAttached();try{let t={format:e?.format??`png`,captureBeyondViewport:!!(e?.clip||e?.fullPage)};if(e?.quality!==void 0&&(t.quality=e.quality),e?.clip||e?.fullPage){let n=0,r=0;try{await this.client.send(`Runtime.enable`,{},this.sessionId);let e=await this.client.send(`Runtime.evaluate`,{expression:`JSON.stringify({ w: window.innerWidth, h: document.documentElement.scrollHeight })`,returnByValue:!0},this.sessionId),t=JSON.parse(e.result?.value??`{}`);n=t.w??0,r=t.h??0}catch(e){Oo.warn(`fullPage: failed to evaluate scroll dimensions, falling back to viewport`,e)}t.clip=e?.clip?{...e.clip,scale:e.clip.scale??1}:{x:0,y:0,width:n||1280,height:r||800,scale:1}}let n;try{n=await this.client.send(`Page.captureScreenshot`,t,this.sessionId)}catch(r){if(e?.foregroundFallback===!1)throw r;n=await this.wakeCaptureAndRestoreFocus(t)}let r=n.data;return e?.maxWidth&&(r=await this._applyMaxWidth(r,e.maxWidth,t)),r}finally{}}async _applyMaxWidth(e,t,n){let r=wee(e);if(!r||r<=t)return e;let i=t/r,a=n.clip;if(a)a.scale=i;else{let e=1280,t=800;try{await this.client.send(`Runtime.enable`,{},this.sessionId);let n=await this.client.send(`Runtime.evaluate`,{expression:`JSON.stringify({w:window.innerWidth,h:window.innerHeight})`,returnByValue:!0},this.sessionId),r=JSON.parse(n.result?.value??`{}`);e=r.w||1280,t=r.h||800}catch{}n.clip={x:0,y:0,width:e,height:t,scale:i}}n.captureBeyondViewport=!0;try{return(await this.client.send(`Page.captureScreenshot`,n,this.sessionId)).data}catch(t){return Oo.warn(`maxWidth re-capture failed, returning original`,t),e}}async evaluate(e,t){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Runtime.enable`,{},this.sessionId);let n=await this.client.send(`Runtime.evaluate`,{expression:e,awaitPromise:t?.awaitPromise??!0,returnByValue:t?.returnByValue??!0},this.sessionId),r=n.exceptionDetails;if(r){let e=r.exception?.description??r.text;throw Error(`Evaluation failed: ${e}`)}return n.result.value}async click(e,t=0){await this.ensureConnected(),this.ensureAttached();let n=await this.boundingBox(e);if(!n)throw Error(`Element not found: ${e}`);let r=n.x+n.width/2,i=n.y+n.height/2;await this.client.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r,y:i,button:`left`,clickCount:1,modifiers:t},this.sessionId),await this.client.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r,y:i,button:`left`,clickCount:1,modifiers:t},this.sessionId)}async type(e){await this.ensureConnected(),this.ensureAttached();for(let t of e)await this.client.send(`Input.dispatchKeyEvent`,{type:`keyDown`,text:t},this.sessionId),await this.client.send(`Input.dispatchKeyEvent`,{type:`keyUp`,text:t},this.sessionId)}async insertText(e){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`Input.insertText`,{text:e},this.sessionId)}async waitForSelector(e,t){await this.ensureConnected(),this.ensureAttached();let n=t?.timeout??3e4,r=t?.interval??100,i=Date.now();for(;Date.now()-i<n;){if(await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await new Promise(e=>setTimeout(e,r))}throw Error(`waitForSelector timed out after ${n}ms: ${e}`)}async getAccessibilityTree(){await this.ensureConnected(),this.ensureAttached();let e=await this.evaluate(Eo,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=jo(e);try{let e=(await this.client.send(`Accessibility.getFullAXTree`,{},this.sessionId)).nodes;Array.isArray(e)&&Ao(t,Eee(e))}catch{}return t}async clickByBackendNodeId(e,t=0){await this.ensureConnected(),this.ensureAttached(),await this.client.send(`DOM.enable`,{},this.sessionId),await this.client.send(`Runtime.enable`,{},this.sessionId);let n=(await this.client.send(`DOM.resolveNode`,{backendNodeId:e},this.sessionId)).object;if(!n?.objectId)throw Error(`Could not resolve backend node ${e} to a DOM element`);let r=(await this.client.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
872
872
  this.scrollIntoView({ block: 'center', inline: 'center' });
873
873
  const r = this.getBoundingClientRect();
874
874
  return { x: r.x, y: r.y, width: r.width, height: r.height };
@@ -1005,7 +1005,7 @@ Rules:
1005
1005
  - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`}],timestamp:Date.now()},a=await qt(e.model,{systemPrompt:r,messages:[i]},{apiKey:e.apiKey,maxTokens:4096,headers:e.headers,signal:e.signal});if(a.stopReason===`error`)throw Error(`Restructure call failed: ${a.errorMessage||`Unknown error`}`);let o=a.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
1006
1006
  `).trim();if(!o)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
1007
1007
  `)?``:`
1008
- `}${o}\n`}async function lS(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??rS,n=``;try{let r=await e.vfs.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{return{restructured:!1,reason:`missing-file`}}let r=await sS(e.vfs),i=aS(r),a=i*1.25;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};nS.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await cS({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),nS.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return nS.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const uS=`focus`,dS={type:`leaf`,surfaceId:`chat`};function fS(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const pS={focus:{name:`focus`,tree:fS({left:dS},{left:3,middle:1})}};function mS(e){return pS[e]??null}const hS=r(`skills`),gS=Object.assign({"/packages/vfs-root/AGENTS.md":()=>import(`./CLAUDE-CFY4V2wt.js`).then(e=>e.default),"/packages/vfs-root/CLAUDE.md":()=>import(`./CLAUDE-CFY4V2wt.js`).then(e=>e.default),"/packages/vfs-root/etc/slicc/keys.json":()=>import(`./keys-0y1eyH9C.js`).then(e=>e.default),"/packages/vfs-root/shared/CLAUDE.md":()=>import(`./CLAUDE-Bio4HPGK.js`).then(e=>e.default),"/packages/vfs-root/shared/MEMORY.md":()=>import(`./MEMORY-CJ-KH_KB.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/connect-llm.shtml":()=>import(`./connect-llm-FevTa-aV.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/welcome.shtml":()=>import(`./welcome-CyCMJDqG.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/automation/SKILL.md":()=>import(`./SKILL-DLXzwsY4.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/biome/SKILL.md":()=>import(`./SKILL-BNnF2azP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/cherry/SKILL.md":()=>import(`./SKILL-BTVvFyRd.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/delegation/SKILL.md":()=>import(`./SKILL-D6a6ZdMA.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/SKILL.md":()=>import(`./SKILL-FnBxPcDX.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/patterns.md":()=>import(`./patterns-ChiGbijt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dns/SKILL.md":()=>import(`./SKILL-BKyxMoME.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/handoff/SKILL.md":()=>import(`./SKILL-oOIS8LAm.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/image-processing/SKILL.md":()=>import(`./SKILL-Bd5ykLEh.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/meminfo/SKILL.md":()=>import(`./SKILL-DXIigmDy.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/mount/SKILL.md":()=>import(`./SKILL-D4YtbN6n.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-CNgFGd7Q.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-C64EeuQq.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-HEHb9hIB.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/jsh-runtime-extensions.md":()=>import(`./jsh-runtime-extensions-DO5wCezb.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/SKILL.md":()=>import(`./SKILL-Ch-cOl61.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/icon-example.md":()=>import(`./icon-example-LUkiEXyS.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/style-guide.md":()=>import(`./style-guide-Bgzsk7bf.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ssh/SKILL.md":()=>import(`./SKILL-DJ815vTN.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/theme/SKILL.md":()=>import(`./SKILL-Dh6a4Qu2.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/transcript-export/SKILL.md":()=>import(`./SKILL-CkfptFag.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/upgrade/SKILL.md":()=>import(`./SKILL-CcMg6eqt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/v86/SKILL.md":()=>import(`./SKILL-DMQtY0uF.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/welcome/SKILL.md":()=>import(`./SKILL-D40-t9w0.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/workflows/SKILL.md":()=>import(`./SKILL-Bt-RhG0L.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/SKILL.md":()=>import(`./SKILL-CED8RXQP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/x_search.jsh":()=>import(`./x_search-C-5p00-C.js`).then(e=>e.default)}),_S=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function vS(e){let t=e.split(`,`)[1],n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}const yS={};function bS(){let e={};for(let[t,n]of Object.entries(gS))e[t]=n;for(let[t,n]of Object.entries(_S))e[t]=async()=>vS(await n());for(let[t,n]of Object.entries(yS)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function xS(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){hS.debug(`Skipped shadowed runtime skill`,{name:n.metadata.name,path:n.path,winnerPath:t.get(n.metadata.name)?.path});continue}t.set(n.metadata.name,n)}return Array.from(t.values())}function SS(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{metadata:{},body:e};let[,n,r]=t,i={};for(let e of n.split(`
1008
+ `}${o}\n`}async function lS(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??rS,n=``;try{let r=await e.vfs.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{return{restructured:!1,reason:`missing-file`}}let r=await sS(e.vfs),i=aS(r),a=i*1.25;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};nS.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await cS({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),nS.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return nS.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const uS=`focus`,dS={type:`leaf`,surfaceId:`chat`};function fS(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const pS={focus:{name:`focus`,tree:fS({left:dS},{left:3,middle:1})}};function mS(e){return pS[e]??null}const hS=r(`skills`),gS=Object.assign({"/packages/vfs-root/AGENTS.md":()=>import(`./CLAUDE-CFY4V2wt.js`).then(e=>e.default),"/packages/vfs-root/CLAUDE.md":()=>import(`./CLAUDE-CFY4V2wt.js`).then(e=>e.default),"/packages/vfs-root/etc/slicc/keys.json":()=>import(`./keys-0y1eyH9C.js`).then(e=>e.default),"/packages/vfs-root/shared/CLAUDE.md":()=>import(`./CLAUDE-Bio4HPGK.js`).then(e=>e.default),"/packages/vfs-root/shared/MEMORY.md":()=>import(`./MEMORY-CJ-KH_KB.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/connect-llm.shtml":()=>import(`./connect-llm-FevTa-aV.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/welcome.shtml":()=>import(`./welcome-CyCMJDqG.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/automation/SKILL.md":()=>import(`./SKILL-DLXzwsY4.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/biome/SKILL.md":()=>import(`./SKILL-BNnF2azP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/cherry/SKILL.md":()=>import(`./SKILL-BTVvFyRd.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/delegation/SKILL.md":()=>import(`./SKILL-D6a6ZdMA.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/SKILL.md":()=>import(`./SKILL-FnBxPcDX.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/patterns.md":()=>import(`./patterns-ChiGbijt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dns/SKILL.md":()=>import(`./SKILL-BKyxMoME.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/handoff/SKILL.md":()=>import(`./SKILL-oOIS8LAm.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/image-processing/SKILL.md":()=>import(`./SKILL-Bd5ykLEh.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/meminfo/SKILL.md":()=>import(`./SKILL-DXIigmDy.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/mount/SKILL.md":()=>import(`./SKILL-D4YtbN6n.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-CNgFGd7Q.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-DsJ4mys3.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-HEHb9hIB.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/jsh-runtime-extensions.md":()=>import(`./jsh-runtime-extensions-DO5wCezb.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/SKILL.md":()=>import(`./SKILL-Ch-cOl61.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/icon-example.md":()=>import(`./icon-example-LUkiEXyS.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/style-guide.md":()=>import(`./style-guide-Bgzsk7bf.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ssh/SKILL.md":()=>import(`./SKILL-DJ815vTN.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/theme/SKILL.md":()=>import(`./SKILL-Dh6a4Qu2.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/transcript-export/SKILL.md":()=>import(`./SKILL-CkfptFag.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/upgrade/SKILL.md":()=>import(`./SKILL-CcMg6eqt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/v86/SKILL.md":()=>import(`./SKILL-DMQtY0uF.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/welcome/SKILL.md":()=>import(`./SKILL-D40-t9w0.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/workflows/SKILL.md":()=>import(`./SKILL-Bt-RhG0L.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/SKILL.md":()=>import(`./SKILL-CED8RXQP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/x_search.jsh":()=>import(`./x_search-C-5p00-C.js`).then(e=>e.default)}),_S=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function vS(e){let t=e.split(`,`)[1],n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}const yS={};function bS(){let e={};for(let[t,n]of Object.entries(gS))e[t]=n;for(let[t,n]of Object.entries(_S))e[t]=async()=>vS(await n());for(let[t,n]of Object.entries(yS)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function xS(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){hS.debug(`Skipped shadowed runtime skill`,{name:n.metadata.name,path:n.path,winnerPath:t.get(n.metadata.name)?.path});continue}t.set(n.metadata.name,n)}return Array.from(t.values())}function SS(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{metadata:{},body:e};let[,n,r]=t,i={};for(let e of n.split(`
1009
1009
  `)){let t=e.match(/^(\w[\w-]*):\s*(.*)$/);if(!t)continue;let[,n,r]=t,a=r.trim();switch(n){case`name`:i.name=a;break;case`description`:i.description=a;break;case`allowed-tools`:i.allowedTools=a.split(`,`).map(e=>e.trim());break;case`layout`:i.layout=a;break;case`theme`:i.theme=a}}return{metadata:i,body:r}}async function CS(e,t){let n=await wS(e,t),r=await TS(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=xS([...i,...r,...a]);return hS.info(`Skills loaded`,{count:o.length,dir:t}),o}async function wS(e,t){let n=await hee(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=SS(await e.readTextFile(t.skillFilePath)),a=n.name||t.name;r.push({metadata:{name:a,description:n.description||t.description||``,allowedTools:n.allowedTools},content:i,path:t.skillFilePath,source:t.source}),hS.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{hS.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function TS(e,t){let n=[];try{let r=await e.readDir(t);for(let i of r)if(i.type===`file`&&i.name.endsWith(`.md`)){let r=`${t}/${i.name}`;try{let t=await e.readFile(r,{encoding:`utf-8`}),{metadata:a,body:o}=SS(typeof t==`string`?t:new TextDecoder().decode(t)),s=a.name||i.name.replace(`.md`,``);n.push({metadata:{name:s,description:a.description||``,allowedTools:a.allowedTools},content:o,path:r}),hS.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{hS.debug(`Standalone skills directory not found`,{dir:t})}return n}function ES(e){return e.length===0?``:`
1010
1010
  ---
1011
1011
  AVAILABLE SKILLS
@@ -1653,8 +1653,8 @@ except BaseException:
1653
1653
  `)}}function Zz(e,t,n){let r=!!e.env?.NO_COLOR,i=!1,a=0,o=e=>{i=!0,a=e},s=$z(e.stdin??``,o),c=Vz(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:Qi},version:`v${Qi}`,platform:`linux`,arch:`x64`,cwd:()=>e.cwd,exit:e=>{let t=Number.isFinite(e)?Number(e):0;throw o(t),new Jz(t)},stdin:s,stdout:l,stderr:u},getDidCallProcessExit:()=>i,getExitCode:()=>a,recordExit:o}}var Qz=class extends nF.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 Jz){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 $z(e,t){return new Qz(e,t)}function eB(e){if(e===``)return[];let t=e.split(`
1654
1654
  `);return t[t.length-1]===``&&t.pop(),t.map(e=>e.endsWith(`\r`)?e.slice(0,-1):e)}function tB(e){if(typeof e==`string`)return e;if(e&&typeof e.read==`function`){let t=e.read();return typeof t==`string`?t:``}return``}function nB(e){return new TextDecoder(`utf-8`).decode(aP(e))}function rB(e){if(e&&typeof e.write==`function`)return e}var iB=class extends XP{terminal=!1;lines;cursor=0;closed=!1;flushScheduled=!1;output;onExit;constructor(e,t,n){super(),this.lines=eB(nB(tB(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 Jz&&this.onExit){this.closed=!0,this.onExit(e.code);return}throw e}}};function aB(e){let t=(t,n)=>{let r,i;if(t&&typeof t==`object`&&`input`in t){let e=t;r=e.input,i=rB(e.output)}else r=t,i=rB(n);if(r==null)throw TypeError(`readline.createInterface: an 'input' stream is required`);return new iB(r,i,e)},n=(...e)=>{let t=e[e.length-1];return typeof t==`function`&&queueMicrotask(()=>t()),!0},r={createInterface:t,Interface:iB,emitKeypressEvents:()=>void 0,cursorTo:n,moveCursor:n,clearLine:n,clearScreenDown:n};return{...r,promises:r}}var oB=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`?`: ${sB(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 sB(e){try{return JSON.stringify(e)}catch{return String(e)}}function cB(e){return new Promise(t=>setTimeout(t,e))}function lB(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 uB(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 dB(e){if(!e)return!1;let t=e.toLowerCase();return t.startsWith(`application/json`)||/[+/]json(;|$|\s)/.test(t)}function fB(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 pB(e){if(dB(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 mB(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 hB(e){let t=e.sleep??cB;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=lB(n.baseUrl,o,s.params),l=uB(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=mB(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 pB(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 pB(m).catch(()=>null);throw new oB(m.status,m.statusText,c,e)}let h=fB(m.headers.get(`retry-after`)),g=500*2**a;await t(h===null?g:h)}if(f){let e=await pB(f).catch(()=>null);throw new oB(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 gB(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 _B(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`,gB(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 vB(e,t){let n=t.cwd,r=async(t,r)=>{let i=r??{},a=await e.spawn(_B(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 yB(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 bB(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=yB(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 xB(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 SB(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 SB(e){if(typeof e==`string`||e instanceof URLSearchParams)return{body:e.toString()};if(e instanceof Blob)return{body:CB(new Uint8Array(await e.arrayBuffer())),defaultContentType:e.type||`application/octet-stream`};if(e instanceof ArrayBuffer)return{body:CB(new Uint8Array(e)),defaultContentType:`application/octet-stream`};if(ArrayBuffer.isView(e))return{body:CB(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 CB(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 wB(e){return{findTab:t=>e.call(`browser`,`findTab`,[EB(t)]),ensureTab:(t,n={})=>e.call(`browser`,`ensureTab`,[t,DB(n)]),eval:(t,n)=>e.call(`browser`,`eval`,[yB(t),TB(n,!1)]),evalAsync:(t,n)=>e.call(`browser`,`evalAsync`,[yB(t),TB(n,!0)]),cookie:(t,n)=>e.call(`browser`,`cookie`,[yB(t),n]),localStorage:(t,n)=>e.call(`browser`,`localStorage`,[yB(t),n]),fetch:(t,n,r={})=>Li(n,r).then(n=>e.call(`browser`,`evalAsync`,[yB(t),n])),websocket:bB(e)}}function TB(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 EB(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 DB(e){return e.matchUrl===void 0?{}:{matchUrl:e.matchUrl instanceof RegExp?e.matchUrl.source:e.matchUrl}}function OB(e){return e===`SIGKILL`?137:e===`SIGINT`?130:143}function kB(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:OB(t)}),Promise.resolve(!0)),stdin:{write:e=>{!s&&!u&&o.push(e)},end:()=>m()},done:p}}});return l.exec=l,l}function AB(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 jB(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function MB(e){return e==null?[]:Array.isArray(e)?e:[e]}function NB(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:jB(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,AB(r)]),sendFeatureReport:(t,r)=>e.call(`hid`,`sendFeatureReport`,[n,t,AB(r)]),receiveFeatureReport:async t=>jB((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 PB(e){return{list:async()=>(await e.call(`hid`,`list`,[])).map(t=>NB(e,t)),request:async t=>{let n=(await e.call(`hid`,`request`,[MB(t)]))[0];if(!n)throw Error(`No device selected.`);return NB(e,n)}}}function FB(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 IB=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 };`)}},LB=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=FB(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 IB(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 IB(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?.())}},RB=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 LB(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()}},zB=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 LB(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 RB(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 BB(e){let t=async t=>new zB(e),n=async(t,n)=>new zB(e);return{chromium:{launch:t,connect:n,connectOverCDP:n},firefox:{launch:t,connect:n},webkit:{launch:t,connect:n}}}const VB=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`]),HB={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 UB(e,t){let n=HB[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${n}`)}function WB(e){return{...e,time:Kz,fmt:IP,pool:Hz}}function GB(e,t){return e?.startsWith(`/`)?qz(e):t}function KB(e){return e.includes(`require`)||e.includes(`import`)}async function qB(e,t,n,r){return KB(t)?e.call(`module`,`buildGraph`,[t,GB(r,n),r]):{files:[],entryMap:{},edges:{},errors:{}}}function JB(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 YB(e){return{playwright:BB(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:$B(e,o)};let t=e.startsWith(`node:`)?e.slice(5):e,a=ZB(t,n,r,i,c);if(a.hit)return a;if(VB.has(t))throw UB(e,t);if(Zi.has(t))throw tV(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]):QB(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=qz(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`&&JB(o.exports),o.exports}return{require:e=>p(t.entryMap,e)}}function ZB(e,t,n,r,i){return e===`fs`||e===`fs/promises`?{hit:!0,value:t}:e===`path`?{hit:!0,value:tI}:e===`crypto`?{hit:!0,value:UF}: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:JP}:e===`assert/strict`?{hit:!0,value:qP}:e===`util`?{hit:!0,value:vF}:e===`events`?{hit:!0,value:ZP}:e===`os`?{hit:!0,value:WF}:e===`tty`?{hit:!0,value:nI}:e===`stream`?{hit:!0,value:nF}:e===`url`?{hit:!0,value:aI}:e===`zlib`?{hit:!0,value:zz}:e===`readline`&&i?{hit:!0,value:i}:e===`readline/promises`&&i?{hit:!0,value:i.promises}:{hit:!1}}function QB(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 $B(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 eV={http:` Use fetch() instead.`,https:` Use fetch() instead.`,crypto:` Use globalThis.crypto (Web Crypto API) instead.`};function tV(e,t){return Error(`require('${e}'): Node built-in '${t}' is not available in the browser environment.${eV[t]||``}`)}async function nV(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";
1655
1655
  `:``}${e}`);try{return await s(...a),0}catch(e){return e instanceof Jz?e.code:(n(`${e instanceof Error?e.stack??e.message:String(e)}\n`),1)}}function rV(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?AB(t.until):void 0,timeoutMs:t.timeoutMs}]),write:t=>e.call(`serial`,`write`,[n,AB(t)]),getSignals:()=>e.call(`serial`,`getSignals`,[n]),setSignals:t=>e.call(`serial`,`setSignals`,[n,t])}}function iV(e){return{list:async()=>(await e.call(`serial`,`list`,[])).map(t=>rV(e,t)),request:async t=>rV(e,await e.call(`serial`,`request`,[MB(t)]))}}function aV(e,t){let n=t.handle,r=e=>({status:e.status,data:jB(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,AB(r)]),transferIn:async(t,i)=>r(await e.call(`usb`,`transferIn`,[n,t,i])),transferOut:(t,r)=>e.call(`usb`,`transferOut`,[n,t,AB(r)])}}function oV(e){return{list:async()=>(await e.call(`usb`,`list`,[])).map(t=>aV(e,t)),request:async t=>aV(e,await e.call(`usb`,`request`,[MB(t)]))}}function sV(e){if(!e)return``;let t=e.lastIndexOf(`/`);return t<0?``:t===0?`/`:e.substring(0,t)}function cV(e){return/^[A-Za-z0-9_\-./:@]+$/.test(e)?e:`'`+e.replace(/'/g,`'\\''`)+`'`}function lV(e,t){return e===``?t:e===`/`?`/${t}`:`${e}/${t}`}function uV(e){let t=sV(e.argv[1]??``),n=lV(t,`references`),r=lV(t,`assets`),i=lV(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)+`
1656
- `),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 ${cV(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 dV=new Map,fV=new Map;function pV(e){let t=crypto.randomUUID();return dV.set(t,e),t}function mV(e){return dV.get(e)??null}function hV(e,t){if(!dV.has(e))return t.abort(),()=>{};let n=fV.get(e);return n||(n=new Set,fV.set(e,n)),n.add(t),()=>{let n=fV.get(e);n&&(n.delete(t),n.size===0&&fV.delete(e))}}function gV(e){dV.delete(e);let t=fV.get(e);if(t){fV.delete(e);for(let e of t)e.signal.aborted||e.abort()}}function _V(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 vV(e){let t=mV(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 _V(e)}}function yV(e){return`slicc-sync-fs-`+e}const bV=`sync-fs-ack`,xV=`sync-fs-res`,SV=6e5,CV=5e3,wV=`exec`;function TV(e){return e.channel===wV}function EV(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 DV(e,t){return Math.min(typeof e!=`number`||!Number.isFinite(e)||e<=0?t:e,SV)}async function OV(e){let t=mV(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=EV(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()},DV(e.timeoutMs,SV)),o=hV(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`}:_V(e)}finally{clearTimeout(a),o()}}function kV(e,t){return Object.assign(Error(`${e}: ${t}`),{code:e})}function AV(e){let t=MV(e);if(NV(t))return new Uint8Array(t.response);if(t.status>=200&&t.status<300)throw kV(`EIO`,e.label);PV(t,e.label)}function jV(e){let t=AV(e);try{return JSON.parse(new TextDecoder().decode(t))}catch{throw kV(`EIO`,e.label)}}function MV(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 kV(`EIO`,e.label)}return t}function NV(e){return e.status>=200&&e.status<300&&e.getResponseHeader(`x-slicc-fs`)===`1`}function PV(e,t){throw kV(e.getResponseHeader(`x-slicc-fs`)===`1`&&e.getResponseHeader(`x-slicc-fs-errno`)||`EIO`,t)}function FV(e){return(t,n,r)=>{let i=jV({method:`POST`,url:`/__slicc/exec-sync`,token:e,body:new TextEncoder().encode(JSON.stringify({...t,channel:wV})),timeoutMs:n+CV,label:r});if(!i||typeof i.stdout!=`string`||typeof i.stderr!=`string`||typeof i.exitCode!=`number`)throw kV(`EIO`,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}function IV(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 LV(e,t={}){let n=t.timeoutMs??12e4,{syncFs:r,fsBridge:i}=t,a=t.transport??FV(e);return{run(e,t={}){let o=r?.wasUsed()===!0&&i!==void 0;o&&IV(r,i);let s=`sync-exec bridge, '${Array.isArray(e)?e.join(` `):e}'`,c=DV(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 RV(e,t){return kV(e,`sync-fs bridge, '${t}'`)}function zV(e,t){let n=`/__slicc/fs-sync`+(e.startsWith(`/`)?e:`/${e}`).split(`/`).map(encodeURIComponent).join(`/`);return t?`${n}?op=${t}`:n}function BV(e,t={}){let n=t.timeoutMs??3e4;function r(t,r,i,a){return{method:t,url:zV(r,a),token:e,...i?{body:i}:{},timeoutMs:n,label:`sync-fs bridge, '${r}'`}}return{readFile(e){return AV(r(`GET`,e))},writeFile(e,t){AV(r(`POST`,e,t))},stat(e){let t=jV(r(`GET`,e,void 0,`stat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw RV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},lstat(e){let t=jV(r(`GET`,e,void 0,`lstat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw RV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},readdir(e){let t=jV(r(`GET`,e,void 0,`readdir`));if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw RV(`EIO`,e);return t},exists(e){let t=jV(r(`GET`,e,void 0,`exists`));if(typeof t!=`boolean`)throw RV(`EIO`,e);return t},mkdir(e){AV(r(`POST`,e,void 0,`mkdir`))},rm(e){AV(r(`POST`,e,void 0,`rm`))}}}const VV=new TextEncoder,HV=new TextDecoder;function UV(e){if(!e.ok)return{status:4,payload:VV.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:VV.encode(JSON.stringify(e.json))};default:return{status:3,payload:new Uint8Array}}}function WV(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(HV.decode(t))}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed json payload`}}case 4:try{let e=JSON.parse(HV.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 KV(){if(typeof SharedArrayBuffer>`u`||typeof Atomics>`u`)return!1;let e=globalThis.crossOriginIsolated;return e===void 0||e===!0}function qV(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 kV(`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 kV(`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 kV(`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 kV(`EIO`,a)}}finally{Atomics.store(r,0,0)}return WV(f,d)}}}function JV(e,t){return kV(e,`sync-sab bridge, '${t}'`)}function YV(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 JV(i.errno,r);return i}function i(e,t){let n=r(e,t);if(n.ok&&n.kind===`bytes`)return n.bytes;throw JV(`EIO`,t)}function a(e,t){let n=r(e,t);if(n.ok&&n.kind===`json`)return n.json;throw JV(`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(!YV(t))throw JV(`EIO`,e);return t},lstat:e=>{let t=a({op:`lstat`,path:e},e);if(!YV(t))throw JV(`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 JV(`EIO`,e);return t},exists:e=>{let t=a({op:`exists`,path:e},e);if(typeof t!=`boolean`)throw JV(`EIO`,e);return t},mkdir:e=>{r({op:`mkdir`,path:e},e)},rm:e=>{r({op:`rm`,path:e},e)}}}function ZV(e){return(t,n,r)=>{let i=e.call({...t,channel:wV},n+CV,r);if(!i.ok)throw kV(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 kV(`EIO`,r);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}}async function QV(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 rP(r)}function $V(e,t){if(e.syncFsToken)return e=>t(`[sync-fs] snapshot failed, sync metadata will be incomplete: ${e}\n`)}function eH(e,t){return t?XV(t):e.syncFsToken?BV(e.syncFsToken):void 0}function tH(e,t){if(!(!e.syncSab||typeof Atomics>`u`||typeof Atomics.wait!=`function`))return qV(e.syncSab,t)}function nH(e,t,n,r,i){let a=tH(e,t),o=eH(e,a);if(Object.assign(r,CP(n,e.cwd,o,i)),e.syncFsToken)return LV(e.syncFsToken,{syncFs:n,...o?{fsBridge:o}:{},...a?{transport:ZV(a)}:{}})}function rH(e=globalThis){Object.prototype.hasOwnProperty.call(e,`SLICC_VERSION`)||Object.defineProperty(e,"SLICC_VERSION",{value:Tr().version,writable:!1,enumerable:!1,configurable:!1})}function iH(e,t,n){let r=EP({isTTY:!e,noColor:e});return{colorApi:r,cliApi:wP({writeStdout:t,writeStderr:n,exit:e=>{throw new Jz(e)},color:r})}}function aH(e,t,n){return{readStdinBytes:()=>aP(e.stdin??``),writeStdout:t,writeStderr:n}}function oH(e){return{usbBridge:oV(e),serialBridge:iV(e),hidBridge:PB(e)}}async function sH(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=Zz(e,i,a),{colorApi:c,cliApi:l}=iH(!!e.env?.NO_COLOR,i,a),u=new mN(t),d=aH(e,i,a),f=_P(u,C,d),p=await QV(u,e.cwd,$V(e,a)),m=nH(e,t,p,f,d),h=kB(u,p,e.cwd,a),g=vB(h,{cwd:e.cwd}),_=uV({argv:e.argv,fs:f,exec:h}),v=wB(u),{usbBridge:y,serialBridge:b,hidBridge:x}=oH(u),S=hB({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 xB(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=WB({exec:h,agent:g,skill:_,http:S,browser:v,usb:y,serial:b,hid:x,cli:l,color:c}),T=e.filename,E=qz(T),D=await qB(u,e.code,e.cwd,T),ee=XB({graph:D,fsBridge:f,processShim:s.processShim,childProcess:DF(h,m),nodeConsole:o,sliccyModules:w,shimmedPackages:YB(u),nodeReadline:aB({output:{write:i},onExit:s.recordExit})}).require,te={exports:{},filename:e.filename},ne=D.entrySource!==void 0,re=D.entrySource??e.code,O=globalThis;rH(),O.__slicc_compileWasm=e=>u.call(`wasm`,`compile`,[e]);let ie=await nV(re,{process:s.processShim,console:o,require:ee,module:te,exports:te.exports,fetch:C,__dirname:E,__filename:T},a,ne);await cH(u,p,a),s.getDidCallProcessExit()?ie=s.getExitCode():await lH(u),delete O.__slicc_compileWasm,u.dispose(),t.postMessage({type:`realm-done`,stdout:n.join(``),stderr:r.join(``),exitCode:ie})}async function cH(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 lH(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 uH(){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 dH(){return async({kind:e})=>{if(e!==`js`)throw Error(`createInProcessJsRealmFactory: only kind:js is supported`);let{realmSide:t,hostSide:n}=uH(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`js`&&sH(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 fH(){return async({kind:e})=>{if(e!==`py`)throw Error(`createInProcessPyRealmFactory: only kind:py is supported`);let{realmSide:t,hostSide:n}=uH(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`py`&&TN(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 pH=dH(),mH=fH();function hH(){return async({kind:e,ctx:t})=>e===`py`?typeof Worker<`u`?_H():mH({kind:e,ctx:t}):typeof Worker<`u`?gH():pH({kind:e,ctx:t})}function gH(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return vH(new Worker(new URL(`/assets/js-realm-worker-BLPgQ7_q.js`,``+import.meta.url),{type:`module`}))}function _H(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return vH(new Worker(new URL(`/assets/py-realm-worker-B2OTI7Xc.js`,``+import.meta.url),{type:`module`}))}function vH(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 yH(){if(ga())return decodeURIComponent(ca(`pyodide/pyodide.mjs`,`../../../../../node_modules/pyodide/`).pathname)}function bH(e){let t=e.startsWith(`/`)?e:`/${e}`;return new URL(`file://${t}`).href}function xH(e){return e instanceof Error?e.message:String(e)}function SH(e){return`${(e&&e.length>0?e:`[eval]`).replace(/\.[^./]+$/,``)}.js`}async function CH(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:SH(n),supported:{"dynamic-import":!1},define:{"import.meta.url":JSON.stringify(r)}})).code}async function wH(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:SH(n),supported:{"dynamic-import":!1},...r?{define:{"import.meta.url":JSON.stringify(r)}}:{}})).code}const TH=/\bimport\s*\.\s*meta\s*\.\s*url\b/g,EH=/\bimport\s*\.\s*meta\b/g;function DH(e,t){let n=JSON.stringify(t);return e.replace(TH,n).replace(EH,`({ url: ${n} })`)}async function OH(e,t,n,r){let i=await e();return i.transpileModule(DH(t,r),{compilerOptions:{module:i.ModuleKind.CommonJS,target:i.ScriptTarget.ES2020,esModuleInterop:!0},fileName:`${n.replace(/\.[^./]+$/,``)}.ts`}).outputText}function kH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>Ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>oa(t));return async({source:e,path:t,kind:i})=>{if(i!==`esm`||!Ca(e))return e;let a=bH(t),o;try{return await CH(n,e,t,a)}catch(e){o=e}try{return await OH(r,e,t,a)}catch(e){throw Error(`Failed to transpile ESM module '${t}': ${xH(o)}; typescript fallback: ${xH(e)}`)}}}function AH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>Ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>oa(t));return async({source:e,filename:t})=>{if(!Ca(e)&&!ia(e))return e;let i=typeof t==`string`&&t.startsWith(`/`),a=i?bH(t):void 0,o=i?t:`[eval].js`,s;try{return await wH(n,e,t,a)}catch(e){s=e}try{return await OH(r,e,o,a??``)}catch(e){throw Error(`Failed to transpile entry source: ${xH(s)}; typescript fallback: ${xH(e)}`)}}}function jH(e){if(!e.startsWith(`#!`))return e;let t=e.indexOf(`
1657
- `);return t===-1?``:e.slice(t+1)}function MH(e){return Vt(e).dir}const NH=[`node`,`require`,`default`],PH=[`node`,`import`,`default`],FH=/\brequire\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,IH=/\bimport\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,LH=/(?:^|[;\n}])\s*import\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,RH=/(?:^|[;\n}])\s*export\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,zH=/(?:^|[;\n}])\s*import\s*(['"])([^'"]+)\1/g;function BH(e,t,n){let r=t[0].indexOf(n);return r<0?!1:e.startsWith(n,t.index+r)}function VH(e){let t=ta(e),n=new Map,r=(r,i,a)=>{r.lastIndex=0;let o;for(;(o=r.exec(e))!==null;){if(!BH(t,o,a))continue;let e=o[2];n.get(e)!==`import`&&n.set(e,i)}};return r(FH,`require`,`require`),r(IH,`import`,`import`),r(LH,`import`,`import`),r(RH,`import`,`export`),r(zH,`import`,`import`),[...n].map(([e,t])=>({specifier:e,kind:t}))}async function HH(e,t,n,r){if(n===`json`)return`module.exports = JSON.parse(${JSON.stringify(e)});\n`;let i=jH(e);if(n===`esm`){if(!r)throw Error(`Cannot load ESM module '${t}': no transpile hook configured (run: ${ya} esbuild-wasm)`);return await r({source:i,path:t,kind:n})}return i}async function UH(e){let{entrySpecifiers:t,fromDir:n,reader:r,conditions:i,transpile:a}=e,o=e.requireConditions??NH,s=e.importConditions??PH,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 HH(n,e,t,a);l.set(e,{path:e,source:n,cjsSource:i,kind:t});let c=MH(e),p={};for(let{specifier:t,kind:i}of VH(n)){let n;try{n=await Sa(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 Sa(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 WH(e){return!(e.startsWith(`sliccy:`)||e.startsWith(`node:`)||ea.has(e)||VB.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 VH(t))if(WH(e))try{let t=await UH({entrySpecifiers:[e],fromDir:n,reader:i,transpile:a,conditions:r===`import`?PH:NH,requireConditions:NH,importConditions:PH});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&&(Ca(t)||ia(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 KH(){return globalThis.navigator?.hid??null}function qH(e){let t=e.collections?.[0];return t?`${t.usagePage??``}:${t.usage??``}`:``}function JH(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.productName??``)===(t.productName??``)&&qH(e)===qH(t)&&!!e.productName}var YH=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(JH(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 ZH(){return XH||=new YH,XH}const QH=4194304;function $H(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 eU(e,t){let n=e.get(t);if(!n)throw Error(`unknown hid handle '${t}'`);return n}async function tU(e){e.opened||await e.open()}function nU(e,t){if(e>4194304)throw Error(`${t} exceeds the ${QH}-byte (4 MiB) v1 limit`)}function rU(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),t}async function iU(e,t){return(await t.getDevices()).map(t=>$H(e.register(t),t))}async function aU(e,t,n){let r=await t.requestDevice({filters:n});if(r.length===0)throw Error(`No device selected.`);return r.map(t=>$H(e.register(t),t))}function oU(e,t){return $H(t,eU(e,t))}async function sU(e,t){await eU(e,t).open()}async function cU(e,t){await eU(e,t).close()}async function lU(e,t,n,r){nU(r.byteLength,`send report payload`);let i=eU(e,t);await tU(i),await i.sendReport(n,r)}async function uU(e,t,n,r){nU(r.byteLength,`send feature report payload`);let i=eU(e,t);await tU(i),await i.sendFeatureReport(n,r)}async function dU(e,t,n){let r=eU(e,t);return await tU(r),{reportId:n,bytes:rU(await r.receiveFeatureReport(n))}}async function fU(e,t,n){let r=eU(e,t);await tU(r);let i=e=>{n({reportId:e.reportId,bytes:rU(e.data)})};return r.addEventListener(`inputreport`,i),()=>r.removeEventListener(`inputreport`,i)}const pU=6e4;function mU(){return Bn()}function hU(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),pU);zn(`hid-device`,e??[],void 0,{timeoutMs:pU}).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 gU(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var _U=class{registry;constructor(e){this.registry=e}hid(){let e=KH();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}list(){return iU(this.registry,this.hid())}async request(e){if(mU()){let t=await hU(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=>$H(this.registry.register(e),e))}return aU(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(oU(this.registry,e))}open(e){return sU(this.registry,e)}close(e){return cU(this.registry,e)}sendReport(e,t,n){return lU(this.registry,e,t,gU(n))}sendFeatureReport(e,t,n){return uU(this.registry,e,t,gU(n))}async receiveFeatureReport(e,t){let n=await dU(this.registry,e,t);return{reportId:n.reportId,bytes:new Uint8Array(n.bytes)}}async subscribeInputReports(e,t){return fU(this.registry,e,e=>t({reportId:e.reportId,bytes:new Uint8Array(e.bytes)}))}},vU=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:gU(n)})}async sendFeatureReport(e,t,n){await this.rpc.call(`hid-send-feature-report`,{handle:e,reportId:t,bytes:gU(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 yU(e,t){return e&&KH()?new _U(ZH()):t?new vU(t):null}function bU(e){return async function(t,n){let r=t instanceof Request?t:null,i=xU(t),a=(n?.method??r?.method??`GET`).toUpperCase(),o=CU(r?.headers,n?.headers),s=await EU(n,r,a,o);s.defaultContentType&&!wU(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 xU(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function SU(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 CU(e,t){let n={};e&&e.forEach((e,t)=>{n[t]=e});let r=SU(t);if(r)for(let[e,t]of Object.entries(r))n[e]=t;return n}function wU(e,t){return TU(e,t)!==void 0}function TU(e,t){let n=t.toLowerCase(),r;for(let[t,i]of Object.entries(e))t.toLowerCase()===n&&(r=i);return r}async function EU(e,t,n,r){if(e&&`body`in e&&e.body!==void 0){let t=kU(e.body,n);return{body:await DU(e.body,n),defaultContentType:t}}if(t&&n!==`GET`&&n!==`HEAD`){let e=t.body!==null,n=new Uint8Array(await t.arrayBuffer()),i=TU(r,`content-type`)??``,a=e&&(!i||!u(i));return{body:n.byteLength===0?void 0:a?AU(n):new TextDecoder(`utf-8`).decode(n),defaultContentType:a?`application/octet-stream`:void 0}}return{}}async function DU(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 AU(e);if(e instanceof ArrayBuffer)return AU(new Uint8Array(e));if(ArrayBuffer.isView(e)){let t=e;return AU(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}if(typeof Blob<`u`&&e instanceof Blob)return AU(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 OU(e){return e instanceof Uint8Array||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<`u`&&e instanceof Blob}function kU(e,t){if(e instanceof URLSearchParams)return`application/x-www-form-urlencoded;charset=UTF-8`;if(!(t===`GET`||t===`HEAD`||!OU(e)))return typeof Blob<`u`&&e instanceof Blob&&e.type?e.type:`application/octet-stream`}function AU(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 jU(){return globalThis.navigator?.serial??null}var MU=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 NU=null;function PU(){return NU||=new MU,NU}const FU=4194304;function IU(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 LU(e,t){let n=e.get(t);if(!n)throw Error(`unknown serial handle '${t}'`);return n}function RU(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}function zU(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 BU(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 VU(e){if(await BU(e),e.opened){try{await e.port.close()}catch{}e.opened=!1}}async function HU(e,t){let n=await t.getPorts();for(let{entry:t}of e.retainOnly(n))await VU(t);return n.map(t=>{let n=e.register(t);return IU(n,e.get(n))})}async function UU(e,t,n){let r=await t.requestPort(n.length?{filters:n}:{}),i=e.register(r);return IU(i,e.get(i))}function WU(e,t){return IU(t,LU(e,t))}async function GU(e,t,n){let r=LU(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 KU(e,t){let n=LU(e,t);await BU(n);try{await n.port.close()}catch(e){if(!qU(e))throw e}n.opened=!1}function qU(e){let t=e instanceof Error?e.message:String(e);return/already closed|not open/i.test(t)}function JU(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 YU(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=LU(e,t),i=Math.min(n.maxBytes??4194304,FU),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=zU(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=JU(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=RU(c,a.value);let e=u();if(e)return e}}return c}async function ZU(e,t,n){if(n.length>4194304)throw Error(`serial write payload exceeds the ${FU}-byte (4 MiB) v1 limit`);return await YU(LU(e,t)).write(n),n.length}async function QU(e,t){return LU(e,t).port.getSignals()}async function $U(e,t,n){await LU(e,t).port.setSignals(n)}const eW=6e4;function tW(){return Bn()}function nW(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),eW);zn(`serial-port`,e??[],void 0,{timeoutMs:eW}).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 rW(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var iW=class{registry;constructor(e){this.registry=e}serial(){let e=jU();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}list(){return HU(this.registry,this.serial())}async request(e){if(tW()){let t=await nW(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 IU(r,this.registry.get(r))}return UU(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(WU(this.registry,e))}open(e,t){return GU(this.registry,e,t)}close(e){return KU(this.registry,e)}read(e,t){return XU(this.registry,e,t)}write(e,t){return ZU(this.registry,e,t)}getSignals(e){return QU(this.registry,e)}setSignals(e,t){return $U(this.registry,e,t)}},aW=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?rW(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:rW(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 oW(e,t){return e&&jU()?new iW(PU()):t?new aW(t):null}function sW(){return globalThis.navigator?.usb??null}function cW(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.serialNumber??``)===(t.serialNumber??``)&&!!e.serialNumber}var lW=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(cW(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 uW=null;function dW(){return uW||=new lW,uW}const fW=4194304;function pW(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 mW(e,t){let n=e.get(t);if(!n)throw Error(`unknown usb handle '${t}'`);return n}function hW(e,t){if(e>4194304)throw Error(`${t} exceeds the ${fW}-byte (4 MiB) v1 limit`)}function gW(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}async function _W(e,t){return(await t.getDevices()).map(t=>pW(e.register(t),t))}async function vW(e,t,n){let r=await t.requestDevice({filters:n});return pW(e.register(r),r)}function yW(e,t){return pW(t,mW(e,t))}async function bW(e,t){await mW(e,t).open()}async function xW(e,t){await mW(e,t).close()}async function SW(e,t,n){await mW(e,t).selectConfiguration(n)}async function CW(e,t,n){await mW(e,t).claimInterface(n)}async function wW(e,t,n){await mW(e,t).releaseInterface(n)}async function TW(e,t,n,r){hW(r,`control-in length`);let i=await mW(e,t).controlTransferIn(n,r);return{status:i.status??`ok`,bytes:i.data?gW(i.data):new ArrayBuffer(0)}}async function EW(e,t,n,r){hW(r.byteLength,`control-out payload`);let i=await mW(e,t).controlTransferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function DW(e,t,n,r){hW(r,`transfer-in length`);let i=await mW(e,t).transferIn(n,r);return{status:i.status??`ok`,bytes:i.data?gW(i.data):new ArrayBuffer(0)}}async function OW(e,t,n,r){hW(r.byteLength,`transfer-out payload`);let i=await mW(e,t).transferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function kW(e,t){await mW(e,t).reset()}const AW=6e4;function jW(){return Bn()}function MW(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),AW);zn(`usb-device`,e??[],void 0,{timeoutMs:AW}).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 NW(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var PW=class{registry;constructor(e){this.registry=e}usb(){let e=sW();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}list(){return _W(this.registry,this.usb())}async request(e){if(jW()){let t=await MW(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 pW(this.registry.register(n),n)}return vW(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(yW(this.registry,e))}open(e){return bW(this.registry,e)}close(e){return xW(this.registry,e)}selectConfig(e,t){return SW(this.registry,e,t)}claim(e,t){return CW(this.registry,e,t)}release(e,t){return wW(this.registry,e,t)}async controlIn(e,t,n){let r=await TW(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}controlOut(e,t,n){return EW(this.registry,e,t,NW(n))}async transferIn(e,t,n){let r=await DW(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}transferOut(e,t,n){return OW(this.registry,e,t,NW(n))}reset(e){return kW(this.registry,e)}},FW=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:NW(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:NW(n)})}async reset(e){await this.rpc.call(`usb-reset`,{handle:e})}};function IW(e,t){return e&&sW()?new PW(dW()):t?new FW(t):null}function LW(e,t,n,r={}){let{header:i,window:a}=GV(t),o=new Map,s=!1,c=r.dispatch??(e=>TV(e)?OV(e):vV(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}=UV(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 RW=r(`realm-host`);function zW(e,t,n={}){let r=new Map,i=n.syncFsBridgeEnabled?pV({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;BW(e,i,t,n,o,c)};e.addEventListener(`message`,l);let u=i&&n.syncSab?LW(e,n.syncSab,i):void 0;return e.start?.(),{syncFsToken:i,dispose:()=>{if(!a){a=!0,u?.dispose(),i&&gV(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 BW(e,t,n,r,i,a){try{let o=await VW(t,n,r,i,a),s={type:`realm-rpc-res`,id:t.id,result:o},c=AG(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 VW(e,t,n,r,i){switch(e.channel){case`vfs`:return qW(e.op,e.args,t);case`exec`:return oG(e.op,e.args,t,i);case`fetch`:return uG(e.op,e.args,t);case`browser`:return mG(e.op,e.args,HW(n),n);case`usb`:return DG(e.op,e.args,WW(n));case`serial`:return OG(e.op,e.args,GW(n));case`hid`:return kG(e.op,e.args,KW(n),r);case`module`:return fG(e.op,e.args,t);case`wasm`:return pG(e.op,e.args,t);default:throw Error(`realm-host: unknown channel '${e.channel}'`)}}function HW(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 UW(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 WW(e){if(e.usbBackend)return e.usbBackend;let t=IW(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=oW(a(),i());if(!t)throw Error(`serial is not available in this runtime`);return t}function KW(e){if(e.hidBackend)return e.hidBackend;let t=yU(a(),i());if(!t)throw Error(`hid is not available in this runtime`);return t}async function qW(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 nG(n,typeof t[0]==`string`?t[0]:n.cwd);case`flushWrites`:{let e=t[0];return await rG(n,e),!0}default:throw Error(`realm-host: unknown vfs op '${e}'`)}}const JW=10485760;function YW(e){return e.fileCount>=500||e.totalBytes>=JW}function XW(e){return e.entries.length>=2e4}async function ZW(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 QW(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 $W(e,t,n,r,i){if(n>1048576||YW(r)||r.totalBytes+n>JW){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 eG(e,t,i,r);return}r.entries.push({path:t,content:a,isDirectory:!1}),r.fileCount+=1,r.totalBytes+=a.byteLength}async function eG(e,t,n,r){let i;try{i=await e.fs.stat(t)}catch{return}if(i.isDirectory){await ZW(e,t,n,r);return}r.entries.push({path:t,content:new Uint8Array,isDirectory:!1,truncated:!0,size:i.size})}async function tG(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 QW(e,t,i.size,n);continue}let a;try{a=await e.fs.stat(t)}catch{continue}a.isDirectory?await ZW(e,t,r,n):a.isFile&&await $W(e,t,a.size,n,r)}}async function nG(e,t){let n={entries:[],totalBytes:0,fileCount:0};return await tG(e,t,n),t!==`/tmp`&&await tG(e,`/tmp`,n),{entries:n.entries}}async function rG(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 iG=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]),aG=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`]);async function oG(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 cG(t,n,r);if(e===`kill`)return lG(t,r);throw Error(`realm-host: unknown exec op '${e}'`)}function sG(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 cG(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??{};sG(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 lG(e,t){let[n,r]=e,i=t.spawns.get(n);if(!i)return!1;let a=typeof r==`string`&&iG.has(r)?r:`SIGTERM`;aG.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 uG(e,t,n){if(e!==`request`)throw Error(`realm-host: unknown fetch op '${e}'`);let[r,i]=t,a=await(n.fetch?bU(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 dG(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 fG(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=dG(n),s={reader:o,readBytes:e=>n.fs.readFileBuffer(e),fromDir:i};return GH({entryCode:r,fromDir:i,entryFilename:a,reader:o,transpile:kH({ipk:s}),transpileEntry:AH({ipk:s})})}async function pG(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 Oa(e=>n.fs.readFileBuffer(e),i)}async function mG(e,t,n,r){switch(e){case`findTab`:return _G(n,t[0]??{});case`ensureTab`:{let e=t[0];return vG(n,e,t[1]??{})}case`eval`:{let e=t[0],r=t[1];return yG(n,e,r,!1)}case`evalAsync`:{let e=t[0],r=t[1];return yG(n,e,r,!0)}case`cookie`:{let e=t[0],r=t[1];return CG(n,e,r)}case`localStorage`:{let e=t[0],r=t[1];return wG(n,e,r)}case`wsObserve`:{let e={...t[0],scoopJid:r.scoopJid};return await UW(r).observe(e)}case`wsUpdate`:{let e=t[0],n=t[1]??{};return UW(r).update(e,n)}case`wsClose`:{let e=t[0];return UW(r).close(e)}case`wsList`:return UW(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.sendCDP(`Emulation.setDeviceMetricsOverride`,{width:r,height:i,deviceScaleFactor:1,mobile:!1})})}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 SG(n,e,r)}default:throw Error(`realm-host: unknown browser op '${e}'`)}}function hG(){try{let e=globalThis.localStorage;return e?!!(e.getItem(`slicc.trayWorkerBaseUrl`)||e.getItem(`slicc.trayJoinUrl`)):!1}catch{return!1}}async function gG(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=hG()?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){RW.debug(`panel-rpc list-remote-targets failed`,{err:String(e)})}return t}async function _G(e,t){let n=await gG(e);if(t.domain){let e=t.domain.toLowerCase();for(let t of n){let n=TG(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 vG(e,t,n){let r=await gG(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=EG(t);if(e){let t=r.find(t=>EG(t.url)===e);if(t)return t}}return{targetId:await e.createPage(t),url:t,title:``}}async function yG(e,t,n,r){return e.withTab(t,async()=>bG(await e.evaluate(n,{awaitPromise:r,returnByValue:!0})))}function bG(e){if(typeof e!=`string`)return e;let t=xG(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=xG(t);if(typeof e==`object`&&e)return e}return t}return e}function xG(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 SG(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(){
1656
+ `),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 ${cV(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 dV=new Map,fV=new Map;function pV(e){let t=crypto.randomUUID();return dV.set(t,e),t}function mV(e){return dV.get(e)??null}function hV(e,t){if(!dV.has(e))return t.abort(),()=>{};let n=fV.get(e);return n||(n=new Set,fV.set(e,n)),n.add(t),()=>{let n=fV.get(e);n&&(n.delete(t),n.size===0&&fV.delete(e))}}function gV(e){dV.delete(e);let t=fV.get(e);if(t){fV.delete(e);for(let e of t)e.signal.aborted||e.abort()}}function _V(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 vV(e){let t=mV(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 _V(e)}}function yV(e){return`slicc-sync-fs-`+e}const bV=`sync-fs-ack`,xV=`sync-fs-res`,SV=6e5,CV=5e3,wV=`exec`;function TV(e){return e.channel===wV}function EV(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 DV(e,t){return Math.min(typeof e!=`number`||!Number.isFinite(e)||e<=0?t:e,SV)}async function OV(e){let t=mV(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=EV(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()},DV(e.timeoutMs,SV)),o=hV(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`}:_V(e)}finally{clearTimeout(a),o()}}function kV(e,t){return Object.assign(Error(`${e}: ${t}`),{code:e})}function AV(e){let t=MV(e);if(NV(t))return new Uint8Array(t.response);if(t.status>=200&&t.status<300)throw kV(`EIO`,e.label);PV(t,e.label)}function jV(e){let t=AV(e);try{return JSON.parse(new TextDecoder().decode(t))}catch{throw kV(`EIO`,e.label)}}function MV(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 kV(`EIO`,e.label)}return t}function NV(e){return e.status>=200&&e.status<300&&e.getResponseHeader(`x-slicc-fs`)===`1`}function PV(e,t){throw kV(e.getResponseHeader(`x-slicc-fs`)===`1`&&e.getResponseHeader(`x-slicc-fs-errno`)||`EIO`,t)}function FV(e){return(t,n,r)=>{let i=jV({method:`POST`,url:`/__slicc/exec-sync`,token:e,body:new TextEncoder().encode(JSON.stringify({...t,channel:wV})),timeoutMs:n+CV,label:r});if(!i||typeof i.stdout!=`string`||typeof i.stderr!=`string`||typeof i.exitCode!=`number`)throw kV(`EIO`,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}}function IV(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 LV(e,t={}){let n=t.timeoutMs??12e4,{syncFs:r,fsBridge:i}=t,a=t.transport??FV(e);return{run(e,t={}){let o=r?.wasUsed()===!0&&i!==void 0;o&&IV(r,i);let s=`sync-exec bridge, '${Array.isArray(e)?e.join(` `):e}'`,c=DV(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 RV(e,t){return kV(e,`sync-fs bridge, '${t}'`)}function zV(e,t){let n=`/__slicc/fs-sync`+(e.startsWith(`/`)?e:`/${e}`).split(`/`).map(encodeURIComponent).join(`/`);return t?`${n}?op=${t}`:n}function BV(e,t={}){let n=t.timeoutMs??3e4;function r(t,r,i,a){return{method:t,url:zV(r,a),token:e,...i?{body:i}:{},timeoutMs:n,label:`sync-fs bridge, '${r}'`}}return{readFile(e){return AV(r(`GET`,e))},writeFile(e,t){AV(r(`POST`,e,t))},stat(e){let t=jV(r(`GET`,e,void 0,`stat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw RV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},lstat(e){let t=jV(r(`GET`,e,void 0,`lstat`));if(!t||typeof t.isFile!=`boolean`||typeof t.isDirectory!=`boolean`||typeof t.size!=`number`)throw RV(`EIO`,e);return{isFile:t.isFile,isDirectory:t.isDirectory,isSymbolicLink:t.isSymbolicLink,size:t.size}},readdir(e){let t=jV(r(`GET`,e,void 0,`readdir`));if(!Array.isArray(t)||!t.every(e=>typeof e==`string`))throw RV(`EIO`,e);return t},exists(e){let t=jV(r(`GET`,e,void 0,`exists`));if(typeof t!=`boolean`)throw RV(`EIO`,e);return t},mkdir(e){AV(r(`POST`,e,void 0,`mkdir`))},rm(e){AV(r(`POST`,e,void 0,`rm`))}}}const VV=new TextEncoder,HV=new TextDecoder;function UV(e){if(!e.ok)return{status:4,payload:VV.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:VV.encode(JSON.stringify(e.json))};default:return{status:3,payload:new Uint8Array}}}function WV(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(HV.decode(t))}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed json payload`}}case 4:try{let e=JSON.parse(HV.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 KV(){if(typeof SharedArrayBuffer>`u`||typeof Atomics>`u`)return!1;let e=globalThis.crossOriginIsolated;return e===void 0||e===!0}function qV(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 kV(`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 kV(`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 kV(`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 kV(`EIO`,a)}}finally{Atomics.store(r,0,0)}return WV(f,d)}}}function JV(e,t){return kV(e,`sync-sab bridge, '${t}'`)}function YV(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 JV(i.errno,r);return i}function i(e,t){let n=r(e,t);if(n.ok&&n.kind===`bytes`)return n.bytes;throw JV(`EIO`,t)}function a(e,t){let n=r(e,t);if(n.ok&&n.kind===`json`)return n.json;throw JV(`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(!YV(t))throw JV(`EIO`,e);return t},lstat:e=>{let t=a({op:`lstat`,path:e},e);if(!YV(t))throw JV(`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 JV(`EIO`,e);return t},exists:e=>{let t=a({op:`exists`,path:e},e);if(typeof t!=`boolean`)throw JV(`EIO`,e);return t},mkdir:e=>{r({op:`mkdir`,path:e},e)},rm:e=>{r({op:`rm`,path:e},e)}}}function ZV(e){return(t,n,r)=>{let i=e.call({...t,channel:wV},n+CV,r);if(!i.ok)throw kV(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 kV(`EIO`,r);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}}async function QV(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 rP(r)}function $V(e,t){if(e.syncFsToken)return e=>t(`[sync-fs] snapshot failed, sync metadata will be incomplete: ${e}\n`)}function eH(e,t){return t?XV(t):e.syncFsToken?BV(e.syncFsToken):void 0}function tH(e,t){if(!(!e.syncSab||typeof Atomics>`u`||typeof Atomics.wait!=`function`))return qV(e.syncSab,t)}function nH(e,t,n,r,i){let a=tH(e,t),o=eH(e,a);if(Object.assign(r,CP(n,e.cwd,o,i)),e.syncFsToken)return LV(e.syncFsToken,{syncFs:n,...o?{fsBridge:o}:{},...a?{transport:ZV(a)}:{}})}function rH(e=globalThis){Object.prototype.hasOwnProperty.call(e,`SLICC_VERSION`)||Object.defineProperty(e,"SLICC_VERSION",{value:Tr().version,writable:!1,enumerable:!1,configurable:!1})}function iH(e,t,n){let r=EP({isTTY:!e,noColor:e});return{colorApi:r,cliApi:wP({writeStdout:t,writeStderr:n,exit:e=>{throw new Jz(e)},color:r})}}function aH(e,t,n){return{readStdinBytes:()=>aP(e.stdin??``),writeStdout:t,writeStderr:n}}function oH(e){return{usbBridge:oV(e),serialBridge:iV(e),hidBridge:PB(e)}}async function sH(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=Zz(e,i,a),{colorApi:c,cliApi:l}=iH(!!e.env?.NO_COLOR,i,a),u=new mN(t),d=aH(e,i,a),f=_P(u,C,d),p=await QV(u,e.cwd,$V(e,a)),m=nH(e,t,p,f,d),h=kB(u,p,e.cwd,a),g=vB(h,{cwd:e.cwd}),_=uV({argv:e.argv,fs:f,exec:h}),v=wB(u),{usbBridge:y,serialBridge:b,hidBridge:x}=oH(u),S=hB({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 xB(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=WB({exec:h,agent:g,skill:_,http:S,browser:v,usb:y,serial:b,hid:x,cli:l,color:c}),T=e.filename,E=qz(T),D=await qB(u,e.code,e.cwd,T),ee=XB({graph:D,fsBridge:f,processShim:s.processShim,childProcess:DF(h,m),nodeConsole:o,sliccyModules:w,shimmedPackages:YB(u),nodeReadline:aB({output:{write:i},onExit:s.recordExit})}).require,te={exports:{},filename:e.filename},ne=D.entrySource!==void 0,re=D.entrySource??e.code,O=globalThis;rH(),O.__slicc_compileWasm=e=>u.call(`wasm`,`compile`,[e]);let ie=await nV(re,{process:s.processShim,console:o,require:ee,module:te,exports:te.exports,fetch:C,__dirname:E,__filename:T},a,ne);await cH(u,p,a),s.getDidCallProcessExit()?ie=s.getExitCode():await lH(u),delete O.__slicc_compileWasm,u.dispose(),t.postMessage({type:`realm-done`,stdout:n.join(``),stderr:r.join(``),exitCode:ie})}async function cH(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 lH(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 uH(){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 dH(){return async({kind:e})=>{if(e!==`js`)throw Error(`createInProcessJsRealmFactory: only kind:js is supported`);let{realmSide:t,hostSide:n}=uH(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`js`&&sH(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 fH(){return async({kind:e})=>{if(e!==`py`)throw Error(`createInProcessPyRealmFactory: only kind:py is supported`);let{realmSide:t,hostSide:n}=uH(),r=e=>{if(e.data?.type!==`realm-init`)return;t.removeEventListener(`message`,r);let n=e.data;n.kind===`py`&&TN(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 pH=dH(),mH=fH();function hH(){return async({kind:e,ctx:t})=>e===`py`?typeof Worker<`u`?_H():mH({kind:e,ctx:t}):typeof Worker<`u`?gH():pH({kind:e,ctx:t})}function gH(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return vH(new Worker(new URL(`/assets/js-realm-worker-Br00Fodv.js`,``+import.meta.url),{type:`module`}))}function _H(){if(typeof Worker>`u`)throw Error(`realm-factory: Worker is not available in this runtime`);return vH(new Worker(new URL(`/assets/py-realm-worker-B2OTI7Xc.js`,``+import.meta.url),{type:`module`}))}function vH(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 yH(){if(ga())return decodeURIComponent(ca(`pyodide/pyodide.mjs`,`../../../../../node_modules/pyodide/`).pathname)}function bH(e){let t=e.startsWith(`/`)?e:`/${e}`;return new URL(`file://${t}`).href}function xH(e){return e instanceof Error?e.message:String(e)}function SH(e){return`${(e&&e.length>0?e:`[eval]`).replace(/\.[^./]+$/,``)}.js`}async function CH(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:SH(n),supported:{"dynamic-import":!1},define:{"import.meta.url":JSON.stringify(r)}})).code}async function wH(e,t,n,r){return(await(await e()).transform(t,{loader:`js`,format:`cjs`,sourcefile:SH(n),supported:{"dynamic-import":!1},...r?{define:{"import.meta.url":JSON.stringify(r)}}:{}})).code}const TH=/\bimport\s*\.\s*meta\s*\.\s*url\b/g,EH=/\bimport\s*\.\s*meta\b/g;function DH(e,t){let n=JSON.stringify(t);return e.replace(TH,n).replace(EH,`({ url: ${n} })`)}async function OH(e,t,n,r){let i=await e();return i.transpileModule(DH(t,r),{compilerOptions:{module:i.ModuleKind.CommonJS,target:i.ScriptTarget.ES2020,esModuleInterop:!0},fileName:`${n.replace(/\.[^./]+$/,``)}.ts`}).outputText}function kH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>Ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>oa(t));return async({source:e,path:t,kind:i})=>{if(i!==`esm`||!Ca(e))return e;let a=bH(t),o;try{return await CH(n,e,t,a)}catch(e){o=e}try{return await OH(r,e,t,a)}catch(e){throw Error(`Failed to transpile ESM module '${t}': ${xH(o)}; typescript fallback: ${xH(e)}`)}}}function AH(e={}){let{ipk:t}=e,n=e.loadEsbuild??(()=>Ta(t?{ipk:t}:{})),r=e.loadTypeScript??(()=>oa(t));return async({source:e,filename:t})=>{if(!Ca(e)&&!ia(e))return e;let i=typeof t==`string`&&t.startsWith(`/`),a=i?bH(t):void 0,o=i?t:`[eval].js`,s;try{return await wH(n,e,t,a)}catch(e){s=e}try{return await OH(r,e,o,a??``)}catch(e){throw Error(`Failed to transpile entry source: ${xH(s)}; typescript fallback: ${xH(e)}`)}}}function jH(e){if(!e.startsWith(`#!`))return e;let t=e.indexOf(`
1657
+ `);return t===-1?``:e.slice(t+1)}function MH(e){return Vt(e).dir}const NH=[`node`,`require`,`default`],PH=[`node`,`import`,`default`],FH=/\brequire\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,IH=/\bimport\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,LH=/(?:^|[;\n}])\s*import\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,RH=/(?:^|[;\n}])\s*export\b[\s\S]*?\bfrom\s*(['"])([^'"]+)\1/g,zH=/(?:^|[;\n}])\s*import\s*(['"])([^'"]+)\1/g;function BH(e,t,n){let r=t[0].indexOf(n);return r<0?!1:e.startsWith(n,t.index+r)}function VH(e){let t=ta(e),n=new Map,r=(r,i,a)=>{r.lastIndex=0;let o;for(;(o=r.exec(e))!==null;){if(!BH(t,o,a))continue;let e=o[2];n.get(e)!==`import`&&n.set(e,i)}};return r(FH,`require`,`require`),r(IH,`import`,`import`),r(LH,`import`,`import`),r(RH,`import`,`export`),r(zH,`import`,`import`),[...n].map(([e,t])=>({specifier:e,kind:t}))}async function HH(e,t,n,r){if(n===`json`)return`module.exports = JSON.parse(${JSON.stringify(e)});\n`;let i=jH(e);if(n===`esm`){if(!r)throw Error(`Cannot load ESM module '${t}': no transpile hook configured (run: ${ya} esbuild-wasm)`);return await r({source:i,path:t,kind:n})}return i}async function UH(e){let{entrySpecifiers:t,fromDir:n,reader:r,conditions:i,transpile:a}=e,o=e.requireConditions??NH,s=e.importConditions??PH,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 HH(n,e,t,a);l.set(e,{path:e,source:n,cjsSource:i,kind:t});let c=MH(e),p={};for(let{specifier:t,kind:i}of VH(n)){let n;try{n=await Sa(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 Sa(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 WH(e){return!(e.startsWith(`sliccy:`)||e.startsWith(`node:`)||ea.has(e)||VB.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 VH(t))if(WH(e))try{let t=await UH({entrySpecifiers:[e],fromDir:n,reader:i,transpile:a,conditions:r===`import`?PH:NH,requireConditions:NH,importConditions:PH});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&&(Ca(t)||ia(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 KH(){return globalThis.navigator?.hid??null}function qH(e){let t=e.collections?.[0];return t?`${t.usagePage??``}:${t.usage??``}`:``}function JH(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.productName??``)===(t.productName??``)&&qH(e)===qH(t)&&!!e.productName}var YH=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(JH(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 ZH(){return XH||=new YH,XH}const QH=4194304;function $H(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 eU(e,t){let n=e.get(t);if(!n)throw Error(`unknown hid handle '${t}'`);return n}async function tU(e){e.opened||await e.open()}function nU(e,t){if(e>4194304)throw Error(`${t} exceeds the ${QH}-byte (4 MiB) v1 limit`)}function rU(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),t}async function iU(e,t){return(await t.getDevices()).map(t=>$H(e.register(t),t))}async function aU(e,t,n){let r=await t.requestDevice({filters:n});if(r.length===0)throw Error(`No device selected.`);return r.map(t=>$H(e.register(t),t))}function oU(e,t){return $H(t,eU(e,t))}async function sU(e,t){await eU(e,t).open()}async function cU(e,t){await eU(e,t).close()}async function lU(e,t,n,r){nU(r.byteLength,`send report payload`);let i=eU(e,t);await tU(i),await i.sendReport(n,r)}async function uU(e,t,n,r){nU(r.byteLength,`send feature report payload`);let i=eU(e,t);await tU(i),await i.sendFeatureReport(n,r)}async function dU(e,t,n){let r=eU(e,t);return await tU(r),{reportId:n,bytes:rU(await r.receiveFeatureReport(n))}}async function fU(e,t,n){let r=eU(e,t);await tU(r);let i=e=>{n({reportId:e.reportId,bytes:rU(e.data)})};return r.addEventListener(`inputreport`,i),()=>r.removeEventListener(`inputreport`,i)}const pU=6e4;function mU(){return Bn()}function hU(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),pU);zn(`hid-device`,e??[],void 0,{timeoutMs:pU}).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 gU(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var _U=class{registry;constructor(e){this.registry=e}hid(){let e=KH();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}list(){return iU(this.registry,this.hid())}async request(e){if(mU()){let t=await hU(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=>$H(this.registry.register(e),e))}return aU(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(oU(this.registry,e))}open(e){return sU(this.registry,e)}close(e){return cU(this.registry,e)}sendReport(e,t,n){return lU(this.registry,e,t,gU(n))}sendFeatureReport(e,t,n){return uU(this.registry,e,t,gU(n))}async receiveFeatureReport(e,t){let n=await dU(this.registry,e,t);return{reportId:n.reportId,bytes:new Uint8Array(n.bytes)}}async subscribeInputReports(e,t){return fU(this.registry,e,e=>t({reportId:e.reportId,bytes:new Uint8Array(e.bytes)}))}},vU=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:gU(n)})}async sendFeatureReport(e,t,n){await this.rpc.call(`hid-send-feature-report`,{handle:e,reportId:t,bytes:gU(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 yU(e,t){return e&&KH()?new _U(ZH()):t?new vU(t):null}function bU(e){return async function(t,n){let r=t instanceof Request?t:null,i=xU(t),a=(n?.method??r?.method??`GET`).toUpperCase(),o=CU(r?.headers,n?.headers),s=await EU(n,r,a,o);s.defaultContentType&&!wU(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 xU(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function SU(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 CU(e,t){let n={};e&&e.forEach((e,t)=>{n[t]=e});let r=SU(t);if(r)for(let[e,t]of Object.entries(r))n[e]=t;return n}function wU(e,t){return TU(e,t)!==void 0}function TU(e,t){let n=t.toLowerCase(),r;for(let[t,i]of Object.entries(e))t.toLowerCase()===n&&(r=i);return r}async function EU(e,t,n,r){if(e&&`body`in e&&e.body!==void 0){let t=kU(e.body,n);return{body:await DU(e.body,n),defaultContentType:t}}if(t&&n!==`GET`&&n!==`HEAD`){let e=t.body!==null,n=new Uint8Array(await t.arrayBuffer()),i=TU(r,`content-type`)??``,a=e&&(!i||!u(i));return{body:n.byteLength===0?void 0:a?AU(n):new TextDecoder(`utf-8`).decode(n),defaultContentType:a?`application/octet-stream`:void 0}}return{}}async function DU(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 AU(e);if(e instanceof ArrayBuffer)return AU(new Uint8Array(e));if(ArrayBuffer.isView(e)){let t=e;return AU(new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}if(typeof Blob<`u`&&e instanceof Blob)return AU(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 OU(e){return e instanceof Uint8Array||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<`u`&&e instanceof Blob}function kU(e,t){if(e instanceof URLSearchParams)return`application/x-www-form-urlencoded;charset=UTF-8`;if(!(t===`GET`||t===`HEAD`||!OU(e)))return typeof Blob<`u`&&e instanceof Blob&&e.type?e.type:`application/octet-stream`}function AU(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 jU(){return globalThis.navigator?.serial??null}var MU=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 NU=null;function PU(){return NU||=new MU,NU}const FU=4194304;function IU(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 LU(e,t){let n=e.get(t);if(!n)throw Error(`unknown serial handle '${t}'`);return n}function RU(e,t){let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n}function zU(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 BU(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 VU(e){if(await BU(e),e.opened){try{await e.port.close()}catch{}e.opened=!1}}async function HU(e,t){let n=await t.getPorts();for(let{entry:t}of e.retainOnly(n))await VU(t);return n.map(t=>{let n=e.register(t);return IU(n,e.get(n))})}async function UU(e,t,n){let r=await t.requestPort(n.length?{filters:n}:{}),i=e.register(r);return IU(i,e.get(i))}function WU(e,t){return IU(t,LU(e,t))}async function GU(e,t,n){let r=LU(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 KU(e,t){let n=LU(e,t);await BU(n);try{await n.port.close()}catch(e){if(!qU(e))throw e}n.opened=!1}function qU(e){let t=e instanceof Error?e.message:String(e);return/already closed|not open/i.test(t)}function JU(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 YU(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=LU(e,t),i=Math.min(n.maxBytes??4194304,FU),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=zU(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=JU(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=RU(c,a.value);let e=u();if(e)return e}}return c}async function ZU(e,t,n){if(n.length>4194304)throw Error(`serial write payload exceeds the ${FU}-byte (4 MiB) v1 limit`);return await YU(LU(e,t)).write(n),n.length}async function QU(e,t){return LU(e,t).port.getSignals()}async function $U(e,t,n){await LU(e,t).port.setSignals(n)}const eW=6e4;function tW(){return Bn()}function nW(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),eW);zn(`serial-port`,e??[],void 0,{timeoutMs:eW}).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 rW(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var iW=class{registry;constructor(e){this.registry=e}serial(){let e=jU();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}list(){return HU(this.registry,this.serial())}async request(e){if(tW()){let t=await nW(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 IU(r,this.registry.get(r))}return UU(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(WU(this.registry,e))}open(e,t){return GU(this.registry,e,t)}close(e){return KU(this.registry,e)}read(e,t){return XU(this.registry,e,t)}write(e,t){return ZU(this.registry,e,t)}getSignals(e){return QU(this.registry,e)}setSignals(e,t){return $U(this.registry,e,t)}},aW=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?rW(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:rW(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 oW(e,t){return e&&jU()?new iW(PU()):t?new aW(t):null}function sW(){return globalThis.navigator?.usb??null}function cW(e,t){return e===t||e.vendorId===t.vendorId&&e.productId===t.productId&&(e.serialNumber??``)===(t.serialNumber??``)&&!!e.serialNumber}var lW=class{byHandle=new Map;counter=0;register(e){for(let[t,n]of this.byHandle)if(cW(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 uW=null;function dW(){return uW||=new lW,uW}const fW=4194304;function pW(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 mW(e,t){let n=e.get(t);if(!n)throw Error(`unknown usb handle '${t}'`);return n}function hW(e,t){if(e>4194304)throw Error(`${t} exceeds the ${fW}-byte (4 MiB) v1 limit`)}function gW(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}async function _W(e,t){return(await t.getDevices()).map(t=>pW(e.register(t),t))}async function vW(e,t,n){let r=await t.requestDevice({filters:n});return pW(e.register(r),r)}function yW(e,t){return pW(t,mW(e,t))}async function bW(e,t){await mW(e,t).open()}async function xW(e,t){await mW(e,t).close()}async function SW(e,t,n){await mW(e,t).selectConfiguration(n)}async function CW(e,t,n){await mW(e,t).claimInterface(n)}async function wW(e,t,n){await mW(e,t).releaseInterface(n)}async function TW(e,t,n,r){hW(r,`control-in length`);let i=await mW(e,t).controlTransferIn(n,r);return{status:i.status??`ok`,bytes:i.data?gW(i.data):new ArrayBuffer(0)}}async function EW(e,t,n,r){hW(r.byteLength,`control-out payload`);let i=await mW(e,t).controlTransferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function DW(e,t,n,r){hW(r,`transfer-in length`);let i=await mW(e,t).transferIn(n,r);return{status:i.status??`ok`,bytes:i.data?gW(i.data):new ArrayBuffer(0)}}async function OW(e,t,n,r){hW(r.byteLength,`transfer-out payload`);let i=await mW(e,t).transferOut(n,r);return{status:i.status??`ok`,bytesWritten:i.bytesWritten}}async function kW(e,t){await mW(e,t).reset()}const AW=6e4;function jW(){return Bn()}function MW(e){return new Promise(t=>{let n=!1,r=e=>{n||(n=!0,clearTimeout(i),t(e))},i=setTimeout(()=>r({cancelled:!0}),AW);zn(`usb-device`,e??[],void 0,{timeoutMs:AW}).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 NW(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var PW=class{registry;constructor(e){this.registry=e}usb(){let e=sW();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}list(){return _W(this.registry,this.usb())}async request(e){if(jW()){let t=await MW(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 pW(this.registry.register(n),n)}return vW(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(yW(this.registry,e))}open(e){return bW(this.registry,e)}close(e){return xW(this.registry,e)}selectConfig(e,t){return SW(this.registry,e,t)}claim(e,t){return CW(this.registry,e,t)}release(e,t){return wW(this.registry,e,t)}async controlIn(e,t,n){let r=await TW(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}controlOut(e,t,n){return EW(this.registry,e,t,NW(n))}async transferIn(e,t,n){let r=await DW(this.registry,e,t,n);return{status:r.status,bytes:new Uint8Array(r.bytes)}}transferOut(e,t,n){return OW(this.registry,e,t,NW(n))}reset(e){return kW(this.registry,e)}},FW=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:NW(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:NW(n)})}async reset(e){await this.rpc.call(`usb-reset`,{handle:e})}};function IW(e,t){return e&&sW()?new PW(dW()):t?new FW(t):null}function LW(e,t,n,r={}){let{header:i,window:a}=GV(t),o=new Map,s=!1,c=r.dispatch??(e=>TV(e)?OV(e):vV(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}=UV(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 RW=r(`realm-host`);function zW(e,t,n={}){let r=new Map,i=n.syncFsBridgeEnabled?pV({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;BW(e,i,t,n,o,c)};e.addEventListener(`message`,l);let u=i&&n.syncSab?LW(e,n.syncSab,i):void 0;return e.start?.(),{syncFsToken:i,dispose:()=>{if(!a){a=!0,u?.dispose(),i&&gV(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 BW(e,t,n,r,i,a){try{let o=await VW(t,n,r,i,a),s={type:`realm-rpc-res`,id:t.id,result:o},c=AG(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 VW(e,t,n,r,i){switch(e.channel){case`vfs`:return qW(e.op,e.args,t);case`exec`:return oG(e.op,e.args,t,i);case`fetch`:return uG(e.op,e.args,t);case`browser`:return mG(e.op,e.args,HW(n),n);case`usb`:return DG(e.op,e.args,WW(n));case`serial`:return OG(e.op,e.args,GW(n));case`hid`:return kG(e.op,e.args,KW(n),r);case`module`:return fG(e.op,e.args,t);case`wasm`:return pG(e.op,e.args,t);default:throw Error(`realm-host: unknown channel '${e.channel}'`)}}function HW(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 UW(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 WW(e){if(e.usbBackend)return e.usbBackend;let t=IW(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=oW(a(),i());if(!t)throw Error(`serial is not available in this runtime`);return t}function KW(e){if(e.hidBackend)return e.hidBackend;let t=yU(a(),i());if(!t)throw Error(`hid is not available in this runtime`);return t}async function qW(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 nG(n,typeof t[0]==`string`?t[0]:n.cwd);case`flushWrites`:{let e=t[0];return await rG(n,e),!0}default:throw Error(`realm-host: unknown vfs op '${e}'`)}}const JW=10485760;function YW(e){return e.fileCount>=500||e.totalBytes>=JW}function XW(e){return e.entries.length>=2e4}async function ZW(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 QW(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 $W(e,t,n,r,i){if(n>1048576||YW(r)||r.totalBytes+n>JW){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 eG(e,t,i,r);return}r.entries.push({path:t,content:a,isDirectory:!1}),r.fileCount+=1,r.totalBytes+=a.byteLength}async function eG(e,t,n,r){let i;try{i=await e.fs.stat(t)}catch{return}if(i.isDirectory){await ZW(e,t,n,r);return}r.entries.push({path:t,content:new Uint8Array,isDirectory:!1,truncated:!0,size:i.size})}async function tG(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 QW(e,t,i.size,n);continue}let a;try{a=await e.fs.stat(t)}catch{continue}a.isDirectory?await ZW(e,t,r,n):a.isFile&&await $W(e,t,a.size,n,r)}}async function nG(e,t){let n={entries:[],totalBytes:0,fileCount:0};return await tG(e,t,n),t!==`/tmp`&&await tG(e,`/tmp`,n),{entries:n.entries}}async function rG(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 iG=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]),aG=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`]);async function oG(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 cG(t,n,r);if(e===`kill`)return lG(t,r);throw Error(`realm-host: unknown exec op '${e}'`)}function sG(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 cG(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??{};sG(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 lG(e,t){let[n,r]=e,i=t.spawns.get(n);if(!i)return!1;let a=typeof r==`string`&&iG.has(r)?r:`SIGTERM`;aG.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 uG(e,t,n){if(e!==`request`)throw Error(`realm-host: unknown fetch op '${e}'`);let[r,i]=t,a=await(n.fetch?bU(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 dG(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 fG(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=dG(n),s={reader:o,readBytes:e=>n.fs.readFileBuffer(e),fromDir:i};return GH({entryCode:r,fromDir:i,entryFilename:a,reader:o,transpile:kH({ipk:s}),transpileEntry:AH({ipk:s})})}async function pG(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 Oa(e=>n.fs.readFileBuffer(e),i)}async function mG(e,t,n,r){switch(e){case`findTab`:return _G(n,t[0]??{});case`ensureTab`:{let e=t[0];return vG(n,e,t[1]??{})}case`eval`:{let e=t[0],r=t[1];return yG(n,e,r,!1)}case`evalAsync`:{let e=t[0],r=t[1];return yG(n,e,r,!0)}case`cookie`:{let e=t[0],r=t[1];return CG(n,e,r)}case`localStorage`:{let e=t[0],r=t[1];return wG(n,e,r)}case`wsObserve`:{let e={...t[0],scoopJid:r.scoopJid};return await UW(r).observe(e)}case`wsUpdate`:{let e=t[0],n=t[1]??{};return UW(r).update(e,n)}case`wsClose`:{let e=t[0];return UW(r).close(e)}case`wsList`:return UW(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 SG(n,e,r)}default:throw Error(`realm-host: unknown browser op '${e}'`)}}function hG(){try{let e=globalThis.localStorage;return e?!!(e.getItem(`slicc.trayWorkerBaseUrl`)||e.getItem(`slicc.trayJoinUrl`)):!1}catch{return!1}}async function gG(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=hG()?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){RW.debug(`panel-rpc list-remote-targets failed`,{err:String(e)})}return t}async function _G(e,t){let n=await gG(e);if(t.domain){let e=t.domain.toLowerCase();for(let t of n){let n=TG(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 vG(e,t,n){let r=await gG(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=EG(t);if(e){let t=r.find(t=>EG(t.url)===e);if(t)return t}}return{targetId:await e.createPage(t),url:t,title:``}}async function yG(e,t,n,r){return e.withTab(t,async()=>bG(await e.evaluate(n,{awaitPromise:r,returnByValue:!0})))}function bG(e){if(typeof e!=`string`)return e;let t=xG(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=xG(t);if(typeof e==`object`&&e)return e}return t}return e}function xG(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 SG(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(){
1658
1658
  try {
1659
1659
  var entries = performance.getEntriesByType('resource');
1660
1660
  var now = performance.now();
@@ -1670,7 +1670,7 @@ except BaseException:
1670
1670
  })()`,{returnByValue:!0}))return})}async function CG(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 wG(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 TG(e){try{return new URL(e).hostname}catch{return null}}function EG(e){try{return new URL(e).origin}catch{return null}}async function DG(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 OG(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 kG(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 AG(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 jG(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?MG(e.syncSabBytes):void 0,a=zW(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+`
1671
1671
  `,exitCode:1},1)}},l=e=>{let t=e.message??`realm error`;f({stdout:``,stderr:t+`
1672
1672
  `,exitCode:1},1)},u=()=>{f({stdout:``,stderr:`realm-runner: worker message could not be deserialized
1673
- `,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 MG(e){if(KV())try{return new SharedArrayBuffer(64+(e??1048576))}catch{return}}let NG=!1;function PG(e){NG=e}function FG(){return NG}const IG=new TextDecoder(`utf-8`,{fatal:!1});new TextEncoder;function LG(e){let t=e;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 IG.decode(n)}function RG(e){return e}function zG(e){if(e.length===0)return``;let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return t.join(``)}const BG=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 VG(e){return BG[e]??null}function HG(e,t){let n=VG(e);if(!n)return{};let r=t.find(t=>t.providerId===e)?.apiKey?.trim();return r?{[n]:r}:{}}let UG=null;function WG(e){let t=UG;return UG=e,t}async function GG(){if(!UG)return{};try{return await UG()??{}}catch{return{}}}function KG(){return async()=>{let{getAccounts:e,getSelectedProvider:t}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r);return HG(t(),e())}}async function qG(e,t,n,r,i={}){return await n.fs.exists(e)?JG(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 JG(e,t,n,r,i={}){let a=i.realmFactory??YG(),o=r?.processManager??QG()??ZG(),s=r?.owner??{kind:`system`},c=i.filename??t[1]??`<eval>`;return await jG({pm:o,realmFactory:a,owner:s,kind:`js`,code:e,argv:t,env:{...s.kind===`scoop`?{}:await GG(),...Object.fromEntries(n.env.entries())},cwd:n.cwd,filename:c,stdin:RG(n.stdin),ctx:n,ppid:r?.getParentPid?.(),syncFsBridgeEnabled:FG()})}function YG(){return typeof Worker<`u`||typeof document<`u`?hH():dH()}let XG=null;function ZG(){return XG||=new Xi,XG}function QG(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}function $G(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 eK=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=Qt();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:`progress`,progress:e}]})}}scrubbed(e){return this.scrubLabel?tK(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=nK(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:nK(i)})})}};async function tK(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function nK(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function rK(e,t){return t.length?`${e} ${t.join(` `)}`:e}function iK(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function aK(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:iK(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 oK={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}},sK=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function cK(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 lK(e,t){switch(e.type){case`CommandSubstitution`:return bK(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=lK(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function uK(e,t){let n=0;for(let r of e.parts){let e=lK(r,t);if(e===null)return null;n+=e}return n}function dK(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=uK(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=uK(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=cK(e.name);if(r===null||sK.has(r))return null;if(!t.has(r))return n;n+=1;let i=oK[r];if(i){let r=e.args.map(cK);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(sK.has(a))return null;t.has(a)&&(n+=1)}return n}function fK(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 pK(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||cK(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=cK(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 mK(e){let t=0;for(let n of e){let e=n.type===`Word`?hK(n.word):fK(n);if(e===null)return null;t+=e}return t}function hK(e){let t=pK(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=mK(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function gK(e){let t=0;for(let n of e){let e=hK(n);if(e===null)return null;t+=e}return t}function _K(e,t){let n=0;for(let r of e){let e=yK(r,t);if(e===null)return null;n+=e}return n}function vK(e,t){switch(e.type){case`SimpleCommand`:return dK(e,t);case`For`:{if(!e.words)return null;let n=gK(e.words),r=_K(e.body,t);return n===null||r===null?null:e.words.filter(e=>pK(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return _K(e.body,t);case`FunctionDef`:return 0;default:return null}}function yK(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=vK(e,t);if(r===null)return null;n+=r}return n}function bK(e,t){return _K(e.statements,t)}function xK(e,t){let n=bK(e,t);return{totalSteps:n!==null&&n>0?n:null}}function SK(e){return e.split(`
1673
+ `,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 MG(e){if(KV())try{return new SharedArrayBuffer(64+(e??1048576))}catch{return}}let NG=!1;function PG(e){NG=e}function FG(){return NG}const IG=new TextDecoder(`utf-8`,{fatal:!1});new TextEncoder;function LG(e){let t=e;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 IG.decode(n)}function RG(e){return e}function zG(e){if(e.length===0)return``;let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return t.join(``)}const BG=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 VG(e){return BG[e]??null}function HG(e,t){let n=VG(e);if(!n)return{};let r=t.find(t=>t.providerId===e)?.apiKey?.trim();return r?{[n]:r}:{}}let UG=null;function WG(e){let t=UG;return UG=e,t}async function GG(){if(!UG)return{};try{return await UG()??{}}catch{return{}}}function KG(){return async()=>{let{getAccounts:e,getSelectedProvider:t}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r);return HG(t(),e())}}async function qG(e,t,n,r,i={}){return await n.fs.exists(e)?JG(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 JG(e,t,n,r,i={}){let a=i.realmFactory??YG(),o=r?.processManager??QG()??ZG(),s=r?.owner??{kind:`system`},c=i.filename??t[1]??`<eval>`;return await jG({pm:o,realmFactory:a,owner:s,kind:`js`,code:e,argv:t,env:{...s.kind===`scoop`?{}:await GG(),...Object.fromEntries(n.env.entries())},cwd:n.cwd,filename:c,stdin:RG(n.stdin),ctx:n,ppid:r?.getParentPid?.(),syncFsBridgeEnabled:FG()})}function YG(){return typeof Worker<`u`||typeof document<`u`?hH():dH()}let XG=null;function ZG(){return XG||=new Xi,XG}function QG(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}function $G(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 eK=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=Qt();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:`progress`,progress:e}]})}}scrubbed(e){return this.scrubLabel?tK(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=nK(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:nK(i)})})}};async function tK(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function nK(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function rK(e,t){return t.length?`${e} ${t.join(` `)}`:e}function iK(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function aK(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:iK(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 oK={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}},sK=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function cK(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 lK(e,t){switch(e.type){case`CommandSubstitution`:return bK(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=lK(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function uK(e,t){let n=0;for(let r of e.parts){let e=lK(r,t);if(e===null)return null;n+=e}return n}function dK(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=uK(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=uK(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=cK(e.name);if(r===null||sK.has(r))return null;if(!t.has(r))return n;n+=1;let i=oK[r];if(i){let r=e.args.map(cK);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(sK.has(a))return null;t.has(a)&&(n+=1)}return n}function fK(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 pK(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||cK(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=cK(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 mK(e){let t=0;for(let n of e){let e=n.type===`Word`?hK(n.word):fK(n);if(e===null)return null;t+=e}return t}function hK(e){let t=pK(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=mK(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function gK(e){let t=0;for(let n of e){let e=hK(n);if(e===null)return null;t+=e}return t}function _K(e,t){let n=0;for(let r of e){let e=yK(r,t);if(e===null)return null;n+=e}return n}function vK(e,t){switch(e.type){case`SimpleCommand`:return dK(e,t);case`For`:{if(!e.words)return null;let n=gK(e.words),r=_K(e.body,t);return n===null||r===null?null:e.words.filter(e=>pK(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return _K(e.body,t);case`FunctionDef`:return 0;default:return null}}function yK(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=vK(e,t);if(r===null)return null;n+=r}return n}function bK(e,t){return _K(e.statements,t)}function xK(e,t){let n=bK(e,t);return{totalSteps:n!==null&&n>0?n:null}}function SK(e){return e.split(`
1674
1674
  `).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var CK=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 wK=globalThis.setTimeout.bind(globalThis);function TK(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function EK(e,t={}){let n=t.now??Date.now,r=t.setTimeout??wK,i=t.isAborted??(()=>!1),a=t.label??TK,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 DK=globalThis.setTimeout.bind(globalThis);function OK(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 kK(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 AK(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??DK;return{...e,async execute(n,a){let o=kK(n),s=o>=0?OK(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=rK(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 jK=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 MK(e,t,n={}){if((n.skip??jK).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=rK(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 NK(e){return Zr(`sudo`,e)}async function PK(e,t){let n=e.trim();if(!n||yee(ei(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:NK(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function FK(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function IK(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function LK(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:IK(e.installAll)},affinity:{apps:FK(e.apps),tasks:FK(e.tasks),role:FK(e.role),purpose:FK(e.purpose)},priority:n}})}const RK={apps:3,tasks:2,role:1,purpose:1};function zK(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*RK.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*RK.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=RK.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=RK.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 BK(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 VK(e){let t=new Set;try{let n=await e.readDir(Na);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 HK(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 WK(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 GK(e,t){try{let n=UK(t);if(!n)return[];let r=await e(`${ka}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?LK(Mt(r.body).data):[]}catch{return[]}}async function KK(e){let t;try{t=await e(Va,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ba(e,Va))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return LK(Mt(t.body).data)}function qK(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 JK(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 Xa(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 YK(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 Qa(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 Ya(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 XK(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 JK(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=qK(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 Xa(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 ZK(e,t,n,r,i,a,o,s,c,l){let u=await Fa(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 YK(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 Ya(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 QK(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 $K(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=HK(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=HK(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([KK(t),GK(t,a.company),VK(e)]);o=WK(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Va}: ${e instanceof Error?e.message:String(e)}`])}let c=zK(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=QK(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await za(a,o,t);return c.status===`error`?ZK(n,i,a,o,d,u,r,s,t,e):XK(n,i,Aa(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Wa(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function eq(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let tq,nq;async function rq(e){if(tq)return tq;if(nq!==void 0)return nq;nq=(async()=>{let t;try{t=await e(Pa,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ba(e,Pa))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=Mt(t.body),r=Array.isArray(n)?n:n.skills??[];return tq=r,r})();try{return await nq}catch(e){throw nq=void 0,e}}async function iq(e,t){let n=await rq(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 aq=/^[A-Za-z0-9._-]+$/;function oq(e){return!e||e===`.`||e===`..`?!1:aq.test(e)}function sq(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(`/`)||!oq(r)||!oq(i))return null;let a=eq(r);return oq(a)?{hostname:a,task:i}:null}function cq(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 lq(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(`
1675
1675
  `)}function uq(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
1676
1676
  `)}function dq(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
@@ -1777,7 +1777,7 @@ Examples:
1777
1777
  skill list
1778
1778
  skill info bluebubbles
1779
1779
  skill read bluebubbles
1780
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-DoL_3MkV.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${mq()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0}:{stdout:gq(t,`Discoverable skills`),stderr:``,exitCode:0}}case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
1780
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-CjSmgIMj.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${mq()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0}:{stdout:gq(t,`Discoverable skills`),stderr:``,exitCode:0}}case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
1781
1781
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:_q(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
1782
1782
  `,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+`
1783
1783
  `,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 bq=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&kr(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=>qa(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=>Mr(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 xq(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=bq.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 Sq(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Cq(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 wq(e,t,n,r){let i=await Cq(e,t);return Ra(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Sq(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Tq(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await wq(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 Ia(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 Eq(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 Fa(t),d=await Ka(s,c,o.ref,u,!0);if(d&&r.sha===d&&await Dq(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Oq(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 Tq(e,`${Na}/${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 Nq(e,{changes:h,writes:g,removals:_}),await Za(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 Dq(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 Oq(e,t,n,r,i,a,o){let s=await za(e,t,a,i??`main`);if(s.status===`ok`){let i=Aa(s.files),a=n||kq(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:Mq(i,a),path:a}}try{return{files:jq(Aq(await La(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 kq(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 Aq(e){return new Map([...e].filter(([e])=>ja(e)))}function jq(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Mq(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);ja(e)&&r.set(e,i)}return jq(r)}async function Nq(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 Pq(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 fq(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Na}/${n}/SKILL.md`,u=await Cq(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&uq(new TextDecoder().decode(u))===uq(c.content);if(Sq(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${Na}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Za(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function Fq(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 Iq(e,t,n,r){let i=qa(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 Lq(e,t,n){if(t.length===0)return{targets:await eo(e),missing:[]};let r=[],i=[];for(let a of t){let t=await Ga(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?Iq(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}}function Rq(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
@@ -1811,7 +1811,7 @@ Nothing to update — all skills are current.
1811
1811
  `,{stdout:s,stderr:``,exitCode:0}}function Qq(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
1812
1812
  `,exitCode:1}:kr(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
1813
1813
  `,exitCode:1}}function $q(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`||!Mr(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
1814
- `,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=Qq(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 eJ(e){let t=await(await import(`./skills-DoL_3MkV.js`).then(e=>e.t)).discoverSkills(e);return t.length===0?{stdout:`No discoverable local skills found.\n\n${mq()}`,stderr:``,exitCode:0}:{stdout:gq(t,`Discoverable local skills`),stderr:``,exitCode:0}}async function tJ(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./skills-DoL_3MkV.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 Ga(n,t),a=i?Ja(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:_q(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+`
1814
+ `,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=Qq(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 eJ(e){let t=await(await import(`./skills-CjSmgIMj.js`).then(e=>e.t)).discoverSkills(e);return t.length===0?{stdout:`No discoverable local skills found.\n\n${mq()}`,stderr:``,exitCode:0}:{stdout:gq(t,`Discoverable local skills`),stderr:``,exitCode:0}}async function tJ(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./skills-CjSmgIMj.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 Ga(n,t),a=i?Ja(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:_q(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+`
1815
1815
  `,stderr:``,exitCode:0}}async function nJ(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 Xa(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 rJ(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 Ya(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 iJ(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Ya(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 aJ(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 oJ(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Fa(r),l=await Qa(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:aJ(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:aJ(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 za(i,a,r,o);if(e.status===`ok`){let r=await Ka(i,a,o,c),s=await nJ(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 rJ(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await iJ(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 Wa()),{stdout:p,stderr:m,exitCode:+!!m}}async function sJ(e,t,n,r){switch(e[0]){case`tabs`:return Xq(t,n,r,e.includes(`--json`));case`recommendations`:return Zq(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Bq(e.slice(1),t,n);case`list`:return eJ(t);case`info`:case`read`:return tJ(e[0],e[1],t);case`search`:return lJ(e,n);default:return null}}function cJ(e,t,n){return H(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return vq();let a=await sJ(r,e,t,n);if(a)return a;let o=$q(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return vq();if(o.sourceRef.startsWith(`tessl:`))return uJ(o.sourceRef,o.force,e,t);let s=sq(o.sourceRef);if(s)return pq(s.hostname,s.task,e,t,o.force);let c=qa(o.sourceRef);return c?oJ(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 lJ(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?Gq(a,t,i):vq()}async function uJ(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
1816
1816
  `,exitCode:1};let a=await Hq(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Fa(r);return Ya(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function dJ(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
1817
1817
 
@@ -2225,7 +2225,7 @@ Examples:
2225
2225
  `;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+=`
2226
2226
  `;return t}async function IZ(e){let t=V(e.slice(1),{});if(`error`in t)return NZ(t.error);if(!pt()){let e=await OZ();if(!e)return kZ(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
2227
2227
  `,stderr:``,exitCode:0}:{stdout:FZ(t),stderr:``,exitCode:0}}let{ok:n,data:r}=await jZ(`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
2228
- `,stderr:``,exitCode:0}:{stdout:FZ(i),stderr:``,exitCode:0}}async function LZ(e){let t=e[0],n=V(e.slice(1),{});if(`error`in n)return NZ(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`crontask: ${t} requires an ID\n`,exitCode:1};if(!pt()){let e=await OZ();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}:kZ(`delete`)}let{ok:i,status:a,data:o}=await jZ(`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 RZ(){return H(`crontask`,async(e,t)=>{let n=e[0];if(!n||Vr(e,{valueFlags:MZ}))return AZ();try{switch(n){case`create`:return await PZ(e,t.env);case`list`:return await IZ(e);case`delete`:case`kill`:return await LZ(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 zZ(e){return H(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DLs1-rFE.js`);return r(e,t,n)})}const BZ=`slicc-fs`;async function VZ(){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===BZ)}catch{return!0}}async function HZ(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(BZ)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function UZ(){if(!await VZ())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await HZ();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 WZ(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
2228
+ `,stderr:``,exitCode:0}:{stdout:FZ(i),stderr:``,exitCode:0}}async function LZ(e){let t=e[0],n=V(e.slice(1),{});if(`error`in n)return NZ(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`crontask: ${t} requires an ID\n`,exitCode:1};if(!pt()){let e=await OZ();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}:kZ(`delete`)}let{ok:i,status:a,data:o}=await jZ(`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 RZ(){return H(`crontask`,async(e,t)=>{let n=e[0];if(!n||Vr(e,{valueFlags:MZ}))return AZ();try{switch(n){case`create`:return await PZ(e,t.env);case`list`:return await IZ(e);case`delete`:case`kill`:return await LZ(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 zZ(e){return H(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-CtZwCMnc.js`);return r(e,t,n)})}const BZ=`slicc-fs`;async function VZ(){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===BZ)}catch{return!0}}async function HZ(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(BZ)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function UZ(){if(!await VZ())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await HZ();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 WZ(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
2229
2229
 
2230
2230
  Usage:
2231
2231
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -2780,8 +2780,8 @@ Options:
2780
2780
  `,stderr:``,exitCode:0}},Zae=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(`
2781
2781
  `)}`)+`
2782
2782
  `,stderr:``,exitCode:0}},Qae=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-${Ci(new Date)}.pdf`;try{await e.withTab(r.targetId,async n=>{let r=(await e.getTransport().send(`Page.printToPDF`,{},n)).data,a=Pi(r);await t.writeFile(i,a)})}catch(e){let t=e instanceof Error?e.message:String(e);return kt()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
2783
- `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${i}\n`,stderr:``,exitCode:0}},$ae=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=``;return{stdout:await e.withTab(a.targetId,async()=>{let s;if(r[0]?.startsWith(`e`)){let t=n.snapshots.get(a.targetId);if(!t)throw Error(`No snapshot available. Run "snapshot" first.`);s=await Yae(e,t,r[0]),s||(o+=`Warning: could not clip to element ${r[0]}, capturing full viewport\n`)}let c=i[`max-width`]?parseInt(i[`max-width`],10):void 0,l=await e.screenshot({fullPage:i.fullPage===`true`||i[`full-page`]===`true`,...s?{clip:s}:{},...c?{maxWidth:c}:{}}),u=i.filename||`/tmp/screenshot-${Date.now()}.png`,d=Pi(l);await t.writeFile(u,d);try{await b3(t,n);let e=`/.playwright/screenshots/screenshot-${Ci(new Date)}.png`;await t.writeFile(e,d)}catch{}return`Screenshot saved to ${u} (${Math.round(d.length/1024)} KB)`})+`
2784
- `,stderr:o,exitCode:0}},eoe=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}},toe=async({browser:e,fs:t,positional:n,flags:r})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
2783
+ `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${i}\n`,stderr:``,exitCode:0}},$ae=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 Yae(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=Pi(c);await t.writeFile(l,u);try{await b3(t,n);let e=`/.playwright/screenshots/screenshot-${Ci(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+`
2784
+ `,stderr:``,exitCode:0}},eoe=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}},toe=async({browser:e,fs:t,positional:n,flags:r})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
2785
2785
  `,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() {
2786
2786
  var items = ${JSON.stringify(e)};
2787
2787
  for (var i = 0; i < items.length; i++) {
@@ -2799,7 +2799,7 @@ Options:
2799
2799
  `,exitCode:1};let i=parseInt(r,10);if(i<1)return{stdout:``,stderr:`tab-select index must be a positive integer
2800
2800
  `,exitCode:1};let a=await f3(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}},ioe=async({browser:e,state:t,positional:n,flags:r})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
2801
2801
  `,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
2802
- `,exitCode:1}:(await e.withTab(i.targetId,async()=>{let t=e.getTransport(),n=e.getSessionId();await t.send(`Emulation.setDeviceMetricsOverride`,{width:a,height:o,deviceScaleFactor:1,mobile:!1},n)}),t.snapshots.delete(i.targetId),{stdout:`Resized viewport to ${a}x${o}\n`,stderr:``,exitCode:0})};r(`tray-sync`),new TextEncoder;const D3=r(`playwright-teleport`);function aoe(){D3.info(`Listing available follower runtimes`);let e=O4();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
2802
+ `,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})};r(`tray-sync`),new TextEncoder;const D3=r(`playwright-teleport`);function aoe(){D3.info(`Listing available follower runtimes`);let e=O4();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
2803
2803
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
2804
2804
  `,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(`
2805
2805
  `)+`
@@ -2966,11 +2966,12 @@ Commands:
2966
2966
  Highlight an element with a visual overlay (--hide to remove)
2967
2967
  help Show this help message
2968
2968
 
2969
- Aliases: ${Ni.filter(t=>t!==e).join(`, `)}`}function hoe(e,t){return Xr(e,t,O3(e))}function goe(){let e=(Di.string??[]).map(e=>`--${e}`),t=new Set(Di.boolean??[]);for(let[e,n]of Object.entries(Di.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 _oe(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function voe(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}async function yoe(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Oi(e,t.tab,n):null)??r}\n`,exitCode:1}}async function boe(e,t,n,r){let i=V(_oe(n),voe(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=ki(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:hoe(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 xoe(e,t,n){let r=O3(e),i=t?wi(t,n):null,a=goe();return H(e,async o=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`)return{stdout:r+`
2970
- `,stderr:``,exitCode:0};let s=o[0],c=o.slice(1),l=await boe(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,p=moe.get(s);if(!p)f={stdout:``,stderr:`Unknown command: ${s}\nRun "playwright-cli help" for usage.\n`,exitCode:1};else try{f=await p({browser:t,fs:n,state:i,positional:u,flags:d})}catch(e){f=await yoe(t,d,e)}let m=d.tab??null,h=null;Fi.has(s)&&f.exitCode===0&&m&&(h=await Wae(t,n,m,i));try{await Gae(n,i,{command:s,args:c,result:f,snapshotPath:h,targetId:m})}catch{}return f})}const Soe=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`,`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`,...Ni,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`fswatch`]],[`Scoops & agents`,[`agent`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`meminfo`]]]);function Coe(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:
2971
- `);let a=[];for(let[e,t]of Soe){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(`
2969
+ Aliases: ${Ni.filter(t=>t!==e).join(`, `)}`}function hoe(e,t){return Xr(e,t,O3(e))}function goe(){let e=(Di.string??[]).map(e=>`--${e}`),t=new Set(Di.boolean??[]);for(let[e,n]of Object.entries(Di.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 _oe(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function voe(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}function yoe(e){return typeof e.getTabLockStats==`function`?e.getTabLockStats():void 0}function boe(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.
2970
+ `;return{...n,stderr:n.stderr+a}}async function xoe(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Oi(e,t.tab,n):null)??r}\n`,exitCode:1}}async function Soe(e,t,n,r){let i=V(_oe(n),voe(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=ki(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:hoe(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 Coe(e,t,n){let r=O3(e),i=t?wi(t,n):null,a=goe();return H(e,async o=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`)return{stdout:r+`
2971
+ `,stderr:``,exitCode:0};let s=o[0],c=o.slice(1),l=await Soe(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=yoe(t),p,m=moe.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 xoe(t,d,e)}let h=d.tab??null,g=null;Fi.has(s)&&p.exitCode===0&&h&&(g=await Wae(t,n,h,i));try{await Gae(n,i,{command:s,args:c,result:p,snapshotPath:g,targetId:h})}catch{}return boe(t,f,p)})}const woe=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`,`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`,...Ni,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`fswatch`]],[`Scoops & agents`,[`agent`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`meminfo`]]]);function Toe(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:
2972
+ `);let a=[];for(let[e,t]of woe){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(`
2972
2973
  `)+`
2973
- `}function woe(e={}){return H(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
2974
+ `}function Eoe(e={}){return H(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
2974
2975
 
2975
2976
  Usage: commands [command]
2976
2977
 
@@ -2981,7 +2982,7 @@ If a command name is provided, shows help for that command.
2981
2982
  Otherwise, lists all available commands.
2982
2983
 
2983
2984
  Note: This is an enhanced version of 'help' that shows all custom commands.
2984
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:Coe(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
2985
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:Toe(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function Doe(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
2985
2986
 
2986
2987
  Usage:
2987
2988
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -3003,8 +3004,8 @@ Notes:
3003
3004
  unless --force is passed.
3004
3005
  - Weights are read by the speech engines via the preview SW from the
3005
3006
  target directory; transformers expects <localModelPath>/<repo>/.
3006
- `,stderr:``,exitCode:e}}function k3(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const Eoe=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function Doe(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 Eoe.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function A3(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function Ooe(e,t,n){let r=Doe(e);if(`error`in r)return k3(r.error);let i=po(r.repo,r.to,t.cwd),a=``;try{let e=await so({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} (${A3(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${A3(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof oo?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):k3(e instanceof Error?e.message:String(e))}}function koe(e){return{name:`hf`,async execute(t,n){if(t.length===0||Vr(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return Toe(+(t.length===0));let r=t[0];return r===`download`?Ooe(t.slice(1),n,e.fetch):k3(`unknown subcommand: ${r}`)}}}const Aoe=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function joe(e){return Si(e,Aoe)}function j3(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 Moe(e){let t={};return e.has(`--vid`)&&(t.vendorId=j3(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=j3(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=j3(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=j3(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function M3(e){let t=RG(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function N3(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Noe(e){return e.toString(16).padStart(2,`0`)}function P3(e){return`0x${e.toString(16).padStart(4,`0`)}`}function F3(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${P3(e.usagePage)}:${P3(e.usage??0)}`;return`${e.handle}\t${P3(e.vendorId)}:${P3(e.productId)}${r}\t${t}${n}`}function I3(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 L3(e){return`${e.map(F3).join(`
3007
- `)}\n`}function R3(e){return`${Noe(e.reportId)} ${N3(e.bytes)}`.trimEnd()}function z3(e){return{stdout:e,stderr:``,exitCode:0}}function B3(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const Poe=`hid - access HID devices via WebHID
3007
+ `,stderr:``,exitCode:e}}function k3(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const Ooe=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function koe(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 Ooe.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function A3(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function Aoe(e,t,n){let r=koe(e);if(`error`in r)return k3(r.error);let i=po(r.repo,r.to,t.cwd),a=``;try{let e=await so({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} (${A3(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${A3(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof oo?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):k3(e instanceof Error?e.message:String(e))}}function joe(e){return{name:`hf`,async execute(t,n){if(t.length===0||Vr(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return Doe(+(t.length===0));let r=t[0];return r===`download`?Aoe(t.slice(1),n,e.fetch):k3(`unknown subcommand: ${r}`)}}}const Moe=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function Noe(e){return Si(e,Moe)}function j3(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 Poe(e){let t={};return e.has(`--vid`)&&(t.vendorId=j3(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=j3(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=j3(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=j3(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function M3(e){let t=RG(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function N3(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Foe(e){return e.toString(16).padStart(2,`0`)}function P3(e){return`0x${e.toString(16).padStart(4,`0`)}`}function F3(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${P3(e.usagePage)}:${P3(e.usage??0)}`;return`${e.handle}\t${P3(e.vendorId)}:${P3(e.productId)}${r}\t${t}${n}`}function I3(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 L3(e){return`${e.map(F3).join(`
3008
+ `)}\n`}function R3(e){return`${Foe(e.reportId)} ${N3(e.bytes)}`.trimEnd()}function z3(e){return{stdout:e,stderr:``,exitCode:0}}function B3(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const Ioe=`hid - access HID devices via WebHID
3008
3009
 
3009
3010
  Usage: hid <subcommand> [options]
3010
3011
 
@@ -3028,21 +3029,21 @@ Options:
3028
3029
  -h, --help
3029
3030
 
3030
3031
  Report payloads are capped at ${QH} bytes (4 MiB).
3031
- `;function V3(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return z3(t)}return z3(e.length?`${N3(e)}\n`:``)}function Foe(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function Ioe(e){let t=await e.list();return t.length===0?z3(`no granted HID devices
3032
+ `;function V3(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return z3(t)}return z3(e.length?`${N3(e)}\n`:``)}function Loe(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function Roe(e){let t=await e.list();return t.length===0?z3(`no granted HID devices
3032
3033
  `):z3(`${t.map(F3).join(`
3033
- `)}\n`)}async function Loe(e,t){let n=e.get(`--__resolved`),r=Moe(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?B3(`request: missing resolved handle`):z3(L3(I3(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Qt();return a?Roe(r,i,a,t):z3(L3(I3(await t.request(r),i)))}async function Roe(e,t,n,r){let i=await Vn(`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=KH();if(!t)return B3(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=ZH(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return B3(`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=I3(s.length>0?s:[],t);return c.length===0?B3(`request: granted device could not be re-acquired`):z3(L3(c))}async function zoe(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),z3(``)):B3(`${e}: handle required`)}async function Boe(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return B3(`${e}: handle and report-id required`);let o=j3(a,`report-id`),s=M3(n);return s.length>4194304?B3(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),z3(``))}async function Voe(e,t,n){let[,r,i]=e;return!r||i===void 0?B3(`feature-get: handle and report-id required`):V3((await t.receiveFeatureReport(r,j3(i,`report-id`))).bytes,n)}async function Hoe(e,t,n){let r=e[1];if(!r)return B3(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(R3(e))});try{await Foe(t.signal)}finally{await a()}return z3(i.length?`${i.join(`
3034
- `)}\n`:``)}async function Uoe(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return B3(`query: handle and report-id required`);let s=j3(o,`report-id`),c=M3(t);if(c.length>4194304)return B3(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?j3(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`?B3(`query: no input report within ${l}ms`):i?V3(t.bytes,!0):z3(`${R3(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function Woe(e,t,n){let{positionals:r,flags:i,bools:a}=joe(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Ioe(n);case`request`:return Loe(i,n);case`open`:case`close`:return zoe(o,r,n);case`send`:case`feature-send`:return Boe(o,r,t,n);case`feature-get`:return Voe(r,n,s);case`watch`:return Hoe(r,t,n);case`query`:return Uoe(r,t,i,n,s);default:return B3(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function Goe(){return H(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z3(Poe);let n=yU(a(),i());if(!n)return B3(`WebHID is unavailable in this environment`);try{return await Woe(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?B3(`user cancelled or no device selected`):B3(t)}})}function H3(){return{stdout:`imgcat - preview image and video files in the preview tab
3034
+ `)}\n`)}async function zoe(e,t){let n=e.get(`--__resolved`),r=Poe(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?B3(`request: missing resolved handle`):z3(L3(I3(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Qt();return a?Boe(r,i,a,t):z3(L3(I3(await t.request(r),i)))}async function Boe(e,t,n,r){let i=await Vn(`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=KH();if(!t)return B3(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=ZH(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return B3(`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=I3(s.length>0?s:[],t);return c.length===0?B3(`request: granted device could not be re-acquired`):z3(L3(c))}async function Voe(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),z3(``)):B3(`${e}: handle required`)}async function Hoe(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return B3(`${e}: handle and report-id required`);let o=j3(a,`report-id`),s=M3(n);return s.length>4194304?B3(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),z3(``))}async function Uoe(e,t,n){let[,r,i]=e;return!r||i===void 0?B3(`feature-get: handle and report-id required`):V3((await t.receiveFeatureReport(r,j3(i,`report-id`))).bytes,n)}async function Woe(e,t,n){let r=e[1];if(!r)return B3(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(R3(e))});try{await Loe(t.signal)}finally{await a()}return z3(i.length?`${i.join(`
3035
+ `)}\n`:``)}async function Goe(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return B3(`query: handle and report-id required`);let s=j3(o,`report-id`),c=M3(t);if(c.length>4194304)return B3(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?j3(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`?B3(`query: no input report within ${l}ms`):i?V3(t.bytes,!0):z3(`${R3(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function Koe(e,t,n){let{positionals:r,flags:i,bools:a}=Noe(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Roe(n);case`request`:return zoe(i,n);case`open`:case`close`:return Voe(o,r,n);case`send`:case`feature-send`:return Hoe(o,r,t,n);case`feature-get`:return Uoe(r,n,s);case`watch`:return Woe(r,t,n);case`query`:return Goe(r,t,i,n,s);default:return B3(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function qoe(){return H(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z3(Ioe);let n=yU(a(),i());if(!n)return B3(`WebHID is unavailable in this environment`);try{return await Koe(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?B3(`user cancelled or no device selected`):B3(t)}})}function H3(){return{stdout:`imgcat - preview image and video files in the preview tab
3035
3036
 
3036
3037
  Usage: imgcat <path> [path...]
3037
3038
 
3038
3039
  Options:
3039
3040
  -h, --help Show this help message
3040
- `,stderr:``,exitCode:0}}function Koe(e={}){return H(`imgcat`,async(t,n)=>{if(t.length===0||Vr(t))return H3();let r=V(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return H3();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
3041
+ `,stderr:``,exitCode:0}}function Joe(e={}){return H(`imgcat`,async(t,n)=>{if(t.length===0||Vr(t))return H3();let r=V(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return H3();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
3041
3042
  `,exitCode:1};if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
3042
- `,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=Xt(t);if(!Yt(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 qoe=new Set([`run`,`run-script`]),Joe=new Set([`test`,`start`,`stop`,`restart`]),Yoe=new Set([` `,` `,`
3043
- `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),Xoe=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
3044
- `]),Zoe=/^[A-Za-z_][A-Za-z0-9_]*=/,Qoe=/^[@A-Za-z0-9._-]+$/,$oe=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),ese=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),tse=new Set([`ipx`,`npx`]);function nse(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function rse(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*U3(e){let t=Ut(e);for(;yield t,t!==`/`;)t=Vt(t).dir}function ise(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 W3(e){return typeof e==`string`?e:void 0}async function ase(e,t){for(let n of U3(t)){let t=Wt(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await rse(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:W3(r.name),version:W3(r.version),scripts:ise(r.scripts)}}return null}function ose(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(Yoe.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function sse(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(Xoe.has(i)){r=!0,n++;continue}let a=ose(e,n);if(a.end===a.start){n++;continue}if(r&&!Zoe.test(a.text)){if(ese.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function cse(e,t){return!Qoe.test(e)||$oe.has(e)||tse.has(e)?!1:!t.isRegistered(e)}async function lse(e,t){let n=sse(e).filter(e=>cse(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 G3(e){let t=[];for(let n of U3(e))t.push(Wt(n,`node_modules`,`.bin`));return t}function use(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...G3(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 K3(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function dse(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${Wt(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${K3(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
3045
- `)}\n`}function fse(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function pse(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}fse(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function q3(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function mse(e,t,n,r){let i=r.length>0?` ${r.map(nse).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 hse(e,t,n,r){if(n===`start`&&await r.exists(Wt(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function gse(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of G3(t.dir))if(await e.exists(Wt(r,n)))return!0;return!1}}}async function _se(e,t,n,r,i,a){let o=i.exec;if(!o)return q3(e,`run requires shell exec support, which this context does not provide`);let s=gse(a.fs,t,i),c=K3(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 lse(a.body,s),{cwd:t.dir,env:use(t,a.event,a.body,i),stdin:RG(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 J3(e,t,n,r){let i;try{i=await ase(r.fs,n.cwd)}catch(t){return q3(e,t instanceof Error?t.message:String(t))}if(!i)return q3(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=pse(t);if(o===void 0)return{stdout:dse(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await hse(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 q3(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${Wt(i.dir,`package.json`)} defines no scripts)`}`)}return _se(e,i,mse(i,o,c,s),a,n,r)}const vse=new Set([`install`,`i`,`add`]),yse=new Set([`uninstall`,`remove`,`rm`,`un`]),bse=new Set([`list`,`ls`]),xse=new Set([`-g`,`--global`,`--location=global`]);function Y3(e){return`${e} - install packages from the npm registry into node_modules
3043
+ `,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=Xt(t);if(!Yt(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 Yoe=new Set([`run`,`run-script`]),Xoe=new Set([`test`,`start`,`stop`,`restart`]),Zoe=new Set([` `,` `,`
3044
+ `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),Qoe=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
3045
+ `]),$oe=/^[A-Za-z_][A-Za-z0-9_]*=/,ese=/^[@A-Za-z0-9._-]+$/,tse=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),nse=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),rse=new Set([`ipx`,`npx`]);function ise(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function ase(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*U3(e){let t=Ut(e);for(;yield t,t!==`/`;)t=Vt(t).dir}function ose(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 W3(e){return typeof e==`string`?e:void 0}async function sse(e,t){for(let n of U3(t)){let t=Wt(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await ase(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:W3(r.name),version:W3(r.version),scripts:ose(r.scripts)}}return null}function cse(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(Zoe.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function lse(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(Qoe.has(i)){r=!0,n++;continue}let a=cse(e,n);if(a.end===a.start){n++;continue}if(r&&!$oe.test(a.text)){if(nse.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function use(e,t){return!ese.test(e)||tse.has(e)||rse.has(e)?!1:!t.isRegistered(e)}async function dse(e,t){let n=lse(e).filter(e=>use(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 G3(e){let t=[];for(let n of U3(e))t.push(Wt(n,`node_modules`,`.bin`));return t}function fse(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...G3(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 K3(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function pse(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${Wt(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${K3(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
3046
+ `)}\n`}function mse(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function hse(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}mse(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function q3(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function gse(e,t,n,r){let i=r.length>0?` ${r.map(ise).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 _se(e,t,n,r){if(n===`start`&&await r.exists(Wt(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function vse(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of G3(t.dir))if(await e.exists(Wt(r,n)))return!0;return!1}}}async function yse(e,t,n,r,i,a){let o=i.exec;if(!o)return q3(e,`run requires shell exec support, which this context does not provide`);let s=vse(a.fs,t,i),c=K3(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 dse(a.body,s),{cwd:t.dir,env:fse(t,a.event,a.body,i),stdin:RG(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 J3(e,t,n,r){let i;try{i=await sse(r.fs,n.cwd)}catch(t){return q3(e,t instanceof Error?t.message:String(t))}if(!i)return q3(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=hse(t);if(o===void 0)return{stdout:pse(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await _se(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 q3(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${Wt(i.dir,`package.json`)} defines no scripts)`}`)}return yse(e,i,gse(i,o,c,s),a,n,r)}const bse=new Set([`install`,`i`,`add`]),xse=new Set([`uninstall`,`remove`,`rm`,`un`]),Sse=new Set([`list`,`ls`]),Cse=new Set([`-g`,`--global`,`--location=global`]);function Y3(e){return`${e} - install packages from the npm registry into node_modules
3046
3047
  and run package.json scripts
3047
3048
 
3048
3049
  Usage:
@@ -3103,15 +3104,15 @@ are recorded in <cwd>/package.json under dependencies. With -g, packages go
3103
3104
  to /shared/lib/node_modules and deps are recorded in /shared/lib/package.json.
3104
3105
  Existing fields are preserved. Idempotent: re-installing an already-satisfied
3105
3106
  package is a clean no-op.
3106
- `}function Sse(e){return X3(e)}function X3(e){let t=!1,n=[];for(let r of e){if(xse.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function Cse(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function Z3(e){return e instanceof Error?e.message:String(e)}async function Q3(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function wse(e,t,n){let r;try{r=await uo({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof go?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${Z3(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}: ${Z3(t.error)}`);return{stdout:i.length>0?`${i.join(`
3107
+ `}function wse(e){return X3(e)}function X3(e){let t=!1,n=[];for(let r of e){if(Cse.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function Tse(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function Z3(e){return e instanceof Error?e.message:String(e)}async function Q3(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function Ese(e,t,n){let r;try{r=await uo({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof go?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${Z3(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}: ${Z3(t.error)}`);return{stdout:i.length>0?`${i.join(`
3107
3108
  `)}\n`:``,stderr:a.length>0?`${a.join(`
3108
- `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function $3(e,t,n,r){let{global:i,specs:a}=Sse(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 wse(e,n,r);let o;try{o=await mo(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${Z3(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}: ${Z3(t.error)}`);return i&&o.results.length>0&&await Q3(r),{stdout:s.length>0?`${s.join(`
3109
+ `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function $3(e,t,n,r){let{global:i,specs:a}=wse(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 mo(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${Z3(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}: ${Z3(t.error)}`);return i&&o.results.length>0&&await Q3(r),{stdout:s.length>0?`${s.join(`
3109
3110
  `)}\n`:``,stderr:c.length>0?`${c.join(`
3110
- `)}\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(`
3111
- `)}\n`}async function Ese(e,t,n,r){let{global:i,specs:a}=X3(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await fo(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${Z3(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}: ${Z3(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await Q3(r),{stdout:s.length>0?`${s.join(`
3111
+ `)}\n`:``,exitCode:o.errors.length===0?0:1}}function Dse(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(`
3112
+ `)}\n`}async function Ose(e,t,n,r){let{global:i,specs:a}=X3(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await fo(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${Z3(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}: ${Z3(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await Q3(r),{stdout:s.length>0?`${s.join(`
3112
3113
  `)}\n`:``,stderr:l.length>0?`${l.join(`
3113
- `)}\n`:``,exitCode:+!!u}}async function Dse(e,t,n,r){let{global:i}=X3(t);try{let e=i?await co(r.fs):await io(r.fs,n.cwd);return{stdout:Tse(i?$i:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${Z3(t)}\n`,exitCode:1}}}async function Ose(e,t,n,r){let{global:i}=X3(t);return{stdout:`${i?da:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function e6(e,t){let n=e===`i`;return H(e,async(r,i)=>{if(Cse(r))return{stdout:Y3(e),stderr:``,exitCode:0};if(n)return $3(e,r,i,t);if(r.length===0)return{stdout:Y3(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return vse.has(a)?$3(e,o,i,t):yse.has(a)?Ese(e,o,i,t):bse.has(a)?Dse(e,o,i,t):a===`root`?Ose(e,o,i,t):qoe.has(a)?J3(e,o,i,{fs:t.fs}):Joe.has(a)?J3(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const t6=`0.5.424`,n6=`v86 is not installed in node_modules: run \`${ya} v86@${t6}\` (no network fallback)`;let r6=null;async function kse(e={}){return r6||=Ase(e.ipk).catch(e=>{throw r6=null,e}),r6}async function i6(e){let t;try{t=await Sa(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=Vt(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 Ase(e){if(ga())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(n6);let t=await i6(e);if(!t)throw Error(n6);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 Da(t.wasmBytes),version:t.version}}function jse(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const a6={command:`biome`,example:`biome check foo.js`,bootstrap:`${ya} ${dY}`},o6={command:`playwright-cli`,example:`playwright-cli open https://example.com`},s6={command:`puppeteer`,example:`puppeteer open https://example.com`},c6={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${ya} @imagemagick/magick-wasm@${no}`},l6={...c6,command:`magick`,example:`magick input.png output.jpg`},u6={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},d6={"@biomejs/biome":a6,biome:a6,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${ya} esbuild-wasm@${Ea}`},playwright:o6,"@playwright/test":o6,"playwright-core":o6,puppeteer:s6,"puppeteer-core":s6,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:_a},"pdf-poppler":u6,"pdf-to-img":u6,pdf2pic:u6,"pdf-img-convert":u6,poppler:u6,"poppler-utils":u6,imagemagick:c6,"imagemagick-cli":c6,"imagemagick-convert":c6,"magick-cli":l6,"@imagemagick/magick-wasm":l6,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${ya} @ffmpeg/core@${K1}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${ya} @ffmpeg/core@${K1}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${ya} v86@${t6}`}};function Mse(e){return Object.hasOwn(d6,e)?d6[e]:void 0}function f6(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function Nse(e,t,n,r){let i=n.length?[r.command,...n].map(f6).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(f6).join(` `)}`),`${a.join(`
3114
- `)}\n`}const Pse=/require\(\s*["']([^"']+)["']\s*\)/;function p6(e){return`${e} - run an installed package's executable bin
3114
+ `)}\n`:``,exitCode:+!!u}}async function kse(e,t,n,r){let{global:i}=X3(t);try{let e=i?await co(r.fs):await io(r.fs,n.cwd);return{stdout:Dse(i?$i:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${Z3(t)}\n`,exitCode:1}}}async function Ase(e,t,n,r){let{global:i}=X3(t);return{stdout:`${i?da:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function e6(e,t){let n=e===`i`;return H(e,async(r,i)=>{if(Tse(r))return{stdout:Y3(e),stderr:``,exitCode:0};if(n)return $3(e,r,i,t);if(r.length===0)return{stdout:Y3(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return bse.has(a)?$3(e,o,i,t):xse.has(a)?Ose(e,o,i,t):Sse.has(a)?kse(e,o,i,t):a===`root`?Ase(e,o,i,t):Yoe.has(a)?J3(e,o,i,{fs:t.fs}):Xoe.has(a)?J3(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const t6=`0.5.424`,n6=`v86 is not installed in node_modules: run \`${ya} v86@${t6}\` (no network fallback)`;let r6=null;async function jse(e={}){return r6||=Mse(e.ipk).catch(e=>{throw r6=null,e}),r6}async function i6(e){let t;try{t=await Sa(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=Vt(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 Mse(e){if(ga())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(n6);let t=await i6(e);if(!t)throw Error(n6);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 Da(t.wasmBytes),version:t.version}}function Nse(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const a6={command:`biome`,example:`biome check foo.js`,bootstrap:`${ya} ${dY}`},o6={command:`playwright-cli`,example:`playwright-cli open https://example.com`},s6={command:`puppeteer`,example:`puppeteer open https://example.com`},c6={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${ya} @imagemagick/magick-wasm@${no}`},l6={...c6,command:`magick`,example:`magick input.png output.jpg`},u6={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},d6={"@biomejs/biome":a6,biome:a6,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${ya} esbuild-wasm@${Ea}`},playwright:o6,"@playwright/test":o6,"playwright-core":o6,puppeteer:s6,"puppeteer-core":s6,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:_a},"pdf-poppler":u6,"pdf-to-img":u6,pdf2pic:u6,"pdf-img-convert":u6,poppler:u6,"poppler-utils":u6,imagemagick:c6,"imagemagick-cli":c6,"imagemagick-convert":c6,"magick-cli":l6,"@imagemagick/magick-wasm":l6,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${ya} @ffmpeg/core@${K1}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${ya} @ffmpeg/core@${K1}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${ya} v86@${t6}`}};function Pse(e){return Object.hasOwn(d6,e)?d6[e]:void 0}function f6(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function Fse(e,t,n,r){let i=n.length?[r.command,...n].map(f6).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(f6).join(` `)}`),`${a.join(`
3115
+ `)}\n`}const Ise=/require\(\s*["']([^"']+)["']\s*\)/;function p6(e){return`${e} - run an installed package's executable bin
3115
3116
 
3116
3117
  Usage:
3117
3118
  ${e} [--force] [--global] <pkg-or-bin> [args...]
@@ -3124,12 +3125,12 @@ Options:
3124
3125
  --force Install a package even when a SLICC built-in shadows it
3125
3126
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
3126
3127
  -h, --help Show this help message
3127
- `}async function m6(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function h6(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function Fse(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*g6(e,t=!1){if(t){yield da;return}let n=Ut(e);for(;yield Wt(n,`node_modules`),n!==`/`;)n=Vt(n).dir;yield da}async function Ise(e,t,n,r=!1){for(let i of g6(t,r)){let t=Wt(i,`.bin`,n);if(!await h6(e,t))continue;let r=await m6(e,t),a=Pse.exec(r),o=Vt(t).dir;return{binFilePath:a?Wt(o,a[1]):t,argvName:t}}return null}function _6(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function Lse(e,t){if(typeof e==`string`)return{binName:_6(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,_6(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 Rse(e,t,n,r=!1){for(let i of g6(t,r)){let t=Wt(i,n),r=Wt(t,`package.json`);if(!await h6(e,r))continue;let a;try{a=JSON.parse(await m6(e,r))}catch{return null}let o=Lse(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:Wt(t,s),argvName:Wt(i,`.bin`,o.binName)}}return null}async function v6(e,t,n,r=!1){return await Ise(e,t,n,r)??await Rse(e,t,n,r)}async function zse(e,t,n){for(let r of g6(t))if(await h6(e,Wt(r,n,`package.json`)))return!0;return!1}function y6(e){return e instanceof Error?e.message:String(e)}function b6(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function Bse(e,t,n,r){try{let i=await mo([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:b6(e,`failed to install '${t}': ${y6(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
3128
- `)}\n`:``}}catch(n){return{error:b6(e,`failed to install '${t}': ${y6(n)}`)}}}async function Vse(e,t,n,r){return await h6(r,n)?null:await Fse(r,n)?b6(e,`bin target '${n}' is a directory, not a file`):b6(e,`bin file '${n}' for '${t}' does not exist`)}async function Hse(e,t,n,r,i,a){if(await zse(a.fs,i.cwd,t))return{error:b6(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:Mse(t);if(o)return{error:{stdout:``,stderr:Nse(e,t,n,o),exitCode:1}};let s=await Bse(e,t,i,a);if(`error`in s)return s;let c=await v6(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:b6(e,`package '${t}' was installed but does not expose an executable bin`)}}function x6(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:p6(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:p6(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await v6(t.fs,r.cwd,c,o)}catch(t){return b6(e,y6(t))}let d=``;if(!u){if(o)return b6(e,`no global bin '${c}' found in ${da}`);let n=await Hse(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await Vse(e,c,u.binFilePath,t.fs);if(f)return f;let p=await JG(jH(await m6(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 Use=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function Wse(e={}){return H(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Yse();let n=e.processManager??Gse();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
3129
- `,exitCode:1};let r=Kse(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=qse(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
3130
- `)}\n`:``,exitCode:+!i}})}function Gse(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Kse(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
3131
- `,exitCode:2};let i=S6(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=Jse(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
3132
- `,exitCode:2}:Use.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function qse(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 S6(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 Jse(e){return e===`-9`?`SIGKILL`:S6(e.slice(1))}function Yse(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
3128
+ `}async function m6(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function h6(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function Lse(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*g6(e,t=!1){if(t){yield da;return}let n=Ut(e);for(;yield Wt(n,`node_modules`),n!==`/`;)n=Vt(n).dir;yield da}async function Rse(e,t,n,r=!1){for(let i of g6(t,r)){let t=Wt(i,`.bin`,n);if(!await h6(e,t))continue;let r=await m6(e,t),a=Ise.exec(r),o=Vt(t).dir;return{binFilePath:a?Wt(o,a[1]):t,argvName:t}}return null}function _6(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function zse(e,t){if(typeof e==`string`)return{binName:_6(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,_6(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 Bse(e,t,n,r=!1){for(let i of g6(t,r)){let t=Wt(i,n),r=Wt(t,`package.json`);if(!await h6(e,r))continue;let a;try{a=JSON.parse(await m6(e,r))}catch{return null}let o=zse(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:Wt(t,s),argvName:Wt(i,`.bin`,o.binName)}}return null}async function v6(e,t,n,r=!1){return await Rse(e,t,n,r)??await Bse(e,t,n,r)}async function Vse(e,t,n){for(let r of g6(t))if(await h6(e,Wt(r,n,`package.json`)))return!0;return!1}function y6(e){return e instanceof Error?e.message:String(e)}function b6(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function Hse(e,t,n,r){try{let i=await mo([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:b6(e,`failed to install '${t}': ${y6(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
3129
+ `)}\n`:``}}catch(n){return{error:b6(e,`failed to install '${t}': ${y6(n)}`)}}}async function Use(e,t,n,r){return await h6(r,n)?null:await Lse(r,n)?b6(e,`bin target '${n}' is a directory, not a file`):b6(e,`bin file '${n}' for '${t}' does not exist`)}async function Wse(e,t,n,r,i,a){if(await Vse(a.fs,i.cwd,t))return{error:b6(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:Pse(t);if(o)return{error:{stdout:``,stderr:Fse(e,t,n,o),exitCode:1}};let s=await Hse(e,t,i,a);if(`error`in s)return s;let c=await v6(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:b6(e,`package '${t}' was installed but does not expose an executable bin`)}}function x6(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:p6(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:p6(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await v6(t.fs,r.cwd,c,o)}catch(t){return b6(e,y6(t))}let d=``;if(!u){if(o)return b6(e,`no global bin '${c}' found in ${da}`);let n=await Wse(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await Use(e,c,u.binFilePath,t.fs);if(f)return f;let p=await JG(jH(await m6(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 Gse=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function Kse(e={}){return H(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Zse();let n=e.processManager??qse();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
3130
+ `,exitCode:1};let r=Jse(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Yse(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
3131
+ `)}\n`:``,exitCode:+!i}})}function qse(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Jse(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
3132
+ `,exitCode:2};let i=S6(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=Xse(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
3133
+ `,exitCode:2}:Gse.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Yse(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 S6(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 Xse(e){return e===`-9`?`SIGKILL`:S6(e.slice(1))}function Zse(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
3133
3134
 
3134
3135
  Send a signal to one or more processes tracked by the kernel.
3135
3136
 
@@ -3172,8 +3173,8 @@ Examples:
3172
3173
  panels List the registered panel ids
3173
3174
 
3174
3175
  Zones: ${C6.join(`, `)}
3175
- `,Xse=new Set([`files`,`term`,`memory`,`monitor`]),T6=`sprinkle:`;function E6(e){return e===`chat`||Xse.has(e)||e.startsWith(T6)?e:`${T6}${e}`}function Zse(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 D6=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Qse(e){let t=e[0],n=t?mS(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function $se(e){let t=e[0];return C6.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${C6.join(`|`)}>`}}function ece(e){let[t,n]=e;return!t||!C6.includes(n)?{error:`usage: layout open <surfaceId> <${C6.join(`|`)}>`}:{kind:`open`,surfaceId:E6(t),zone:n}}function tce(e){let t=e[0];return t?{kind:`close`,surfaceId:E6(t)}:{error:`usage: layout close <surfaceId>`}}function nce(e){let[t,n]=e;return!t||!C6.includes(n)?{error:`usage: layout move <surfaceId> <${C6.join(`|`)}>`}:{kind:`move`,surfaceId:E6(t),zone:n}}function rce(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=Zse(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 ice(e){let t=e[0];if(!t)return{error:D6};let n={};for(let t=1;t<e.length;t+=2){let r=rce(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:D6}:{kind:`size`,surfaceId:E6(t),size:n}}function ace(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 O6(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function k6(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:E6(n)}:{kind:`hide`,panelId:E6(n)}:{error:`usage: layout ${e} <panelId>`}}function oce(){let e=mS(uS);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function sce(e){let[t,...n]=e;switch(t){case`set`:return Qse(n);case`chat`:return $se(n);case`open`:return ece(n);case`close`:return tce(n);case`move`:return nce(n);case`size`:return ice(n);case`reset`:return{kind:`reset`};case`edit`:return oce();case`load`:return O6(`load`,n);case`save`:return ace(n);case`delete`:return O6(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return k6(`show`,n);case`hide`:return k6(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function cce(){return H(`layout`,async e=>{if(Vr(e))return{stdout:e[0]?.startsWith(`-`)?w6:Xr(`layout`,e[0],w6),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(pS).join(`, `)}\ndefault: ${uS}\n`,stderr:``,exitCode:0};let t=sce(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
3176
- `,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 A6=vo.id;function lce(){return`local-llm — inspect and configure the Local LLM provider
3176
+ `,Qse=new Set([`files`,`term`,`memory`,`monitor`]),T6=`sprinkle:`;function E6(e){return e===`chat`||Qse.has(e)||e.startsWith(T6)?e:`${T6}${e}`}function $se(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 D6=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function ece(e){let t=e[0],n=t?mS(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function tce(e){let t=e[0];return C6.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${C6.join(`|`)}>`}}function nce(e){let[t,n]=e;return!t||!C6.includes(n)?{error:`usage: layout open <surfaceId> <${C6.join(`|`)}>`}:{kind:`open`,surfaceId:E6(t),zone:n}}function rce(e){let t=e[0];return t?{kind:`close`,surfaceId:E6(t)}:{error:`usage: layout close <surfaceId>`}}function ice(e){let[t,n]=e;return!t||!C6.includes(n)?{error:`usage: layout move <surfaceId> <${C6.join(`|`)}>`}:{kind:`move`,surfaceId:E6(t),zone:n}}function ace(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=$se(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 oce(e){let t=e[0];if(!t)return{error:D6};let n={};for(let t=1;t<e.length;t+=2){let r=ace(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:D6}:{kind:`size`,surfaceId:E6(t),size:n}}function sce(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 O6(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function k6(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:E6(n)}:{kind:`hide`,panelId:E6(n)}:{error:`usage: layout ${e} <panelId>`}}function cce(){let e=mS(uS);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function lce(e){let[t,...n]=e;switch(t){case`set`:return ece(n);case`chat`:return tce(n);case`open`:return nce(n);case`close`:return rce(n);case`move`:return ice(n);case`size`:return oce(n);case`reset`:return{kind:`reset`};case`edit`:return cce();case`load`:return O6(`load`,n);case`save`:return sce(n);case`delete`:return O6(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return k6(`show`,n);case`hide`:return k6(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function uce(){return H(`layout`,async e=>{if(Vr(e))return{stdout:e[0]?.startsWith(`-`)?w6:Xr(`layout`,e[0],w6),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(pS).join(`, `)}\ndefault: ${uS}\n`,stderr:``,exitCode:0};let t=lce(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
3177
+ `,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 A6=vo.id;function dce(){return`local-llm — inspect and configure the Local LLM provider
3177
3178
 
3178
3179
  Usage:
3179
3180
  local-llm Show current config + verify connection
@@ -3192,20 +3193,20 @@ Common base URLs:
3192
3193
  llama.cpp http://localhost:8080/v1
3193
3194
  vLLM http://localhost:8000/v1
3194
3195
  Jan http://localhost:1337/v1
3195
- `}function uce(){return H(A6,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:lce(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./provider-settings-ESBXURmC.js`),{verifyConnection:a}=await import(`./local-llm-BOag0PRI.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(A6);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
3196
+ `}function fce(){return H(A6,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:dce(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./provider-settings-BauKD_sq.js`),{verifyConnection:a}=await import(`./local-llm-D9Nfa9d2.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(A6);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
3196
3197
  `,exitCode:1};let c=await a(s,t(A6)??void 0);if(!c.ok){let e=[`✗ Could not reach ${s}`,` runtime: ${c.runtime.kind}${c.runtime.version?` (${c.runtime.version})`:``}`,` error: ${c.error?.message??`unknown`}`];return c.error?.hint&&e.push(` hint: ${c.error.hint}`),{stdout:``,stderr:e.join(`
3197
3198
  `)+`
3198
3199
  `,exitCode:1}}if(o===`discover`){let e=n(A6)??``;return i(A6,e,s,c.models.join(`, `)),{stdout:[`✓ ${s} (${c.runtime.kind}${c.runtime.version?` ${c.runtime.version}`:``})`,` Saved ${c.models.length} model${c.models.length===1?``:`s`} to Settings:`,...c.models.map(e=>` • ${e}`)].join(`
3199
3200
  `)+`
3200
3201
  `,stderr:``,exitCode:0}}return{stdout:[`✓ ${s}`,` runtime: ${c.runtime.kind}${c.runtime.version?` (${c.runtime.version})`:``}`,` models: ${c.models.length}`,...c.models.map(e=>` • ${e}`)].join(`
3201
3202
  `)+`
3202
- `,stderr:``,exitCode:0}})}function dce(){return{stdout:`usage: man <topic>
3203
+ `,stderr:``,exitCode:0}})}function pce(){return{stdout:`usage: man <topic>
3203
3204
 
3204
3205
  Fetches documentation for a given topic from sliccy.com.
3205
- `,stderr:``,exitCode:0}}function fce(e){return e.replace(/<[^>]*>/g,``).replace(/&amp;/g,`&`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).trimEnd()}function pce(){let e=p();return H(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return dce();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
3206
+ `,stderr:``,exitCode:0}}function mce(e){return e.replace(/<[^>]*>/g,``).replace(/&amp;/g,`&`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).trimEnd()}function hce(){let e=p();return H(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return pce();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
3206
3207
  For example, try 'man commands'.
3207
- `,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:fce(new TextDecoder(`utf-8`).decode(t.body))+`
3208
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const mce=[`--silent`,`-s`,`--interactive`,`-i`],j6=r(`mcp-command`),M6=`/workspace/.mcp/aliases`;function N6(e){return{stdout:e,stderr:``,exitCode:0}}function P6(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function F6(e){return P6(`mcp: ${e}`)}function hce(){return`usage: mcp <command> [args]
3208
+ `,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:mce(new TextDecoder(`utf-8`).decode(t.body))+`
3209
+ `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const gce=[`--silent`,`-s`,`--interactive`,`-i`],j6=r(`mcp-command`),M6=`/workspace/.mcp/aliases`;function N6(e){return{stdout:e,stderr:``,exitCode:0}}function P6(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function F6(e){return P6(`mcp: ${e}`)}function _ce(){return`usage: mcp <command> [args]
3209
3210
 
3210
3211
  Commands:
3211
3212
  add <url> <name> Register an MCP server. Runs OAuth if required.
@@ -3227,7 +3228,7 @@ Examples:
3227
3228
  mcp search forecast
3228
3229
  mcp auth weather
3229
3230
  mcp delete weather
3230
- `}function gce(e={}){return H(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return N6(hce());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await _ce(r,e);case`list`:case`ls`:return await yce(r,e);case`delete`:case`rm`:return await Sce(r,e);case`invoke`:return await Cce(r,e);case`search`:return await bce(r,e);case`refresh`:return await Nce(r,e);case`auth`:return await Pce(r,e);default:return P6(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return j6.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof yo?P6(`mcp ${n}: ${t}`,124):P6(`mcp ${n}: ${t}`)}})}async function _ce(e,t){if(Vr(e))return N6(`usage: mcp add <url> <name>
3231
+ `}function vce(e={}){return H(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return N6(_ce());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await yce(r,e);case`list`:case`ls`:return await xce(r,e);case`delete`:case`rm`:return await wce(r,e);case`invoke`:return await Tce(r,e);case`search`:return await Sce(r,e);case`refresh`:return await Fce(r,e);case`auth`:return await Ice(r,e);default:return P6(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return j6.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof yo?P6(`mcp ${n}: ${t}`,124):P6(`mcp ${n}: ${t}`)}})}async function yce(e,t){if(Vr(e))return N6(`usage: mcp add <url> <name>
3231
3232
 
3232
3233
  Probes <url> with an unauthenticated MCP \`initialize\`. If the server
3233
3234
  returns 401, runs OAuth discovery → dynamic client registration → PKCE
@@ -3236,20 +3237,20 @@ authorization-code flow, stores the access token, and retries.
3236
3237
  On success, the server is persisted to /workspace/.mcp/servers.json and
3237
3238
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
3238
3239
  short name resolves on the PATH.
3239
- `);let n=V(e,{});if(`error`in n)return F6(n.error);if(n.positionals.length<2)return P6(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return P6(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return P6(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r);if(await a(i,t.fs))return P6(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-DVC0x03n.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 vce(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>B6(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 Lce(i,t);let m=await U6(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Dh8rn79C.js`);e({name:i,serverUrl:r,auth:u})}return N6([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${M6}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
3240
+ `);let n=V(e,{});if(`error`in n)return F6(n.error);if(n.positionals.length<2)return P6(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return P6(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return P6(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r);if(await a(i,t.fs))return P6(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-DVC0x03n.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 bce(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>B6(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 zce(i,t);let m=await U6(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-C8BCYyOV.js`);e({name:i,serverUrl:r,auth:u})}return N6([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${M6}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
3240
3241
  `)+`
3241
- `)}async function vce(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r),c=await Fce(r.oauthFetchImpl),l=r.oauthLauncher??await V6(),u=await i(e,n,c);j6.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await bo(),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 yce(e,t){if(Vr(e))return N6(`usage: mcp list
3242
- `);let n=V(e,{});if(`error`in n)return F6(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-Dh8rn79C.js`);await r();let{listServers:i}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return N6("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 N6(I6(s))}function I6(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(`
3242
+ `)}async function bce(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r),c=await Lce(r.oauthFetchImpl),l=r.oauthLauncher??await V6(),u=await i(e,n,c);j6.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await bo(),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 xce(e,t){if(Vr(e))return N6(`usage: mcp list
3243
+ `);let n=V(e,{});if(`error`in n)return F6(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-C8BCYyOV.js`);await r();let{listServers:i}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return N6("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 N6(I6(s))}function I6(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(`
3243
3244
  `)+`
3244
- `}async function bce(e,t){if(Vr(e))return N6(`usage: mcp search <query>
3245
+ `}async function Sce(e,t){if(Vr(e))return N6(`usage: mcp search <query>
3245
3246
 
3246
3247
  Case-insensitive substring search across the cached tools of every
3247
3248
  registered MCP server. Matches tool name OR description and prints a
3248
3249
  table of (server, tool, description, match-field) rows.
3249
- `);let n=V(e,{});if(`error`in n)return F6(n.error);if(n.positionals.length===0)return P6(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-Dh8rn79C.js`);await a();let{listServers:o}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return N6("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 N6(`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,xce(e.description),e.match]);return N6(I6(u))}function xce(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Sce(e,t){if(e.length===0||Vr(e))return e.length===0?P6(`mcp delete: expected <name>`):N6(`usage: mcp delete <name>
3250
- `);let n=V(e,{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-Dh8rn79C.js`);await i(r);let{deleteServer:o}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),s=await o(r,t.fs);await Rce(r,t),await zce(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){j6.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?P6(`mcp delete: no server, alias, or account found for "${r}"`):N6([`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(`
3250
+ `);let n=V(e,{});if(`error`in n)return F6(n.error);if(n.positionals.length===0)return P6(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-C8BCYyOV.js`);await a();let{listServers:o}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return N6("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 N6(`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,Cce(e.description),e.match]);return N6(I6(u))}function Cce(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function wce(e,t){if(e.length===0||Vr(e))return e.length===0?P6(`mcp delete: expected <name>`):N6(`usage: mcp delete <name>
3251
+ `);let n=V(e,{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-C8BCYyOV.js`);await i(r);let{deleteServer:o}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),s=await o(r,t.fs);await Bce(r,t),await Vce(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){j6.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?P6(`mcp delete: no server, alias, or account found for "${r}"`):N6([`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(`
3251
3252
  `)+`
3252
- `)}async function Cce(e,t){if(e.length===0)return P6(`mcp invoke: expected <name>`);if(Vr(e.slice(0,1)))return N6(Tce());let n=V([e[0]],{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-Dh8rn79C.js`);await a(r);let{getServer:o}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return P6(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||Vr(i.slice(0,1)))return N6(Ece(r,s,c));let l=V([i[0]],{});if(`error`in l)return F6(l.error);let u=l.positionals[0];if(!u)return P6(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return P6(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=wce(i.slice(1));if(Vr(p))return N6(Dce(r,d));let h=Oce(p,d.inputSchema);if(!h.ok)return P6(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-DVC0x03n.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>B6(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Mce(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function wce(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=L6(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=L6(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 L6(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 Tce(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
3253
+ `)}async function Tce(e,t){if(e.length===0)return P6(`mcp invoke: expected <name>`);if(Vr(e.slice(0,1)))return N6(Dce());let n=V([e[0]],{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-C8BCYyOV.js`);await a(r);let{getServer:o}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return P6(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||Vr(i.slice(0,1)))return N6(Oce(r,s,c));let l=V([i[0]],{});if(`error`in l)return F6(l.error);let u=l.positionals[0];if(!u)return P6(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return P6(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=Ece(i.slice(1));if(Vr(p))return N6(kce(r,d));let h=Ace(p,d.inputSchema);if(!h.ok)return P6(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-DVC0x03n.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>B6(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Pce(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Ece(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=L6(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=L6(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 L6(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 Dce(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
3253
3254
 
3254
3255
  mcp invoke <name> List tools on <name>.
3255
3256
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -3266,20 +3267,20 @@ Arguments are coerced according to the tool's JSON Schema:
3266
3267
  string/integer/number/boolean. Bare \`--flag\` (no value or "--" next)
3267
3268
  is treated as true. Repeating a flag accumulates into an array when
3268
3269
  the schema declares \`type: array\`.
3269
- `}function Ece(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(`
3270
+ `}function Oce(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(`
3270
3271
  `)+`
3271
- `}function R6(e){return e??{}}function Dce(e,t){let n=R6(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(`
3272
+ `}function R6(e){return e??{}}function kce(e,t){let n=R6(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(`
3272
3273
  `)+`
3273
3274
  `;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(`
3274
3275
  `)+`
3275
- `}function Oce(e,t){let n=R6(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a={},o=0;for(;o<e.length;){let t=kce(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 kce(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Ace(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=jce(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 Ace(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 jce(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 Mce(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(`
3276
+ `}function Ace(e,t){let n=R6(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a={},o=0;for(;o<e.length;){let t=jce(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 jce(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Mce(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=Nce(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 Mce(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 Nce(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 Pce(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(`
3276
3277
  `),a=i.endsWith(`
3277
3278
  `)?``:`
3278
- `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Nce(e,t){if(e.length===0||Vr(e))return e.length===0?P6(`mcp refresh: expected <name>`):N6(`usage: mcp refresh <name>
3279
+ `;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||Vr(e))return e.length===0?P6(`mcp refresh: expected <name>`):N6(`usage: mcp refresh <name>
3279
3280
 
3280
3281
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
3281
3282
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
3282
- `);let n=V(e,{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-Dh8rn79C.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return P6(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-DVC0x03n.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>B6(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return P6(`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 U6(r,f,t);return N6(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function Pce(e,t){if(Vr(e))return N6(`usage: mcp auth <name> [--silent | --interactive]
3283
+ `);let n=V(e,{});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-C8BCYyOV.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return P6(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-DVC0x03n.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>B6(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return P6(`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 U6(r,f,t);return N6(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function Ice(e,t){if(Vr(e))return N6(`usage: mcp auth <name> [--silent | --interactive]
3283
3284
 
3284
3285
  Re-authenticate an existing MCP server. By default, attempts a silent
3285
3286
  token renewal using the persisted refresh_token; if that returns no
@@ -3291,7 +3292,7 @@ Options:
3291
3292
  -i, --interactive Skip silent renewal and open the OAuth popup
3292
3293
  directly. Use after revoking a refresh token or
3293
3294
  when the AS no longer accepts the cached one.
3294
- `);let n=V(e,{bool:mce});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`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 P6(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-Dh8rn79C.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-B0LOCSNJ.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return P6(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return P6(`mcp auth: server "${r}" does not use OAuth`);if(!s)return P6(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-rNbxX5Js.js`).then(e=>e.r),f=d(u);if(!f)return P6(`mcp auth: provider "${u}" is not registered`);if(a)return await z6(r,f,t);if(!f.onSilentRenew)return i?P6(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await z6(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 P6(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);j6.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?N6(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?P6(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await z6(r,f,t)}async function z6(e,t,n){if(!t.onOAuthLogin)return P6(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await V6(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?N6(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):P6(`mcp auth: interactive login for "${e}" did not complete`)}async function B6(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-rNbxX5Js.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){j6.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function V6(){let{createOAuthLauncher:e}=await import(`./oauth-service-CTntqv0R.js`);return e()}async function Fce(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-Co-pb0x0.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 H6(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-CZIZCIGv.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 Ice(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
3295
+ `);let n=V(e,{bool:gce});if(`error`in n)return F6(n.error);let r=n.positionals[0];if(!r)return P6(`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 P6(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-C8BCYyOV.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-CYcDJ2BI.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return P6(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return P6(`mcp auth: server "${r}" does not use OAuth`);if(!s)return P6(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-CU4-75kP.js`).then(e=>e.r),f=d(u);if(!f)return P6(`mcp auth: provider "${u}" is not registered`);if(a)return await z6(r,f,t);if(!f.onSilentRenew)return i?P6(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await z6(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 P6(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);j6.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?N6(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?P6(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await z6(r,f,t)}async function z6(e,t,n){if(!t.onOAuthLogin)return P6(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await V6(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?N6(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):P6(`mcp auth: interactive login for "${e}" did not complete`)}async function B6(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CU4-75kP.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){j6.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function V6(){let{createOAuthLauncher:e}=await import(`./oauth-service-CTntqv0R.js`);return e()}async function Lce(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-Co-pb0x0.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 H6(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-BYhuqz39.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 Rce(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
3295
3296
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
3296
3297
  const argv = Array.isArray(process.argv) ? process.argv.slice(2) : [];
3297
3298
  const escape = (s) => {
@@ -3305,8 +3306,8 @@ const r = await exec(cmd);
3305
3306
  if (r.stdout) process.stdout.write(r.stdout);
3306
3307
  if (r.stderr) process.stderr.write(r.stderr);
3307
3308
  process.exit(r.exitCode || 0);
3308
- `}async function Lce(e,t){let n=await H6(t.fs);await n.mkdir(M6,{recursive:!0}),await n.writeFile(`${M6}/${e}.jsh`,Ice(e)),t.scriptCatalog?.invalidateJsh()}async function Rce(e,t){let n=await H6(t.fs),r=`${M6}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){j6.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function zce(e,t){let{removeAppSprinkles:n}=await import(`./apps-B7jN2fow.js`);await n(e,t.fs)}async function U6(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-B7jN2fow.js`);return(await r(e,t,n.fs)).length}catch(t){return j6.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function W6(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function G6(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 Bce(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 Vce(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function Hce(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 Uce(e){let t=[`total: ${G6(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(`${G6(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Bce(e)}`)}return`${t.join(`
3309
- `)}\n`}function Wce(e={}){return H(`meminfo`,async t=>{let n=Hce(t);if(`error`in n)return W6(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
3309
+ `}async function zce(e,t){let n=await H6(t.fs);await n.mkdir(M6,{recursive:!0}),await n.writeFile(`${M6}/${e}.jsh`,Rce(e)),t.scriptCatalog?.invalidateJsh()}async function Bce(e,t){let n=await H6(t.fs),r=`${M6}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){j6.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-BobRGPt6.js`);await n(e,t.fs)}async function U6(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-BobRGPt6.js`);return(await r(e,t,n.fs)).length}catch(t){return j6.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function W6(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function G6(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 Hce(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 Uce(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function Wce(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 Gce(e){let t=[`total: ${G6(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(`${G6(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Hce(e)}`)}return`${t.join(`
3310
+ `)}\n`}function Kce(e={}){return H(`meminfo`,async t=>{let n=Wce(t);if(`error`in n)return W6(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
3310
3311
 
3311
3312
  Usage:
3312
3313
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -3317,8 +3318,8 @@ Notes:
3317
3318
  Document-Isolation-Policy). Embedded floats cannot be isolated and
3318
3319
  report why instead.
3319
3320
  - The browser randomizes measurement timing — expect a short delay.
3320
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??Vce();if(!r&&!e.measure)return W6(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return W6(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return W6(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Uce(a),stderr:``,exitCode:0}})}const K6=`/.cache/artificial-analysis.json`,Gce=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],q6=[`--provider`];function J6(e){return{stdout:``,stderr:e.endsWith(`
3321
- `)?e:`${e}\n`,exitCode:1}}async function Kce(e){try{let t=await e.readFile(K6),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function qce(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Jce(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 Yce(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(K6,JSON.stringify(n))}catch{}}async function Xce(e,t=!1){if(e&&!t){let t=await Kce(e);if(t)return t}let n={Accept:`application/json`},r=qce();r&&(n[`x-api-key`]=r);let i=p(),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=Jce(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await Yce(e,c),c}function Y6(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function Zce(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=Y6(e),a=t.find(e=>Y6(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 Qce(){return`models - list available LLM models
3321
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??Uce();if(!r&&!e.measure)return W6(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return W6(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return W6(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Gce(a),stderr:``,exitCode:0}})}const K6=`/.cache/artificial-analysis.json`,qce=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],q6=[`--provider`];function J6(e){return{stdout:``,stderr:e.endsWith(`
3322
+ `)?e:`${e}\n`,exitCode:1}}async function Jce(e){try{let t=await e.readFile(K6),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function Yce(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Xce(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 Zce(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(K6,JSON.stringify(n))}catch{}}async function Qce(e,t=!1){if(e&&!t){let t=await Jce(e);if(t)return t}let n={Accept:`application/json`},r=Yce();r&&(n[`x-api-key`]=r);let i=p(),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=Xce(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await Zce(e,c),c}function Y6(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function $ce(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=Y6(e),a=t.find(e=>Y6(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 ele(){return`models - list available LLM models
3322
3323
 
3323
3324
  Usage: models [options]
3324
3325
 
@@ -3330,24 +3331,24 @@ Options:
3330
3331
  --refresh Force re-fetch benchmark data from Artificial Analysis
3331
3332
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
3332
3333
  -h, --help Show this help message
3333
- `}function $ce(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function X6(e){return`$${e.toFixed(2)}`}const ele=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function tle(e){let t=`${e.id} ${e.name??``}`;return!ele.test(t)}function nle(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 rle(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),nle(t)??t.replace(/-[\d.]+$/,``)}function ile(e){let t=new Map;for(let n of e){let e=rle(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function ale(e,t,n,r,i){let a=i?Zce(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 ole(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=`${X6(e.cost.input)} / ${X6(e.cost.output)}`,a=`${$ce(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(`
3334
+ `}function tle(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function X6(e){return`$${e.toFixed(2)}`}const nle=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function rle(e){let t=`${e.id} ${e.name??``}`;return!nle.test(t)}function ile(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 ale(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),ile(t)??t.replace(/-[\d.]+$/,``)}function ole(e){let t=new Map;for(let n of e){let e=ale(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function sle(e,t,n,r,i){let a=i?$ce(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 cle(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=`${X6(e.cost.input)} / ${X6(e.cost.output)}`,a=`${tle(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(`
3334
3335
  `)+`
3335
- `}function sle(e){let t=V(e,{bool:Gce,value:q6});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 cle(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 lle(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(tle);if(o.length===0)return[];let s=o.map(e=>ale(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=ile(s)),s}function ule(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 dle(e,t){if(Vr(e,{valueFlags:q6}))return{stdout:Qce(),stderr:``,exitCode:0};let n=sle(e);if(`error`in n)return J6(`models: ${n.error}`);let r=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r);if(r.getAccounts().length===0)return J6(`No provider accounts configured. Run the provider settings to add one.
3336
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await Xce(t,n.forceRefresh);e.length>0&&(l=e)}let u=cle(r,n,s);if(`error`in u)return J6(u.error);let d=[],f=[];for(let e of u){let t=lle(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return J6(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(ole(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
3336
+ `}function lle(e){let t=V(e,{bool:qce,value:q6});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 ule(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 dle(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(rle);if(o.length===0)return[];let s=o.map(e=>sle(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=ole(s)),s}function fle(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 ple(e,t){if(Vr(e,{valueFlags:q6}))return{stdout:ele(),stderr:``,exitCode:0};let n=lle(e);if(`error`in n)return J6(`models: ${n.error}`);let r=await import(`./account-store-DcZy--PI.js`).then(e=>e.r);if(r.getAccounts().length===0)return J6(`No provider accounts configured. Run the provider settings to add one.
3337
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await Qce(t,n.forceRefresh);e.length>0&&(l=e)}let u=ule(r,n,s);if(`error`in u)return J6(u.error);let d=[],f=[];for(let e of u){let t=dle(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return J6(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(cle(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
3337
3338
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
3338
- `),f.push(ule(o,a,s,c)),{stdout:f.join(`
3339
- `),stderr:``,exitCode:0})}function fle(e){return H(`models`,async t=>dle(t,e))}const Z6=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function ple(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`-e`||n===`--eval`||Z6.has(n)||!n.startsWith(`-`))return t}return e.length}function mle(){return{stdout:`usage: node -e <code> [args...]
3340
- `,stderr:``,exitCode:0}}function hle(){return{stdout:`${ma}\n`,stderr:``,exitCode:0}}async function gle(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
3339
+ `),f.push(fle(o,a,s,c)),{stdout:f.join(`
3340
+ `),stderr:``,exitCode:0})}function mle(e){return H(`models`,async t=>ple(t,e))}const Z6=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function hle(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`-e`||n===`--eval`||Z6.has(n)||!n.startsWith(`-`))return t}return e.length}function gle(){return{stdout:`usage: node -e <code> [args...]
3341
+ `,stderr:``,exitCode:0}}function _le(){return{stdout:`${ma}\n`,stderr:``,exitCode:0}}async function vle(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
3341
3342
  `,exitCode:9}};if(e.length>0&&Z6.has(e[0]))return{kind:`ok`,code:LG(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 LG(t.stdin).trim().length>0?{kind:`ok`,code:LG(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"
3342
- `,exitCode:9}}}function _le(e={}){return{name:`node`,trusted:!0,async execute(t,n){let r=t.slice(0,ple(t));if(r.includes(`--help`)||r.includes(`-h`))return mle();if(r.includes(`--version`)||r.includes(`-v`))return hle();let i=await gle(t,n);if(i.kind===`result`)return i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i;return JG(jH(a),s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const vle=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function yle(){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 Q6=[],ble=[`--yes`];function xle(){return H(`nuke`,async e=>{if(Vr(e,{valueFlags:Q6}))return{stdout:`Usage: nuke <launch-code>
3343
+ `,exitCode:9}}}function yle(e={}){return{name:`node`,trusted:!0,async execute(t,n){let r=t.slice(0,hle(t));if(r.includes(`--help`)||r.includes(`-h`))return gle();if(r.includes(`--version`)||r.includes(`-v`))return _le();let i=await vle(t,n);if(i.kind===`result`)return i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i;return JG(jH(a),s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const ble=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function xle(){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 Q6=[],Sle=[`--yes`];function Cle(){return H(`nuke`,async e=>{if(Vr(e,{valueFlags:Q6}))return{stdout:`Usage: nuke <launch-code>
3343
3344
 
3344
3345
  Completely reset the environment by deleting all local data and reloading.
3345
3346
  Destroys the file system, chat history, and scoops database.
3346
3347
  Requires the secret launch code to proceed.
3347
- `,stderr:``,exitCode:0};let t=V(e,{value:Q6,bool:ble});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await yle(),Sle(vle)})(),{stdout:`Nuking everything…
3348
+ `,stderr:``,exitCode:0};let t=V(e,{value:Q6,bool:Sle});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await xle(),wle(ble)})(),{stdout:`Nuking everything…
3348
3349
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
3349
3350
  Run nuke again with the secret launch code to proceed.
3350
- `,exitCode:1}})}function Sle(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 $6(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
3351
+ `,exitCode:1}})}function wle(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 $6(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
3351
3352
 
3352
3353
  Usage:
3353
3354
  oauth-domain list List extra domains for every provider
@@ -3372,13 +3373,13 @@ Examples:
3372
3373
  oauth-domain add adobe '*.da.live'
3373
3374
  oauth-domain list adobe
3374
3375
  oauth-domain remove adobe admin.da.live
3375
- `}function e8(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function Cle(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(`
3376
+ `}function e8(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function Tle(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(`
3376
3377
  `)}\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)
3377
3378
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
3378
- `)}\n`,stderr:``,exitCode:0}}async function wle(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
3379
- `,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 Tle(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
3380
- `,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 Ele(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>
3381
- `,exitCode:1}}async function Dle(e,t,n,r){switch(t){case`list`:return Cle(e,n);case`add`:return wle(e,n,r);case`remove`:return Tle(e,n,r);case`clear`:return Ele(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${$6()}`,exitCode:1}}}function Ole(){return H(`oauth-domain`,async e=>{if(e.length===0||Vr(e))return{stdout:$6(),stderr:``,exitCode:0};let t=V(e);if(`error`in t)return e8(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r);try{return await Dle(a,n,r,i)}catch(e){return e8(e instanceof Error?e.message:String(e))}})}const kle={repo:[`repo:status`,`repo_deployment`,`public_repo`,`repo:invite`,`security_events`],user:[`read:user`,`user:email`,`user:follow`],project:[`read:project`]},Ale={"admin:":[`write:`,`read:`],"write:":[`read:`]};function t8(e){return e?new Set(e.split(/[\s,]+/).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)):new Set}function jle(e){let t=[...kle[e]??[]];for(let[n,r]of Object.entries(Ale)){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 Mle(e){let t=new Set(e),n=[...e];for(;n.length>0;){let e=n.pop();for(let r of jle(e))t.has(r)||(t.add(r),n.push(r))}return t}function Nle(e,t){let n=t8(e);if(n.size===0)return!1;let r=t8(t);if(r.size===0)return!0;let i=Mle(n);for(let e of r)if(!i.has(e))return!1;return!0}const n8=[`--provider`,`--scope`,`--from-file`,`--authorize-url`,`--redirect-pattern`,`--rewrite`],Ple=[`--list`,`--expire`,`--renew`,`--intercept`,`--force-login`,`--leave-tab`];function Fle(){return`oauth-token — get an OAuth access token for a provider, or run an
3379
+ `)}\n`,stderr:``,exitCode:0}}async function Ele(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
3380
+ `,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 Dle(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
3381
+ `,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 Ole(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>
3382
+ `,exitCode:1}}async function kle(e,t,n,r){switch(t){case`list`:return Tle(e,n);case`add`:return Ele(e,n,r);case`remove`:return Dle(e,n,r);case`clear`:return Ole(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${$6()}`,exitCode:1}}}function Ale(){return H(`oauth-domain`,async e=>{if(e.length===0||Vr(e))return{stdout:$6(),stderr:``,exitCode:0};let t=V(e);if(`error`in t)return e8(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-DcZy--PI.js`).then(e=>e.r);try{return await kle(a,n,r,i)}catch(e){return e8(e instanceof Error?e.message:String(e))}})}const jle={repo:[`repo:status`,`repo_deployment`,`public_repo`,`repo:invite`,`security_events`],user:[`read:user`,`user:email`,`user:follow`],project:[`read:project`]},Mle={"admin:":[`write:`,`read:`],"write:":[`read:`]};function t8(e){return e?new Set(e.split(/[\s,]+/).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)):new Set}function Nle(e){let t=[...jle[e]??[]];for(let[n,r]of Object.entries(Mle)){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 Ple(e){let t=new Set(e),n=[...e];for(;n.length>0;){let e=n.pop();for(let r of Nle(e))t.has(r)||(t.add(r),n.push(r))}return t}function Fle(e,t){let n=t8(e);if(n.size===0)return!1;let r=t8(t);if(r.size===0)return!0;let i=Ple(n);for(let e of r)if(!i.has(e))return!1;return!0}const n8=[`--provider`,`--scope`,`--from-file`,`--authorize-url`,`--redirect-pattern`,`--rewrite`],Ile=[`--list`,`--expire`,`--renew`,`--intercept`,`--force-login`,`--leave-tab`];function Lle(){return`oauth-token — get an OAuth access token for a provider, or run an
3382
3383
  ad-hoc OAuth interception against an arbitrary authorize URL.
3383
3384
 
3384
3385
  Usage:
@@ -3442,12 +3443,12 @@ Examples:
3442
3443
  --authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
3443
3444
  --redirect-pattern 'http://127.0.0.1:56121/*'
3444
3445
  curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
3445
- `}function Ile(){return H(`oauth-token`,Lle)}async function Lle(e,t){let n=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r),r=await import(`./providers-rNbxX5Js.js`).then(e=>e.r);if(Vr(e,{valueFlags:n8}))return{stdout:Fle(),stderr:``,exitCode:0};let i=V(e,{value:n8,bool:Ple});if(`error`in i)return c8(`oauth-token: ${i.error}`);if(i.bools.has(`--list`))return $le(n.getAccounts,r.getRegisteredProviderIds,r.getRegisteredProviderConfig,n.getOAuthAccountInfo);if(i.bools.has(`--expire`))return Kle(i.positionals);if(i.bools.has(`--renew`))return qle(i.positionals);if(i.values.has(`--from-file`)||i.bools.has(`--intercept`))return Jle(i,e,t);let a=Rle(i);if(!a.ok)return a.result;let o=i.bools.has(`--force-login`),s=zle(i,n,r);if(!s.ok)return s.result;let c=Ble(s.value,r.getRegisteredProviderConfig);if(!c.ok)return c.result;if(!o){let e=await Vle(s.value,c.value,n.getOAuthAccountInfo,a.value);if(e)return e}return Hle(s.value,c.value,a.value,n.getOAuthAccountInfo)}function Rle(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:c8(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function zle(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:c8(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(r8(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>r8(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:c8(`oauth-token: no OAuth providers configured`)}}function r8(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function Ble(e,t){let n=t(e);return n?r8(n)?{ok:!0,value:n}:{ok:!1,result:c8(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:c8(`oauth-token: unknown provider "${e}"`)}}async function Vle(e,t,n,r){let i=n(e);return i&&!i.expired?i8(e,i,r):!i?.expired||!t.onSilentRenew||!await Gle(t.onSilentRenew)?null:i8(e,n(e),r)}function i8(e,t,n){return n&&!Nle(t?.scopes,n)?null:a8(e,t?.maskedValue)}function a8(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:c8(`oauth-token: no masked value for ${e} (try logging in again)`)}async function Hle(e,t,n,r){try{let i=await Ule(e,t,n);return i.error?i.error:Wle(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),c8(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),c8(`oauth-token: login failed: ${n}`))}}async function Ule(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-CTntqv0R.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:c8(`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-CTntqv0R.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:c8(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function Wle(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),c8(`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?a8(e,r.maskedValue):r?.token?c8(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),c8(`oauth-token: login completed but no token was saved`))}async function Gle(e){try{return await e()!==null}catch{return!1}}function o8(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 Kle(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-rNbxX5Js.js`).then(e=>e.r),o=o8(e,n,i,a);if(!o)return c8(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return c8(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return c8(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return c8(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return c8(`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 qle(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-DcTHuaYs.js`).then(e=>e.r),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-rNbxX5Js.js`).then(e=>e.r),a=o8(e,t,r,i);if(!a)return c8(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return c8(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return c8(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${s8(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: ${s8(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(`
3446
+ `}function Rle(){return H(`oauth-token`,zle)}async function zle(e,t){let n=await import(`./account-store-DcZy--PI.js`).then(e=>e.r),r=await import(`./providers-CU4-75kP.js`).then(e=>e.r);if(Vr(e,{valueFlags:n8}))return{stdout:Lle(),stderr:``,exitCode:0};let i=V(e,{value:n8,bool:Ile});if(`error`in i)return c8(`oauth-token: ${i.error}`);if(i.bools.has(`--list`))return tue(n.getAccounts,r.getRegisteredProviderIds,r.getRegisteredProviderConfig,n.getOAuthAccountInfo);if(i.bools.has(`--expire`))return Jle(i.positionals);if(i.bools.has(`--renew`))return Yle(i.positionals);if(i.values.has(`--from-file`)||i.bools.has(`--intercept`))return Xle(i,e,t);let a=Ble(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=Hle(s.value,r.getRegisteredProviderConfig);if(!c.ok)return c.result;if(!o){let e=await Ule(s.value,c.value,n.getOAuthAccountInfo,a.value);if(e)return e}return Wle(s.value,c.value,a.value,n.getOAuthAccountInfo)}function Ble(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:c8(`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:c8(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(r8(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>r8(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:c8(`oauth-token: no OAuth providers configured`)}}function r8(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function Hle(e,t){let n=t(e);return n?r8(n)?{ok:!0,value:n}:{ok:!1,result:c8(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:c8(`oauth-token: unknown provider "${e}"`)}}async function Ule(e,t,n,r){let i=n(e);return i&&!i.expired?i8(e,i,r):!i?.expired||!t.onSilentRenew||!await qle(t.onSilentRenew)?null:i8(e,n(e),r)}function i8(e,t,n){return n&&!Fle(t?.scopes,n)?null:a8(e,t?.maskedValue)}function a8(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:c8(`oauth-token: no masked value for ${e} (try logging in again)`)}async function Wle(e,t,n,r){try{let i=await Gle(e,t,n);return i.error?i.error:Kle(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),c8(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),c8(`oauth-token: login failed: ${n}`))}}async function Gle(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-CTntqv0R.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:c8(`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-CTntqv0R.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:c8(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function Kle(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),c8(`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?a8(e,r.maskedValue):r?.token?c8(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),c8(`oauth-token: login completed but no token was saved`))}async function qle(e){try{return await e()!==null}catch{return!1}}function o8(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 Jle(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-CU4-75kP.js`).then(e=>e.r),o=o8(e,n,i,a);if(!o)return c8(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return c8(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return c8(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return c8(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return c8(`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 Yle(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-DcZy--PI.js`).then(e=>e.r),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CU4-75kP.js`).then(e=>e.r),a=o8(e,t,r,i);if(!a)return c8(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return c8(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return c8(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${s8(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: ${s8(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(`
3446
3447
  `)+`
3447
- `,stderr:``,exitCode:+!u}}function s8(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 Jle(e,t,n){let{parseInterceptOAuthConfig:r}=await import(`./intercepted-oauth-BIKnTjZm.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:i}=await import(`./oauth-service-CTntqv0R.js`),a=await Yle(e,t,n);if(!a.ok)return a.result;let o=r(a.value);if(!o.ok)return c8(`oauth-token: invalid intercept config: ${o.error}`);let s=await i();if(!s)return c8(`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}:c8(`oauth-token: intercept timed out or was cancelled`)}function Yle(e,t,n){return e.values.has(`--from-file`)?Xle(e.values.get(`--from-file`),n):Zle(e,t)}async function Xle(e,t){if(!e)return{ok:!1,result:c8(`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:c8(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function Zle(e,t){let n=e.values.get(`--authorize-url`),r=e.values.get(`--redirect-pattern`);if(!n)return{ok:!1,result:c8(`oauth-token: --authorize-url is required`)};if(!r)return{ok:!1,result:c8(`oauth-token: --redirect-pattern is required`)};let i=Qle(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 Qle(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:c8(`oauth-token: --rewrite requires a value`)};let a=i.split(`=`);if(a.length<3)return{ok:!1,result:c8(`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 c8(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function $le(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
3448
+ `,stderr:``,exitCode:+!u}}function s8(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 Xle(e,t,n){let{parseInterceptOAuthConfig:r}=await import(`./intercepted-oauth-BIKnTjZm.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:i}=await import(`./oauth-service-CTntqv0R.js`),a=await Zle(e,t,n);if(!a.ok)return a.result;let o=r(a.value);if(!o.ok)return c8(`oauth-token: invalid intercept config: ${o.error}`);let s=await i();if(!s)return c8(`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}:c8(`oauth-token: intercept timed out or was cancelled`)}function Zle(e,t,n){return e.values.has(`--from-file`)?Qle(e.values.get(`--from-file`),n):$le(e,t)}async function Qle(e,t){if(!e)return{ok:!1,result:c8(`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:c8(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function $le(e,t){let n=e.values.get(`--authorize-url`),r=e.values.get(`--redirect-pattern`);if(!n)return{ok:!1,result:c8(`oauth-token: --authorize-url is required`)};if(!r)return{ok:!1,result:c8(`oauth-token: --redirect-pattern is required`)};let i=eue(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 eue(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:c8(`oauth-token: --rewrite requires a value`)};let a=i.split(`=`);if(a.length<3)return{ok:!1,result:c8(`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 c8(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function tue(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
3448
3449
  `,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(`
3449
3450
  `)+`
3450
- `,stderr:``,exitCode:0}}const eue=[`--download`,`-d`,`--view`,`-v`],l8=[`--size`],u8={low:256,medium:768,high:1536};function d8(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
3451
+ `,stderr:``,exitCode:0}}const nue=[`--download`,`-d`,`--view`,`-v`],l8=[`--size`],u8={low:256,medium:768,high:1536};function d8(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
3451
3452
 
3452
3453
  VFS paths are served in a new browser tab via the preview service worker.
3453
3454
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -3461,19 +3462,19 @@ Examples:
3461
3462
  medium (768x768), high (1536x1536), or a custom WxH
3462
3463
  box like 512x512. The image is fit inside the box
3463
3464
  with aspect ratio preserved and is never upscaled.
3464
- `,stderr:``,exitCode:0}}function tue(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 nue(e){if(e in u8){let t=u8[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 rue(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 iue(){return`open --view requires --size to bound the inlined image. Use one of:
3465
+ `,stderr:``,exitCode:0}}function rue(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 iue(e){if(e in u8){let t=u8[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 aue(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 oue(){return`open --view requires --size to bound the inlined image. Use one of:
3465
3466
  --size low (256x256)
3466
3467
  --size medium (768x768)
3467
3468
  --size high (1536x1536)
3468
3469
  --size WxH (custom box, e.g. 512x512)
3469
- `}const aue=new Set([`image/png`,`image/webp`]);function f8(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function oue(e,t){let n=f8(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function sue(e,t,n,r){let i=f8(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=rue(e,t)?aue.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 cue(e){let t=V(e,{bool:eue,value:l8});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 p8(e){return{ok:!0,message:e}}function m8(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function h8(e){return e?` (targetId: ${e})`:``}function lue(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 uue(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),p8(`opened sprinkle ${e} from ${a}`)}catch(e){return m8(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await aa(t.fs,ha(a)),n=wa(a,e),r;try{r=await i(n)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${a} → ${n}${h8(r)}`)}return m8(`open: sprinkle manager not initialized
3470
- `)}async function due(e,t,n){if(!t)return m8(`open: browser APIs are unavailable in this environment
3471
- `);let r;try{r=await n(e)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${e}${h8(r)}`)}async function fue(e,t,n,r){let i;try{i=await n.fs.stat(t)}catch{return m8(`open: no such file: ${e}\n`)}if(!i.isFile)return m8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return m8(`open: failed to read: ${e}\n`)}let o=ra(t),s=new Uint8Array(a),c=null;if(r!==void 0&&(c=nue(r),!c))return m8(`open: invalid --size spec '${r}' (expected low|medium|high or WxH such as 512x512)\n`);if(!c){let n;try{n=await oue(s,o)}catch(t){return m8(`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 m8(`open --view: ${t} is ${n.width}x${n.height} (${r} KB, ${o})\n`+iue())}let l;try{l=await sue(s,o,c.maxW,c.maxH)}catch(t){return m8(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let u=tue(l.bytes),d=Math.round(l.bytes.byteLength/1024);return p8(`${t} (${l.nativeWidth}x${l.nativeHeight} → ${l.width}x${l.height}, ${d} KB, ${l.mime})\n<img:data:${l.mime};base64,${u}>`)}async function pue(e,t,n,r){if(!r)return m8(`open: --download requires the in-panel terminal (DOM-only)
3472
- `);let i;try{i=await n.fs.stat(t)}catch{return m8(`open: no such file: ${e}\n`)}if(!i.isFile)return m8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return m8(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:ra(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=ua(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),p8(`downloaded ${t}`)}async function mue(e,t,n,r){if(!n)return m8(`open: browser APIs are unavailable in this environment
3473
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await aa(t.fs,i?e:ha(e)),o=wa(e,a),s;try{s=await r(o)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${e} → ${o}${h8(s)}`)}async function hue(e,t,n,r){if(!sa(e)&&e.endsWith(`.shtml`)&&t.fs)return uue(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return m8(`open: browser APIs are unavailable in this environment
3474
- `);if(sa(e))return due(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?fue(e,i,t,n.sizeSpec):n.download?pue(e,i,t,r.hasDom):mue(i,t,r.canOpenWindow,r.openExternal)}function gue(e){return H(`open`,async(t,n)=>{if(t.length===0||Vr(t,{valueFlags:l8}))return d8();let r=cue(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 d8();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:lue(e,u,d)},p=[];for(let e of c){let t=await hue(e,n,{view:o,download:a,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
3470
+ `}const sue=new Set([`image/png`,`image/webp`]);function f8(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function cue(e,t){let n=f8(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function lue(e,t,n,r){let i=f8(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=aue(e,t)?sue.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 uue(e){let t=V(e,{bool:nue,value:l8});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 p8(e){return{ok:!0,message:e}}function m8(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function h8(e){return e?` (targetId: ${e})`:``}function due(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 fue(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),p8(`opened sprinkle ${e} from ${a}`)}catch(e){return m8(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await aa(t.fs,ha(a)),n=wa(a,e),r;try{r=await i(n)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${a} → ${n}${h8(r)}`)}return m8(`open: sprinkle manager not initialized
3471
+ `)}async function pue(e,t,n){if(!t)return m8(`open: browser APIs are unavailable in this environment
3472
+ `);let r;try{r=await n(e)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${e}${h8(r)}`)}async function mue(e,t,n,r){let i;try{i=await n.fs.stat(t)}catch{return m8(`open: no such file: ${e}\n`)}if(!i.isFile)return m8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return m8(`open: failed to read: ${e}\n`)}let o=ra(t),s=new Uint8Array(a),c=null;if(r!==void 0&&(c=iue(r),!c))return m8(`open: invalid --size spec '${r}' (expected low|medium|high or WxH such as 512x512)\n`);if(!c){let n;try{n=await cue(s,o)}catch(t){return m8(`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 m8(`open --view: ${t} is ${n.width}x${n.height} (${r} KB, ${o})\n`+oue())}let l;try{l=await lue(s,o,c.maxW,c.maxH)}catch(t){return m8(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let u=rue(l.bytes),d=Math.round(l.bytes.byteLength/1024);return p8(`${t} (${l.nativeWidth}x${l.nativeHeight} → ${l.width}x${l.height}, ${d} KB, ${l.mime})\n<img:data:${l.mime};base64,${u}>`)}async function hue(e,t,n,r){if(!r)return m8(`open: --download requires the in-panel terminal (DOM-only)
3473
+ `);let i;try{i=await n.fs.stat(t)}catch{return m8(`open: no such file: ${e}\n`)}if(!i.isFile)return m8(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return m8(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:ra(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=ua(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),p8(`downloaded ${t}`)}async function gue(e,t,n,r){if(!n)return m8(`open: browser APIs are unavailable in this environment
3474
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await aa(t.fs,i?e:ha(e)),o=wa(e,a),s;try{s=await r(o)}catch(e){return m8(`${e instanceof Error?e.message:String(e)}\n`)}return p8(`opened ${e} → ${o}${h8(s)}`)}async function _ue(e,t,n,r){if(!sa(e)&&e.endsWith(`.shtml`)&&t.fs)return fue(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return m8(`open: browser APIs are unavailable in this environment
3475
+ `);if(sa(e))return pue(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?mue(e,i,t,n.sizeSpec):n.download?hue(e,i,t,r.hasDom):gue(i,t,r.canOpenWindow,r.openExternal)}function vue(e){return H(`open`,async(t,n)=>{if(t.length===0||Vr(t,{valueFlags:l8}))return d8();let r=uue(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 d8();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:due(e,u,d)},p=[];for(let e of c){let t=await _ue(e,n,{view:o,download:a,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
3475
3476
  `)+`
3476
- `,stderr:``,exitCode:0}})}let g8=null,_8=null;async function v8(){return g8||=import(`./es-BDNIRkLU.js`),g8}async function _ue(){return _8||=import(`./dist-DTAqvnM4.js`),_8}function vue(e){return e.endsWith(`right`)?{range:e.slice(0,-5),rotation:90}:e.endsWith(`left`)?{range:e.slice(0,-4),rotation:270}:e.endsWith(`down`)?{range:e.slice(0,-4),rotation:180}:{range:e}}function y8(e){let{range:t,rotation:n}=vue(e);if(/^\d+$/.test(t)){let e=parseInt(t,10);return{start:e,end:e,rotation:n}}let r=t.match(/^(\d+)-(\d+|end)$/);if(r)return{start:parseInt(r[1],10),end:r[2]===`end`?`end`:parseInt(r[2],10),rotation:n};throw Error(`Invalid page range: ${e}`)}function b8(e,t){let n=e.start,r=e.end;if(n<1||n>t)throw Error(`Page ${n} out of range (1-${t})`);let i=r===`end`?t:r;if(i<1||i>t)throw Error(`Page ${i} out of range (1-${t})`);if(i<n)throw Error(`Invalid range: ${n}-${i}`);let a=[];for(let e=n;e<=i;e++)a.push(e);return a}function yue(){return{stdout:`usage: pdftk <input.pdf> <operation> [args...]
3477
+ `,stderr:``,exitCode:0}})}let g8=null,_8=null;async function v8(){return g8||=import(`./es-BDNIRkLU.js`),g8}async function yue(){return _8||=import(`./dist-DTAqvnM4.js`),_8}function bue(e){return e.endsWith(`right`)?{range:e.slice(0,-5),rotation:90}:e.endsWith(`left`)?{range:e.slice(0,-4),rotation:270}:e.endsWith(`down`)?{range:e.slice(0,-4),rotation:180}:{range:e}}function y8(e){let{range:t,rotation:n}=bue(e);if(/^\d+$/.test(t)){let e=parseInt(t,10);return{start:e,end:e,rotation:n}}let r=t.match(/^(\d+)-(\d+|end)$/);if(r)return{start:parseInt(r[1],10),end:r[2]===`end`?`end`:parseInt(r[2],10),rotation:n};throw Error(`Invalid page range: ${e}`)}function b8(e,t){let n=e.start,r=e.end;if(n<1||n>t)throw Error(`Page ${n} out of range (1-${t})`);let i=r===`end`?t:r;if(i<1||i>t)throw Error(`Page ${i} out of range (1-${t})`);if(i<n)throw Error(`Invalid range: ${n}-${i}`);let a=[];for(let e=n;e<=i;e++)a.push(e);return a}function xue(){return{stdout:`usage: pdftk <input.pdf> <operation> [args...]
3477
3478
 
3478
3479
  Operations:
3479
3480
  dump_data Print metadata (page count, title, author, etc.)
@@ -3497,10 +3498,10 @@ Page ranges:
3497
3498
  1-endright Pages 1 to end, rotated 90° clockwise
3498
3499
  3left Page 3 rotated 270° (counterclockwise)
3499
3500
  1-5down Pages 1-5 rotated 180°
3500
- `,stderr:``,exitCode:0}}function x8(e=`pdftk`){return H(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return yue();try{let r=[],i=0;for(;i<t.length;){let e=t[i],a=e.match(/^([A-Z])=(.+)$/);if(a){let e=a[1],t=n.fs.resolvePath(n.cwd,a[2]);r.push({handle:e,path:t}),i++;continue}if([`dump_data`,`dump_data_utf8`,`cat`,`rotate`].includes(e))break;if(!e.startsWith(`-`)){let t=n.fs.resolvePath(n.cwd,e);r.push({handle:``,path:t}),i++;continue}break}if(r.length===0)return{stdout:``,stderr:`${e}: no input PDF specified\n`,exitCode:1};let a=t[i];if(i++,!a)return{stdout:``,stderr:`${e}: no operation specified\n`,exitCode:1};if(a===`dump_data`){if(r.length>1)return{stdout:``,stderr:`${e}: dump_data only supports a single input file\n`,exitCode:1};let t=await v8(),i=await n.fs.readFileBuffer(r[0].path),a=await t.PDFDocument.load(i),o=[];o.push(`NumberOfPages: ${a.getPageCount()}`);let s=a.getTitle();s&&o.push(`InfoBegin`),s&&o.push(`InfoKey: Title`),s&&o.push(`InfoValue: ${s}`);let c=a.getAuthor();c&&o.push(`InfoBegin`),c&&o.push(`InfoKey: Author`),c&&o.push(`InfoValue: ${c}`);let l=a.getCreator();l&&o.push(`InfoBegin`),l&&o.push(`InfoKey: Creator`),l&&o.push(`InfoValue: ${l}`);let u=a.getProducer();return u&&o.push(`InfoBegin`),u&&o.push(`InfoKey: Producer`),u&&o.push(`InfoValue: ${u}`),{stdout:o.join(`
3501
+ `,stderr:``,exitCode:0}}function x8(e=`pdftk`){return H(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return xue();try{let r=[],i=0;for(;i<t.length;){let e=t[i],a=e.match(/^([A-Z])=(.+)$/);if(a){let e=a[1],t=n.fs.resolvePath(n.cwd,a[2]);r.push({handle:e,path:t}),i++;continue}if([`dump_data`,`dump_data_utf8`,`cat`,`rotate`].includes(e))break;if(!e.startsWith(`-`)){let t=n.fs.resolvePath(n.cwd,e);r.push({handle:``,path:t}),i++;continue}break}if(r.length===0)return{stdout:``,stderr:`${e}: no input PDF specified\n`,exitCode:1};let a=t[i];if(i++,!a)return{stdout:``,stderr:`${e}: no operation specified\n`,exitCode:1};if(a===`dump_data`){if(r.length>1)return{stdout:``,stderr:`${e}: dump_data only supports a single input file\n`,exitCode:1};let t=await v8(),i=await n.fs.readFileBuffer(r[0].path),a=await t.PDFDocument.load(i),o=[];o.push(`NumberOfPages: ${a.getPageCount()}`);let s=a.getTitle();s&&o.push(`InfoBegin`),s&&o.push(`InfoKey: Title`),s&&o.push(`InfoValue: ${s}`);let c=a.getAuthor();c&&o.push(`InfoBegin`),c&&o.push(`InfoKey: Author`),c&&o.push(`InfoValue: ${c}`);let l=a.getCreator();l&&o.push(`InfoBegin`),l&&o.push(`InfoKey: Creator`),l&&o.push(`InfoValue: ${l}`);let u=a.getProducer();return u&&o.push(`InfoBegin`),u&&o.push(`InfoKey: Producer`),u&&o.push(`InfoValue: ${u}`),{stdout:o.join(`
3501
3502
  `)+`
3502
- `,stderr:``,exitCode:0}}if(a===`dump_data_utf8`){if(r.length>1)return{stdout:``,stderr:`${e}: dump_data_utf8 only supports a single input file\n`,exitCode:1};let t=await _ue(),i=await n.fs.readFileBuffer(r[0].path);return{stdout:(await t.extractText(i)).text+`
3503
- `,stderr:``,exitCode:0}}if(a===`cat`){let a=await v8(),o=await a.PDFDocument.create(),s=t.slice(i),c=s.indexOf(`output`);if(c===-1)return{stdout:``,stderr:`${e}: cat operation requires 'output <filename>'\n`,exitCode:1};let l=s.slice(0,c),u=s[c+1];if(!u)return{stdout:``,stderr:`${e}: output filename not specified\n`,exitCode:1};let d=n.fs.resolvePath(n.cwd,u),f=new Map;for(let e of r){let t=await n.fs.readFileBuffer(e.path),r=await a.PDFDocument.load(t),i=e.handle||`default`;f.set(i,r)}for(let t of l){if(/^[A-Z]$/.test(t)){let n=f.get(t);if(!n)return{stdout:``,stderr:`${e}: unknown handle '${t}'\n`,exitCode:1};let r=n.getPageCount(),i=Array.from({length:r},(e,t)=>t);(await o.copyPages(n,i)).forEach(e=>{o.addPage(e)});continue}let n=f.get(r[0].handle||`default`);if(!n)return{stdout:``,stderr:`${e}: no default input document\n`,exitCode:1};let i=n.getPageCount(),s=y8(t),c=b8(s,i).map(e=>e-1),l=await o.copyPages(n,c);for(let e of l)s.rotation&&e.setRotation(a.degrees(s.rotation)),o.addPage(e)}let p=await o.save();return await n.fs.writeFile(d,p),{stdout:`Created ${u}\n`,stderr:``,exitCode:0}}if(a===`rotate`){if(r.length>1)return{stdout:``,stderr:`${e}: rotate only supports a single input file\n`,exitCode:1};let a=await v8(),o=await n.fs.readFileBuffer(r[0].path),s=await a.PDFDocument.load(o),c=t.slice(i),l=c.indexOf(`output`);if(l===-1)return{stdout:``,stderr:`${e}: rotate operation requires 'output <filename>'\n`,exitCode:1};let u=c.slice(0,l),d=c[l+1];if(!d)return{stdout:``,stderr:`${e}: output filename not specified\n`,exitCode:1};let f=n.fs.resolvePath(n.cwd,d),p=s.getPageCount(),m=new Map;for(let t of u){let n=y8(t);if(!n.rotation)return{stdout:``,stderr:`${e}: rotation suffix required (right/left/down) for range '${t}'\n`,exitCode:1};let r=b8(n,p);for(let e of r)m.set(e-1,n.rotation)}let h=s.getPages();for(let[e,t]of m.entries()){let n=h[e],r=(n.getRotation().angle+t)%360;n.setRotation(a.degrees(r))}let g=await s.save();return await n.fs.writeFile(f,g),{stdout:`Created ${d}\n`,stderr:``,exitCode:0}}return{stdout:``,stderr:`${e}: unknown operation '${a}'\n`,exitCode:1}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function bue(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
3503
+ `,stderr:``,exitCode:0}}if(a===`dump_data_utf8`){if(r.length>1)return{stdout:``,stderr:`${e}: dump_data_utf8 only supports a single input file\n`,exitCode:1};let t=await yue(),i=await n.fs.readFileBuffer(r[0].path);return{stdout:(await t.extractText(i)).text+`
3504
+ `,stderr:``,exitCode:0}}if(a===`cat`){let a=await v8(),o=await a.PDFDocument.create(),s=t.slice(i),c=s.indexOf(`output`);if(c===-1)return{stdout:``,stderr:`${e}: cat operation requires 'output <filename>'\n`,exitCode:1};let l=s.slice(0,c),u=s[c+1];if(!u)return{stdout:``,stderr:`${e}: output filename not specified\n`,exitCode:1};let d=n.fs.resolvePath(n.cwd,u),f=new Map;for(let e of r){let t=await n.fs.readFileBuffer(e.path),r=await a.PDFDocument.load(t),i=e.handle||`default`;f.set(i,r)}for(let t of l){if(/^[A-Z]$/.test(t)){let n=f.get(t);if(!n)return{stdout:``,stderr:`${e}: unknown handle '${t}'\n`,exitCode:1};let r=n.getPageCount(),i=Array.from({length:r},(e,t)=>t);(await o.copyPages(n,i)).forEach(e=>{o.addPage(e)});continue}let n=f.get(r[0].handle||`default`);if(!n)return{stdout:``,stderr:`${e}: no default input document\n`,exitCode:1};let i=n.getPageCount(),s=y8(t),c=b8(s,i).map(e=>e-1),l=await o.copyPages(n,c);for(let e of l)s.rotation&&e.setRotation(a.degrees(s.rotation)),o.addPage(e)}let p=await o.save();return await n.fs.writeFile(d,p),{stdout:`Created ${u}\n`,stderr:``,exitCode:0}}if(a===`rotate`){if(r.length>1)return{stdout:``,stderr:`${e}: rotate only supports a single input file\n`,exitCode:1};let a=await v8(),o=await n.fs.readFileBuffer(r[0].path),s=await a.PDFDocument.load(o),c=t.slice(i),l=c.indexOf(`output`);if(l===-1)return{stdout:``,stderr:`${e}: rotate operation requires 'output <filename>'\n`,exitCode:1};let u=c.slice(0,l),d=c[l+1];if(!d)return{stdout:``,stderr:`${e}: output filename not specified\n`,exitCode:1};let f=n.fs.resolvePath(n.cwd,d),p=s.getPageCount(),m=new Map;for(let t of u){let n=y8(t);if(!n.rotation)return{stdout:``,stderr:`${e}: rotation suffix required (right/left/down) for range '${t}'\n`,exitCode:1};let r=b8(n,p);for(let e of r)m.set(e-1,n.rotation)}let h=s.getPages();for(let[e,t]of m.entries()){let n=h[e],r=(n.getRotation().angle+t)%360;n.setRotation(a.degrees(r))}let g=await s.save();return await n.fs.writeFile(f,g),{stdout:`Created ${d}\n`,stderr:``,exitCode:0}}return{stdout:``,stderr:`${e}: unknown operation '${a}'\n`,exitCode:1}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Sue(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
3504
3505
 
3505
3506
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
3506
3507
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -3527,8 +3528,8 @@ Examples:
3527
3528
  pdftoppm -png -r 150 doc.pdf page
3528
3529
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
3529
3530
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
3530
- `,stderr:``,exitCode:0}}function S8(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 xue(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 Sue(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=xue(e[++d]),t=`jpeg`;break;case`-r`:n=S8(e[++d],`-r`);break;case`-f`:r=S8(e[++d],`-f`);break;case`-l`:i=S8(e[++d],`-l`);break;case`-scale-to`:a=S8(e[++d],`-scale-to`);break;case`-scale-to-x`:o=S8(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=S8(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 Cue(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function wue(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 Eue(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:OX(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Due(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!kX(r))throw Error(`${t}: not a PDF file`);return r}function C8(e=`pdftoppm`){return H(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return bue();let r;try{r=Sue(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Due(n,r.inputPath),i=Tue(r.format),a=r.outputRoot??Cue(ua(r.inputPath)),o=[];return await zX(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Eue(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:wue(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(`
3531
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Oue(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 kue(){D4(()=>()=>UY()),E4(()=>()=>Oue(UY()))}const w8=`/workspace/.plugins/sources`;function T8(e){return{stdout:e,stderr:``,exitCode:0}}function E8(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function D8(e,t){let n=V(t,{});return`error`in n?E8(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Aue(){return`usage: plugin <command> [args]
3531
+ `,stderr:``,exitCode:0}}function S8(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 Cue(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 wue(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=Cue(e[++d]),t=`jpeg`;break;case`-r`:n=S8(e[++d],`-r`);break;case`-f`:r=S8(e[++d],`-f`);break;case`-l`:i=S8(e[++d],`-l`);break;case`-scale-to`:a=S8(e[++d],`-scale-to`);break;case`-scale-to-x`:o=S8(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=S8(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 Tue(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 Due(e){return e===`jpeg`?`jpg`:`png`}function Oue(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:OX(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function kue(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!kX(r))throw Error(`${t}: not a PDF file`);return r}function C8(e=`pdftoppm`){return H(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Sue();let r;try{r=wue(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await kue(n,r.inputPath),i=Due(r.format),a=r.outputRoot??Tue(ua(r.inputPath)),o=[];return await zX(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Oue(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(`
3532
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}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 jue(){D4(()=>()=>UY()),E4(()=>()=>Aue(UY()))}const w8=`/workspace/.plugins/sources`;function T8(e){return{stdout:e,stderr:``,exitCode:0}}function E8(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function D8(e,t){let n=V(t,{});return`error`in n?E8(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Mue(){return`usage: plugin <command> [args]
3532
3533
 
3533
3534
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
3534
3535
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -3560,7 +3561,7 @@ Examples:
3560
3561
  plugin list
3561
3562
  plugin info my-plugin
3562
3563
  plugin remove my-plugin
3563
- `}function jue(e={}){return H(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return T8(Aue());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await Nue(i,a,e);case`list`:case`ls`:return await Lue(i,e);case`info`:return await Rue(i,e);case`validate`:return await zue(i,a,e);case`remove`:case`rm`:case`delete`:return await Bue(i,e);default:return E8(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return E8(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function O8(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CZIZCIGv.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 k8(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-teuMA0AB.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 Mue(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function A8(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${w8}/${t.map(Mue).join(`--`)}`}async function j8(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CIvQnVWw.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 M8(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function Nue(e,t,n){if(Vr(e))return T8(`usage: plugin install <path|repo>
3564
+ `}function Nue(e={}){return H(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return T8(Mue());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await Fue(i,a,e);case`list`:case`ls`:return await zue(i,e);case`info`:return await Bue(i,e);case`validate`:return await Vue(i,a,e);case`remove`:case`rm`:case`delete`:return await Hue(i,e);default:return E8(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return E8(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function O8(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-BYhuqz39.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 k8(e,t,n){let r=Uue(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-dG6nbsuB.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 Pue(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function A8(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${w8}/${t.map(Pue).join(`--`)}`}async function j8(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-BtBW41Sy.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 M8(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function Fue(e,t,n){if(Vr(e))return T8(`usage: plugin install <path|repo>
3564
3565
 
3565
3566
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
3566
3567
  reference (owner/repo, owner/repo@branch, or
@@ -3571,25 +3572,25 @@ mcp.json. On success the plugin is recorded in
3571
3572
  /workspace/.plugins/plugins.json — its skills then surface through the
3572
3573
  standard skills discovery, and each supported streamable-http MCP server
3573
3574
  is registered in the MCP store as "<plugin>:<server>".
3574
- `);let r=D8(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return E8(`plugin install: expected <path|repo>`);let i=await O8(n),a=await k8(r.positionals[0],t,i);if(a.kind===`error`)return E8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return E8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=A8(a.ref),s=a.ref.display;let e=await j8(a.ref,o,i,n.fetch);if(e)return E8(`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 M8(i,o),E8(`plugin install: plugin at ${s??o} was rejected:\n${N8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-I-VVSiCJ.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await M8(i,o),E8(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await Iue(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),T8(Pue(u,h,g,s??o,l.diagnostics))}function Pue(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:`,N8(i)),c.join(`
3575
+ `);let r=D8(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return E8(`plugin install: expected <path|repo>`);let i=await O8(n),a=await k8(r.positionals[0],t,i);if(a.kind===`error`)return E8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return E8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=A8(a.ref),s=a.ref.display;let e=await j8(a.ref,o,i,n.fetch);if(e)return E8(`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 M8(i,o),E8(`plugin install: plugin at ${s??o} was rejected:\n${N8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-DHI68ltt.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await M8(i,o),E8(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await Rue(u,n),g=await Lue(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),T8(Iue(u,h,g,s??o,l.diagnostics))}function Iue(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:`,N8(i)),c.join(`
3575
3576
  `)+`
3576
- `}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-B0LOCSNJ.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 Iue(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-B0LOCSNJ.js`).then(e=>e.r),{McpClient:a}=await import(`./client-DVC0x03n.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 Lue(e,t){if(Vr(e))return T8(`usage: plugin list
3577
- `);let n=D8(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-I-VVSiCJ.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return T8("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 T8(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
3577
+ `}async function Lue(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-CYcDJ2BI.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 Rue(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-CYcDJ2BI.js`).then(e=>e.r),{McpClient:a}=await import(`./client-DVC0x03n.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 zue(e,t){if(Vr(e))return T8(`usage: plugin list
3578
+ `);let n=D8(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-DHI68ltt.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return T8("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 T8(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
3578
3579
  `)+`
3579
- `)}async function Rue(e,t){if(Vr(e))return T8(`usage: plugin info <name>
3580
- `);let n=D8(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return E8(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-I-VVSiCJ.js`),a=await i(r,t.fs);if(!a)return E8(`plugin info: no installed plugin named "${r}"`);let o=await O8(t),{loadPluginFromDirectory:s}=await import(`./loader-B23_5sFw.js`),c=await s(o,a.root);if(!c.ok)return E8(`plugin info: plugin at ${a.root} no longer loads:\n${N8(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:`,N8(c.diagnostics)),T8(d.join(`
3580
+ `)}async function Bue(e,t){if(Vr(e))return T8(`usage: plugin info <name>
3581
+ `);let n=D8(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return E8(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-DHI68ltt.js`),a=await i(r,t.fs);if(!a)return E8(`plugin info: no installed plugin named "${r}"`);let o=await O8(t),{loadPluginFromDirectory:s}=await import(`./loader-B23_5sFw.js`),c=await s(o,a.root);if(!c.ok)return E8(`plugin info: plugin at ${a.root} no longer loads:\n${N8(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:`,N8(c.diagnostics)),T8(d.join(`
3581
3582
  `)+`
3582
- `)}async function zue(e,t,n){if(Vr(e))return T8(`usage: plugin validate <path|repo>
3583
+ `)}async function Vue(e,t,n){if(Vr(e))return T8(`usage: plugin validate <path|repo>
3583
3584
  `);let r=D8(`validate`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return E8(`plugin validate: expected <path|repo>`);let i=await O8(n),a=await k8(r.positionals[0],t,i);if(a.kind===`error`)return E8(`plugin validate: ${a.message}`);let o,s=null;if(a.kind===`github`){if(!n.fetch)return E8(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);s=`/tmp/.plugin-validate/${A8(a.ref).split(`/`).pop()}`;let e=await j8(a.ref,s,i,n.fetch);if(e)return E8(`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 M8(i,s)}if(!l.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${N8(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:`,N8(l.diagnostics)),T8(f.join(`
3584
3585
  `)+`
3585
- `)}async function Bue(e,t){if(Vr(e))return T8(`usage: plugin remove <name>
3586
- `);let n=D8(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return E8(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-I-VVSiCJ.js`),o=await i(r,t.fs);if(!o)return E8(`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-B0LOCSNJ.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(`${w8}/`);return c&&await M8(await O8(t),o.root),T8([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
3586
+ `)}async function Hue(e,t){if(Vr(e))return T8(`usage: plugin remove <name>
3587
+ `);let n=D8(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return E8(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-DHI68ltt.js`),o=await i(r,t.fs);if(!o)return E8(`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-CYcDJ2BI.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(`${w8}/`);return c&&await M8(await O8(t),o.root),T8([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
3587
3588
  `)+`
3588
- `)}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 N8(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
3589
- `)}const P8=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],Hue=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],Uue={running:`R`,pending:`S`,exited:`Z`,killed:`K`},Wue=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],F8=[`-o`,`--columns`];function Gue(e={}){return H(`ps`,async t=>{if(Vr(t,{valueFlags:F8}))return rde();let n=e.processManager??Kue();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
3590
- `,exitCode:1};let r=V(t,{bool:Wue,value:F8});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=Hue,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=que(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?nde(l):l.map(e=>({proc:e,depth:0}))).map(({proc:e,depth:t})=>Xue(e,i,t,a));return{stdout:[Jue(i),...u].join(`
3589
+ `)}function Uue(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 N8(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
3590
+ `)}const P8=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],Wue=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],Gue={running:`R`,pending:`S`,exited:`Z`,killed:`K`},Kue=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],F8=[`-o`,`--columns`];function que(e={}){return H(`ps`,async t=>{if(Vr(t,{valueFlags:F8}))return ade();let n=e.processManager??Jue();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
3591
+ `,exitCode:1};let r=V(t,{bool:Kue,value:F8});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=Wue,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=Yue(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?ide(l):l.map(e=>({proc:e,depth:0}))).map(({proc:e,depth:t})=>Que(e,i,t,a));return{stdout:[Xue(i),...u].join(`
3591
3592
  `)+`
3592
- `,stderr:``,exitCode:0}})}function Kue(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function que(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(!P8.includes(e))return Error(`unknown column '${e}'; supported: ${P8.join(`, `)}`);n.push(e)}return n}function Jue(e){return e.map(e=>Yue(e)).join(` `)}function Yue(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 Xue(e,t,n,r){return t.map(t=>Zue(e,t,n,r)).join(` `)}function Zue(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 Uue[e.status];case`start`:return Que(e.startedAt);case`scoop`:return $ue(e).padEnd(10);case`command`:return ede(e,n,r)}}function Que(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 $ue(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.scoopJid?.slice(0,10)??`scoop`}function ede(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(tde).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function tde(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function nde(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 rde(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
3593
+ `,stderr:``,exitCode:0}})}function Jue(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function Yue(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(!P8.includes(e))return Error(`unknown column '${e}'; supported: ${P8.join(`, `)}`);n.push(e)}return n}function Xue(e){return e.map(e=>Zue(e)).join(` `)}function Zue(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 Que(e,t,n,r){return t.map(t=>$ue(e,t,n,r)).join(` `)}function $ue(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 Gue[e.status];case`start`:return ede(e.startedAt);case`scoop`:return tde(e).padEnd(10);case`command`:return nde(e,n,r)}}function ede(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 tde(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.scoopJid?.slice(0,10)??`scoop`}function nde(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(rde).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function rde(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function ide(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 ade(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
3593
3594
 
3594
3595
  List processes tracked by the kernel.
3595
3596
 
@@ -3619,9 +3620,9 @@ Examples:
3619
3620
  ps -T live tree
3620
3621
  ps -a -T full tree
3621
3622
  ps -o pid,kind,stat just three columns
3622
- `,stderr:``,exitCode:0}}const ide=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function ade(e,t=ide){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 ode(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 sde(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function cde(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 lde(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 ude(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function dde(){return{stdout:`usage: python3 [-c code | script.py] [args...]
3623
- `,stderr:``,exitCode:0}}function fde(){return{stdout:`Python 3.14 (Pyodide)
3624
- `,stderr:``,exitCode:0}}async function pde(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 LG(n.stdin).trim().length>0?{kind:`ok`,code:LG(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 mde(e){let t=cde(e),n=await xN(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${yN}\n`,exitCode:1}};let r=await lde(t.reader,n);return r?r===_N?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${ude(r,_N)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${yN}\n`,exitCode:1}}}function I8(e,t={}){return H(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return dde();if(n.includes(`--version`)||n.includes(`-V`))return fde();let i=await pde(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await ade(r.fs),u=ode(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??hde(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??hH(),g=t.pyodideIndexURL??yH(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await mde(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:LG(r.stdin),y=sde();return f?jG({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}):gde({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 hde(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let L8=null;async function gde(e){if(!L8){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);L8=new e}return jG({pm:L8,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 R8(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 _de(){return null}function vde(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=z8(r),o=z8(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 z8(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 B8(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
3623
+ `,stderr:``,exitCode:0}}const ode=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function sde(e,t=ode){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 cde(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 lde(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function ude(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 dde(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 fde(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function pde(){return{stdout:`usage: python3 [-c code | script.py] [args...]
3624
+ `,stderr:``,exitCode:0}}function mde(){return{stdout:`Python 3.14 (Pyodide)
3625
+ `,stderr:``,exitCode:0}}async function hde(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 LG(n.stdin).trim().length>0?{kind:`ok`,code:LG(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 gde(e){let t=ude(e),n=await xN(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${yN}\n`,exitCode:1}};let r=await dde(t.reader,n);return r?r===_N?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${fde(r,_N)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${yN}\n`,exitCode:1}}}function I8(e,t={}){return H(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return pde();if(n.includes(`--version`)||n.includes(`-V`))return mde();let i=await hde(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await sde(r.fs),u=cde(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??_de(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??hH(),g=t.pyodideIndexURL??yH(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await gde(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:LG(r.stdin),y=lde();return f?jG({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}):vde({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 _de(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let L8=null;async function vde(e){if(!L8){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);L8=new e}return jG({pm:L8,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 R8(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 yde(){return null}function bde(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=z8(r),o=z8(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 z8(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 B8(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
3625
3626
 
3626
3627
  Usage:
3627
3628
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -3637,21 +3638,21 @@ Examples:
3637
3638
  rsync /workspace follower-abc123:/workspace
3638
3639
  rsync --delete /shared leader:/shared
3639
3640
  rsync follower-abc123:/workspace/project /workspace/project
3640
- `,stderr:``,exitCode:0}}async function V8(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 H8(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 yde(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 bde(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 U8(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function xde(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,l=R8(await V8(e,i),await H8(t,o,a),{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 u=l.toAdd.length+l.toUpdate.length+l.toDelete.length;if(c)return r.push(`\n(dry run) ${u} file(s) would be transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
3641
+ `,stderr:``,exitCode:0}}async function V8(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 H8(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 xde(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 Sde(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 U8(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function Cde(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,l=R8(await V8(e,i),await H8(t,o,a),{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 u=l.toAdd.length+l.toUpdate.length+l.toDelete.length;if(c)return r.push(`\n(dry run) ${u} file(s) would be transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
3641
3642
  `)+`
3642
- `,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await bde(t,o,U8(c));let l=await e.readFile(s,{encoding:`binary`}),u=await t(o,{op:`writeFile`,path:c,content:d(l),encoding:`base64`});if(!u[0].ok)return{stdout:r.join(`
3643
+ `,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await Sde(t,o,U8(c));let l=await e.readFile(s,{encoding:`binary`}),u=await t(o,{op:`writeFile`,path:c,content:d(l),encoding:`base64`});if(!u[0].ok)return{stdout:r.join(`
3643
3644
  `)+`
3644
3645
  `,stderr:`Error writing ${c}: ${u[0].error}\n`,exitCode:1}}for(let e of l.toDelete){let n=a+`/`+e,i=await t(o,{op:`rm`,path:n});if(!i[0].ok)return{stdout:r.join(`
3645
3646
  `)+`
3646
3647
  `,stderr:`Error deleting ${n}: ${i[0].error}\n`,exitCode:1}}return r.push(`${u} file(s) transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
3647
3648
  `)+`
3648
- `,stderr:``,exitCode:0}}async function Sde(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,u=R8(await H8(t,o,a),await V8(e,i),{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(`
3649
+ `,stderr:``,exitCode:0}}async function wde(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,u=R8(await H8(t,o,a),await V8(e,i),{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(`
3649
3650
  `)+`
3650
- `,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=U8(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let u=await yde(t,o,r),d=l(u);await e.writeFile(s,d)}for(let t of u.toDelete){let n=i+`/`+t;await e.rm(n)}return r.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
3651
+ `,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=U8(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let u=await xde(t,o,r),d=l(u);await e.writeFile(s,d)}for(let t of u.toDelete){let n=i+`/`+t;await e.rm(n)}return r.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
3651
3652
  `)+`
3652
- `,stderr:``,exitCode:0}}function Cde(e={}){let t=e.fs,n=e.getSendFsRequest??_de;return H(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return B8();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
3653
+ `,stderr:``,exitCode:0}}function Tde(e={}){let t=e.fs,n=e.getSendFsRequest??yde;return H(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return B8();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
3653
3654
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
3654
- `,exitCode:1};let i=vde(e);if(`error`in i)return i.error===`__help__`?B8():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await xde(t,r,i):await Sde(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function W8(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
3655
+ `,exitCode:1};let i=bde(e);if(`error`in i)return i.error===`__help__`?B8():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await Cde(t,r,i):await wde(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function W8(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
3655
3656
  say --status | --warmup
3656
3657
 
3657
3658
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -3671,11 +3672,11 @@ Examples:
3671
3672
  `,stderr:``,exitCode:0}}function G8(e){switch(e.state){case`ready`:return`voice engine: ready
3672
3673
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
3673
3674
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
3674
- `;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 K8(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function q8(e){return e instanceof Error?e.message:String(e)}let J8=!1,Y8=null;function X8(){return J8?Promise.resolve(speechSynthesis.getVoices()):(Y8||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){J8=!0,e(t);return}let n=()=>{J8=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),J8=!0,e(speechSynthesis.getVoices())},1e3)}),Y8)}const Z8={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function wde(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 Tde(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 Z8){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return K8(`${i} requires ${Z8[i]}`);let a=wde(t,i,n);if(a)return K8(a)}else if(i.startsWith(`-`)&&i!==`--list`)return K8(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function Q8(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function Ede(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>Q8({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await X8()).map(e=>Q8({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
3675
+ `;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 K8(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function q8(e){return e instanceof Error?e.message:String(e)}let J8=!1,Y8=null;function X8(){return J8?Promise.resolve(speechSynthesis.getVoices()):(Y8||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){J8=!0,e(t);return}let n=()=>{J8=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),J8=!0,e(speechSynthesis.getVoices())},1e3)}),Y8)}const Z8={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function Ede(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 Dde(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 Z8){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return K8(`${i} requires ${Z8[i]}`);let a=Ede(t,i,n);if(a)return K8(a)}else if(i.startsWith(`-`)&&i!==`--list`)return K8(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function Q8(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function Ode(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>Q8({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await X8()).map(e=>Q8({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
3675
3676
  `)+`
3676
3677
  `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>Q8(e)).join(`
3677
3678
  `)+`
3678
- `,stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function Dde(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 X8()).map(e=>({name:e.name}));return[...n,...r]}async function Ode(e,t){let n=(await Dde(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:K8(`voice "${t}" not found. Use --list to see available voices.`)}}async function $8(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:G8(t?n():e()),stderr:``,exitCode:0}}return{stdout:G8(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function kde(e,t){return t.includes(`--list`)?Ede(e):t.includes(`--status`)?$8(e,!1):t.includes(`--warmup`)?$8(e,!0):null}async function Ade(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return K8(`speech synthesis error: ${q8(e)}`)}}async function jde(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function Mde(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return K8(q8(e))}}async function Nde(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 K8(q8(e))}}async function Pde(e,t,n,r){let i=e.local?await Mde(r):await Nde(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 K8(`failed to write ${n}: ${q8(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 W8();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:i()};if(!n.local&&!n.panelRpc)return K8(`Web Speech API unavailable in this environment`);let r=await kde(n,e);if(r)return r;let a=Tde(e);if(`exitCode`in a)return a;if(!a.text)return W8();if(!a.lang)return K8(`-l language tag is required`);let o;if(a.voiceName){let{resolved:e,error:t}=await Ode(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?Pde(n,t,a.outFile,s):n.local?Ade(s):jde(n,s)})}function Ide(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
3679
+ `,stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function kde(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 X8()).map(e=>({name:e.name}));return[...n,...r]}async function Ade(e,t){let n=(await kde(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:K8(`voice "${t}" not found. Use --list to see available voices.`)}}async function $8(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:G8(t?n():e()),stderr:``,exitCode:0}}return{stdout:G8(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function jde(e,t){return t.includes(`--list`)?Ode(e):t.includes(`--status`)?$8(e,!1):t.includes(`--warmup`)?$8(e,!0):null}async function Mde(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return K8(`speech synthesis error: ${q8(e)}`)}}async function Nde(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return K8(q8(e))}}async function Pde(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return K8(q8(e))}}async function Fde(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 K8(q8(e))}}async function Ide(e,t,n,r){let i=e.local?await Pde(r):await Fde(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 K8(`failed to write ${n}: ${q8(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}function Lde(){return H(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return W8();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:i()};if(!n.local&&!n.panelRpc)return K8(`Web Speech API unavailable in this environment`);let r=await jde(n,e);if(r)return r;let a=Dde(e);if(`exitCode`in a)return a;if(!a.text)return W8();if(!a.lang)return K8(`-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?Ide(n,t,a.outFile,s):n.local?Mde(s):Nde(n,s)})}function Rde(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
3679
3680
 
3680
3681
  Usage: screencapture [options] <output-file>
3681
3682
 
@@ -3691,12 +3692,12 @@ Examples:
3691
3692
  screencapture screenshot.png # Capture to file
3692
3693
  screencapture -c # Capture to clipboard
3693
3694
  screencapture -v capture.png # Capture and return for agent vision
3694
- `,stderr:``,exitCode:0}}function Lde(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 Rde(e){switch(e.split(`.`).pop()?.toLowerCase()){case`jpg`:case`jpeg`:return`image/jpeg`;case`webp`:return`image/webp`;default:return`image/png`}}async function zde(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 Bde(){return H(`screencapture`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return Ide();let n=a(),r=i();if(!n&&!r)return{stdout:``,stderr:`screencapture: browser APIs are unavailable in this environment
3695
+ `,stderr:``,exitCode:0}}function zde(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 Vde(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 Hde(){return H(`screencapture`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return Rde();let n=a(),r=i();if(!n&&!r)return{stdout:``,stderr:`screencapture: browser APIs are unavailable in this environment
3695
3696
  `,exitCode:1};if(n&&!P1()&&!navigator.mediaDevices?.getDisplayMedia)return{stdout:``,stderr:`screencapture: screen capture is not supported in this browser
3696
3697
  `,exitCode:1};let o=e.includes(`--clipboard`)||e.includes(`-c`),s=e.includes(`--view`)||e.includes(`-v`),c=[`--clipboard`,`-c`,`--view`,`-v`,`--help`,`-h`],l=e.indexOf(`--`),u=(l>=0?e.slice(l+1):e.filter(e=>!c.includes(e)))[0];if(!o&&!u)return{stdout:``,stderr:`screencapture: output file required (or use -c for clipboard)
3697
- `,exitCode:1};let d=u||`screenshot.png`,f=Rde(d),p=f===`image/png`?1:.92,m;try{if(P1())m=(await I1({kind:`screen`,mimeType:f,quality:p})).bytes;else if(n)m=(await zde(f,p)).bytes;else{let e=await r.call(`screencapture`,{mimeType:f,quality:p},{timeoutMs:3e5});m=new Uint8Array(e.bytes)}}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Permission denied`)||t.includes(`NotAllowedError`)?{stdout:``,stderr:`screencapture: user cancelled or permission denied
3698
+ `,exitCode:1};let d=u||`screenshot.png`,f=Bde(d),p=f===`image/png`?1:.92,m;try{if(P1())m=(await I1({kind:`screen`,mimeType:f,quality:p})).bytes;else if(n)m=(await Vde(f,p)).bytes;else{let e=await r.call(`screencapture`,{mimeType:f,quality:p},{timeoutMs:3e5});m=new Uint8Array(e.bytes)}}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Permission denied`)||t.includes(`NotAllowedError`)?{stdout:``,stderr:`screencapture: user cancelled or permission denied
3698
3699
  `,exitCode:1}:{stdout:``,stderr:`screencapture: ${t}\n`,exitCode:1}}if(o)try{if(P1()&&typeof document<`u`&&typeof document.hasFocus==`function`&&!document.hasFocus())return{stdout:``,stderr:`screencapture: clipboard capture needs a focused window; save to a file instead
3699
- `,exitCode:1};if(n){let e=await Vde(m,f),t=new ArrayBuffer(e.byteLength);new Uint8Array(t).set(e);let n=new Blob([t],{type:`image/png`});return await Hde(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{stdout:`captured ${Math.round(n.size/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}return await r.call(`clipboard-write-image`,{bytes:m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength),mimeType:f},{timeoutMs:3e5}),{stdout:`captured ${Math.round(m.byteLength/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`screencapture: failed to copy to clipboard: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let h=t.fs.resolvePath(t.cwd,d);try{await t.fs.writeFile(h,m)}catch(e){return{stdout:``,stderr:`screencapture: failed to write file: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let g=Math.round(m.length/1024);return s?{stdout:`${h} (${g} KB)\n<img:data:${f};base64,${Lde(m)}>`,stderr:``,exitCode:0}:{stdout:`captured ${g} KB to ${ua(h)}\n`,stderr:``,exitCode:0}})}async function Vde(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 Hde(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 Ude(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 e5(e,t,n){let r={method:e,headers:Bt({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Ft(`/api/secrets${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}function Wde(){return{async list(){let[e,t]=await Promise.all([e5(`GET`,``),e5(`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 e5(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await e5(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await e5(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(n5(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await e5(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(n5(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await e5(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(n5(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await e5(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(n5(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function t5(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 Gde(){return t5(e=>Ude(e))}function Kde(){return t5(e=>{let{type:t,...n}=e;return ot(t,n)})}function n5(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function qde(e){switch(e){case`extension-direct`:return Gde();case`extension-delegate`:return Kde();default:return Wde()}}const r5=[`--domain`],Jde=[`--persist`];function Yde(){return`secret — manage secrets for the fetch proxy and mount backends
3700
+ `,exitCode:1};if(n){let e=await Ude(m,f),t=new ArrayBuffer(e.byteLength);new Uint8Array(t).set(e);let n=new Blob([t],{type:`image/png`});return await Wde(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{stdout:`captured ${Math.round(n.size/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}return await r.call(`clipboard-write-image`,{bytes:m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength),mimeType:f},{timeoutMs:3e5}),{stdout:`captured ${Math.round(m.byteLength/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`screencapture: failed to copy to clipboard: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let h=t.fs.resolvePath(t.cwd,d);try{await t.fs.writeFile(h,m)}catch(e){return{stdout:``,stderr:`screencapture: failed to write file: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let g=Math.round(m.length/1024);return s?{stdout:`${h} (${g} KB)\n<img:data:${f};base64,${zde(m)}>`,stderr:``,exitCode:0}:{stdout:`captured ${g} KB to ${ua(h)}\n`,stderr:``,exitCode:0}})}async function Ude(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 Gde(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 e5(e,t,n){let r={method:e,headers:Bt({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Ft(`/api/secrets${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}function Kde(){return{async list(){let[e,t]=await Promise.all([e5(`GET`,``),e5(`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 e5(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await e5(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await e5(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(n5(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await e5(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(n5(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await e5(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(n5(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await e5(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(n5(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function t5(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 qde(){return t5(e=>Gde(e))}function Jde(){return t5(e=>{let{type:t,...n}=e;return ot(t,n)})}function n5(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function Yde(e){switch(e){case`extension-direct`:return qde();case`extension-delegate`:return Jde();default:return Kde()}}const r5=[`--domain`],Xde=[`--persist`];function Zde(){return`secret — manage secrets for the fetch proxy and mount backends
3700
3701
 
3701
3702
  No approval (session-only, in-memory, never persisted):
3702
3703
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -3733,23 +3734,23 @@ Examples:
3733
3734
  secret peek OPENAI_KEY
3734
3735
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
3735
3736
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
3736
- `}function i5(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 a5(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const Xde={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},Zde=new Set;function o5(e,t){if(e===t)return!0;try{return fee(e).test(t)}catch{return!1}}function Qde(e,t){for(let n of e)if(o5(n,t))return!0;return!1}function s5(e){return{stdout:``,stderr:`${Zr(`secret`,e)}\n`,exitCode:1}}function $de(e){let t=Xe(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??qde(t),i=e.grants??Zde,a=e.broker,o=()=>(a??=Oy(),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(Qde(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${Xde[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&o5(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&qC(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}}}}function efe(e){let t=LG(e);if(t.length!==0)return t.endsWith(`\r
3737
+ `}function i5(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 a5(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const Qde={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},$de=new Set;function o5(e,t){if(e===t)return!0;try{return fee(e).test(t)}catch{return!1}}function efe(e,t){for(let n of e)if(o5(n,t))return!0;return!1}function s5(e){return{stdout:``,stderr:`${Zr(`secret`,e)}\n`,exitCode:1}}function tfe(e){let t=Xe(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Yde(t),i=e.grants??$de,a=e.broker,o=()=>(a??=Oy(),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(efe(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${Qde[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&o5(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&qC(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}}}}function nfe(e){let t=LG(e);if(t.length!==0)return t.endsWith(`\r
3737
3738
  `)?t.slice(0,-2):t.endsWith(`
3738
- `)?t.slice(0,-1):t}async function tfe(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}):s5(i)}async function nfe(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return s5(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 rfe(e,t,n){let r=V(e.slice(1),{value:r5,bool:Jde});if(`error`in r)return a5(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
3739
- `,exitCode:1};let a=r.positionals[1],o=efe(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
3739
+ `)?t.slice(0,-1):t}async function rfe(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}):s5(i)}async function ife(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return s5(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 afe(e,t,n){let r=V(e.slice(1),{value:r5,bool:Xde});if(`error`in r)return a5(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
3740
+ `,exitCode:1};let a=r.positionals[1],o=nfe(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
3740
3741
  `,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]
3741
3742
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
3742
- `,exitCode:1};let c=i5(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?tfe(i,s,c,n):nfe(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
3743
- `,exitCode:1}}async function ife(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
3744
- `,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 afe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
3745
- `,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 ofe(e,t){let n=V(e.slice(1),{value:r5});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
3743
+ `,exitCode:1};let c=i5(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?rfe(i,s,c,n):ife(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
3744
+ `,exitCode:1}}async function ofe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
3745
+ `,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 sfe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
3746
+ `,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 cfe(e,t){let n=V(e.slice(1),{value:r5});if(`error`in n)return a5(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
3746
3747
  `,exitCode:1};let i=i5(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
3747
- `,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}):s5(a)}async function sfe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=await t.backend.list();if(r.length===0)return{stdout:`No secrets stored
3748
- `,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 cfe(e,t,n){let r=V(e.slice(1),{});if(`error`in r)return a5(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 lfe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
3749
- `,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?m(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 ufe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
3748
+ `,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}):s5(a)}async function lfe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=await t.backend.list();if(r.length===0)return{stdout:`No secrets stored
3749
+ `,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 ufe(e,t,n){let r=V(e.slice(1),{});if(`error`in r)return a5(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 dfe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
3750
+ `,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?m(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 ffe(e,t){let n=V(e.slice(1),{});if(`error`in n)return a5(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
3750
3751
  (changes are picked up on the next request — no restart needed)
3751
3752
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
3752
- `,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 dfe(e,t,n){let r=e[0];switch(r){case`set`:return rfe(e,t,n);case`get`:case`read`:return ife(e,n);case`peek`:return afe(e,n);case`scope`:return ofe(e,n);case`list`:return sfe(e,n);case`delete`:case`rm`:return cfe(e,r,n);case`test`:return lfe(e,n);case`edit`:return ufe(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function ffe(e={}){let t=$de(e);return H(`secret`,async(e,n)=>{if(e.length===0||Vr(e,{valueFlags:r5}))return{stdout:Yde(),stderr:``,exitCode:0};try{return await dfe(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function pfe(){return null}function c5(){return null}function l5(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
3753
+ `,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 pfe(e,t,n){let r=e[0];switch(r){case`set`:return afe(e,t,n);case`get`:case`read`:return ofe(e,n);case`peek`:return sfe(e,n);case`scope`:return cfe(e,n);case`list`:return lfe(e,n);case`delete`:case`rm`:return ufe(e,r,n);case`test`:return dfe(e,n);case`edit`:return ffe(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function mfe(e={}){let t=tfe(e);return H(`secret`,async(e,n)=>{if(e.length===0||Vr(e,{valueFlags:r5}))return{stdout:Zde(),stderr:``,exitCode:0};try{return await pfe(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function hfe(){return null}function c5(){return null}function l5(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
3753
3754
  serve --logs [<token>] [--lines <n>]
3754
3755
  serve --truncate [<token>]
3755
3756
 
@@ -3771,28 +3772,28 @@ Examples:
3771
3772
  --truncate [t] Clear lifecycle records and re-arm the announcement latch.
3772
3773
  --project Obsolete; ignored. Root-absolute paths work natively
3773
3774
  under unified preview.
3774
- `,stderr:``,exitCode:0}}function mfe(e){return`error`in e}function hfe(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
3775
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function gfe(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
3775
+ `,stderr:``,exitCode:0}}function gfe(e){return`error`in e}function _fe(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
3776
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function vfe(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
3776
3777
  `};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)
3777
3778
  `};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.
3778
3779
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
3779
- `}}function _fe(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function vfe(e,t,n){let r=gfe(e,t,n);if(r)return r;let i=_fe(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
3780
+ `}}function yfe(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function bfe(e,t,n){let r=vfe(e,t,n);if(r)return r;let i=yfe(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
3780
3781
  `};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
3781
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=hfe(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
3782
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=_fe(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
3782
3783
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
3783
3784
  `}:(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
3784
3785
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
3785
- `}:(n.directory=e,{skip:0})}function yfe(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=vfe(e[n],e[n+1],t);if(mfe(r))return{...t,error:r.error};n+=r.skip}return t}async function bfe(e,t,n,r){if(!pa(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=xa(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 xfe(e){return`exitCode`in e}async function Sfe(e){let t,n=c5();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
3786
- `,exitCode:1};if(t.webhookId){let n=await OZ();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 Cfe(){let e=c5();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
3786
+ `}:(n.directory=e,{skip:0})}function xfe(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=bfe(e[n],e[n+1],t);if(gfe(r))return{...t,error:r.error};n+=r.skip}return t}async function Sfe(e,t,n,r){if(!pa(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=xa(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 Cfe(e){return`exitCode`in e}async function wfe(e){let t,n=c5();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
3787
+ `,exitCode:1};if(t.webhookId){let n=await OZ();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 Tfe(){let e=c5();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
3787
3788
  `,stderr:``,exitCode:0}:{stdout:u5(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
3788
- `,stderr:``,exitCode:0}:{stdout:u5(n),stderr:``,exitCode:0}}function u5(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 wfe(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 Tfe(e){let t,n=c5();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.
3789
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(wfe).join(``)}`,stderr:``,exitCode:0}}async function Efe(e){let t,n,r=c5();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 Dfe(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:Xt(s)})}return n}function d5(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function Ofe(e){let t=pfe();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 kfe(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function Afe(e,t){if(!e)return{ok:!0};let n=await OZ();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 jfe(e,t,n,r,i,a,o){let s;try{s=await Ofe({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 OZ();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await kfe(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 d5(()=>Sfe(t))}if(e.list)return d5(()=>Cfe());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
3789
+ `,stderr:``,exitCode:0}:{stdout:u5(n),stderr:``,exitCode:0}}function u5(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 Efe(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 Dfe(e){let t,n=c5();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.
3790
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(Efe).join(``)}`,stderr:``,exitCode:0}}async function Ofe(e){let t,n,r=c5();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 kfe(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:Xt(s)})}return n}function d5(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function Afe(e){let t=hfe();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 jfe(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function Mfe(e,t){if(!e)return{ok:!0};let n=await OZ();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 Nfe(e,t,n,r,i,a,o){let s;try{s=await Afe({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 OZ();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await jfe(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 Pfe(e){if(e.stop){let t=e.stop;return d5(()=>wfe(t))}if(e.list)return d5(()=>Tfe());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
3790
3791
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
3791
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return d5(()=>Tfe({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return d5(()=>Efe(t))}}function Nfe(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
3792
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return d5(()=>Dfe({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return d5(()=>Ofe(t))}}function Ffe(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
3792
3793
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
3793
- `,exitCode:1}}async function Pfe(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return Dfe(t,n)}}async function Ffe(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return l5();let i=yfe(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await Mfe(i);if(a)return a;if(!i.directory)return l5();let o=Nfe(i);if(o)return o;let s=await bfe(i.directory,i.entry,t.fs,t.cwd);if(xfe(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await Pfe(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)
3794
- `:``,f=await Afe(!i.noBridge&&i.bridge,d);return f.ok?jfe(i,c,l,f.webhookId,d,u,n):f.result}function Ife(e,t){return H(`serve`,(n,r)=>Ffe(n,r,e,t))}const f5=`usage: session export [--id <id>] [--output <path>]
3795
- `;function Lfe(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 Rfe(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${f5}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${f5}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${f5}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${f5}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${f5}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${f5}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function zfe(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||Ub(r)!==a.sha256)throw new _(`transfer-corrupt`);return r}function Bfe(){return H(`session`,async(e,t)=>{let n=e[0];if(Vr(e))return{stdout:f5,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=Rfe(e);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:1};let{sessionId:i,outputPath:a}=r.args;if(a!==null){let e=Lfe(a);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${f5}`,exitCode:1}}let o=i==null?{kind:`active`}:{kind:`frozen`,sessionId:i};try{let e=await Vy().export(o,{}),n=await zfe(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 _?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const p5=`leader`;function Vfe(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function Hfe(e){return+!!e.leader+e.followers.length}function m5(){return{stdout:`usage: sprinkle <subcommand> [args]
3794
+ `,exitCode:1}}async function Ife(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return kfe(t,n)}}async function Lfe(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return l5();let i=xfe(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await Pfe(i);if(a)return a;if(!i.directory)return l5();let o=Ffe(i);if(o)return o;let s=await Sfe(i.directory,i.entry,t.fs,t.cwd);if(Cfe(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await Ife(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)
3795
+ `:``,f=await Mfe(!i.noBridge&&i.bridge,d);return f.ok?Nfe(i,c,l,f.webhookId,d,u,n):f.result}function Rfe(e,t){return H(`serve`,(n,r)=>Lfe(n,r,e,t))}const f5=`usage: session export [--id <id>] [--output <path>]
3796
+ `;function zfe(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${f5}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${f5}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${f5}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${f5}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${f5}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${f5}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function Vfe(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||Ub(r)!==a.sha256)throw new _(`transfer-corrupt`);return r}function Hfe(){return H(`session`,async(e,t)=>{let n=e[0];if(Vr(e))return{stdout:f5,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=zfe(a);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${f5}`,exitCode:1}}let o=i==null?{kind:`active`}:{kind:`frozen`,sessionId:i};try{let e=await Vy().export(o,{}),n=await Vfe(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 _?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const p5=`leader`;function Ufe(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function Wfe(e){return+!!e.leader+e.followers.length}function m5(){return{stdout:`usage: sprinkle <subcommand> [args]
3796
3797
 
3797
3798
  list [--runtime <id>] List sprinkles + an instance line per runtime
3798
3799
  open <name> Open a sprinkle by name
@@ -3810,22 +3811,22 @@ Examples:
3810
3811
  chat <html> Show inline HTML in chat (Tool UI)
3811
3812
  Use data-action="name" on buttons for callbacks
3812
3813
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
3813
- `,stderr:``,exitCode:0}}function Ufe(){return globalThis.__slicc_sprinkleManager??null}function h5(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function g5(){return[p5,...UY().map(e=>e.runtimeId)]}function _5(e){return`unknown runtime "${e}"\nknown runtimes: ${g5().join(`, `)}\nRun \`host\` to see connected followers.`}async function Wfe(e,t){let n=e.slice(1).join(` `);if(!n){let e=LG(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
3814
+ `,stderr:``,exitCode:0}}function Gfe(){return globalThis.__slicc_sprinkleManager??null}function h5(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function g5(){return[p5,...UY().map(e=>e.runtimeId)]}function _5(e){return`unknown runtime "${e}"\nknown runtimes: ${g5().join(`, `)}\nRun \`host\` to see connected followers.`}async function Kfe(e,t){let n=e.slice(1).join(` `);if(!n){let e=LG(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
3814
3815
  `,exitCode:1};let r=await en({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
3815
3816
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
3816
- `,stderr:``,exitCode:0}}function Gfe(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:p5})),...Vfe()]}async function qfe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return h5(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!g5().includes(r))return h5(`list`,_5(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
3817
- `,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(...Gfe(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
3817
+ `,stderr:``,exitCode:0}}function qfe(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function Jfe(e){return[...e.map(e=>({name:e,runtimeId:p5})),...Ufe()]}async function Yfe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return h5(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!g5().includes(r))return h5(`list`,_5(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
3818
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=Jfe([...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(...qfe(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
3818
3819
  `)+`
3819
- `,stderr:``,exitCode:0}}function Jfe(e,t){let n=wZ(void 0,t);return!n||Q_(e)?null:($_(e,n),Q_(e)===n?n:null)}async function Yfe(e,t,n){let r=V(t.slice(1),{});if(`error`in r)return h5(`open`,r.error);let i=r.positionals[0];if(!i)return h5(`open`,`name required`);let a=Jfe(i,n);try{await e.open(i)}catch(e){return a&&ev(i),h5(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${a?`; licks route to "${a}"`:``}.\n`,stderr:``,exitCode:0}}function Xfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):h5(`close`,`name required`)}async function Zfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`reload`,n.error);let r=n.positionals[0];if(!r)return h5(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return h5(`reload`,e instanceof Error?e.message:String(e))}}async function Qfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function $fe(e){let t=V(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return h5(`route`,t.error);let n=t.positionals[0];if(!n){let e=tv(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
3820
+ `,stderr:``,exitCode:0}}function Xfe(e,t){let n=wZ(void 0,t);return!n||Q_(e)?null:($_(e,n),Q_(e)===n?n:null)}async function Zfe(e,t,n){let r=V(t.slice(1),{});if(`error`in r)return h5(`open`,r.error);let i=r.positionals[0];if(!i)return h5(`open`,`name required`);let a=Xfe(i,n);try{await e.open(i)}catch(e){return a&&ev(i),h5(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${a?`; licks route to "${a}"`:``}.\n`,stderr:``,exitCode:0}}function Qfe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):h5(`close`,`name required`)}async function $fe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`reload`,n.error);let r=n.positionals[0];if(!r)return h5(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return h5(`reload`,e instanceof Error?e.message:String(e))}}async function epe(e,t){let n=V(t.slice(1),{});if(`error`in n)return h5(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function tpe(e){let t=V(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return h5(`route`,t.error);let n=t.positionals[0];if(!n){let e=tv(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
3820
3821
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
3821
3822
  route for follower-forwarded licks too):
3822
3823
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
3823
3824
  `)+`
3824
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ev(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=Q_(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return $_(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function epe(e){let t=[];return e.leader&&t.push(p5),t.push(...e.followers),t.join(`, `)}async function tpe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return h5(`send`,n.error);let r=n.positionals[0];if(!r)return h5(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return h5(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return h5(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!g5().includes(o))return h5(`send`,_5(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return h5(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return h5(`send`,_5(s.unknownRuntime));let c=Hfe(s);return c===0?h5(`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`} (${epe(s)}).\n`,stderr:``,exitCode:0}}function npe(){return H(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return m5();let n=e[0];if(Vr(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:Xr(`sprinkle`,n,m5().stdout),stderr:``,exitCode:0};if(n===`chat`)return Wfe(qr(e),t);let r=Ufe();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
3825
- `,exitCode:1};switch(n){case`list`:return qfe(r,e);case`open`:return Yfe(r,e,t.env);case`close`:return Xfe(r,e);case`reload`:return Zfe(r,e);case`refresh`:return Qfe(r,e);case`route`:return $fe(e);case`send`:return tpe(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function rpe(){return{stdout:`usage: sqlite3 [database] [sql]
3826
- `,stderr:``,exitCode:0}}function ipe(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||LG(t.stdin).trim()}}function ape(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function ope(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function spe(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function cpe(e){let t=e.flatMap(e=>e.values.map(e=>e.map(fa).join(`|`)));return t.length>0?`${t.join(`
3827
- `)}\n`:``}async function lpe(e,t,n){let r=await ba(),i=ape(e,n),a=await ope(r,i,n),o=a.exec(t);return await spe(a,i,n),a.close(),cpe(o)}function v5(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function y5(e=`sqlite3`){return H(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return rpe();let{database:r,sql:i}=ipe(t,n);if(!i)return v5(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await lpe(r,i,n),stderr:``,exitCode:0}}catch(t){return v5(e,t)}})}function b5(e){return{stdout:``,stderr:e.endsWith(`
3828
- `)?e:`${e}\n`,exitCode:1}}function upe(){return{stdout:`ssh - run a command on a connected tray follower
3825
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ev(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=Q_(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return $_(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function npe(e){let t=[];return e.leader&&t.push(p5),t.push(...e.followers),t.join(`, `)}async function rpe(e,t){let n=V(t.slice(1),{value:[`--runtime`]});if(`error`in n)return h5(`send`,n.error);let r=n.positionals[0];if(!r)return h5(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return h5(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return h5(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!g5().includes(o))return h5(`send`,_5(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return h5(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return h5(`send`,_5(s.unknownRuntime));let c=Wfe(s);return c===0?h5(`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`} (${npe(s)}).\n`,stderr:``,exitCode:0}}function ipe(){return H(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return m5();let n=e[0];if(Vr(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:Xr(`sprinkle`,n,m5().stdout),stderr:``,exitCode:0};if(n===`chat`)return Kfe(qr(e),t);let r=Gfe();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
3826
+ `,exitCode:1};switch(n){case`list`:return Yfe(r,e);case`open`:return Zfe(r,e,t.env);case`close`:return Qfe(r,e);case`reload`:return $fe(r,e);case`refresh`:return epe(r,e);case`route`:return tpe(e);case`send`:return rpe(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function ape(){return{stdout:`usage: sqlite3 [database] [sql]
3827
+ `,stderr:``,exitCode:0}}function ope(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||LG(t.stdin).trim()}}function spe(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function cpe(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function lpe(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function upe(e){let t=e.flatMap(e=>e.values.map(e=>e.map(fa).join(`|`)));return t.length>0?`${t.join(`
3828
+ `)}\n`:``}async function dpe(e,t,n){let r=await ba(),i=spe(e,n),a=await cpe(r,i,n),o=a.exec(t);return await lpe(a,i,n),a.close(),upe(o)}function v5(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function y5(e=`sqlite3`){return H(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return ape();let{database:r,sql:i}=ope(t,n);if(!i)return v5(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await dpe(r,i,n),stderr:``,exitCode:0}}catch(t){return v5(e,t)}})}function b5(e){return{stdout:``,stderr:e.endsWith(`
3829
+ `)?e:`${e}\n`,exitCode:1}}function fpe(){return{stdout:`ssh - run a command on a connected tray follower
3829
3830
 
3830
3831
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
3831
3832
  ssh --list
@@ -3848,11 +3849,11 @@ Examples:
3848
3849
  ssh --list
3849
3850
  ssh follower-abc123 "uname -a"
3850
3851
  ssh --cwd /tmp follower-abc123 "ls -la"
3851
- `,stderr:``,exitCode:0}}function dpe(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
3852
+ `,stderr:``,exitCode:0}}function ppe(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
3852
3853
  Start one with: slicc <join-url> follow sh -c
3853
3854
  `;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(`
3854
- `)}\n`}function fpe(e){if(e.stdin===void 0)return;let t=RG(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 d(n)}function ppe(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 mpe(){return H(`ssh`,async(e,t)=>{let n=ppe(e);if(`help`in n)return upe();if(`error`in n)return b5(n.error);if(n.list||n.runtimeId===void 0)return{stdout:dpe(UY()),stderr:``,exitCode:0};if(!n.command)return b5(`ssh: missing command
3855
- Usage: ssh <runtime-id> <command...>`);let r=i();if(!r)return b5(`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:fpe(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 b5(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,o)}})}function hpe(e){return{stdout:``,stderr:`${Zr(`sudo`,e)}\n`,exitCode:1}}function gpe(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...]
3855
+ `)}\n`}function mpe(e){if(e.stdin===void 0)return;let t=RG(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 d(n)}function hpe(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 gpe(){return H(`ssh`,async(e,t)=>{let n=hpe(e);if(`help`in n)return fpe();if(`error`in n)return b5(n.error);if(n.list||n.runtimeId===void 0)return{stdout:ppe(UY()),stderr:``,exitCode:0};if(!n.command)return b5(`ssh: missing command
3856
+ Usage: ssh <runtime-id> <command...>`);let r=i();if(!r)return b5(`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:mpe(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 b5(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,o)}})}function _pe(e){return{stdout:``,stderr:`${Zr(`sudo`,e)}\n`,exitCode:1}}function vpe(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...]
3856
3857
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
3857
3858
 
3858
3859
  Request human approval to run <command> with elevation. If approved, the
@@ -3866,14 +3867,14 @@ Options:
3866
3867
  -h, --help Show this help message and exit.
3867
3868
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
3868
3869
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
3869
- `,exitCode:1};let a=e.join(` `).trim(),o=await t.requestApproval({kind:`command`,detail:a});if(o.decision===`deny`)return hpe(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 x5(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 S5(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function C5(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function _pe(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await S5(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}': ${x5(e)}\n`}}}function vpe(){return H(`rm`,async(e,t)=>{let n={recursive:C5(e,`r`)||C5(e,`R`)||e.includes(`--recursive`),force:C5(e,`f`)||e.includes(`--force`),verbose:C5(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
3870
- `,exitCode:1};let i=await Promise.all(r.map(e=>_pe(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 ype(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 bpe(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 xpe(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await S5(e,r);return{stdout:n.format?`${ype(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 Spe(){return H(`stat`,async(e,t)=>{let n=bpe(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
3871
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>xpe(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 Cpe(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function wpe(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 S5(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}': ${x5(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=Cpe(a)}return{stdout:o,stderr:``}}function Tpe(){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
3872
- `,exitCode:1};let a=await Promise.all(i.map(e=>wpe(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 Epe(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
3873
- `,stderr:``,exitCode:0}}function w5(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function Dpe(e,t){if(e.mode)return w5(`exactly one of -c, -x, or -t is required`);e.mode=t}function Ope(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const kpe={c:`create`,x:`extract`,t:`list`};function Ape(e,t,n,r,i){let a=kpe[e];if(a)return{nextIndex:r,error:Dpe(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:w5(`unsupported option -${e}`)};let o=Ope(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:w5(`option -${e} requires an argument`)}}function jpe(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=Ape(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function Mpe(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 w5(`unsupported option ${r}`);let i=jpe(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function Npe(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):ua(t)}async function T5(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 T5(e,la(t,n),`${a}${n}`,r)}function Ppe(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ho(e):e;return lo(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function Fpe(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 va(t,i)?i:void 0}async function Ipe(e,t){if(e.paths.length===0)return w5(`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 T5(t,e,Npe(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=_o(n);return await t.fs.writeFile(i,e.gzip?ao(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
3874
- `)}\n`:``,stderr:``,exitCode:0}}async function Lpe(e,t){if(e.paths.length>0)return w5(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=Ppe(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
3875
- `);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=Fpe(t,i,e.path);if(!n)return w5(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ha(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(`
3876
- `)}\n`:``,stderr:``,exitCode:0}}function Rpe(){return H(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Epe();let n=Mpe(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?w5(`-C is only supported in create or extract mode`):n.mode===`create`?Ipe(n,t):Lpe(n,t):w5(`option -f requires an archive path`):w5(`exactly one of -c, -x, or -t is required`)})}var zpe=`/**
3870
+ `,exitCode:1};let a=e.join(` `).trim(),o=await t.requestApproval({kind:`command`,detail:a});if(o.decision===`deny`)return _pe(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 x5(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 S5(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function C5(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function ype(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await S5(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}': ${x5(e)}\n`}}}function bpe(){return H(`rm`,async(e,t)=>{let n={recursive:C5(e,`r`)||C5(e,`R`)||e.includes(`--recursive`),force:C5(e,`f`)||e.includes(`--force`),verbose:C5(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
3871
+ `,exitCode:1};let i=await Promise.all(r.map(e=>ype(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 xpe(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 Spe(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 Cpe(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await S5(e,r);return{stdout:n.format?`${xpe(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 wpe(){return H(`stat`,async(e,t)=>{let n=Spe(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
3872
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>Cpe(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 Tpe(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function Epe(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 S5(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}': ${x5(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=Tpe(a)}return{stdout:o,stderr:``}}function Dpe(){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
3873
+ `,exitCode:1};let a=await Promise.all(i.map(e=>Epe(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 Ope(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
3874
+ `,stderr:``,exitCode:0}}function w5(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function kpe(e,t){if(e.mode)return w5(`exactly one of -c, -x, or -t is required`);e.mode=t}function Ape(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const jpe={c:`create`,x:`extract`,t:`list`};function Mpe(e,t,n,r,i){let a=jpe[e];if(a)return{nextIndex:r,error:kpe(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:w5(`unsupported option -${e}`)};let o=Ape(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:w5(`option -${e} requires an argument`)}}function Npe(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=Mpe(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function Ppe(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 w5(`unsupported option ${r}`);let i=Npe(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function Fpe(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):ua(t)}async function T5(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 T5(e,la(t,n),`${a}${n}`,r)}function Ipe(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ho(e):e;return lo(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function Lpe(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 va(t,i)?i:void 0}async function Rpe(e,t){if(e.paths.length===0)return w5(`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 T5(t,e,Fpe(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=_o(n);return await t.fs.writeFile(i,e.gzip?ao(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
3875
+ `)}\n`:``,stderr:``,exitCode:0}}async function zpe(e,t){if(e.paths.length>0)return w5(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=Ipe(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
3876
+ `);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=Lpe(t,i,e.path);if(!n)return w5(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ha(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(`
3877
+ `)}\n`:``,stderr:``,exitCode:0}}function Bpe(){return H(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Ope();let n=Ppe(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?w5(`-C is only supported in create or extract mode`):n.mode===`create`?Rpe(n,t):zpe(n,t):w5(`option -f requires an archive path`):w5(`exactly one of -c, -x, or -t is required`)})}var Vpe=`/**
3877
3878
  * Standalone assertions - no dependency on test runner
3878
3879
  *
3879
3880
  * Each assertion:
@@ -4061,7 +4062,7 @@ function sameMembers(a, b) {
4061
4062
  }
4062
4063
 
4063
4064
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
4064
- `,Bpe=`/**
4065
+ `,Hpe=`/**
4065
4066
  * tst - minimal test runner
4066
4067
  *
4067
4068
  * - Standalone assertions (assert.js works anywhere)
@@ -4715,27 +4716,27 @@ Install:
4715
4716
  Then \`tsc --version\` and the transpile commands above. There is no
4716
4717
  bundled binary, no CDN fallback; a missing package exits non-zero
4717
4718
  with a clear \`ipk add\` hint.
4718
- `;function Vpe(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 Hpe(e,t){let n=`${ua(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ha(e)}/${n}`}async function Upe(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=ha(n)}return null}const O5={target:`ES2022`,module:`ESNext`,moduleResolution:`Bundler`,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0};async function Wpe(e,t,n){let r=await Upe(e,n);if(!r)return{compilerOptions:{...O5}};let i;try{i=await e.readFile(r)}catch{return{compilerOptions:{...O5}}}let{config:a,error:o}=t.parseConfigFileTextToJson(r,i);if(o||!a)return{compilerOptions:{...O5}};let s=a.compilerOptions??{};return{compilerOptions:{...O5,...s}}}function k5(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
4719
- `);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 Gpe(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 A5(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}=A5(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>k5(e,t)),s=o.length>0?`${o.join(`
4720
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function qpe(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}}Gpe(e,a);let{outputText:s,diagnostics:c}=A5(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${k5(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,Hpe(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=Vpe(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:D5,stderr:``,exitCode:0}};let r;try{r=await oa(E5(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 Ype(){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 Wpe(t.fs,i,t.cwd);if(r.files.length===0){let e=LG(t.stdin);return e?Kpe(i,r,a,e):{stdout:D5,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await qpe(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const Xpe=[`**/*.test.{js,ts}`];function Zpe(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:[...Xpe],reporter:n,showHelp:r}}function j5(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 j5(`${r}${e}${i}`))o.push(t);return o}function Qpe(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 $pe(e,t,n){let r=n.flatMap(j5).map(Qpe),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 M5=null;async function eme(e){if(M5)return M5;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return M5=`
4719
+ `;function Upe(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 Wpe(e,t){let n=`${ua(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ha(e)}/${n}`}async function Gpe(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=ha(n)}return null}const O5={target:`ES2022`,module:`ESNext`,moduleResolution:`Bundler`,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0};async function Kpe(e,t,n){let r=await Gpe(e,n);if(!r)return{compilerOptions:{...O5}};let i;try{i=await e.readFile(r)}catch{return{compilerOptions:{...O5}}}let{config:a,error:o}=t.parseConfigFileTextToJson(r,i);if(o||!a)return{compilerOptions:{...O5}};let s=a.compilerOptions??{};return{compilerOptions:{...O5,...s}}}function k5(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
4720
+ `);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 qpe(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 A5(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function Jpe(e,t,n,r){let{outputText:i,diagnostics:a}=A5(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>k5(e,t)),s=o.length>0?`${o.join(`
4721
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function Ype(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}}qpe(e,a);let{outputText:s,diagnostics:c}=A5(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${k5(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,Wpe(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 Xpe(e,t){let n;try{n=Upe(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:D5,stderr:``,exitCode:0}};let r;try{r=await oa(E5(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 Zpe(){return H(`tsc`,async(e,t)=>{let n=await Xpe(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await Kpe(t.fs,i,t.cwd);if(r.files.length===0){let e=LG(t.stdin);return e?Jpe(i,r,a,e):{stdout:D5,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await Ype(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const Qpe=[`**/*.test.{js,ts}`];function $pe(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:[...Qpe],reporter:n,showHelp:r}}function j5(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 j5(`${r}${e}${i}`))o.push(t);return o}function eme(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 tme(e,t,n){let r=n.flatMap(j5).map(eme),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 M5=null;async function nme(e){if(M5)return M5;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return M5=`
4721
4722
  if (typeof process !== 'undefined' && !process.versions) {
4722
4723
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
4723
4724
  }
4724
4725
  const __tst_assert_exports = (function () {
4725
4726
  const module = { exports: {} };
4726
4727
  const exports = module.exports;
4727
- ${e.transpileModule(zpe,{compilerOptions:t,fileName:`assert.js`}).outputText}
4728
+ ${e.transpileModule(Vpe,{compilerOptions:t,fileName:`assert.js`}).outputText}
4728
4729
  return module.exports;
4729
4730
  })();
4730
4731
  const __tst_module_exports = (function () {
4731
4732
  const module = { exports: {} };
4732
4733
  const exports = module.exports;
4733
- ${e.transpileModule(Bpe,{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"))`)}
4734
+ ${e.transpileModule(Hpe,{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"))`)}
4734
4735
  return module.exports;
4735
4736
  })();
4736
4737
  const __tst = __tst_module_exports.default || __tst_module_exports;
4737
4738
  __tst.manual = true;
4738
- `.trim(),M5}function N5(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 tme(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 nme(e,t,n){let r=Ut(`${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 rme(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=ha(n),l=new Map;for(let n of tme(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await nme(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 ime(e,t,n,r,i,a){let o=r===`spec`?`pretty`:`tap`,s=[];for(let[e,t]of i.entries()){let n=N5(t,a.get(e)??new Map);s.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}return`"use strict";
4739
+ `.trim(),M5}function N5(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 rme(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 ime(e,t,n){let r=Ut(`${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 ame(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=ha(n),l=new Map;for(let n of rme(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await ime(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 ome(e,t,n,r,i,a){let o=r===`spec`?`pretty`:`tap`,s=[];for(let[e,t]of i.entries()){let n=N5(t,a.get(e)??new Map);s.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}return`"use strict";
4739
4740
  ${e}
4740
4741
  const __tstReq = (id) => {
4741
4742
  if (id === "tst") return __tst_module_exports;
@@ -4767,7 +4768,7 @@ const __state = await __tst.run({ format: ${JSON.stringify(o)} });
4767
4768
  await Promise.resolve();
4768
4769
  await new Promise((resolve) => setTimeout(resolve));
4769
4770
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
4770
- `}const ame={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function ome(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...ame}}async function sme(e,t){let n;try{n=Zpe(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
4771
+ `}const sme={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function cme(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...sme}}async function lme(e,t){let n;try{n=$pe(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
4771
4772
 
4772
4773
  Usage:
4773
4774
  test [options] [glob...]
@@ -4780,7 +4781,7 @@ Notes:
4780
4781
  - Default glob: **/*.test.{js,ts}, walked from the current cwd.
4781
4782
  - .ts files are transpiled via the bundled typescript package.
4782
4783
  - Each file runs in its own realm (same engine as 'node').
4783
- `,stderr:``,exitCode:0}};let r=await $pe(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 oa(E5(t))}catch(e){return{done:{stdout:``,stderr:`test: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await eme(i);return{parsed:n,files:r,ts:i,harness:a,userOpts:ome(i)}}function cme(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function lme(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 rme(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 JG(ime(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||cme(f.stdout)}}function ume(){return H(`test`,async(e,t)=>{let n=await sme(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 lme(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}return{stdout:i,stderr:a,exitCode:+!!o}})}const P5=[],F5=`usage: theme <subcommand> [args]
4784
+ `,stderr:``,exitCode:0}};let r=await tme(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 oa(E5(t))}catch(e){return{done:{stdout:``,stderr:`test: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await nme(i);return{parsed:n,files:r,ts:i,harness:a,userOpts:cme(i)}}function ume(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function dme(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 ame(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 JG(ome(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||ume(f.stdout)}}function fme(){return H(`test`,async(e,t)=>{let n=await lme(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 dme(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}return{stdout:i,stderr:a,exitCode:+!!o}})}const P5=[],F5=`usage: theme <subcommand> [args]
4784
4785
 
4785
4786
  Subcommands:
4786
4787
  list List available preset and custom themes
@@ -4789,23 +4790,23 @@ Subcommands:
4789
4790
  reset Reset to the default theme
4790
4791
  current Show the currently active theme
4791
4792
  export <id> <path> Export a theme to a VFS path
4792
- `;function I5(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function dme(){return H(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:F5,stderr:``,exitCode:0};let n=e[0];return Vr(e.slice(1),{valueFlags:P5})?{stdout:Xr(`theme`,n,F5),stderr:``,exitCode:0}:n===`list`?fme(e):n===`current`?pme(e):n===`reset`?mme(e):n===`apply`?hme(e.slice(1),t):n===`export`?gme(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${F5}`,exitCode:1}})}async function fme(e){let t=V(e.slice(1),{value:P5});if(`error`in t)return I5(`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(`
4793
- `),stderr:``,exitCode:0}}async function pme(e){let t=V(e.slice(1),{value:P5});return`error`in t?I5(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
4794
- `,stderr:``,exitCode:0}}async function mme(e){let t=V(e.slice(1),{value:P5});if(`error`in t)return I5(`reset`,t.error);let n=i();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
4793
+ `;function I5(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function pme(){return H(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:F5,stderr:``,exitCode:0};let n=e[0];return Vr(e.slice(1),{valueFlags:P5})?{stdout:Xr(`theme`,n,F5),stderr:``,exitCode:0}:n===`list`?mme(e):n===`current`?hme(e):n===`reset`?gme(e):n===`apply`?_me(e.slice(1),t):n===`export`?vme(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${F5}`,exitCode:1}})}async function mme(e){let t=V(e.slice(1),{value:P5});if(`error`in t)return I5(`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(`
4794
+ `),stderr:``,exitCode:0}}async function hme(e){let t=V(e.slice(1),{value:P5});return`error`in t?I5(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
4795
+ `,stderr:``,exitCode:0}}async function gme(e){let t=V(e.slice(1),{value:P5});if(`error`in t)return I5(`reset`,t.error);let n=i();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
4795
4796
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
4796
- `,exitCode:1}}async function hme(e,t){let n=V(e,{value:P5});if(`error`in n)return I5(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
4797
+ `,exitCode:1}}async function _me(e,t){let n=V(e,{value:P5});if(`error`in n)return I5(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
4797
4798
  `,exitCode:1};let r=i();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
4798
4799
  `,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)
4799
4800
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
4800
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function gme(e,t){let n=V(e,{value:P5});if(`error`in n)return I5(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
4801
- `,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 L5=`unknown`,R5=`usage: uname [-amnorsv]`,z5=[`s`,`n`,`r`,`v`,`m`,`o`];function _me(){return{stdout:[R5,` -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(`
4802
- `),stderr:``,exitCode:0}}function vme(){let{releasedAt:e,buildId:t}=Tr();return e?`${t} (${e})`:t}function yme(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:L5}function bme(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:L5}function xme(e){switch(e){case`s`:return`SLICC`;case`n`:return Xn();case`r`:return Tr().version;case`v`:return vme();case`m`:return yme();case`o`:return bme()}}function Sme(e){return{stdout:``,stderr:`uname: ${e}\n${R5}\n`,exitCode:1}}function Cme(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 z5)t.add(e);continue}if(!z5.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function wme(){return H(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return _me();let t=Cme(e);return`error`in t?Sme(t.error):{stdout:`${(t.size>0?z5.filter(e=>t.has(e)):[`s`]).map(xme).join(` `)}\n`,stderr:``,exitCode:0}})}function Tme(){return H(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
4801
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function vme(e,t){let n=V(e,{value:P5});if(`error`in n)return I5(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
4802
+ `,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 L5=`unknown`,R5=`usage: uname [-amnorsv]`,z5=[`s`,`n`,`r`,`v`,`m`,`o`];function yme(){return{stdout:[R5,` -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(`
4803
+ `),stderr:``,exitCode:0}}function bme(){let{releasedAt:e,buildId:t}=Tr();return e?`${t} (${e})`:t}function xme(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:L5}function Sme(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:L5}function Cme(e){switch(e){case`s`:return`SLICC`;case`n`:return Xn();case`r`:return Tr().version;case`v`:return bme();case`m`:return xme();case`o`:return Sme()}}function wme(e){return{stdout:``,stderr:`uname: ${e}\n${R5}\n`,exitCode:1}}function Tme(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 z5)t.add(e);continue}if(!z5.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function Eme(){return H(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return yme();let t=Tme(e);return`error`in t?wme(t.error):{stdout:`${(t.size>0?z5.filter(e=>t.has(e)):[`s`]).map(Cme).join(` `)}\n`,stderr:``,exitCode:0}})}function Dme(){return H(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
4803
4804
  Remove FILE. Symbolic links are removed without following their target.
4804
4805
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
4805
4806
  `:`unlink: extra operand
4806
- `,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 Eme(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
4807
- `,stderr:``,exitCode:0}}function Dme(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
4808
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function Ome(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!va(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ha(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function kme(){return H(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Eme();let n=Dme(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=fi(a),s=0;for(let[e,n]of Object.entries(o)){let r=await Ome(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 B5=`ai-ecoverse/slicc`,V5=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,H5=`packages/vfs-root`,U5=3e4,Ame=[`${H5}/workspace/skills/`,`${H5}/shared/sprinkles/`,`${H5}/shared/sounds/`,`${H5}/shared/MEMORY.md`,`${H5}/etc/`],jme=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function Mme(){return Object.fromEntries(jme.map(e=>[e,0]))}function W5(e,t,n,r){let i=Mme();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 Nme(e){if(e[0]!==`apply`)throw Error(V5);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 G5(e){return e.startsWith(`v`)?e:`v${e}`}function Pme(e){if(!Ame.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function K5(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 ${U5}ms`)),U5)})])}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 q5(e,t){let n=await K5(t,`https://api.github.com/repos/${B5}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=Mt(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=Pme(e.path);t&&i.set(t,e.path)}return i}function J5(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${B5}/${encodeURIComponent(e)}/${n}`}function Y5(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function Fme(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function X5(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 Z5(e,t,n,r,i){let a=`${t}.upgrade-${G5(n)}-to-${G5(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 Ime(e,t,n,r,i,a,o){let s=await X5(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:Y5(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(Y5(i,a)||Y5(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(Y5(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(Fme);if(c!==null&&l!==null&&u!==null){let i=Qo(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${G5(n)}:${t}`,other:`${G5(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 Z5(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await Z5(e.fs,t,n,r,o)}}async function Lme(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function Rme(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 X5(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 Lme(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 zme(e,t,n){let r=G5(t),i=G5(n),[a,o]=await Promise.all([q5(r,e.fetch),q5(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)?K5(e.fetch,J5(r,a.get(t))).then(e=>jt(e.body)):void 0,o.has(t)?K5(e.fetch,J5(i,o.get(t))).then(e=>jt(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 Ime(e,r,t,n,i,a,l));return await Rme(e.fs,u),u}async function Bme(e){let{version:t,releasedAt:n,buildId:r}=Tr(),i=[],a=null,o=e.getLastSeen??Dr();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 Vme(e){return H(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${V5}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:W5(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await Bme(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=Nme(t));let i=await zme(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:W5(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:W5(n,r,[],[t]),stderr:``,exitCode:1}}})}const Hme=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function Ume(e){return Si(e,Hme)}function Q5(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 Wme(e){let t={};return e.has(`--vid`)&&(t.vendorId=Q5(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Q5(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Q5(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Q5(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Q5(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const Gme=new Set([`standard`,`class`,`vendor`]),Kme=new Set([`device`,`interface`,`endpoint`,`other`]);function $5(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!Gme.has(t))throw Error(`invalid --request-type: '${t}'`);if(!Kme.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Q5(e.get(`--request`)??`0`,`request`),value:Q5(e.get(`--value`)??`0`,`value`),index:Q5(e.get(`--index`)??`0`,`index`)}}function e7(e){let t=RG(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function qme(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function t7(e){return`0x${e.toString(16).padStart(4,`0`)}`}function n7(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${t7(e.vendorId)}:${t7(e.productId)}\t${t}${n}${r}`}function r7(e){return{stdout:e,stderr:``,exitCode:0}}function i7(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const Jme=`usb - access USB devices via WebUSB
4807
+ `,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 Ome(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
4808
+ `,stderr:``,exitCode:0}}function kme(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
4809
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function Ame(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!va(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ha(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function jme(){return H(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Ome();let n=kme(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=fi(a),s=0;for(let[e,n]of Object.entries(o)){let r=await Ame(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 B5=`ai-ecoverse/slicc`,V5=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,H5=`packages/vfs-root`,U5=3e4,Mme=[`${H5}/workspace/skills/`,`${H5}/shared/sprinkles/`,`${H5}/shared/sounds/`,`${H5}/shared/MEMORY.md`,`${H5}/etc/`],Nme=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function Pme(){return Object.fromEntries(Nme.map(e=>[e,0]))}function W5(e,t,n,r){let i=Pme();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 Fme(e){if(e[0]!==`apply`)throw Error(V5);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 G5(e){return e.startsWith(`v`)?e:`v${e}`}function Ime(e){if(!Mme.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function K5(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 ${U5}ms`)),U5)})])}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 q5(e,t){let n=await K5(t,`https://api.github.com/repos/${B5}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=Mt(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=Ime(e.path);t&&i.set(t,e.path)}return i}function J5(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${B5}/${encodeURIComponent(e)}/${n}`}function Y5(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function Lme(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function X5(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 Z5(e,t,n,r,i){let a=`${t}.upgrade-${G5(n)}-to-${G5(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 Rme(e,t,n,r,i,a,o){let s=await X5(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:Y5(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(Y5(i,a)||Y5(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(Y5(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(Lme);if(c!==null&&l!==null&&u!==null){let i=Qo(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${G5(n)}:${t}`,other:`${G5(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 Z5(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await Z5(e.fs,t,n,r,o)}}async function zme(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function Bme(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 X5(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 zme(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 Vme(e,t,n){let r=G5(t),i=G5(n),[a,o]=await Promise.all([q5(r,e.fetch),q5(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)?K5(e.fetch,J5(r,a.get(t))).then(e=>jt(e.body)):void 0,o.has(t)?K5(e.fetch,J5(i,o.get(t))).then(e=>jt(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 Rme(e,r,t,n,i,a,l));return await Bme(e.fs,u),u}async function Hme(e){let{version:t,releasedAt:n,buildId:r}=Tr(),i=[],a=null,o=e.getLastSeen??Dr();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 Ume(e){return H(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${V5}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:W5(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await Hme(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=Fme(t));let i=await Vme(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:W5(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:W5(n,r,[],[t]),stderr:``,exitCode:1}}})}const Wme=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function Gme(e){return Si(e,Wme)}function Q5(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 Kme(e){let t={};return e.has(`--vid`)&&(t.vendorId=Q5(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Q5(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Q5(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Q5(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Q5(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const qme=new Set([`standard`,`class`,`vendor`]),Jme=new Set([`device`,`interface`,`endpoint`,`other`]);function $5(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!qme.has(t))throw Error(`invalid --request-type: '${t}'`);if(!Jme.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Q5(e.get(`--request`)??`0`,`request`),value:Q5(e.get(`--value`)??`0`,`value`),index:Q5(e.get(`--index`)??`0`,`index`)}}function e7(e){let t=RG(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Yme(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function t7(e){return`0x${e.toString(16).padStart(4,`0`)}`}function n7(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${t7(e.vendorId)}:${t7(e.productId)}\t${t}${n}${r}`}function r7(e){return{stdout:e,stderr:``,exitCode:0}}function i7(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const Xme=`usb - access USB devices via WebUSB
4809
4810
 
4810
4811
  Usage: usb <subcommand> [options]
4811
4812
 
@@ -4834,9 +4835,9 @@ Options:
4834
4835
  -h, --help
4835
4836
 
4836
4837
  Transfers are capped at ${fW} bytes (4 MiB).
4837
- `;function a7(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return r7(t)}return r7(e.length?`${qme(e)}\n`:``)}async function Yme(e){let t=await e.list();return t.length===0?r7(`no granted USB devices
4838
+ `;function a7(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return r7(t)}return r7(e.length?`${Yme(e)}\n`:``)}async function Zme(e){let t=await e.list();return t.length===0?r7(`no granted USB devices
4838
4839
  `):r7(`${t.map(n7).join(`
4839
- `)}\n`)}async function Xme(e,t){let n=e.get(`--__resolved`);if(n)return r7(`${n7(await t.info(n))}\n`);let r=Wme(e),i=Qt();if(i){let e=await Vn(`usb-device`,r,i);if(e.handle)return r7(`${n7(await t.info(e.handle))}\n`);let n=e.info,a=sW();if(!a)return i7(`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?r7(`${n7(pW(dW().register(o),o))}\n`):i7(`request: granted device could not be re-acquired`)}return r7(`${n7(await t.request(r))}\n`)}async function Zme(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),r7(``)):i7(`${e}: handle required`)}async function Qme(e,t){let[,n,r]=e;return!n||r===void 0?i7(`select-config: handle and value required`):(await t.selectConfig(n,Q5(r,`configuration`)),r7(``))}async function $me(e,t,n){let[,r,i]=t;return!r||i===void 0?i7(`${e}: handle and interface required`):(await(e===`claim`?n.claim:n.release).call(n,r,Q5(i,`interface`)),r7(``))}async function ehe(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return i7(`control-in: handle and length required`);let o=Q5(a,`length`);return o>4194304?i7(`control-in length exceeds 4 MiB limit`):a7((await n.controlIn(i,$5(t),o)).bytes,r)}async function the(e,t,n,r){let i=e[1];if(!i)return i7(`control-out: handle required`);let a=e7(t);return a.length>4194304?i7(`control-out payload exceeds 4 MiB limit`):r7(`${(await r.controlOut(i,$5(n),a)).bytesWritten} bytes written\n`)}async function nhe(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return i7(`transfer-in: handle, endpoint and length required`);let s=Q5(o,`length`);return s>4194304?i7(`transfer-in length exceeds 4 MiB limit`):a7((await n.transferIn(i,Q5(a,`endpoint`),s)).bytes,r)}async function rhe(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return i7(`transfer-out: handle and endpoint required`);let o=e7(t);return o.length>4194304?i7(`transfer-out payload exceeds 4 MiB limit`):r7(`${(await r.transferOut(i,Q5(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function ihe(e,t,n){let{positionals:r,flags:i,bools:a}=Ume(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Yme(n);case`request`:return Xme(i,n);case`open`:case`close`:case`reset`:return Zme(o,r,n);case`select-config`:return Qme(r,n);case`claim`:case`release`:return $me(o,r,n);case`control-in`:return ehe(r,i,n,s);case`control-out`:return the(r,t,i,n);case`transfer-in`:return nhe(r,i,n,s);case`transfer-out`:return rhe(r,t,i,n);default:return i7(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function ahe(){return H(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return r7(Jme);let n=IW(a(),i());if(!n)return i7(`WebUSB is unavailable in this environment`);try{return await ihe(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?i7(`user cancelled or no device selected`):i7(t)}})}const o7=new Map;function s7(e){return o7.get(e)}function ohe(){return[...o7.values()]}function she(e){o7.set(e.name,e)}function che(e){o7.delete(e)}function c7(e){e.serve&&=(clearInterval(e.serve.timer),null)}function lhe(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 l7(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 u7(e){let t=e.emulator.screen_adapter?.get_text_screen?.();return t?t.map(e=>e.replace(/\s+$/u,``)).join(`
4840
+ `)}\n`)}async function Qme(e,t){let n=e.get(`--__resolved`);if(n)return r7(`${n7(await t.info(n))}\n`);let r=Kme(e),i=Qt();if(i){let e=await Vn(`usb-device`,r,i);if(e.handle)return r7(`${n7(await t.info(e.handle))}\n`);let n=e.info,a=sW();if(!a)return i7(`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?r7(`${n7(pW(dW().register(o),o))}\n`):i7(`request: granted device could not be re-acquired`)}return r7(`${n7(await t.request(r))}\n`)}async function $me(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),r7(``)):i7(`${e}: handle required`)}async function ehe(e,t){let[,n,r]=e;return!n||r===void 0?i7(`select-config: handle and value required`):(await t.selectConfig(n,Q5(r,`configuration`)),r7(``))}async function the(e,t,n){let[,r,i]=t;return!r||i===void 0?i7(`${e}: handle and interface required`):(await(e===`claim`?n.claim:n.release).call(n,r,Q5(i,`interface`)),r7(``))}async function nhe(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return i7(`control-in: handle and length required`);let o=Q5(a,`length`);return o>4194304?i7(`control-in length exceeds 4 MiB limit`):a7((await n.controlIn(i,$5(t),o)).bytes,r)}async function rhe(e,t,n,r){let i=e[1];if(!i)return i7(`control-out: handle required`);let a=e7(t);return a.length>4194304?i7(`control-out payload exceeds 4 MiB limit`):r7(`${(await r.controlOut(i,$5(n),a)).bytesWritten} bytes written\n`)}async function ihe(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return i7(`transfer-in: handle, endpoint and length required`);let s=Q5(o,`length`);return s>4194304?i7(`transfer-in length exceeds 4 MiB limit`):a7((await n.transferIn(i,Q5(a,`endpoint`),s)).bytes,r)}async function ahe(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return i7(`transfer-out: handle and endpoint required`);let o=e7(t);return o.length>4194304?i7(`transfer-out payload exceeds 4 MiB limit`):r7(`${(await r.transferOut(i,Q5(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function ohe(e,t,n){let{positionals:r,flags:i,bools:a}=Gme(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Zme(n);case`request`:return Qme(i,n);case`open`:case`close`:case`reset`:return $me(o,r,n);case`select-config`:return ehe(r,n);case`claim`:case`release`:return the(o,r,n);case`control-in`:return nhe(r,i,n,s);case`control-out`:return rhe(r,t,i,n);case`transfer-in`:return ihe(r,i,n,s);case`transfer-out`:return ahe(r,t,i,n);default:return i7(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function she(){return H(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return r7(Xme);let n=IW(a(),i());if(!n)return i7(`WebUSB is unavailable in this environment`);try{return await ohe(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?i7(`user cancelled or no device selected`):i7(t)}})}const o7=new Map;function s7(e){return o7.get(e)}function che(){return[...o7.values()]}function lhe(e){o7.set(e.name,e)}function uhe(e){o7.delete(e)}function c7(e){e.serve&&=(clearInterval(e.serve.timer),null)}function dhe(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 l7(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 u7(e){let t=e.emulator.screen_adapter?.get_text_screen?.();return t?t.map(e=>e.replace(/\s+$/u,``)).join(`
4840
4841
  `):null}const d7=`/workspace/.v86`,f7=`v86 - run an x86 virtual machine (v86 wasm engine)
4841
4842
 
4842
4843
  Requires: ${ya} v86@${t6}
@@ -4890,10 +4891,10 @@ Notes:
4890
4891
  mkdir -p ${d7}
4891
4892
  curl -o ${d7}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
4892
4893
  curl -o ${d7}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
4893
- or pass -bios / -vgabios with explicit VFS paths.`,m7={"-n":h7,"-name":h7,"--name":h7,"-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)=>g7(e,`cdrom`,t),"-hda":(e,t)=>g7(e,`hda`,t),"-fda":(e,t)=>g7(e,`fda`,t),"-kernel":(e,t)=>g7(e,`kernel`,t),"-initrd":(e,t)=>g7(e,`initrd`,t),"-append":(e,t)=>g7(e,`append`,t),"-bios":(e,t)=>g7(e,`bios`,t),"-vgabios":(e,t)=>g7(e,`vgabios`,t),"-state":(e,t)=>g7(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 h7(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function g7(e,t,n){return e[t]=n,null}const uhe=[...Object.keys(m7),`--fps`,`--tail`,`--send`,`--to`];function dhe(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(m7,r)?m7[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 _7={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]},v7={ctrl:[29],alt:[56],shift:[42]};function fhe(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 phe(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&&v7[i]){n.push(v7[i]);continue}let a=_7[i]??(i===`del`?_7.delete:void 0)??v7[i]??(i.length===1?fhe(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 y7(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 b7(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function x7(e=``){return{stdout:e,stderr:``,exitCode:0}}function S7(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 C7(e){return s7(e)||b7(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function w7(e){return`exitCode`in e}async function T7(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 E7(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return b7(`${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 mhe={a:801,c:306,d:531};function D7(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function hhe(e={}){return H(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return x7(f7);if(t[0]===`--version`)return ghe(n,e);let r=t[0];if(Vr(t.slice(1),{valueFlags:uhe}))return x7(Xr(`v86`,r,f7,{prefix:`v86`}));let i=qr(t.slice(1));try{switch(r){case`start`:return await xhe(i,n,e);case`ls`:return She();case`type`:return Che(i);case`key`:return whe(i);case`mouse`:return Ehe(i);case`screenshot`:return await Dhe(i,n);case`text`:return Ohe(i);case`serve`:return await Ahe(i,n);case`serial`:return jhe(i);case`state`:return await Mhe(i,n);case`stop`:return await Nhe(i,e);default:return b7(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return b7(e instanceof Error?e.message:String(e))}})}async function ghe(e,t){if(t.loadEngine)return x7(`v86 ${(await t.loadEngine(y7(e))).version} (qemu-flavored CLI)\n`);let n=await i6(y7(e));return n?x7(`v86 ${n.version} (qemu-flavored CLI)\n`):b7(n6)}async function _he(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await E7(t,e.bios??`${d7}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:b7(p7.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await E7(t,e.vgabios??`${d7}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:b7(p7.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function vhe(e,t,n){let r=await _he(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 E7(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=mhe[e.boot]),e.state){let r=await E7(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 O7=6e4;function yhe(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${O7/1e3}s`)),O7);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function bhe(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return b7(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??p();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 xhe(e,t,n){let r=dhe(e);if(!r.ok)return b7(r.error);let i=r.parsed;if(s7(i.name))return b7(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=y7(t),o=n.loadEngine?await n.loadEngine(a):await kse({ipk:a}),s={wasm_fn:jse(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await vhe(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??D7();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`,()=>{k7(u,d)})}she(u);try{if(await yhe(l),i.netRelay===`fetch`){let e=bhe(l,n);if(e)return await k7(u,d),e}lhe(u),await l.run()}catch(e){return await k7(u,d),b7(`boot failed: ${e instanceof Error?e.message:String(e)}`)}let f=u.pid===null?``:` (pid ${u.pid})`;return x7(`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 k7(e,t){c7(e),che(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 She(){let e=ohe();if(e.length===0)return x7(`no VMs running
4894
+ or pass -bios / -vgabios with explicit VFS paths.`,m7={"-n":h7,"-name":h7,"--name":h7,"-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)=>g7(e,`cdrom`,t),"-hda":(e,t)=>g7(e,`hda`,t),"-fda":(e,t)=>g7(e,`fda`,t),"-kernel":(e,t)=>g7(e,`kernel`,t),"-initrd":(e,t)=>g7(e,`initrd`,t),"-append":(e,t)=>g7(e,`append`,t),"-bios":(e,t)=>g7(e,`bios`,t),"-vgabios":(e,t)=>g7(e,`vgabios`,t),"-state":(e,t)=>g7(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 h7(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function g7(e,t,n){return e[t]=n,null}const fhe=[...Object.keys(m7),`--fps`,`--tail`,`--send`,`--to`];function phe(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(m7,r)?m7[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 _7={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]},v7={ctrl:[29],alt:[56],shift:[42]};function mhe(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 hhe(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&&v7[i]){n.push(v7[i]);continue}let a=_7[i]??(i===`del`?_7.delete:void 0)??v7[i]??(i.length===1?mhe(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 y7(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 b7(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function x7(e=``){return{stdout:e,stderr:``,exitCode:0}}function S7(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 C7(e){return s7(e)||b7(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function w7(e){return`exitCode`in e}async function T7(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 E7(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return b7(`${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 ghe={a:801,c:306,d:531};function D7(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function _he(e={}){return H(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return x7(f7);if(t[0]===`--version`)return vhe(n,e);let r=t[0];if(Vr(t.slice(1),{valueFlags:fhe}))return x7(Xr(`v86`,r,f7,{prefix:`v86`}));let i=qr(t.slice(1));try{switch(r){case`start`:return await Che(i,n,e);case`ls`:return whe();case`type`:return The(i);case`key`:return Ehe(i);case`mouse`:return Ohe(i);case`screenshot`:return await khe(i,n);case`text`:return Ahe(i);case`serve`:return await Mhe(i,n);case`serial`:return Nhe(i);case`state`:return await Phe(i,n);case`stop`:return await Fhe(i,e);default:return b7(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return b7(e instanceof Error?e.message:String(e))}})}async function vhe(e,t){if(t.loadEngine)return x7(`v86 ${(await t.loadEngine(y7(e))).version} (qemu-flavored CLI)\n`);let n=await i6(y7(e));return n?x7(`v86 ${n.version} (qemu-flavored CLI)\n`):b7(n6)}async function yhe(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await E7(t,e.bios??`${d7}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:b7(p7.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await E7(t,e.vgabios??`${d7}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:b7(p7.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function bhe(e,t,n){let r=await yhe(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 E7(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=ghe[e.boot]),e.state){let r=await E7(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 O7=6e4;function xhe(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${O7/1e3}s`)),O7);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function She(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return b7(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??p();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 Che(e,t,n){let r=phe(e);if(!r.ok)return b7(r.error);let i=r.parsed;if(s7(i.name))return b7(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=y7(t),o=n.loadEngine?await n.loadEngine(a):await jse({ipk:a}),s={wasm_fn:Nse(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await bhe(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??D7();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`,()=>{k7(u,d)})}lhe(u);try{if(await xhe(l),i.netRelay===`fetch`){let e=She(l,n);if(e)return await k7(u,d),e}dhe(u),await l.run()}catch(e){return await k7(u,d),b7(`boot failed: ${e instanceof Error?e.message:String(e)}`)}let f=u.pid===null?``:` (pid ${u.pid})`;return x7(`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 k7(e,t){c7(e),uhe(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 whe(){let e=che();if(e.length===0)return x7(`no VMs running
4894
4895
  `);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 x7(`${t.join(`
4895
- `)}\n`)}function Che(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;if(n.length===0)return b7(`type: no text supplied`);let i=n.join(` `).replace(/\\n/gu,`
4896
- `).replace(/\\t/gu,` `);return r.emulator.keyboard_send_text(i),x7()}function whe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;if(n.length===0)return b7(`key: no chord supplied`);let i=[];for(let e of n){let t=phe(e);if(!t)return b7(`key: unknown chord '${e}'`);i.push(t)}for(let e of i)r.emulator.keyboard_send_scancodes(e);return x7()}const The=[`left`,`middle`,`right`];function A7(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 Ehe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(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 b7(`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]),x7()}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)?b7(`mouse: move requires <dx> <dy>`):(r.emulator.bus.send(`mouse-delta`,[e,-t]),x7())}if(a===`click`){let e=n[1]??`left`;return The.includes(e)?(A7(r,e),n.includes(`--double`)&&A7(r,e),x7()):b7(`mouse: unknown button '${n[1]}'`)}return b7(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Dhe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let a=l7(i);if(!a)return b7(`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 T7(a);return await t.fs.writeFile(o,s),x7(`${o} (${a.width}x${a.height})\n`)}function Ohe(e){let{name:t}=S7(e),n=C7(t);if(w7(n))return n;let r=u7(n);return r===null?b7(n.screen.mode===`graphical`?`'${t}' is in graphical mode — use \`v86 screenshot -n ${t}\``:`text screen unavailable for '${t}'`):x7(`${r}\n`)}function khe(e,t){return`<!DOCTYPE html>
4896
+ `)}\n`)}function The(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;if(n.length===0)return b7(`type: no text supplied`);let i=n.join(` `).replace(/\\n/gu,`
4897
+ `).replace(/\\t/gu,` `);return r.emulator.keyboard_send_text(i),x7()}function Ehe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;if(n.length===0)return b7(`key: no chord supplied`);let i=[];for(let e of n){let t=hhe(e);if(!t)return b7(`key: unknown chord '${e}'`);i.push(t)}for(let e of i)r.emulator.keyboard_send_scancodes(e);return x7()}const Dhe=[`left`,`middle`,`right`];function A7(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 Ohe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(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 b7(`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]),x7()}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)?b7(`mouse: move requires <dx> <dy>`):(r.emulator.bus.send(`mouse-delta`,[e,-t]),x7())}if(a===`click`){let e=n[1]??`left`;return Dhe.includes(e)?(A7(r,e),n.includes(`--double`)&&A7(r,e),x7()):b7(`mouse: unknown button '${n[1]}'`)}return b7(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function khe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let a=l7(i);if(!a)return b7(`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 T7(a);return await t.fs.writeFile(o,s),x7(`${o} (${a.width}x${a.height})\n`)}function Ahe(e){let{name:t}=S7(e),n=C7(t);if(w7(n))return n;let r=u7(n);return r===null?b7(n.screen.mode===`graphical`?`'${t}' is in graphical mode — use \`v86 screenshot -n ${t}\``:`text screen unavailable for '${t}'`):x7(`${r}\n`)}function jhe(e,t){return`<!DOCTYPE html>
4897
4898
  <html lang="en"><head><meta charset="utf-8"><title>v86 — ${e}</title><style>
4898
4899
  html,body{margin:0;height:100%;background:#111;color:#ddd;font-family:monospace}
4899
4900
  body{display:flex;align-items:center;justify-content:center}
@@ -4925,10 +4926,10 @@ async function tick() {
4925
4926
  }
4926
4927
  tick();
4927
4928
  <\/script></body></html>
4928
- `}async function j7(e,t,n,r){let i=`text`,a=e.screen.mode===`graphical`?l7(e):null;if(a)await t.fs.writeFile(`${n}/frame.png`,await T7(a)),i=`graphical`;else{let r=u7(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 Ahe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;if(r.includes(`--stop`)){if(!i.serve)return b7(`serve: no screen serve running for '${n}'`);let e=i.serve.dir;return c7(i),x7(`screen serve for '${n}' stopped (${e} left in place)\n`)}if(i.serve)return b7(`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 b7(`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`,khe(n,a));let c=0,l=!1,u=setInterval(()=>{l||(l=!0,j7(i,t,s,c++).catch(()=>{}).finally(()=>{l=!1}))},Math.round(1e3/a));return i.serve={dir:s,fps:a,timer:u},await j7(i,t,s,c++).catch(()=>{}),x7(`serving '${n}' screen at ${s} (${a} fps).\nMint an iframe-able URL with: serve ${s}\nStop with: v86 serve -n ${n} --stop\n`)}function jhe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
4929
+ `}async function j7(e,t,n,r){let i=`text`,a=e.screen.mode===`graphical`?l7(e):null;if(a)await t.fs.writeFile(`${n}/frame.png`,await T7(a)),i=`graphical`;else{let r=u7(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 Mhe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;if(r.includes(`--stop`)){if(!i.serve)return b7(`serve: no screen serve running for '${n}'`);let e=i.serve.dir;return c7(i),x7(`screen serve for '${n}' stopped (${e} left in place)\n`)}if(i.serve)return b7(`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 b7(`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`,jhe(n,a));let c=0,l=!1,u=setInterval(()=>{l||(l=!0,j7(i,t,s,c++).catch(()=>{}).finally(()=>{l=!1}))},Math.round(1e3/a));return i.serve={dir:s,fps:a,timer:u},await j7(i,t,s,c++).catch(()=>{}),x7(`serving '${n}' screen at ${s} (${a} fps).\nMint an iframe-able URL with: serve ${s}\nStop with: v86 serve -n ${n} --stop\n`)}function Nhe(e){let{name:t,rest:n}=S7(e),r=C7(t);if(w7(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
4929
4930
  `);return e?(r.emulator.serial0_send(e),x7()):b7(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return x7(`${r.serial.buffer.split(`
4930
4931
  `).slice(-Math.max(1,e)).join(`
4931
- `)}\n`)}return x7(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function Mhe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return b7(`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)),x7(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return b7(`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),x7()}async function Nhe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let a=t.processManager??D7();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),x7(`VM '${n}' killed\n`)):(await k7(i,a),x7(`VM '${n}' stopped\n`))}const M7=[`--name`,`--filter`,`--scoop`],Phe={state:`inactive`,session:null};function N7(){return{stdout:`usage: webhook <command> [options]
4932
+ `)}\n`)}return x7(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function Phe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return b7(`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)),x7(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return b7(`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),x7()}async function Fhe(e,t){let{name:n,rest:r}=S7(e),i=C7(n);if(w7(i))return i;let a=t.processManager??D7();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),x7(`VM '${n}' killed\n`)):(await k7(i,a),x7(`VM '${n}' stopped\n`))}const M7=[`--name`,`--filter`,`--scoop`],Ihe={state:`inactive`,session:null};function N7(){return{stdout:`usage: webhook <command> [options]
4932
4933
 
4933
4934
  Commands:
4934
4935
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -4946,16 +4947,16 @@ Examples:
4946
4947
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
4947
4948
  webhook list
4948
4949
  webhook delete abc123
4949
- `,stderr:``,exitCode:0}}function P7(e){return e().session?.webhookUrl??null}function F7(e,t,n){return t?Qn(t,e):n()?er(self.location.href,e):`(URL unavailable — connect a leader tray)`}function I7(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Fhe(e,t,n){let r=V(e.slice(1),{value:M7});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=wZ(r.values.get(`--scoop`),n);if(!o)return{stdout:``,stderr:`webhook create: --scoop is required (name a scoop or a cone; an extra cone's shell supplies its own)
4950
+ `,stderr:``,exitCode:0}}function P7(e){return e().session?.webhookUrl??null}function F7(e,t,n){return t?Qn(t,e):n()?er(self.location.href,e):`(URL unavailable — connect a leader tray)`}function I7(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Lhe(e,t,n){let r=V(e.slice(1),{value:M7});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=wZ(r.values.get(`--scoop`),n);if(!o)return{stdout:``,stderr:`webhook create: --scoop is required (name a scoop or a cone; an extra cone's shell supplies its own)
4950
4951
  `,exitCode:1};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
4951
- `,exitCode:1};let s=Rhe(t);if(s)return s;let c=await OZ();if(!c)return I7(`create`);let l=await c.createWebhook(i,o,a),u=zhe(l.id,t),d=`Created webhook "${l.name}"\nID: ${l.id}\nURL: ${u}\n`;return l.scoop&&(d+=`Scoop: ${l.scoop}\n`),l.filter&&(d+=`Filter: ${l.filter}\n`),{stdout:d,stderr:``,exitCode:0}}async function Ihe(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 OZ();if(!r)return I7(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
4952
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Bhe(t);return{stdout:Vhe(i.map(e=>({id:e.id,name:e.name,url:F7(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Lhe(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
4953
- `,exitCode:1};let r=await OZ();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}:I7(`delete`)}function Rhe(e){if(e.hasLocalNodeServer())return null;if(!P7(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}")`)+`
4954
- `,exitCode:1}}return null}function zhe(e,t){try{return F7(e,P7(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Bhe(e){try{return{trayUrlBase:P7(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Vhe(e,t,n,r){let i=`Active webhooks:
4952
+ `,exitCode:1};let s=Bhe(t);if(s)return s;let c=await OZ();if(!c)return I7(`create`);let l=await c.createWebhook(i,o,a),u=Vhe(l.id,t),d=`Created webhook "${l.name}"\nID: ${l.id}\nURL: ${u}\n`;return l.scoop&&(d+=`Scoop: ${l.scoop}\n`),l.filter&&(d+=`Filter: ${l.filter}\n`),{stdout:d,stderr:``,exitCode:0}}async function Rhe(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 OZ();if(!r)return I7(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
4953
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Hhe(t);return{stdout:Uhe(i.map(e=>({id:e.id,name:e.name,url:F7(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function zhe(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
4954
+ `,exitCode:1};let r=await OZ();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}:I7(`delete`)}function Bhe(e){if(e.hasLocalNodeServer())return null;if(!P7(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}")`)+`
4955
+ `,exitCode:1}}return null}function Vhe(e,t){try{return F7(e,P7(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Hhe(e){try{return{trayUrlBase:P7(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Uhe(e,t,n,r){let i=`Active webhooks:
4955
4956
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
4956
4957
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
4957
4958
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
4958
- `),i}function Hhe(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>Phe)};return H(`webhook`,async(e,n)=>{if(e.length===0)return N7();let r=e[0];if(Vr(e,{valueFlags:r===`create`?M7:void 0}))return N7();try{switch(r){case`create`:return await Fhe(e,t,n.env);case`list`:return await Ihe(e,t);case`delete`:return await Lhe(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 Uhe(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
4959
+ `),i}function Whe(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>Ihe)};return H(`webhook`,async(e,n)=>{if(e.length===0)return N7();let r=e[0];if(Vr(e,{valueFlags:r===`create`?M7:void 0}))return N7();try{switch(r){case`create`:return await Lhe(e,t,n.env);case`list`:return await Rhe(e,t);case`delete`:return await zhe(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 Ghe(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
4959
4960
 
4960
4961
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
4961
4962
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -4997,19 +4998,19 @@ EXAMPLES:
4997
4998
  echo 'Page.navigate {"url":"https://example.com"}' \\
4998
4999
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
4999
5000
  ws://127.0.0.1:9222/devtools/page/<id>
5000
- `,stderr:``,exitCode:0}}const L7=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 Whe(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(L7.has(i)||L7.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
5001
+ `,stderr:``,exitCode:0}}const L7=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 Khe(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(L7.has(i)||L7.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
5001
5002
  `,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
5002
5003
  `,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
5003
5004
  `,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)
5004
- `),t}function Ghe(e,t){if(!e)return[];let n=t?`\0`:`
5005
- `,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 R7(e){let t=``;for(let n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return btoa(t)}function qhe(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return R7(e)}}async function Jhe(e,t,n={}){let r=Whe(e);if(r.showHelp)return Uhe();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)
5005
+ `),t}function qhe(e,t){if(!e)return[];let n=t?`\0`:`
5006
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Jhe(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 R7(e){let t=``;for(let n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return btoa(t)}function Yhe(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return R7(e)}}async function Xhe(e,t,n={}){let r=Khe(e);if(r.showHelp)return Ghe();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)
5006
5007
  `,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
5007
5008
  `,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`:`
5008
- `,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?R7(t):qhe(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(`
5009
+ `,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?R7(t):Yhe(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(`
5009
5010
  `)+`
5010
- `,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=Ghe(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(`
5011
+ `,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=qhe(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=Jhe(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(`
5011
5012
  `)+`
5012
- `:``,exitCode:E}}function Yhe(){return H(`websocat`,async(e,t)=>Jhe(e,{stdin:LG(t.stdin)}))}function Xhe(){return H(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}async function Zhe(e,t){let n=t===void 0?void 0:Wi(t);return e.scriptCatalog?e.scriptCatalog.getJshCommands(n):e.fs?Ji(e.fs,n):new Map}async function Qhe(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Gi(e.fs):new Map}function $he(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 ege(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(Vr(e))return{stdout:`which - locate a command
5013
+ `:``,exitCode:E}}function Zhe(){return H(`websocat`,async(e,t)=>Xhe(e,{stdin:LG(t.stdin)}))}function Qhe(){return H(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}async function $he(e,t){let n=t===void 0?void 0:Wi(t);return e.scriptCatalog?e.scriptCatalog.getJshCommands(n):e.fs?Ji(e.fs,n):new Map}async function ege(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Gi(e.fs):new Map}function z7(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 tge(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(Vr(e))return{stdout:`which - locate a command
5013
5014
 
5014
5015
  Usage: which <command> [command...]
5015
5016
 
@@ -5019,9 +5020,9 @@ Prints the path of the given command(s).
5019
5020
 
5020
5021
  Exit code 0 if all commands found, 1 if any not found.
5021
5022
  `,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
5022
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await Zhe(t,n.env.get(`PATH`)),s=await Qhe(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=$he(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(`
5023
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await $he(t,n.env.get(`PATH`)),s=await ege(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=z7(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(`
5023
5024
  `)+`
5024
- `:``,stderr:``,exitCode:+!d}})}const z7=`__slicc_workflows`,tge=String.raw`
5025
+ `:``,stderr:``,exitCode:+!d}})}const B7=`__slicc_workflows`,nge=String.raw`
5025
5026
  class WorkflowError extends Error {}
5026
5027
  class WorkflowDeterminismError extends WorkflowError {}
5027
5028
  class WorkflowAgentCapError extends WorkflowError {}
@@ -5134,11 +5135,11 @@ function log(message) {
5134
5135
  }
5135
5136
  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()); } };
5136
5137
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
5137
- `;function B7(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function V7(e){let t=ige(e);return t===null?{name:null,description:null}:{name:U7(t,`name`),description:U7(t,`description`)}}function nge(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function rge(e){return`const __emit = console.log.bind(console);
5138
+ `;function V7(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function rge(e){let t=oge(e);return t===null?{name:null,description:null}:{name:U7(t,`name`),description:U7(t,`description`)}}function ige(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function age(e){return`const __emit = console.log.bind(console);
5138
5139
  const __stringify = JSON.stringify.bind(JSON);
5139
- const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${nge(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function H7(e,t){let n=e.split(`
5140
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${ige(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function H7(e,t){let n=e.split(`
5140
5141
  `);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(`
5141
- `).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 ige(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 U7(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const W7=r(`workflow-command`),age=new Set([`list`,`status`,`stop`,`save`]);function G7(){return globalThis[z7]}function oge(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function sge(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 cge(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=oge(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=sge(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 lge(e={}){return H(`workflow`,async(t,n)=>{if(age.has(t[0])&&Vr(t.slice(1)))return{stdout:`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
5142
+ `).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 oge(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 U7(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const W7=r(`workflow-command`),sge=new Set([`list`,`status`,`stop`,`save`]);function G7(){return globalThis[B7]}function cge(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function lge(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 uge(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=cge(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=lge(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 dge(e={}){return H(`workflow`,async(t,n)=>{if(sge.has(t[0])&&Vr(t.slice(1)))return{stdout:`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
5142
5143
  workflow run --script '<inline js>' [...]
5143
5144
  workflow list
5144
5145
  workflow status <runId>
@@ -5146,7 +5147,7 @@ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (asyn
5146
5147
  workflow save <runId> <name> [--force]
5147
5148
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
5148
5149
  pass --wait to block and print the full result.
5149
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return mge(t,n);if(t[0]===`save`)return pge(t,n,e);let r=cge(t);if(r.help)return{stdout:`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
5150
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return gge(t,n);if(t[0]===`save`)return hge(t,n,e);let r=uge(t);if(r.help)return{stdout:`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
5150
5151
  workflow run --script '<inline js>' [...]
5151
5152
  workflow list
5152
5153
  workflow status <runId>
@@ -5155,26 +5156,26 @@ pass --wait to block and print the full result.
5155
5156
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
5156
5157
  pass --wait to block and print the full result.
5157
5158
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
5158
- `,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=V7(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
5159
- `,exitCode:1};let s=B7().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=B7(),u=rge({prelude:tge,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?uge(u,a,l,o,n):dge({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function uge(e,t,n,r,i){let a;try{a=await JG(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return W7.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return hge(r,a,n)}async function dge(e){let t=G7();if(!t)return{stdout:``,stderr:`workflow: run manager not available
5160
- `,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 fge=/^[a-z0-9][a-z0-9-]*$/,K7=`/workspace/.workflows`;async function pge(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]
5161
- `,exitCode:1};if(!fge.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=G7()?.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=`${K7}/${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(K7,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){W7.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 mge(e,t){let n=G7();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
5159
+ `,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=rge(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
5160
+ `,exitCode:1};let s=V7().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=V7(),u=age({prelude:nge,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?fge(u,a,l,o,n):pge({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function fge(e,t,n,r,i){let a;try{a=await JG(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return W7.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return _ge(r,a,n)}async function pge(e){let t=G7();if(!t)return{stdout:``,stderr:`workflow: run manager not available
5161
+ `,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 mge=/^[a-z0-9][a-z0-9-]*$/,K7=`/workspace/.workflows`;async function hge(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]
5162
+ `,exitCode:1};if(!mge.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=G7()?.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=`${K7}/${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(K7,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){W7.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 gge(e,t){let n=G7();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
5162
5163
  `,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(`
5163
5164
  `):`(no runs)`)+`
5164
5165
  `,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(`
5165
5166
  `)+`
5166
- `,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 hge(e,t,n){let{result:r,log:i,hadResult:a}=H7(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?gge(i)+`
5167
+ `,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 _ge(e,t,n){let{result:r,log:i,hadResult:a}=H7(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?vge(i)+`
5167
5168
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
5168
5169
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
5169
- `,stderr:t.stderr,exitCode:0}}function gge(e){return e.split(`
5170
+ `,stderr:t.stderr,exitCode:0}}function vge(e){return e.split(`
5170
5171
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
5171
- `)}function q7(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function _ge(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 J7(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function Y7(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function vge(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function yge(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?J7(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(`
5172
+ `)}function q7(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function yge(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 J7(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function Y7(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function bge(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function xge(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?J7(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(`
5172
5173
  `)+`
5173
- `:``}function bge(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+=J7(e[i+r],n);r+=a+`
5174
- `}return r}function xge(e,t,n,r){let i=Array.from(e,e=>`0x${J7(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
5174
+ `:``}function Sge(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+=J7(e[i+r],n);r+=a+`
5175
+ `}return r}function Cge(e,t,n,r){let i=Array.from(e,e=>`0x${J7(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
5175
5176
  `);return r===null?i.length?o+`
5176
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function Sge(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 Cge(e){let t=[],n=0;for(let r of e.split(`
5177
- `)){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 wge={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},Tge=[{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 Ege(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=wge[r];if(i){t[i]=!0;continue}let a=Tge.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=_ge(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 Oge(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=RG(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function kge(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?bge(t,a,e.upper):e.include?xge(t,a,e.upper,i?null:vge(r??``)):yge(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function Age(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 jge(){return H(`xxd`,async(e,t)=>{if(Dge(e))return{stdout:`usage: xxd [options] [infile [outfile]]
5177
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function wge(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 Tge(e){let t=[],n=0;for(let r of e.split(`
5178
+ `)){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 Ege={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},Dge=[{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 Oge(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=Ege[r];if(i){t[i]=!0;continue}let a=Dge.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=yge(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 kge(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function Age(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=RG(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function jge(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?Sge(t,a,e.upper):e.include?Cge(t,a,e.upper,i?null:bge(r??``)):xge(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 Nge(){return H(`xxd`,async(e,t)=>{if(kge(e))return{stdout:`usage: xxd [options] [infile [outfile]]
5178
5179
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
5179
5180
  -g bytes number of octets per group (default 2; 0 disables grouping)
5180
5181
  -l len stop after len octets
@@ -5184,31 +5185,31 @@ pass --wait to block and print the full result.
5184
5185
  -i output in C include style
5185
5186
  -r reverse: convert a hex dump back to binary (-r -p for plain)
5186
5187
  -h show this help
5187
- `,stderr:``,exitCode:0};let n;try{n=Ege(e)}catch(e){return q7(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await Oge(t,r,a)}catch{return q7(`${r}: No such file or directory`)}if(n.revert){let e=Y7(o),r=n.plain?Sge(e):Cge(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:Y7(r),stderr:``,exitCode:0}}let{data:s,base:c}=Age(n,o),l=kge(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 X7(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=la(t,o),s=n?`${n}/${o}`:o;a+=await X7(e,i,s,r)}return a}function Mge(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
5188
- `,stderr:``,exitCode:0}}function Nge(){return H(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Mge();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
5188
+ `,stderr:``,exitCode:0};let n;try{n=Oge(e)}catch(e){return q7(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await Age(t,r,a)}catch{return q7(`${r}: No such file or directory`)}if(n.revert){let e=Y7(o),r=n.plain?wge(e):Tge(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:Y7(r),stderr:``,exitCode:0}}let{data:s,base:c}=Mge(n,o),l=jge(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 X7(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=la(t,o),s=n?`${n}/${o}`:o;a+=await X7(e,i,s,r)}return a}function Pge(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
5189
+ `,stderr:``,exitCode:0}}function Fge(){return H(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Pge();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
5189
5190
  `,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(/^\.\//,``))||ua(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await X7(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
5190
- `,exitCode:1};let c=di(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function Pge(e={}){let t=[woe({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),QY(),mpe(),Ife(e.browserAPI,e.fs),gue(e.browserAPI),zZ(e.browserAPI),Koe(e),Nge(),kme(),Rpe(),vpe(),Tpe(),Spe(),wX(),jge(),y5(`sqlite3`),y5(`sqllite`),Ype(),ume(),B$(),LY(),_le({buildProcessConfig:e.buildProcessConfig}),I8(`python3`,{buildProcessConfig:e.buildProcessConfig}),I8(`python`,{buildProcessConfig:e.buildProcessConfig}),...e.fs&&e.fetch?[e6(`ipk`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),e6(`npm`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),e6(`i`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),x6(`ipx`,{fs:e.fs,fetch:e.fetch}),x6(`npx`,{fs:e.fs,fetch:e.fetch}),CQ(`di`,{fs:e.fs,fetch:e.fetch}),CQ(`uv`,{fs:e.fs,fetch:e.fetch}),Vme({fs:e.fs,fetch:e.fetch})]:[],...e.fetch?[koe({fetch:e.fetch})]:[],O0(),Hhe(e.webhook),Yhe(),RZ(),gce({fs:e.fs,scriptCatalog:e.scriptCatalog}),jue({fs:e.fs,fetch:e.fetch}),Fae(),npe(),x8(`pdftk`),x8(`pdf`),C8(`pdftoppm`),C8(`pdftocairo`),CZ(`convert`),CZ(`magick`),ege({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),dme(),wme(),Tme(),pce(),d$(),Ile(),Ole(),uce(),ffe({setEnv:e.setEnv}),Cde({fs:e.fs}),Bde(),xX(),SX(),CX(`xclip`),CX(`xsel`),Fde(),d2(),hJ(),gJ(),fle(e.fs),Kr(),xle(),FJ({getParentJid:e.getParentJid}),y$(),Gue({processManager:e.processManager}),Wse({processManager:e.processManager}),Wce(),cce(),ahe(),Goe(),S1(),hhe({processManager:e.processManager}),N1(),mX({registry:e.cherryRuntimeRegistry}),KZ(),$Z({fs:e.fs}),eQ({fs:e.fs}),gpe(e.sudoCommand),lge({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Xhe(),Bfe()];return e.fs&&(kue(),t.push(...Ni.map(t=>xoe(t,e.browserAPI,e.fs)))),t}const Fge=Reflect.get(Ur,`DefenseInDepthBox`);var Ige=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=Fge?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let t=Ut(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=Ut(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=Ut(e);if(typeof t==`string`){let e=At(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=Ut(e);try{if((await this.vfs.stat(n)).type===`directory`)throw new Un(`EISDIR`,`is a directory`,n)}catch(e){if(e instanceof Un&&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 Un&&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=Ut(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=Ut(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)};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)}})}async lstat(e){return this.trusted(async()=>{let t=Ut(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)};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)}})}async mkdir(e,t){return this.trusted(async()=>{await this.vfs.mkdir(Ut(e),t)})}async readdir(e){return this.trusted(async()=>{let t=Ut(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=Ut(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(Ut(e),t)})}async cp(e,t,n){return this.trusted(async()=>{let r=Ut(e),i=Ut(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Un(`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=Wt(e,r.name),i=Wt(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(Ut(e),Ut(t))})}resolvePath(e,t){return t.startsWith(`/`)?Ut(t):Ut(Wt(e,t))}getAllPaths(){return[]}async chmod(e,t){}async symlink(e,t){return this.trusted(async()=>{await this.vfs.symlink(e,Ut(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(Ut(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(Ut(e)))}async utimes(e,t,n){}invalidatePaths(e){let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function Z7(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?Z7(e.getUnderlyingFS?.()):null}async function Lge(){await c(`github`)?.getValidAccessToken?.()}const Rge=r(`almost-bash-shell`),Q7=`__SLICC_RUN_PID`,$7=`__SLICC_OUTPUT_TEE__`;function e9(e){let t=e?.get(Q7);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function zge(e){if(!(Q7 in e)&&!($7 in e))return{...e};let{[Q7]:t,[$7]:n,...r}=e;return r}var t9=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(e9(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:iM,PATH:Ki,USER:`user`,SHELL:`/bin/bash`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return Pge({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 Ige(t.fs),this.progress=new eK({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new rM({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:Lge}),this.mountCommands=new ew({fs:t.fs,isScoop:t.isScoop});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=Z7(i)??Z7(a);this.scriptCatalog=t.scriptCatalog??new Yi({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=p({progress:aK(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),yq(t.fs),cJ(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Jr(),...Hr()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Gr({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:EK(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1})}),this.allowedCommands!==null){let e=this.bash;for(let t of Hr())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 m=u.map(e=>e.name),h=f??[...Jr(),...Hr()];this.builtinCommandNames=new Set([...h,...m]),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 qG(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 Wi(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 aM(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=oM(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){Rge.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`;gi(a),await this.waitForInitialJshSync(t);let o={env:{...this.lastEnv,...n===void 0?{}:{[Q7]:String(n)},...i===void 0?{}:{[$7]: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=zge(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`?AK(t,this.progress):MK(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($7);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=xK(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new CK(t,this.progress,SK(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 PK(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=Qr(e);if(!n)return;let r=`${$r}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Un&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
5191
- `)?`${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 JG(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(e9(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=qi(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?$G(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 JG(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 Bge(e,t,n,r){return e?{...n,...r?{SLICC_LICK_TARGET:r}:{}}:{...n,HOME:`/scoops/${t}/home`,USER:t,PATH:[`/usr/bin`,`/scoops/${t}/workspace/skills`,`/scoops/${t}/workspace/bin`,...Ui].join(`:`)}}function Vge(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function Hge({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 Uge=r(`scoop-context`);async function Wge(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 DS(r,ln);let s=i??r,c=await XC(),l=Hge({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),u=l?mee(r,{broker:l.broker,getPolicy:l.getPolicy,defaultDisposition:l.defaultDisposition,...l.onGrant?{onGrant:l.onGrant}:{}}):r,d=Bge(n.policy.filesystem.kind===`full-workspace`,t.folder,c,e.lickTarget),f=new t9({fs:u,cwd:a,env:Object.keys(d).length>0?d:void 0,browserAPI:o,webhook:{hasLocalNodeServer:pt,getLeaderStatus:Zn},jshDiscoveryFs:i?s:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:l?.shellConfig,scrubProgressLabel:_t(),processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid});return Uge.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:f,gatedFs:u,skills:await CS(s,ln)}}const n9=51200;function r9(e){if(e.length===0)return[];let t=e.split(`
5191
+ `,exitCode:1};let c=di(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function Ige(e={}){let t=[Eoe({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),QY(),gpe(),Rfe(e.browserAPI,e.fs),vue(e.browserAPI),zZ(e.browserAPI),Joe(e),Fge(),jme(),Bpe(),bpe(),Dpe(),wpe(),wX(),Nge(),y5(`sqlite3`),y5(`sqllite`),Zpe(),fme(),B$(),LY(),yle({buildProcessConfig:e.buildProcessConfig}),I8(`python3`,{buildProcessConfig:e.buildProcessConfig}),I8(`python`,{buildProcessConfig:e.buildProcessConfig}),...e.fs&&e.fetch?[e6(`ipk`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),e6(`npm`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),e6(`i`,{fs:e.fs,fetch:e.fetch,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands}),x6(`ipx`,{fs:e.fs,fetch:e.fetch}),x6(`npx`,{fs:e.fs,fetch:e.fetch}),CQ(`di`,{fs:e.fs,fetch:e.fetch}),CQ(`uv`,{fs:e.fs,fetch:e.fetch}),Ume({fs:e.fs,fetch:e.fetch})]:[],...e.fetch?[joe({fetch:e.fetch})]:[],O0(),Whe(e.webhook),Zhe(),RZ(),vce({fs:e.fs,scriptCatalog:e.scriptCatalog}),Nue({fs:e.fs,fetch:e.fetch}),Fae(),ipe(),x8(`pdftk`),x8(`pdf`),C8(`pdftoppm`),C8(`pdftocairo`),CZ(`convert`),CZ(`magick`),tge({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),pme(),Eme(),Dme(),hce(),d$(),Rle(),Ale(),fce(),mfe({setEnv:e.setEnv}),Tde({fs:e.fs}),Hde(),xX(),SX(),CX(`xclip`),CX(`xsel`),Lde(),d2(),hJ(),gJ(),mle(e.fs),Kr(),Cle(),FJ({getParentJid:e.getParentJid}),y$(),que({processManager:e.processManager}),Kse({processManager:e.processManager}),Kce(),uce(),she(),qoe(),S1(),_he({processManager:e.processManager}),N1(),mX({registry:e.cherryRuntimeRegistry}),KZ(),$Z({fs:e.fs}),eQ({fs:e.fs}),vpe(e.sudoCommand),dge({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Qhe(),Hfe()];return e.fs&&(jue(),t.push(...Ni.map(t=>Coe(t,e.browserAPI,e.fs)))),t}const Lge=Reflect.get(Ur,`DefenseInDepthBox`);var Rge=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=Lge?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let t=Ut(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=Ut(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=Ut(e);if(typeof t==`string`){let e=At(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=Ut(e);try{if((await this.vfs.stat(n)).type===`directory`)throw new Un(`EISDIR`,`is a directory`,n)}catch(e){if(e instanceof Un&&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 Un&&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=Ut(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=Ut(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)};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)}})}async lstat(e){return this.trusted(async()=>{let t=Ut(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)};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)}})}async mkdir(e,t){return this.trusted(async()=>{await this.vfs.mkdir(Ut(e),t)})}async readdir(e){return this.trusted(async()=>{let t=Ut(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=Ut(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(Ut(e),t)})}async cp(e,t,n){return this.trusted(async()=>{let r=Ut(e),i=Ut(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Un(`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=Wt(e,r.name),i=Wt(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(Ut(e),Ut(t))})}resolvePath(e,t){return t.startsWith(`/`)?Ut(t):Ut(Wt(e,t))}getAllPaths(){return[]}async chmod(e,t){}async symlink(e,t){return this.trusted(async()=>{await this.vfs.symlink(e,Ut(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(Ut(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(Ut(e)))}async utimes(e,t,n){}invalidatePaths(e){let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function Z7(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?Z7(e.getUnderlyingFS?.()):null}async function zge(){await c(`github`)?.getValidAccessToken?.()}const Bge=r(`almost-bash-shell`),Q7=`__SLICC_RUN_PID`,$7=`__SLICC_OUTPUT_TEE__`;function e9(e){let t=e?.get(Q7);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function Vge(e){if(!(Q7 in e)&&!($7 in e))return{...e};let{[Q7]:t,[$7]:n,...r}=e;return r}var t9=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(e9(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:iM,PATH:Ki,USER:`user`,SHELL:`/bin/bash`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return Ige({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 Rge(t.fs),this.progress=new eK({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new rM({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:zge}),this.mountCommands=new ew({fs:t.fs,isScoop:t.isScoop});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=Z7(i)??Z7(a);this.scriptCatalog=t.scriptCatalog??new Yi({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=p({progress:aK(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),yq(t.fs),cJ(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Jr(),...Hr()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Gr({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:EK(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1})}),this.allowedCommands!==null){let e=this.bash;for(let t of Hr())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 m=u.map(e=>e.name),h=f??[...Jr(),...Hr()];this.builtinCommandNames=new Set([...h,...m]),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 qG(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 Wi(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 aM(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=oM(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){Bge.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`;gi(a),await this.waitForInitialJshSync(t);let o={env:{...this.lastEnv,...n===void 0?{}:{[Q7]:String(n)},...i===void 0?{}:{[$7]: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=Vge(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`?AK(t,this.progress):MK(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($7);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=xK(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new CK(t,this.progress,SK(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 PK(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=Qr(e);if(!n)return;let r=`${$r}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Un&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
5192
+ `)?`${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 JG(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(e9(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=qi(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?$G(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 JG(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 Hge(e,t,n,r){return e?{...n,...r?{SLICC_LICK_TARGET:r}:{}}:{...n,HOME:`/scoops/${t}/home`,USER:t,PATH:[`/usr/bin`,`/scoops/${t}/workspace/skills`,`/scoops/${t}/workspace/bin`,...Ui].join(`:`)}}function Uge(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function Wge({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 Gge=r(`scoop-context`);async function Kge(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 DS(r,ln);let s=i??r,c=await XC(),l=Wge({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),u=l?mee(r,{broker:l.broker,getPolicy:l.getPolicy,defaultDisposition:l.defaultDisposition,...l.onGrant?{onGrant:l.onGrant}:{}}):r,d=Hge(n.policy.filesystem.kind===`full-workspace`,t.folder,c,e.lickTarget),f=new t9({fs:u,cwd:a,env:Object.keys(d).length>0?d:void 0,browserAPI:o,webhook:{hasLocalNodeServer:pt,getLeaderStatus:Zn},jshDiscoveryFs:i?s:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:l?.shellConfig,scrubProgressLabel:_t(),processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid});return Gge.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:f,gatedFs:u,skills:await CS(s,ln)}}const n9=51200;function r9(e){if(e.length===0)return[];let t=e.split(`
5192
5193
  `);return e.endsWith(`
5193
- `)&&t.pop(),t}function i9(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function Gge(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=r9(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(`
5194
- `),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 a9(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=r9(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=Kge(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(`
5195
- `),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 Kge(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 o9=r(`tool:bash`),s9=40960,c9=1048576,l9=`\0slicc-img:`;function qge(e){let t=Zt(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=c9;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=`${l9}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${c9/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 Jge(e){let t=Zt(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 Yge(e){return e.replaceAll(RegExp(`${l9}\\d+`,`g`),`[image]`)}function u9(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 Xge(e,t,n,r){let{text:i,markers:a}=qge(e),o=a9(i,{maxBytes:s9});if(!o.truncated)return u9(i,a);let s=`showing the last ${i9(o.outputBytes)} of ${i9(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,Yge(i)),u9(`${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 o9.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),u9(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const Zge=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function d9(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 Qge(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=d9(r.name);if(i!==`command`)return i;let a=r.args[0];return a?d9(a):null}function $ge(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=Qge(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&Zge.has(i)}function f9(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function e_e(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 ${s9/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 ${c9/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 t_e(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 n_e(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 r_e(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 h9(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>o9.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 p9(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function m9(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function i_e(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 a_e(e,t,n,r={}){let i=0,a=0,o={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:f9(r.defaultBackgroundAfterSeconds)??600,nextOutputSeq:()=>i+=1,nextJobId:()=>`bg-${a+=1}`};return{name:`bash`,description:e_e(o.defaultBackgroundAfter),inputSchema:t_e(o.defaultBackgroundAfter),execute:(e,t)=>d_e(o,e,t)}}async function h9(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return o9.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function o_e(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function s_e(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function c_e(e,t,n,r,i,a,o,s){await o.flushPersist();let c=o.killedByTimeout||o_e(a),l,u;if(c){let e=o.getTeedOutput();u=124,l=`${e.endsWith(`
5196
- `)||e.length===0?e:`${e}\n`}${s_e(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(`
5197
- `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await h9(e,t,l),f;try{await e.fs.writeFile(i,d),f=i}catch(e){o9.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){o9.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=a9(Jge(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 l_e(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(()=>p9(t,`timeout`),l*1e3);return t.settled.then(r=>(u!==void 0&&clearTimeout(u),m9(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),c_e(e,o,s,n,c,r,t,i))).catch(e=>o9.error(`Background bash delivery failed`,{jobId:o,error:e})),o9.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:l}),i_e(o,s,r,c,i)}async function u_e(e,t,n){o9.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 Xge(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!$ge(e.shell,t,n.exitCode,n.stderr)}}async function d_e(e,t,n){let r=t.command,i=f9(t.timeout),a=f9(t.background_after)??e.defaultBackgroundAfter;o9.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=r_e(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?(p9(o,`timeout`),o9.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),n_e(c)):t===`elapsed`?l_e(e,o,r,c,i,a):(m9(o,t.ok?t.result.exitCode:1),t.ok?await u_e(e,r,t.result):(o9.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const g9=r(`tool:fs`);function f_e(e){return[p_e(e),m_e(e),h_e(e)]}function p_e(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${n9/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;g9.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
5198
- `),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=Gge(c.join(`
5199
- `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${i9(new TextEncoder().encode(t[o]??``).length)}, exceeds ${i9(n9)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${n9}]`};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} (${i9(n9)} 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 g9.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function m_e(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;g9.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 g9.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function h_e(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;g9.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 g9.error(`Edit failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const _9=r(`scoop-management-tools`);function v9(e){return tn(e.getScoops(),e.scoop.jid)}function y9(e){return v9(e).filter(t=>t.jid!==e.scoop.jid&&t.parentJid!==null)}function b9(e){return t=>t.folder===e||t.name===e}function x9(e,t){let n=y9(t),r=[],i=[];for(let t of e){let e=n.find(b9(t));e?r.push(e):i.push(t)}return{resolved:r,unknown:i}}const S9=[`command`,`read`,`write`,`secret`];function g_e(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,50)+`-scoop`}function __e(e){return e===void 0?{ok:!0}:qg(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${Kg.join(`, `)}.`,isError:!0}}function v_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 y_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 C9(e,t){let n=y9(t).map(e=>e.folder).join(`, `);return{content:`Scoop "${e}" not found in your scoops (${t.scoop.folder}). Available: ${n||`(none)`}`,isError:!0}}function b_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 x_e(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),_9.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function S_e(e){let{kind:t,detail:n,suggested_pattern:r}=e;return S9.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: ${S9.join(`, `)}.`,isError:!0}}}function C_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(`
5200
- `)}async function w_e(e,t){let n=S_e(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return _9.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:C_e(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function T_e(e,t){let{scoop_name:n,prompt:r}=e,i=v9(t).find(b9(n));if(i?.jid===t.scoop.jid)return{content:`Cannot feed yourself.`,isError:!0};if(!i)return C9(n,t);try{return await t.onFeedScoop(i.jid,r),_9.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 E_e(e){let t=v9(e);return t.length===0?{content:`No scoops registered.`}:{content:`Registered scoops:\n${t.map(t=>b_e(t,e.getScoopTabState)).join(`
5201
- `)}`}}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 O_e(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return _9.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 k_e(e,t){let{name:n,model:r,prompt:i,visiblePaths:a,writablePaths:o,allowedCommands:s,thinking:c,background_after:l}=e,u=__e(c);if(!u.ok)return{content:u.content,isError:u.isError};let d=v_e(l);if(!d.ok)return{content:d.content,isError:!0};let f=y_e(r,t.resolveModelSelection);if(!f.ok)return{content:f.content,isError:f.isError};let p=g_e(n),m=y9(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=Dn(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:bn(vn(t.scoop))}),r=await t.onScoopScoop(e);return _9.info(`Scoop created`,{name:n,folder:h}),i&&t.onFeedScoop?O_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 A_e(e,t){let{scoop_name:n}=e,r=v9(t).find(b9(n));if(r?.jid===t.scoop.jid)return{content:`Cannot drop yourself.`,isError:!0};if(!r)return C9(n,t);try{return await t.onDropScoop(r.jid),_9.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 w9(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}function T9(e,t){let n=y9(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 j_e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return w9();let{resolved:r,unknown:i}=x9(n,t);return r.length===0?T9(i,t):(t.onMuteScoops(r.map(e=>e.jid)),_9.info(`Scoops muted`,{names:r.map(e=>e.folder)}),{content:`Muted: ${r.map(e=>e.folder).join(`, `)}${i.length>0?` (unknown: ${i.join(`, `)})`:``}`})}function M_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 N_e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return w9();let{resolved:r,unknown:i}=x9(n,t);if(r.length===0)return T9(i,t);let a=r.map(e=>e.jid),o=new Map(r.map(e=>[e.jid,e.folder])),s=await t.onUnmuteScoops(a);_9.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(...M_e(s,o)),{content:c.join(`
5202
- `)}}function P_e(e,t){return!Array.isArray(e)||e.length===0?w9():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 F_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 I_e(e,t){let{scoop_names:n,timeout_ms:r}=e,i=P_e(n,r);if(i)return i;let{resolved:a,unknown:o}=x9(n,t);if(a.length===0)return T9(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 _9.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:F_e(u,o,d,r)}}function L_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 R_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?(_9.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:L_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 z_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?(_9.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 B_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(`
5203
- `)}`}}async function V_e(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),_9.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 H_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=>x_e(t,e)}}function U_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:[...S9],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=>w_e(t,e)}}function W_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=>T_e(t,e)}}function G_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:()=>E_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:[...Kg],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=>k_e(t,e)}}function q_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=>A_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=>j_e(t,e)}}function Y_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=>N_e(t,e)}}function X_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=>I_e(t,e)}}function Z_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=>R_e(t,e)}}function Q_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=>z_e(t,e)}}function $_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:()=>B_e(e)}}function eve(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=>V_e(t,e)}}function tve(e){let t=[],n=an(e.scoop);return rn(e.scoop)||(t.push(H_e(e)),e.onSudoRequest&&t.push(U_e(e))),n.canManageChildren&&(e.onFeedScoop&&t.push(W_e(e)),t.push(G_e(e)),e.onScoopScoop&&t.push(K_e(e)),e.onDropScoop&&t.push(q_e(e)),e.onMuteScoops&&t.push(J_e(e)),e.onUnmuteScoops&&t.push(Y_e(e)),e.onScheduleScoopWait&&t.push(X_e(e)),e.onSudoResolve&&(t.push(Z_e(e)),t.push(Q_e(e))),e.onListSudoRequests&&t.push($_e(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(eve(e))),t}const nve=r(`scoop-context`);async function rve(e){let{scoop:t,unit:n,callbacks:r}=e,i=tve({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:L,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=[...f_e(e.gatedFs),a_e(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:_t(),fireLick:e=>{let n=globalThis.__slicc_lick_handler;if(!n){nve.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:_t()};return e.processManager?Ue(a,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},o):Ue(a,void 0,o)}const E9=r(`scoop-context`);async function ive(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e;E9.info(`Filesystem ready`,{folder:t.folder}),await GC(r,t,n);let{shell:a,gatedFs:o,skills:s}=await Wge({scoop:t,unit:n,fs:r,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(a);let c=await rve({scoop:t,unit:n,callbacks:i,shell:a,fs:r,gatedFs:o,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:l,globalMemory:u}=await TC(r,n,()=>i.getGlobalMemory());if(!DC(t))return E9.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let d=kC(t,n),f=MC(t,n,u,l,s),p=await e.sessions.restore(),{streamWithSessionId:m,compactFn:h,getCompactionApiKey:g}=await KC(d,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>DC(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:e=>i.onCompactionStateChange?.(e)});if(e.isDisposed())return{kind:`abandoned`};let _=nn(t);return{kind:`ready`,agent:UC({model:d,tools:c,systemPrompt:f,messages:p,thinkingLevel:PC(FC()??_.level,d),getApiKey:()=>DC(t)??void 0,transformContext:h,streamFn:m,captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:h,getCompactionApiKey:g,effortOverride:_.effortOverride,toolCount:c.length}}const D9=r(`scoop-context`);var ave=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=ht(e.messages);return this.createdAt=e.createdAt,D9.info(`Restored agent session`,{folder:this.deps.folder,messageCount:t.length,droppedOrphans:e.messages.length-t.length}),t}}catch(e){D9.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 D9.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=li(t);if(n.length===0)return null;let r=ht(n);return t&&(this.createdAt=t.createdAt),D9.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=>{D9.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=>{D9.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){D9.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 ove(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 sve(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function O9(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const k9=r(`scoop-context`);var cve=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;k9.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)&&(k9.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:fC(r)}),!!(t<3&&(await pC(A9(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return dC(e)?(k9.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 zo(e)?(k9.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),Vo(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(!fC(e)||t>=3)return!1;let r=A9(t);return k9.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await pC(r,n)&&!this.deps.isDisposed()}fail(e,t){mi(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function A9(e){return 1e3*2**(e-1)}function lve(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){k9.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 j9=r(`scoop-context`);var uve=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=dn(e),this.owner={kind:kn(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 ave({store:r??null,canonical:c?{store:c,identity:{key:wn(e),workUnitId:e.jid,workspaceId:Sn(e),folder:e.folder,legacyKeys:{agentSessionId:e.jid,chatSessionId:pn(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 HC({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new bC({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new SC({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new VC({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 cve({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 Vge(this.unit,this.scoop,_n(this.callbacks.getScoops())[0]?.jid)}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 ive({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,getLickTarget:()=>this.ownLickTarget(),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`),j9.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);j9.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(jC(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),sve(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}async prompt(e,t=[],n){if(!await this.ensureAgentReady()||lve(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder}))return;let r=this.agent;this.promptAbortController?.abort();let i=new AbortController;this.promptAbortController=i;let a=i.signal;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let o=ove(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:i});this.currentTurnProcess=o,this.runBounds.arm();let s=null;try{if(s=await this.turnRunner.run(r,e,t,a),s&&!this.disposed&&!a.aborted){this.turnRunner.reportExhausted(s);return}!this.disposed&&!a.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(i,o,s,a)}}stop(){O9(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 AC(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=LC(this.agent,this.scoop))}async reloadSkills(){this.agent&&await zC(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){return this.agent?FC()?this.agent.state.thinkingLevel:(this.activeEffortOverride=t,RC(this.agent,e)):`off`}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}dispose(){this.sessions.persistNow(),this.disposed=!0,this.runBounds.disarm(),O9(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||gC(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||mC(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 M9=r(`scoop-lifecycle-manager`);var dve=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 lC(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))??_n(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return on(t.values(),e)??_n(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){M9.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 Br))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`)M9.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{M9.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=dn(t).policy.filesystem,o=a.kind===`full-workspace`?r:new Br(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 uve(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=>{M9.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),M9.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),M9.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 M9.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(M9.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){M9.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}o=this.getContext(e)}if(!o||!s){M9.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`)),M9.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(En(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=Dn(e.folder,n);r!==e.folder&&(M9.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),M9.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&pi(`spawn`,e.folder)}catch(n){M9.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){M9.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=>{M9.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}}inheritModel(e){if(mn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?hn(t):void 0)??zS();n&&un(e,n)}async unregister(e){let t=this.deps.getScoops(),n=t.get(e);if(n&&n.parentJid===null&&_n(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=>{M9.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),n&&this.deps.getConversationStore()?.delete(wn(n)),this.deps.getSessionStore()?.delete(e).catch(t=>{M9.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&&M9.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:a}),n&&this.deps.getSudoManager()?.forgetScoopPolicies(n.folder),M9.info(`Scoop unregistered`,{jid:e}),n)try{this.deps.callbacks.onScoopUnregistered?.(n)}catch(t){M9.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;un(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return un(n,r),this.getContext(e)?.updateModel(),M9.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();M9.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=>{M9.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),M9.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;On(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){M9.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}=dn(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}),pi(`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:vn(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),onSudoResolve:o.canResolveApprovals?(e,t)=>i.resolveActionableLick(e,t):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests():void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(M9.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),pi(`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`),dn(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){M9.warn(`onIncomingMessage for scoop-error threw`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}this.deps.handleMessage(a).catch(e=>{M9.error(`Failed to route fatal error to cone`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})})}};const N9=r(`scoop-message-router`);var fve=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(N9.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){N9.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}`);pi(`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),N9.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);N9.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){N9.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){N9.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(N9.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){N9.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{N9.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);N9.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);N9.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;if(n.reported||r<3e5)return;n.reported=!0;let i=`Lick queue remained deferred while scoop was busy for ${3e5/1e3}s`;N9.warn(`Busy lick queue may be starved`,{jid:e,error:i}),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){N9.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){N9.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){N9.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(N9.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){N9.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){N9.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=ir(_r(cr(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){N9.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}: ${Fg(e.content,e.attachments)}`).join(`
5204
- `),l=s.flatMap(e=>Ig(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=ir(_r(cr(a),o));this.lastAgentTimestamp.set(e,d),await this.deps.db.setState(`lastAgentTs_${e}`,d);let f=s.some(e=>e.steer);await this.deps.sendPrompt(e,c,u.senderId,u.senderName,l,{steer:f})}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);N9.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=>{N9.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=>{N9.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),N9.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=>{N9.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=>{N9.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(),N9.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 P9=r(`orchestrator`);var pve=class{scoops=new Map;workUnits=new rv(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new MS({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;fsWatcher=null;sudoManager=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new oC({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 iC({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new QS({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 WS({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=>fr(e),saveMessage:e=>ar(e)});lickRegistry=new FS({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 fve({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=>ar(e),deleteMessage:e=>sr(e),clearMessagesForScoop:e=>hr(e),clearAllMessages:()=>pr(),getMessagesSince:(e,t,n)=>dr(e,t,n),setState:(e,t)=>rr(e,t)},isExternalLickChannel:M_});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new dve({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=>nr(e),deleteScoop:e=>mr(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>Ir(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)=>this.resolveActionableLick(e,t),listPendingSudoRequests:()=>this.listPendingSudoRequests()},handleMessage:e=>this.handleMessage(e)})}setProcessManager(e){this.processManager=e}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return BS(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new Ry({fs:e,watcher:t,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new Xv(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new RS(e,t),await this.modelPolicyFile.init(),n(),vr()),n,{stagePrefix:`orchestrator-init`})}async init(e){await br(),this.sharedFs=await BS(e=>zr.create({dbName:`slicc-fs`,onRepairProgress:e}),e),this.sessionStore=new zg,this.conversationStore=new Jx,this.fsWatcher=new Rr,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=>yn(e))?.jid;for(let e of Object.values(t)){await this.backfillParent(e,n),En(e),this.migrateScoopConfig(e,Object.values(t)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let r=await ur(`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 HS({onTaskRun:async(e,t)=>{P9.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(),P9.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);P9.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}`)}Wr(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=By(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new O_;try{await Hx({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){P9.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=yn(e)?null:t??null;try{await nr(e)}catch(t){P9.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=>!mn(e));if(e.length===0)return;let t=zS(),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?hn(n):void 0)??t;if(r){un(e,r);try{await nr(e)}catch(t){P9.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=`${gn.root}/`,r=bn(Cn(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.setScoopExistenceResolver(e=>this.getScoops().some(t=>Nr(e,t.name,t.folder))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){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)}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t){return this.approvalRouter.resolveSudoRequestAndPersist(e,t)}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){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(){return this.approvalRouter.listPendingSudoRequests()}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 _n(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 on(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 zr.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await DS(this.sharedFs).catch(e=>{P9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new Ry({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 Xv(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new RS(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),P9.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 fr(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(Yr)]}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&&P9.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,P9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new O_,t=this.sharedFs;return new lx({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:Dx(),snapshotStore:{read:e=>bx(t,e),write:(e,n)=>yx(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.99.5`})}};const F9=r(`workflow-run-manager`),I9=`/shared/workflow-runs`,L9=1e3;function mve(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function hve(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){F9.warn(`observeRun handler threw`,e)}},i=(e,n)=>bve(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=mve(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),vve(t,n);let f=i(a.ctx,c),p=yve(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=>F9.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=`${I9}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(I9,{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);F9.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`?_ve(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){F9.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function gve(e){let t=hve(e);return globalThis[z7]=t,F9.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function _ve(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function vve(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 yve(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 bve(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?xve(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 xve(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>L9&&i.logs.splice(0,i.logs.length-L9),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())}}var Cve=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 Un(`ENOTDIR`,`not a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new Un(`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 Un(`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 Un(`EISDIR`,`is a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new Un(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new Un(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new Un(`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 Un(`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 Un(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new Un(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new Un(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new Un(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new Un(`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 Un(`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)+`
5205
- `}renderProcFile(e,t){if(e===1)return Ove(t);let n=this.pm.get(e);switch(t){case`status`:return wve(n);case`cmdline`:return Tve(n);case`cwd`:return Eve(n);case`stat`:return Dve(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 wve(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(`
5194
+ `)&&t.pop(),t}function i9(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function qge(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=r9(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(`
5195
+ `),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 a9(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=r9(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=Jge(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(`
5196
+ `),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 Jge(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 o9=r(`tool:bash`),s9=40960,c9=1048576,l9=`\0slicc-img:`;function Yge(e){let t=Zt(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=c9;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=`${l9}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${c9/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 Xge(e){let t=Zt(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 Zge(e){return e.replaceAll(RegExp(`${l9}\\d+`,`g`),`[image]`)}function u9(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 Qge(e,t,n,r){let{text:i,markers:a}=Yge(e),o=a9(i,{maxBytes:s9});if(!o.truncated)return u9(i,a);let s=`showing the last ${i9(o.outputBytes)} of ${i9(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,Zge(i)),u9(`${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 o9.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),u9(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const $ge=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function d9(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 e_e(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=d9(r.name);if(i!==`command`)return i;let a=r.args[0];return a?d9(a):null}function t_e(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=e_e(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&$ge.has(i)}function f9(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function n_e(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 ${s9/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 ${c9/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 r_e(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 i_e(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 a_e(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 h9(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>o9.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 p9(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function m9(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function o_e(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 s_e(e,t,n,r={}){let i=0,a=0,o={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:f9(r.defaultBackgroundAfterSeconds)??600,nextOutputSeq:()=>i+=1,nextJobId:()=>`bg-${a+=1}`};return{name:`bash`,description:n_e(o.defaultBackgroundAfter),inputSchema:r_e(o.defaultBackgroundAfter),execute:(e,t)=>p_e(o,e,t)}}async function h9(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return o9.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function c_e(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function l_e(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function u_e(e,t,n,r,i,a,o,s){await o.flushPersist();let c=o.killedByTimeout||c_e(a),l,u;if(c){let e=o.getTeedOutput();u=124,l=`${e.endsWith(`
5197
+ `)||e.length===0?e:`${e}\n`}${l_e(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(`
5198
+ `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await h9(e,t,l),f;try{await e.fs.writeFile(i,d),f=i}catch(e){o9.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){o9.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=a9(Xge(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 d_e(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(()=>p9(t,`timeout`),l*1e3);return t.settled.then(r=>(u!==void 0&&clearTimeout(u),m9(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),u_e(e,o,s,n,c,r,t,i))).catch(e=>o9.error(`Background bash delivery failed`,{jobId:o,error:e})),o9.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:l}),o_e(o,s,r,c,i)}async function f_e(e,t,n){o9.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 Qge(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!t_e(e.shell,t,n.exitCode,n.stderr)}}async function p_e(e,t,n){let r=t.command,i=f9(t.timeout),a=f9(t.background_after)??e.defaultBackgroundAfter;o9.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=a_e(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?(p9(o,`timeout`),o9.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),i_e(c)):t===`elapsed`?d_e(e,o,r,c,i,a):(m9(o,t.ok?t.result.exitCode:1),t.ok?await f_e(e,r,t.result):(o9.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const g9=r(`tool:fs`);function m_e(e){return[h_e(e),g_e(e),__e(e)]}function h_e(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${n9/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;g9.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
5199
+ `),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=qge(c.join(`
5200
+ `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${i9(new TextEncoder().encode(t[o]??``).length)}, exceeds ${i9(n9)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${n9}]`};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} (${i9(n9)} 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 g9.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function g_e(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;g9.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 g9.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function __e(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;g9.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 g9.error(`Edit failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const _9=r(`scoop-management-tools`);function v9(e){return tn(e.getScoops(),e.scoop.jid)}function y9(e){return v9(e).filter(t=>t.jid!==e.scoop.jid&&t.parentJid!==null)}function b9(e){return t=>t.folder===e||t.name===e}function x9(e,t){let n=y9(t),r=[],i=[];for(let t of e){let e=n.find(b9(t));e?r.push(e):i.push(t)}return{resolved:r,unknown:i}}const S9=[`command`,`read`,`write`,`secret`];function v_e(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,50)+`-scoop`}function y_e(e){return e===void 0?{ok:!0}:qg(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${Kg.join(`, `)}.`,isError:!0}}function b_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 x_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 C9(e,t){let n=y9(t).map(e=>e.folder).join(`, `);return{content:`Scoop "${e}" not found in your scoops (${t.scoop.folder}). Available: ${n||`(none)`}`,isError:!0}}function S_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 C_e(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),_9.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function w_e(e){let{kind:t,detail:n,suggested_pattern:r}=e;return S9.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: ${S9.join(`, `)}.`,isError:!0}}}function T_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(`
5201
+ `)}async function E_e(e,t){let n=w_e(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return _9.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:T_e(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function D_e(e,t){let{scoop_name:n,prompt:r}=e,i=v9(t).find(b9(n));if(i?.jid===t.scoop.jid)return{content:`Cannot feed yourself.`,isError:!0};if(!i)return C9(n,t);try{return await t.onFeedScoop(i.jid,r),_9.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 O_e(e){let t=v9(e);return t.length===0?{content:`No scoops registered.`}:{content:`Registered scoops:\n${t.map(t=>S_e(t,e.getScoopTabState)).join(`
5202
+ `)}`}}function k_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 A_e(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return _9.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 j_e(e,t){let{name:n,model:r,prompt:i,visiblePaths:a,writablePaths:o,allowedCommands:s,thinking:c,background_after:l}=e,u=y_e(c);if(!u.ok)return{content:u.content,isError:u.isError};let d=b_e(l);if(!d.ok)return{content:d.content,isError:!0};let f=x_e(r,t.resolveModelSelection);if(!f.ok)return{content:f.content,isError:f.isError};let p=v_e(n),m=y9(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=Dn(p,t.getScoops().map(e=>e.folder));try{let e=k_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:bn(vn(t.scoop))}),r=await t.onScoopScoop(e);return _9.info(`Scoop created`,{name:n,folder:h}),i&&t.onFeedScoop?A_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=v9(t).find(b9(n));if(r?.jid===t.scoop.jid)return{content:`Cannot drop yourself.`,isError:!0};if(!r)return C9(n,t);try{return await t.onDropScoop(r.jid),_9.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 w9(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}function T9(e,t){let n=y9(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 N_e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return w9();let{resolved:r,unknown:i}=x9(n,t);return r.length===0?T9(i,t):(t.onMuteScoops(r.map(e=>e.jid)),_9.info(`Scoops muted`,{names:r.map(e=>e.folder)}),{content:`Muted: ${r.map(e=>e.folder).join(`, `)}${i.length>0?` (unknown: ${i.join(`, `)})`:``}`})}function P_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 F_e(e,t){let{scoop_names:n}=e;if(!Array.isArray(n)||n.length===0)return w9();let{resolved:r,unknown:i}=x9(n,t);if(r.length===0)return T9(i,t);let a=r.map(e=>e.jid),o=new Map(r.map(e=>[e.jid,e.folder])),s=await t.onUnmuteScoops(a);_9.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(...P_e(s,o)),{content:c.join(`
5203
+ `)}}function I_e(e,t){return!Array.isArray(e)||e.length===0?w9():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 L_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 R_e(e,t){let{scoop_names:n,timeout_ms:r}=e,i=I_e(n,r);if(i)return i;let{resolved:a,unknown:o}=x9(n,t);if(a.length===0)return T9(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 _9.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:L_e(u,o,d,r)}}function z_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 B_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?(_9.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:z_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 V_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?(_9.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 H_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(`
5204
+ `)}`}}async function U_e(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),_9.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 W_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=>C_e(t,e)}}function G_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:[...S9],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=>E_e(t,e)}}function K_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=>D_e(t,e)}}function q_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:()=>O_e(e)}}function J_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:[...Kg],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=>j_e(t,e)}}function Y_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 X_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=>N_e(t,e)}}function Z_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=>F_e(t,e)}}function Q_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=>R_e(t,e)}}function $_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=>B_e(t,e)}}function eve(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=>V_e(t,e)}}function tve(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:()=>H_e(e)}}function nve(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=>U_e(t,e)}}function rve(e){let t=[],n=an(e.scoop);return rn(e.scoop)||(t.push(W_e(e)),e.onSudoRequest&&t.push(G_e(e))),n.canManageChildren&&(e.onFeedScoop&&t.push(K_e(e)),t.push(q_e(e)),e.onScoopScoop&&t.push(J_e(e)),e.onDropScoop&&t.push(Y_e(e)),e.onMuteScoops&&t.push(X_e(e)),e.onUnmuteScoops&&t.push(Z_e(e)),e.onScheduleScoopWait&&t.push(Q_e(e)),e.onSudoResolve&&(t.push($_e(e)),t.push(eve(e))),e.onListSudoRequests&&t.push(tve(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(nve(e))),t}const ive=r(`scoop-context`);async function ave(e){let{scoop:t,unit:n,callbacks:r}=e,i=rve({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:L,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=[...m_e(e.gatedFs),s_e(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:_t(),fireLick:e=>{let n=globalThis.__slicc_lick_handler;if(!n){ive.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:_t()};return e.processManager?Ue(a,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},o):Ue(a,void 0,o)}const E9=r(`scoop-context`);async function ove(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e;E9.info(`Filesystem ready`,{folder:t.folder}),await GC(r,t,n);let{shell:a,gatedFs:o,skills:s}=await Kge({scoop:t,unit:n,fs:r,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(a);let c=await ave({scoop:t,unit:n,callbacks:i,shell:a,fs:r,gatedFs:o,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:l,globalMemory:u}=await TC(r,n,()=>i.getGlobalMemory());if(!DC(t))return E9.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let d=kC(t,n),f=MC(t,n,u,l,s),p=await e.sessions.restore(),{streamWithSessionId:m,compactFn:h,getCompactionApiKey:g}=await KC(d,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>DC(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:e=>i.onCompactionStateChange?.(e)});if(e.isDisposed())return{kind:`abandoned`};let _=nn(t);return{kind:`ready`,agent:UC({model:d,tools:c,systemPrompt:f,messages:p,thinkingLevel:PC(FC()??_.level,d),getApiKey:()=>DC(t)??void 0,transformContext:h,streamFn:m,captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:h,getCompactionApiKey:g,effortOverride:_.effortOverride,toolCount:c.length}}const D9=r(`scoop-context`);var sve=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=ht(e.messages);return this.createdAt=e.createdAt,D9.info(`Restored agent session`,{folder:this.deps.folder,messageCount:t.length,droppedOrphans:e.messages.length-t.length}),t}}catch(e){D9.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 D9.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=li(t);if(n.length===0)return null;let r=ht(n);return t&&(this.createdAt=t.createdAt),D9.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=>{D9.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=>{D9.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){D9.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 cve(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 lve(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function O9(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const k9=r(`scoop-context`);var uve=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;k9.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)&&(k9.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:fC(r)}),!!(t<3&&(await pC(A9(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return dC(e)?(k9.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 zo(e)?(k9.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),Vo(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(!fC(e)||t>=3)return!1;let r=A9(t);return k9.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await pC(r,n)&&!this.deps.isDisposed()}fail(e,t){mi(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function A9(e){return 1e3*2**(e-1)}function dve(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){k9.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 j9=r(`scoop-context`);var fve=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=dn(e),this.owner={kind:kn(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 sve({store:r??null,canonical:c?{store:c,identity:{key:wn(e),workUnitId:e.jid,workspaceId:Sn(e),folder:e.folder,legacyKeys:{agentSessionId:e.jid,chatSessionId:pn(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 HC({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new bC({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new SC({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new VC({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 uve({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 Uge(this.unit,this.scoop,_n(this.callbacks.getScoops())[0]?.jid)}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 ove({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,getLickTarget:()=>this.ownLickTarget(),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`),j9.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);j9.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(jC(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),lve(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}async prompt(e,t=[],n){if(!await this.ensureAgentReady()||dve(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder}))return;let r=this.agent;this.promptAbortController?.abort();let i=new AbortController;this.promptAbortController=i;let a=i.signal;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let o=cve(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:i});this.currentTurnProcess=o,this.runBounds.arm();let s=null;try{if(s=await this.turnRunner.run(r,e,t,a),s&&!this.disposed&&!a.aborted){this.turnRunner.reportExhausted(s);return}!this.disposed&&!a.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(i,o,s,a)}}stop(){O9(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 AC(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=LC(this.agent,this.scoop))}async reloadSkills(){this.agent&&await zC(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){return this.agent?FC()?this.agent.state.thinkingLevel:(this.activeEffortOverride=t,RC(this.agent,e)):`off`}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}dispose(){this.sessions.persistNow(),this.disposed=!0,this.runBounds.disarm(),O9(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||gC(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||mC(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 M9=r(`scoop-lifecycle-manager`);var pve=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 lC(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))??_n(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return on(t.values(),e)??_n(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){M9.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 Br))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`)M9.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{M9.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=dn(t).policy.filesystem,o=a.kind===`full-workspace`?r:new Br(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 fve(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=>{M9.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),M9.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),M9.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 M9.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(M9.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){M9.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}o=this.getContext(e)}if(!o||!s){M9.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`)),M9.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(En(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=Dn(e.folder,n);r!==e.folder&&(M9.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),M9.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&pi(`spawn`,e.folder)}catch(n){M9.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){M9.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=>{M9.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}}inheritModel(e){if(mn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?hn(t):void 0)??zS();n&&un(e,n)}async unregister(e){let t=this.deps.getScoops(),n=t.get(e);if(n&&n.parentJid===null&&_n(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=>{M9.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),n&&this.deps.getConversationStore()?.delete(wn(n)),this.deps.getSessionStore()?.delete(e).catch(t=>{M9.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&&M9.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:a}),n&&this.deps.getSudoManager()?.forgetScoopPolicies(n.folder),M9.info(`Scoop unregistered`,{jid:e}),n)try{this.deps.callbacks.onScoopUnregistered?.(n)}catch(t){M9.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;un(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return un(n,r),this.getContext(e)?.updateModel(),M9.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();M9.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=>{M9.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),M9.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;On(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){M9.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}=dn(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}),pi(`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:vn(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),onSudoResolve:o.canResolveApprovals?(e,t)=>i.resolveActionableLick(e,t):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests():void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(M9.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),pi(`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`),dn(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){M9.warn(`onIncomingMessage for scoop-error threw`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}this.deps.handleMessage(a).catch(e=>{M9.error(`Failed to route fatal error to cone`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})})}};const N9=r(`scoop-message-router`);var mve=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(N9.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){N9.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}`);pi(`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),N9.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);N9.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){N9.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){N9.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(N9.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){N9.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{N9.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);N9.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);N9.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;if(n.reported||r<3e5)return;n.reported=!0;let i=`Lick queue remained deferred while scoop was busy for ${3e5/1e3}s`;N9.warn(`Busy lick queue may be starved`,{jid:e,error:i}),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){N9.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){N9.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){N9.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(N9.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){N9.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){N9.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=ir(_r(cr(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){N9.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}: ${Fg(e.content,e.attachments)}`).join(`
5205
+ `),l=s.flatMap(e=>Ig(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=ir(_r(cr(a),o));this.lastAgentTimestamp.set(e,d),await this.deps.db.setState(`lastAgentTs_${e}`,d);let f=s.some(e=>e.steer);await this.deps.sendPrompt(e,c,u.senderId,u.senderName,l,{steer:f})}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);N9.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=>{N9.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=>{N9.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),N9.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=>{N9.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=>{N9.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(),N9.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 P9=r(`orchestrator`);var hve=class{scoops=new Map;workUnits=new rv(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new MS({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;fsWatcher=null;sudoManager=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new oC({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 iC({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new QS({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 WS({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=>fr(e),saveMessage:e=>ar(e)});lickRegistry=new FS({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 mve({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=>ar(e),deleteMessage:e=>sr(e),clearMessagesForScoop:e=>hr(e),clearAllMessages:()=>pr(),getMessagesSince:(e,t,n)=>dr(e,t,n),setState:(e,t)=>rr(e,t)},isExternalLickChannel:M_});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new pve({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=>nr(e),deleteScoop:e=>mr(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>Ir(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)=>this.resolveActionableLick(e,t),listPendingSudoRequests:()=>this.listPendingSudoRequests()},handleMessage:e=>this.handleMessage(e)})}setProcessManager(e){this.processManager=e}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return BS(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new Ry({fs:e,watcher:t,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new Xv(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new RS(e,t),await this.modelPolicyFile.init(),n(),vr()),n,{stagePrefix:`orchestrator-init`})}async init(e){await br(),this.sharedFs=await BS(e=>zr.create({dbName:`slicc-fs`,onRepairProgress:e}),e),this.sessionStore=new zg,this.conversationStore=new Jx,this.fsWatcher=new Rr,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=>yn(e))?.jid;for(let e of Object.values(t)){await this.backfillParent(e,n),En(e),this.migrateScoopConfig(e,Object.values(t)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let r=await ur(`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 HS({onTaskRun:async(e,t)=>{P9.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(),P9.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);P9.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}`)}Wr(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=By(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new O_;try{await Hx({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){P9.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=yn(e)?null:t??null;try{await nr(e)}catch(t){P9.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=>!mn(e));if(e.length===0)return;let t=zS(),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?hn(n):void 0)??t;if(r){un(e,r);try{await nr(e)}catch(t){P9.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=`${gn.root}/`,r=bn(Cn(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.setScoopExistenceResolver(e=>this.getScoops().some(t=>Nr(e,t.name,t.folder))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){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)}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t){return this.approvalRouter.resolveSudoRequestAndPersist(e,t)}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){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(){return this.approvalRouter.listPendingSudoRequests()}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 _n(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 on(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 zr.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await DS(this.sharedFs).catch(e=>{P9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new Ry({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 Xv(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new RS(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),P9.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 fr(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(Yr)]}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&&P9.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,P9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new O_,t=this.sharedFs;return new lx({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:Dx(),snapshotStore:{read:e=>bx(t,e),write:(e,n)=>yx(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.99.6`})}};const F9=r(`workflow-run-manager`),I9=`/shared/workflow-runs`,L9=1e3;function gve(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function _ve(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){F9.warn(`observeRun handler threw`,e)}},i=(e,n)=>Sve(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=gve(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),bve(t,n);let f=i(a.ctx,c),p=xve(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=>F9.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=`${I9}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(I9,{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);F9.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`?yve(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){F9.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function vve(e){let t=_ve(e);return globalThis[B7]=t,F9.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function yve(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function bve(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 xve(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 Sve(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?Cve(n,t,a?.args??[],r):e===`agent`?wve(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function Cve(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>L9&&i.logs.splice(0,i.logs.length-L9),r()}return{stdout:``,stderr:``,exitCode:0}}async function wve(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())}}var Tve=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 Un(`ENOTDIR`,`not a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new Un(`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 Un(`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 Un(`EISDIR`,`is a directory`,e);let n=V9(t[0]);if(n===null||!this.pidExists(n))throw new Un(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new Un(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new Un(`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 Un(`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 Un(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!R9.includes(r))throw new Un(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new Un(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new Un(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new Un(`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 Un(`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)+`
5206
+ `}renderProcFile(e,t){if(e===1)return Ave(t);let n=this.pm.get(e);switch(t){case`status`:return Eve(n);case`cmdline`:return Dve(n);case`cwd`:return Ove(n);case`stat`:return kve(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 Eve(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(`
5206
5207
  `)+`
5207
- `}function Tve(e){return e.argv.join(`\0`)+`\0`}function Eve(e){return e.cwd+`
5208
- `}function Dve(e){return[e.pid,`(${e.kind})`,H9(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
5209
- `}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 Ove(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
5208
+ `}function Dve(e){return e.argv.join(`\0`)+`\0`}function Ove(e){return e.cwd+`
5209
+ `}function kve(e){return[e.pid,`(${e.kind})`,H9(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
5210
+ `}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 Ave(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
5210
5211
  `)+`
5211
5212
  `;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
5212
5213
  `;case`stat`:return`1 (kernel-host) R 0 - 0 -
5213
- `}}function kve(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(yV(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(!mV(n.token))return;let a=i.get(n.id);if(a){r({type:bV,id:n.id}),a.result&&r({type:xV,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:bV,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),605e3),r({type:xV,id:n.id,...e})};(TV(n)?OV(n):vV(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 Ave(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 jve(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 Mve(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}Nve(e,t)}function Nve(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=e.targetScoop?Uo(r,e.targetScoop):_n(r)[0];if(!i){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!qv(i)){n.debug?.(`dropping discovery lick for non-browsing scoop`,{scoop:i.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 a=K_(e);if(a===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let o=Ave(e),s=jve(e),c=e.type,l={id:`${c}-${s}-${Date.now()}`,chatJid:i.jid,senderId:c,senderName:`${c}:${o}`,content:a.content,timestamp:e.timestamp,fromAssistant:!1,channel:c,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(l).catch(e=>{n.warn(`Lick message routing failed`,{channel:c,eventName:o,error:String(e)})})}async function Pve(e,t,n,r,i){let a=new Xi,o=new pve(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a),W9().__slicc_pm=a,WG(KG()),W9().__slicc_browser=t,await n.bind(o,t);let s=$n(()=>n.emitTrayRuntimeStatus()),c=pv(()=>n.emitTrayRuntimeStatus());return await o.init(i),await n.seedBuffersFromAgentState(),{processManager:a,orchestrator:o,unsubLeader:s,unsubFollower:c,sharedFs:o.getSharedFS()}}async function Fve(e,t,n){let{registerSessionCostsProvider:r}=await import(`./cost-command-BQWpaecs.js`).then(e=>e.t);r(t=>e.getSessionCostsForCommand(t));let{getLickManager:i}=await import(`./lick-manager-DFmMezV-.js`).then(e=>e.r),a=i();await a.init(),e.setLickManager(a);let o=t.lickEventHandler??Mve,s={orchestrator:e,lickManager:a,log:n};return a.setEventHandler(e=>o(e,s)),a}async function Ive(e){let t=e.getScoops();_n(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 Lve(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:i}=e;gve({sharedFs:i,getStartingRoot:e=>{let n=_n(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)=>JG(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>B7().slice(10,22),splitResult:(e,t)=>H7(e,t)})}async function Rve(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-D_PY6ku1.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))+`
5214
- `,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 zve(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-CnkYvHKI.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 Bve(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 Rv(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})},Vve(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Vve(e){let t=p();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:()=>zv()}}function Hve(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-DIFfyUcI.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 Uve(){Er(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-krx52_Jm.js`);return e()})}function Wve(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-krx52_Jm.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 Gve(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-GrjFkpDG.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 Kve(){return pt()}async function qve(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Uve();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await Pve(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?h_(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new Cve(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Fve(l,e,o);s(`lick-manager-ready`),f&&Lve({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),W9().__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await Rve({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});W9().__slicc_wsSubscribers=h;let g=null;Kve()&&(g=await zve(p,o,e.localLickWsUrl??null));let _=Bve(n,p,o);f&&Hve(f,p,o),a||await Ive(l),s(`cone-bootstrapped`),f&&Wve(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await Gve(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=kve({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 Jve({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 Jve(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)}Yve({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Yve(e){let t=W9();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,WG(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[z7]}const G9=`x-bypass-llm-proxy`;function Xve(e,t,n){return t?(r,i)=>{if(!Zve(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 Zve(e,t,n){if($ve(e,t))return!0;let r=n?.()??null;return r?Qve(e,r,t):!1}function Qve(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 $ve(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 eye(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 tye=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(!nye(e)||e.source!==`panel`)return;let t=e.payload;rye(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=zG(l(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 nye(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 rye(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 iye=class extends t9{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 aye(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new tye({transport:t,processManager:i,createShell:(a,o)=>new iye(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??pt,getLeaderStatus:e.webhook?.getLeaderStatus??Zn},processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function oye(e){let t=new sye(e);return t.start(),{stop:()=>t.dispose()}}var sye=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(!cye(e)||e.source!==`panel`)return;let t=e.payload;if(lye(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(uye(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(dye(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 Un(`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 Un(`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(fye(e.type),e.requestId,new Un(`EACCES`,`vfs-rpc-host has no writable backend wired`),pye(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 Un(`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 Un(`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 Un(`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 cye(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function lye(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 uye(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 dye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function fye(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 pye(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof Un?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function mye(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Xve(e.bind(globalThis),t,hye)}function hye(){let e=Rt();if(!e)return null;try{return new URL(e).origin}catch{return null}}function gye(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 _ye=eye(e=>bye(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&_ye.handle(e.data)});function vye(e){let t=Jee(e.pageBuildId,`6.99.5-mtahwt13`);return()=>{t&&hi(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.99.5-mtahwt13`)}}function yye(e){mye(),zt(e.localApiBaseUrl??null),Pt(e.bridgeToken??null),PG(e.syncFsBridgeEnabled??!1),Lt(e.extensionDelegateId??null),gye(e.localStorageSeed??{}),e.flagFloat&&zee(e.flagFloat)}async function bye(e){Kee(e.instanceId);let t=vye(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{yye(e),_i().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=Xee(e.kernelPort),a=new Ov(r),o=Ov.createCallbacks(a),c=new Zee(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new Tee(c);Y9=await qve({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(Oee(i));let m=await Sye({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){xye(e.kernelPort,t)}}function xye(e,t){qee(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 Sye(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=aye({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=oye({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),i=await Cye(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function Cye(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CO3wuKjp.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-Co-pb0x0.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())});
5214
+ `}}function jve(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(yV(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(!mV(n.token))return;let a=i.get(n.id);if(a){r({type:bV,id:n.id}),a.result&&r({type:xV,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:bV,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),605e3),r({type:xV,id:n.id,...e})};(TV(n)?OV(n):vV(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 Mve(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 Nve(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 Pve(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}Fve(e,t)}function Fve(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=e.targetScoop?Uo(r,e.targetScoop):_n(r)[0];if(!i){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!qv(i)){n.debug?.(`dropping discovery lick for non-browsing scoop`,{scoop:i.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 a=K_(e);if(a===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let o=Mve(e),s=Nve(e),c=e.type,l={id:`${c}-${s}-${Date.now()}`,chatJid:i.jid,senderId:c,senderName:`${c}:${o}`,content:a.content,timestamp:e.timestamp,fromAssistant:!1,channel:c,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(l).catch(e=>{n.warn(`Lick message routing failed`,{channel:c,eventName:o,error:String(e)})})}async function Ive(e,t,n,r,i){let a=new Xi,o=new hve(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a),W9().__slicc_pm=a,WG(KG()),W9().__slicc_browser=t,await n.bind(o,t);let s=$n(()=>n.emitTrayRuntimeStatus()),c=pv(()=>n.emitTrayRuntimeStatus());return await o.init(i),await n.seedBuffersFromAgentState(),{processManager:a,orchestrator:o,unsubLeader:s,unsubFollower:c,sharedFs:o.getSharedFS()}}async function Lve(e,t,n){let{registerSessionCostsProvider:r}=await import(`./cost-command-BQWpaecs.js`).then(e=>e.t);r(t=>e.getSessionCostsForCommand(t));let{getLickManager:i}=await import(`./lick-manager-DFmMezV-.js`).then(e=>e.r),a=i();await a.init(),e.setLickManager(a);let o=t.lickEventHandler??Pve,s={orchestrator:e,lickManager:a,log:n};return a.setEventHandler(e=>o(e,s)),a}async function Rve(e){let t=e.getScoops();_n(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 zve(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:i}=e;vve({sharedFs:i,getStartingRoot:e=>{let n=_n(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)=>JG(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>V7().slice(10,22),splitResult:(e,t)=>H7(e,t)})}async function Bve(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-D_PY6ku1.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))+`
5215
+ `,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 Vve(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-CnkYvHKI.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 Hve(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 Rv(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})},Uve(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Uve(e){let t=p();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:()=>zv()}}function Wve(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-CMDznnSn.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 Gve(){Er(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-DXI2D0Qu.js`);return e()})}function Kve(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-DXI2D0Qu.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 qve(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-GrjFkpDG.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 Jve(){return pt()}async function Yve(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Gve();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await Ive(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?h_(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new Tve(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Lve(l,e,o);s(`lick-manager-ready`),f&&zve({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),W9().__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await Bve({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});W9().__slicc_wsSubscribers=h;let g=null;Jve()&&(g=await Vve(p,o,e.localLickWsUrl??null));let _=Hve(n,p,o);f&&Wve(f,p,o),a||await Rve(l),s(`cone-bootstrapped`),f&&Kve(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await qve(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=jve({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 Xve({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 Xve(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)}Zve({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Zve(e){let t=W9();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,WG(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[B7]}const G9=`x-bypass-llm-proxy`;function Qve(e,t,n){return t?(r,i)=>{if(!$ve(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 $ve(e,t,n){if(tye(e,t))return!0;let r=n?.()??null;return r?eye(e,r,t):!1}function eye(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 tye(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 nye(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 rye=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(!iye(e)||e.source!==`panel`)return;let t=e.payload;aye(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=zG(l(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 iye(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 aye(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 oye=class extends t9{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 sye(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new rye({transport:t,processManager:i,createShell:(a,o)=>new oye(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??pt,getLeaderStatus:e.webhook?.getLeaderStatus??Zn},processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function cye(e){let t=new lye(e);return t.start(),{stop:()=>t.dispose()}}var lye=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(!uye(e)||e.source!==`panel`)return;let t=e.payload;if(dye(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(fye(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(pye(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 Un(`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 Un(`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(mye(e.type),e.requestId,new Un(`EACCES`,`vfs-rpc-host has no writable backend wired`),hye(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 Un(`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 Un(`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 Un(`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 uye(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function dye(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 fye(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 pye(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function mye(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 hye(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof Un?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function gye(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Qve(e.bind(globalThis),t,_ye)}function _ye(){let e=Rt();if(!e)return null;try{return new URL(e).origin}catch{return null}}function vye(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 yye=nye(e=>Sye(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&yye.handle(e.data)});function bye(e){let t=Jee(e.pageBuildId,`6.99.6-mtajtq75`);return()=>{t&&hi(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.99.6-mtajtq75`)}}function xye(e){gye(),zt(e.localApiBaseUrl??null),Pt(e.bridgeToken??null),PG(e.syncFsBridgeEnabled??!1),Lt(e.extensionDelegateId??null),vye(e.localStorageSeed??{}),e.flagFloat&&zee(e.flagFloat)}async function Sye(e){Kee(e.instanceId);let t=bye(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{xye(e),_i().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=Xee(e.kernelPort),a=new Ov(r),o=Ov.createCallbacks(a),c=new Zee(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new Tee(c);Y9=await Yve({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(Oee(i));let m=await wye({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){Cye(e.kernelPort,t)}}function Cye(e,t){qee(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 wye(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=sye({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=cye({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),i=await Tye(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function Tye(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CO3wuKjp.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-Co-pb0x0.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())});