sliccy 6.43.1 → 6.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/ui/assets/{account-store-D2IK2qHq.js → account-store-BfqIrMMe.js} +1 -1
  2. package/dist/ui/assets/{account-store-BzWzQYN1.js → account-store-BkG4BDQC.js} +1 -1
  3. package/dist/ui/assets/{adobe-D1tGasrx.js → adobe-AHM3MRvp.js} +1 -1
  4. package/dist/ui/assets/{adobe-B2LOb2Ih.js → adobe-C6T_0i0A.js} +1 -1
  5. package/dist/ui/assets/{apply-layout-DGjlIg3B.js → apply-layout-DPvksNi2.js} +1 -1
  6. package/dist/ui/assets/{apps-WBxVtivp.js → apps-3MvdDBMc.js} +1 -1
  7. package/dist/ui/assets/{azure-openai-Bcr3RUKI.js → azure-openai-ChaObvN0.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-BrJf_2kZ.js → azure-openai-DauBJZ6w.js} +1 -1
  9. package/dist/ui/assets/{cerebras-BU60Ozs0.js → cerebras-B1M_Nhi8.js} +1 -1
  10. package/dist/ui/assets/{cerebras-DFf0mQaP.js → cerebras-M2wuTTRu.js} +1 -1
  11. package/dist/ui/assets/{composer-speech-CNhvMpkj.js → composer-speech-DjrdK6qX.js} +1 -1
  12. package/dist/ui/assets/{connect-surface-BbqEQN5f.js → connect-surface-C1kBb_wz.js} +1 -1
  13. package/dist/ui/assets/{ensure-speech-assets-Djt8o5f7.js → ensure-speech-assets-DO-sSGi6.js} +1 -1
  14. package/dist/ui/assets/{fs-yLPrTusT.js → fs-CEdcSaaF.js} +2 -2
  15. package/dist/ui/assets/{fs-UFiIQf1n.js → fs-CwhZvLDc.js} +1 -1
  16. package/dist/ui/assets/{github-copilot-B9kvpQTt.js → github-copilot-DzYB2zAw.js} +1 -1
  17. package/dist/ui/assets/{github-copilot-Bjycm0uY.js → github-copilot-q5qtLl1S.js} +1 -1
  18. package/dist/ui/assets/{github-BUB4blnB.js → github-h8ItWdXm.js} +1 -1
  19. package/dist/ui/assets/{github-install-AllTWJoC.js → github-install-DIeJprV5.js} +1 -1
  20. package/dist/ui/assets/{github-CDTQ_VR3.js → github-xXbjvj_q.js} +2 -2
  21. package/dist/ui/assets/{github-zip-DF9OueMM.js → github-zip-DSYHJoT0.js} +1 -1
  22. package/dist/ui/assets/{hear-krvcqhL7.js → hear-CorI8zW2.js} +1 -1
  23. package/dist/ui/assets/{hear-C4KEOBVf.js → hear-DyYjYZXw.js} +1 -1
  24. package/dist/ui/assets/{kernel-worker-BkcPKOHD.js → kernel-worker-BksrbsiK.js} +29 -29
  25. package/dist/ui/assets/{kokoro-engine-CiPWAMSR.js → kokoro-engine-u_9YkV7P.js} +1 -1
  26. package/dist/ui/assets/{local-llm-BdNJXgbX.js → local-llm-B1inFenw.js} +1 -1
  27. package/dist/ui/assets/{local-llm-B8l1KARS.js → local-llm-Bi8giqeq.js} +1 -1
  28. package/dist/ui/assets/{main-CLBsTy2u.js → main-BgdEVXnN.js} +3 -3
  29. package/dist/ui/assets/{mount-C8rIbmmr.js → mount-BhXjPSMe.js} +1 -1
  30. package/dist/ui/assets/{mount-BySj3d6Z.js → mount-DsBbQvRx.js} +2 -2
  31. package/dist/ui/assets/{mount-recovery-BK_G25OD.js → mount-recovery-DapDhhBv.js} +1 -1
  32. package/dist/ui/assets/{new-session-C9GJ_PKI.js → new-session-D0GziV3t.js} +2 -2
  33. package/dist/ui/assets/{oauth-bootstrap-BMKtjQXh.js → oauth-bootstrap-exJhjKek.js} +2 -2
  34. package/dist/ui/assets/{openai-codex-D_Awg71A.js → openai-codex-B5d5fatr.js} +1 -1
  35. package/dist/ui/assets/{openai-codex-CK_tnINi.js → openai-codex-_wi2GlfO.js} +1 -1
  36. package/dist/ui/assets/{openrouter-qXZ6rHij.js → openrouter-DF11pL27.js} +1 -1
  37. package/dist/ui/assets/{openrouter-Ao1d_DFx.js → openrouter-PxN34b-T.js} +1 -1
  38. package/dist/ui/assets/{openrouter-oauth-CIbrg7_B.js → openrouter-oauth-6UZDhQTB.js} +1 -1
  39. package/dist/ui/assets/{openrouter-oauth-CMXSdSTW.js → openrouter-oauth-DQLx11_A.js} +1 -1
  40. package/dist/ui/assets/{panel-rpc-handlers-BEZkTElh.js → panel-rpc-handlers-CDZ2M3GK.js} +2 -2
  41. package/dist/ui/assets/{provider-CUeWEkx7.js → provider-Bw_Z5wgp.js} +1 -1
  42. package/dist/ui/assets/{provider-DateAcUE.js → provider-Cg9DqCH6.js} +2 -2
  43. package/dist/ui/assets/{provider-settings-CgibVhar.js → provider-settings-0ASsdEo7.js} +1 -1
  44. package/dist/ui/assets/{provider-settings-D1X4bwtI.js → provider-settings-CqsZtmc2.js} +1 -1
  45. package/dist/ui/assets/{provider-store-access-MV-XHhP4.js → provider-store-access-BJPtEdx_.js} +2 -2
  46. package/dist/ui/assets/provider-store-access-Zeas5UVO.js +1 -0
  47. package/dist/ui/assets/{providers-DPwCuiPq.js → providers-D2SzyuS_.js} +2 -2
  48. package/dist/ui/assets/{providers-CyERqESm.js → providers-DTkQsdaJ.js} +1 -1
  49. package/dist/ui/assets/{quick-llm-ga7kfL7T.js → quick-llm-B1IKnoro.js} +1 -1
  50. package/dist/ui/assets/{recovery-screen-mj0G_I-U.js → recovery-screen-vCthBaZL.js} +1 -1
  51. package/dist/ui/assets/{redirect-uri-DhE_B95B.js → redirect-uri-pK4MGnYj.js} +1 -1
  52. package/dist/ui/assets/{session-freezer-C4S_1c8T.js → session-freezer-CWeTl5Ug.js} +2 -2
  53. package/dist/ui/assets/{setup-feature-flags-remote-DzhAznfO.js → setup-feature-flags-remote-DCnULnlG.js} +1 -1
  54. package/dist/ui/assets/{setup-standalone-prelude-U-vJ2anA.js → setup-standalone-prelude-CFakSgWH.js} +1 -1
  55. package/dist/ui/assets/{setup-sudo-DjFaSjGu.js → setup-sudo-DLsSOUDP.js} +2 -2
  56. package/dist/ui/assets/{skills-78jjtkP_.js → skills-BAv4QH3_.js} +1 -1
  57. package/dist/ui/assets/{speak-DLj1bEBh.js → speak-3ERYo9mh.js} +1 -1
  58. package/dist/ui/assets/{speak-BqGkX52J.js → speak-BJfvdDl7.js} +1 -1
  59. package/dist/ui/assets/{store-BrXMXbEO.js → store-DmIA09wr.js} +1 -1
  60. package/dist/ui/assets/{store-DmVOsDRg.js → store-VHFEG-KZ.js} +1 -1
  61. package/dist/ui/assets/{sudo-BR34TO-_.js → sudo-DMWEEnXF.js} +1 -1
  62. package/dist/ui/assets/{transformers-env-CflaNVb-.js → transformers-env-B2igCBi6.js} +1 -1
  63. package/dist/ui/assets/{transformers-env-XCYT1oxA.js → transformers-env-DU9KkwRf.js} +1 -1
  64. package/dist/ui/assets/{upgrade-detection-TqZQh5uz.js → upgrade-detection-kOnlsa6m.js} +1 -1
  65. package/dist/ui/assets/{voice-reply-AGGoZ9Ey.js → voice-reply-DuabCBM2.js} +1 -1
  66. package/dist/ui/assets/{wc-extension-D8aXdvAm.js → wc-extension-Csg9tKxf.js} +2 -2
  67. package/dist/ui/assets/{wc-follower-ghSAz5ud.js → wc-follower-C5ErFyaa.js} +3 -3
  68. package/dist/ui/assets/{wc-live-CwvjwIBw.js → wc-live-DiqRwfJl.js} +3 -3
  69. package/dist/ui/assets/{wc-nav-Cyy-b43_.js → wc-nav-_JOvFwfI.js} +2 -2
  70. package/dist/ui/assets/{wc-onboarding-K5WLiLcU.js → wc-onboarding-BSs6x2FR.js} +2 -2
  71. package/dist/ui/assets/{wc-placeholder-rXdt80Kf.js → wc-placeholder-UxILszwu.js} +2 -2
  72. package/dist/ui/assets/{wc-settings-BykuRVgp.js → wc-settings-CzWoxwvc.js} +2 -2
  73. package/dist/ui/assets/{wc-shell-BvUSkMkd.js → wc-shell-FLfdSQyK.js} +2 -2
  74. package/dist/ui/assets/{wc-sprinkles-Bu5spc8F.js → wc-sprinkles-CCAwa0Z7.js} +2 -2
  75. package/dist/ui/assets/{wc-tray-Cc154F7D.js → wc-tray-DV5jBUwL.js} +2 -2
  76. package/dist/ui/assets/{whisper-engine-i7jnYUoj.js → whisper-engine-DKSa8auO.js} +1 -1
  77. package/dist/ui/assets/{whisper-session-hMgosjVG.js → whisper-session-CnbZ_WW2.js} +2 -2
  78. package/dist/ui/assets/{xai-grok-BPEdJlpt.js → xai-grok-BANdowXb.js} +1 -1
  79. package/dist/ui/assets/{xai-grok-Bf-Tv5QQ.js → xai-grok-DgvHKcEu.js} +1 -1
  80. package/dist/ui/index.html +6 -6
  81. package/dist/ui/packages/webapp/index.html +6 -6
  82. package/package.json +1 -1
  83. package/dist/ui/assets/provider-store-access-CtOIj6nl.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{n as i,r as a,t as o}from"./panel-rpc-BPwAqRch.js";import{a as s,t as c}from"./providers-CyERqESm.js";import{n as l,t as u}from"./base64-Ba7QB87Z.js";import{a as d,i as f,n as p,r as m,s as h,t as g}from"./src-CcFD5QfS.js";import{$ as _,$t as v,An as y,At as b,Bt as x,Cn as S,Ct as C,D as w,Dn as T,Dt as E,E as D,En as ee,Et as te,F as O,Ft as ne,Gt as k,Ht as re,I as ie,It as ae,J as oe,Jt as se,Kt as ce,Lt as le,Mt as ue,Nt as de,On as fe,Ot as A,Pt as pe,Q as me,Qt as he,R as ge,Rt as _e,Sn as j,St as ve,Tn as ye,Tt as be,Ut as M,Vt as N,Wt as xe,X as Se,Xt as P,Y as Ce,Yt as F,Z as we,Zt as I,_n as L,_t as Te,an as R,at as Ee,bn as De,bt as z,cn as Oe,ct as ke,dn as B,dt as Ae,en as je,et as Me,fn as Ne,ft as Pe,gn as Fe,gt as Ie,hn as Le,ht as Re,in as ze,it as Be,jn as Ve,jt as He,kn as Ue,kt as We,ln as eee,lt as tee,m as Ge,mn as Ke,mt as qe,nn as Je,nt as Ye,on as V,ot as Xe,pn as Ze,pt as Qe,q as $e,qt as et,rn as tt,rt as nt,sn as rt,st as it,tn as at,tt as nee,un as ot,ut as ree,vn as iee,vt as st,w as ct,wn as lt,wt as ut,xn as dt,xt as ft,yn as aee,yt as pt,zt as mt}from"./account-store-D2IK2qHq.js";import{a as ht,c as gt,d as _t,i as vt,l as yt,n as bt,r as xt,s as St,t as Ct,u as oee}from"./proxied-fetch-BML_ivCH.js";import{t as wt}from"./runtime-env-byAg9ij-.js";import{r as see}from"./binary-cache-bSOhqXB1.js";import{n as Tt,r as Et,t as Dt}from"./fetch-body-DDu_AU5I.js";import{i as Ot,n as kt,r as At,t as jt}from"./path-utils-Rm3AltuN.js";import{d as Mt}from"./transform-messages-DEFauvrq.js";import{l as Nt,m as Pt}from"./bedrock-camp-BfNg24Ce.js";import{t as Ft}from"./__vite-browser-external-5eBdwsFd.js";import{n as It,t as Lt}from"./mime-types-D7IV6i7k.js";import"./logger-DQgFbfwx.js";import{n as Rt,o as zt,s as Bt}from"./tool-ui-Dq9m-pLC.js";import{a as Vt,i as Ht,o as Ut,r as Wt,t as Gt}from"./agent-message-to-chat-VVddq_Ha.js";import{a as Kt,i as qt,n as Jt,o as Yt,r as Xt,t as Zt}from"./backend-local-rrSF0A3j.js";import{t as Qt}from"./types-idfTVsM8.js";import{a as cee,i as lee,n as $t,r as en}from"./mount-C8rIbmmr.js";import{o as tn}from"./mount-table-store-DrF_Ifaz.js";import{t as nn}from"./remote-cache-JAv9sQH_.js";import{r as rn,t as an}from"./mount-recovery-BK_G25OD.js";import{C as on,D as sn,E as cn,S as ln,_ as un,a as dn,b as fn,d as pn,g as mn,h as hn,m as gn,n as _n,o as vn,r as yn,s as bn,t as xn,u as Sn,w as Cn,y as wn}from"./db-BTiVtoD4.js";import{a as Tn,i as En,n as Dn,r as On}from"./tray-runtime-config-ObNW_fQX.js";import{a as kn,i as An,n as jn,o as Mn,r as Nn}from"./runtime-mode-DVhcM6TX.js";import{a as Pn,c as Fn,d as In,i as Ln,l as Rn,n as uee,o as zn,s as dee,t as fee,u as pee}from"./lick-manager-GJgyahla.js";import{a as mee,n as Bn,r as hee}from"./fs-UFiIQf1n.js";import{a as H,c as Vn,i as gee,l as _ee,n as vee,o as Hn,r as yee,s as bee}from"./cost-command-C9faxPNJ.js";import{a as Un,c as xee,d as Wn,f as See,i as Cee,l as Gn,m as Kn,n as wee,o as qn,p as Jn,r as Yn,s as Tee,u as Eee}from"./skills-78jjtkP_.js";import{n as Dee,t as Oee}from"./llm-session-id-ZObKEXzb.js";import{n as kee,r as Aee}from"./frozen-archive-format--7sONywg.js";import{i as jee,r as Xn}from"./browser-BAL8RehA.js";import{n as Zn,t as Qn}from"./safe-buffer-B2wnAhUx.js";import"./global-db-DJXlpNui.js";import{a as $n,i as er,r as tr,t as nr}from"./git-config-DA8M5e8O.js";import{t as rr}from"./process-manager-unCzdHp3.js";import{C as ir,O as ar,S as or,_ as sr,a as cr,b as lr,c as ur,f as dr,g as fr,h as pr,i as mr,k as hr,l as gr,m as _r,n as vr,o as yr,p as br,r as xr,s as Sr,t as Cr,u as wr,v as Tr,x as Er,y as Dr}from"./shared-D4Q0n73P.js";import{n as Or,t as kr}from"./esbuild-wasm-CpCoMVKF.js";import{n as Ar,t as jr}from"./wasm-compiler-Ct7QZURL.js";import{a as Mr,i as Nr,r as Pr,t as Fr}from"./script-catalog-e0GUPxAf.js";import{c as Ir,d as Lr,f as Rr,i as zr,l as Br,n as Vr,p as Hr,s as Ur,u as Wr}from"./github-zip-DF9OueMM.js";import{a as Gr,i as Kr,n as qr,o as Jr,r as Yr,s as Xr}from"./github-install-AllTWJoC.js";import{n as Mee,t as Nee}from"./magick-wasm-DZJeTjwR.js";import{a as Pee,c as Fee,i as Iee,l as Lee,n as Ree,o as Zr,r as Qr,s as zee,t as Bee,u as $r}from"./installer-C2_Cz1lU.js";import{t as ei}from"./local-llm-B8l1KARS.js";import{t as ti}from"./client-CeGDTjnw.js";import{t as ni}from"./redirect-uri-DhE_B95B.js";var ri=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 ii(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 ai=r(`cdp`);var oi=class{ws=null;nextId=1;_superseded=!1;pending=new ri;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,ai.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(ai.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(),ai.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),ai.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 ii(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;ai.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(ai.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;ai.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,ai.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):ai.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 si=`(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{n as i,r as a,t as o}from"./panel-rpc-BPwAqRch.js";import{a as s,t as c}from"./providers-DTkQsdaJ.js";import{n as l,t as u}from"./base64-Ba7QB87Z.js";import{a as d,i as f,n as p,r as m,s as h,t as g}from"./src-CcFD5QfS.js";import{$ as _,$t as v,An as y,At as b,Bt as x,Cn as S,Ct as C,D as w,Dn as T,Dt as E,E as D,En as ee,Et as te,F as O,Ft as ne,Gt as k,Ht as re,I as ie,It as ae,J as oe,Jt as se,Kt as ce,Lt as le,Mt as ue,Nt as de,On as fe,Ot as A,Pt as pe,Q as me,Qt as he,R as ge,Rt as _e,Sn as j,St as ve,Tn as ye,Tt as be,Ut as M,Vt as N,Wt as xe,X as Se,Xt as P,Y as Ce,Yt as F,Z as we,Zt as I,_n as L,_t as Te,an as R,at as Ee,bn as De,bt as z,cn as Oe,ct as ke,dn as B,dt as Ae,en as je,et as Me,fn as Ne,ft as Pe,gn as Fe,gt as Ie,hn as Le,ht as Re,in as ze,it as Be,jn as Ve,jt as He,kn as Ue,kt as We,ln as eee,lt as tee,m as Ge,mn as Ke,mt as qe,nn as Je,nt as Ye,on as V,ot as Xe,pn as Ze,pt as Qe,q as $e,qt as et,rn as tt,rt as nt,sn as rt,st as it,tn as at,tt as nee,un as ot,ut as ree,vn as iee,vt as st,w as ct,wn as lt,wt as ut,xn as dt,xt as ft,yn as aee,yt as pt,zt as mt}from"./account-store-BfqIrMMe.js";import{a as ht,c as gt,d as _t,i as vt,l as yt,n as bt,r as xt,s as St,t as Ct,u as oee}from"./proxied-fetch-BML_ivCH.js";import{t as wt}from"./runtime-env-byAg9ij-.js";import{r as see}from"./binary-cache-bSOhqXB1.js";import{n as Tt,r as Et,t as Dt}from"./fetch-body-DDu_AU5I.js";import{i as Ot,n as kt,r as At,t as jt}from"./path-utils-Rm3AltuN.js";import{d as Mt}from"./transform-messages-DEFauvrq.js";import{l as Nt,m as Pt}from"./bedrock-camp-BfNg24Ce.js";import{t as Ft}from"./__vite-browser-external-5eBdwsFd.js";import{n as It,t as Lt}from"./mime-types-D7IV6i7k.js";import"./logger-DQgFbfwx.js";import{n as Rt,o as zt,s as Bt}from"./tool-ui-Dq9m-pLC.js";import{a as Vt,i as Ht,o as Ut,r as Wt,t as Gt}from"./agent-message-to-chat-VVddq_Ha.js";import{a as Kt,i as qt,n as Jt,o as Yt,r as Xt,t as Zt}from"./backend-local-rrSF0A3j.js";import{t as Qt}from"./types-idfTVsM8.js";import{a as cee,i as lee,n as $t,r as en}from"./mount-BhXjPSMe.js";import{o as tn}from"./mount-table-store-DrF_Ifaz.js";import{t as nn}from"./remote-cache-JAv9sQH_.js";import{r as rn,t as an}from"./mount-recovery-DapDhhBv.js";import{C as on,D as sn,E as cn,S as ln,_ as un,a as dn,b as fn,d as pn,g as mn,h as hn,m as gn,n as _n,o as vn,r as yn,s as bn,t as xn,u as Sn,w as Cn,y as wn}from"./db-BTiVtoD4.js";import{a as Tn,i as En,n as Dn,r as On}from"./tray-runtime-config-ObNW_fQX.js";import{a as kn,i as An,n as jn,o as Mn,r as Nn}from"./runtime-mode-DVhcM6TX.js";import{a as Pn,c as Fn,d as In,i as Ln,l as Rn,n as uee,o as zn,s as dee,t as fee,u as pee}from"./lick-manager-GJgyahla.js";import{a as mee,n as Bn,r as hee}from"./fs-CwhZvLDc.js";import{a as H,c as Vn,i as gee,l as _ee,n as vee,o as Hn,r as yee,s as bee}from"./cost-command-C9faxPNJ.js";import{a as Un,c as xee,d as Wn,f as See,i as Cee,l as Gn,m as Kn,n as wee,o as qn,p as Jn,r as Yn,s as Tee,u as Eee}from"./skills-BAv4QH3_.js";import{n as Dee,t as Oee}from"./llm-session-id-ZObKEXzb.js";import{n as kee,r as Aee}from"./frozen-archive-format--7sONywg.js";import{i as jee,r as Xn}from"./browser-BAL8RehA.js";import{n as Zn,t as Qn}from"./safe-buffer-B2wnAhUx.js";import"./global-db-DJXlpNui.js";import{a as $n,i as er,r as tr,t as nr}from"./git-config-DA8M5e8O.js";import{t as rr}from"./process-manager-unCzdHp3.js";import{C as ir,O as ar,S as or,_ as sr,a as cr,b as lr,c as ur,f as dr,g as fr,h as pr,i as mr,k as hr,l as gr,m as _r,n as vr,o as yr,p as br,r as xr,s as Sr,t as Cr,u as wr,v as Tr,x as Er,y as Dr}from"./shared-D4Q0n73P.js";import{n as Or,t as kr}from"./esbuild-wasm-CpCoMVKF.js";import{n as Ar,t as jr}from"./wasm-compiler-Ct7QZURL.js";import{a as Mr,i as Nr,r as Pr,t as Fr}from"./script-catalog-e0GUPxAf.js";import{c as Ir,d as Lr,f as Rr,i as zr,l as Br,n as Vr,p as Hr,s as Ur,u as Wr}from"./github-zip-DSYHJoT0.js";import{a as Gr,i as Kr,n as qr,o as Jr,r as Yr,s as Xr}from"./github-install-DIeJprV5.js";import{n as Mee,t as Nee}from"./magick-wasm-DZJeTjwR.js";import{a as Pee,c as Fee,i as Iee,l as Lee,n as Ree,o as Zr,r as Qr,s as zee,t as Bee,u as $r}from"./installer-C2_Cz1lU.js";import{t as ei}from"./local-llm-Bi8giqeq.js";import{t as ti}from"./client-CeGDTjnw.js";import{t as ni}from"./redirect-uri-pK4MGnYj.js";var ri=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 ii(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 ai=r(`cdp`);var oi=class{ws=null;nextId=1;_superseded=!1;pending=new ri;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,ai.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(ai.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(),ai.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),ai.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 ii(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;ai.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(ai.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;ai.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,ai.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):ai.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 si=`(function() {
2
2
  'use strict';
3
3
 
4
4
  // ===== DOM Utilities =====
@@ -5381,7 +5381,7 @@ Examples:
5381
5381
  skill list
5382
5382
  skill info bluebubbles
5383
5383
  skill read bluebubbles
5384
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-78jjtkP_.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${BW()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0}:{stdout:HW(t,`Discoverable skills`),stderr:``,exitCode:0}}case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
5384
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./skills-BAv4QH3_.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${BW()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0}:{stdout:HW(t,`Discoverable skills`),stderr:``,exitCode:0}}case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
5385
5385
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:UW(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
5386
5386
  `,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+`
5387
5387
  `,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}}})}async function KW(e,t){let n=`${Hr}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ir(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=Et(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Gr(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function qW(e,t){let n=`${Hr}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${Ir(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=Et(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Gr(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const JW=[{label:`Tessl`,host:new URL(Hr).host,fetch:KW},{label:`browse.sh`,host:new URL(Br).host,fetch:MW}];function YW(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function XW(e,t,n=1){let r=await Promise.allSettled(JW.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=YW(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=JW[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
@@ -5407,7 +5407,7 @@ Examples:
5407
5407
  `,{stdout:s,stderr:``,exitCode:0}}function rG(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
5408
5408
  `,exitCode:1}:Fn(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
5409
5409
  `,exitCode:1}}function iG(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`||!Rn(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
5410
- `,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=rG(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 aG(e){let t=await(await import(`./skills-78jjtkP_.js`).then(e=>e.t)).discoverSkills(e);return t.length===0?{stdout:`No discoverable local skills found.\n\n${BW()}`,stderr:``,exitCode:0}:{stdout:HW(t,`Discoverable local skills`),stderr:``,exitCode:0}}async function oG(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./skills-78jjtkP_.js`).then(e=>e.t);if(e===`info`){let e=await r.getSkillInfo(n,t);return e?{stdout:UW(e),stderr:``,exitCode:0}:{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
5410
+ `,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=rG(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 aG(e){let t=await(await import(`./skills-BAv4QH3_.js`).then(e=>e.t)).discoverSkills(e);return t.length===0?{stdout:`No discoverable local skills found.\n\n${BW()}`,stderr:``,exitCode:0}:{stdout:HW(t,`Discoverable local skills`),stderr:``,exitCode:0}}async function oG(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./skills-BAv4QH3_.js`).then(e=>e.t);if(e===`info`){let e=await r.getSkillInfo(n,t);return e?{stdout:UW(e),stderr:``,exitCode:0}:{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
5411
5411
  `,stderr:``,exitCode:0}}async function sG(e,t,n,r,i,a,o){let s=``,c=``,l=0,u=e.length;for(let d=0;d<e.length;d++){let f=e[d],p=await Jr(f.path,f.name,r,i,a),m=d+1,h=((Date.now()-o)/1e3).toFixed(1),g=(Date.now()-o)/m,_=m<u?` (~${Math.round((u-m)*g/1e3)}s remaining)`:``;p.ok?(s+=`[${m}/${u}] Installed "${f.name}" from ${t}/${n} (${h}s)${_}\n`,l++):(s+=`[${m}/${u}] Failed "${f.name}": ${p.error}${_}\n`,c+=`upskill: ${p.error}\n`)}return{output:s,errors:c,successCount:l}}async function cG(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 qr(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 lG(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await qr(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 uG(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 dG(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Ur(r),l=await Yr(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:uG(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:uG(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 Vr(i,a,r,o);if(e.status===`ok`){let r=await sG(u,i,a,zr(e.files),n,t.force,f);({output:p,errors:m,successCount:h}=r)}else{let e=await cG(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await lG(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 Xr()),{stdout:p,stderr:m,exitCode:+!!m}}function fG(e,t,n){return H(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return WW();if(r[0]===`tabs`)return tG(e,t,n,r.includes(`--json`));if(r[0]===`recommendations`)return nG(e,t,r.includes(`--install`));if(r[0]===`list`)return aG(e);if(r[0]===`info`||r[0]===`read`)return oG(r[0],r[1],e);if(r[0]===`search`)return pG(r,t);let a=iG(r);if(a.earlyReturn)return a.earlyReturn;if(!a.sourceRef)return WW();if(a.sourceRef.startsWith(`tessl:`))return mG(a.sourceRef,a.force,e,t);let o=FW(a.sourceRef);if(o)return zW(o.hostname,o.task,e,t,a.force);let s=Kr(a.sourceRef);return s?dG(s,a,e,t):{stdout:``,stderr:`upskill: unrecognized source "${a.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function pG(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?XW(a,t,i):WW()}async function mG(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
5412
5412
  `,exitCode:1};let a=await qW(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ur(r);return qr(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function hG(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
5413
5413
 
@@ -6074,8 +6074,8 @@ Options:
6074
6074
  `;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
6075
6075
  `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced 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 kQ(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function AQ(e){return e instanceof Error?e.message:String(e)}function jQ(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
6076
6076
  `)+(t.length?`
6077
- `:``)}async function MQ(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:jQ((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:kQ(`device enumeration unavailable`):{stdout:jQ((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return kQ(AQ(e))}}async function NQ(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./hear-C4KEOBVf.js`);return{stdout:OQ(t?n():e()),stderr:``,exitCode:0}}return{stdout:OQ(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return kQ(AQ(e))}}async function PQ(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return kQ(`cannot open ${r}: No such file`)}let o=mr(i);if(!o.startsWith(`audio/`)&&!o.startsWith(`video/`))return kQ(`${r} is not an audio file`);let s=new ArrayBuffer(a.byteLength);new Uint8Array(s).set(a);try{return{stdout:(e.local?await(await import(`./hear-C4KEOBVf.js`)).hearTranscribe(s,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:s,lang:t.lang},{timeoutMs:6e5})).transcript+`
6078
- `,stderr:``,exitCode:0}}catch(e){return kQ(`transcription failed: ${AQ(e)}`)}}async function FQ(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./hear-C4KEOBVf.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
6077
+ `:``)}async function MQ(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:jQ((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:kQ(`device enumeration unavailable`):{stdout:jQ((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return kQ(AQ(e))}}async function NQ(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./hear-DyYjYZXw.js`);return{stdout:OQ(t?n():e()),stderr:``,exitCode:0}}return{stdout:OQ(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return kQ(AQ(e))}}async function PQ(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return kQ(`cannot open ${r}: No such file`)}let o=mr(i);if(!o.startsWith(`audio/`)&&!o.startsWith(`video/`))return kQ(`${r} is not an audio file`);let s=new ArrayBuffer(a.byteLength);new Uint8Array(s).set(a);try{return{stdout:(e.local?await(await import(`./hear-DyYjYZXw.js`)).hearTranscribe(s,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:s,lang:t.lang},{timeoutMs:6e5})).transcript+`
6078
+ `,stderr:``,exitCode:0}}catch(e){return kQ(`transcription failed: ${AQ(e)}`)}}async function FQ(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./hear-DyYjYZXw.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
6079
6079
  `,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
6080
6080
  `,exitCode:1}}catch(e){return kQ(AQ(e))}}function IQ(){return H(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return CQ();let n=DQ(e);if(`exitCode`in n)return n;let r={local:a(),panelRpc:i()};return!r.local&&!r.panelRpc?kQ(`speech recognition unavailable in this environment`):n.devices?MQ(r):n.status||n.warmup?NQ(r,n.warmup):n.inputFile?PQ(r,n,t):FQ(r,n)})}const LQ=[`playwright-cli`,`playwright`,`puppeteer`],RQ=new WeakMap,zQ=r(`playwright`);function BQ(e,t){let n=RQ.get(e);n||(n=new WeakMap,RQ.set(e,n));let r=n.get(t);return r||(r={snapshots:new Map,appTabId:null,harRecorder:null,sessionDirsCreated:!1,teleportWatchers:new Map,consoleMessages:new Map,consoleCleanup:new Map,networkRequests:new Map,networkRequestIndex:new Map,networkCleanup:new Map,routes:new Map,routeCleanup:new Map,lastMousePosition:new Map},n.set(t,r)),r}function VQ(e){let t=e.match(/^(f[0-9]+)(e[0-9]+)$/);return t?{framePrefix:t[1],isIframe:!0}:{framePrefix:``,isIframe:!1}}const HQ=u,UQ=new Set([`click`,`dblclick`,`fill`,`type`,`press`,`goto`,`navigate`,`select`,`check`,`uncheck`,`drag`,`dialog-accept`,`dialog-dismiss`,`drop`]);function WQ(e){return e.toISOString().replace(/:/g,`-`)}function GQ(e){return e instanceof Qt||typeof e==`object`&&e&&`code`in e?e.code===`EEXIST`:e instanceof Error&&e.message.includes(`EEXIST`)}const KQ=`function(text) {
6081
6081
  const el = this;
@@ -6742,7 +6742,7 @@ Common base URLs:
6742
6742
  llama.cpp http://localhost:8080/v1
6743
6743
  vLLM http://localhost:8000/v1
6744
6744
  Jan http://localhost:1337/v1
6745
- `}function a3(){return H(r3,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:i3(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./provider-settings-CgibVhar.js`),{verifyConnection:a}=await import(`./local-llm-B8l1KARS.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(r3);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
6745
+ `}function a3(){return H(r3,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:i3(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./provider-settings-0ASsdEo7.js`),{verifyConnection:a}=await import(`./local-llm-Bi8giqeq.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(r3);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
6746
6746
  `,exitCode:1};let c=await a(s,t(r3)??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(`
6747
6747
  `)+`
6748
6748
  `,exitCode:1}}if(o===`discover`){let e=n(r3)??``;return i(r3,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(`
@@ -6786,20 +6786,20 @@ authorization-code flow, stores the access token, and retries.
6786
6786
  On success, the server is persisted to /workspace/.mcp/servers.json and
6787
6787
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
6788
6788
  short name resolves on the PATH.
6789
- `);let n=e.filter(e=>!e.startsWith(`--`));if(n.length<2)return f3(`mcp add: expected <url> <name>`);let[r,i]=n;if(!/^https?:\/\//i.test(r))return f3(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return f3(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-BrXMXbEO.js`).then(e=>e.r);if(await a(i,t.fs))return f3(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-CeGDTjnw.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 g3(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>I3(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 V3(i,t);let m=await W3(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-CUeWEkx7.js`);e({name:i,serverUrl:r,auth:u})}return d3([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${u3}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
6789
+ `);let n=e.filter(e=>!e.startsWith(`--`));if(n.length<2)return f3(`mcp add: expected <url> <name>`);let[r,i]=n;if(!/^https?:\/\//i.test(r))return f3(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return f3(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-DmIA09wr.js`).then(e=>e.r);if(await a(i,t.fs))return f3(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-CeGDTjnw.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 g3(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>I3(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 V3(i,t);let m=await W3(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Bw_Z5wgp.js`);e({name:i,serverUrl:r,auth:u})}return d3([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${u3}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
6790
6790
  `)+`
6791
- `)}async function g3(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r),c=await R3(r.oauthFetchImpl),l=r.oauthLauncher??await L3(),u=await i(e,n,c);l3.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ni(),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 _3(e,t){if(e.includes(`--help`)||e.includes(`-h`))return d3(`usage: mcp list
6792
- `);let{ensureAllMcpProvidersRegistered:n}=await import(`./provider-CUeWEkx7.js`);await n();let{listServers:r}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return d3("No MCP servers configured. Use `mcp add <url> <name>`.\n");let o=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of a){let t=i[e];o.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 d3(v3(o))}function v3(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(`
6791
+ `)}async function g3(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r),c=await R3(r.oauthFetchImpl),l=r.oauthLauncher??await L3(),u=await i(e,n,c);l3.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ni(),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 _3(e,t){if(e.includes(`--help`)||e.includes(`-h`))return d3(`usage: mcp list
6792
+ `);let{ensureAllMcpProvidersRegistered:n}=await import(`./provider-Bw_Z5wgp.js`);await n();let{listServers:r}=await import(`./store-DmIA09wr.js`).then(e=>e.r),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return d3("No MCP servers configured. Use `mcp add <url> <name>`.\n");let o=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of a){let t=i[e];o.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 d3(v3(o))}function v3(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(`
6793
6793
  `)+`
6794
6794
  `}async function y3(e,t){if(e[0]===`--help`||e[0]===`-h`)return d3(`usage: mcp search <query>
6795
6795
 
6796
6796
  Case-insensitive substring search across the cached tools of every
6797
6797
  registered MCP server. Matches tool name OR description and prints a
6798
6798
  table of (server, tool, description, match-field) rows.
6799
- `);if(e.length===0)return f3(`mcp search: expected <query>`);let n=e[0],r=n.toLowerCase(),{ensureAllMcpProvidersRegistered:i}=await import(`./provider-CUeWEkx7.js`);await i();let{listServers:a}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),o=await a(t.fs),s=Object.keys(o).sort();if(s.length===0)return d3("No MCP servers configured. Use `mcp add <url> <name>`.\n");let c=[];for(let e of s){let t=o[e].tools??[];for(let n of t){let t=n.description??``,i=n.name.toLowerCase().includes(r),a=t.toLowerCase().includes(r);if(!i&&!a)continue;let o=i&&a?`name+description`:i?`name`:`description`;c.push({server:e,tool:n.name,description:t,match:o})}}if(c.length===0)return d3(`No tools matched "${n}".\n`);c.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let l=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of c)l.push([e.server,e.tool,b3(e.description),e.match]);return d3(v3(l))}function b3(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function x3(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?f3(`mcp delete: expected <name>`):d3(`usage: mcp delete <name>
6800
- `);let n=e[0],{ensureMcpProviderRegistered:r,removeMcpProvider:i}=await import(`./provider-CUeWEkx7.js`);await r(n);let{deleteServer:a}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),o=await a(n,t.fs);await H3(n,t),await U3(n,t);let s=`mcp:${n}`,c=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r);t().some(e=>e.providerId===s)&&(await e(s),c=!0)}catch(e){l3.warn(`mcp delete: OAuth removal failed`,{providerId:s,error:e instanceof Error?e.message:String(e)})}let l=i(n);return!o&&!c&&!l?f3(`mcp delete: no server, alias, or account found for "${n}"`):d3([`Removed MCP server "${n}"`,` servers.json: ${o?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${c?`removed`:`not present`}`,` provider: ${l?`unregistered`:`not registered`}`].join(`
6799
+ `);if(e.length===0)return f3(`mcp search: expected <query>`);let n=e[0],r=n.toLowerCase(),{ensureAllMcpProvidersRegistered:i}=await import(`./provider-Bw_Z5wgp.js`);await i();let{listServers:a}=await import(`./store-DmIA09wr.js`).then(e=>e.r),o=await a(t.fs),s=Object.keys(o).sort();if(s.length===0)return d3("No MCP servers configured. Use `mcp add <url> <name>`.\n");let c=[];for(let e of s){let t=o[e].tools??[];for(let n of t){let t=n.description??``,i=n.name.toLowerCase().includes(r),a=t.toLowerCase().includes(r);if(!i&&!a)continue;let o=i&&a?`name+description`:i?`name`:`description`;c.push({server:e,tool:n.name,description:t,match:o})}}if(c.length===0)return d3(`No tools matched "${n}".\n`);c.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let l=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of c)l.push([e.server,e.tool,b3(e.description),e.match]);return d3(v3(l))}function b3(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function x3(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?f3(`mcp delete: expected <name>`):d3(`usage: mcp delete <name>
6800
+ `);let n=e[0],{ensureMcpProviderRegistered:r,removeMcpProvider:i}=await import(`./provider-Bw_Z5wgp.js`);await r(n);let{deleteServer:a}=await import(`./store-DmIA09wr.js`).then(e=>e.r),o=await a(n,t.fs);await H3(n,t),await U3(n,t);let s=`mcp:${n}`,c=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r);t().some(e=>e.providerId===s)&&(await e(s),c=!0)}catch(e){l3.warn(`mcp delete: OAuth removal failed`,{providerId:s,error:e instanceof Error?e.message:String(e)})}let l=i(n);return!o&&!c&&!l?f3(`mcp delete: no server, alias, or account found for "${n}"`):d3([`Removed MCP server "${n}"`,` servers.json: ${o?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${c?`removed`:`not present`}`,` provider: ${l?`unregistered`:`not registered`}`].join(`
6801
6801
  `)+`
6802
- `)}async function S3(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?f3(`mcp invoke: expected <name>`):d3(T3());let n=e[0],r=e.slice(1),{ensureMcpProviderRegistered:i}=await import(`./provider-CUeWEkx7.js`);await i(n);let{getServer:a}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),o=await a(n,t.fs);if(!o)return f3(`mcp invoke: unknown server "${n}" (run \`mcp add <url> ${n}\` first)`);let s=o.tools??[];if(r.length===0||r[0]===`--help`||r[0]===`-h`)return d3(E3(n,o,s));let c=r[0],l=s.find(e=>e.name===c);if(!l)return f3(`mcp invoke: unknown tool "${c}" on "${n}" (run \`${n}\` to list tools)`);let{timeoutMs:u,remaining:d,warnings:f}=C3(r.slice(1));if(d.includes(`--help`)||d.includes(`-h`))return d3(D3(n,l));let p=O3(d,l.inputSchema);if(!p.ok)return f3(`mcp invoke: ${p.error}`);let{McpClient:m}=await import(`./client-CeGDTjnw.js`).then(e=>e.n),h=new m({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>I3(n):void 0,...u===void 0?{}:{timeoutMs:u}});await h.initialize();let g=M3(await h.toolsCall(c,p.value));return f.length>0&&(g.stderr=f.map(e=>`${e}\n`).join(``)+g.stderr),g}function C3(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=w3(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=w3(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 w3(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 T3(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
6802
+ `)}async function S3(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?f3(`mcp invoke: expected <name>`):d3(T3());let n=e[0],r=e.slice(1),{ensureMcpProviderRegistered:i}=await import(`./provider-Bw_Z5wgp.js`);await i(n);let{getServer:a}=await import(`./store-DmIA09wr.js`).then(e=>e.r),o=await a(n,t.fs);if(!o)return f3(`mcp invoke: unknown server "${n}" (run \`mcp add <url> ${n}\` first)`);let s=o.tools??[];if(r.length===0||r[0]===`--help`||r[0]===`-h`)return d3(E3(n,o,s));let c=r[0],l=s.find(e=>e.name===c);if(!l)return f3(`mcp invoke: unknown tool "${c}" on "${n}" (run \`${n}\` to list tools)`);let{timeoutMs:u,remaining:d,warnings:f}=C3(r.slice(1));if(d.includes(`--help`)||d.includes(`-h`))return d3(D3(n,l));let p=O3(d,l.inputSchema);if(!p.ok)return f3(`mcp invoke: ${p.error}`);let{McpClient:m}=await import(`./client-CeGDTjnw.js`).then(e=>e.n),h=new m({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>I3(n):void 0,...u===void 0?{}:{timeoutMs:u}});await h.initialize();let g=M3(await h.toolsCall(c,p.value));return f.length>0&&(g.stderr=f.map(e=>`${e}\n`).join(``)+g.stderr),g}function C3(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=w3(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=w3(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 w3(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 T3(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
6803
6803
 
6804
6804
  mcp invoke <name> List tools on <name>.
6805
6805
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -6829,7 +6829,7 @@ Arguments are coerced according to the tool's JSON Schema:
6829
6829
 
6830
6830
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
6831
6831
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
6832
- `);let n=e[0],{ensureMcpProviderRegistered:r}=await import(`./provider-CUeWEkx7.js`);await r(n);let{getServer:i,setServer:a}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),o=await i(n,t.fs);if(!o)return f3(`mcp refresh: unknown server "${n}"`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-CeGDTjnw.js`).then(e=>e.n),l=new s({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>I3(n):void 0});try{await l.initialize()}catch(e){if(e instanceof c)return f3(`mcp refresh: server "${n}" returned 401 — token may have expired. Run \`mcp auth ${n}\` to re-authenticate.`);throw e}let u=await l.toolsList(),d=await l.appsList();await a(n,{...o,protocolVersion:l.getNegotiatedProtocolVersion(),tools:u,apps:d,lastRefreshedAt:new Date().toISOString()},t.fs);let f=await W3(n,d,t);return d3(`Refreshed "${n}" — tools: ${u.length}, apps: ${d.length} (${f} sprinkle${f===1?``:`s`})\n`)}async function P3(e,t){if(e.includes(`--help`)||e.includes(`-h`))return d3(`usage: mcp auth <name> [--silent | --interactive]
6832
+ `);let n=e[0],{ensureMcpProviderRegistered:r}=await import(`./provider-Bw_Z5wgp.js`);await r(n);let{getServer:i,setServer:a}=await import(`./store-DmIA09wr.js`).then(e=>e.r),o=await i(n,t.fs);if(!o)return f3(`mcp refresh: unknown server "${n}"`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-CeGDTjnw.js`).then(e=>e.n),l=new s({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>I3(n):void 0});try{await l.initialize()}catch(e){if(e instanceof c)return f3(`mcp refresh: server "${n}" returned 401 — token may have expired. Run \`mcp auth ${n}\` to re-authenticate.`);throw e}let u=await l.toolsList(),d=await l.appsList();await a(n,{...o,protocolVersion:l.getNegotiatedProtocolVersion(),tools:u,apps:d,lastRefreshedAt:new Date().toISOString()},t.fs);let f=await W3(n,d,t);return d3(`Refreshed "${n}" — tools: ${u.length}, apps: ${d.length} (${f} sprinkle${f===1?``:`s`})\n`)}async function P3(e,t){if(e.includes(`--help`)||e.includes(`-h`))return d3(`usage: mcp auth <name> [--silent | --interactive]
6833
6833
 
6834
6834
  Re-authenticate an existing MCP server. By default, attempts a silent
6835
6835
  token renewal using the persisted refresh_token; if that returns no
@@ -6841,7 +6841,7 @@ Options:
6841
6841
  -i, --interactive Skip silent renewal and open the OAuth popup
6842
6842
  directly. Use after revoking a refresh token or
6843
6843
  when the AS no longer accepts the cached one.
6844
- `);let n=e.filter(e=>!e.startsWith(`-`));if(n.length===0)return f3(`mcp auth: expected <name>`);let r=n[0],i=e.includes(`--silent`)||e.includes(`-s`),a=e.includes(`--interactive`)||e.includes(`-i`);if(i&&a)return f3(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-CUeWEkx7.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-BrXMXbEO.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return f3(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return f3(`mcp auth: server "${r}" does not use OAuth`);if(!s)return f3(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-CyERqESm.js`).then(e=>e.r),f=d(u);if(!f)return f3(`mcp auth: provider "${u}" is not registered`);if(a)return await F3(r,f,t);if(!f.onSilentRenew)return i?f3(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await F3(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 f3(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);l3.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?d3(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?f3(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await F3(r,f,t)}async function F3(e,t,n){if(!t.onOAuthLogin)return f3(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await L3(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?d3(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):f3(`mcp auth: interactive login for "${e}" did not complete`)}async function I3(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CyERqESm.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){l3.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function L3(){let{createOAuthLauncher:e}=await import(`./oauth-service-a6YE6xTR.js`);return e()}async function R3(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-BML_ivCH.js`).then(e=>e.o),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 z3(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-UFiIQf1n.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 B3(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
6844
+ `);let n=e.filter(e=>!e.startsWith(`-`));if(n.length===0)return f3(`mcp auth: expected <name>`);let r=n[0],i=e.includes(`--silent`)||e.includes(`-s`),a=e.includes(`--interactive`)||e.includes(`-i`);if(i&&a)return f3(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-Bw_Z5wgp.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-DmIA09wr.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return f3(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return f3(`mcp auth: server "${r}" does not use OAuth`);if(!s)return f3(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-DTkQsdaJ.js`).then(e=>e.r),f=d(u);if(!f)return f3(`mcp auth: provider "${u}" is not registered`);if(a)return await F3(r,f,t);if(!f.onSilentRenew)return i?f3(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await F3(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 f3(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);l3.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?d3(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?f3(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await F3(r,f,t)}async function F3(e,t,n){if(!t.onOAuthLogin)return f3(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await L3(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?d3(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):f3(`mcp auth: interactive login for "${e}" did not complete`)}async function I3(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DTkQsdaJ.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){l3.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function L3(){let{createOAuthLauncher:e}=await import(`./oauth-service-a6YE6xTR.js`);return e()}async function R3(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-BML_ivCH.js`).then(e=>e.o),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 z3(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-CwhZvLDc.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 B3(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
6845
6845
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
6846
6846
  const argv = Array.isArray(process.argv) ? process.argv.slice(2) : [];
6847
6847
  const escape = (s) => {
@@ -6855,7 +6855,7 @@ const r = await exec(cmd);
6855
6855
  if (r.stdout) process.stdout.write(r.stdout);
6856
6856
  if (r.stderr) process.stderr.write(r.stderr);
6857
6857
  process.exit(r.exitCode || 0);
6858
- `}async function V3(e,t){let n=await z3(t.fs);await n.mkdir(u3,{recursive:!0}),await n.writeFile(`${u3}/${e}.jsh`,B3(e)),t.scriptCatalog?.invalidateJsh()}async function H3(e,t){let n=await z3(t.fs),r=`${u3}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){l3.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function U3(e,t){let{removeAppSprinkles:n}=await import(`./apps-WBxVtivp.js`);await n(e,t.fs)}async function W3(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-WBxVtivp.js`);return(await r(e,t,n.fs)).length}catch(t){return l3.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}const G3=`/.cache/artificial-analysis.json`;async function K3(e,t=!1){if(e&&!t)try{let t=await e.readFile(G3),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}let n=null;try{n=localStorage.getItem(`aa_api_key`)}catch{}let r={Accept:`application/json`};n&&(r[`x-api-key`]=n);let i=bt(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:r})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{let e=new TextDecoder().decode(a.body);o=JSON.parse(e)}catch{return[]}let s=(Array.isArray(o)?o:o?.data??o?.models??[]).map(e=>({slug:e.slug??``,name:e.name??``,creator_slug:e.model_creator?.slug??``,intelligence_index:e.evaluations?.artificial_analysis_intelligence_index??null,coding_index:e.evaluations?.artificial_analysis_coding_index??null,speed_tps:e.median_output_tokens_per_second??null}));if(e&&s.length>0){let t={fetchedAt:Date.now(),models:s};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(G3,JSON.stringify(t))}catch{}}return s}function q3(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function J3(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=q3(e),a=t.find(e=>q3(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 Y3(){return`models - list available LLM models
6858
+ `}async function V3(e,t){let n=await z3(t.fs);await n.mkdir(u3,{recursive:!0}),await n.writeFile(`${u3}/${e}.jsh`,B3(e)),t.scriptCatalog?.invalidateJsh()}async function H3(e,t){let n=await z3(t.fs),r=`${u3}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){l3.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function U3(e,t){let{removeAppSprinkles:n}=await import(`./apps-3MvdDBMc.js`);await n(e,t.fs)}async function W3(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-3MvdDBMc.js`);return(await r(e,t,n.fs)).length}catch(t){return l3.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}const G3=`/.cache/artificial-analysis.json`;async function K3(e,t=!1){if(e&&!t)try{let t=await e.readFile(G3),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}let n=null;try{n=localStorage.getItem(`aa_api_key`)}catch{}let r={Accept:`application/json`};n&&(r[`x-api-key`]=n);let i=bt(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:r})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{let e=new TextDecoder().decode(a.body);o=JSON.parse(e)}catch{return[]}let s=(Array.isArray(o)?o:o?.data??o?.models??[]).map(e=>({slug:e.slug??``,name:e.name??``,creator_slug:e.model_creator?.slug??``,intelligence_index:e.evaluations?.artificial_analysis_intelligence_index??null,coding_index:e.evaluations?.artificial_analysis_coding_index??null,speed_tps:e.median_output_tokens_per_second??null}));if(e&&s.length>0){let t={fetchedAt:Date.now(),models:s};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(G3,JSON.stringify(t))}catch{}}return s}function q3(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function J3(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=q3(e),a=t.find(e=>q3(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 Y3(){return`models - list available LLM models
6859
6859
 
6860
6860
  Usage: models [options]
6861
6861
 
@@ -6869,7 +6869,7 @@ Options:
6869
6869
  -h, --help Show this help message
6870
6870
  `}function X3(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function Z3(e){return`$${e.toFixed(2)}`}const Q3=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function $3(e){let t=`${e.id} ${e.name??``}`;return!Q3.test(t)}function e6(e){let t=e.toLowerCase();t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``);let n=t.match(/^(claude-(?:opus|sonnet|haiku))/);if(n)return n[1];let r=t.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(r)return r[1]+(r[2]??``);let i=t.match(/^gemini-[\d.]+-(.+)$/);if(i)return`gemini-${i[1]}`;let a=t.match(/^gemini-(\d+)-(.+)$/);if(a)return`gemini-${a[2]}`;let o=t.match(/^grok-[\d.]+-([\w-]+)$/);if(o)return`grok-${o[1]}`;if(t.match(/^(grok)-[\d.]+$/))return`grok`;let s=t.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);return s?s[1]:t.replace(/-[\d.]+$/,``)}function t6(e){let t=new Map;for(let n of e){let e=e6(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function n6(e,t,n,r,i){let a=i?J3(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 r6(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=`${Z3(e.cost.input)} / ${Z3(e.cost.output)}`,a=`${X3(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(`
6871
6871
  `)+`
6872
- `}function i6(e){return H(`models`,async t=>{let{getAccounts:n,getAvailableProviders:r,getProviderConfig:i,getProviderModels:a,getSelectedProvider:o,getSelectedModelId:s,resolveCurrentModel:c}=await import(`./provider-settings-CgibVhar.js`);if(t.includes(`--help`)||t.includes(`-h`))return{stdout:Y3(),stderr:``,exitCode:0};let l=t.includes(`--json`),u=t.includes(`--all`),d=t.includes(`--all-versions`),f=t.includes(`--refresh`),p=t.includes(`--no-benchmarks`),m=t.indexOf(`--provider`),h=m>=0?t[m+1]:void 0,g=o(),_=s(),v=n();if(v.length===0)return{stdout:``,stderr:`No provider accounts configured. Run the provider settings to add one.
6872
+ `}function i6(e){return H(`models`,async t=>{let{getAccounts:n,getAvailableProviders:r,getProviderConfig:i,getProviderModels:a,getSelectedProvider:o,getSelectedModelId:s,resolveCurrentModel:c}=await import(`./provider-settings-0ASsdEo7.js`);if(t.includes(`--help`)||t.includes(`-h`))return{stdout:Y3(),stderr:``,exitCode:0};let l=t.includes(`--json`),u=t.includes(`--all`),d=t.includes(`--all-versions`),f=t.includes(`--refresh`),p=t.includes(`--no-benchmarks`),m=t.indexOf(`--provider`),h=m>=0?t[m+1]:void 0,g=o(),_=s(),v=n();if(v.length===0)return{stdout:``,stderr:`No provider accounts configured. Run the provider settings to add one.
6873
6873
  `,exitCode:1};let y=c(),b=y.id,x=y.provider,S;p||(S=await K3(e,f),S.length===0&&(S=void 0));let C;if(h){let e=r();if(!e.includes(h))return{stdout:``,stderr:`Unknown provider: ${h}. Available: ${e.join(`, `)}\n`,exitCode:1};C=[h]}else C=u?[...new Set(v.map(e=>e.providerId))]:[g];let w=[],T=[];for(let e of C){let t=a(e).filter($3);if(t.length===0){if(!u)return{stdout:``,stderr:`No models available for provider ${e}.\n`,exitCode:1};continue}let n=t.map(t=>n6(t,e,b,x,S)).sort((e,t)=>t.cost.input-e.cost.input);if(d||(n=t6(n)),w.push(...n),!l){let t=i(e);T.push(r6(t.name,e,n,!!S))}}if(l)return{stdout:JSON.stringify(w,null,2)+`
6874
6874
  `,stderr:``,exitCode:0};!d&&!l&&T.push(`Showing latest versions only. Use --all-versions to see all.
6875
6875
  `);let E=`${x}:${b}`,D=`${g}:${_}`;return T.push(E===D?`Currently using: ${E}\n`:`Currently using: ${E} (selected ${D} — resolved to a different model)\n`),{stdout:T.join(`
@@ -6909,7 +6909,7 @@ Examples:
6909
6909
  oauth-domain add adobe '*.da.live'
6910
6910
  oauth-domain list adobe
6911
6911
  oauth-domain remove adobe admin.da.live
6912
- `}function p6(){return H(`oauth-domain`,async e=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return{stdout:f6(),stderr:``,exitCode:0};let{getExtraOAuthDomains:t,setExtraOAuthDomainsAsync:n,getAllExtraOAuthDomains:r}=await import(`./provider-settings-CgibVhar.js`),[i,a,o]=e;try{switch(i){case`list`:{if(a){let e=t(a);return e.length===0?{stdout:`(no extra domains configured for ${a})\n`,stderr:``,exitCode:0}:{stdout:e.join(`
6912
+ `}function p6(){return H(`oauth-domain`,async e=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return{stdout:f6(),stderr:``,exitCode:0};let{getExtraOAuthDomains:t,setExtraOAuthDomainsAsync:n,getAllExtraOAuthDomains:r}=await import(`./provider-settings-0ASsdEo7.js`),[i,a,o]=e;try{switch(i){case`list`:{if(a){let e=t(a);return e.length===0?{stdout:`(no extra domains configured for ${a})\n`,stderr:``,exitCode:0}:{stdout:e.join(`
6913
6913
  `)+`
6914
6914
  `,stderr:``,exitCode:0}}let e=r(),n=Object.entries(e).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
6915
6915
  `,stderr:``,exitCode:0}:{stdout:n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
@@ -6981,7 +6981,7 @@ Examples:
6981
6981
  --authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
6982
6982
  --redirect-pattern 'http://127.0.0.1:56121/*'
6983
6983
  curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
6984
- `}function x6(){return H(`oauth-token`,S6)}async function S6(e,t){let n=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r),r=await import(`./providers-CyERqESm.js`).then(e=>e.r);if(e.includes(`--help`)||e.includes(`-h`))return{stdout:b6(),stderr:``,exitCode:0};if(e.includes(`--list`))return K6(n.getAccounts,r.getRegisteredProviderIds,r.getRegisteredProviderConfig,n.getOAuthAccountInfo);if(e.includes(`--expire`))return I6(e);if(e.includes(`--renew`))return L6(e);if(e.includes(`--from-file`)||e.includes(`--intercept`))return z6(e,t);let i=C6(e);if(!i.ok)return i.result;let a=w6(e),o=T6(e,n,r);if(!o.ok)return o.result;let s=D6(o.value,r.getRegisteredProviderConfig);if(!s.ok)return s.result;if(!a){let e=await O6(o.value,s.value,n.getOAuthAccountInfo,i.value);if(e)return e}return j6(o.value,s.value,i.value,n.getOAuthAccountInfo)}function C6(e){let t=e.indexOf(`--scope`);if(t<0)return{ok:!0,value:void 0};let n=e[t+1]?.trim();return!n||n.startsWith(`-`)?{ok:!1,result:G6(`oauth-token: --scope requires a value`)}:(e.splice(t,2),{ok:!0,value:n})}function w6(e){let t=e.indexOf(`--force-login`);return t<0?!1:(e.splice(t,1),!0)}function T6(e,t,n){let r=e.indexOf(`--provider`);if(r>=0){let t=e[r+1];return t?{ok:!0,value:t}:{ok:!1,result:G6(`oauth-token: --provider requires a value`)}}if(e.length>0)return{ok:!0,value:e[0]};let i=t.getSelectedProvider();if(E6(n.getRegisteredProviderConfig(i)))return{ok:!0,value:i};let a=n.getRegisteredProviderIds().find(e=>E6(n.getRegisteredProviderConfig(e)));return a?{ok:!0,value:a}:{ok:!1,result:G6(`oauth-token: no OAuth providers configured`)}}function E6(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function D6(e,t){let n=t(e);return n?E6(n)?{ok:!0,value:n}:{ok:!1,result:G6(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:G6(`oauth-token: unknown provider "${e}"`)}}async function O6(e,t,n,r){let i=n(e);return i&&!i.expired?k6(e,i,r):!i?.expired||!t.onSilentRenew||!await P6(t.onSilentRenew)?null:k6(e,n(e),r)}function k6(e,t,n){return n&&!y6(t?.scopes,n)?null:A6(e,t?.maskedValue)}function A6(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:G6(`oauth-token: no masked value for ${e} (try logging in again)`)}async function j6(e,t,n,r){try{let i=await M6(e,t,n);return i.error?i.error:N6(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),G6(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),G6(`oauth-token: login failed: ${n}`))}}async function M6(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-a6YE6xTR.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:G6(`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-a6YE6xTR.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:G6(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function N6(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),G6(`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?A6(e,r.maskedValue):r?.token?G6(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),G6(`oauth-token: login completed but no token was saved`))}async function P6(e){try{return await e()!==null}catch{return!1}}function F6(e,t,n,r){let i=e.filter(e=>!e.startsWith(`-`))[0];if(i)return i;let a=t();return n(a)?.onSilentRenew?a:r().find(e=>n(e)?.onSilentRenew)}async function I6(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-CyERqESm.js`).then(e=>e.r),o=F6(e,n,i,a);if(!o)return G6(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return G6(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return G6(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return G6(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return G6(`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 L6(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-D2IK2qHq.js`).then(e=>e.r),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CyERqESm.js`).then(e=>e.r),a=F6(e,t,r,i);if(!a)return G6(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return G6(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return G6(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${R6(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: ${R6(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(`
6984
+ `}function x6(){return H(`oauth-token`,S6)}async function S6(e,t){let n=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r),r=await import(`./providers-DTkQsdaJ.js`).then(e=>e.r);if(e.includes(`--help`)||e.includes(`-h`))return{stdout:b6(),stderr:``,exitCode:0};if(e.includes(`--list`))return K6(n.getAccounts,r.getRegisteredProviderIds,r.getRegisteredProviderConfig,n.getOAuthAccountInfo);if(e.includes(`--expire`))return I6(e);if(e.includes(`--renew`))return L6(e);if(e.includes(`--from-file`)||e.includes(`--intercept`))return z6(e,t);let i=C6(e);if(!i.ok)return i.result;let a=w6(e),o=T6(e,n,r);if(!o.ok)return o.result;let s=D6(o.value,r.getRegisteredProviderConfig);if(!s.ok)return s.result;if(!a){let e=await O6(o.value,s.value,n.getOAuthAccountInfo,i.value);if(e)return e}return j6(o.value,s.value,i.value,n.getOAuthAccountInfo)}function C6(e){let t=e.indexOf(`--scope`);if(t<0)return{ok:!0,value:void 0};let n=e[t+1]?.trim();return!n||n.startsWith(`-`)?{ok:!1,result:G6(`oauth-token: --scope requires a value`)}:(e.splice(t,2),{ok:!0,value:n})}function w6(e){let t=e.indexOf(`--force-login`);return t<0?!1:(e.splice(t,1),!0)}function T6(e,t,n){let r=e.indexOf(`--provider`);if(r>=0){let t=e[r+1];return t?{ok:!0,value:t}:{ok:!1,result:G6(`oauth-token: --provider requires a value`)}}if(e.length>0)return{ok:!0,value:e[0]};let i=t.getSelectedProvider();if(E6(n.getRegisteredProviderConfig(i)))return{ok:!0,value:i};let a=n.getRegisteredProviderIds().find(e=>E6(n.getRegisteredProviderConfig(e)));return a?{ok:!0,value:a}:{ok:!1,result:G6(`oauth-token: no OAuth providers configured`)}}function E6(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function D6(e,t){let n=t(e);return n?E6(n)?{ok:!0,value:n}:{ok:!1,result:G6(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:G6(`oauth-token: unknown provider "${e}"`)}}async function O6(e,t,n,r){let i=n(e);return i&&!i.expired?k6(e,i,r):!i?.expired||!t.onSilentRenew||!await P6(t.onSilentRenew)?null:k6(e,n(e),r)}function k6(e,t,n){return n&&!y6(t?.scopes,n)?null:A6(e,t?.maskedValue)}function A6(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:G6(`oauth-token: no masked value for ${e} (try logging in again)`)}async function j6(e,t,n,r){try{let i=await M6(e,t,n);return i.error?i.error:N6(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),G6(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),G6(`oauth-token: login failed: ${n}`))}}async function M6(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-a6YE6xTR.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:G6(`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-a6YE6xTR.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:G6(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function N6(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),G6(`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?A6(e,r.maskedValue):r?.token?G6(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),G6(`oauth-token: login completed but no token was saved`))}async function P6(e){try{return await e()!==null}catch{return!1}}function F6(e,t,n,r){let i=e.filter(e=>!e.startsWith(`-`))[0];if(i)return i;let a=t();return n(a)?.onSilentRenew?a:r().find(e=>n(e)?.onSilentRenew)}async function I6(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-DTkQsdaJ.js`).then(e=>e.r),o=F6(e,n,i,a);if(!o)return G6(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return G6(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return G6(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return G6(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return G6(`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 L6(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BfqIrMMe.js`).then(e=>e.r),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DTkQsdaJ.js`).then(e=>e.r),a=F6(e,t,r,i);if(!a)return G6(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return G6(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return G6(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${R6(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: ${R6(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(`
6985
6985
  `)+`
6986
6986
  `,stderr:``,exitCode:+!u}}function R6(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 z6(e,t){let{parseInterceptOAuthConfig:n}=await import(`./intercepted-oauth-BIKnTjZm.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:r}=await import(`./oauth-service-a6YE6xTR.js`),i=await B6(e,t);if(!i.ok)return i.result;let a=n(i.value);if(!a.ok)return G6(`oauth-token: invalid intercept config: ${a.error}`);let o=await r();if(!o)return G6(`oauth-token: no CDP transport available in this runtime; --intercept needs the controlled browser.`);let s=await o(a.config);return s?{stdout:`${s}\n`,stderr:``,exitCode:0}:G6(`oauth-token: intercept timed out or was cancelled`)}function B6(e,t){let n=e.indexOf(`--from-file`);return n>=0?V6(e[n+1],t):H6(e)}async function V6(e,t){if(!e)return{ok:!1,result:G6(`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:G6(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function H6(e){let t=W6(e,`--authorize-url`),n=W6(e,`--redirect-pattern`);if(!t)return{ok:!1,result:G6(`oauth-token: --authorize-url is required`)};if(!n)return{ok:!1,result:G6(`oauth-token: --redirect-pattern is required`)};let r=U6(e);return r.ok?{ok:!0,value:{authorizeUrl:t,redirectUriPattern:n,onCapture:e.includes(`--leave-tab`)?`leave`:`close`,...r.value.length>0?{rewrite:r.value}:{}}}:r}function U6(e){let t=[];for(let n=0;n<e.length;n++){if(e[n]!==`--rewrite`)continue;let r=e[n+1];if(!r)return{ok:!1,result:G6(`oauth-token: --rewrite requires a value`)};let i=r.split(`=`);if(i.length<3)return{ok:!1,result:G6(`oauth-token: --rewrite "${r}" must be "<match>=<key>=<value>"`)};let[a,o,...s]=i;t.push({match:a,appendParams:{[o]:s.join(`=`)}})}return{ok:!0,value:t}}function W6(e,t){let n=e.indexOf(t);if(n<0)return;let r=e[n+1];if(!(!r||r.startsWith(`--`)))return r}function G6(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function K6(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
6987
6987
  `,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(`
@@ -7071,7 +7071,7 @@ Examples:
7071
7071
  plugin list
7072
7072
  plugin info my-plugin
7073
7073
  plugin remove my-plugin
7074
- `}function j8(e={}){return H(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return O8(A8());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await R8(i,a,e);case`list`:case`ls`:return await H8(i,e);case`info`:return await U8(i,e);case`validate`:return await W8(i,a,e);case`remove`:case`rm`:case`delete`:return await G8(i,e);default:return k8(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return k8(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function M8(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-UFiIQf1n.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 N8(e,t,n){let r=K8(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-AllTWJoC.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 P8(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function F8(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${D8}/${t.map(P8).join(`--`)}`}async function I8(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-DF9OueMM.js`).then(e=>e.r),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)===0?`no files found at ${e.display}`:null}async function L8(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function R8(e,t,n){if(e.includes(`--help`)||e.includes(`-h`))return O8(`usage: plugin install <path|repo>
7074
+ `}function j8(e={}){return H(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return O8(A8());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await R8(i,a,e);case`list`:case`ls`:return await H8(i,e);case`info`:return await U8(i,e);case`validate`:return await W8(i,a,e);case`remove`:case`rm`:case`delete`:return await G8(i,e);default:return k8(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return k8(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function M8(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CwhZvLDc.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 N8(e,t,n){let r=K8(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-DIeJprV5.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 P8(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function F8(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${D8}/${t.map(P8).join(`--`)}`}async function I8(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-DSYHJoT0.js`).then(e=>e.r),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)===0?`no files found at ${e.display}`:null}async function L8(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function R8(e,t,n){if(e.includes(`--help`)||e.includes(`-h`))return O8(`usage: plugin install <path|repo>
7075
7075
 
7076
7076
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
7077
7077
  reference (owner/repo, owner/repo@branch, or
@@ -7082,19 +7082,19 @@ mcp.json. On success the plugin is recorded in
7082
7082
  /workspace/.plugins/plugins.json — its skills then surface through the
7083
7083
  standard skills discovery, and each supported streamable-http MCP server
7084
7084
  is registered in the MCP store as "<plugin>:<server>".
7085
- `);let r=e.filter(e=>!e.startsWith(`--`));if(r.length<1)return k8(`plugin install: expected <path|repo>`);let i=await M8(n),a=await N8(r[0],t,i);if(a.kind===`error`)return k8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return k8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=F8(a.ref),s=a.ref.display;let e=await I8(a.ref,o,i,n.fetch);if(e)return k8(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-sgPDMLWT.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await L8(i,o),k8(`plugin install: plugin at ${s??o} was rejected:\n${q8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-DmVOsDRg.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await L8(i,o),k8(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await V8(u,n),g=await B8(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),O8(z8(u,h,g,s??o,l.diagnostics))}function z8(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:`,q8(i)),c.join(`
7085
+ `);let r=e.filter(e=>!e.startsWith(`--`));if(r.length<1)return k8(`plugin install: expected <path|repo>`);let i=await M8(n),a=await N8(r[0],t,i);if(a.kind===`error`)return k8(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return k8(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=F8(a.ref),s=a.ref.display;let e=await I8(a.ref,o,i,n.fetch);if(e)return k8(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-sgPDMLWT.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await L8(i,o),k8(`plugin install: plugin at ${s??o} was rejected:\n${q8(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-VHFEG-KZ.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await L8(i,o),k8(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await V8(u,n),g=await B8(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),O8(z8(u,h,g,s??o,l.diagnostics))}function z8(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:`,q8(i)),c.join(`
7086
7086
  `)+`
7087
- `}async function B8(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-BrXMXbEO.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 V8(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-BrXMXbEO.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CeGDTjnw.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 H8(e,t){if(e.includes(`--help`)||e.includes(`-h`))return O8(`usage: plugin list
7088
- `);let{listInstalledPlugins:n}=await import(`./store-DmVOsDRg.js`),r=await n(t.fs),i=Object.keys(r).sort();if(i.length===0)return O8("No agent plugins installed. Use `plugin install <path>`.\n");let a=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of i){let t=r[e];a.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let o=a[0].map((e,t)=>Math.max(...a.map(e=>e[t].length)));return O8(a.map(e=>e.map((e,t)=>e.padEnd(o[t])).join(` `)).join(`
7087
+ `}async function B8(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-DmIA09wr.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 V8(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-DmIA09wr.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CeGDTjnw.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 H8(e,t){if(e.includes(`--help`)||e.includes(`-h`))return O8(`usage: plugin list
7088
+ `);let{listInstalledPlugins:n}=await import(`./store-VHFEG-KZ.js`),r=await n(t.fs),i=Object.keys(r).sort();if(i.length===0)return O8("No agent plugins installed. Use `plugin install <path>`.\n");let a=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of i){let t=r[e];a.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let o=a[0].map((e,t)=>Math.max(...a.map(e=>e[t].length)));return O8(a.map(e=>e.map((e,t)=>e.padEnd(o[t])).join(` `)).join(`
7089
7089
  `)+`
7090
7090
  `)}async function U8(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?k8(`plugin info: expected <name>`):O8(`usage: plugin info <name>
7091
- `);let n=e[0],{getInstalledPlugin:r}=await import(`./store-DmVOsDRg.js`),i=await r(n,t.fs);if(!i)return k8(`plugin info: no installed plugin named "${n}"`);let a=await M8(t),{loadPluginFromDirectory:o}=await import(`./loader-sgPDMLWT.js`),s=await o(a,i.root);if(!s.ok)return k8(`plugin info: plugin at ${i.root} no longer loads:\n${q8(s.diagnostics)}`);let{plugin:c}=s,l=c.manifest,u=[`${l.name}${l.version?` v${l.version}`:``}`,...l.description?[` ${l.description}`]:[],` root: ${c.root}`,...l.license?[` license: ${l.license}`]:[],...l.homepage?[` home: ${l.homepage}`]:[],``,`Skills (${c.skills.length}):`,...c.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${c.mcp.servers.length}):`,...c.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return s.diagnostics.length>0&&u.push(``,`Diagnostics:`,q8(s.diagnostics)),O8(u.join(`
7091
+ `);let n=e[0],{getInstalledPlugin:r}=await import(`./store-VHFEG-KZ.js`),i=await r(n,t.fs);if(!i)return k8(`plugin info: no installed plugin named "${n}"`);let a=await M8(t),{loadPluginFromDirectory:o}=await import(`./loader-sgPDMLWT.js`),s=await o(a,i.root);if(!s.ok)return k8(`plugin info: plugin at ${i.root} no longer loads:\n${q8(s.diagnostics)}`);let{plugin:c}=s,l=c.manifest,u=[`${l.name}${l.version?` v${l.version}`:``}`,...l.description?[` ${l.description}`]:[],` root: ${c.root}`,...l.license?[` license: ${l.license}`]:[],...l.homepage?[` home: ${l.homepage}`]:[],``,`Skills (${c.skills.length}):`,...c.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${c.mcp.servers.length}):`,...c.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return s.diagnostics.length>0&&u.push(``,`Diagnostics:`,q8(s.diagnostics)),O8(u.join(`
7092
7092
  `)+`
7093
7093
  `)}async function W8(e,t,n){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?k8(`plugin validate: expected <path|repo>`):O8(`usage: plugin validate <path|repo>
7094
7094
  `);let r=await M8(n),i=await N8(e[0],t,r);if(i.kind===`error`)return k8(`plugin validate: ${i.message}`);let a,o=null;if(i.kind===`github`){if(!n.fetch)return k8(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);o=`/tmp/.plugin-validate/${F8(i.ref).split(`/`).pop()}`;let e=await I8(i.ref,o,r,n.fetch);if(e)return k8(`plugin validate: ${e}`);a=o}else a=i.root;let{loadPluginFromDirectory:s}=await import(`./loader-sgPDMLWT.js`),c;try{c=await s(r,a)}finally{o&&await L8(r,o)}if(!c.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${q8(c.diagnostics)}\n`,exitCode:1};let{plugin:l}=c,u=l.mcp.servers.filter(e=>e.status===`supported`).length,d=[`plugin validate: OK — "${l.manifest.name}"${l.manifest.version?` v${l.manifest.version}`:``}`,` skills: ${l.skills.length}`,` mcp servers: ${u} supported, ${l.mcp.servers.length-u} skipped (mcp.json ${l.mcp.status})`];return c.diagnostics.length>0&&d.push(`Diagnostics:`,q8(c.diagnostics)),O8(d.join(`
7095
7095
  `)+`
7096
7096
  `)}async function G8(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?k8(`plugin remove: expected <name>`):O8(`usage: plugin remove <name>
7097
- `);let n=e[0],{getInstalledPlugin:r,deleteInstalledPlugin:i}=await import(`./store-DmVOsDRg.js`),a=await r(n,t.fs);if(!a)return k8(`plugin remove: no installed plugin named "${n}"`);let o=0;if(a.mcpServerNames&&a.mcpServerNames.length>0){let{deleteServer:e,getServer:r}=await import(`./store-BrXMXbEO.js`).then(e=>e.r);for(let i of a.mcpServerNames)(await r(i,t.fs))?.pluginOrigin===n&&await e(i,t.fs)&&(o+=1)}await i(n,t.fs);let s=a.root.startsWith(`${D8}/`);return s&&await L8(await M8(t),a.root),O8([`Removed agent plugin "${n}"`,` registry: removed`,` mcp servers: ${o} removed`,s?` files: removed (${a.root})`:` files: left in place (${a.root})`].join(`
7097
+ `);let n=e[0],{getInstalledPlugin:r,deleteInstalledPlugin:i}=await import(`./store-VHFEG-KZ.js`),a=await r(n,t.fs);if(!a)return k8(`plugin remove: no installed plugin named "${n}"`);let o=0;if(a.mcpServerNames&&a.mcpServerNames.length>0){let{deleteServer:e,getServer:r}=await import(`./store-DmIA09wr.js`).then(e=>e.r);for(let i of a.mcpServerNames)(await r(i,t.fs))?.pluginOrigin===n&&await e(i,t.fs)&&(o+=1)}await i(n,t.fs);let s=a.root.startsWith(`${D8}/`);return s&&await L8(await M8(t),a.root),O8([`Removed agent plugin "${n}"`,` registry: removed`,` mcp servers: ${o} removed`,s?` files: removed (${a.root})`:` files: left in place (${a.root})`].join(`
7098
7098
  `)+`
7099
7099
  `)}function K8(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 q8(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
7100
7100
  `)}const J8=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],Y8=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],X8={running:`R`,pending:`S`,exited:`Z`,killed:`K`};function Z8(e={}){return H(`ps`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return qne();let n=e.processManager??Q8();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
@@ -7183,11 +7183,11 @@ Examples:
7183
7183
  `,stderr:``,exitCode:0}}function v5(e){switch(e.state){case`ready`:return`voice engine: ready
7184
7184
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
7185
7185
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
7186
- `;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 y5(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function b5(e){return e instanceof Error?e.message:String(e)}let x5=!1,S5=null;function C5(){return x5?Promise.resolve(speechSynthesis.getVoices()):(S5||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){x5=!0,e(t);return}let n=()=>{x5=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),x5=!0,e(speechSynthesis.getVoices())},1e3)}),S5)}const w5={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function mre(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 hre(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 w5){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return y5(`${i} requires ${w5[i]}`);let a=mre(t,i,n);if(a)return y5(a)}else if(i.startsWith(`-`)&&i!==`--list`)return y5(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function T5(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function gre(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speak-DLj1bEBh.js`),t=e().map(e=>T5({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await C5()).map(e=>T5({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
7186
+ `;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 y5(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function b5(e){return e instanceof Error?e.message:String(e)}let x5=!1,S5=null;function C5(){return x5?Promise.resolve(speechSynthesis.getVoices()):(S5||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){x5=!0,e(t);return}let n=()=>{x5=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),x5=!0,e(speechSynthesis.getVoices())},1e3)}),S5)}const w5={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function mre(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 hre(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 w5){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return y5(`${i} requires ${w5[i]}`);let a=mre(t,i,n);if(a)return y5(a)}else if(i.startsWith(`-`)&&i!==`--list`)return y5(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function T5(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function gre(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speak-3ERYo9mh.js`),t=e().map(e=>T5({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await C5()).map(e=>T5({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
7187
7187
  `)+`
7188
7188
  `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>T5(e)).join(`
7189
7189
  `)+`
7190
- `,stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function _re(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speak-DLj1bEBh.js`),n=t().map(e=>({name:e.id})),r=(await C5()).map(e=>({name:e.name}));return[...n,...r]}async function vre(e,t){let n=(await _re(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:y5(`voice "${t}" not found. Use --list to see available voices.`)}}async function E5(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speak-DLj1bEBh.js`);return{stdout:v5(t?n():e()),stderr:``,exitCode:0}}return{stdout:v5(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function yre(e,t){return t.includes(`--list`)?gre(e):t.includes(`--status`)?E5(e,!1):t.includes(`--warmup`)?E5(e,!0):null}async function bre(e){try{let{speak:t}=await import(`./speak-DLj1bEBh.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return y5(`speech synthesis error: ${b5(e)}`)}}async function xre(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function Sre(e){let{synthesizeToWav:t}=await import(`./speak-DLj1bEBh.js`);try{return{bytes:await t(e)}}catch(e){return y5(b5(e))}}async function Cre(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 y5(b5(e))}}async function wre(e,t,n,r){let i=e.local?await Sre(r):await Cre(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 y5(`failed to write ${n}: ${b5(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}function Tre(){return H(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return _5();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:i()};if(!n.local&&!n.panelRpc)return y5(`Web Speech API unavailable in this environment`);let r=await yre(n,e);if(r)return r;let a=hre(e);if(`exitCode`in a)return a;if(!a.text)return _5();if(!a.lang)return y5(`-l language tag is required`);let o;if(a.voiceName){let{resolved:e,error:t}=await vre(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?wre(n,t,a.outFile,s):n.local?bre(s):xre(n,s)})}function Ere(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
7190
+ `,stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function _re(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speak-3ERYo9mh.js`),n=t().map(e=>({name:e.id})),r=(await C5()).map(e=>({name:e.name}));return[...n,...r]}async function vre(e,t){let n=(await _re(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:y5(`voice "${t}" not found. Use --list to see available voices.`)}}async function E5(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speak-3ERYo9mh.js`);return{stdout:v5(t?n():e()),stderr:``,exitCode:0}}return{stdout:v5(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function yre(e,t){return t.includes(`--list`)?gre(e):t.includes(`--status`)?E5(e,!1):t.includes(`--warmup`)?E5(e,!0):null}async function bre(e){try{let{speak:t}=await import(`./speak-3ERYo9mh.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return y5(`speech synthesis error: ${b5(e)}`)}}async function xre(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return y5(b5(e))}}async function Sre(e){let{synthesizeToWav:t}=await import(`./speak-3ERYo9mh.js`);try{return{bytes:await t(e)}}catch(e){return y5(b5(e))}}async function Cre(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 y5(b5(e))}}async function wre(e,t,n,r){let i=e.local?await Sre(r):await Cre(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 y5(`failed to write ${n}: ${b5(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}function Tre(){return H(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return _5();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:i()};if(!n.local&&!n.panelRpc)return y5(`Web Speech API unavailable in this environment`);let r=await yre(n,e);if(r)return r;let a=hre(e);if(`exitCode`in a)return a;if(!a.text)return _5();if(!a.lang)return y5(`-l language tag is required`);let o;if(a.voiceName){let{resolved:e,error:t}=await vre(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?wre(n,t,a.outFile,s):n.local?bre(s):xre(n,s)})}function Ere(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
7191
7191
 
7192
7192
  Usage: screencapture [options] <output-file>
7193
7193
 
@@ -8795,7 +8795,7 @@ ${e}
8795
8795
  ${this.scoop.isCone?`CONE`:`SCOOP`} MEMORY (${this.scoop.name}):
8796
8796
  ${t}
8797
8797
  ---`);let a=ib(n);return a&&(i+=a),i}};const j9=r(`scoop-lifecycle-manager`);var mle=class{deps;tabs=new Map;contexts=new Map;scoopObservers=new Map;constructor(e){this.deps=e}getContexts(){return this.contexts}getContext(e){return this.contexts.get(e)}getTab(e){return this.tabs.get(e)}observe(e,t){let n=this.scoopObservers.get(e);return n||(n=new Set,this.scoopObservers.set(e,n)),n.add(t),()=>{let n=this.scoopObservers.get(e);n&&(n.delete(t),n.size===0&&this.scoopObservers.delete(e))}}dispatch(e,t,...n){let r=this.scoopObservers.get(e);if(r)for(let i of r){let r=i[t];if(r)try{r(...n)}catch(n){j9.warn(`scoop observer threw`,{jid:e,event:t,error:n instanceof Error?n.message:String(n)})}}}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager(),n=this.deps.getSharedFs();if(!(!t||!n))try{let r=`/scoops/${e.folder}/etc/sudoers`;await n.exists(r)?await t.reloadScoopPolicyByFolder(e.folder):await t.seedScoopSudoers(e.folder,e.config)}catch(t){j9.warn(`Failed to seed per-scoop sudoers; continuing with existing policy`,{folder:e.folder,error:t instanceof Error?t.message:String(t)})}}async createTab(e){let t=this.deps.getScoops().get(e);if(!t)throw Error(`Scoop not found: ${e}`);if(this.contexts.has(e))if(this.tabs.get(e)?.status===`error`)j9.info(`Re-creating context after error`,{jid:e}),this.contexts.get(e)?.dispose(),this.contexts.delete(e),this.tabs.delete(e);else{j9.debug(`Context already exists`,{jid:e});return}let n=this.deps.getSharedFs();if(!n)throw Error(`Shared filesystem not initialized`);let r=`scoop-${t.folder}-${Date.now()}`,i=t.isCone?n:new hee(n,t.config?.writablePaths?[...t.config.writablePaths]:[],t.config?.visiblePaths?[...t.config.visiblePaths]:[],`sudo-delegated`);t.isCone||await this.ensureSudoersLoaded(t);let a=this.buildContextCallbacks(e,t),o=Array.from(this.deps.getScoops().values()).find(e=>e.isCone)?.jid,s=new ple(t,a,i,this.deps.getSessionStore()??void 0,n??void 0,o,this.deps.getProcessManager()??void 0,this.deps.getSudoManager());this.contexts.set(e,s),this.tabs.set(e,{jid:e,contextId:r,status:`initializing`,lastActivity:new Date().toISOString()}),await s.init();let c=this.tabs.get(e);c&&c.status===`initializing`&&(c.status=`ready`,this.tabs.set(e,c),this.deps.callbacks.onStatusChange(e,`ready`),this.dispatch(e,`onStatusChange`,`ready`),Promise.resolve().then(()=>this.deps.messageRouter.flushOnIdle(e)).catch(t=>{j9.warn(`Initial idle queue probe failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}));let l=this.deps.getScoops().get(e);l&&!l.isCone&&this.deps.idleTimers.start(e),j9.info(`Scoop context created`,{jid:e,contextId:r})}destroyTab(e){this.deps.idleTimers.clear(e);let t=this.contexts.get(e);t&&(t.dispose(),this.contexts.delete(e),this.tabs.delete(e),this.scoopObservers.delete(e),j9.info(`Scoop context destroyed`,{jid:e}))}forgetObservers(e){this.scoopObservers.delete(e)}getTabsMap(){return this.tabs}setTab(e,t){this.tabs.set(e,t)}markTabError(e,t){let n=this.tabs.get(e);this.tabs.set(e,{jid:e,contextId:n?.contextId??`scoop-error-${e}`,status:`error`,error:t,lastActivity:new Date().toISOString()})}dispatchEvent(e,t,...n){this.dispatch(e,t,...n)}stopAndClearAllContexts(){for(let[e,t]of this.contexts.entries())this.deps.idleTimers.clear(e),t.stop(),this.contexts.delete(e)}async destroyAllTabs(){for(let e of Array.from(this.contexts.keys()))this.destroyTab(e)}async waitForTabReady(e,t=1e4){let n=Date.now();for(;Date.now()-n<t;){let t=this.tabs.get(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 j9.warn(`Timed out waiting for tab to become ready`,{jid:e}),!1}async sendPrompt(e,t,n,r,i=[],a){let o=this.contexts.get(e);o||=(await this.createTab(e),this.contexts.get(e));let s=this.tabs.get(e);if(s?.status===`initializing`){if(j9.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){j9.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}o=this.contexts.get(e),s=this.tabs.get(e)}if(!o){j9.error(`Context not found after creation`,{jid:e});return}this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),s&&(s.status=`processing`,s.lastActivity=new Date().toISOString(),this.tabs.set(e,s),this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),j9.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();await this.deps.db.saveScoop(e),t.set(e.jid,e),this.deps.messageRouter.ensureQueue(e.jid),j9.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.isCone||bb(`spawn`,e.folder)}catch(n){j9.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){j9.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=>{j9.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}}async unregister(e){let t=this.deps.getScoops(),n=t.get(e),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=>{j9.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.deps.idleTimers.clear(e),this.destroyTab(e),this.deps.getSessionStore()?.delete(e).catch(t=>{j9.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.scoopObservers.delete(e),this.deps.completionService.forgetScoop(e,`unregister`);let a=this.deps.approvalRouter.failScoop(e);if(a>0&&j9.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:a}),j9.info(`Scoop unregistered`,{jid:e}),n)try{this.deps.callbacks.onScoopUnregistered?.(n)}catch(t){j9.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}}updateModelOnAll(){for(let e of this.contexts.values())e.updateModel();j9.info(`Model updated on all active contexts`,{contextCount:this.contexts.size})}async reloadAllSkills(){let e=[];for(let[t,n]of this.contexts){let r=this.tabs.get(t);(r?.status===`ready`||r?.status===`processing`)&&e.push(n.reloadSkills().catch(e=>{j9.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),j9.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.contexts.get(e),a=i?i.setThinkingLevel(t,n):null;if(t===void 0){if(r.config&&r.config.thinkingLevel!==void 0){let{thinkingLevel:e,effortOverride:t,...n}=r.config;r.config=n}}else r.config={...r.config??{},thinkingLevel:t,effortOverride:n};try{await this.deps.db.saveScoop(r)}catch(t){j9.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();return{onResponse:(i,o)=>{a().has(e)&&(n.onResponse(e,i,o),this.dispatch(e,`onResponse`,i,o),t.isCone||(o?r.appendResponseChunk(e,i):r.setResponseFull(e,i)))},onResponseDone:()=>{if(!a().has(e))return;let t=this.tabs.get(e);t&&(t.lastActivity=new Date().toISOString(),this.tabs.set(e,t)),n.onResponseDone(e)},onError:r=>{if(!a().has(e))return;let i=this.tabs.get(e);i&&(i.status=`error`,i.error=r,this.tabs.set(e,i)),bb(`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:i=>{if(!a().has(e))return;let o=this.tabs.get(e);o&&(o.status=i,o.lastActivity=new Date().toISOString(),this.tabs.set(e,o)),n.onStatusChange(e,i),this.dispatch(e,`onStatusChange`,i),i===`ready`&&this.deps.messageRouter.flushOnIdle(e),i===`ready`&&!t.isCone&&r.notifyCompletion(e)},onCompactionStateChange:t=>{n.onCompactionStateChange?.(e,t)},onToolStart:(t,r)=>{n.onToolStart?.(e,t,r)},onToolEnd:(t,r,i)=>{n.onToolEnd?.(e,t,r,i)},onToolUI:(t,r,i)=>{n.onToolUI?.(e,t,r,i)},onToolUIDone:t=>{n.onToolUIDone?.(e,t)},onSendMessage:(t,r)=>{let i=`${r?`[${r}] `:``}${t}`;n.onSendMessage(e,i),this.dispatch(e,`onSendMessage`,t)},getScoops:()=>i.getScoops(),getScoopTabState:t.isCone?e=>this.tabs.get(e):void 0,onFeedScoop:t.isCone?(e,n)=>i.delegateToScoop(e,n,t.assistantLabel):void 0,onScoopScoop:t.isCone?async e=>{let n={...e,jid:`scoop_${e.folder}_${Date.now()}`,parentJid:t.jid};return await i.registerScoop(n),n}:void 0,onDropScoop:t.isCone?async e=>{await i.unregisterScoop(e)}:void 0,onMuteScoops:t.isCone?e=>i.muteScoops(e):void 0,onUnmuteScoops:t.isCone?e=>i.unmuteScoops(e):void 0,onScheduleScoopWait:t.isCone?(e,t)=>i.scheduleScoopWait(e,t):void 0,getGlobalMemory:()=>i.getGlobalMemory(),setGlobalMemory:t.isCone?e=>i.setGlobalMemory(e):void 0,appendConeMemory:t.isCone?(e,t)=>i.appendConeMemory(e,t):void 0,onSudoRequest:t.isCone?void 0:t=>i.enqueueSudoRequest(e,t),onSudoResolve:t.isCone?(e,t)=>i.resolveActionableLick(e,t):void 0,onListSudoRequests:t.isCone?()=>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);j9.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),bb(`error`,r.folder,t);let i=this.tabs.get(e);if(i&&(i.status=`error`,i.error=t,this.tabs.set(e,i)),this.deps.callbacks.onError(e,t),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,t),this.dispatch(e,`onStatusChange`,`error`),r.isCone)return;this.deps.completionService.forgetScoop(e,`fatal-error`);let a=Array.from(n.values()).find(e=>e.isCone);if(!a)return;let o={id:`scoop-error-${e}-${Date.now()}`,chatJid:a.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?.(a.jid,o)}catch(e){j9.warn(`onIncomingMessage for scoop-error threw`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}this.deps.handleMessage(o).catch(e=>{j9.error(`Failed to route fatal error to cone`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})})}};const M9=r(`scoop-message-router`);var hle=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(M9.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){M9.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}`);bb(`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),M9.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);M9.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){M9.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){M9.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(M9.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){M9.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{M9.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`;return!e||e.isCone||!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);M9.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);M9.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`;M9.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){M9.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){M9.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){M9.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(M9.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){M9.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){M9.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=cn(xn(fn(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){M9.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}: ${Dh(e.content,e.attachments)}`).join(`
8798
- `),l=s.flatMap(e=>Oh(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=cn(xn(fn(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(()=>{for(let e of this.deps.getScoops().keys()){let t=this.deps.getTabs().get(e);this.recordBusyDeferralIfPresent(e);let n=(this.messageQueues.get(e)?.length??0)>0;t?.status===`ready`&&n&&!this.debounceStates.has(e)&&this.processScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);M9.error(`Message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`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){if(this.cancelDebounce(e),t){t.clearMessages();let n=this.deps.getSessionStore();if(n){let r=t.getSessionId();await n.delete(r).catch(t=>{M9.warn(`Failed to clear agent session for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})})}}await this.deps.db.clearMessagesForScoop(e).catch(t=>{M9.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),M9.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=>{M9.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})});for(let e of this.deps.getContexts().values())e.clearMessages();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(),M9.info(`All messages cleared`)}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 N9=r(`orchestrator`);var gle=class{scoops=new Map;container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new lb({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;fsWatcher=null;sudoManager=null;lifecycle;idleTimers=new Fb({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new Nb({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new Db({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findCone:()=>Array.from(this.scoops.values()).find(e=>e.isCone),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 gb({getScoops:()=>this.scoops,getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>gn(e),saveMessage:e=>ln(e)});lickRegistry=new fb({getConeShell:()=>{let e=Array.from(this.scoops.values()).find(e=>e.isCone);return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new hle({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=>ln(e),deleteMessage:e=>dn(e),clearMessagesForScoop:e=>yn(e),clearAllMessages:()=>_n(),getMessagesSince:(e,t,n)=>hn(e,t,n),setState:(e,t)=>sn(e,t)},isExternalLickChannel:_g});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new mle({getScoops:()=>this.scoops,getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>on(e),deleteScoop:e=>vn(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>fee(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 init(e){await wn(),this.sharedFs=await Bn.create({dbName:`slicc-fs`}),this.sessionStore=new jh,this.fsWatcher=new mee,this.sharedFs.setWatcher(this.fsWatcher),globalThis.__slicc_fs_watcher=this.fsWatcher,await this.ensureRootStructure(),this.sudoManager=new T_({fs:this.sharedFs,watcher:this.fsWatcher}),await this.sudoManager.init();let t=await Sn();for(let e of Object.values(t)){e.isCone&&(e.trigger=void 0,e.requiresTrigger=!1,e.assistantLabel=e.assistantLabel||`sliccy`),this.migrateScoopConfig(e),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await mn(`lastAgentTs_${e.jid}`);t&&this.messageRouter.setLastAgentTimestamp(e.jid,t)}await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new mb({onTaskRun:async(e,t)=>{N9.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(),N9.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);N9.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:t.jid,folder:t.folder,isCone:t.isCone,error:n}),t.isCone||this.lifecycle.markTabError(t.jid,n)}finally{e?.(`scoop-restored:${t.jid}`)}gee(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=D_(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}migrateScoopConfig(e){if(e.isCone)return;let t=e.configSchemaVersion??0;t>=2||(t<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),t<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),e.configSchemaVersion=2)}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/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}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setScoopExistenceResolver(e=>this.getScoops().some(t=>uee(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)}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)}async resetFilesystem(){this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await Bn.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await ab(this.sharedFs).catch(e=>{N9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new T_({fs:this.sharedFs,watcher:this.fsWatcher}),await this.sudoManager.init(),this.costTracker.reset(),N9.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)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return gn(e)}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}updateModel(){this.lifecycle.updateModelOnAll()}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--7sONywg.js`).then(e=>e.t),r=await n(this.sharedFs);return[...t,...r.map(yee)]}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&&N9.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.lifecycle.destroyAllTabs(),this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,N9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new hg,t=this.sharedFs;return new Lv({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:ty(),snapshotStore:{read:e=>Jv(t,e),write:(e,n)=>qv(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=Array.from(this.scoops.values()).find(e=>e.isCone);return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.43.1`})}},_le=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=F9(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))}if(t.length===1){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);return P9.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new Qt(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=F9(e);if(t.length!==2)throw new Qt(`EISDIR`,`is a directory`,e);let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!P9.includes(r))throw new Qt(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new Qt(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=F9(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!P9.includes(r))throw new Qt(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new Qt(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new Qt(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new Qt(`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 Qt(`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}renderProcFile(e,t){if(e===1)return Cle(t);let n=this.pm.get(e);switch(t){case`status`:return vle(n);case`cmdline`:return yle(n);case`cwd`:return ble(n);case`stat`:return xle(n)}}};const P9=[`status`,`cmdline`,`cwd`,`stat`];function F9(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function I9(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function vle(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${L9(e.status)} (${e.status})`,`Owner:\t${Sle(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(`
8798
+ `),l=s.flatMap(e=>Oh(e.attachments));this.messageQueues.set(e,[]);let u=s[s.length-1],d=cn(xn(fn(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(()=>{for(let e of this.deps.getScoops().keys()){let t=this.deps.getTabs().get(e);this.recordBusyDeferralIfPresent(e);let n=(this.messageQueues.get(e)?.length??0)>0;t?.status===`ready`&&n&&!this.debounceStates.has(e)&&this.processScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);M9.error(`Message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`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){if(this.cancelDebounce(e),t){t.clearMessages();let n=this.deps.getSessionStore();if(n){let r=t.getSessionId();await n.delete(r).catch(t=>{M9.warn(`Failed to clear agent session for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})})}}await this.deps.db.clearMessagesForScoop(e).catch(t=>{M9.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),M9.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=>{M9.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})});for(let e of this.deps.getContexts().values())e.clearMessages();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(),M9.info(`All messages cleared`)}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 N9=r(`orchestrator`);var gle=class{scoops=new Map;container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new lb({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;fsWatcher=null;sudoManager=null;lifecycle;idleTimers=new Fb({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new Nb({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts()});completionService=new Db({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findCone:()=>Array.from(this.scoops.values()).find(e=>e.isCone),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 gb({getScoops:()=>this.scoops,getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>gn(e),saveMessage:e=>ln(e)});lickRegistry=new fb({getConeShell:()=>{let e=Array.from(this.scoops.values()).find(e=>e.isCone);return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new hle({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=>ln(e),deleteMessage:e=>dn(e),clearMessagesForScoop:e=>yn(e),clearAllMessages:()=>_n(),getMessagesSince:(e,t,n)=>hn(e,t,n),setState:(e,t)=>sn(e,t)},isExternalLickChannel:_g});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new mle({getScoops:()=>this.scoops,getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>on(e),deleteScoop:e=>vn(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>fee(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 init(e){await wn(),this.sharedFs=await Bn.create({dbName:`slicc-fs`}),this.sessionStore=new jh,this.fsWatcher=new mee,this.sharedFs.setWatcher(this.fsWatcher),globalThis.__slicc_fs_watcher=this.fsWatcher,await this.ensureRootStructure(),this.sudoManager=new T_({fs:this.sharedFs,watcher:this.fsWatcher}),await this.sudoManager.init();let t=await Sn();for(let e of Object.values(t)){e.isCone&&(e.trigger=void 0,e.requiresTrigger=!1,e.assistantLabel=e.assistantLabel||`sliccy`),this.migrateScoopConfig(e),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await mn(`lastAgentTs_${e.jid}`);t&&this.messageRouter.setLastAgentTimestamp(e.jid,t)}await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new mb({onTaskRun:async(e,t)=>{N9.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(),N9.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);N9.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:t.jid,folder:t.folder,isCone:t.isCone,error:n}),t.isCone||this.lifecycle.markTabError(t.jid,n)}finally{e?.(`scoop-restored:${t.jid}`)}gee(e=>this.getSessionCostsForCommand(e)),this.unregisterExportService=D_(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}migrateScoopConfig(e){if(e.isCone)return;let t=e.configSchemaVersion??0;t>=2||(t<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),t<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),e.configSchemaVersion=2)}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/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}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setScoopExistenceResolver(e=>this.getScoops().some(t=>uee(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)}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)}async resetFilesystem(){this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await Bn.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await ab(this.sharedFs).catch(e=>{N9.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new T_({fs:this.sharedFs,watcher:this.fsWatcher}),await this.sudoManager.init(),this.costTracker.reset(),N9.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)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return gn(e)}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}updateModel(){this.lifecycle.updateModelOnAll()}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--7sONywg.js`).then(e=>e.t),r=await n(this.sharedFs);return[...t,...r.map(yee)]}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&&N9.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.lifecycle.destroyAllTabs(),this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,N9.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=new hg,t=this.sharedFs;return new Lv({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:ty(),snapshotStore:{read:e=>Jv(t,e),write:(e,n)=>qv(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=Array.from(this.scoops.values()).find(e=>e.isCone);return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.44.0`})}},_le=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=F9(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))}if(t.length===1){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);return P9.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new Qt(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=F9(e);if(t.length!==2)throw new Qt(`EISDIR`,`is a directory`,e);let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!P9.includes(r))throw new Qt(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new Qt(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=F9(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=I9(t[0]);if(n===null||!this.pidExists(n))throw new Qt(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!P9.includes(r))throw new Qt(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new Qt(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new Qt(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new Qt(`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 Qt(`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}renderProcFile(e,t){if(e===1)return Cle(t);let n=this.pm.get(e);switch(t){case`status`:return vle(n);case`cmdline`:return yle(n);case`cwd`:return ble(n);case`stat`:return xle(n)}}};const P9=[`status`,`cmdline`,`cwd`,`stat`];function F9(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function I9(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function vle(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${L9(e.status)} (${e.status})`,`Owner:\t${Sle(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(`
8799
8799
  `)+`
8800
8800
  `}function yle(e){return e.argv.join(`\0`)+`\0`}function ble(e){return e.cwd+`
8801
8801
  `}function xle(e){return[e.pid,`(${e.kind})`,L9(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
@@ -8804,6 +8804,6 @@ ${t}
8804
8804
  `;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
8805
8805
  `;case`stat`:return`1 (kernel-host) R 0 - 0 -
8806
8806
  `}}function wle(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(aB(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(!eB(n.token))return;let a=i.get(n.id);if(a){r({type:oB,id:n.id}),a.result&&r({type:sB,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:oB,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),605e3),r({type:sB,id:n.id,...e})};(uB(n)?pB(n):iB(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 Tle(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`preview`:return e.previewOrigin??`preview`;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function Ele(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`preview`:return e.previewConnId??`preview-${e.timestamp}`;case`discovery`:return e.discoveryUrl??`discovery-${e.timestamp}`;default:return e.cronId}}function Dle(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}Ole(e,t)}function Ole(e,{orchestrator:t,log:n}){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));let r=wg(e);if(r===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let i=Tle(e),a=Ele(e),o=e.type,s=t.getScoops(),c;if(c=e.targetScoop?s.find(t=>t.name===e.targetScoop||t.folder===e.targetScoop||t.folder===`${e.targetScoop}-scoop`):s.find(e=>e.isCone),!c){n.warn(`Lick target scoop not found`,e.targetScoop);return}let l={id:`${o}-${a}-${Date.now()}`,chatJid:c.jid,senderId:o,senderName:`${o}:${i}`,content:r.content,timestamp:e.timestamp,fromAssistant:!1,channel:o,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(l).catch(e=>{n.warn(`Lick message routing failed`,{channel:o,eventName:i,error:String(e)})})}async function kle(e,t,n,r,i){let a=new rr,o=new gle(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a),globalThis.__slicc_pm=a,globalThis.__slicc_browser=t,await n.bind(o,t);let s=Mn(()=>n.emitTrayRuntimeStatus()),c=cne(()=>n.emitTrayRuntimeStatus());return await o.init(i),await n.seedBuffersFromAgentState(),{processManager:a,orchestrator:o,unsubLeader:s,unsubFollower:c,sharedFs:o.getSharedFS()}}async function Ale(e,t,n){let{registerSessionCostsProvider:r}=await import(`./cost-command-C9faxPNJ.js`).then(e=>e.t);r(t=>e.getSessionCostsForCommand(t));let{getLickManager:i}=await import(`./lick-manager-GJgyahla.js`).then(e=>e.r),a=i();await a.init(),e.setLickManager(a);let o=t.lickEventHandler??Dle,s={orchestrator:e,lickManager:a,log:n};return a.setEventHandler(e=>o(e,s)),a}async function jle(e){e.getScoops().some(e=>e.isCone)||await e.registerScoop({jid:`cone_${Date.now()}`,name:`Cone`,folder:`cone`,isCone:!0,type:`cone`,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()})}function Mle(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:i}=e;bse({sharedFs:i,getConeJid:()=>t.getScoops().find(e=>e.isCone)?.jid,fireLick:e=>r.emitEvent(e),processManager:n,runRealm:(e,t,n)=>nW(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>t9().slice(10,22),splitResult:(e,t)=>n9(e,t)})}async function Nle(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-ZoJOTa93.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))+`
8807
- `,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 Ple(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-DeUbk3le.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 Fle(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 Vg(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})},Ile(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Ile(e){let t=bt();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,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:()=>Hg()}}function Lle(e,t,n){(async()=>{try{let{getAllMountEntries:r}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:i}=await import(`./mount-recovery-BK_G25OD.js`).then(e=>e.n),a=await r();if(a.length===0)return;let{needsRecovery:o}=await i(a,e,n);if(o.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:o}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function Rle(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-TqZQh5uz.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 zle(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-CpQHnQNg.js`),{ScriptCatalog:r}=await import(`./script-catalog-e0GUPxAf.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 Ble(){return Se()}async function Vle(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t),{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await kle(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?eg(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new _le(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Ale(l,e,o);s(`lick-manager-ready`),f&&Mle({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),globalThis.__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await Nle({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});globalThis.__slicc_wsSubscribers=h;let g=null;Ble()&&(g=await Ple(p,o,e.localLickWsUrl??null));let _=Fle(n,p,o);f&&Lle(f,p,o),a||await jle(l),s(`cone-bootstrapped`),f&&Rle(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await zle(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=wle({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 Hle({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 Hle(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)}Ule({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Ule(e){let t=globalThis;t.__slicc_pm===e.processManager&&delete t.__slicc_pm,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[Q7]}const R9=`x-bypass-llm-proxy`;function Wle(e,t,n){return t?(r,i)=>{if(!Gle(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(R9)||a.set(R9,`1`),e(r,{...i,headers:a})}:e}function Gle(e,t,n){if(qle(e,t))return!0;let r=n?.()??null;return r?Kle(e,r,t):!1}function Kle(e,t,n){let r=z9(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 qle(e,t){let n=z9(e);try{return new URL(n,t).origin===t}catch{return!0}}function z9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Jle(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 Yle=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(!Xle(e)||e.source!==`panel`)return;let t=e.payload;Zle(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=await t.shell.executeCommand(e.command,n.signal,r?.pid);await this.emitExecSuccess(e,i,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?B9(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,B9(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 Xle(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function B9(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Zle(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 Qle=class extends p9{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 $le(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new Yle({transport:t,processManager:i,createShell:(e,a)=>new Qle(e,t,{fs:n,cwd:a.cwd,env:a.env,browserAPI:r,processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function eue(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function tue(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`the provided model identifier is invalid`)||t.includes(`model not allowed`)}function nue(e){return e?e.toLowerCase().includes(`please log in again`):!1}function V9(e){return eue(e)||tue(e)||nue(e)}let H9=null,U9=!1;function rue(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function iue(){return rue()?`standalone-worker`:wt()?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function aue(){if(!U9&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){sce(oue),yb(sue),Vb(W9);try{let e=iue();e!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${e}`:globalThis.RUM_GENERATION=`slicc-${e}`,e===`standalone-worker`?(H9=(await import(`./rum-worker-CwmNSpjO.js`)).default,self.addEventListener(`error`,e=>{let t=e;W9(`js`,t.error?.message??t.message??``)}),self.addEventListener(`unhandledrejection`,e=>{let t=e.reason;W9(`js`,t instanceof Error?t.message:String(t))})):e===`extension`?(H9=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{let t=e;W9(`js`,t.error?.message??t.message??``)}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;W9(`js`,t instanceof Error?t.message:String(t))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),uue(),H9=(await import(`./src-C9oNvq2b.js`)).sampleRUM),U9=!0,H9&&H9(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}}function oue(e){H9?.(`fill`,{source:e})}function W9(e,t){let n=t;if(typeof n==`string`){if(V9(n))return;let e=G9(n);if(e===null)return;n=e}H9?.(`error`,{source:e,target:n})}function sue(e,t,n){if(e===`error`){let e=n;if(typeof e==`string`){if(V9(e))return;let t=G9(e);if(t===null)return;e=t}H9?.(`error`,{source:`scoop:${t}`,target:e});return}H9?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function cue(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function G9(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
8807
+ `,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 Ple(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-DeUbk3le.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 Fle(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 Vg(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})},Ile(t));return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Ile(e){let t=bt();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,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:()=>Hg()}}function Lle(e,t,n){(async()=>{try{let{getAllMountEntries:r}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:i}=await import(`./mount-recovery-DapDhhBv.js`).then(e=>e.n),a=await r();if(a.length===0)return;let{needsRecovery:o}=await i(a,e,n);if(o.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:o}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function Rle(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-kOnlsa6m.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 zle(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-CpQHnQNg.js`),{ScriptCatalog:r}=await import(`./script-catalog-e0GUPxAf.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 Ble(){return Se()}async function Vle(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t),{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await kle(t,n,r,i,e.onBootProgress);if(s(`orchestrator-ready`),f?eg(l,f,l.getSessionStore()):o.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new _le(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let p=await Ale(l,e,o);s(`lick-manager-ready`),f&&Mle({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),globalThis.__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await Nle({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:o});globalThis.__slicc_wsSubscribers=h;let g=null;Ble()&&(g=await Ple(p,o,e.localLickWsUrl??null));let _=Fle(n,p,o);f&&Lle(f,p,o),a||await jle(l),s(`cone-bootstrapped`),f&&Rle(p,o);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await zle(f,n,o));let b=null;f&&e.syncFsChannelNonce&&(b=wle({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 Hle({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 Hle(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)}Ule({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Ule(e){let t=globalThis;t.__slicc_pm===e.processManager&&delete t.__slicc_pm,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[Q7]}const R9=`x-bypass-llm-proxy`;function Wle(e,t,n){return t?(r,i)=>{if(!Gle(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(R9)||a.set(R9,`1`),e(r,{...i,headers:a})}:e}function Gle(e,t,n){if(qle(e,t))return!0;let r=n?.()??null;return r?Kle(e,r,t):!1}function Kle(e,t,n){let r=z9(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 qle(e,t){let n=z9(e);try{return new URL(n,t).origin===t}catch{return!0}}function z9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Jle(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 Yle=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(!Xle(e)||e.source!==`panel`)return;let t=e.payload;Zle(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=await t.shell.executeCommand(e.command,n.signal,r?.pid);await this.emitExecSuccess(e,i,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?B9(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,B9(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 Xle(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function B9(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Zle(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 Qle=class extends p9{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 $le(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new Yle({transport:t,processManager:i,createShell:(e,a)=>new Qle(e,t,{fs:n,cwd:a.cwd,env:a.env,browserAPI:r,processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function eue(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function tue(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`the provided model identifier is invalid`)||t.includes(`model not allowed`)}function nue(e){return e?e.toLowerCase().includes(`please log in again`):!1}function V9(e){return eue(e)||tue(e)||nue(e)}let H9=null,U9=!1;function rue(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function iue(){return rue()?`standalone-worker`:wt()?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function aue(){if(!U9&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){sce(oue),yb(sue),Vb(W9);try{let e=iue();e!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${e}`:globalThis.RUM_GENERATION=`slicc-${e}`,e===`standalone-worker`?(H9=(await import(`./rum-worker-CwmNSpjO.js`)).default,self.addEventListener(`error`,e=>{let t=e;W9(`js`,t.error?.message??t.message??``)}),self.addEventListener(`unhandledrejection`,e=>{let t=e.reason;W9(`js`,t instanceof Error?t.message:String(t))})):e===`extension`?(H9=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&(window.addEventListener(`error`,e=>{let t=e;W9(`js`,t.error?.message??t.message??``)}),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;W9(`js`,t instanceof Error?t.message:String(t))}))):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),uue(),H9=(await import(`./src-C9oNvq2b.js`)).sampleRUM),U9=!0,H9&&H9(`navigate`,{source:typeof document<`u`?document.referrer:``,target:e})}catch{}}}function oue(e){H9?.(`fill`,{source:e})}function W9(e,t){let n=t;if(typeof n==`string`){if(V9(n))return;let e=G9(n);if(e===null)return;n=e}H9?.(`error`,{source:e,target:n})}function sue(e,t,n){if(e===`error`){let e=n;if(typeof e==`string`){if(V9(e))return;let t=G9(e);if(t===null)return;e=t}H9?.(`error`,{source:`scoop:${t}`,target:e});return}H9?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function cue(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function G9(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
8808
8808
  `).filter(e=>!cue(e)).join(`
8809
- `).trim();return e?e.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`):null}return t.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}const K9=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`);function q9(e){if(typeof e!=`string`)return{kind:`absent`};let t=G9(e);return t===null?{kind:`noise`}:{kind:`kept`,value:t,mutated:t!==e}}function lue(e){let t=q9(e.source),n=q9(e.target),r=t.kind!==`kept`,i=n.kind!==`kept`;if((t.kind!==`absent`||n.kind!==`absent`)&&r&&i)return!0;let a=!1;return t.kind===`kept`?t.mutated&&(e.source=t.value,a=!0):t.kind===`noise`&&(e.source=``,a=!0),n.kind===`kept`?n.mutated&&(e.target=n.value,a=!0):n.kind===`noise`&&(e.target=``,a=!0),a?JSON.stringify(e):null}function uue(){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let e=navigator.sendBeacon;if(e[K9])return;let t=e.bind(navigator),n=((e,n)=>{try{let r=typeof n==`string`?n:n instanceof ArrayBuffer?new TextDecoder().decode(n):null;if(r&&r.length>0&&r.charCodeAt(0)===123){let n=JSON.parse(r);if(n?.checkpoint===`error`){let r=lue(n);if(r===!0)return!0;if(r!==null)return t(e,r)}}}catch{}return t(e,n)});n[K9]=!0,navigator.sendBeacon=n}function due(e){let t=new fue(e);return t.start(),{stop:()=>t.dispose()}}var fue=class{transport;client;writableClient;log;unsubscribe=null;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!pue(e)||e.source!==`panel`)return;let t=e.payload;if(mue(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(hue(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null}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 Qt(`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 Qt(`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(gue(e.type),e.requestId,new Qt(`EACCES`,`vfs-rpc-host has no writable backend wired`),_ue(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 Qt(`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 Qt(`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 Qt(`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 pue(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function mue(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 hue(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 gue(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 _ue(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof Qt?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function vue(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Wle(e.bind(globalThis),t,yue)}function yue(){let e=vt();if(!e)return null;try{return new URL(e).origin}catch{return null}}function bue(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 xue=Jle(e=>wue(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&xue.handle(e.data)});function Sue(e){let t=Wi(e.pageBuildId,`6.43.1-msluqgqr`);return()=>{t&&W9(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.43.1-msluqgqr`)}}function Cue(e){vue(),oee(e.localApiBaseUrl??null),gt(e.bridgeToken??null),XU(e.syncFsBridgeEnabled??!1),yt(e.extensionDelegateId??null),bue(e.localStorageSeed??{}),e.flagFloat&&Mi(e.flagFloat)}async function wue(e){Vi(e.instanceId);let t=Sue(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{Cue(e),aue().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=qi(e.kernelPort),a=new Mg(r),o=Mg.createCallbacks(a),c=new Ji(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new fi(c);Y9=await Vle({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-14cdGa6x.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(Uee(i));let m=await Eue({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){Tue(e.kernelPort,t)}}function Tue(e,t){Ui(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 Eue(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=$le({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=due({transport:e.transport,client:t,writableClient:t,logger:console}),i=await Due(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function Due(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-BUDIvdid.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-Djt8o5f7.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-BML_ivCH.js`).then(e=>e.o),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())});
8809
+ `).trim();return e?e.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`):null}return t.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}const K9=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`);function q9(e){if(typeof e!=`string`)return{kind:`absent`};let t=G9(e);return t===null?{kind:`noise`}:{kind:`kept`,value:t,mutated:t!==e}}function lue(e){let t=q9(e.source),n=q9(e.target),r=t.kind!==`kept`,i=n.kind!==`kept`;if((t.kind!==`absent`||n.kind!==`absent`)&&r&&i)return!0;let a=!1;return t.kind===`kept`?t.mutated&&(e.source=t.value,a=!0):t.kind===`noise`&&(e.source=``,a=!0),n.kind===`kept`?n.mutated&&(e.target=n.value,a=!0):n.kind===`noise`&&(e.target=``,a=!0),a?JSON.stringify(e):null}function uue(){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let e=navigator.sendBeacon;if(e[K9])return;let t=e.bind(navigator),n=((e,n)=>{try{let r=typeof n==`string`?n:n instanceof ArrayBuffer?new TextDecoder().decode(n):null;if(r&&r.length>0&&r.charCodeAt(0)===123){let n=JSON.parse(r);if(n?.checkpoint===`error`){let r=lue(n);if(r===!0)return!0;if(r!==null)return t(e,r)}}}catch{}return t(e,n)});n[K9]=!0,navigator.sendBeacon=n}function due(e){let t=new fue(e);return t.start(),{stop:()=>t.dispose()}}var fue=class{transport;client;writableClient;log;unsubscribe=null;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!pue(e)||e.source!==`panel`)return;let t=e.payload;if(mue(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(hue(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null}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 Qt(`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 Qt(`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(gue(e.type),e.requestId,new Qt(`EACCES`,`vfs-rpc-host has no writable backend wired`),_ue(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 Qt(`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 Qt(`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 Qt(`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 pue(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function mue(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 hue(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 gue(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 _ue(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function J9(e,t){return e instanceof Qt?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function vue(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=Wle(e.bind(globalThis),t,yue)}function yue(){let e=vt();if(!e)return null;try{return new URL(e).origin}catch{return null}}function bue(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 xue=Jle(e=>wue(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&xue.handle(e.data)});function Sue(e){let t=Wi(e.pageBuildId,`6.44.0-mslwotes`);return()=>{t&&W9(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.44.0-mslwotes`)}}function Cue(e){vue(),oee(e.localApiBaseUrl??null),gt(e.bridgeToken??null),XU(e.syncFsBridgeEnabled??!1),yt(e.extensionDelegateId??null),bue(e.localStorageSeed??{}),e.flagFloat&&Mi(e.flagFloat)}async function wue(e){Vi(e.instanceId);let t=Sue(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{Cue(e),aue().then(t).catch(()=>{}),await s(),n(`providers-registered`);let r=qi(e.kernelPort),a=new Mg(r),o=Mg.createCallbacks(a),c=new Ji(e.cdpPort);await c.connect(),n(`cdp-connected`);let l=new fi(c);Y9=await Vle({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-14cdGa6x.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(Uee(i));let m=await Eue({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){Tue(e.kernelPort,t)}}function Tue(e,t){Ui(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 Eue(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=$le({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),logger:console}),r=due({transport:e.transport,client:t,writableClient:t,logger:console}),i=await Due(t,e.instanceId);return{stopTerminalHost:n.stop,stopVfsRpcHost:r.stop,stopSpeechAssetsResponder:i}}async function Due(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-BUDIvdid.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-DO-sSGi6.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-BML_ivCH.js`).then(e=>e.o),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())});