@maincode-ai/matilda-code 0.21.7-nightly.20260923.69f69be4d → 0.21.7-preview.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 (35) hide show
  1. package/chunks/{agent-UQ57YSE4.js → agent-UUCFMSBD.js} +1 -1
  2. package/chunks/{agent-headless-37RJC3VI.js → agent-headless-WVHRGFQH.js} +1 -1
  3. package/chunks/{chunk-PQKMHLEO.js → chunk-6DUA4QHF.js} +1 -1
  4. package/chunks/{chunk-KUW2ZYPA.js → chunk-7RXZY37W.js} +1 -1
  5. package/chunks/{chunk-PGNDHXXN.js → chunk-CLUHH567.js} +1 -1
  6. package/chunks/{chunk-QGWXRDZG.js → chunk-S2CVFPFY.js} +2 -2
  7. package/chunks/{chunk-BFPWEGI4.js → chunk-SHILLJ5Y.js} +1 -1
  8. package/chunks/{chunk-HTJCMLM3.js → chunk-VGT5HJ7R.js} +1 -1
  9. package/chunks/{chunk-54SHZSRX.js → chunk-WZI4OJVG.js} +2 -2
  10. package/chunks/{computer-use-2QMQSH62.js → computer-use-GPO2LXUC.js} +1 -1
  11. package/chunks/{contextCommand-5AG6B7OB.js → contextCommand-34YLPE2P.js} +1 -1
  12. package/chunks/{edit-4WM3TBLQ.js → edit-5OOROJSC.js} +1 -1
  13. package/chunks/{enter-worktree-7AFV3VHO.js → enter-worktree-BA566WJD.js} +1 -1
  14. package/chunks/{enterPlanMode-APQ453L7.js → enterPlanMode-EJFIZN6F.js} +1 -1
  15. package/chunks/{exit-worktree-JAEQOZJT.js → exit-worktree-6EJS75QL.js} +1 -1
  16. package/chunks/{exitPlanMode-5TN57NEB.js → exitPlanMode-WY6BDPUM.js} +1 -1
  17. package/chunks/{geminiContentGenerator-TFTB4DW4.js → geminiContentGenerator-BCI76IT7.js} +1 -1
  18. package/chunks/{glob-OEGC7ORJ.js → glob-ZBJ6LKGA.js} +1 -1
  19. package/chunks/{grep-N6FFE6RF.js → grep-EYIEODLK.js} +1 -1
  20. package/chunks/{matildaAgentContentGenerator-Q3EUL7GB.js → matildaAgentContentGenerator-522K7OVF.js} +1 -1
  21. package/chunks/{matildaContentGenerator-HBJEWXBT.js → matildaContentGenerator-BXETOJXX.js} +1 -1
  22. package/chunks/{monitor-O2AZ62KC.js → monitor-UQZLLIKO.js} +1 -1
  23. package/chunks/{notebook-edit-2ZIKJGNX.js → notebook-edit-JMIRAMTL.js} +1 -1
  24. package/chunks/{openaiContentGenerator-EQLBO4AF.js → openaiContentGenerator-VV354WQG.js} +1 -1
  25. package/chunks/{ripGrep-E5SCSDGM.js → ripGrep-GKDPGDHU.js} +1 -1
  26. package/chunks/{scheduler-6R56JYAP.js → scheduler-CLBPJ3HG.js} +1 -1
  27. package/chunks/{serve-2LANOA2Z.js → serve-VEGQRSWY.js} +1 -1
  28. package/chunks/{shell-QBAAGMFM.js → shell-KSFD7HD2.js} +1 -1
  29. package/chunks/{skill-CCAXGP5N.js → skill-XCDS6LQG.js} +1 -1
  30. package/chunks/{src-NONM7A63.js → src-CLPCRR5T.js} +1 -1
  31. package/chunks/{team-create-2J4EAUTY.js → team-create-5TN5DZSR.js} +1 -1
  32. package/chunks/{workflow-C3JLOQH7.js → workflow-3CZ6X44G.js} +2 -2
  33. package/chunks/{write-file-RLAP6QIC.js → write-file-ZTBBOZ3L.js} +1 -1
  34. package/cli.js +6 -6
  35. package/package.json +2 -2
package/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  // Force strict mode and setup for ESM
3
3
  "use strict";
4
- import{a as he,b as EN,c as KZ,d as zZ,e as XZ}from"./chunks/chunk-BFPWEGI4.js";import{a as VZ}from"./chunks/chunk-7ZATDBWL.js";import{a as UZ,c as J3,d as HZ,e as GZ,g as WZ}from"./chunks/chunk-GC2F575A.js";import{a as _Z,c as MT,d as Y3,e as q3}from"./chunks/chunk-3HUM74NZ.js";import{$ as mN,A as dN,C as DZ,D as BZ,E as H3,F as ih,G as gN,H as wd,I as SZ,J as zE,K as xZ,L as wZ,M as XE,N as bZ,Na as Tr,O as TZ,P as G3,Q as W3,R as Wo,S as j3,Sa as Nl,T as vT,Ta as ba,U as QZ,Ua as hN,V as vZ,W as RZ,X as MZ,Y as Jt,Z as kZ,_ as FZ,a as ST,aa as NZ,ab as YZ,b as sh,ba as O2e,c as dZ,ca as nu,cb as lh,d as si,da as fN,e as zi,ea as P2e,eb as qZ,f as Xi,fa as U2e,fb as _l,g as cr,ga as pN,gb as NB,h as L3,ha as RT,hb as Pg,i as O3,ia as ah,ib as Mn,j as gZ,jb as JZ,k as mZ,kb as $Z,l as Og,lb as CN,m as fZ,n as Rs,o as gf,oa as jZ,p as hZ,q as wT,r as bT,s as TT,t as IZ,u as P3,v as KE,w as yZ,x as QT,y as AN,z as U3}from"./chunks/chunk-54SHZSRX.js";import{a as tt,b as Ge,c as lN,d as xT,e as cN,f as pZ,j as uN,k as FB,l as m,m as CZ,n as EZ}from"./chunks/chunk-HTJCMLM3.js";import{a as LZ,b as OZ,c as PZ,e as Re}from"./chunks/chunk-JSFA3NEP.js";import{$a as BB,$h as bX,$i as _2e,Ae as lr,Ah as yA,Bh as v3,Bj as OX,Bl as sZ,Ca as mz,Ce as aX,Ch as SX,Cj as VF,Ck as JX,De as lX,Df as kl,Dg as EX,Dj as KF,Ee as N2e,Ei as RX,El as iZ,Fk as tN,Fl as aZ,Gd as Oz,Gk as $X,Gl as lZ,Hd as Pz,Hf as AX,Hl as cZ,Ic as Tz,Id as Uz,If as dX,Il as uZ,J as z7,Jc as Qz,Jd as Hz,Jl as AZ,Kc as vz,Kd as Gz,Ke as WF,Kk as VX,Kl as rN,Lc as w3,Ld as Wz,Le as ET,Lk as KX,Ll as sN,Ma as hT,Mc as PF,Mi as MX,Mk as F3,Ml as kB,Nb as yz,Nc as Rz,Nd as jz,Ng as JE,Nj as PX,Nk as N3,Nl as iN,Oa as vi,Ob as Dz,Oc as k2e,Oe as Lg,Oh as xX,Ok as VE,Ol as aN,Pb as Bz,Pc as b3,Pi as xd,Q as az,Qb as _g,R as Af,Rb as Sz,Rc as Mz,Rd as xB,Rh as wX,S as lz,Sd as Yz,Sj as zF,Sk as zX,Ta as MF,Tc as kz,Td as qz,Tf as Q3,Tj as UX,U as vF,Ua as fz,Ub as xz,Uf as gX,Uj as HX,Ve as IT,Vj as QB,Wa as kF,Wd as Jz,Wf as mX,Wg as YF,Wh as JF,X as cz,Xa as qE,Xd as $z,Xi as kX,Xj as Ki,Y as uz,Ya as FF,Yd as Vz,Yf as fX,Yh as R3,Z as Az,Za as Fg,Zf as pX,Zj as BT,_ as dz,_a as pz,ab as Ml,ae as Kz,ai as TX,aj as FX,bb as Ou,be as zz,bi as QX,ca as x3,cb as hz,ci as DT,ck as oh,de as Xz,dk as $E,eb as Cz,ed as Fz,ee as Zz,eg as nh,eh as yT,f as pB,fd as T3,fe as eX,fh as IX,g as GE,gc as LF,gg as jF,gk as XF,h as c7,hc as OF,hd as Nz,he as tX,hk as vB,ic as wz,ie as HF,ig as hX,ij as L2e,il as XX,j as V7,jg as CX,jh as yX,ji as vX,jl as ZX,kd as _z,kl as _3,lc as bz,le as nX,lf as cX,lh as Sd,lj as NX,ll as nN,mi as M3,mj as TB,ml as eZ,ne as oX,nk as ZF,nl as tZ,oe as GF,oj as $F,ok as k3,ol as nZ,pa as RF,pb as CT,pe as wB,ph as qF,pk as GX,qa as gz,qe as rX,qf as df,qk as WX,ql as oN,rb as Ez,rg as bB,rj as Fl,sb as SB,sd as Lz,tb as Iz,vb as th,vk as eN,w as K7,wd as UF,wh as DX,wk as jX,wl as rh,xe as sX,xh as BX,xj as _X,xk as YX,xl as oZ,y as xF,ye as F2e,yk as qX,yl as rZ,z as DB,zb as Ng,ze as iX,zf as uX,zj as LX,zk as RB,zl as MB}from"./chunks/chunk-QGWXRDZG.js";import{a as $o}from"./chunks/chunk-TZIDSCTF.js";import"./chunks/chunk-ROETRE5J.js";import"./chunks/chunk-INAZKGGR.js";import{a as M2e}from"./chunks/chunk-DCQKJTAX.js";import{a as YE}from"./chunks/chunk-LSDMWVW6.js";import"./chunks/chunk-MTMU7JYZ.js";import"./chunks/chunk-TXMXCR7D.js";import"./chunks/chunk-YULUB745.js";import"./chunks/chunk-VYTYYCBR.js";import"./chunks/chunk-TISQNFB5.js";import{b as X7,c as IA,d as Z7,e as ez,h as wF,j as bF,k as tz,m as nz,n as oz,p as S3,t as iz,v as uf,w as QF}from"./chunks/chunk-34DXSYJZ.js";import"./chunks/chunk-47XR7IMP.js";import"./chunks/chunk-FWIVFCKF.js";import"./chunks/chunk-QKYGQLWC.js";import{c as NF,f as _F}from"./chunks/chunk-FRL6KOLY.js";import{b as TF,d as rz,h as sz,i as B3}from"./chunks/chunk-VWWEEU4V.js";import"./chunks/chunk-RNKDFE2S.js";import"./chunks/chunk-Q2I3ARPJ.js";import"./chunks/chunk-PGNDHXXN.js";import{b as j7,d as Y7,e as D3,i as q7,k as J7}from"./chunks/chunk-QHA3ZBRO.js";import{B as F7,Y as I3,Z as U7,c as EA,ga as BF,i as M7,ja as y3,ka as H7,la as G7,n as k7,na as W7,oa as SF,pa as Vi}from"./chunks/chunk-PQKMHLEO.js";import{c as L7,d as O7}from"./chunks/chunk-4F4DA5UI.js";import{e as Bd}from"./chunks/chunk-DC7LAFZZ.js";import{m as P7,v as E3}from"./chunks/chunk-S7G6QPEP.js";import{b as $i}from"./chunks/chunk-4J6DC24J.js";import"./chunks/chunk-LJR4RZZ2.js";import"./chunks/chunk-U347OO7S.js";import{h as Zp,i as DF,j as yB,k as N7,m as _7}from"./chunks/chunk-SDTWBD62.js";import{Bb as f7,Cc as kg,Eb as p7,Gc as IF,Hb as CB,Hc as w7,Ib as h7,Jb as p3,Lc as b7,Qb as C7,Tc as C3,Vb as h3,Wb as EF,Xb as fT,Xc as yF,Yc as pT,Zb as E7,Zc as T7,cc as I7,db as m3,e as CF,gb as A7,h as br,hb as d7,hd as Q7,ib as g7,jb as m7,jc as WE,jd as jE,kb as f3,lc as y7,nd as v7,pc as EB,qc as D7,r as g3,s as u7,sd as IB,t as Lu,td as R7}from"./chunks/chunk-B3NVKOSU.js";import"./chunks/chunk-WVY2P6WH.js";import"./chunks/chunk-UIRBHC5X.js";import{h as Xp,j as B7,s as S7,w as x7}from"./chunks/chunk-32PTAACU.js";import"./chunks/chunk-32T6RWWT.js";import{e as l7,l as _u,p as qt,q as hB}from"./chunks/chunk-6B5BDE7S.js";import{a as eh,o as cf,t as $7}from"./chunks/chunk-RJX7DK4Y.js";import"./chunks/chunk-XCJYORZX.js";import"./chunks/chunk-ESSYHTAZ.js";import"./chunks/chunk-3YLXGE6T.js";import{b as i7,e as a7}from"./chunks/chunk-EQEQPZLQ.js";import{B as fF,D as pF,F as gT,G as mT,J as zp,P as Tt,Q as s7,Y as hF,aa as Oe,b as Dd,c as ZK,d as jr,e as d3,g as e7,i as gF,j as Ji,k as Rl,l as HE,n as t7,o as n7,q as o7,s as mF,u as r7}from"./chunks/chunk-VLYRNOD3.js";import"./chunks/chunk-G7R2XEEF.js";import"./chunks/chunk-OA56BXPD.js";import"./chunks/chunk-FWDMPRKU.js";import{a as __matilda_dirname,b as p}from"./chunks/chunk-GZPNIYVZ.js";import{a as $e,d as Te,e as v2e,f as k,g as R2e}from"./chunks/chunk-OWGSC52X.js";var See=Te((qxt,wN)=>{p();wN.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&wN.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&wN.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var Qee=Te(($xt,YB)=>{p();var us=globalThis.process,tI=function(e){return e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function"};tI(us)?(xee=$e("assert"),WB=See(),wee=/^win/i.test(us.platform),_T=$e("events"),typeof _T!="function"&&(_T=_T.EventEmitter),us.__signal_exit_emitter__?va=us.__signal_exit_emitter__:(va=us.__signal_exit_emitter__=new _T,va.count=0,va.emitted={}),va.infinite||(va.setMaxListeners(1/0),va.infinite=!0),YB.exports=function(e,t){if(!tI(globalThis.process))return function(){};xee.equal(typeof e,"function","a callback must be provided for exit handler"),jB===!1&&r8();var n="exit";t&&t.alwaysLast&&(n="afterexit");var o=function(){va.removeListener(n,e),va.listeners("exit").length===0&&va.listeners("afterexit").length===0&&bN()};return va.on(n,e),o},bN=function(){!jB||!tI(globalThis.process)||(jB=!1,WB.forEach(function(t){try{us.removeListener(t,TN[t])}catch{}}),us.emit=QN,us.reallyExit=s8,va.count-=1)},YB.exports.unload=bN,nI=function(t,n,o){va.emitted[t]||(va.emitted[t]=!0,va.emit(t,n,o))},TN={},WB.forEach(function(e){TN[e]=function(){if(tI(globalThis.process)){var n=us.listeners(e);n.length===va.count&&(bN(),nI("exit",null,e),nI("afterexit",null,e),wee&&e==="SIGHUP"&&(e="SIGINT"),us.kill(us.pid,e))}}}),YB.exports.signals=function(){return WB},jB=!1,r8=function(){jB||!tI(globalThis.process)||(jB=!0,va.count+=1,WB=WB.filter(function(t){try{return us.on(t,TN[t]),!0}catch{return!1}}),us.emit=Tee,us.reallyExit=bee)},YB.exports.load=r8,s8=us.reallyExit,bee=function(t){tI(globalThis.process)&&(us.exitCode=t||0,nI("exit",us.exitCode,null),nI("afterexit",us.exitCode,null),s8.call(us,us.exitCode))},QN=us.emit,Tee=function(t,n){if(t==="exit"&&tI(globalThis.process)){n!==void 0&&(us.exitCode=n);var o=QN.apply(this,arguments);return nI("exit",us.exitCode,null),nI("afterexit",us.exitCode,null),o}else return QN.apply(this,arguments)}):YB.exports=function(){return function(){}};var xee,WB,wee,_T,va,bN,nI,TN,jB,r8,s8,bee,QN,Tee});var kee=Te(dh=>{"use strict";p();dh.ConcurrentRoot=1;dh.ContinuousEventPriority=8;dh.DefaultEventPriority=32;dh.DiscreteEventPriority=2;dh.IdleEventPriority=268435456;dh.LegacyRoot=0;dh.NoEventPriority=0});var vN=Te((t0t,Fee)=>{"use strict";p();Fee.exports=kee()});var Tte=Te(ds=>{"use strict";p();function S8(e,t){var n=e.length;e.push(t);e:for(;0<n;){var o=n-1>>>1,r=e[o];if(0<UN(r,t))e[o]=t,e[n]=r,n=o;else break e}}function Ug(e){return e.length===0?null:e[0]}function GN(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var o=0,r=e.length,s=r>>>1;o<s;){var i=2*(o+1)-1,a=e[i],l=i+1,c=e[l];if(0>UN(a,n))l<r&&0>UN(c,a)?(e[o]=c,e[l]=n,o=l):(e[o]=a,e[i]=n,o=i);else if(l<r&&0>UN(c,n))e[o]=c,e[l]=n,o=l;else break e}}return t}function UN(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}ds.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Ete=performance,ds.unstable_now=function(){return Ete.now()}):(y8=Date,Ite=y8.now(),ds.unstable_now=function(){return y8.now()-Ite});var Ete,y8,Ite,hf=[],gh=[],UPe=1,xA=null,Pl=3,x8=!1,UT=!1,HT=!1,w8=!1,Bte=typeof setTimeout=="function"?setTimeout:null,Ste=typeof clearTimeout=="function"?clearTimeout:null,yte=typeof setImmediate<"u"?setImmediate:null;function HN(e){for(var t=Ug(gh);t!==null;){if(t.callback===null)GN(gh);else if(t.startTime<=e)GN(gh),t.sortIndex=t.expirationTime,S8(hf,t);else break;t=Ug(gh)}}function b8(e){if(HT=!1,HN(e),!UT)if(Ug(hf)!==null)UT=!0,zB||(zB=!0,KB());else{var t=Ug(gh);t!==null&&T8(b8,t.startTime-e)}}var zB=!1,GT=-1,xte=5,wte=-1;function bte(){return w8?!0:!(ds.unstable_now()-wte<xte)}function D8(){if(w8=!1,zB){var e=ds.unstable_now();wte=e;var t=!0;try{e:{UT=!1,HT&&(HT=!1,Ste(GT),GT=-1),x8=!0;var n=Pl;try{t:{for(HN(e),xA=Ug(hf);xA!==null&&!(xA.expirationTime>e&&bte());){var o=xA.callback;if(typeof o=="function"){xA.callback=null,Pl=xA.priorityLevel;var r=o(xA.expirationTime<=e);if(e=ds.unstable_now(),typeof r=="function"){xA.callback=r,HN(e),t=!0;break t}xA===Ug(hf)&&GN(hf),HN(e)}else GN(hf);xA=Ug(hf)}if(xA!==null)t=!0;else{var s=Ug(gh);s!==null&&T8(b8,s.startTime-e),t=!1}}break e}finally{xA=null,Pl=n,x8=!1}t=void 0}}finally{t?KB():zB=!1}}}var KB;typeof yte=="function"?KB=function(){yte(D8)}:typeof MessageChannel<"u"?(B8=new MessageChannel,Dte=B8.port2,B8.port1.onmessage=D8,KB=function(){Dte.postMessage(null)}):KB=function(){Bte(D8,0)};var B8,Dte;function T8(e,t){GT=Bte(function(){e(ds.unstable_now())},t)}ds.unstable_IdlePriority=5;ds.unstable_ImmediatePriority=1;ds.unstable_LowPriority=4;ds.unstable_NormalPriority=3;ds.unstable_Profiling=null;ds.unstable_UserBlockingPriority=2;ds.unstable_cancelCallback=function(e){e.callback=null};ds.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):xte=0<e?Math.floor(1e3/e):5};ds.unstable_getCurrentPriorityLevel=function(){return Pl};ds.unstable_next=function(e){switch(Pl){case 1:case 2:case 3:var t=3;break;default:t=Pl}var n=Pl;Pl=t;try{return e()}finally{Pl=n}};ds.unstable_requestPaint=function(){w8=!0};ds.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=Pl;Pl=e;try{return t()}finally{Pl=n}};ds.unstable_scheduleCallback=function(e,t,n){var o=ds.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0<n?o+n:o):n=o,e){case 1:var r=-1;break;case 2:r=250;break;case 5:r=1073741823;break;case 4:r=1e4;break;default:r=5e3}return r=n+r,e={id:UPe++,callback:t,priorityLevel:e,startTime:n,expirationTime:r,sortIndex:-1},n>o?(e.sortIndex=n,S8(gh,e),Ug(hf)===null&&e===Ug(gh)&&(HT?(Ste(GT),GT=-1):HT=!0,T8(b8,n-o))):(e.sortIndex=r,S8(hf,e),UT||x8||(UT=!0,zB||(zB=!0,KB()))),e};ds.unstable_shouldYield=bte;ds.unstable_wrapCallback=function(e){var t=Pl;return function(){var n=Pl;Pl=t;try{return e.apply(this,arguments)}finally{Pl=n}}}});var Q8=Te((owt,Qte)=>{"use strict";p();Qte.exports=Tte()});var vte=Te((swt,WT)=>{"use strict";p();WT.exports=function(e){function t(A,g,B,b){return new wE(A,g,B,b)}function n(){}function o(A){var g="https://react.dev/errors/"+A;if(1<arguments.length){g+="?args[]="+encodeURIComponent(arguments[1]);for(var B=2;B<arguments.length;B++)g+="&args[]="+encodeURIComponent(arguments[B])}return"Minified React error #"+A+"; visit "+g+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(A){var g=A,B=A;if(A.alternate)for(;g.return;)g=g.return;else{A=g;do g=A,(g.flags&4098)!==0&&(B=g.return),A=g.return;while(A)}return g.tag===3?B:null}function s(A){if(r(A)!==A)throw Error(o(188))}function i(A){var g=A.alternate;if(!g){if(g=r(A),g===null)throw Error(o(188));return g!==A?null:A}for(var B=A,b=g;;){var R=B.return;if(R===null)break;var N=R.alternate;if(N===null){if(b=R.return,b!==null){B=b;continue}break}if(R.child===N.child){for(N=R.child;N;){if(N===B)return s(R),A;if(N===b)return s(R),g;N=N.sibling}throw Error(o(188))}if(B.return!==b.return)B=R,b=N;else{for(var oe=!1,Be=R.child;Be;){if(Be===B){oe=!0,B=R,b=N;break}if(Be===b){oe=!0,b=R,B=N;break}Be=Be.sibling}if(!oe){for(Be=N.child;Be;){if(Be===B){oe=!0,B=N,b=R;break}if(Be===b){oe=!0,b=N,B=R;break}Be=Be.sibling}if(!oe)throw Error(o(189))}}if(B.alternate!==b)throw Error(o(190))}if(B.tag!==3)throw Error(o(188));return B.stateNode.current===B?A:g}function a(A){var g=A.tag;if(g===5||g===26||g===27||g===6)return A;for(A=A.child;A!==null;){if(g=a(A),g!==null)return g;A=A.sibling}return null}function l(A){var g=A.tag;if(g===5||g===26||g===27||g===6)return A;for(A=A.child;A!==null;){if(A.tag!==4&&(g=l(A),g!==null))return g;A=A.sibling}return null}function c(A){return A===null||typeof A!="object"?null:(A=Zm&&A[Zm]||A["@@iterator"],typeof A=="function"?A:null)}function u(A){if(A==null)return null;if(typeof A=="function")return A.$$typeof===ef?null:A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case He:return"Fragment";case Ct:return"Profiler";case ut:return"StrictMode";case Ho:return"Suspense";case wo:return"SuspenseList";case Ic:return"Activity"}if(typeof A=="object")switch(A.$$typeof){case Hp:return"Portal";case Gn:return A.displayName||"Context";case _t:return(A._context.displayName||"Context")+".Consumer";case Sr:var g=A.render;return A=A.displayName,A||(A=g.displayName||g.name||"",A=A!==""?"ForwardRef("+A+")":"ForwardRef"),A;case Go:return g=A.displayName||null,g!==null?g:u(A.type)||"Memo";case xr:g=A._payload,A=A._init;try{return u(A(g))}catch{}}return null}function d(A){return{current:A}}function h(A){0>ZD||(A.current=WG[ZD],WG[ZD]=null,ZD--)}function f(A,g){ZD++,WG[ZD]=A.current,A.current=g}function y(A){return A>>>=0,A===0?32:31-(m2e(A)/f2e|0)|0}function I(A){var g=A&42;if(g!==0)return g;switch(A&-A){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return A&261888;case 262144:case 524288:case 1048576:case 2097152:return A&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return A&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return A}}function S(A,g,B){var b=A.pendingLanes;if(b===0)return 0;var R=0,N=A.suspendedLanes,oe=A.pingedLanes;A=A.warmLanes;var Be=b&134217727;return Be!==0?(b=Be&~N,b!==0?R=I(b):(oe&=Be,oe!==0?R=I(oe):B||(B=Be&~A,B!==0&&(R=I(B))))):(Be=b&~N,Be!==0?R=I(Be):oe!==0?R=I(oe):B||(B=b&~A,B!==0&&(R=I(B)))),R===0?0:g!==0&&g!==R&&(g&N)===0&&(N=R&-R,B=g&-g,N>=B||N===32&&(B&4194048)!==0)?g:R}function x(A,g){return(A.pendingLanes&~(A.suspendedLanes&~A.pingedLanes)&g)===0}function w(A,g){switch(A){case 1:case 2:case 4:case 8:case 64:return g+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return g+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function T(){var A=$k;return $k<<=1,($k&62914560)===0&&($k=4194304),A}function v(A){for(var g=[],B=0;31>B;B++)g.push(A);return g}function Q(A,g){A.pendingLanes|=g,g!==268435456&&(A.suspendedLanes=0,A.pingedLanes=0,A.warmLanes=0)}function P(A,g,B,b,R,N){var oe=A.pendingLanes;A.pendingLanes=B,A.suspendedLanes=0,A.pingedLanes=0,A.warmLanes=0,A.expiredLanes&=B,A.entangledLanes&=B,A.errorRecoveryDisabledLanes&=B,A.shellSuspendCounter=0;var Be=A.entanglements,Ze=A.expirationTimes,st=A.hiddenUpdates;for(B=oe&~B;0<B;){var St=31-vu(B),mt=1<<St;Be[St]=0,Ze[St]=-1;var vt=st[St];if(vt!==null)for(st[St]=null,St=0;St<vt.length;St++){var $n=vt[St];$n!==null&&($n.lane&=-536870913)}B&=~mt}b!==0&&G(A,b,0),N!==0&&R===0&&A.tag!==0&&(A.suspendedLanes|=N&~(oe&~g))}function G(A,g,B){A.pendingLanes|=g,A.suspendedLanes&=~g;var b=31-vu(g);A.entangledLanes|=g,A.entanglements[b]=A.entanglements[b]|1073741824|B&261930}function Y(A,g){var B=A.entangledLanes|=g;for(A=A.entanglements;B;){var b=31-vu(B),R=1<<b;R&g|A[b]&g&&(A[b]|=g),B&=~R}}function J(A,g){var B=g&-g;return B=(B&42)!==0?1:O(B),(B&(A.suspendedLanes|g))!==0?0:B}function O(A){switch(A){case 2:A=1;break;case 8:A=4;break;case 32:A=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:A=128;break;case 268435456:A=134217728;break;default:A=0}return A}function j(A){return A&=-A,2<A?8<A?(A&134217727)!==0?32:268435456:8:2}function _(A){if(typeof I2e=="function"&&y2e(A),Ru&&typeof Ru.setStrictMode=="function")try{Ru.setStrictMode(tT,A)}catch{}}function F(A,g){return A===g&&(A!==0||1/A===1/g)||A!==A&&g!==g}function H(A){if(qG===void 0)try{throw Error()}catch(B){var g=B.stack.trim().match(/\n( *(at )?)/);qG=g&&g[1]||"",jK=-1<B.stack.indexOf(`
4
+ import{a as he,b as EN,c as KZ,d as zZ,e as XZ}from"./chunks/chunk-SHILLJ5Y.js";import{a as VZ}from"./chunks/chunk-7ZATDBWL.js";import{a as UZ,c as J3,d as HZ,e as GZ,g as WZ}from"./chunks/chunk-GC2F575A.js";import{a as _Z,c as MT,d as Y3,e as q3}from"./chunks/chunk-3HUM74NZ.js";import{$ as mN,A as dN,C as DZ,D as BZ,E as H3,F as ih,G as gN,H as wd,I as SZ,J as zE,K as xZ,L as wZ,M as XE,N as bZ,Na as Tr,O as TZ,P as G3,Q as W3,R as Wo,S as j3,Sa as Nl,T as vT,Ta as ba,U as QZ,Ua as hN,V as vZ,W as RZ,X as MZ,Y as Jt,Z as kZ,_ as FZ,a as ST,aa as NZ,ab as YZ,b as sh,ba as O2e,c as dZ,ca as nu,cb as lh,d as si,da as fN,e as zi,ea as P2e,eb as qZ,f as Xi,fa as U2e,fb as _l,g as cr,ga as pN,gb as NB,h as L3,ha as RT,hb as Pg,i as O3,ia as ah,ib as Mn,j as gZ,jb as JZ,k as mZ,kb as $Z,l as Og,lb as CN,m as fZ,n as Rs,o as gf,oa as jZ,p as hZ,q as wT,r as bT,s as TT,t as IZ,u as P3,v as KE,w as yZ,x as QT,y as AN,z as U3}from"./chunks/chunk-WZI4OJVG.js";import{a as tt,b as Ge,c as lN,d as xT,e as cN,f as pZ,j as uN,k as FB,l as m,m as CZ,n as EZ}from"./chunks/chunk-VGT5HJ7R.js";import{a as LZ,b as OZ,c as PZ,e as Re}from"./chunks/chunk-JSFA3NEP.js";import{$a as BB,$h as bX,$i as _2e,Ae as lr,Ah as yA,Bh as v3,Bj as OX,Bl as sZ,Ca as mz,Ce as aX,Ch as SX,Cj as VF,Ck as JX,De as lX,Df as kl,Dg as EX,Dj as KF,Ee as N2e,Ei as RX,El as iZ,Fk as tN,Fl as aZ,Gd as Oz,Gk as $X,Gl as lZ,Hd as Pz,Hf as AX,Hl as cZ,Ic as Tz,Id as Uz,If as dX,Il as uZ,J as z7,Jc as Qz,Jd as Hz,Jl as AZ,Kc as vz,Kd as Gz,Ke as WF,Kk as VX,Kl as rN,Lc as w3,Ld as Wz,Le as ET,Lk as KX,Ll as sN,Ma as hT,Mc as PF,Mi as MX,Mk as F3,Ml as kB,Nb as yz,Nc as Rz,Nd as jz,Ng as JE,Nj as PX,Nk as N3,Nl as iN,Oa as vi,Ob as Dz,Oc as k2e,Oe as Lg,Oh as xX,Ok as VE,Ol as aN,Pb as Bz,Pc as b3,Pi as xd,Q as az,Qb as _g,R as Af,Rb as Sz,Rc as Mz,Rd as xB,Rh as wX,S as lz,Sd as Yz,Sj as zF,Sk as zX,Ta as MF,Tc as kz,Td as qz,Tf as Q3,Tj as UX,U as vF,Ua as fz,Ub as xz,Uf as gX,Uj as HX,Ve as IT,Vj as QB,Wa as kF,Wd as Jz,Wf as mX,Wg as YF,Wh as JF,X as cz,Xa as qE,Xd as $z,Xi as kX,Xj as Ki,Y as uz,Ya as FF,Yd as Vz,Yf as fX,Yh as R3,Z as Az,Za as Fg,Zf as pX,Zj as BT,_ as dz,_a as pz,ab as Ml,ae as Kz,ai as TX,aj as FX,bb as Ou,be as zz,bi as QX,ca as x3,cb as hz,ci as DT,ck as oh,de as Xz,dk as $E,eb as Cz,ed as Fz,ee as Zz,eg as nh,eh as yT,f as pB,fd as T3,fe as eX,fh as IX,g as GE,gc as LF,gg as jF,gk as XF,h as c7,hc as OF,hd as Nz,he as tX,hk as vB,ic as wz,ie as HF,ig as hX,ij as L2e,il as XX,j as V7,jg as CX,jh as yX,ji as vX,jl as ZX,kd as _z,kl as _3,lc as bz,le as nX,lf as cX,lh as Sd,lj as NX,ll as nN,mi as M3,mj as TB,ml as eZ,ne as oX,nk as ZF,nl as tZ,oe as GF,oj as $F,ok as k3,ol as nZ,pa as RF,pb as CT,pe as wB,ph as qF,pk as GX,qa as gz,qe as rX,qf as df,qk as WX,ql as oN,rb as Ez,rg as bB,rj as Fl,sb as SB,sd as Lz,tb as Iz,vb as th,vk as eN,w as K7,wd as UF,wh as DX,wk as jX,wl as rh,xe as sX,xh as BX,xj as _X,xk as YX,xl as oZ,y as xF,ye as F2e,yk as qX,yl as rZ,z as DB,zb as Ng,ze as iX,zf as uX,zj as LX,zk as RB,zl as MB}from"./chunks/chunk-S2CVFPFY.js";import{a as $o}from"./chunks/chunk-TZIDSCTF.js";import"./chunks/chunk-ROETRE5J.js";import"./chunks/chunk-INAZKGGR.js";import{a as M2e}from"./chunks/chunk-DCQKJTAX.js";import{a as YE}from"./chunks/chunk-LSDMWVW6.js";import"./chunks/chunk-MTMU7JYZ.js";import"./chunks/chunk-TXMXCR7D.js";import"./chunks/chunk-YULUB745.js";import"./chunks/chunk-VYTYYCBR.js";import"./chunks/chunk-TISQNFB5.js";import{b as X7,c as IA,d as Z7,e as ez,h as wF,j as bF,k as tz,m as nz,n as oz,p as S3,t as iz,v as uf,w as QF}from"./chunks/chunk-34DXSYJZ.js";import"./chunks/chunk-47XR7IMP.js";import"./chunks/chunk-FWIVFCKF.js";import"./chunks/chunk-QKYGQLWC.js";import{c as NF,f as _F}from"./chunks/chunk-FRL6KOLY.js";import{b as TF,d as rz,h as sz,i as B3}from"./chunks/chunk-VWWEEU4V.js";import"./chunks/chunk-RNKDFE2S.js";import"./chunks/chunk-Q2I3ARPJ.js";import"./chunks/chunk-CLUHH567.js";import{b as j7,d as Y7,e as D3,i as q7,k as J7}from"./chunks/chunk-QHA3ZBRO.js";import{B as F7,Y as I3,Z as U7,c as EA,ga as BF,i as M7,ja as y3,ka as H7,la as G7,n as k7,na as W7,oa as SF,pa as Vi}from"./chunks/chunk-6DUA4QHF.js";import{c as L7,d as O7}from"./chunks/chunk-4F4DA5UI.js";import{e as Bd}from"./chunks/chunk-DC7LAFZZ.js";import{m as P7,v as E3}from"./chunks/chunk-S7G6QPEP.js";import{b as $i}from"./chunks/chunk-4J6DC24J.js";import"./chunks/chunk-LJR4RZZ2.js";import"./chunks/chunk-U347OO7S.js";import{h as Zp,i as DF,j as yB,k as N7,m as _7}from"./chunks/chunk-SDTWBD62.js";import{Bb as f7,Cc as kg,Eb as p7,Gc as IF,Hb as CB,Hc as w7,Ib as h7,Jb as p3,Lc as b7,Qb as C7,Tc as C3,Vb as h3,Wb as EF,Xb as fT,Xc as yF,Yc as pT,Zb as E7,Zc as T7,cc as I7,db as m3,e as CF,gb as A7,h as br,hb as d7,hd as Q7,ib as g7,jb as m7,jc as WE,jd as jE,kb as f3,lc as y7,nd as v7,pc as EB,qc as D7,r as g3,s as u7,sd as IB,t as Lu,td as R7}from"./chunks/chunk-B3NVKOSU.js";import"./chunks/chunk-WVY2P6WH.js";import"./chunks/chunk-UIRBHC5X.js";import{h as Xp,j as B7,s as S7,w as x7}from"./chunks/chunk-32PTAACU.js";import"./chunks/chunk-32T6RWWT.js";import{e as l7,l as _u,p as qt,q as hB}from"./chunks/chunk-6B5BDE7S.js";import{a as eh,o as cf,t as $7}from"./chunks/chunk-RJX7DK4Y.js";import"./chunks/chunk-XCJYORZX.js";import"./chunks/chunk-ESSYHTAZ.js";import"./chunks/chunk-3YLXGE6T.js";import{b as i7,e as a7}from"./chunks/chunk-EQEQPZLQ.js";import{B as fF,D as pF,F as gT,G as mT,J as zp,P as Tt,Q as s7,Y as hF,aa as Oe,b as Dd,c as ZK,d as jr,e as d3,g as e7,i as gF,j as Ji,k as Rl,l as HE,n as t7,o as n7,q as o7,s as mF,u as r7}from"./chunks/chunk-VLYRNOD3.js";import"./chunks/chunk-G7R2XEEF.js";import"./chunks/chunk-OA56BXPD.js";import"./chunks/chunk-FWDMPRKU.js";import{a as __matilda_dirname,b as p}from"./chunks/chunk-GZPNIYVZ.js";import{a as $e,d as Te,e as v2e,f as k,g as R2e}from"./chunks/chunk-OWGSC52X.js";var See=Te((qxt,wN)=>{p();wN.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&wN.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&wN.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var Qee=Te(($xt,YB)=>{p();var us=globalThis.process,tI=function(e){return e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function"};tI(us)?(xee=$e("assert"),WB=See(),wee=/^win/i.test(us.platform),_T=$e("events"),typeof _T!="function"&&(_T=_T.EventEmitter),us.__signal_exit_emitter__?va=us.__signal_exit_emitter__:(va=us.__signal_exit_emitter__=new _T,va.count=0,va.emitted={}),va.infinite||(va.setMaxListeners(1/0),va.infinite=!0),YB.exports=function(e,t){if(!tI(globalThis.process))return function(){};xee.equal(typeof e,"function","a callback must be provided for exit handler"),jB===!1&&r8();var n="exit";t&&t.alwaysLast&&(n="afterexit");var o=function(){va.removeListener(n,e),va.listeners("exit").length===0&&va.listeners("afterexit").length===0&&bN()};return va.on(n,e),o},bN=function(){!jB||!tI(globalThis.process)||(jB=!1,WB.forEach(function(t){try{us.removeListener(t,TN[t])}catch{}}),us.emit=QN,us.reallyExit=s8,va.count-=1)},YB.exports.unload=bN,nI=function(t,n,o){va.emitted[t]||(va.emitted[t]=!0,va.emit(t,n,o))},TN={},WB.forEach(function(e){TN[e]=function(){if(tI(globalThis.process)){var n=us.listeners(e);n.length===va.count&&(bN(),nI("exit",null,e),nI("afterexit",null,e),wee&&e==="SIGHUP"&&(e="SIGINT"),us.kill(us.pid,e))}}}),YB.exports.signals=function(){return WB},jB=!1,r8=function(){jB||!tI(globalThis.process)||(jB=!0,va.count+=1,WB=WB.filter(function(t){try{return us.on(t,TN[t]),!0}catch{return!1}}),us.emit=Tee,us.reallyExit=bee)},YB.exports.load=r8,s8=us.reallyExit,bee=function(t){tI(globalThis.process)&&(us.exitCode=t||0,nI("exit",us.exitCode,null),nI("afterexit",us.exitCode,null),s8.call(us,us.exitCode))},QN=us.emit,Tee=function(t,n){if(t==="exit"&&tI(globalThis.process)){n!==void 0&&(us.exitCode=n);var o=QN.apply(this,arguments);return nI("exit",us.exitCode,null),nI("afterexit",us.exitCode,null),o}else return QN.apply(this,arguments)}):YB.exports=function(){return function(){}};var xee,WB,wee,_T,va,bN,nI,TN,jB,r8,s8,bee,QN,Tee});var kee=Te(dh=>{"use strict";p();dh.ConcurrentRoot=1;dh.ContinuousEventPriority=8;dh.DefaultEventPriority=32;dh.DiscreteEventPriority=2;dh.IdleEventPriority=268435456;dh.LegacyRoot=0;dh.NoEventPriority=0});var vN=Te((t0t,Fee)=>{"use strict";p();Fee.exports=kee()});var Tte=Te(ds=>{"use strict";p();function S8(e,t){var n=e.length;e.push(t);e:for(;0<n;){var o=n-1>>>1,r=e[o];if(0<UN(r,t))e[o]=t,e[n]=r,n=o;else break e}}function Ug(e){return e.length===0?null:e[0]}function GN(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var o=0,r=e.length,s=r>>>1;o<s;){var i=2*(o+1)-1,a=e[i],l=i+1,c=e[l];if(0>UN(a,n))l<r&&0>UN(c,a)?(e[o]=c,e[l]=n,o=l):(e[o]=a,e[i]=n,o=i);else if(l<r&&0>UN(c,n))e[o]=c,e[l]=n,o=l;else break e}}return t}function UN(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}ds.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Ete=performance,ds.unstable_now=function(){return Ete.now()}):(y8=Date,Ite=y8.now(),ds.unstable_now=function(){return y8.now()-Ite});var Ete,y8,Ite,hf=[],gh=[],UPe=1,xA=null,Pl=3,x8=!1,UT=!1,HT=!1,w8=!1,Bte=typeof setTimeout=="function"?setTimeout:null,Ste=typeof clearTimeout=="function"?clearTimeout:null,yte=typeof setImmediate<"u"?setImmediate:null;function HN(e){for(var t=Ug(gh);t!==null;){if(t.callback===null)GN(gh);else if(t.startTime<=e)GN(gh),t.sortIndex=t.expirationTime,S8(hf,t);else break;t=Ug(gh)}}function b8(e){if(HT=!1,HN(e),!UT)if(Ug(hf)!==null)UT=!0,zB||(zB=!0,KB());else{var t=Ug(gh);t!==null&&T8(b8,t.startTime-e)}}var zB=!1,GT=-1,xte=5,wte=-1;function bte(){return w8?!0:!(ds.unstable_now()-wte<xte)}function D8(){if(w8=!1,zB){var e=ds.unstable_now();wte=e;var t=!0;try{e:{UT=!1,HT&&(HT=!1,Ste(GT),GT=-1),x8=!0;var n=Pl;try{t:{for(HN(e),xA=Ug(hf);xA!==null&&!(xA.expirationTime>e&&bte());){var o=xA.callback;if(typeof o=="function"){xA.callback=null,Pl=xA.priorityLevel;var r=o(xA.expirationTime<=e);if(e=ds.unstable_now(),typeof r=="function"){xA.callback=r,HN(e),t=!0;break t}xA===Ug(hf)&&GN(hf),HN(e)}else GN(hf);xA=Ug(hf)}if(xA!==null)t=!0;else{var s=Ug(gh);s!==null&&T8(b8,s.startTime-e),t=!1}}break e}finally{xA=null,Pl=n,x8=!1}t=void 0}}finally{t?KB():zB=!1}}}var KB;typeof yte=="function"?KB=function(){yte(D8)}:typeof MessageChannel<"u"?(B8=new MessageChannel,Dte=B8.port2,B8.port1.onmessage=D8,KB=function(){Dte.postMessage(null)}):KB=function(){Bte(D8,0)};var B8,Dte;function T8(e,t){GT=Bte(function(){e(ds.unstable_now())},t)}ds.unstable_IdlePriority=5;ds.unstable_ImmediatePriority=1;ds.unstable_LowPriority=4;ds.unstable_NormalPriority=3;ds.unstable_Profiling=null;ds.unstable_UserBlockingPriority=2;ds.unstable_cancelCallback=function(e){e.callback=null};ds.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):xte=0<e?Math.floor(1e3/e):5};ds.unstable_getCurrentPriorityLevel=function(){return Pl};ds.unstable_next=function(e){switch(Pl){case 1:case 2:case 3:var t=3;break;default:t=Pl}var n=Pl;Pl=t;try{return e()}finally{Pl=n}};ds.unstable_requestPaint=function(){w8=!0};ds.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=Pl;Pl=e;try{return t()}finally{Pl=n}};ds.unstable_scheduleCallback=function(e,t,n){var o=ds.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0<n?o+n:o):n=o,e){case 1:var r=-1;break;case 2:r=250;break;case 5:r=1073741823;break;case 4:r=1e4;break;default:r=5e3}return r=n+r,e={id:UPe++,callback:t,priorityLevel:e,startTime:n,expirationTime:r,sortIndex:-1},n>o?(e.sortIndex=n,S8(gh,e),Ug(hf)===null&&e===Ug(gh)&&(HT?(Ste(GT),GT=-1):HT=!0,T8(b8,n-o))):(e.sortIndex=r,S8(hf,e),UT||x8||(UT=!0,zB||(zB=!0,KB()))),e};ds.unstable_shouldYield=bte;ds.unstable_wrapCallback=function(e){var t=Pl;return function(){var n=Pl;Pl=t;try{return e.apply(this,arguments)}finally{Pl=n}}}});var Q8=Te((owt,Qte)=>{"use strict";p();Qte.exports=Tte()});var vte=Te((swt,WT)=>{"use strict";p();WT.exports=function(e){function t(A,g,B,b){return new wE(A,g,B,b)}function n(){}function o(A){var g="https://react.dev/errors/"+A;if(1<arguments.length){g+="?args[]="+encodeURIComponent(arguments[1]);for(var B=2;B<arguments.length;B++)g+="&args[]="+encodeURIComponent(arguments[B])}return"Minified React error #"+A+"; visit "+g+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(A){var g=A,B=A;if(A.alternate)for(;g.return;)g=g.return;else{A=g;do g=A,(g.flags&4098)!==0&&(B=g.return),A=g.return;while(A)}return g.tag===3?B:null}function s(A){if(r(A)!==A)throw Error(o(188))}function i(A){var g=A.alternate;if(!g){if(g=r(A),g===null)throw Error(o(188));return g!==A?null:A}for(var B=A,b=g;;){var R=B.return;if(R===null)break;var N=R.alternate;if(N===null){if(b=R.return,b!==null){B=b;continue}break}if(R.child===N.child){for(N=R.child;N;){if(N===B)return s(R),A;if(N===b)return s(R),g;N=N.sibling}throw Error(o(188))}if(B.return!==b.return)B=R,b=N;else{for(var oe=!1,Be=R.child;Be;){if(Be===B){oe=!0,B=R,b=N;break}if(Be===b){oe=!0,b=R,B=N;break}Be=Be.sibling}if(!oe){for(Be=N.child;Be;){if(Be===B){oe=!0,B=N,b=R;break}if(Be===b){oe=!0,b=N,B=R;break}Be=Be.sibling}if(!oe)throw Error(o(189))}}if(B.alternate!==b)throw Error(o(190))}if(B.tag!==3)throw Error(o(188));return B.stateNode.current===B?A:g}function a(A){var g=A.tag;if(g===5||g===26||g===27||g===6)return A;for(A=A.child;A!==null;){if(g=a(A),g!==null)return g;A=A.sibling}return null}function l(A){var g=A.tag;if(g===5||g===26||g===27||g===6)return A;for(A=A.child;A!==null;){if(A.tag!==4&&(g=l(A),g!==null))return g;A=A.sibling}return null}function c(A){return A===null||typeof A!="object"?null:(A=Zm&&A[Zm]||A["@@iterator"],typeof A=="function"?A:null)}function u(A){if(A==null)return null;if(typeof A=="function")return A.$$typeof===ef?null:A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case He:return"Fragment";case Ct:return"Profiler";case ut:return"StrictMode";case Ho:return"Suspense";case wo:return"SuspenseList";case Ic:return"Activity"}if(typeof A=="object")switch(A.$$typeof){case Hp:return"Portal";case Gn:return A.displayName||"Context";case _t:return(A._context.displayName||"Context")+".Consumer";case Sr:var g=A.render;return A=A.displayName,A||(A=g.displayName||g.name||"",A=A!==""?"ForwardRef("+A+")":"ForwardRef"),A;case Go:return g=A.displayName||null,g!==null?g:u(A.type)||"Memo";case xr:g=A._payload,A=A._init;try{return u(A(g))}catch{}}return null}function d(A){return{current:A}}function h(A){0>ZD||(A.current=WG[ZD],WG[ZD]=null,ZD--)}function f(A,g){ZD++,WG[ZD]=A.current,A.current=g}function y(A){return A>>>=0,A===0?32:31-(m2e(A)/f2e|0)|0}function I(A){var g=A&42;if(g!==0)return g;switch(A&-A){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return A&261888;case 262144:case 524288:case 1048576:case 2097152:return A&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return A&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return A}}function S(A,g,B){var b=A.pendingLanes;if(b===0)return 0;var R=0,N=A.suspendedLanes,oe=A.pingedLanes;A=A.warmLanes;var Be=b&134217727;return Be!==0?(b=Be&~N,b!==0?R=I(b):(oe&=Be,oe!==0?R=I(oe):B||(B=Be&~A,B!==0&&(R=I(B))))):(Be=b&~N,Be!==0?R=I(Be):oe!==0?R=I(oe):B||(B=b&~A,B!==0&&(R=I(B)))),R===0?0:g!==0&&g!==R&&(g&N)===0&&(N=R&-R,B=g&-g,N>=B||N===32&&(B&4194048)!==0)?g:R}function x(A,g){return(A.pendingLanes&~(A.suspendedLanes&~A.pingedLanes)&g)===0}function w(A,g){switch(A){case 1:case 2:case 4:case 8:case 64:return g+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return g+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function T(){var A=$k;return $k<<=1,($k&62914560)===0&&($k=4194304),A}function v(A){for(var g=[],B=0;31>B;B++)g.push(A);return g}function Q(A,g){A.pendingLanes|=g,g!==268435456&&(A.suspendedLanes=0,A.pingedLanes=0,A.warmLanes=0)}function P(A,g,B,b,R,N){var oe=A.pendingLanes;A.pendingLanes=B,A.suspendedLanes=0,A.pingedLanes=0,A.warmLanes=0,A.expiredLanes&=B,A.entangledLanes&=B,A.errorRecoveryDisabledLanes&=B,A.shellSuspendCounter=0;var Be=A.entanglements,Ze=A.expirationTimes,st=A.hiddenUpdates;for(B=oe&~B;0<B;){var St=31-vu(B),mt=1<<St;Be[St]=0,Ze[St]=-1;var vt=st[St];if(vt!==null)for(st[St]=null,St=0;St<vt.length;St++){var $n=vt[St];$n!==null&&($n.lane&=-536870913)}B&=~mt}b!==0&&G(A,b,0),N!==0&&R===0&&A.tag!==0&&(A.suspendedLanes|=N&~(oe&~g))}function G(A,g,B){A.pendingLanes|=g,A.suspendedLanes&=~g;var b=31-vu(g);A.entangledLanes|=g,A.entanglements[b]=A.entanglements[b]|1073741824|B&261930}function Y(A,g){var B=A.entangledLanes|=g;for(A=A.entanglements;B;){var b=31-vu(B),R=1<<b;R&g|A[b]&g&&(A[b]|=g),B&=~R}}function J(A,g){var B=g&-g;return B=(B&42)!==0?1:O(B),(B&(A.suspendedLanes|g))!==0?0:B}function O(A){switch(A){case 2:A=1;break;case 8:A=4;break;case 32:A=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:A=128;break;case 268435456:A=134217728;break;default:A=0}return A}function j(A){return A&=-A,2<A?8<A?(A&134217727)!==0?32:268435456:8:2}function _(A){if(typeof I2e=="function"&&y2e(A),Ru&&typeof Ru.setStrictMode=="function")try{Ru.setStrictMode(tT,A)}catch{}}function F(A,g){return A===g&&(A!==0||1/A===1/g)||A!==A&&g!==g}function H(A){if(qG===void 0)try{throw Error()}catch(B){var g=B.stack.trim().match(/\n( *(at )?)/);qG=g&&g[1]||"",jK=-1<B.stack.indexOf(`
5
5
  at`)?" (<anonymous>)":-1<B.stack.indexOf("@")?"@unknown:0:0":""}return`
6
6
  `+qG+A+jK}function U(A,g){if(!A||JG)return"";JG=!0;var B=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var b={DetermineComponentFrameRoot:function(){try{if(g){var mt=function(){throw Error()};if(Object.defineProperty(mt.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(mt,[])}catch($n){var vt=$n}Reflect.construct(A,[],mt)}else{try{mt.call()}catch($n){vt=$n}A.call(mt.prototype)}}else{try{throw Error()}catch($n){vt=$n}(mt=A())&&typeof mt.catch=="function"&&mt.catch(function(){})}}catch($n){if($n&&vt&&typeof $n.stack=="string")return[$n.stack,vt.stack]}return[null,null]}};b.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var R=Object.getOwnPropertyDescriptor(b.DetermineComponentFrameRoot,"name");R&&R.configurable&&Object.defineProperty(b.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var N=b.DetermineComponentFrameRoot(),oe=N[0],Be=N[1];if(oe&&Be){var Ze=oe.split(`
7
7
  `),st=Be.split(`
@@ -285,7 +285,7 @@ ${t.stderr}`,e.worktree,e.changedFilesSet);return{exitCode:t.exitCode,findings:n
285
285
  `)){if(!r.startsWith("{"))continue;let s;try{s=JSON.parse(r)}catch{continue}if(s.reason!=="compiler-message"||!s.message)continue;let i=s.message;if(i.level!=="error"&&i.level!=="warning")continue;let a=(i.spans||[]).find(c=>c.is_primary);if(!a)continue;let l=ZI(a.file_name,t);Tx(l,n)&&o.push({source:"typecheck",tool:"cargo-clippy",file:l,line:a.line_start,column:a.column_start,severity:i.level==="error"?"Critical":"Nice to have",message:i.message,ruleId:i.code?.code})}return o}var $Xe={name:"go-vet",source:"typecheck",detect:({worktree:e})=>Lf(Vh(e,"go.mod"))?bx("go")?{ok:!0}:{ok:!1,reason:"go not in PATH"}:{ok:!1,reason:"go.mod not found"},run:e=>{let t=wx(e.worktree,"go",["vet","./..."],iq),n=VXe(`${t.stdout}
286
286
  ${t.stderr}`,e.worktree,e.changedFilesSet);return{exitCode:t.exitCode,findings:n,timedOut:t.timedOut}}};function VXe(e,t,n){let o=[],r=/^(.+?\.go):(\d+)(?::(\d+))?:\s+(.+)$/gm,s;for(;(s=r.exec(e))!==null;){let i=ZI(s[1],t);Tx(i,n)&&o.push({source:"typecheck",tool:"go-vet",file:i,line:parseInt(s[2],10),column:s[3]?parseInt(s[3],10):void 0,severity:"Critical",message:s[4].trim()})}return o}var KXe={name:"golangci-lint",source:"linter",detect:({worktree:e})=>Lf(Vh(e,"go.mod"))?bx("golangci-lint")?{ok:!0}:{ok:!1,reason:"golangci-lint not in PATH"}:{ok:!1,reason:"go.mod not found"},run:e=>{let t=wx(e.worktree,"golangci-lint",["run","--out-format=json","./..."],aq),n=zXe(t.stdout,e.worktree,e.changedFilesSet);return{exitCode:t.exitCode,findings:n,timedOut:t.timedOut}}};function zXe(e,t,n){let o;try{o=JSON.parse(e)}catch{return[]}let r=[];for(let s of o.Issues??[]){let i=ZI(s.Pos.Filename,t);Tx(i,n)&&r.push({source:"linter",tool:"golangci-lint",file:i,line:s.Pos.Line,column:s.Pos.Column,severity:s.Severity?.toLowerCase()==="warning"?"Nice to have":"Critical",message:s.Text,ruleId:s.FromLinter})}return r}var XXe=[OXe,HXe,jXe,qXe,$Xe,KXe];async function ZXe(e){let t=_Xe(e.worktree);if(!Lf(t))throw new Error(`Worktree not found: ${t}`);let n=[];try{let d=cpe(e["changed-files"],"utf8");n=JSON.parse(d)}catch(d){throw new Error(`Failed to read changed-files JSON at ${e["changed-files"]}: ${d.message}`)}if(!Array.isArray(n))throw new Error("changed-files JSON must be an array of paths");let o=n.map(d=>ZI(d,t)),r=new Set(o),s={worktree:t,changedFiles:o,changedFilesSet:r},i=[],a=[],l=[];for(let d of XXe){let h=d.detect(s);if(!h.ok){l.push({tool:d.name,reason:h.reason});continue}let f=Date.now(),y=d.run(s),I=Date.now()-f;i.push(...y.findings),a.push({tool:d.name,source:d.source,exitCode:y.exitCode,durationMs:I,findingsCount:y.findings.length,timedOut:y.timedOut})}let c={worktree:t,changedFiles:o,findings:i,toolsRun:a,toolsSkipped:l};FXe(NXe(e.out),{recursive:!0}),kXe(e.out,JSON.stringify(c,null,2)+`
287
287
  `,"utf8");let u=a.map(d=>`${d.tool}=${d.findingsCount}${d.timedOut?" (timeout)":""}`).join(", ");tt(`Wrote deterministic report to ${e.out}: ${i.length} findings (${u||"no tools applicable"}; skipped ${l.length})`)}var upe={command:"deterministic <worktree>",describe:"Run deterministic typecheck / lint on changed files (TypeScript/JavaScript: tsc + eslint)",builder:e=>e.positional("worktree",{type:"string",demandOption:!0,describe:"Worktree directory to run tools in"}).option("changed-files",{type:"string",demandOption:!0,describe:"Path to a JSON file containing an array of changed file paths (relative to worktree)"}).option("out",{type:"string",demandOption:!0,describe:"Output JSON path (will be overwritten)"}),handler:async e=>{await ZXe(e)}};p();import{writeFileSync as eZe,readFileSync as tZe}from"node:fs";var nZe=new Set(["failure","cancelled","timed_out","action_required"]),oZe=new Set(["failure","error"]),Ape=new Set(["queued","in_progress","pending"]);function rZe(e,t){let n=[],o=!1;for(let s of e)s.status==="completed"?s.conclusion&&nZe.has(s.conclusion)&&n.push(s.name):Ape.has(s.status)&&(o=!0);for(let s of t)oZe.has(s.state)?n.push(s.context):Ape.has(s.state)&&(o=!0);let r;return n.length>0?r="any_failure":e.length===0&&t.length===0?r="no_checks":o?r="all_pending":r="all_pass",{class:r,failedCheckNames:n,totalChecks:e.length+t.length}}function sZe(e,t,n,o){let r={stale:[],resolved:[],overlap:[],noConflict:[]};for(let s of e){let i={id:s.id,path:s.path??"",line:s.line??0,commit_id:s.commit_id??"",body:(s.body||"").slice(0,80)};s.commit_id!==o?r.stale.push(i):t.has(s.id)?r.resolved.push(i):n.has(`${s.path}:${s.line}`)?r.overlap.push(i):r.noConflict.push(i)}return r}async function iZe(e){let{pr_number:t,commit_sha:n,owner_repo:o,out_path:r}=e,s=e["new-findings"],i=o.indexOf("/");if(i<0)throw new Error('owner_repo must look like "owner/repo"');let a=o.slice(0,i),l=o.slice(i+1);xx();let c=_f("api",`repos/${a}/${l}/pulls/${t}`,"--jq",".user.login"),u=Zfe(),d=c.toLowerCase()===u.toLowerCase(),f=rq(`repos/${a}/${l}/commits/${n}/check-runs`)?.check_runs??[],I=rq(`repos/${a}/${l}/commits/${n}/status`)?.statuses??[],S=rZe(f,I),x=Sx(`repos/${a}/${l}/pulls/${t}/comments`),w=x.filter(J=>/via Matilda \/review/.test(J.body??"")),T=new Set;for(let J of x)J.in_reply_to_id&&T.add(J.in_reply_to_id);let v=[];s&&(v=JSON.parse(tZe(s,"utf8")));let Q=new Set(v.map(J=>`${J.path}:${J.line}`)),P=sZe(w,T,Q,n),G=[];d&&G.push("self-PR"),S.class==="any_failure"&&G.push(`CI failing: ${S.failedCheckNames.join(", ")}`),S.class==="all_pending"&&G.push("CI still running");let Y={prNumber:t,commitSha:n,ownerRepo:o,isSelfPr:d,ciStatus:S,existingComments:{total:w.length,byBucket:{stale:P.stale.length,resolved:P.resolved.length,overlap:P.overlap.length,noConflict:P.noConflict.length},overlap:P.overlap,stale:P.stale,resolved:P.resolved,noConflict:P.noConflict},downgradeApprove:d||S.class==="any_failure"||S.class==="all_pending",downgradeRequestChanges:d,downgradeReasons:G,blockOnExistingComments:P.overlap.length>0};eZe(r,JSON.stringify(Y,null,2)+`
288
- `,"utf8"),tt(`Wrote presubmit report to ${r}`)}var dpe={command:"presubmit <pr_number> <commit_sha> <owner_repo> <out_path>",describe:"Pre-submission checks for /review Step 9 (self-PR detection, CI status, existing-comments classification)",builder:e=>e.positional("pr_number",{type:"string",demandOption:!0,describe:"PR number"}).positional("commit_sha",{type:"string",demandOption:!0,describe:"PR HEAD commit SHA"}).positional("owner_repo",{type:"string",demandOption:!0,describe:'GitHub "owner/repo"'}).positional("out_path",{type:"string",demandOption:!0,describe:"Output JSON path (will be overwritten)"}).option("new-findings",{type:"string",describe:"Path to a JSON file shaped as [{path, line}, ...] \u2014 when provided, existing comments are checked for same-(path, line) overlap with the new findings."}),handler:async e=>{await iZe(e)}};p();import{execFileSync as gpe}from"node:child_process";import{existsSync as mpe,readdirSync as aZe,unlinkSync as lZe}from"node:fs";import{join as cZe}from"node:path";function uZe(e){let t=!1,n=/^pr-(\d+)$/.exec(e);if(n){let s=n[1],i=Ov(s);if(mpe(i))try{gpe("git",["worktree","remove",i,"--force"],{stdio:"pipe"}),tt(`Removed worktree: ${i}`),t=!0}catch(l){Ge(`Failed to remove worktree ${i}: ${l.message}`)}let a=Pv(s);if(f2(a))try{gpe("git",["branch","-D",a],{stdio:"pipe"}),tt(`Deleted ref: ${a}`),t=!0}catch(l){Ge(`Failed to delete branch ${a}: ${l.message}`)}}let o=tpe(e),r=[];try{r=mpe($h)?aZe($h):[]}catch(s){Ge(`Failed to read ${$h}: ${s.message}`)}for(let s of r){if(!s.startsWith(o))continue;let i=cZe($h,s);try{lZe(i),tt(`Removed temp file: ${i}`),t=!0}catch(a){Ge(`Failed to remove ${i}: ${a.message}`)}}t||tt(`Nothing to clean for target "${e}".`)}var fpe={command:"cleanup <target>",describe:"Post-review cleanup: remove worktree, branch ref, and per-target temp files",builder:e=>e.positional("target",{type:"string",demandOption:!0,describe:'Review target \u2014 "pr-<n>" for a PR review, "local" for an uncommitted review, or a filename for a file review'}),handler:e=>{uZe(e.target)}};var ppe={command:"review",describe:"Internal helpers used by the /review skill (PR worktree setup, context fetch, rules loading, deterministic analysis, presubmit checks, cleanup)",builder:e=>e.command(ope).command(spe).command(ape).command(upe).command(dpe).command(fpe).demandCommand(1,"Specify a subcommand: fetch-pr, pr-context, load-rules, deterministic, presubmit, or cleanup.").version(!1),handler:()=>{}};p();p();var lq="Warning: running headless with --bogan / approval-mode=bogan and no sandbox. All tool calls (shell, write, edit) auto-execute at this process's privilege level. Enable a sandbox via --sandbox / MATILDA_SANDBOX, or set MATILDA_CODE_SUPPRESS_BOGAN_WARNING=1 to silence this notice.";function hpe(e,t=process.env){return e.getApprovalMode()!=="bogan"||e.getSandbox()||t.SANDBOX||AZe(t.MATILDA_CODE_SUPPRESS_BOGAN_WARNING)?null:lq}function AZe(e){return e==="1"||e==="true"}function gZe(){return new Promise(()=>{})}var Cpe={command:"serve",describe:"Run Matilda as a local HTTP daemon (Stage 1 experimental: --http-bridge)",builder:e=>e.option("port",{type:"number",default:4170,description:"TCP port to bind (use 0 for an OS-assigned ephemeral port)"}).option("hostname",{type:"string",default:"127.0.0.1",description:"Interface to bind. Loopback (127.0.0.1, localhost, ::1, [::1]) is auth-free; anything else requires a token."}).option("token",{type:"string",description:"Bearer token required on every request. Falls back to the MATILDA_SERVER_TOKEN env var."}).option("max-sessions",{type:"number",default:20,description:"Cap on concurrent live sessions. New spawn requests beyond this return 503; attach to existing sessions still works. Set to 0 to disable."}).option("max-pending-prompts-per-session",{type:"number",default:5,description:"Per-session cap on accepted prompts waiting or running. New prompts beyond this return 503. Set to 0 to disable."}).option("workspace",{type:"string",description:"Absolute workspace path this daemon binds to. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. For multi-workspace deployments, run one `matilda serve` per workspace on separate ports (or behind an external orchestrator)."}).option("max-connections",{type:"number",default:256,description:"Listener-level TCP connection cap (server.maxConnections). Bounds raw sockets \u2014 slow/phantom SSE clients get rejected at accept time once full. Set to 0 to disable."}).option("require-auth",{type:"boolean",default:!1,description:"Refuse to start without a bearer token, even on loopback. Hardens the loopback developer default for shared dev hosts / CI runners / multi-tenant workstations where any local user can hit 127.0.0.1. Requires --token or MATILDA_SERVER_TOKEN. /health also requires Authorization when enabled (no loopback exemption \u2014 k8s/Compose probes must pass the bearer too)."}).option("enable-session-shell",{type:"boolean",default:!1,description:"Enable direct POST /session/:id/shell execution. Requires a bearer token and a session-bound client id on each call."}).option("event-ring-size",{type:"number",default:8e3,description:"Per-session SSE replay ring depth. Sets the replay backlog available to `GET /session/:id/events` reconnects that send a `Last-Event-ID: N` header. Larger = more reconnect headroom at the cost of a few hundred KB extra RAM per session. Must be a positive finite integer."}).option("http-bridge",{type:"boolean",default:!0,description:"Stage 1 mode: one `matilda --acp` child per daemon (the daemon binds to one workspace at boot, multiplexing N sessions onto that child via the agent's native `newSession()`). Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."}).option("mcp-client-budget",{type:"number",description:"Cap on live MCP clients spawned inside the ACP child for the bound workspace. Positive integer. Combine with --mcp-budget-mode to control behavior at the cap. When unset, mode defaults to off (no accounting-driven enforcement, but GET /workspace/mcp still reports `clientCount`). Distinct from claude-code MCP_SERVER_CONNECTION_BATCH_SIZE which gates startup concurrency, not the total client count."}).option("mcp-budget-mode",{choices:["enforce","warn","off"],description:'How --mcp-client-budget is enforced. `warn` (default when budget set): no refusal, snapshot surfaces warning at >=75% of budget. `enforce`: connects past the cap are refused (`disabledReason: "budget"`, deterministic by mcpServers declaration order). `off`: pure observability. Boot rejects `enforce` without a budget.'}).option("allow-origin",{type:"string",array:!0,description:"Cross-origin allowlist for browser webui clients."}).option("allow-private-auth-base-url",{type:"boolean",default:!1,description:"Allow /workspace/auth/provider to install localhost/private-network baseUrl values. Use only for local development with trusted clients."}).option("prompt-deadline-ms",{type:"number",description:"Server-side wallclock cap on POST /session/:id/prompt (ms). Falls back to MATILDA_SERVE_PROMPT_DEADLINE_MS. Positive integer."}).option("writer-idle-timeout-ms",{type:"number",description:"Per-SSE-connection idle deadline (ms). Falls back to MATILDA_SERVE_WRITER_IDLE_TIMEOUT_MS. Positive integer."}).option("channel-idle-timeout-ms",{type:"number",description:"Milliseconds to keep ACP child alive after last session closes. 0 or unset = immediate kill (default)."}).option("session-reap-interval-ms",{type:"number",description:"Session reaper scan interval (ms). 0 = disabled. Default: 60000."}).option("session-idle-timeout-ms",{type:"number",description:"Idle timeout before a disconnected session is reaped (ms). 0 = disabled. Default: 1800000 (30 min)."}).option("rate-limit",{type:"boolean",description:"Enable per-tier HTTP rate limiting. Tiers: prompt (10/min), mutation (30/min), read (120/min). Health, heartbeat, SSE, and /acp are exempt."}).option("rate-limit-prompt",{type:"number",description:"Max prompt requests per window per client (default 10). Requires --rate-limit."}).option("rate-limit-mutation",{type:"number",description:"Max mutation requests per window per client (default 30). Requires --rate-limit."}).option("rate-limit-read",{type:"number",description:"Max read requests per window per client (default 120). Requires --rate-limit."}).option("rate-limit-window-ms",{type:"number",description:"Rate limit window duration in ms (default 60000). Requires --rate-limit."}),handler:async e=>{e["http-bridge"]||Ge("matilda serve: --no-http-bridge (native mode) is not yet implemented; falling back to http-bridge."),e.token&&Ge("matilda serve: --token is visible in the process command line; prefer the MATILDA_SERVER_TOKEN env var for any non-trivial deployment.");let t=e["mcp-client-budget"],n=e["mcp-budget-mode"];t!==void 0&&(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)&&(Ge("matilda serve: --mcp-client-budget must be a positive integer."),process.exit(1)),n==="enforce"&&t===void 0&&(Ge("matilda serve: --mcp-budget-mode=enforce requires --mcp-client-budget=N."),process.exit(1));let o=n??(t!==void 0?"warn":"off"),r=e["max-pending-prompts-per-session"];r!==Number.POSITIVE_INFINITY&&(!Number.isFinite(r)||!Number.isInteger(r)||r<0)&&(Ge("matilda serve: --max-pending-prompts-per-session must be a non-negative integer (0 / Infinity = unlimited)."),process.exit(1)),t!==void 0&&Ge(`matilda serve: --mcp-client-budget=${t} mode=${o}`+(o==="enforce"?" (servers past the cap will be refused at discovery)":o==="warn"?` (warnings at >=${Math.ceil(t*DT)}, no refusal)`:""));try{let h=Jt(e.workspace??process.cwd()).merged,f=h.tools?.approvalMode,y=h.tools?.sandbox,I=process.env.SANDBOX,S=process.env.MATILDA_CODE_SUPPRESS_BOGAN_WARNING,x=S==="1"||S==="true";f==="bogan"&&!y&&!I&&!x&&Ge(lq)}catch{}let s=e["rate-limit"]??(process.env.MATILDA_SERVE_RATE_LIMIT==="1"||process.env.MATILDA_SERVE_RATE_LIMIT==="true"),i,a,l,c;if(s){let d=h=>{let f=process.env[h];return f?Number(f):void 0};i=e["rate-limit-prompt"]??d("MATILDA_SERVE_RATE_LIMIT_PROMPT"),a=e["rate-limit-mutation"]??d("MATILDA_SERVE_RATE_LIMIT_MUTATION"),l=e["rate-limit-read"]??d("MATILDA_SERVE_RATE_LIMIT_READ"),c=e["rate-limit-window-ms"]??d("MATILDA_SERVE_RATE_LIMIT_WINDOW_MS");for(let[h,f]of[["--rate-limit-prompt",i],["--rate-limit-mutation",a],["--rate-limit-read",l]])f!==void 0&&(!Number.isFinite(f)||!Number.isInteger(f)||f<=0)&&(Ge(`matilda serve: ${h} must be a positive integer.`),process.exit(1));c!==void 0&&(!Number.isFinite(c)||!Number.isInteger(c)||c<1e3)&&(Ge("matilda serve: --rate-limit-window-ms must be an integer >= 1000."),process.exit(1))}let{runMatildaServe:u}=await import("./chunks/serve-2LANOA2Z.js");try{await u({port:e.port,hostname:e.hostname,token:e.token,mode:"http-bridge",maxSessions:e["max-sessions"],maxPendingPromptsPerSession:r,maxConnections:e["max-connections"],eventRingSize:e["event-ring-size"],workspace:e.workspace,requireAuth:e["require-auth"],enableSessionShell:e["enable-session-shell"],allowPrivateAuthBaseUrl:e["allow-private-auth-base-url"],mcpClientBudget:t,mcpBudgetMode:o,...e["allow-origin"]&&e["allow-origin"].length>0?{allowOrigins:e["allow-origin"]}:{},...e["prompt-deadline-ms"]!==void 0?{promptDeadlineMs:e["prompt-deadline-ms"]}:{},...e["writer-idle-timeout-ms"]!==void 0?{writerIdleTimeoutMs:e["writer-idle-timeout-ms"]}:{},...e["channel-idle-timeout-ms"]!==void 0?{channelIdleTimeoutMs:e["channel-idle-timeout-ms"]}:{},...e["session-reap-interval-ms"]!==void 0?{sessionReapIntervalMs:e["session-reap-interval-ms"]}:{},...e["session-idle-timeout-ms"]!==void 0?{sessionIdleTimeoutMs:e["session-idle-timeout-ms"]}:{},...s?{rateLimit:!0}:{},...i!==void 0?{rateLimitPrompt:i}:{},...a!==void 0?{rateLimitMutation:a}:{},...l!==void 0?{rateLimitRead:l}:{},...c!==void 0?{rateLimitWindowMs:c}:{}})}catch(d){Ge(`matilda serve: ${d instanceof Error?d.message:String(d)}`),process.exit(1)}await gZe()}};p();p();p();var ype=k(Ipe(),1),mZe=new Intl.Segmenter,fZe=new RegExp("^\\p{Default_Ignorable_Code_Point}$","u");function fn(e,t={}){if(typeof e!="string"||e.length===0)return 0;let{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:o=!1}=t;if(o||(e=lr(e)),e.length===0)return 0;let r=0,s={ambiguousAsWide:!n};for(let{segment:i}of mZe.segment(e)){let a=i.codePointAt(0);if(!(a<=31||a>=127&&a<=159)&&!(a>=8203&&a<=8207||a===65279)&&!(a>=768&&a<=879||a>=6832&&a<=6911||a>=7616&&a<=7679||a>=8400&&a<=8447||a>=65056&&a<=65071)&&!(a>=55296&&a<=57343)&&!(a>=65024&&a<=65039)&&!fZe.test(i)){if((0,ype.default)().test(i)){r+=2;continue}r+=Ol(a,s)}}return r}p();iX();import{stripVTControlCharacters as pZe}from"node:util";var Spe=e=>{if(!e)return 0;let t=e.split(`
288
+ `,"utf8"),tt(`Wrote presubmit report to ${r}`)}var dpe={command:"presubmit <pr_number> <commit_sha> <owner_repo> <out_path>",describe:"Pre-submission checks for /review Step 9 (self-PR detection, CI status, existing-comments classification)",builder:e=>e.positional("pr_number",{type:"string",demandOption:!0,describe:"PR number"}).positional("commit_sha",{type:"string",demandOption:!0,describe:"PR HEAD commit SHA"}).positional("owner_repo",{type:"string",demandOption:!0,describe:'GitHub "owner/repo"'}).positional("out_path",{type:"string",demandOption:!0,describe:"Output JSON path (will be overwritten)"}).option("new-findings",{type:"string",describe:"Path to a JSON file shaped as [{path, line}, ...] \u2014 when provided, existing comments are checked for same-(path, line) overlap with the new findings."}),handler:async e=>{await iZe(e)}};p();import{execFileSync as gpe}from"node:child_process";import{existsSync as mpe,readdirSync as aZe,unlinkSync as lZe}from"node:fs";import{join as cZe}from"node:path";function uZe(e){let t=!1,n=/^pr-(\d+)$/.exec(e);if(n){let s=n[1],i=Ov(s);if(mpe(i))try{gpe("git",["worktree","remove",i,"--force"],{stdio:"pipe"}),tt(`Removed worktree: ${i}`),t=!0}catch(l){Ge(`Failed to remove worktree ${i}: ${l.message}`)}let a=Pv(s);if(f2(a))try{gpe("git",["branch","-D",a],{stdio:"pipe"}),tt(`Deleted ref: ${a}`),t=!0}catch(l){Ge(`Failed to delete branch ${a}: ${l.message}`)}}let o=tpe(e),r=[];try{r=mpe($h)?aZe($h):[]}catch(s){Ge(`Failed to read ${$h}: ${s.message}`)}for(let s of r){if(!s.startsWith(o))continue;let i=cZe($h,s);try{lZe(i),tt(`Removed temp file: ${i}`),t=!0}catch(a){Ge(`Failed to remove ${i}: ${a.message}`)}}t||tt(`Nothing to clean for target "${e}".`)}var fpe={command:"cleanup <target>",describe:"Post-review cleanup: remove worktree, branch ref, and per-target temp files",builder:e=>e.positional("target",{type:"string",demandOption:!0,describe:'Review target \u2014 "pr-<n>" for a PR review, "local" for an uncommitted review, or a filename for a file review'}),handler:e=>{uZe(e.target)}};var ppe={command:"review",describe:"Internal helpers used by the /review skill (PR worktree setup, context fetch, rules loading, deterministic analysis, presubmit checks, cleanup)",builder:e=>e.command(ope).command(spe).command(ape).command(upe).command(dpe).command(fpe).demandCommand(1,"Specify a subcommand: fetch-pr, pr-context, load-rules, deterministic, presubmit, or cleanup.").version(!1),handler:()=>{}};p();p();var lq="Warning: running headless with --bogan / approval-mode=bogan and no sandbox. All tool calls (shell, write, edit) auto-execute at this process's privilege level. Enable a sandbox via --sandbox / MATILDA_SANDBOX, or set MATILDA_CODE_SUPPRESS_BOGAN_WARNING=1 to silence this notice.";function hpe(e,t=process.env){return e.getApprovalMode()!=="bogan"||e.getSandbox()||t.SANDBOX||AZe(t.MATILDA_CODE_SUPPRESS_BOGAN_WARNING)?null:lq}function AZe(e){return e==="1"||e==="true"}function gZe(){return new Promise(()=>{})}var Cpe={command:"serve",describe:"Run Matilda as a local HTTP daemon (Stage 1 experimental: --http-bridge)",builder:e=>e.option("port",{type:"number",default:4170,description:"TCP port to bind (use 0 for an OS-assigned ephemeral port)"}).option("hostname",{type:"string",default:"127.0.0.1",description:"Interface to bind. Loopback (127.0.0.1, localhost, ::1, [::1]) is auth-free; anything else requires a token."}).option("token",{type:"string",description:"Bearer token required on every request. Falls back to the MATILDA_SERVER_TOKEN env var."}).option("max-sessions",{type:"number",default:20,description:"Cap on concurrent live sessions. New spawn requests beyond this return 503; attach to existing sessions still works. Set to 0 to disable."}).option("max-pending-prompts-per-session",{type:"number",default:5,description:"Per-session cap on accepted prompts waiting or running. New prompts beyond this return 503. Set to 0 to disable."}).option("workspace",{type:"string",description:"Absolute workspace path this daemon binds to. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. For multi-workspace deployments, run one `matilda serve` per workspace on separate ports (or behind an external orchestrator)."}).option("max-connections",{type:"number",default:256,description:"Listener-level TCP connection cap (server.maxConnections). Bounds raw sockets \u2014 slow/phantom SSE clients get rejected at accept time once full. Set to 0 to disable."}).option("require-auth",{type:"boolean",default:!1,description:"Refuse to start without a bearer token, even on loopback. Hardens the loopback developer default for shared dev hosts / CI runners / multi-tenant workstations where any local user can hit 127.0.0.1. Requires --token or MATILDA_SERVER_TOKEN. /health also requires Authorization when enabled (no loopback exemption \u2014 k8s/Compose probes must pass the bearer too)."}).option("enable-session-shell",{type:"boolean",default:!1,description:"Enable direct POST /session/:id/shell execution. Requires a bearer token and a session-bound client id on each call."}).option("event-ring-size",{type:"number",default:8e3,description:"Per-session SSE replay ring depth. Sets the replay backlog available to `GET /session/:id/events` reconnects that send a `Last-Event-ID: N` header. Larger = more reconnect headroom at the cost of a few hundred KB extra RAM per session. Must be a positive finite integer."}).option("http-bridge",{type:"boolean",default:!0,description:"Stage 1 mode: one `matilda --acp` child per daemon (the daemon binds to one workspace at boot, multiplexing N sessions onto that child via the agent's native `newSession()`). Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."}).option("mcp-client-budget",{type:"number",description:"Cap on live MCP clients spawned inside the ACP child for the bound workspace. Positive integer. Combine with --mcp-budget-mode to control behavior at the cap. When unset, mode defaults to off (no accounting-driven enforcement, but GET /workspace/mcp still reports `clientCount`). Distinct from claude-code MCP_SERVER_CONNECTION_BATCH_SIZE which gates startup concurrency, not the total client count."}).option("mcp-budget-mode",{choices:["enforce","warn","off"],description:'How --mcp-client-budget is enforced. `warn` (default when budget set): no refusal, snapshot surfaces warning at >=75% of budget. `enforce`: connects past the cap are refused (`disabledReason: "budget"`, deterministic by mcpServers declaration order). `off`: pure observability. Boot rejects `enforce` without a budget.'}).option("allow-origin",{type:"string",array:!0,description:"Cross-origin allowlist for browser webui clients."}).option("allow-private-auth-base-url",{type:"boolean",default:!1,description:"Allow /workspace/auth/provider to install localhost/private-network baseUrl values. Use only for local development with trusted clients."}).option("prompt-deadline-ms",{type:"number",description:"Server-side wallclock cap on POST /session/:id/prompt (ms). Falls back to MATILDA_SERVE_PROMPT_DEADLINE_MS. Positive integer."}).option("writer-idle-timeout-ms",{type:"number",description:"Per-SSE-connection idle deadline (ms). Falls back to MATILDA_SERVE_WRITER_IDLE_TIMEOUT_MS. Positive integer."}).option("channel-idle-timeout-ms",{type:"number",description:"Milliseconds to keep ACP child alive after last session closes. 0 or unset = immediate kill (default)."}).option("session-reap-interval-ms",{type:"number",description:"Session reaper scan interval (ms). 0 = disabled. Default: 60000."}).option("session-idle-timeout-ms",{type:"number",description:"Idle timeout before a disconnected session is reaped (ms). 0 = disabled. Default: 1800000 (30 min)."}).option("rate-limit",{type:"boolean",description:"Enable per-tier HTTP rate limiting. Tiers: prompt (10/min), mutation (30/min), read (120/min). Health, heartbeat, SSE, and /acp are exempt."}).option("rate-limit-prompt",{type:"number",description:"Max prompt requests per window per client (default 10). Requires --rate-limit."}).option("rate-limit-mutation",{type:"number",description:"Max mutation requests per window per client (default 30). Requires --rate-limit."}).option("rate-limit-read",{type:"number",description:"Max read requests per window per client (default 120). Requires --rate-limit."}).option("rate-limit-window-ms",{type:"number",description:"Rate limit window duration in ms (default 60000). Requires --rate-limit."}),handler:async e=>{e["http-bridge"]||Ge("matilda serve: --no-http-bridge (native mode) is not yet implemented; falling back to http-bridge."),e.token&&Ge("matilda serve: --token is visible in the process command line; prefer the MATILDA_SERVER_TOKEN env var for any non-trivial deployment.");let t=e["mcp-client-budget"],n=e["mcp-budget-mode"];t!==void 0&&(!Number.isFinite(t)||!Number.isInteger(t)||t<=0)&&(Ge("matilda serve: --mcp-client-budget must be a positive integer."),process.exit(1)),n==="enforce"&&t===void 0&&(Ge("matilda serve: --mcp-budget-mode=enforce requires --mcp-client-budget=N."),process.exit(1));let o=n??(t!==void 0?"warn":"off"),r=e["max-pending-prompts-per-session"];r!==Number.POSITIVE_INFINITY&&(!Number.isFinite(r)||!Number.isInteger(r)||r<0)&&(Ge("matilda serve: --max-pending-prompts-per-session must be a non-negative integer (0 / Infinity = unlimited)."),process.exit(1)),t!==void 0&&Ge(`matilda serve: --mcp-client-budget=${t} mode=${o}`+(o==="enforce"?" (servers past the cap will be refused at discovery)":o==="warn"?` (warnings at >=${Math.ceil(t*DT)}, no refusal)`:""));try{let h=Jt(e.workspace??process.cwd()).merged,f=h.tools?.approvalMode,y=h.tools?.sandbox,I=process.env.SANDBOX,S=process.env.MATILDA_CODE_SUPPRESS_BOGAN_WARNING,x=S==="1"||S==="true";f==="bogan"&&!y&&!I&&!x&&Ge(lq)}catch{}let s=e["rate-limit"]??(process.env.MATILDA_SERVE_RATE_LIMIT==="1"||process.env.MATILDA_SERVE_RATE_LIMIT==="true"),i,a,l,c;if(s){let d=h=>{let f=process.env[h];return f?Number(f):void 0};i=e["rate-limit-prompt"]??d("MATILDA_SERVE_RATE_LIMIT_PROMPT"),a=e["rate-limit-mutation"]??d("MATILDA_SERVE_RATE_LIMIT_MUTATION"),l=e["rate-limit-read"]??d("MATILDA_SERVE_RATE_LIMIT_READ"),c=e["rate-limit-window-ms"]??d("MATILDA_SERVE_RATE_LIMIT_WINDOW_MS");for(let[h,f]of[["--rate-limit-prompt",i],["--rate-limit-mutation",a],["--rate-limit-read",l]])f!==void 0&&(!Number.isFinite(f)||!Number.isInteger(f)||f<=0)&&(Ge(`matilda serve: ${h} must be a positive integer.`),process.exit(1));c!==void 0&&(!Number.isFinite(c)||!Number.isInteger(c)||c<1e3)&&(Ge("matilda serve: --rate-limit-window-ms must be an integer >= 1000."),process.exit(1))}let{runMatildaServe:u}=await import("./chunks/serve-VEGQRSWY.js");try{await u({port:e.port,hostname:e.hostname,token:e.token,mode:"http-bridge",maxSessions:e["max-sessions"],maxPendingPromptsPerSession:r,maxConnections:e["max-connections"],eventRingSize:e["event-ring-size"],workspace:e.workspace,requireAuth:e["require-auth"],enableSessionShell:e["enable-session-shell"],allowPrivateAuthBaseUrl:e["allow-private-auth-base-url"],mcpClientBudget:t,mcpBudgetMode:o,...e["allow-origin"]&&e["allow-origin"].length>0?{allowOrigins:e["allow-origin"]}:{},...e["prompt-deadline-ms"]!==void 0?{promptDeadlineMs:e["prompt-deadline-ms"]}:{},...e["writer-idle-timeout-ms"]!==void 0?{writerIdleTimeoutMs:e["writer-idle-timeout-ms"]}:{},...e["channel-idle-timeout-ms"]!==void 0?{channelIdleTimeoutMs:e["channel-idle-timeout-ms"]}:{},...e["session-reap-interval-ms"]!==void 0?{sessionReapIntervalMs:e["session-reap-interval-ms"]}:{},...e["session-idle-timeout-ms"]!==void 0?{sessionIdleTimeoutMs:e["session-idle-timeout-ms"]}:{},...s?{rateLimit:!0}:{},...i!==void 0?{rateLimitPrompt:i}:{},...a!==void 0?{rateLimitMutation:a}:{},...l!==void 0?{rateLimitRead:l}:{},...c!==void 0?{rateLimitWindowMs:c}:{}})}catch(d){Ge(`matilda serve: ${d instanceof Error?d.message:String(d)}`),process.exit(1)}await gZe()}};p();p();p();var ype=k(Ipe(),1),mZe=new Intl.Segmenter,fZe=new RegExp("^\\p{Default_Ignorable_Code_Point}$","u");function fn(e,t={}){if(typeof e!="string"||e.length===0)return 0;let{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:o=!1}=t;if(o||(e=lr(e)),e.length===0)return 0;let r=0,s={ambiguousAsWide:!n};for(let{segment:i}of mZe.segment(e)){let a=i.codePointAt(0);if(!(a<=31||a>=127&&a<=159)&&!(a>=8203&&a<=8207||a===65279)&&!(a>=768&&a<=879||a>=6832&&a<=6911||a>=7616&&a<=7679||a>=8400&&a<=8447||a>=65056&&a<=65071)&&!(a>=55296&&a<=57343)&&!(a>=65024&&a<=65039)&&!fZe.test(i)){if((0,ype.default)().test(i)){r+=2;continue}r+=Ol(a,s)}}return r}p();iX();import{stripVTControlCharacters as pZe}from"node:util";var Spe=e=>{if(!e)return 0;let t=e.split(`
289
289
  `);return Math.max(...t.map(n=>wc(n)))},Dpe=new Map,Bpe=1e3;function No(e){let t=!0;for(let o=0;o<e.length;o++)if(e.charCodeAt(o)>127){t=!1;break}if(t)return e.split("");if(e.length<=Bpe){let o=Dpe.get(e);if(o)return o}let n=Array.from(e);return e.length<=Bpe&&Dpe.set(e,n),n}function pt(e){return No(e).length}function $t(e,t,n){return No(e).slice(t,n).join("")}function Qx(e){let t=lr(e),n=pZe(t);return No(n).filter(o=>{let r=o.codePointAt(0);return r===void 0?!1:r===9||r===10||r===13?!0:!(r>=0&&r<=31||r>=128&&r<=159)}).join("")}var cq=new Map,wc=e=>{if(/^[\x20-\x7E]*$/.test(e))return e.length;if(cq.has(e))return cq.get(e);let t=fn(e);return cq.set(e,t),t};var uq=sX();function Lr(e){if(typeof e=="string")return e.search(uq)===-1?e:(uq.lastIndex=0,e.replace(uq,o=>JSON.stringify(o).slice(1,-1)));if(e===null||typeof e!="object")return e;if(Array.isArray(e)){let o=null;for(let r=0;r<e.length;r++){let s=e[r],i=Lr(s);i!==s&&(o===null&&(o=[...e]),o[r]=i)}return o!==null?o:e}let t=null,n=Object.keys(e);for(let o of n){let r=e[o],s=Lr(r);s!==r&&(t===null&&(t={...e}),t[o]=s)}return t!==null?t:e}var hZe=[{pattern:/(sk-[a-zA-Z0-9]{20,})/g,replacement:"sk-***REDACTED***"},{pattern:/(api[_-]?key[_-]?[=:]\s*)[a-zA-Z0-9_-]{20,}/gi,replacement:"$1***REDACTED***"},{pattern:/(Bearer\s+)[a-zA-Z0-9._-]+/gi,replacement:"$1***REDACTED***"},{pattern:/(token[_-]?[=:]\s*)[a-zA-Z0-9._-]{10,}/gi,replacement:"$1***REDACTED***"},{pattern:/(password[_-]?[=:]\s*)[^\s]+/gi,replacement:"$1***REDACTED***"},{pattern:/(pwd[_-]?[=:]\s*)[^\s]+/gi,replacement:"$1***REDACTED***"},{pattern:/(AKIA[A-Z0-9]{16})/g,replacement:"***REDACTED***"},{pattern:/(secret[_-]?[=:]\s*)[a-zA-Z0-9._-]{10,}/gi,replacement:"$1***REDACTED***"}];function xpe(e,t=200){let n=e;for(let{pattern:o,replacement:r}of hZe)n=n.replace(o,r);return n.length>t?t<=3?n.slice(0,t):n.slice(0,t-3)+"...":n}var CZe=/[\x00-\x1f\x7f-\x9f]/g;function EZe(e){switch(e){case"\b":return"\\b";case" ":return"\\t";case`
290
290
  `:return"\\n";case"\f":return"\\f";case"\r":return"\\r";default:return`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`}}function vx(e){return Lr(e).replace(CZe,EZe)}p();function wpe(){let e=Jt();return Tt.setRuntimeBaseDir(e.merged.advanced?.runtimeOutputDir,process.cwd()),new vi(process.cwd())}var E2=38,I2=16,y2=24,D2=12;function IZe(e){let t=new Date(e);if(isNaN(t.getTime()))return e;let n=o=>String(o).padStart(2,"0");return`${t.getUTCFullYear()}-${n(t.getUTCMonth()+1)}-${n(t.getUTCDate())} ${n(t.getUTCHours())}:${n(t.getUTCMinutes())}`}function Gv(e){let t=e.replace(/[\r\n\t]/g,"");return Lr(t).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"")}function Kh(e,t){let n=fn(e);return n>=t?e:e+" ".repeat(t-n)}function Wv(e,t){if(fn(e)<=t)return e;let o=t>3?"...":"",r=t-fn(o),s="",i=0;for(let a of e){if(i+=fn(a),i>r)break;s+=a}return s+o}function yZe(e){if(e.length===0){tt("No sessions found.");return}let t=process.stdout.columns??80,n=Math.max(20,t-E2-I2-y2-D2-4),o=Kh("SESSION ID",E2)+" "+Kh("STARTED",I2)+" "+Kh("TITLE",y2)+" "+Kh("BRANCH",D2)+" PROMPT";tt(o);for(let r of e){let s=Wv(Gv(String(r.sessionId??"")),E2),i=Wv(Gv(IZe(r.startTime)),I2),a=Gv(r.prompt??""),l=Wv(r.customTitle!=null?Gv(r.customTitle):a,y2),c=Wv(r.gitBranch!=null?Gv(r.gitBranch):"-",D2),u=Wv(a,n);tt(`${Kh(s,E2)} ${Kh(i,I2)} ${Kh(l,y2)} ${Kh(c,D2)} ${u}`)}}function DZe(e){return{sessionId:e.sessionId,startTime:e.startTime,mtime:e.mtime,prompt:e.prompt,gitBranch:e.gitBranch??null,customTitle:e.customTitle??null,titleSource:e.titleSource??null,filePath:e.filePath,cwd:e.cwd}}function bpe(e){return e instanceof Error?e.message:String(e)}async function BZe(e){let t;try{t=wpe()}catch(o){Ge(`Error: failed to initialize session service: ${bpe(o)}`),process.exit(1);return}let n;try{n=await t.listSessions({size:e.limit??20})}catch(o){Ge(`Error: failed to list sessions: ${bpe(o)}`),process.exit(1);return}if(e.json){for(let o of n.items)tt(JSON.stringify(DZe(o)));n.items.length>0&&n.hasMore&&Ge(`Note: ${n.items.length} sessions shown, more available. Use --limit to show more.`)}else yZe(n.items),n.items.length>0&&n.hasMore&&tt(`Showing ${n.items.length} sessions. Use --limit to show more.`)}var Tpe={command:"list",describe:"List sessions",builder:e=>e.option("json",{type:"boolean",describe:"Output as JSON Lines",default:!1}).option("limit",{type:"number",describe:"Maximum number of sessions to show",default:20,coerce:t=>Number.isInteger(t)&&t>0?t:20}),handler:async e=>{await BZe(e)}};var Qpe={command:"sessions",describe:"Manage Matilda sessions",builder:e=>e.command(Tpe).demandCommand(1,"You need at least one command before continuing.").version(!1),handler:()=>{}};p();import{spawnSync as $rt}from"node:child_process";p();import*as jv from"node:fs";import*as zh from"node:path";import{execFileSync as SZe,spawnSync as xZe}from"node:child_process";import wZe from"node:readline/promises";import{stdin as bZe,stdout as TZe}from"node:process";function Mx(e,t,n=5e3){return SZe("git",t,{cwd:e,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:n}).trim()}function vpe(e){let t=jv.statSync(e).isDirectory()?e:zh.dirname(e);for(;;){if(jv.existsSync(zh.join(t,".git"))&&jv.existsSync(zh.join(t,"package.json")))return t;let n=zh.dirname(t);if(n===t)return null;t=n}}function B2(){let e=process.argv[1];if(e)try{let t=vpe(zh.resolve(e));if(t)return t}catch{}try{return vpe(process.cwd())}catch{return null}}function Aq(e=B2()){if(!e||process.env.DEV==="true")return null;let t=Mx(e,["rev-parse","--abbrev-ref","HEAD"]);if(!t||t==="HEAD")return null;Mx(e,["fetch","--quiet","origin",t],3e3);let n=Mx(e,["rev-parse","HEAD"]),o=Mx(e,["rev-parse",`origin/${t}`]);return!n||!o||n===o?null:{root:e,branch:t,local:n,remote:o}}function Rx(e,t,n){if(xZe(t,n,{cwd:e,stdio:"inherit",shell:process.platform==="win32"}).status!==0)throw new Error(`${t} ${n.join(" ")} failed.`)}function QZe(e){return/(^|\/)NOTICES\.txt$/.test(e)||/(^|\/)settings\.schema\.json$/.test(e)}function vZe(e){return e.split(`
291
291
  `).map(t=>t.slice(2).trim()).filter(Boolean).filter(t=>!QZe(t))}function dq(e=B2()){if(!e)throw new Error("Could not find a Matilda Code source checkout to update.");let t=Mx(e,["rev-parse","--abbrev-ref","HEAD"]);if(!t||t==="HEAD")throw new Error("Matilda Code is not on a branch; cannot self-update safely.");let n=Mx(e,["status","--porcelain"]),o=vZe(n);if(o.length>0)throw new Error(`Matilda Code checkout has local changes; refusing to self-update:
@@ -426,7 +426,7 @@ ${a.join(`
426
426
  `)}${l}`:i}function glt(e){if(e.length===0)return[];let{addWidth:t,remWidth:n,statColumnWidth:o}=u9(e),r=[];for(let s of e){let i=vx(s.filename);if(s.isBinary){let u=s.isUntracked?` ${m("(binary, new)")}`:s.isDeleted?` ${m("(binary, deleted)")}`:` ${m("(binary)")}`;r.push(` ${mlt("~",o)} ${i}${u}`);continue}let a=`+${String(s.added??0).padStart(t)}`,l=`-${String(s.removed??0).padStart(n)}`,c="";s.isUntracked?c=s.truncated?` ${m("(new, partial)")}`:` ${m("(new)")}`:s.isDeleted&&(c=` ${m("(deleted)")}`),r.push(` ${a} ${l} ${i}${c}`)}return r}function mlt(e,t){return e.length>=t?e:`${e}${" ".repeat(t-e.length)}`}var CSe={name:"diff",get description(){return m("Show working-tree change stats versus HEAD")},kind:"built-in",supportedModes:["interactive","non_interactive","acp"],action:clt};p();var ESe={name:"editor",get description(){return m("set external editor preference")},kind:"built-in",supportedModes:["interactive"],action:()=>({type:"dialog",dialog:"editor"})};p();import*as Yd from"node:fs/promises";import QR from"node:path";p();p();import{randomUUID as hlt}from"node:crypto";p();p();p();var Mc=class{constructor(t){this.ctx=t}static toEpochMs(t){if(typeof t=="number")return Number.isFinite(t)?t:void 0;if(typeof t=="string"){let n=new Date(t).getTime();return Number.isFinite(n)?n:void 0}}async sendUpdate(t){return this.ctx.messageRewriter?this.ctx.messageRewriter.interceptUpdate(t):this.ctx.sendUpdate(t)}get config(){return this.ctx.config}get sessionId(){return this.ctx.sessionId}};var lC=class extends Mc{async emitStopHookLoop(t,n,o){let r=IA(this.sessionId);await this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:""},_meta:{stopHookLoop:{iterationCount:t,reasons:n,stopHookCount:o,...r?{goal:{condition:r.condition,iterations:r.iterations,setAt:r.setAt,lastReason:r.lastReason}}:{}}}})}async emitGoalTerminal(t){await this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:""},_meta:{goalTerminal:t}})}async emitGoalStatus(t){await this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:""},_meta:{goalStatus:t}})}async emitUserMessage(t,n){let o=Mc.toEpochMs(n);await this.sendUpdate({sessionUpdate:"user_message_chunk",content:{type:"text",text:t},...o!=null&&{_meta:{timestamp:o}}})}async emitAgentThought(t,n,o){let r=this.buildChunkMeta(Mc.toEpochMs(n),o);await this.sendUpdate({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:t},...r?{_meta:r}:{}})}async emitAgentMessage(t,n,o,r){let s=this.buildChunkMeta(Mc.toEpochMs(n),o);await this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:t},...s||r?{_meta:{...r,...s}}:{}})}async emitUsageMetadata(t,n="",o,r){let s={inputTokens:t.promptTokenCount??0,outputTokens:t.candidatesTokenCount??0,totalTokens:t.totalTokenCount??0,thoughtTokens:t.thoughtsTokenCount,cachedReadTokens:t.cachedContentTokenCount},i=this.ctx.cumulativeUsage;if(i){let l=(c,u)=>typeof u=="number"&&Number.isFinite(u)?c+u:c;i.promptTokens=l(i.promptTokens,s.inputTokens),i.candidateTokens=l(i.candidateTokens,s.outputTokens),i.cachedTokens=l(i.cachedTokens,s.cachedReadTokens),i.apiTimeMs=l(i.apiTimeMs,o)}let a=typeof o=="number"?{usage:s,durationMs:o,...r}:{usage:s,...r};await this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:n},_meta:a})}async emitMessage(t,n,o=!1,r,s){return n==="user"?this.emitUserMessage(t,r):o?this.emitAgentThought(t,r,s):this.emitAgentMessage(t,r,s)}buildChunkMeta(t,n){let o={...n?.parentToolCallId?{parentToolCallId:n.parentToolCallId}:{},...n?.subagentType?{subagentType:n.subagentType}:{},...t!=null?{timestamp:t}:{}};return Object.keys(o).length>0?o:void 0}};p();p();var a0=class extends Mc{async emitPlan(t){let n=t.map(r=>({content:r.content,priority:"medium",status:r.status})),o=this.ctx.cumulativeUsage;await this.sendUpdate({sessionUpdate:"plan",entries:n,...o?{_meta:{stats:{...o}}}:{}})}extractTodos(t,n){let o=this.extractFromResultDisplay(t);return o||(n&&Array.isArray(n.todos)?n.todos:null)}extractFromResultDisplay(t){if(!t)return null;if(typeof t=="object"){let n=t;if(n.type==="todo_list"&&Array.isArray(n.todos))return n.todos}if(typeof t=="string")try{let n=JSON.parse(t);if(n?.type==="todo_list"&&Array.isArray(n.todos))return n.todos}catch{}return null}};p();function HO(e){let t=typeof e.fileName=="string"?e.fileName:"the edited file",n=typeof e.fileDiffLength=="number"?` Original fileDiff length: ${e.fileDiffLength} chars.`:"";return e.fileDiffTruncated===!0?`Full diff omitted from saved session history for ${t}.${n}`:`Saved session preview only for ${t}; full original and new file contents are unavailable.`}var plt={read:"read",edit:"edit",delete:"delete",move:"move",search:"search",execute:"execute",think:"think",fetch:"fetch",agent:"other",other:"other"},cC=class e extends Mc{planEmitter;constructor(t){super(t),this.planEmitter=new a0(t)}async emitStart(t){if(this.isTodoWriteTool(t.toolName))return!1;let{title:n,locations:o,kind:r}=this.resolveToolMetadata(t.toolName,t.args),s=e.resolveToolProvenance(t.toolName,t.subagentMeta);return await this.sendUpdate({sessionUpdate:"tool_call",toolCallId:t.callId,status:t.status||"pending",title:n,content:[],locations:o,kind:r,rawInput:t.args??{},_meta:{toolName:t.toolName,...t.subagentMeta,provenance:s.provenance,...s.serverId?{serverId:s.serverId}:{},...Mc.toEpochMs(t.timestamp)!=null&&{timestamp:Mc.toEpochMs(t.timestamp)}}}),!0}async emitResult(t){if(this.isTodoWriteTool(t.toolName)){let i=this.planEmitter.extractTodos(t.resultDisplay,t.args);i&&i.length>0?await this.planEmitter.emitPlan(i):t.args&&Array.isArray(t.args.todos)&&await this.planEmitter.emitPlan([]);return}let n=[],o=this.extractDiffContent(t.resultDisplay);o?n=[o]:t.error?n=[{type:"content",content:{type:"text",text:t.error.message}}]:n=this.transformPartsToToolCallContent(t.message);let r=e.resolveToolProvenance(t.toolName,t.subagentMeta),s={sessionUpdate:"tool_call_update",toolCallId:t.callId,status:t.success?"completed":"failed",content:n,_meta:{toolName:t.toolName,...t.errorType?{errorType:t.errorType}:{},...t.subagentMeta,provenance:r.provenance,...r.serverId?{serverId:r.serverId}:{},...Mc.toEpochMs(t.timestamp)!=null&&{timestamp:Mc.toEpochMs(t.timestamp)}}};t.resultDisplay!==void 0&&!this.isTruncatedSessionDiffDisplay(t.resultDisplay)&&(s.rawOutput=t.resultDisplay),await this.sendUpdate(s)}async emitError(t,n,o,r){let s=e.resolveToolProvenance(n,r);await this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:t,status:"failed",content:[{type:"content",content:{type:"text",text:o.message}}],_meta:{toolName:n,...r,provenance:s.provenance,...s.serverId?{serverId:s.serverId}:{}}})}static resolveToolProvenance(t,n){if(n!==void 0)return{provenance:"subagent"};if(t.startsWith("mcp__")){let o=t.split("__");if(o.length>=3&&o[1]&&o[1].length>0)return{provenance:"mcp",serverId:o[1]}}return{provenance:"builtin"}}isTodoWriteTool(t){return t===qt.TODO_WRITE}isExitPlanModeTool(t){return t===qt.EXIT_PLAN_MODE}isEnterPlanModeTool(t){return t===qt.ENTER_PLAN_MODE}resolveToolMetadata(t,n){let r=this.config.getToolRegistry().getTool(t),s=r?.displayName??t,i=[],a="other";if(r&&n)try{let l=r.build(n);s=`${s}: ${l.getDescription()}`,i=l.toolLocations().map(c=>({path:c.path,line:c.line??null})),a=this.mapToolKind(r.kind,t)}catch{typeof n.description=="string"&&(s=`${s}: ${n.description}`),r.kind&&(a=this.mapToolKind(r.kind,t))}return{title:s,locations:i,kind:a}}mapToolKind(t,n){return n&&(this.isExitPlanModeTool(n)||this.isEnterPlanModeTool(n))?"switch_mode":plt[t]??"other"}extractDiffContent(t){if(!t||typeof t!="object")return null;let n=t;return"fileName"in n&&"newContent"in n?this.isTruncatedSessionDiffDisplay(t)?{type:"content",content:{type:"text",text:HO(n)}}:{type:"diff",path:n.fileName,oldText:n.originalContent??"",newText:n.newContent}:null}isTruncatedSessionDiffDisplay(t){if(!t||typeof t!="object")return!1;let n=t;return n.truncatedForSession===!0&&"fileName"in n&&"newContent"in n}transformPartsToToolCallContent(t){let n=[];for(let o of t)if("text"in o&&o.text&&n.push({type:"content",content:{type:"text",text:o.text}}),"functionResponse"in o&&o.functionResponse)try{let r=o.functionResponse.response,s=r.output,i=r.error,a=typeof s=="string"?s:typeof i=="string"?i:JSON.stringify(r);n.push({type:"content",content:{type:"text",text:a}})}catch{}return n}};var uC=class{ctx;messageEmitter;toolCallEmitter;constructor(t){this.ctx=t,this.messageEmitter=new lC(t),this.toolCallEmitter=new cC(t)}async replay(t){for(let n of t)await this.replayRecord(n)}async replayRecord(t){switch(this.setActiveRecordId(t.uuid,t.timestamp),t.type){case"user":if(t.subtype==="hook_prompt")break;if(t.subtype==="notification"||t.subtype==="cron"){let n=t.systemPayload,o=n?.displayText;o&&(t.subtype==="notification"&&n?.completion==="joined"?await this.messageEmitter.emitAgentMessage(o,t.timestamp,void 0,{source:"background_notification_joined",matildaDiscreteMessage:!0}):await this.messageEmitter.emitUserMessage(o,t.timestamp));break}if(t.subtype==="mid_turn_user_message"){let n=t.systemPayload?.displayText;n?await this.messageEmitter.emitUserMessage(n,t.timestamp):t.message&&await this.replayContent(t.message,"user",t.timestamp);break}t.message&&await this.replayContent(t.message,"user",t.timestamp);break;case"assistant":t.message&&await this.replayContent(t.message,"assistant",t.timestamp),t.usageMetadata&&await this.replayUsageMetadata(t.usageMetadata);break;case"tool_result":await this.replayToolResult(t);break;case"system":t.subtype==="slash_command"&&await this.replaySlashCommandResult(t);break;default:break}this.setActiveRecordId(null)}async replayContent(t,n,o){for(let r of t.parts??[]){if("text"in r&&r.text){let s=r.thought??!1;await this.messageEmitter.emitMessage(r.text,n,s,o)}if("functionCall"in r&&r.functionCall){let s=r.functionCall.name??"",i=r.functionCall.id??`${s}-${Date.now()}`;await this.toolCallEmitter.emitStart({toolName:s,callId:i,args:r.functionCall.args,status:"in_progress",timestamp:o})}}}async replayUsageMetadata(t){await this.messageEmitter.emitUsageMetadata(t)}async replayToolResult(t){if(!t.message?.parts)return;let n=t.toolCallResult,o=n?.callId??t.uuid,r=this.extractToolNameFromRecord(t);await this.toolCallEmitter.emitResult({toolName:r,callId:o,success:!n?.error,message:t.message.parts,resultDisplay:n?.resultDisplay,args:void 0,timestamp:t.timestamp});let{resultDisplay:s}=n??{};s&&typeof s=="object"&&"type"in s&&s.type==="task_execution"&&await this.emitTaskUsageFromResultDisplay(s)}async emitTaskUsageFromResultDisplay(t){let n=t.executionSummary;if(!n)return;let o={};Number.isFinite(n.inputTokens)&&(o.promptTokenCount=n.inputTokens),Number.isFinite(n.outputTokens)&&(o.candidatesTokenCount=n.outputTokens),Number.isFinite(n.thoughtTokens)&&(o.thoughtsTokenCount=n.thoughtTokens),Number.isFinite(n.cachedTokens)&&(o.cachedContentTokenCount=n.cachedTokens),Number.isFinite(n.totalTokens)&&(o.totalTokenCount=n.totalTokens),Object.keys(o).length>0&&await this.messageEmitter.emitUsageMetadata(o)}async replaySlashCommandResult(t){let n=t.systemPayload;if(!(n?.phase!=="result"||!n.outputHistoryItems?.length))for(let o of n.outputHistoryItems){let r=typeof o.text=="string"?o.text:"";r&&await this.messageEmitter.emitAgentMessage(r.replace(/\n/g,`
427
427
  `),t.timestamp)}}extractToolNameFromRecord(t){if(t.message?.parts){for(let n of t.message.parts)if("functionResponse"in n&&n.functionResponse?.name)return n.functionResponse.name}return""}setActiveRecordId(t,n){let o=this.ctx;typeof o.setActiveRecordId=="function"&&o.setActiveRecordId(t,n)}};function Clt(e){if(e.message?.parts){for(let t of e.message.parts)if("functionResponse"in t&&t.functionResponse?.name)return t.functionResponse.name}}function Elt(e){if(e.message?.parts){for(let t of e.message.parts)if("functionResponse"in t&&t.functionResponse?.id)return t.functionResponse.id}}function Ilt(e){if(e&&typeof e=="object")return e;if(typeof e=="string")try{let t=JSON.parse(e);if(t&&typeof t=="object")return t}catch{}}function ylt(e){let t=new Map,n=new Map;for(let o of e)if(!(o.type!=="assistant"||!o.message?.parts))for(let r of o.message.parts){if(!("functionCall"in r)||!r.functionCall?.name)continue;let s=Ilt(r.functionCall.args);if(!s)continue;let i=r.functionCall.name,a=typeof r.functionCall.id=="string"?r.functionCall.id:null;a&&t.set(a,s);let l=n.get(i)??[];l.push(s),n.set(i,l)}return{byId:t,byName:n}}function Dlt(e){let t=ylt(e),n=new Map,o={filesWritten:0,linesAdded:0,linesRemoved:0,writtenFilePaths:new Set};for(let r of e){if(r.type!=="tool_result"||!r.toolCallResult)continue;let s=Clt(r),i=r.toolCallResult.callId??Elt(r),l=i&&t.byId.has(i)?t.byId.get(i):void 0;if(!l&&s){let u=t.byName.get(s);if(u&&u.length>0){let d=n.get(s)??0;l=u[d],n.set(s,d+1)}}let{resultDisplay:c}=r.toolCallResult;if(c&&typeof c=="object"&&"fileName"in c){let u=c,d="originalContent"in u,h="newContent"in u,f;if(typeof u.fileName=="string"?f=l?.file_path||u.fileName:f="unknown",d||h){if(o.filesWritten++,o.writtenFilePaths.add(f),u.diffStat)o.linesAdded+=u.diffStat.model_added_lines??0,o.linesRemoved+=u.diffStat.model_removed_lines??0;else if(!u.truncatedForSession){let y=String(u.originalContent??""),I=String(u.newContent??""),S=y.split(`
428
428
  `).filter(w=>w.length>0).length,x=I.split(`
429
- `).filter(w=>w.length>0).length;o.linesAdded+=x,o.linesRemoved+=S}}}}return o}function Blt(e){if(e.type!=="tool_result"||!e.toolCallResult?.resultDisplay)return 0;let{resultDisplay:t}=e.toolCallResult;if(typeof t=="object"&&"type"in t&&t.type==="task_execution"&&"executionSummary"in t){let n=t.executionSummary;return typeof n.totalTokens=="number"?n.totalTokens:(n.inputTokens??0)+(n.outputTokens??0)+(n.thoughtTokens??0)+(n.cachedTokens??0)}return 0}function Slt(e){let t=0,n=null;for(let r of e){r.type==="assistant"&&(r.usageMetadata&&(t+=r.usageMetadata.totalTokenCount??0),r.usageMetadata?.totalTokenCount!==void 0&&r.contextWindowSize!==void 0&&(n={totalTokenCount:r.usageMetadata.totalTokenCount,contextWindowSize:r.contextWindowSize}));let s=Blt(r);s>0&&(t+=s)}if(n){let r=n.totalTokenCount/n.contextWindowSize*100;return{totalTokens:t,contextUsagePercent:Math.round(r*10)/10,contextWindowSize:n.contextWindowSize}}let o=[...e].reverse().find(r=>r.type==="assistant"&&r.contextWindowSize!==void 0);return{totalTokens:t,contextWindowSize:o?.contextWindowSize}}async function xlt(e,t){let{sessionId:n,startTime:o,messages:r}=e,s=r[0],i=s?.cwd??"",a=s?.gitBranch,l;if(i){let{getGitRepoName:y}=await import("./chunks/src-NONM7A63.js");l=y(i)}let c;for(let y of r)if(y.type==="assistant"&&y.model){c=y.model;break}let u=t.getChannel?.(),d=r.filter(Ng).length,h=Dlt(r),f=Slt(r);return{sessionId:n,startTime:o,exportTime:new Date().toISOString(),cwd:i,gitRepo:l,gitBranch:a,model:c,channel:u,promptCount:d,contextUsagePercent:f.contextUsagePercent,contextWindowSize:f.contextWindowSize,totalTokens:f.totalTokens,filesWritten:h.writtenFilePaths.size,linesAdded:h.linesAdded,linesRemoved:h.linesRemoved,uniqueFiles:Array.from(h.writtenFilePaths)}}var A9=class{sessionId;config;messages=[];currentMessage=null;activeRecordId=null;activeRecordTimestamp=null;toolCallMap=new Map;constructor(t,n){this.sessionId=t,this.config=n}async sendUpdate(t){switch(t.sessionUpdate){case"user_message_chunk":this.handleMessageChunk("user",t.content);break;case"agent_message_chunk":{let n=t._meta,o=n?.usage?{promptTokenCount:n.usage.inputTokens,candidatesTokenCount:n.usage.outputTokens,totalTokenCount:n.usage.totalTokens,thoughtsTokenCount:n.usage.thoughtTokens,cachedContentTokenCount:n.usage.cachedReadTokens}:void 0;this.handleMessageChunk("assistant",t.content,"assistant",o);break}case"agent_thought_chunk":this.handleMessageChunk("assistant",t.content,"thinking");break;case"tool_call":this.flushCurrentMessage(),this.handleToolCallStart(t);break;case"tool_call_update":this.handleToolCallUpdate(t);break;case"plan":this.flushCurrentMessage(),this.handlePlanUpdate(t);break;default:break}}setActiveRecordId(t,n){this.activeRecordId=t,this.activeRecordTimestamp=n??null}getMessageTimestamp(){return this.activeRecordTimestamp??new Date().toISOString()}getMessageUuid(){return this.activeRecordId??hlt()}handleMessageChunk(t,n,o=t,r){n.type!=="text"||!n.text||(this.currentMessage&&(this.currentMessage.type!==t||this.currentMessage.role!==o)&&this.flushCurrentMessage(),this.currentMessage&&this.currentMessage.type===t&&this.currentMessage.role===o?(this.currentMessage.parts.push({text:n.text}),r&&t==="assistant"&&(this.currentMessage.usageMetadata=r)):this.currentMessage={type:t,role:o,parts:[{text:n.text}],timestamp:Date.now(),...r&&t==="assistant"?{usageMetadata:r}:{}})}handleToolCallStart(t){let n={toolCallId:t.toolCallId,kind:t.kind||"other",title:typeof t.title=="string"?t.title:t.title||"",status:t.status||"pending",rawInput:t.rawInput,locations:t.locations,timestamp:Date.now()};this.toolCallMap.set(t.toolCallId,n);let o=this.getMessageUuid();this.messages.push({uuid:o,sessionId:this.sessionId,timestamp:this.getMessageTimestamp(),type:"tool_call",toolCall:n})}handleToolCallUpdate(t){let n=this.toolCallMap.get(t.toolCallId);n&&(t.status&&(n.status=t.status),t.content&&(n.content=t.content),t.title&&(n.title=typeof t.title=="string"?t.title:""))}handlePlanUpdate(t){let n=this.getMessageUuid(),o=this.getMessageTimestamp(),s=[{type:"content",content:{type:"text",text:t.entries.map(i=>`- ${i.status==="completed"?"[x]":i.status==="in_progress"?"[-]":"[ ]"} ${i.content}`).join(`
429
+ `).filter(w=>w.length>0).length;o.linesAdded+=x,o.linesRemoved+=S}}}}return o}function Blt(e){if(e.type!=="tool_result"||!e.toolCallResult?.resultDisplay)return 0;let{resultDisplay:t}=e.toolCallResult;if(typeof t=="object"&&"type"in t&&t.type==="task_execution"&&"executionSummary"in t){let n=t.executionSummary;return typeof n.totalTokens=="number"?n.totalTokens:(n.inputTokens??0)+(n.outputTokens??0)+(n.thoughtTokens??0)+(n.cachedTokens??0)}return 0}function Slt(e){let t=0,n=null;for(let r of e){r.type==="assistant"&&(r.usageMetadata&&(t+=r.usageMetadata.totalTokenCount??0),r.usageMetadata?.totalTokenCount!==void 0&&r.contextWindowSize!==void 0&&(n={totalTokenCount:r.usageMetadata.totalTokenCount,contextWindowSize:r.contextWindowSize}));let s=Blt(r);s>0&&(t+=s)}if(n){let r=n.totalTokenCount/n.contextWindowSize*100;return{totalTokens:t,contextUsagePercent:Math.round(r*10)/10,contextWindowSize:n.contextWindowSize}}let o=[...e].reverse().find(r=>r.type==="assistant"&&r.contextWindowSize!==void 0);return{totalTokens:t,contextWindowSize:o?.contextWindowSize}}async function xlt(e,t){let{sessionId:n,startTime:o,messages:r}=e,s=r[0],i=s?.cwd??"",a=s?.gitBranch,l;if(i){let{getGitRepoName:y}=await import("./chunks/src-CLPCRR5T.js");l=y(i)}let c;for(let y of r)if(y.type==="assistant"&&y.model){c=y.model;break}let u=t.getChannel?.(),d=r.filter(Ng).length,h=Dlt(r),f=Slt(r);return{sessionId:n,startTime:o,exportTime:new Date().toISOString(),cwd:i,gitRepo:l,gitBranch:a,model:c,channel:u,promptCount:d,contextUsagePercent:f.contextUsagePercent,contextWindowSize:f.contextWindowSize,totalTokens:f.totalTokens,filesWritten:h.writtenFilePaths.size,linesAdded:h.linesAdded,linesRemoved:h.linesRemoved,uniqueFiles:Array.from(h.writtenFilePaths)}}var A9=class{sessionId;config;messages=[];currentMessage=null;activeRecordId=null;activeRecordTimestamp=null;toolCallMap=new Map;constructor(t,n){this.sessionId=t,this.config=n}async sendUpdate(t){switch(t.sessionUpdate){case"user_message_chunk":this.handleMessageChunk("user",t.content);break;case"agent_message_chunk":{let n=t._meta,o=n?.usage?{promptTokenCount:n.usage.inputTokens,candidatesTokenCount:n.usage.outputTokens,totalTokenCount:n.usage.totalTokens,thoughtsTokenCount:n.usage.thoughtTokens,cachedContentTokenCount:n.usage.cachedReadTokens}:void 0;this.handleMessageChunk("assistant",t.content,"assistant",o);break}case"agent_thought_chunk":this.handleMessageChunk("assistant",t.content,"thinking");break;case"tool_call":this.flushCurrentMessage(),this.handleToolCallStart(t);break;case"tool_call_update":this.handleToolCallUpdate(t);break;case"plan":this.flushCurrentMessage(),this.handlePlanUpdate(t);break;default:break}}setActiveRecordId(t,n){this.activeRecordId=t,this.activeRecordTimestamp=n??null}getMessageTimestamp(){return this.activeRecordTimestamp??new Date().toISOString()}getMessageUuid(){return this.activeRecordId??hlt()}handleMessageChunk(t,n,o=t,r){n.type!=="text"||!n.text||(this.currentMessage&&(this.currentMessage.type!==t||this.currentMessage.role!==o)&&this.flushCurrentMessage(),this.currentMessage&&this.currentMessage.type===t&&this.currentMessage.role===o?(this.currentMessage.parts.push({text:n.text}),r&&t==="assistant"&&(this.currentMessage.usageMetadata=r)):this.currentMessage={type:t,role:o,parts:[{text:n.text}],timestamp:Date.now(),...r&&t==="assistant"?{usageMetadata:r}:{}})}handleToolCallStart(t){let n={toolCallId:t.toolCallId,kind:t.kind||"other",title:typeof t.title=="string"?t.title:t.title||"",status:t.status||"pending",rawInput:t.rawInput,locations:t.locations,timestamp:Date.now()};this.toolCallMap.set(t.toolCallId,n);let o=this.getMessageUuid();this.messages.push({uuid:o,sessionId:this.sessionId,timestamp:this.getMessageTimestamp(),type:"tool_call",toolCall:n})}handleToolCallUpdate(t){let n=this.toolCallMap.get(t.toolCallId);n&&(t.status&&(n.status=t.status),t.content&&(n.content=t.content),t.title&&(n.title=typeof t.title=="string"?t.title:""))}handlePlanUpdate(t){let n=this.getMessageUuid(),o=this.getMessageTimestamp(),s=[{type:"content",content:{type:"text",text:t.entries.map(i=>`- ${i.status==="completed"?"[x]":i.status==="in_progress"?"[-]":"[ ]"} ${i.content}`).join(`
430
430
  `)}}];this.messages.push({uuid:n,sessionId:this.sessionId,timestamp:o,type:"tool_call",toolCall:{toolCallId:n,kind:"todowrite",title:"TodoWrite",status:"completed",content:s,timestamp:Date.parse(o)}})}flushCurrentMessage(){if(!this.currentMessage)return;let n={uuid:this.getMessageUuid(),sessionId:this.sessionId,timestamp:this.getMessageTimestamp(),type:this.currentMessage.type,message:{role:this.currentMessage.role,parts:this.currentMessage.parts}};this.currentMessage.type==="assistant"&&this.currentMessage.usageMetadata&&(n.usageMetadata=this.currentMessage.usageMetadata),this.messages.push(n),this.currentMessage=null}flushMessages(){this.flushCurrentMessage()}getMessages(){return this.messages}};async function d9(e,t){let n=new A9(e.sessionId,t);await new uC(n).replay(e.messages),n.flushMessages();let r=n.getMessages(),s=await xlt(e,t);return{sessionId:e.sessionId,startTime:e.startTime,messages:r,metadata:s}}p();function g9(e,t,n){let o=[...e.messages],r=new Map;o.forEach((i,a)=>{i.type==="tool_call"&&i.toolCall?.toolCallId&&r.set(i.toolCall.toolCallId,a)});let s=new Map;o.forEach((i,a)=>{i.type==="assistant"&&s.set(i.uuid,a)});for(let i of t){if(i.type!=="tool_result")continue;let a=blt(i,n);if(!a?.toolCall)continue;let l=r.get(a.toolCall.toolCallId);if(l===void 0){r.set(a.toolCall.toolCallId,o.length),o.push(a);continue}let c=o[l];c.type!=="tool_call"||!c.toolCall||wlt(c.toolCall,a.toolCall)}for(let i of t){if(i.type!=="assistant"||!i.usageMetadata)continue;let a=s.get(i.uuid);a!==void 0&&(o[a].usageMetadata||(o[a].usageMetadata=i.usageMetadata))}return{...e,messages:o}}function wlt(e,t){(!e.content||e.content.length===0)&&(e.content=t.content),(e.status==="pending"||e.status==="in_progress")&&(e.status=t.status),!e.rawInput&&t.rawInput&&(e.rawInput=t.rawInput),(!e.kind||e.kind==="other")&&(e.kind=t.kind),(!e.title||e.title==="")&&t.title&&(e.title=t.title),(!e.locations||e.locations.length===0)&&t.locations&&t.locations.length>0&&(e.locations=t.locations)}function blt(e,t){let n=e.toolCallResult,o=Tlt(e);if(o===qt.TODO_WRITE)return null;let r=n?.callId??e.uuid,s=Qlt(e),{kind:i,title:a,locations:l}=vlt(t,o,s??n?.args),c=klt(s??n?.args),u=Mlt(n?.resultDisplay)??Flt(e.message?.parts??[]);return{uuid:e.uuid,parentUuid:e.parentUuid,sessionId:e.sessionId,timestamp:e.timestamp,type:"tool_call",toolCall:{toolCallId:r,kind:i,title:a,status:n?.error?"failed":"completed",rawInput:c,content:u,locations:l,timestamp:Date.parse(e.timestamp)}}}function Tlt(e){if(!e.message?.parts)return"";for(let t of e.message.parts)if("functionResponse"in t&&t.functionResponse?.name)return t.functionResponse.name;return""}function Qlt(e){if(e.message?.parts){for(let t of e.message.parts)if("functionCall"in t&&t.functionCall?.args)return t.functionCall.args}}function vlt(e,t,n){let o=e.getToolRegistry?.(),r=t?o?.getTool?.(t):void 0,s=r?.displayName??t??"tool_call",i,a=Rlt(r?.kind,t);if(r&&n)try{let l=r.build(n);s=`${s}: ${l.getDescription()}`,i=l.toolLocations().map(c=>({path:c.path,line:c.line??null}))}catch{}return{kind:a,title:s,locations:i}}function Rlt(e,t){return t&&(t===qt.EXIT_PLAN_MODE||t===qt.ENTER_PLAN_MODE)?"switch_mode":t&&t===qt.TODO_WRITE?"todowrite":e&&new Set(["read","edit","delete","move","search","execute","think","fetch","other"]).has(e)?e:"other"}function Mlt(e){if(!e||typeof e!="object")return null;let t=e;return"fileName"in t&&"newContent"in t?t.truncatedForSession===!0?[{type:"content",content:{type:"text",text:HO(t)}}]:[{type:"diff",path:t.fileName,oldText:t.originalContent??"",newText:t.newContent}]:null}function klt(e){if(typeof e=="string"||typeof e=="object"&&e!==null)return e}function Flt(e){let t=[];for(let n of e){if("text"in n&&n.text){t.push({type:"content",content:{type:"text",text:n.text}});continue}if("functionResponse"in n&&n.functionResponse){let o=n.functionResponse.response,r=o?.output,s=o?.error,i=typeof r=="string"?r:typeof s=="string"?s:JSON.stringify(o);t.push({type:"content",content:{type:"text",text:i}})}}return t}p();function f9(e){let t=[],n=e.metadata;if(t.push(`# Chat Session Export
431
431
  `),t.push(`- **Session ID**: \`${tA(e.sessionId)}\``),t.push(`- **Start Time**: ${tA(e.startTime)}`),t.push(`- **Exported**: ${tA(n?.exportTime??new Date().toISOString())}`),t.push(""),n?.cwd&&t.push(`- **Working Directory**: \`${tA(n.cwd)}\``),n?.gitRepo&&t.push(`- **Git Repository**: ${tA(n.gitRepo)}`),n?.gitBranch&&t.push(`- **Git Branch**: \`${tA(n.gitBranch)}\``),t.push(""),n?.model&&t.push(`- **Model**: ${tA(n.model)}`),n?.channel&&t.push(`- **Channel**: ${tA(n.channel)}`),n?.promptCount!==void 0&&t.push(`- **Prompt Count**: ${n.promptCount}`),t.push(""),n?.totalTokens!==void 0&&t.push(`- **Total Tokens**: ${n.totalTokens}`),n?.contextWindowSize!==void 0&&t.push(`- **Context Window Size**: ${n.contextWindowSize}`),n?.contextUsagePercent!==void 0&&t.push(`- **Context Usage**: ${n.contextUsagePercent}%`),t.push(""),n?.filesWritten!==void 0&&t.push(`- **Files Written**: ${n.filesWritten}`),n?.linesAdded!==void 0&&t.push(`- **Lines Added**: ${n.linesAdded}`),n?.linesRemoved!==void 0&&t.push(`- **Lines Removed**: ${n.linesRemoved}`),n?.uniqueFiles&&n.uniqueFiles.length>0){t.push(""),t.push("<details>"),t.push(`<summary><strong>Unique Files Referenced (${n.uniqueFiles.length})</strong></summary>`),t.push("");for(let o of n.uniqueFiles)t.push(`- \`${tA(o)}\``);t.push("</details>")}t.push(`
432
432
  ---
@@ -737,7 +737,7 @@ ${me}
737
737
  `)};Ee&&z[0]?z[0].parts=[...z[0].parts||[],Se]:z=[{role:"user",parts:[Se]}],Ie=!0}Ee=!1,z=T(z),h++,e.getMaxSessionTurns()>=0&&h>e.getMaxSessionTurns()&&await vW(e);let me;le?me=r.sendMessageType??"userQuery":Ie?me="teammate":me="toolResult",Ie&&yB(i.begin("unknown"));let ue=[],fe=Date.now(),re=S.sendMessageStream(z[0]?.parts||[],x.signal,o,{type:me,modelOverride:de,...le&&r.notificationDisplayText&&{notificationDisplayText:r.notificationDisplayText},...le&&r.onNotificationAccepted&&{onNotificationAccepted:r.onNotificationAccepted}});le=!1,a.startAssistantMessage();for await(let ge of re){if(x.signal.aborted&&(a.finalizeAssistantMessage(),await v()),I(ge,fe),a.processEvent(ge),ge.type==="tool_call_request"?ue.push(ge.value):ge.type==="retry"&&(ue.length=0),ge.type==="content"&&Ne.length<Ce){let Se=Ce-Ne.length;Ne+=String(ge.value).slice(0,Se)}ge.type==="loop_detected"&&c0e(e,ge.value?.loopType)}if(a.finalizeAssistantMessage(),f+=Date.now()-fe,ue.length>0){let ge=await se(ue,Se=>{de=Se});if(Me!==void 0)return ne();z=[{role:"user",parts:ge}],Ee=!0}else{let ge=e.getTeamManager();if(ge?.hasActiveTeammates()){if(ge.allRemainingStalled()){ge.abortStalledTeammates();let nt=ge.buildTeamStatusSummary();U.push(nt);continue}for(;ge.hasActiveTeammates()&&!x.signal.aborted&&!(U.length>0);){if(ge.allRemainingStalled()){ge.abortStalledTeammates();let Bt=ge.buildTeamStatusSummary();U.push(Bt);break}await ge.waitForTeammateActivity(void 0,x.signal)==="timeout"&&Vf.warn("[runNonInteractive] waitForTeammateActivity timed out (120s); will continue waiting until stall threshold or messages arrive.")}if(U.length>0)continue}if(x.signal.aborted&&await QW(e),ge&&await ge.drainLeaderInbox(),U.length>0)continue;let Se=async()=>{if(Q.length===0)return;let nt=Q[0].sendMessageType,Bt=nt==="cron"?1:0;if(Bt===0)for(;Bt<Q.length&&Q[Bt].sendMessageType===nt;)Bt++;let Nt=Q.slice(0,Bt);if(Nt.length===0)return;let Yt={displayText:Nt.map(rn=>rn.displayText).join("; "),modelText:Nt.map(rn=>rn.modelText).join(`
738
738
 
739
739
  `),sendMessageType:nt};h++,e.getMaxSessionTurns()>=0&&h>e.getMaxSessionTurns()&&await vW(e);let Dn=[{role:"user",parts:[{text:Yt.modelText}]}],to=!0,Rn;for(yB(i.begin(yT(Yt.sendMessageType)));;){let rn=[],Gs=Date.now(),Br=S.sendMessageStream(Dn[0]?.parts||[],x.signal,o,{type:to?Yt.sendMessageType:"toolResult",modelOverride:Rn,...to&&{notificationDisplayText:Yt.displayText,onNotificationAccepted:()=>{Q.splice(0,Nt.length);for(let no of Nt)G(no,!0);return!x.signal.aborted}}});to=!1,a.startAssistantMessage();for await(let no of Br)x.signal.aborted&&(a.finalizeAssistantMessage(),Y(Q),j(),await v()),I(no,Gs),a.processEvent(no),no.type==="tool_call_request"?rn.push(no.value):no.type==="retry"&&(rn.length=0),no.type==="loop_detected"&&c0e(e,no.value?.loopType);if(a.finalizeAssistantMessage(),f+=Date.now()-Gs,rn.length>0){let no=await se(rn,Le=>{Rn=Le});if(Me!==void 0)return;Dn=[{role:"user",parts:no}]}else break}},we=null,_e=()=>{if(we)return we;let nt=(async()=>{for(;Q.length>0;){if(Me!==void 0)return;await Se()}})();we=nt;let Bt=()=>{we===nt&&(we=null)};return nt.then(Bt,Bt),nt},ye=e.isCronEnabled()?e.getCronScheduler():null;for(ye&&(await ye.enableDurable(e.getSessionId()).catch(nt=>{Vf.warn(`Durable cron init failed \u2014 persistent tasks will not fire in this run: ${nt}`)}),await new Promise((nt,Bt)=>{let Nt=()=>{ye.stop(),nt()};if(x.signal.aborted){Nt();return}x.signal.addEventListener("abort",Nt,{once:!0});let Yt=()=>{if(Me!==void 0){x.signal.removeEventListener("abort",Nt),ye.stop(),nt();return}ye.sessionSize===0&&!we&&(x.signal.removeEventListener("abort",Nt),ye.stop(),nt())},Dn=to=>{x.signal.removeEventListener("abort",Nt),ye.stop(),Bt(to)};ye.start(to=>{let Rn=to.prompt.slice(0,40);Q.push({displayText:`Cron: ${Rn}`,modelText:to.prompt,sendMessageType:"cron"}),_e().then(Yt,Dn)}),Yt()}));x.signal.aborted&&(K.abortAll(),Y(Q),j(),await v()),J=!1,await _e(),!(Me!==void 0||!K.hasUnfinalizedTasks()&&Q.length===0);)await new Promise(nt=>setTimeout(nt,100));let pe=e.getGeminiClient().consumePendingMemoryTaskPromises();pe.length>0&&await Promise.allSettled(pe),j();let Qe=br.getMetrics(),Ke=JR(Qe),ve=l==="json"?br.getMetrics():void 0;if(Me!==void 0)return ne();if(e.getJsonSchema()){let nt=Ne.trim(),Bt=nt?` Output preview (${Ne.length}${Ne.length>=Ce?"+":""} chars): ${JSON.stringify(nt)}.`:"",Nt=`Model produced plain text instead of calling the structured_output tool as required by --json-schema after ${h} turn(s).`+Bt;return a.emitResult({isError:!0,durationMs:Date.now()-y,apiDurationMs:f,numTurns:h,errorMessage:Nt,usage:Ke,stats:ve}),1}return a.emitResult({isError:!1,durationMs:Date.now()-y,apiDurationMs:f,numTurns:h,usage:Ke,stats:ve}),0}}}catch(V){try{a.finalizeAssistantMessage()}catch{}Y(Q),j();let ce=w.getExceeded(),De=ce?ce.message:V instanceof Error?V.message:String(V),be=br.getMetrics(),xe=JR(be),Ve=l==="json"?br.getMetrics():void 0,z=V instanceof Ch;if(!(l==="text"&&z))try{a.emitResult({isError:!0,durationMs:Date.now()-y,apiDurationMs:f,numTurns:h,errorMessage:De,...V instanceof HE&&{subtype:"error_max_turns"},usage:xe,stats:Ve})}catch(ee){Vf.error(`Failed to emit terminal result envelope: ${ee instanceof Error?ee.message:String(ee)}`)}if(ce&&await RW(e,ce),z||V instanceof HE)return V.exitCode;await bre(V,e)}finally{e.onTeamManagerChange(null,$),q&&(L(q),q=null),w.stop();let V=e.getBackgroundTaskRegistry();V.setNotificationCallback(void 0),V.setRegisterCallback(void 0);let ce=e.getMonitorRegistry();if(r.captureMonitorNotifications!==!1&&(O||ce.abortAll({notify:!1}),ce.setNotificationCallback(void 0)),r.captureMonitorRegistrations!==!1&&ce.setRegisterCallback(void 0),process.stdout.removeListener("error",F),process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),c)try{await c.shutdown()}catch{}f7()&&await p7()}return 1})}p();import*as BP from"node:path";var g0e=Oe("WORKTREE_STARTUP"),$9="HEAD";async function m0e(e,t){if(e===void 0)return null;let n=e.trim(),o=process.cwd(),r=new nh(o),s=await r.checkGitAvailable();if(!s.available)return{ok:!1,error:`--worktree: ${s.error??"git is not available on PATH."}`};if(/[\\/]\.matilda[\\/]worktrees[\\/]/.test(o))return{ok:!1,error:`--worktree: cannot start a new worktree from inside another worktree (cwd: ${o}). Run from the main checkout.`};let i=await r.getRepoTopLevel();if(i===null)return{ok:!1,error:`--worktree: ${o} is not a git repository. Run \`git init\` first or relaunch from inside one.`};let a=BP.resolve(i),l=a===o?r:new nh(a),c=nh.parsePRReference(n),u=c!==null,d;if(c!==null)d=`pr-${c}`;else if(n.length===0)d=nh.generateAutoSlug();else{let P=nh.validateUserWorktreeSlug(n);if(P)return{ok:!1,error:`--worktree: ${P}`};d=n}let[h,f]=await Promise.all([l.getCurrentBranch().catch(()=>{}),l.getCurrentCommitHash().catch(()=>"")]),y=h&&h!==$9?h:void 0,I=l.getUserWorktreePath(d),S=mX(d),x=null;try{x=await l.getRegisteredWorktreeBranch(I)}catch{x=null}if(x!==null){if(x.branch!==S)return{ok:!1,error:`--worktree: ${I} is already a git worktree, but its branch is ${x.branch} (expected ${S}). Refusing to re-attach. Resolve the conflict manually (e.g. \`git worktree remove ${I}\`).`};let P=BP.resolve(I);try{process.chdir(P)}catch(G){return{ok:!1,error:`--worktree: failed to chdir into ${P} (${G instanceof Error?G.message:String(G)}).`}}return g0e.debug(`setupStartupWorktree: re-attached to existing worktree at ${P} (branch=${x.branch})`),{ok:!0,context:{worktreePath:P,slug:d,branch:x.branch,repoRoot:a,originalBranch:y??$9,originalHeadCommit:x.headCommit,isPullRequest:u,wasReattached:!0}}}let w=null;if(c!==null){let P=await l.fetchPullRequestRef(c);if(!P.success)return{ok:!1,error:`--worktree: ${P.error}`};if(w=await l.resolveRef("FETCH_HEAD"),w===null)return{ok:!1,error:`--worktree: fetched PR #${c} but FETCH_HEAD did not resolve to a commit SHA. Refusing to proceed (the worktree would otherwise branch off an unknown commit).`}}let T=u?w:y,v=await l.createUserWorktree(d,T,{symlinkDirectories:t?.symlinkDirectories});if(!v.success||!v.worktree)return{ok:!1,error:`--worktree: ${v.error??"failed to create worktree."}`};let Q=BP.resolve(v.worktree.path);try{process.chdir(Q)}catch(P){return{ok:!1,error:`--worktree: created worktree at ${Q} but failed to chdir into it (${P instanceof Error?P.message:String(P)}). Run \`cd ${Q}\` manually.`}}return{ok:!0,context:{worktreePath:Q,slug:d,branch:v.worktree.branch,repoRoot:a,originalBranch:y??$9,originalHeadCommit:u?w:f,isPullRequest:u,wasReattached:!1}}}async function f0e(e,t){let n=e.getSessionId(),o=e.getSessionService().getWorktreeSessionPath(n),r=!1,s,i=null;try{i=await zF(o)}catch(a){g0e.warn(`persistStartupWorktreeSidecar: failed to read existing sidecar at ${o} \u2014 treating as "no previous worktree" and proceeding: ${a}`),i=null}return i&&i.slug!==t.slug&&(r=!0,s=i.slug),t.wasReattached||await fX(t.worktreePath,n).catch(()=>{}),await UX(o,{slug:t.slug,worktreePath:t.worktreePath,worktreeBranch:t.branch,originalCwd:t.repoRoot,originalBranch:t.originalBranch,originalHeadCommit:t.originalHeadCommit}),{overrodeResumedWorktree:r,overriddenSlug:s,sidecarPath:o}}function V9(e,t){let o=`[Startup] ${e.wasReattached?"Re-attached to worktree":"Active worktree"}: "${e.slug}" at ${e.worktreePath} (branch: ${e.branch}). Continue using this path for all file operations.`;return t?.overrodeResumedWorktree&&t.overriddenSlug?`${o}
740
- Note: --worktree overrode the resumed session's previous worktree "${t.overriddenSlug}". That worktree directory was left intact; re-attach with \`matilda --worktree ${t.overriddenSlug}\` if needed.`:o}p();p();import{createInterface as Put}from"node:readline/promises";import Uut from"node:process";var B0=class extends Error{},SP=class{input;constructor(t=Uut.stdin){this.input=t}async*read(){let t=Put({input:this.input,crlfDelay:Number.POSITIVE_INFINITY,terminal:!1});try{for await(let n of t){let o=n.trim();o&&(yield this.parse(o))}}finally{t.close()}}parse(t){try{let n=JSON.parse(t);if(!n||typeof n!="object")throw new B0("Parsed value is not an object");if(!("type"in n)||typeof n.type!="string")throw new B0('Missing required "type" field');return n}catch(n){if(n instanceof B0)throw n;let o=n instanceof Error?n.message:String(n);throw new B0(`Failed to parse stream-json line: ${o}`)}}};p();var xP=class{config;streamJson;sessionId;abortSignal;debugMode;settings;permissionMode;sdkCanUseToolTimeoutMs;sdkMcpServers;mcpClients;inputClosed;onInterrupt;constructor(t){this.config=t.config,this.streamJson=t.streamJson,this.sessionId=t.sessionId,this.abortSignal=t.abortSignal,this.debugMode=t.config.getDebugMode(),this.settings=t.settings,this.permissionMode=t.permissionMode||"default",this.sdkMcpServers=new Set,this.mcpClients=new Map,this.inputClosed=!1,this.onInterrupt=t.onInterrupt}};p();p();p();import{randomUUID as Hut}from"node:crypto";var p0e=3e4,fC=class{context;registry;controllerName;debugLogger;constructor(t,n,o){this.context=t,this.registry=n,this.controllerName=o,this.debugLogger=Oe()}async handleRequest(t,n){let o=new AbortController,r=setTimeout(()=>{o.abort(),this.registry.deregisterIncomingRequest(n),this.debugLogger.warn(`[${this.controllerName}] Request timeout: ${n}`)},p0e);this.registry.registerIncomingRequest(n,this.controllerName,o,r);try{let s=await this.handleRequestPayload(t,o.signal);return this.registry.deregisterIncomingRequest(n),s}catch(s){throw this.registry.deregisterIncomingRequest(n),s}}async sendControlRequest(t,n=p0e,o){if(this.context.inputClosed)throw new Error("Input closed");if(o?.aborted)throw new Error("Request aborted");let r=Hut();return new Promise((s,i)=>{let a=()=>{this.registry.deregisterOutgoingRequest(r),i(new Error("Request aborted")),this.debugLogger.warn(`[${this.controllerName}] Outgoing request aborted: ${r}`)};o&&o.addEventListener("abort",a,{once:!0});let l=setTimeout(()=>{o&&o.removeEventListener("abort",a),this.registry.deregisterOutgoingRequest(r),i(new Error("Control request timeout")),this.debugLogger.warn(`[${this.controllerName}] Outgoing request timeout: ${r}`)},n),c=h=>{o&&o.removeEventListener("abort",a),s(h)},u=h=>{o&&o.removeEventListener("abort",a),i(h)};this.registry.registerOutgoingRequest(r,this.controllerName,c,u,l);let d={type:"control_request",request_id:r,request:t};try{this.context.streamJson.send(d)}catch(h){o&&o.removeEventListener("abort",a),this.registry.deregisterOutgoingRequest(r),i(h)}})}cleanup(){}};var kc=Oe("SYSTEM_CONTROLLER"),Gut=6e5,wP=class extends fC{async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"initialize":return this.handleInitialize(t,n);case"interrupt":return this.handleInterrupt();case"set_model":return this.handleSetModel(t,n);case"supported_commands":return this.handleSupportedCommands(n);case"get_context_usage":return this.handleGetContextUsage(t,n);default:throw new Error("Unsupported request subtype in SystemController")}}async handleGetContextUsage(t,n){if(n.aborted)throw new Error("Request aborted");try{let o=await import("./chunks/contextCommand-5AG6B7OB.js");if(n.aborted)throw new Error("Request aborted");if(typeof o.collectContextData!="function")throw new Error("collectContextData is not available");let r=t.show_details??!1,s=await o.collectContextData(this.context.config,r);if(n.aborted)throw new Error("Request aborted");let{type:i,...a}=s;return{subtype:"get_context_usage",...a}}catch(o){let r=o instanceof Error?o.message:"Failed to get context usage";throw kc.error("[SystemController] Failed to get context usage:",o),new Error(r)}}async handleInitialize(t,n){if(n.aborted)throw new Error("Request aborted");this.context.config.setSdkMode(!0);let o=t.timeout?.canUseTool;if(typeof o=="number"&&Number.isFinite(o)&&o>0&&o<=Gut&&(this.context.sdkCanUseToolTimeoutMs=o),t.sdkMcpServers&&typeof t.sdkMcpServers=="object"&&t.sdkMcpServers!==null){let s={};for(let[a,l]of Object.entries(t.sdkMcpServers)){let c=typeof l?.name=="string"&&l.name.trim().length?l.name:a;this.context.sdkMcpServers.add(c),s[c]=new $E(void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,!0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,"sdk")}let i=Object.keys(s).length;if(i>0)try{this.context.config.addMcpServers(s),kc.debug(`[SystemController] Added ${i} SDK MCP servers to config`)}catch(a){kc.error("[SystemController] Failed to add SDK MCP servers:",a)}}if(t.mcpServers&&typeof t.mcpServers=="object"&&t.mcpServers!==null){let s={};for(let[a,l]of Object.entries(t.mcpServers)){let c=this.normalizeMcpServerConfig(a,l);c&&(s[a]=c)}let i=Object.keys(s).length;if(i>0)try{this.context.config.addMcpServers(s),kc.debug(`[SystemController] Added ${i} external MCP servers to config`)}catch(a){kc.error("[SystemController] Failed to add external MCP servers:",a)}}if(t.agents&&Array.isArray(t.agents))try{this.context.config.setSessionSubagents(t.agents),kc.debug(`[SystemController] Added ${t.agents.length} session subagents to config`)}catch(s){kc.error("[SystemController] Failed to add session subagents:",s)}let r=this.buildControlCapabilities();return kc.debug(`[SystemController] Initialized with ${this.context.sdkMcpServers.size} SDK MCP servers`),{subtype:"initialize",session_id:this.context.config.getSessionId(),capabilities:r}}buildControlCapabilities(){return{can_handle_can_use_tool:!0,can_handle_hook_callback:!1,can_set_permission_mode:typeof this.context.config.setApprovalMode=="function",can_set_model:typeof this.context.config.setModel=="function",can_get_context_usage:!0,can_handle_mcp_message:!0}}normalizeMcpServerConfig(t,n){if(!n||typeof n!="object")return kc.warn(`[SystemController] Ignoring invalid MCP server config for '${t}'`),null;let o=this.normalizeAuthProviderType(n.authProviderType),r=this.normalizeOAuthConfig(n.oauth);return new $E(n.command,n.args,n.env,n.cwd,n.url,n.httpUrl,n.headers,n.tcp,n.timeout,n.trust,n.description,n.includeTools,n.excludeTools,n.extensionName,r,o,n.targetAudience,n.targetServiceAccount)}normalizeAuthProviderType(t){if(t)switch(t){case"dynamic_discovery":case"google_credentials":case"service_account_impersonation":return t;default:kc.warn(`[SystemController] Unsupported authProviderType '${t}', skipping`);return}}normalizeOAuthConfig(t){if(t)return{enabled:t.enabled,clientId:t.clientId,clientSecret:t.clientSecret,authorizationUrl:t.authorizationUrl,tokenUrl:t.tokenUrl,scopes:t.scopes,audiences:t.audiences,redirectUri:t.redirectUri,tokenParamName:t.tokenParamName,registrationUrl:t.registrationUrl}}async handleInterrupt(){return this.context.onInterrupt&&this.context.onInterrupt(),this.context.abortSignal&&!this.context.abortSignal.aborted&&kc.debug("[SystemController] Interrupt signal triggered"),kc.debug("[SystemController] Interrupt handled"),{subtype:"interrupt"}}async handleSetModel(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.model;if(typeof o!="string"||o.trim()==="")throw new Error("Invalid model specified for set_model request");try{return await this.context.config.setModel(o),kc.info(`[SystemController] Model switched to: ${o}`),{subtype:"set_model",model:o}}catch(r){let s=r instanceof Error?r.message:"Failed to set model";throw kc.error(`[SystemController] Failed to set model ${o}:`,r),new Error(s)}}async handleSupportedCommands(t){if(t.aborted)throw new Error("Request aborted");return{subtype:"supported_commands",commands:await this.loadSlashCommandNames(t)}}async loadSlashCommandNames(t){if(t.aborted)return[];try{let n=await C0(this.context.config,t,"non_interactive");return t.aborted?[]:n.map(o=>o.name).sort()}catch(n){return t.aborted?[]:(kc.error("[SystemController] Failed to load slash commands:",n),[])}}};p();var Wut=6e4,bP=class extends fC{pendingOutgoingRequests=new Set;async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"can_use_tool":return this.handleCanUseTool(t,n);case"set_permission_mode":return this.handleSetPermissionMode(t,n);default:throw new Error("Unsupported request subtype in PermissionController")}}async handleCanUseTool(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.tool_name;if(!o||typeof o!="string"||o.trim().length===0)return{subtype:"can_use_tool",behavior:"deny",message:"Missing or invalid tool_name in can_use_tool request"};let r="allow",s;try{let a=this.checkPermissionMode();if(a.allowed||(r="deny",s=a.message),r==="allow"){let l=this.checkToolRegistry(o);l.allowed||(r="deny",s=l.message)}}catch(a){r="deny",s=a instanceof Error?`Failed to evaluate tool permission: ${a.message}`:"Failed to evaluate tool permission"}let i={subtype:"can_use_tool",behavior:r};return s&&(i.message=s),i}checkPermissionMode(){switch(this.context.permissionMode){case"bogan":case"auto-edit":case"auto":case"plan":return{allowed:!0};case"default":default:return{allowed:!1,message:"Tool execution requires manual approval. Update permission mode or approve via host."}}}checkToolRegistry(t){try{let o=this.context.config;if(typeof o.getToolRegistry=="function"){let r=o.getToolRegistry();if(r&&typeof r.getTool=="function"&&!r.getTool(t))return{allowed:!1,message:`Tool "${t}" is not registered.`}}return{allowed:!0}}catch(n){return{allowed:!1,message:`Failed to check tool registry: ${n instanceof Error?n.message:"Unknown error"}`}}}async handleSetPermissionMode(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.mode,r=["default","plan","auto-edit","auto","bogan"];if(!r.includes(o))throw new Error(`Invalid permission mode: ${o}. Valid values are: ${r.join(", ")}`);return this.context.permissionMode=o,this.context.config.setApprovalMode(o),this.debugLogger.info(`[PermissionController] Permission mode updated to: ${o}`),{status:"updated",mode:o}}buildPermissionSuggestions(t){if(!t||typeof t!="object"||!("type"in t))return null;let n=t,o=String(n.type??""),r=typeof n.title=="string"?n.title:void 0;switch(o){case"exec":return[{type:"allow",label:"Allow Command",description:`Execute: ${n.command}`},{type:"deny",label:"Deny",description:"Block this command execution"}];case"edit":return[{type:"allow",label:"Allow Edit",description:`Edit file: ${n.fileName}`},{type:"deny",label:"Deny",description:"Block this file edit"},...n.hideModify===!0?[]:[{type:"modify",label:"Review Changes",description:"Review the proposed changes before applying"}]];case"plan":return[{type:"allow",label:"Approve Plan",description:r||"Execute the proposed plan"},{type:"deny",label:"Reject Plan",description:"Do not execute this plan"}];case"mcp":return[{type:"allow",label:"Allow MCP Call",description:`${n.serverName}: ${n.toolName}`},{type:"deny",label:"Deny",description:"Block this MCP server call"}];case"info":return[{type:"allow",label:"Allow Info Request",description:r||"Allow information request"},{type:"deny",label:"Deny",description:"Block this information request"}];default:return[{type:"allow",label:"Allow",description:r||`Allow ${o} operation`},{type:"deny",label:"Deny",description:`Block ${o} operation`}]}}getToolCallUpdateCallback(){return t=>{for(let n of t)if(n&&typeof n=="object"&&n.status==="awaiting_approval"){let o=n;typeof o.confirmationDetails?.onConfirm=="function"&&!this.pendingOutgoingRequests.has(o.request.callId)&&(this.pendingOutgoingRequests.add(o.request.callId),this.handleOutgoingPermissionRequest(o))}}}async handleTeammateApproval(t){try{if(this.context.abortSignal?.aborted){await t.respond("cancel");return}if(this.context.config.getInputFormat?.()!=="stream-json"){await t.respond("cancel");return}let o=`teammate-${t.teammateName}-${t.timestamp}`,r=await this.sendControlRequest({subtype:"can_use_tool",tool_name:t.toolName,tool_use_id:o,input:t.toolInput,permission_suggestions:[],blocked_path:null},void 0,this.context.abortSignal);if(r.subtype!=="success"){await t.respond("cancel");return}let s=r.response||{};if(String(s.behavior||"").toLowerCase()==="allow"){let a=s.updatedInput,l=a&&typeof a=="object"&&!Array.isArray(a)?{updatedInput:a}:void 0;await t.respond("proceed_once",l)}else{let a=typeof s.message=="string"?s.message:void 0;await t.respond("cancel",a?{cancelMessage:a}:void 0)}}catch(n){this.debugLogger.error("[PermissionController] Teammate approval failed:",n);try{await t.respond("cancel")}catch(o){this.debugLogger.error("[PermissionController] Teammate approval cancel failed:",o)}}}async handleOutgoingPermissionRequest(t){try{if(this.context.abortSignal?.aborted){await t.confirmationDetails.onConfirm("cancel");return}if(!(this.context.config.getInputFormat?.()==="stream-json")){let c=this.checkPermissionMode().allowed?"proceed_once":"cancel";await t.confirmationDetails.onConfirm(c);return}let r=this.buildPermissionSuggestions(t.confirmationDetails),s=await this.sendControlRequest({subtype:"can_use_tool",tool_name:t.request.name,tool_use_id:t.request.callId,input:t.request.args,permission_suggestions:r,blocked_path:null},this.context.sdkCanUseToolTimeoutMs??Wut,this.context.abortSignal);if(s.subtype!=="success"){await t.confirmationDetails.onConfirm("cancel");return}let i=s.response||{};if(String(i.behavior||"").toLowerCase()==="allow"){let l=i.updatedInput;l&&typeof l=="object"&&(t.request.args=l),await t.confirmationDetails.onConfirm("proceed_once")}else{let l=typeof i.message=="string"?i.message:void 0;await t.confirmationDetails.onConfirm("cancel",l?{cancelMessage:l}:void 0)}}catch(n){this.debugLogger.error("[PermissionController] Outgoing permission failed:",n);let o=n instanceof Error?n.message:String(n),r=t.confirmationDetails.type;["edit","exec","mcp"].includes(r)?await t.confirmationDetails.onConfirm("cancel",{cancelMessage:`Error: ${o}`}):await t.confirmationDetails.onConfirm("cancel",{cancelMessage:`Error: ${o}`})}finally{this.pendingOutgoingRequests.delete(t.request.callId)}}};p();var jut=3e4,TP=class extends fC{async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"mcp_server_status":return this.handleMcpStatus();default:throw new Error("Unsupported request subtype in SdkMcpController")}}async handleMcpStatus(){let t={};for(let n of this.context.sdkMcpServers)t[n]="connected";return{subtype:"mcp_server_status",status:t}}async sendMcpMessageToSdk(t,n){this.debugLogger.debug(`[SdkMcpController] Sending MCP message to SDK server '${t}':`,JSON.stringify(n));let s=(await this.sendControlRequest({subtype:"mcp_message",server_name:t,message:n},jut,this.context.abortSignal)).response?.mcp_response;if(!s)throw new Error(`Invalid MCP response from SDK for server '${t}'`);return this.debugLogger.debug(`[SdkMcpController] Received MCP response from SDK server '${t}':`,JSON.stringify(s)),s}createSendSdkMcpMessage(){return(t,n)=>this.sendMcpMessageToSdk(t,n)}};var Qy=Oe("CONTROL_DISPATCHER"),QP=class{context;systemController;permissionController;sdkMcpController;pendingIncomingRequests=new Map;pendingOutgoingRequests=new Map;abortHandler=null;constructor(t){this.context=t,this.systemController=new wP(t,this,"SystemController"),this.permissionController=new bP(t,this,"PermissionController"),this.sdkMcpController=new TP(t,this,"SdkMcpController"),this.abortHandler=()=>{this.shutdown()},this.context.abortSignal.addEventListener("abort",this.abortHandler)}async dispatch(t){let{request_id:n,request:o}=t;try{let s=await this.getControllerForRequest(o.subtype).handleRequest(o,n);this.sendSuccessResponse(n,s)}catch(r){let s=r instanceof Error?r.message:String(r);this.sendErrorResponse(n,s)}}handleControlResponse(t){let n=t.response,o=n.request_id,r=this.pendingOutgoingRequests.get(o);if(!r){Qy.debug(`[ControlDispatcher] No pending outgoing request for: ${o}`);return}if(this.deregisterOutgoingRequest(o),n.subtype==="success")r.resolve(n);else{let s=typeof n.error=="string"?n.error:n.error?.message??"Unknown error";r.reject(new Error(s))}}async sendControlRequest(t,n){return this.systemController.sendControlRequest(t,n)}handleCancel(t){if(t){let n=this.pendingIncomingRequests.get(t);n&&(n.abortController.abort(),this.deregisterIncomingRequest(t),this.sendErrorResponse(t,"Request cancelled"),Qy.debug(`[ControlDispatcher] Cancelled incoming request: ${t}`))}else{let n=Array.from(this.pendingIncomingRequests.keys());for(let o of n){let r=this.pendingIncomingRequests.get(o);r&&(r.abortController.abort(),this.deregisterIncomingRequest(o),this.sendErrorResponse(o,"All requests cancelled"))}Qy.debug(`[ControlDispatcher] Cancelled all ${n.length} pending incoming requests`)}}markInputClosed(){if(this.context.inputClosed)return;this.context.inputClosed=!0;let t=Array.from(this.pendingOutgoingRequests.keys());this.context.debugMode&&Qy.debug(`[ControlDispatcher] Input closed, rejecting ${t.length} pending outgoing requests`);for(let n of t){let o=this.pendingOutgoingRequests.get(n);o&&(this.deregisterOutgoingRequest(n),o.reject(new Error("Input closed")))}}shutdown(){Qy.debug("[ControlDispatcher] Shutting down"),this.abortHandler&&(this.context.abortSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null);for(let[t,n]of this.pendingIncomingRequests.entries())n.abortController.abort(),clearTimeout(n.timeoutId);this.pendingIncomingRequests.clear();for(let[t,n]of this.pendingOutgoingRequests.entries())clearTimeout(n.timeoutId),n.reject(new Error("Dispatcher shutdown"));this.pendingOutgoingRequests.clear(),this.systemController.cleanup(),this.permissionController.cleanup(),this.sdkMcpController.cleanup()}registerIncomingRequest(t,n,o,r){this.pendingIncomingRequests.set(t,{controller:n,abortController:o,timeoutId:r})}deregisterIncomingRequest(t){let n=this.pendingIncomingRequests.get(t);n&&(clearTimeout(n.timeoutId),this.pendingIncomingRequests.delete(t))}registerOutgoingRequest(t,n,o,r,s){this.pendingOutgoingRequests.set(t,{controller:n,resolve:o,reject:r,timeoutId:s})}deregisterOutgoingRequest(t){let n=this.pendingOutgoingRequests.get(t);n&&(clearTimeout(n.timeoutId),this.pendingOutgoingRequests.delete(t))}getPendingIncomingRequestCount(){return this.pendingIncomingRequests.size}async waitForPendingIncomingRequests(t=50,n=3e4){let o=Date.now();for(;this.pendingIncomingRequests.size>0;){if(Date.now()-o>n){Qy.warn(`[ControlDispatcher] Timeout waiting for ${this.pendingIncomingRequests.size} pending incoming requests`);break}await new Promise(r=>setTimeout(r,t))}this.pendingIncomingRequests.size===0&&Qy.debug("[ControlDispatcher] All incoming requests completed")}getControllerForRequest(t){switch(t){case"initialize":case"interrupt":case"set_model":case"supported_commands":case"get_context_usage":return this.systemController;case"can_use_tool":case"set_permission_mode":return this.permissionController;case"mcp_server_status":return this.sdkMcpController;default:throw new Error(`Unknown control request subtype: ${t}`)}}sendSuccessResponse(t,n){let o={type:"control_response",response:{subtype:"success",request_id:t,response:n}};this.context.streamJson.send(o)}sendErrorResponse(t,n){let o={type:"control_response",response:{subtype:"error",request_id:t,error:n}};this.context.streamJson.send(o)}};p();var vP=class{dispatcher;constructor(t,n){this.dispatcher=n}get permission(){let t=this.dispatcher.permissionController;return{buildPermissionSuggestions:t.buildPermissionSuggestions.bind(t),getToolCallUpdateCallback:t.getToolCallUpdateCallback.bind(t),handleTeammateApproval:t.handleTeammateApproval.bind(t)}}get system(){let t=this.dispatcher.systemController;return{getControlCapabilities:()=>t.buildControlCapabilities()}}cleanup(){this.dispatcher.shutdown()}};p();function K9(e){return e&&typeof e=="object"&&e.type==="user"&&"message"in e}function h0e(e){return e&&typeof e=="object"&&e.type==="assistant"&&"uuid"in e&&"message"in e&&"session_id"in e&&"parent_tool_use_id"in e}function C0e(e){return e&&typeof e=="object"&&e.type==="system"&&"subtype"in e&&"uuid"in e&&"session_id"in e}function E0e(e){return e&&typeof e=="object"&&e.type==="result"&&"subtype"in e&&"duration_ms"in e&&"is_error"in e&&"uuid"in e&&"session_id"in e}function I0e(e){return e&&typeof e=="object"&&e.type==="stream_event"&&"uuid"in e&&"session_id"in e&&"event"in e&&"parent_tool_use_id"in e}function z9(e){return e&&typeof e=="object"&&e.type==="control_request"&&"request_id"in e&&"request"in e}function y0e(e){return e&&typeof e=="object"&&e.type==="control_response"&&"response"in e}function D0e(e){return e&&typeof e=="object"&&e.type==="control_cancel_request"&&"request_id"in e}p();import*as X9 from"node:path";function XR(e){if(!e)return"";let t=[];for(let n of e)"text"in n&&n.text&&("thought"in n&&n.thought||t.push(n.text));return t.join(`
740
+ Note: --worktree overrode the resumed session's previous worktree "${t.overriddenSlug}". That worktree directory was left intact; re-attach with \`matilda --worktree ${t.overriddenSlug}\` if needed.`:o}p();p();import{createInterface as Put}from"node:readline/promises";import Uut from"node:process";var B0=class extends Error{},SP=class{input;constructor(t=Uut.stdin){this.input=t}async*read(){let t=Put({input:this.input,crlfDelay:Number.POSITIVE_INFINITY,terminal:!1});try{for await(let n of t){let o=n.trim();o&&(yield this.parse(o))}}finally{t.close()}}parse(t){try{let n=JSON.parse(t);if(!n||typeof n!="object")throw new B0("Parsed value is not an object");if(!("type"in n)||typeof n.type!="string")throw new B0('Missing required "type" field');return n}catch(n){if(n instanceof B0)throw n;let o=n instanceof Error?n.message:String(n);throw new B0(`Failed to parse stream-json line: ${o}`)}}};p();var xP=class{config;streamJson;sessionId;abortSignal;debugMode;settings;permissionMode;sdkCanUseToolTimeoutMs;sdkMcpServers;mcpClients;inputClosed;onInterrupt;constructor(t){this.config=t.config,this.streamJson=t.streamJson,this.sessionId=t.sessionId,this.abortSignal=t.abortSignal,this.debugMode=t.config.getDebugMode(),this.settings=t.settings,this.permissionMode=t.permissionMode||"default",this.sdkMcpServers=new Set,this.mcpClients=new Map,this.inputClosed=!1,this.onInterrupt=t.onInterrupt}};p();p();p();import{randomUUID as Hut}from"node:crypto";var p0e=3e4,fC=class{context;registry;controllerName;debugLogger;constructor(t,n,o){this.context=t,this.registry=n,this.controllerName=o,this.debugLogger=Oe()}async handleRequest(t,n){let o=new AbortController,r=setTimeout(()=>{o.abort(),this.registry.deregisterIncomingRequest(n),this.debugLogger.warn(`[${this.controllerName}] Request timeout: ${n}`)},p0e);this.registry.registerIncomingRequest(n,this.controllerName,o,r);try{let s=await this.handleRequestPayload(t,o.signal);return this.registry.deregisterIncomingRequest(n),s}catch(s){throw this.registry.deregisterIncomingRequest(n),s}}async sendControlRequest(t,n=p0e,o){if(this.context.inputClosed)throw new Error("Input closed");if(o?.aborted)throw new Error("Request aborted");let r=Hut();return new Promise((s,i)=>{let a=()=>{this.registry.deregisterOutgoingRequest(r),i(new Error("Request aborted")),this.debugLogger.warn(`[${this.controllerName}] Outgoing request aborted: ${r}`)};o&&o.addEventListener("abort",a,{once:!0});let l=setTimeout(()=>{o&&o.removeEventListener("abort",a),this.registry.deregisterOutgoingRequest(r),i(new Error("Control request timeout")),this.debugLogger.warn(`[${this.controllerName}] Outgoing request timeout: ${r}`)},n),c=h=>{o&&o.removeEventListener("abort",a),s(h)},u=h=>{o&&o.removeEventListener("abort",a),i(h)};this.registry.registerOutgoingRequest(r,this.controllerName,c,u,l);let d={type:"control_request",request_id:r,request:t};try{this.context.streamJson.send(d)}catch(h){o&&o.removeEventListener("abort",a),this.registry.deregisterOutgoingRequest(r),i(h)}})}cleanup(){}};var kc=Oe("SYSTEM_CONTROLLER"),Gut=6e5,wP=class extends fC{async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"initialize":return this.handleInitialize(t,n);case"interrupt":return this.handleInterrupt();case"set_model":return this.handleSetModel(t,n);case"supported_commands":return this.handleSupportedCommands(n);case"get_context_usage":return this.handleGetContextUsage(t,n);default:throw new Error("Unsupported request subtype in SystemController")}}async handleGetContextUsage(t,n){if(n.aborted)throw new Error("Request aborted");try{let o=await import("./chunks/contextCommand-34YLPE2P.js");if(n.aborted)throw new Error("Request aborted");if(typeof o.collectContextData!="function")throw new Error("collectContextData is not available");let r=t.show_details??!1,s=await o.collectContextData(this.context.config,r);if(n.aborted)throw new Error("Request aborted");let{type:i,...a}=s;return{subtype:"get_context_usage",...a}}catch(o){let r=o instanceof Error?o.message:"Failed to get context usage";throw kc.error("[SystemController] Failed to get context usage:",o),new Error(r)}}async handleInitialize(t,n){if(n.aborted)throw new Error("Request aborted");this.context.config.setSdkMode(!0);let o=t.timeout?.canUseTool;if(typeof o=="number"&&Number.isFinite(o)&&o>0&&o<=Gut&&(this.context.sdkCanUseToolTimeoutMs=o),t.sdkMcpServers&&typeof t.sdkMcpServers=="object"&&t.sdkMcpServers!==null){let s={};for(let[a,l]of Object.entries(t.sdkMcpServers)){let c=typeof l?.name=="string"&&l.name.trim().length?l.name:a;this.context.sdkMcpServers.add(c),s[c]=new $E(void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,!0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,"sdk")}let i=Object.keys(s).length;if(i>0)try{this.context.config.addMcpServers(s),kc.debug(`[SystemController] Added ${i} SDK MCP servers to config`)}catch(a){kc.error("[SystemController] Failed to add SDK MCP servers:",a)}}if(t.mcpServers&&typeof t.mcpServers=="object"&&t.mcpServers!==null){let s={};for(let[a,l]of Object.entries(t.mcpServers)){let c=this.normalizeMcpServerConfig(a,l);c&&(s[a]=c)}let i=Object.keys(s).length;if(i>0)try{this.context.config.addMcpServers(s),kc.debug(`[SystemController] Added ${i} external MCP servers to config`)}catch(a){kc.error("[SystemController] Failed to add external MCP servers:",a)}}if(t.agents&&Array.isArray(t.agents))try{this.context.config.setSessionSubagents(t.agents),kc.debug(`[SystemController] Added ${t.agents.length} session subagents to config`)}catch(s){kc.error("[SystemController] Failed to add session subagents:",s)}let r=this.buildControlCapabilities();return kc.debug(`[SystemController] Initialized with ${this.context.sdkMcpServers.size} SDK MCP servers`),{subtype:"initialize",session_id:this.context.config.getSessionId(),capabilities:r}}buildControlCapabilities(){return{can_handle_can_use_tool:!0,can_handle_hook_callback:!1,can_set_permission_mode:typeof this.context.config.setApprovalMode=="function",can_set_model:typeof this.context.config.setModel=="function",can_get_context_usage:!0,can_handle_mcp_message:!0}}normalizeMcpServerConfig(t,n){if(!n||typeof n!="object")return kc.warn(`[SystemController] Ignoring invalid MCP server config for '${t}'`),null;let o=this.normalizeAuthProviderType(n.authProviderType),r=this.normalizeOAuthConfig(n.oauth);return new $E(n.command,n.args,n.env,n.cwd,n.url,n.httpUrl,n.headers,n.tcp,n.timeout,n.trust,n.description,n.includeTools,n.excludeTools,n.extensionName,r,o,n.targetAudience,n.targetServiceAccount)}normalizeAuthProviderType(t){if(t)switch(t){case"dynamic_discovery":case"google_credentials":case"service_account_impersonation":return t;default:kc.warn(`[SystemController] Unsupported authProviderType '${t}', skipping`);return}}normalizeOAuthConfig(t){if(t)return{enabled:t.enabled,clientId:t.clientId,clientSecret:t.clientSecret,authorizationUrl:t.authorizationUrl,tokenUrl:t.tokenUrl,scopes:t.scopes,audiences:t.audiences,redirectUri:t.redirectUri,tokenParamName:t.tokenParamName,registrationUrl:t.registrationUrl}}async handleInterrupt(){return this.context.onInterrupt&&this.context.onInterrupt(),this.context.abortSignal&&!this.context.abortSignal.aborted&&kc.debug("[SystemController] Interrupt signal triggered"),kc.debug("[SystemController] Interrupt handled"),{subtype:"interrupt"}}async handleSetModel(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.model;if(typeof o!="string"||o.trim()==="")throw new Error("Invalid model specified for set_model request");try{return await this.context.config.setModel(o),kc.info(`[SystemController] Model switched to: ${o}`),{subtype:"set_model",model:o}}catch(r){let s=r instanceof Error?r.message:"Failed to set model";throw kc.error(`[SystemController] Failed to set model ${o}:`,r),new Error(s)}}async handleSupportedCommands(t){if(t.aborted)throw new Error("Request aborted");return{subtype:"supported_commands",commands:await this.loadSlashCommandNames(t)}}async loadSlashCommandNames(t){if(t.aborted)return[];try{let n=await C0(this.context.config,t,"non_interactive");return t.aborted?[]:n.map(o=>o.name).sort()}catch(n){return t.aborted?[]:(kc.error("[SystemController] Failed to load slash commands:",n),[])}}};p();var Wut=6e4,bP=class extends fC{pendingOutgoingRequests=new Set;async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"can_use_tool":return this.handleCanUseTool(t,n);case"set_permission_mode":return this.handleSetPermissionMode(t,n);default:throw new Error("Unsupported request subtype in PermissionController")}}async handleCanUseTool(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.tool_name;if(!o||typeof o!="string"||o.trim().length===0)return{subtype:"can_use_tool",behavior:"deny",message:"Missing or invalid tool_name in can_use_tool request"};let r="allow",s;try{let a=this.checkPermissionMode();if(a.allowed||(r="deny",s=a.message),r==="allow"){let l=this.checkToolRegistry(o);l.allowed||(r="deny",s=l.message)}}catch(a){r="deny",s=a instanceof Error?`Failed to evaluate tool permission: ${a.message}`:"Failed to evaluate tool permission"}let i={subtype:"can_use_tool",behavior:r};return s&&(i.message=s),i}checkPermissionMode(){switch(this.context.permissionMode){case"bogan":case"auto-edit":case"auto":case"plan":return{allowed:!0};case"default":default:return{allowed:!1,message:"Tool execution requires manual approval. Update permission mode or approve via host."}}}checkToolRegistry(t){try{let o=this.context.config;if(typeof o.getToolRegistry=="function"){let r=o.getToolRegistry();if(r&&typeof r.getTool=="function"&&!r.getTool(t))return{allowed:!1,message:`Tool "${t}" is not registered.`}}return{allowed:!0}}catch(n){return{allowed:!1,message:`Failed to check tool registry: ${n instanceof Error?n.message:"Unknown error"}`}}}async handleSetPermissionMode(t,n){if(n.aborted)throw new Error("Request aborted");let o=t.mode,r=["default","plan","auto-edit","auto","bogan"];if(!r.includes(o))throw new Error(`Invalid permission mode: ${o}. Valid values are: ${r.join(", ")}`);return this.context.permissionMode=o,this.context.config.setApprovalMode(o),this.debugLogger.info(`[PermissionController] Permission mode updated to: ${o}`),{status:"updated",mode:o}}buildPermissionSuggestions(t){if(!t||typeof t!="object"||!("type"in t))return null;let n=t,o=String(n.type??""),r=typeof n.title=="string"?n.title:void 0;switch(o){case"exec":return[{type:"allow",label:"Allow Command",description:`Execute: ${n.command}`},{type:"deny",label:"Deny",description:"Block this command execution"}];case"edit":return[{type:"allow",label:"Allow Edit",description:`Edit file: ${n.fileName}`},{type:"deny",label:"Deny",description:"Block this file edit"},...n.hideModify===!0?[]:[{type:"modify",label:"Review Changes",description:"Review the proposed changes before applying"}]];case"plan":return[{type:"allow",label:"Approve Plan",description:r||"Execute the proposed plan"},{type:"deny",label:"Reject Plan",description:"Do not execute this plan"}];case"mcp":return[{type:"allow",label:"Allow MCP Call",description:`${n.serverName}: ${n.toolName}`},{type:"deny",label:"Deny",description:"Block this MCP server call"}];case"info":return[{type:"allow",label:"Allow Info Request",description:r||"Allow information request"},{type:"deny",label:"Deny",description:"Block this information request"}];default:return[{type:"allow",label:"Allow",description:r||`Allow ${o} operation`},{type:"deny",label:"Deny",description:`Block ${o} operation`}]}}getToolCallUpdateCallback(){return t=>{for(let n of t)if(n&&typeof n=="object"&&n.status==="awaiting_approval"){let o=n;typeof o.confirmationDetails?.onConfirm=="function"&&!this.pendingOutgoingRequests.has(o.request.callId)&&(this.pendingOutgoingRequests.add(o.request.callId),this.handleOutgoingPermissionRequest(o))}}}async handleTeammateApproval(t){try{if(this.context.abortSignal?.aborted){await t.respond("cancel");return}if(this.context.config.getInputFormat?.()!=="stream-json"){await t.respond("cancel");return}let o=`teammate-${t.teammateName}-${t.timestamp}`,r=await this.sendControlRequest({subtype:"can_use_tool",tool_name:t.toolName,tool_use_id:o,input:t.toolInput,permission_suggestions:[],blocked_path:null},void 0,this.context.abortSignal);if(r.subtype!=="success"){await t.respond("cancel");return}let s=r.response||{};if(String(s.behavior||"").toLowerCase()==="allow"){let a=s.updatedInput,l=a&&typeof a=="object"&&!Array.isArray(a)?{updatedInput:a}:void 0;await t.respond("proceed_once",l)}else{let a=typeof s.message=="string"?s.message:void 0;await t.respond("cancel",a?{cancelMessage:a}:void 0)}}catch(n){this.debugLogger.error("[PermissionController] Teammate approval failed:",n);try{await t.respond("cancel")}catch(o){this.debugLogger.error("[PermissionController] Teammate approval cancel failed:",o)}}}async handleOutgoingPermissionRequest(t){try{if(this.context.abortSignal?.aborted){await t.confirmationDetails.onConfirm("cancel");return}if(!(this.context.config.getInputFormat?.()==="stream-json")){let c=this.checkPermissionMode().allowed?"proceed_once":"cancel";await t.confirmationDetails.onConfirm(c);return}let r=this.buildPermissionSuggestions(t.confirmationDetails),s=await this.sendControlRequest({subtype:"can_use_tool",tool_name:t.request.name,tool_use_id:t.request.callId,input:t.request.args,permission_suggestions:r,blocked_path:null},this.context.sdkCanUseToolTimeoutMs??Wut,this.context.abortSignal);if(s.subtype!=="success"){await t.confirmationDetails.onConfirm("cancel");return}let i=s.response||{};if(String(i.behavior||"").toLowerCase()==="allow"){let l=i.updatedInput;l&&typeof l=="object"&&(t.request.args=l),await t.confirmationDetails.onConfirm("proceed_once")}else{let l=typeof i.message=="string"?i.message:void 0;await t.confirmationDetails.onConfirm("cancel",l?{cancelMessage:l}:void 0)}}catch(n){this.debugLogger.error("[PermissionController] Outgoing permission failed:",n);let o=n instanceof Error?n.message:String(n),r=t.confirmationDetails.type;["edit","exec","mcp"].includes(r)?await t.confirmationDetails.onConfirm("cancel",{cancelMessage:`Error: ${o}`}):await t.confirmationDetails.onConfirm("cancel",{cancelMessage:`Error: ${o}`})}finally{this.pendingOutgoingRequests.delete(t.request.callId)}}};p();var jut=3e4,TP=class extends fC{async handleRequestPayload(t,n){if(n.aborted)throw new Error("Request aborted");switch(t.subtype){case"mcp_server_status":return this.handleMcpStatus();default:throw new Error("Unsupported request subtype in SdkMcpController")}}async handleMcpStatus(){let t={};for(let n of this.context.sdkMcpServers)t[n]="connected";return{subtype:"mcp_server_status",status:t}}async sendMcpMessageToSdk(t,n){this.debugLogger.debug(`[SdkMcpController] Sending MCP message to SDK server '${t}':`,JSON.stringify(n));let s=(await this.sendControlRequest({subtype:"mcp_message",server_name:t,message:n},jut,this.context.abortSignal)).response?.mcp_response;if(!s)throw new Error(`Invalid MCP response from SDK for server '${t}'`);return this.debugLogger.debug(`[SdkMcpController] Received MCP response from SDK server '${t}':`,JSON.stringify(s)),s}createSendSdkMcpMessage(){return(t,n)=>this.sendMcpMessageToSdk(t,n)}};var Qy=Oe("CONTROL_DISPATCHER"),QP=class{context;systemController;permissionController;sdkMcpController;pendingIncomingRequests=new Map;pendingOutgoingRequests=new Map;abortHandler=null;constructor(t){this.context=t,this.systemController=new wP(t,this,"SystemController"),this.permissionController=new bP(t,this,"PermissionController"),this.sdkMcpController=new TP(t,this,"SdkMcpController"),this.abortHandler=()=>{this.shutdown()},this.context.abortSignal.addEventListener("abort",this.abortHandler)}async dispatch(t){let{request_id:n,request:o}=t;try{let s=await this.getControllerForRequest(o.subtype).handleRequest(o,n);this.sendSuccessResponse(n,s)}catch(r){let s=r instanceof Error?r.message:String(r);this.sendErrorResponse(n,s)}}handleControlResponse(t){let n=t.response,o=n.request_id,r=this.pendingOutgoingRequests.get(o);if(!r){Qy.debug(`[ControlDispatcher] No pending outgoing request for: ${o}`);return}if(this.deregisterOutgoingRequest(o),n.subtype==="success")r.resolve(n);else{let s=typeof n.error=="string"?n.error:n.error?.message??"Unknown error";r.reject(new Error(s))}}async sendControlRequest(t,n){return this.systemController.sendControlRequest(t,n)}handleCancel(t){if(t){let n=this.pendingIncomingRequests.get(t);n&&(n.abortController.abort(),this.deregisterIncomingRequest(t),this.sendErrorResponse(t,"Request cancelled"),Qy.debug(`[ControlDispatcher] Cancelled incoming request: ${t}`))}else{let n=Array.from(this.pendingIncomingRequests.keys());for(let o of n){let r=this.pendingIncomingRequests.get(o);r&&(r.abortController.abort(),this.deregisterIncomingRequest(o),this.sendErrorResponse(o,"All requests cancelled"))}Qy.debug(`[ControlDispatcher] Cancelled all ${n.length} pending incoming requests`)}}markInputClosed(){if(this.context.inputClosed)return;this.context.inputClosed=!0;let t=Array.from(this.pendingOutgoingRequests.keys());this.context.debugMode&&Qy.debug(`[ControlDispatcher] Input closed, rejecting ${t.length} pending outgoing requests`);for(let n of t){let o=this.pendingOutgoingRequests.get(n);o&&(this.deregisterOutgoingRequest(n),o.reject(new Error("Input closed")))}}shutdown(){Qy.debug("[ControlDispatcher] Shutting down"),this.abortHandler&&(this.context.abortSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null);for(let[t,n]of this.pendingIncomingRequests.entries())n.abortController.abort(),clearTimeout(n.timeoutId);this.pendingIncomingRequests.clear();for(let[t,n]of this.pendingOutgoingRequests.entries())clearTimeout(n.timeoutId),n.reject(new Error("Dispatcher shutdown"));this.pendingOutgoingRequests.clear(),this.systemController.cleanup(),this.permissionController.cleanup(),this.sdkMcpController.cleanup()}registerIncomingRequest(t,n,o,r){this.pendingIncomingRequests.set(t,{controller:n,abortController:o,timeoutId:r})}deregisterIncomingRequest(t){let n=this.pendingIncomingRequests.get(t);n&&(clearTimeout(n.timeoutId),this.pendingIncomingRequests.delete(t))}registerOutgoingRequest(t,n,o,r,s){this.pendingOutgoingRequests.set(t,{controller:n,resolve:o,reject:r,timeoutId:s})}deregisterOutgoingRequest(t){let n=this.pendingOutgoingRequests.get(t);n&&(clearTimeout(n.timeoutId),this.pendingOutgoingRequests.delete(t))}getPendingIncomingRequestCount(){return this.pendingIncomingRequests.size}async waitForPendingIncomingRequests(t=50,n=3e4){let o=Date.now();for(;this.pendingIncomingRequests.size>0;){if(Date.now()-o>n){Qy.warn(`[ControlDispatcher] Timeout waiting for ${this.pendingIncomingRequests.size} pending incoming requests`);break}await new Promise(r=>setTimeout(r,t))}this.pendingIncomingRequests.size===0&&Qy.debug("[ControlDispatcher] All incoming requests completed")}getControllerForRequest(t){switch(t){case"initialize":case"interrupt":case"set_model":case"supported_commands":case"get_context_usage":return this.systemController;case"can_use_tool":case"set_permission_mode":return this.permissionController;case"mcp_server_status":return this.sdkMcpController;default:throw new Error(`Unknown control request subtype: ${t}`)}}sendSuccessResponse(t,n){let o={type:"control_response",response:{subtype:"success",request_id:t,response:n}};this.context.streamJson.send(o)}sendErrorResponse(t,n){let o={type:"control_response",response:{subtype:"error",request_id:t,error:n}};this.context.streamJson.send(o)}};p();var vP=class{dispatcher;constructor(t,n){this.dispatcher=n}get permission(){let t=this.dispatcher.permissionController;return{buildPermissionSuggestions:t.buildPermissionSuggestions.bind(t),getToolCallUpdateCallback:t.getToolCallUpdateCallback.bind(t),handleTeammateApproval:t.handleTeammateApproval.bind(t)}}get system(){let t=this.dispatcher.systemController;return{getControlCapabilities:()=>t.buildControlCapabilities()}}cleanup(){this.dispatcher.shutdown()}};p();function K9(e){return e&&typeof e=="object"&&e.type==="user"&&"message"in e}function h0e(e){return e&&typeof e=="object"&&e.type==="assistant"&&"uuid"in e&&"message"in e&&"session_id"in e&&"parent_tool_use_id"in e}function C0e(e){return e&&typeof e=="object"&&e.type==="system"&&"subtype"in e&&"uuid"in e&&"session_id"in e}function E0e(e){return e&&typeof e=="object"&&e.type==="result"&&"subtype"in e&&"duration_ms"in e&&"is_error"in e&&"uuid"in e&&"session_id"in e}function I0e(e){return e&&typeof e=="object"&&e.type==="stream_event"&&"uuid"in e&&"session_id"in e&&"event"in e&&"parent_tool_use_id"in e}function z9(e){return e&&typeof e=="object"&&e.type==="control_request"&&"request_id"in e&&"request"in e}function y0e(e){return e&&typeof e=="object"&&e.type==="control_response"&&"response"in e}function D0e(e){return e&&typeof e=="object"&&e.type==="control_cancel_request"&&"request_id"in e}p();import*as X9 from"node:path";function XR(e){if(!e)return"";let t=[];for(let n of e)"text"in n&&n.text&&("thought"in n&&n.thought||t.push(n.text));return t.join(`
741
741
  `)}function Yut(e){if(!e)return"";let t=[];for(let n of e)"text"in n&&n.text&&"thought"in n&&n.thought&&t.push(n.text);return t.join(`
742
742
  `)}function qut(e){if(!e)return[];let t=[];for(let n of e)if("functionCall"in n&&n.functionCall){let o=n.functionCall;t.push({id:o.id||`call-${t.length}`,name:o.name||"unknown",args:o.args||{}})}return t}function Jut(e,t){return e?e.getToolRegistry().getTool(t):void 0}function $ut(e,t){try{return e.build(t).getDescription()}catch{return typeof t.description=="string"?t.description:""}}function Vut(e){if(!e||typeof e!="object")return;let t={...e};if("timestamp"in t){let n=t.timestamp;(typeof n=="string"||typeof n=="number")&&(t.timestamp=new Date(n))}if(typeof t.type=="string")return t}function Kut(e,t){let n=[],o=[],r=0,s=new Map,i=[],a=l=>{if(l.status==="error"){r+=1;let c=l.filesRead?.length?l.filesRead.join(", "):"files";return[{callId:`at-command-${r}`,name:"Read File(s)",description:"Error attempting to read files",status:"Error",resultDisplay:l.message||`Error reading files (${c})`,confirmationDetails:void 0}]}return l.filesRead?.length?l.filesRead.map(c=>{r+=1;let u=c.endsWith("/");return{callId:`at-command-${r}`,name:u?"Read Directory":"Read File",description:u?`Read directory ${X9.basename(c)}`:`Read file ${X9.basename(c)}`,status:"Success",resultDisplay:void 0,confirmationDetails:void 0}}):(r+=1,[{callId:`at-command-${r}`,name:"Read File",description:"Read File(s)",status:"Success",resultDisplay:void 0,confirmationDetails:void 0}])};for(let l of e.messages){if(l.type==="system"){if(l.subtype==="slash_command"){i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]);let c=l.systemPayload;if(!c)continue;if(c.phase==="invocation"&&c.rawCommand){let u=typeof c.sentToModel=="boolean"?c.sentToModel:void 0;n.push({type:"user",text:c.rawCommand,...u===void 0?{}:{sentToModel:u}})}if(c.phase==="result"){let u=c.outputHistoryItems??[];for(let d of u){let h=Vut(d);h&&n.push(h)}}}if(l.subtype==="at_command"){let c=l.systemPayload;if(!c)continue;o.push(c)}l.subtype==="rewind"&&n.push({type:"info",text:"Conversation rewound."});continue}switch(l.type){case"user":{if(l.subtype==="hook_prompt")break;if(l.subtype==="notification"||l.subtype==="cron"){let u=l.systemPayload,d=l.subtype==="cron"?"Cron job fired":"Background agent completed",h=u?.displayText||XR(l.message?.parts)||d;n.push({type:"notification",text:h});break}if(l.subtype==="mid_turn_user_message"){let d=l.systemPayload?.displayText||XR(l.message?.parts);d&&n.push({type:"notification",text:d});break}if(o.length>0){i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]);let u=o.shift(),d=u.userText||XR(l.message?.parts);d&&n.push({type:"user",text:d});let h=a(u);h.length>0&&n.push({type:"tool_group",tools:h});break}i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]);let c=XR(l.message?.parts);c&&n.push({type:"user",text:c});break}case"assistant":{let c=l.message?.parts,u=t?"":Yut(c),d=XR(c),h=qut(c);u&&(i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]),n.push({type:"gemini_thought",text:u})),d&&(i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]),n.push({type:"gemini",text:d}));for(let f of h){let y=Jut(t,f.name);s.set(f.id,{name:f.name,args:f.args}),i.push({callId:f.id,name:y?.displayName||f.name,description:y?$ut(y,f.args):"",resultDisplay:void 0,status:"Success",confirmationDetails:void 0})}break}case"tool_result":{if(l.toolCallResult){let c=l.toolCallResult.callId,u=i.find(d=>d.callId===c);if(u){let d=l.toolCallResult.resultDisplay;u.resultDisplay=d;let h=l.toolCallResult.status;u.status=h==="error"?"Error":"Success"}s.delete(c||"")}break}default:break}}if(o.length>0)for(let l of o){i.length>0&&(n.push({type:"tool_group",tools:[...i]}),i=[]);let c=l.userText;c&&n.push({type:"user",text:c});let u=a(l);u.length>0&&n.push({type:"tool_group",tools:u})}return i.length>0&&n.push({type:"tool_group",tools:i}),n}function fu(e,t,n=Date.now()){let o=[],r=1,s=()=>n+r++,i=Kut(e.conversation,t);for(let a of i)o.push({...a,id:s()});return o}var ns=Oe("NON_INTERACTIVE_SESSION"),Z9=class{userMessageQueue=[];monitorStartedQueue=[];monitorQueue=[];pendingMonitorBatch=null;monitorAdmissionPaused=!1;abortController;config;sessionId;promptIdCounter=0;inputReader;outputAdapter;controlContext=null;dispatcher=null;controlService=null;controlSystemEnabled=null;shutdownHandler=null;initialPrompt=null;processingPromise=null;isShuttingDown=!1;configInitialized=!1;monitorNotificationsRegistered=!1;monitorRegistrationsRegistered=!1;settings;initializationPromise=null;initializationResolve=null;initializationReject=null;constructor(t,n,o=vT()){this.config=t,this.settings=o,this.sessionId=t.getSessionId(),this.abortController=new AbortController,this.initialPrompt=n??null,this.inputReader=new SP,this.outputAdapter=new $d(t,t.getIncludePartialMessages()),this.setupSignalHandlers()}ensureInitializationPromise(){this.initializationPromise||(this.initializationPromise=new Promise((t,n)=>{this.initializationResolve=()=>{t(),this.initializationResolve=null,this.initializationReject=null},this.initializationReject=o=>{n(o),this.initializationResolve=null,this.initializationReject=null}}))}getNextPromptId(){return this.promptIdCounter++,`${this.sessionId}########${this.promptIdCounter}`}async ensureConfigInitialized(t){if(!this.configInitialized){ns.debug("[Session] Initializing config");try{Ta("config_initialize_start"),await this.config.initialize(t);let n=this.config.getResumedSessionData?.();n&&$A(fu(n,this.config),this.config,()=>{}),Ta("config_initialize_end"),await this.config.waitForMcpReady();let o=typeof this.config.getFailedMcpServerNames=="function"?this.config.getFailedMcpServerNames():[];o.length>0&&process.stderr.write(`Warning: MCP server(s) failed to start: ${o.join(", ")}. Continuing with built-in tools and any servers that did connect.
743
743
  `),LB(this.config.getSessionId()),this.configInitialized=!0,this.registerMonitorRegistrations(),this.registerMonitorNotifications()}catch(n){throw ns.error("[Session] Failed to initialize config:",n),n}}}registerMonitorNotifications(){if(this.monitorNotificationsRegistered)return;let t=this.config.getMonitorRegistry();t.setNotificationCallback((n,o,r)=>{if(!(this.isShuttingDown||this.abortController.signal.aborted)){if(r.status==="running"&&typeof t.get=="function"){let s=t.get(r.monitorId);if(!s||s.status!=="running")return}this.enqueueMonitorNotification({displayText:n,modelText:o,sdkNotification:{task_id:r.monitorId,tool_use_id:r.toolUseId,status:r.status}})}}),this.monitorNotificationsRegistered=!0}registerMonitorRegistrations(){if(this.monitorRegistrationsRegistered)return;this.config.getMonitorRegistry().setRegisterCallback(n=>{this.isShuttingDown||this.abortController.signal.aborted||this.enqueueMonitorStarted({task_id:n.monitorId,tool_use_id:n.toolUseId,description:n.description})}),this.monitorRegistrationsRegistered=!0}completeInitialization(){this.initializationResolve&&(ns.debug("[Session] Initialization complete"),this.initializationResolve(),this.initializationResolve=null,this.initializationReject=null)}failInitialization(t){this.initializationReject&&(ns.error("[Session] Initialization failed:",t),this.initializationReject(t),this.initializationResolve=null,this.initializationReject=null)}async waitForInitialization(){this.initializationPromise&&await this.initializationPromise}ensureControlSystem(){this.controlContext&&this.dispatcher&&this.controlService||(this.controlContext=new xP({config:this.config,streamJson:this.outputAdapter,sessionId:this.sessionId,abortSignal:this.abortController.signal,settings:this.settings,permissionMode:this.config.getApprovalMode(),onInterrupt:()=>this.handleInterrupt()}),this.dispatcher=new QP(this.controlContext),this.controlService=new vP(this.controlContext,this.dispatcher))}getDispatcher(){return this.controlSystemEnabled!==!0?null:(this.dispatcher||this.ensureControlSystem(),this.dispatcher)}handleFirstMessage(t){if(z9(t)){let n=t;if(this.controlSystemEnabled=!0,this.ensureControlSystem(),n.request.subtype==="initialize"){this.initializeSdkMode(n);return}ns.debug("[Session] Ignoring non-initialize control request during initialization");return}if(K9(t)){this.controlSystemEnabled=!1,this.initializeDirectMode(t);return}this.controlSystemEnabled=!1}async initializeSdkMode(t){this.ensureInitializationPromise();try{await this.dispatcher?.dispatch(t);let n=this.dispatcher?.sdkMcpController.createSendSdkMcpMessage();await this.ensureConfigInitialized({sendSdkMcpMessage:n}),this.completeInitialization()}catch(n){ns.error("[Session] SDK mode initialization failed:",n),this.failInitialization(n instanceof Error?n:new Error(String(n)))}}async initializeDirectMode(t){this.ensureInitializationPromise();try{await this.ensureConfigInitialized(),this.completeInitialization(),this.enqueueUserMessage(t)}catch(n){ns.error("[Session] Direct mode initialization failed:",n),this.failInitialization(n instanceof Error?n:new Error(String(n)))}}handleControlRequestAsync(t){let n=this.getDispatcher();if(!n){ns.warn("[Session] Control system not enabled");return}n.dispatch(t).catch(o=>{ns.error("[Session] Control request dispatch error:",o)})}handleControlResponse(t){let n=this.getDispatcher();n&&n.handleControlResponse(t)}handleControlCancel(t){let n=this.getDispatcher();n&&n.handleCancel(t.request_id)}async processUserMessage(t){let n=zut(t);if(!n){ns.debug("[Session] No text content in user message");return}await this.waitForInitialization();let o=this.getNextPromptId();try{await zR(this.config,this.settings,n,o,{abortController:this.abortController,adapter:this.outputAdapter,controlService:this.controlService??void 0,captureMonitorNotifications:!1,captureMonitorRegistrations:!1})}catch(r){ns.error("[Session] Query execution error:",r)}}async processMonitorNotificationBatch(t){await this.waitForInitialization();let n=t.map(s=>s.modelText).join(`
@@ -954,7 +954,7 @@ ${r.join(`
954
954
  `)}
955
955
  ---
956
956
  ${o}`}var Q_e=new Set(["github.com","raw.githubusercontent.com","codeload.github.com","api.github.com"]);function v_e(e){let t;try{t=new URL(e)}catch{throw Re.invalidParams(void 0,"Skill sourceUrl must be a valid URL")}if(t.protocol!=="https:")throw Re.invalidParams(void 0,"Skill sourceUrl must be an HTTPS URL");if(!Q_e.has(t.hostname))throw Re.invalidParams(void 0,"Skill sourceUrl host is not allowed (only github.com sources are supported)")}function R_e(e){let t=new URL(e);if(t.protocol!=="https:")throw Re.invalidParams(void 0,"Skill sourceUrl must be an HTTPS URL");if(t.hostname!=="github.com")return null;let n=t.pathname.split("/").filter(Boolean);if(n.length<5||n[2]!=="blob")return null;let o=n[0],r=n[1],s=n[3],i=n.slice(4);return!o||!r||!s||i.length===0?null:{owner:o,repo:r,ref:s,filePath:i.join("/")}}function jBt(e){return`https://raw.githubusercontent.com/${e.owner}/${e.repo}/${e.ref}/${e.filePath}`}function YBt(e){return!e||e==="."?"":e.split("/").map(encodeURIComponent).join("/")}function fK(e,t,n){let o=e.subarray(t,t+n),r=o.indexOf(0),s=r>=0?r:o.length;return Buffer.from(o.subarray(0,s)).toString("utf8").trim()}function qBt(e,t){let n=fK(e,t+124,12);return n?Number.parseInt(n,8):0}function JBt(e,t){for(let n=0;n<512;n+=1)if(e[t+n]!==0)return!1;return!0}function $Bt(e,t){let n=fK(e,t,100),o=fK(e,t+345,155);return o?`${o}/${n}`:n}function VBt(e){let t=e.split("/").filter(Boolean);return t.length>1?t.slice(1).join("/"):""}var Qk=100*1024*1024,M_e=500*1024*1024,KBt=16,zBt=2e3,bG=class extends Error{};async function XBt(e,t,n={}){let o=n.maxCompressedBytes??Qk,r=n.maxDecompressedBytes??M_e;if(e.length>o)throw Re.invalidParams(void 0,"Skill archive exceeds the maximum allowed size");let s;try{let c=[],u=0;await wBt(B_e.from([Buffer.from(e)]),bBt(),new S_e({write(d,h,f){if(u+=d.length,u>r){f(new bG);return}c.push(d),f()}})),s=Buffer.concat(c)}catch(c){throw c instanceof bG?Re.invalidParams(void 0,"Decompressed skill archive exceeds the maximum allowed size"):Re.invalidParams(void 0,`Failed to decompress skill archive: ${c instanceof Error?c.message:String(c)}`)}let i=t.replace(/^\/+|\/+$/g,""),a=i&&i!=="."?`${i}/`:"",l=[];for(let c=0;c+512<=s.length&&!JBt(s,c);){let u=$Bt(s,c),d=String.fromCharCode(s[c+156]||0),h=qBt(s,c),f=c+512,y=f+Math.ceil(h/512)*512;if(d==="0"||d==="\0"){let I=VBt(u);if(I.startsWith(a)){let S=I.slice(a.length);S&&l.push({relativePath:S,content:s.subarray(f,f+h)})}}c=y}return l}var ZBt=[".githubusercontent.com",".github.com"];function eSt(e){return Q_e.has(e)?!0:ZBt.some(t=>e.endsWith(t))}async function CK(e,t={},n=5){let o=e;for(let r=0;r<=n;r+=1){let s=await fetch(o,{...t,redirect:"manual"});if(s.status<300||s.status>=400)return s;let i=s.headers?.get("location");if(!i)return s;let a;try{a=new URL(i,o)}catch{throw Re.invalidParams(void 0,"Skill download redirected to an invalid URL")}if(a.protocol!=="https:"||!eSt(a.hostname))throw Re.invalidParams(void 0,"Skill download redirected to a disallowed host");o=a.toString()}throw Re.invalidParams(void 0,"Skill download exceeded the maximum number of redirects")}async function k_e(e,t){let n=e.body;if(!n){let l=new Uint8Array(await e.arrayBuffer());if(l.byteLength>t)throw Re.invalidParams(void 0,"Skill download exceeds the maximum allowed size");return l}let o=n.getReader(),r=[],s=0;for(;;){let{done:l,value:c}=await o.read();if(l)break;if(c){if(s+=c.byteLength,s>t)throw await o.cancel(),Re.invalidParams(void 0,"Skill download exceeds the maximum allowed size");r.push(c)}}let i=new Uint8Array(s),a=0;for(let l of r)i.set(l,a),a+=l.byteLength;return i}async function F_e(e){let t=await CK(e);if(!t.ok)throw Re.invalidParams(void 0,`Failed to download skill (${t.status})`);let n=t.headers?.get("content-length");if(n){let o=Number.parseInt(n,10);if(Number.isFinite(o)&&o>Qk)throw Re.invalidParams(void 0,"Skill download exceeds the maximum allowed size")}return k_e(t,Qk)}async function tSt(e){let t=R_e(e),n=t?jBt(t):e,o=await F_e(n);return{skillContent:Buffer.from(o).toString("utf8"),files:[{relativePath:"SKILL.md",content:o}]}}async function nSt(e,t){let n=`https://codeload.github.com/${e.owner}/${e.repo}/tar.gz/${encodeURIComponent(e.ref)}`,o=await CK(n,{headers:{"User-Agent":"matilda-code"}});if(!o.ok)throw Re.invalidParams(void 0,`Failed to download GitHub skill archive (${o.status})`);let r=o.headers?.get("content-length");if(r){let s=Number.parseInt(r,10);if(Number.isFinite(s)&&s>Qk)throw Re.invalidParams(void 0,"Skill archive exceeds the maximum allowed size")}return XBt(await k_e(o,Qk),t)}async function oSt(e,t){let n=YBt(t),o=`https://api.github.com/repos/${e.owner}/${e.repo}/contents/${n}?ref=${encodeURIComponent(e.ref)}`,r=await CK(o,{headers:{Accept:"application/vnd.github+json","User-Agent":"matilda-code"}});if(!r.ok)throw Re.invalidParams(void 0,`Failed to list GitHub skill files (${r.status})`);let s=await r.json();if(!Array.isArray(s))throw Re.invalidParams(void 0,"GitHub skill URL must point to a directory-backed SKILL.md file");return s}async function N_e(e,t,n="",o=0,r={files:0,bytes:0}){if(o>KBt)throw Re.invalidParams(void 0,"Skill directory nesting exceeds the maximum allowed depth");let s=await oSt(e,t),i=[];for(let a of s){let l=Fr(a),c=Bp(l.name,"github.name"),u=Bp(l.path,"github.path"),d=Bp(l.type,"github.type"),h=n?Po.posix.join(n,c):c;if(d==="dir"){i.push(...await N_e(e,u,h,o+1,r));continue}if(d!=="file")continue;if(r.files+=1,r.files>zBt)throw Re.invalidParams(void 0,"Skill directory contains too many files");let f=Bp(l.download_url,"github.download_url");v_e(f);let y=await F_e(f);if(r.bytes+=y.length,r.bytes>M_e)throw Re.invalidParams(void 0,"Skill directory exceeds the maximum allowed size");i.push({relativePath:h,content:y})}return i}async function rSt(e,t){let n=await N_e(e,t).catch(o=>(Kn.warn("GitHub API directory listing failed, falling back to archive download:",o),null));return n||nSt(e,t)}async function sSt(e){v_e(e);let t=R_e(e);if(!t||Po.posix.basename(t.filePath)!=="SKILL.md")return tSt(e);let n=Po.posix.dirname(t.filePath),o=await rSt(t,n),r=o.find(s=>s.relativePath==="SKILL.md");if(!r)throw Re.invalidParams(void 0,"GitHub skill directory does not contain SKILL.md");return{skillContent:Buffer.from(r.content).toString("utf8"),files:o}}function iSt(e,t){let n=Po.resolve(e),o=Po.resolve(e,t);if(o!==n&&!o.startsWith(n+Po.sep))throw Re.invalidParams(void 0,`Invalid skill file path: ${t}`);return o}function h_e(e,t){let n=Po.resolve(e),o=Po.resolve(e,t);if(!o.startsWith(n+Po.sep))throw Re.invalidParams(void 0,"Invalid skill.slug");return o}function aSt(e,t){if(e==null)return[];if(!Array.isArray(e))throw Re.invalidParams(void 0,`Invalid ${t}: expected string[]`);return Array.from(new Set(e.map(n=>{if(typeof n!="string")throw Re.invalidParams(void 0,`Invalid ${t}: expected string[]`);return n.trim()}).filter(Boolean)))}function C_e(e,t){if(!(e==null||e==="")){if(typeof e!="number"||!Number.isFinite(e)||e<=0)throw Re.invalidParams(void 0,`Invalid ${t}: expected positive number`);return e}}function lSt(e){if(e==null)return;let t=Fr(e);if(t.enableThinking!==void 0&&typeof t.enableThinking!="boolean")throw Re.invalidParams(void 0,"Invalid advancedConfig.enableThinking: expected boolean");let n=Fr(t.multimodal),o={};for(let a of["image","video","audio","pdf"]){let l=n[a];if(l!==void 0){if(typeof l!="boolean")throw Re.invalidParams(void 0,`Invalid advancedConfig.multimodal.${a}: expected boolean`);o[a]=l}}let r=C_e(t.contextWindowSize,"advancedConfig.contextWindowSize"),s=C_e(t.maxTokens,"advancedConfig.maxTokens"),i={...typeof t.enableThinking=="boolean"?{enableThinking:t.enableThinking}:{},...Object.keys(o).length>0?{multimodal:o}:{},...r?{contextWindowSize:r}:{},...s?{maxTokens:s}:{}};return Object.keys(i).length>0?i:void 0}function cSt(e,t){if(typeof e.documentationUrl=="string")return e.documentationUrl;if(typeof e.documentationUrl=="function")try{return e.documentationUrl(t)}catch{return}}function uSt(e){return typeof Fr(e).id=="string"}function __e(e,t){if(!t)return;let o=Fr(e.env)[t];return typeof o=="string"&&o.length>0?o:void 0}function ASt(e,t){let o=Fr(e.modelProviders)[t];return Array.isArray(o)?o.filter(uSt):[]}function L_e(e,t){let n=kF(e);if(!n)return;let o=e.protocolOptions?.length?e.protocolOptions:[e.protocol];for(let r of o){let s=ASt(t,r).filter(n);if(s.length>0)return{protocol:r,models:s}}}function O_e(e,t,n){try{return typeof e.envKey=="function"?e.envKey(t,n):e.envKey}catch{return}}function dSt(e){let t=Fr(e?.generationConfig),n=Fr(t.extra_body),o={};return typeof n.enable_thinking=="boolean"&&(o.enableThinking=n.enable_thinking),typeof t.contextWindowSize=="number"&&(o.contextWindowSize=t.contextWindowSize),Object.keys(o).length>0?o:void 0}function gSt(e,t){let n=L_e(e,t),o=n?.models[0],r=n?.protocol??e.protocol,s=typeof o?.baseUrl=="string"?o.baseUrl:Ml(e),i=typeof o?.envKey=="string"?o.envKey:O_e(e,r,s),a=__e(t,i);if(!(!!a||!!n))return;let c=dSt(o);return{protocol:r,baseUrl:wG(s),...a?{hasApiKey:!0}:{},...n?{modelIds:n.models.map(u=>u.id)}:{},...c?{advancedConfig:c}:{}}}function mSt(e,t){let n=L_e(e,t),o=n?.models[0],r=n?.protocol??e.protocol,s=typeof o?.baseUrl=="string"?o.baseUrl:Ml(e),i=typeof o?.envKey=="string"?o.envKey:O_e(e,r,s);return __e(t,i)}function fSt(e,t){let n=e.protocolOptions?.[0]??e.protocol,o=e.baseUrl===void 0?BB(n):Ml(e),r=gSt(e,t);return{id:e.id,label:e.label,description:e.description,protocol:e.protocol,protocolOptions:e.protocolOptions??[],baseUrl:e.baseUrl,baseUrlPlaceholder:e.baseUrl===void 0?o:void 0,defaultModelIds:Ou(e),models:e.models??[],modelsEditable:e.modelsEditable===!0||!e.models,showAdvancedConfig:e.showAdvancedConfig===!0,apiKeyPlaceholder:e.apiKeyPlaceholder,documentationUrl:cSt(e,o),uiGroup:e.uiGroup??"third-party",uiLabels:e.uiLabels,...r?{existingConfig:r}:{}}}function pSt(e,t,n){let o=Pm(t.protocol,"protocol");if(o&&o!==e.protocol&&!e.protocolOptions?.includes(o))throw Re.invalidParams(void 0,`Invalid protocol for provider "${e.id}"`);let r=Ml(e,Pm(t.baseUrl,"baseUrl")).trim();if(!r&&e.baseUrl===void 0&&(r=BB(o??e.protocol)),!r)throw Re.invalidParams(void 0,`Invalid or missing baseUrl for provider "${e.id}"`);let s=Pm(t.apiKey,"apiKey")??n;if(!s)throw Re.invalidParams(void 0,"Invalid or missing apiKey");let i=e.validateApiKey?.(s,r);if(i)throw Re.invalidParams(void 0,i);let a=Ou(e),l=aSt(t.modelIds,"modelIds"),c=l.length>0?l:a;if(c.length===0)throw Re.invalidParams(void 0,`Invalid or missing modelIds for provider "${e.id}"`);let u=lSt(t.advancedConfig);return{...o?{protocol:o}:{},baseUrl:r,apiKey:s,modelIds:c,...u?{advancedConfig:u}:{}}}function hSt(e){if(e!==void 0){if(e==="user")return"User";if(e==="workspace")return"Workspace";throw Re.invalidParams(void 0,"Invalid scope for provider connect")}}function CSt(e,t){let n=e;for(let o of t.split(".")){if(!n||typeof n!="object"||Array.isArray(n))return;n=n[o]}if(typeof n=="string"||typeof n=="number"||typeof n=="boolean"||Array.isArray(n))return n}function mK(e){let t={};for(let n of b_e){let o=CSt(e,n);o!==void 0&&(t[n]=o)}return t}function ESt(e,t){let n=w_e[e];switch(n.type){case"boolean":if(typeof t!="boolean")throw Re.invalidParams(void 0,`${e} must be a boolean`);return t;case"number":if(typeof t!="number"||!Number.isFinite(t))throw Re.invalidParams(void 0,`${e} must be a number`);if(n.min!==void 0&&t<n.min)throw Re.invalidParams(void 0,`${e} must be at least ${n.min}`);return t;case"enum":{let o=n.values;if(typeof t!="string"||!o?.includes(t))throw Re.invalidParams(void 0,`${e} must be one of ${o?.join(", ")}`);return t}case"string":{if(t===void 0)return;if(typeof t!="string")throw Re.invalidParams(void 0,`${e} must be a string`);let o=/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g;return t.replace(o," ").trim()||void 0}default:throw Re.invalidParams(void 0,`${e} has an unsupported setting type`)}}function hg(e){if(e!==void 0){if(!Array.isArray(e))throw Re.invalidParams(void 0,"Expected an array of strings");return e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean)}}function DD(e){if(e===void 0)return;let t=Fr(e),n={};for(let[o,r]of Object.entries(t))typeof r=="string"&&o.trim()&&(n[o.trim()]=r);return n}function Tk(e){if(e==null||e==="")return;let t=typeof e=="number"?e:Number.parseInt(String(e),10);if(!Number.isFinite(t)||t<=0)throw Re.invalidParams(void 0,"Expected a positive number");return t}function ISt(e){let t=Fr(e),n=t.transport;if(n!=="stdio"&&n!=="http"&&n!=="sse")throw Re.invalidParams(void 0,"MCP transport must be stdio, http, or sse");let o={transport:n},r=t.description;typeof r=="string"&&r.trim()&&(o.description=r.trim());let s=t.cwd;typeof s=="string"&&s.trim()&&(o.cwd=s.trim());let i=Tk(t.timeout);if(i!==void 0&&(o.timeout=i),typeof t.trust=="boolean"&&(o.trust=t.trust),o.includeTools=hg(t.includeTools),o.excludeTools=hg(t.excludeTools),n==="stdio"){let c=t.command;if(typeof c!="string"||!c.trim())throw Re.invalidParams(void 0,"Stdio MCP servers require a command");return o.command=c.trim(),o.args=hg(t.args),o.env=DD(t.env),o}let l=t[n==="http"?"httpUrl":"url"];if(typeof l!="string"||!l.trim())throw Re.invalidParams(void 0,`${n.toUpperCase()} MCP servers require a URL`);return n==="http"?o.httpUrl=l.trim():o.url=l.trim(),o.headers=DD(t.headers),o}function ySt(e){let t={};for(let n of["timeout","trust","description","includeTools","excludeTools"])e[n]!==void 0&&(t[n]=e[n]);return e.transport==="stdio"?(t.command=e.command,e.args!==void 0&&(t.args=e.args),e.cwd!==void 0&&(t.cwd=e.cwd),e.env!==void 0&&(t.env=e.env)):e.transport==="http"?(t.httpUrl=e.httpUrl,e.headers!==void 0&&(t.headers=e.headers)):(t.url=e.url,e.headers!==void 0&&(t.headers=e.headers)),t}function DSt(e){let t=Fr(e);if(typeof t.httpUrl=="string")return{transport:"http",httpUrl:t.httpUrl,headers:DD(t.headers),timeout:Tk(t.timeout),trust:typeof t.trust=="boolean"?t.trust:void 0,description:typeof t.description=="string"?t.description:void 0,includeTools:hg(t.includeTools),excludeTools:hg(t.excludeTools),extensionName:typeof t.extensionName=="string"?t.extensionName:void 0};if(typeof t.url=="string")return{transport:"sse",url:t.url,headers:DD(t.headers),timeout:Tk(t.timeout),trust:typeof t.trust=="boolean"?t.trust:void 0,description:typeof t.description=="string"?t.description:void 0,includeTools:hg(t.includeTools),excludeTools:hg(t.excludeTools),extensionName:typeof t.extensionName=="string"?t.extensionName:void 0};if(typeof t.command=="string")return{transport:"stdio",command:t.command,args:hg(t.args),cwd:typeof t.cwd=="string"?t.cwd:void 0,env:DD(t.env),timeout:Tk(t.timeout),trust:typeof t.trust=="boolean"?t.trust:void 0,description:typeof t.description=="string"?t.description:void 0,includeTools:hg(t.includeTools),excludeTools:hg(t.excludeTools),extensionName:typeof t.extensionName=="string"?t.extensionName:void 0}}var TG="__redacted__";function BSt(e){let t=n=>n&&Object.fromEntries(Object.keys(n).map(o=>[o,TG]));return{...e,env:t(e.env),headers:t(e.headers)}}function SSt(e,t){let n=(o,r)=>{if(!o)return o;let s=Fr(r),i={};for(let[a,l]of Object.entries(o)){if(l!==TG){i[a]=l;continue}let c=s[a];typeof c=="string"&&(i[a]=c)}return i};return{...e,env:n(e.env,t.env),headers:n(e.headers,t.headers)}}function E_e(e){return e&&Object.fromEntries(Object.keys(e).map(t=>[t,TG]))}function I_e(e,t){if(!e)return e;let n=Fr(t),o={};for(let[r,s]of Object.entries(e)){if(s!==TG){o[r]=s;continue}let i=n[r];typeof i=="string"&&(o[r]=i)}return o}function xSt(e){return{...e,hooks:e.hooks.map(t=>({...t,...t.env?{env:E_e(t.env)}:{},...t.headers?{headers:E_e(t.headers)}:{}}))}}function wSt(e,t){let n=Array.isArray(t.hooks)?t.hooks:[];return{...e,hooks:e.hooks.map((o,r)=>{let s=Fr(n[r]);return{...o,...o.env?{env:I_e(o.env,s.env)}:{},...o.headers?{headers:I_e(o.headers,s.headers)}:{}}})}}function wk(e,t){let n=Fr(e.mcpServers);return Object.entries(n).map(([o,r])=>{try{let s=DSt(r);return s?{name:o,scope:t,server:BSt(s)}:void 0}catch(s){Kn.warn(`Skipping malformed MCP server config [${t}:${o}]:`,s);return}}).filter(o=>!!o)}function y_e(e){return typeof e=="string"&&T_e.includes(e)}function bSt(e){let t=Fr(e),n=t.type;if(n!=="command"&&n!=="http")throw Re.invalidParams(void 0,"Hook type must be command or http");let o={type:n};if(n==="command"){let s=t.command;if(typeof s!="string"||!s.trim())throw Re.invalidParams(void 0,"Command hooks require a command");o.command=s.trim(),o.env=DD(t.env),typeof t.async=="boolean"&&(o.async=t.async);let i=t.shell;(i==="bash"||i==="powershell")&&(o.shell=i)}else{let s=t.url;if(typeof s!="string"||!s.trim())throw Re.invalidParams(void 0,"HTTP hooks require a URL");o.url=s.trim(),o.headers=DD(t.headers),o.allowedEnvVars=hg(t.allowedEnvVars),typeof t.once=="boolean"&&(o.once=t.once)}let r=Tk(t.timeout);r!==void 0&&(o.timeout=r);for(let s of["name","description","statusMessage"]){let i=t[s];typeof i=="string"&&i.trim()&&(o[s]=i.trim())}return o}function P_e(e){let t=Fr(e),n=t.hooks;if(!Array.isArray(n)||n.length===0)throw Re.invalidParams(void 0,"Hook definition requires at least one hook");let o={hooks:n.map(bSt)};return typeof t.matcher=="string"&&(o.matcher=t.matcher),typeof t.sequential=="boolean"&&(o.sequential=t.sequential),o}function bk(e,t,n){let o=Fr(e.hooks),r=[];for(let s of T_e){let i=o[s];Array.isArray(i)&&i.forEach((a,l)=>{try{r.push({event:s,scope:t,index:l,hook:xSt(P_e(a)),extensionName:n})}catch(c){Kn.warn(`Skipping malformed hook entry [${t}:${s}:${l}]:`,c)}})}return r}function yD(e){if(e==="workspace")return"Workspace";if(e==="user")return"User";throw Re.invalidParams(void 0,"scope must be user or workspace")}function xG(e,t){return e.forScope(yD(t)).settings}async function D_e(e,t){for(let n of Lu()){let o=Po.join(e,n);try{return await Va.access(o),o}catch{}}return Po.join(e,t)}async function TSt(e){let t=Lu()[0]??"MATILDA.md",n=await D_e(Tt.getGlobalMatildaDir(),t),o=await D_e(e.cwd,t),r=Xp(e.projectRoot);return{userMemoryFile:n,projectMemoryFile:o,autoMemoryDir:r}}async function U_e(e,t,n){await e.initialize({skipGeminiInitialization:!0,skipMcpDiscovery:!0});let o=S_e.toWeb(process.stdout),r=B_e.toWeb(process.stdin);console.log=console.error,console.info=console.error,console.debug=console.error;let s=OZ(o,r),i,a=new PZ(y=>(i=new pK(e,t,n,y),i),s),l=async y=>{if(i)try{await i.shutdownMcpPool(8e3)}catch(I){Kn.error(`[ACP] MCP pool drain (${y}) error:`,I)}},c=!1,u=!1,d=async y=>{if(u)return;u=!0;let I=new Set([e]),S=i?.getActiveSessions();if(S)for(let x of S){let w=x.getConfig?.();w&&I.add(w)}for(let x of I){let w=x.getHookSystem?.();if(!(x.getDisableAllHooks?.()||!w||!x.hasHooksForEvent?.("SessionEnd")))try{await w.fireSessionEndEvent(y)}catch(v){Kn.warn(`SessionEnd hook failed: ${v instanceof Error?v.message:String(v)}`)}}},h=async()=>{if(c)return;c=!0,Kn.debug("[ACP] Shutdown signal received, closing streams"),await d("other");let y=i?.disposeSessions();try{process.stdin.destroy()}catch{}try{process.stdout.destroy()}catch{}await l("signal"),await y,Qa().catch(I=>{Kn.error("[ACP] Cleanup error:",I)}).finally(()=>{process.exit(0)})};process.on("SIGTERM",h),process.on("SIGINT",h),await a.closed,await d("prompt_input_exit");let f=i?.disposeSessions();await l("ide_close"),await f,process.off("SIGTERM",h),process.off("SIGINT",h)}function QSt(e){if("command"in e&&"args"in e&&"env"in e)return e}function vSt(e){if("type"in e&&e.type==="sse")return e}function RSt(e){if("type"in e&&e.type==="http")return e}function MSt(e){if(!e||!e.trim())return R3;let t=new Set(["stdio","websocket","http","sse"]),n=new Set;for(let o of e.split(",")){let r=o.trim().toLowerCase();t.has(r)&&n.add(r)}return n.size>0?n:R3}function kSt(e){if(!e)return 3e4;let t=e.trim();if(!/^\d+$/.test(t))return process.stderr.write(`matilda serve: MATILDA_SERVE_MCP_POOL_DRAIN_MS=${JSON.stringify(e)} is not a valid integer; using default 30000ms.
957
- `),3e4;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.min(6e5,Math.max(1e3,n)):3e4}function FSt(e){let t=process.env.MATILDA_SERVE_MCP_CLIENT_BUDGET,n=process.env.MATILDA_SERVE_MCP_BUDGET_MODE,o=t!==void 0&&t!==""?Number(t):void 0,r=n==="enforce"||n==="warn"||n==="off"?n:o!==void 0&&Number.isFinite(o)&&Number.isInteger(o)&&o>0?"warn":"off";if(!(r==="off"||o===void 0||!Number.isFinite(o)||!Number.isInteger(o)||o<=0))return new qX({clientBudget:o,mode:r,onEvent:e})}var pK=class{constructor(t,n,o,r){this.config=t;this.settings=n;this.argv=o;this.connection=r;process.env.MATILDA_SERVE_NO_MCP_POOL==="1"?(this.mcpPool=void 0,this.workspaceMcpBudget=void 0):(this.workspaceMcpBudget=FSt(s=>{this.broadcastBudgetEvent(s)}),this.mcpPool=new YX(this.config,{workspaceContext:this.config.getWorkspaceContext(),debugMode:this.config.getDebugMode(),pooledTransports:MSt(process.env.MATILDA_SERVE_MCP_POOL_TRANSPORTS),drainDelayMs:kSt(process.env.MATILDA_SERVE_MCP_POOL_DRAIN_MS),budget:this.workspaceMcpBudget}))}sessions=new Map;sessionRestoreCompletions=new Map;clientCapabilities;transcriptReadNegotiated=!1;transcriptChangedNegotiated=!1;backgroundExecutionNegotiated=!1;mcpPool;workspaceMcpBudget;getActiveSessions(){return[...this.sessions.values()]}async shutdownMcpPool(t=1e4){if(this.mcpPool)try{let n=await this.mcpPool.drainAll({force:!0,timeoutMs:t});(n.forced>0||n.errors.length>0)&&Kn.warn(`MCP pool drain: ${n.drained} clean, ${n.forced} timed out, ${n.errors.length} errors`)}catch(n){Kn.error(`MCP pool drainAll failed: ${n instanceof Error?n.message:String(n)}`)}}async closeStoredSession(t){let n=this.sessions.get(t);if(!n){this.mcpPool?.releaseSession(t);return}await n.shutdown();try{await n.getConfig().getToolRegistry()?.stop()}catch(o){Kn.debug(`Session ${t} tool registry stop during close failed: ${o instanceof Error?o.message:String(o)}`)}uf(n.getConfig(),t,{persist:!1}),this.mcpPool?.releaseSession(t),br.removeSession(t),this.sessions.delete(t)}async disposeSessions(){let t=await Promise.allSettled([...this.sessions.keys()].map(n=>this.closeStoredSession(n)));for(let n of t)n.status==="rejected"&&Kn.debug(`Session shutdown failed: ${n.reason instanceof Error?n.reason.message:String(n.reason)}`)}effectiveSettings(t=this.settings){return pR(t.merged,this.argv.channel)}getWorkspaceMcpBudget(){return this.workspaceMcpBudget}broadcastBudgetEvent(t){let n=Array.from(this.sessions.keys());for(let o of n)this.connection.extNotification("matilda/notify/session/mcp-budget-event",{v:1,sessionId:o,scope:"workspace",...t}).catch(r=>{Kn.debug(`MCP workspace budget event delivery to session ${o} failed (kind=${t.kind}): ${r instanceof Error?r.message:String(r)}`)})}async initialize(t){this.clientCapabilities=t.clientCapabilities;let n=t.clientCapabilities?._meta?.[x_e];this.transcriptReadNegotiated=!!n&&typeof n=="object"&&!Array.isArray(n)&&n.transcriptRead===dK,this.transcriptChangedNegotiated=this.transcriptReadNegotiated&&n.transcriptChanged===EG,this.backgroundExecutionNegotiated=!!n&&typeof n=="object"&&!Array.isArray(n)&&n.backgroundExecution===1;let o=sK({channel:this.config.getChannel(),openAIRequestProfile:gK(this.config)});return{protocolVersion:LZ,agentInfo:{name:"matilda-code",title:"Matilda",version:"0.21.7-nightly.20260923.69f69be4d"},authMethods:o,agentCapabilities:{...this.transcriptReadNegotiated||this.backgroundExecutionNegotiated?{_meta:{matilda:{...this.transcriptReadNegotiated?{transcriptRead:dK}:{},...this.transcriptChangedNegotiated?{transcriptChanged:EG}:{},...this.backgroundExecutionNegotiated?{backgroundExecution:1}:{}}}}:{},loadSession:!0,promptCapabilities:{image:!0,audio:!0,embeddedContext:!0},sessionCapabilities:{list:{},resume:{}},mcpCapabilities:{sse:!0,http:!0}}}}async authenticate({methodId:t}){let n=$o.nativeEnum(Vi).parse(t),o,r=s=>{o=s.verification_uri_complete,this.connection.extNotification("authenticate/update",{_meta:{authUri:o}})};n==="matilda-oauth"&&cf.once("auth-uri",r),await $7();try{await this.config.refreshAuth(n),this.settings.setValue("User","security.auth.selectedType",n)}finally{n==="matilda-oauth"&&cf.off("auth-uri",r)}}async newSession({cwd:t,mcpServers:n}){let o=await this.newSessionConfig(t,n);await this.ensureAuthenticated(o),this.setupFileSystem(o);let r=await this.createAndStoreSession(o),s=this.buildAvailableModels(o),i=this.buildModesData(o),a=this.buildConfigOptions(o);return{sessionId:r.getId(),models:s,modes:i,configOptions:a}}async loadSession(t){return this.restoreSession(t,!0)}async unstable_resumeSession(t){return this.restoreSession(t,!1)}async restoreSession(t,n){let o=this.sessionRestoreCompletions.get(t.sessionId),r,s=new Promise(i=>{r=i});this.sessionRestoreCompletions.set(t.sessionId,s);try{await o;let i=RBt(t),a=MBt(i);if(!await new vi(i,a).sessionExists(t.sessionId))throw Re.resourceNotFound(`session:${t.sessionId}`);let c=this.sessions.get(t.sessionId);c&&(await c.shutdown(),this.sessions.delete(t.sessionId));let u=await this.newSessionConfig(t.cwd,t.mcpServers??[],t.sessionId,!0,i,a),d;try{await this.ensureAuthenticated(u),this.setupFileSystem(u),d=await this.createAndStoreSession(u,n?u.getResumedSessionData()?.conversation:void 0)}catch(h){throw await u.getChatRecordingService()?.releaseTranscriptOwnership().catch(()=>{}),h}return await this.#e(u,d),{modes:this.buildModesData(u),models:this.buildAvailableModels(u),configOptions:this.buildConfigOptions(u)}}finally{r(),this.sessionRestoreCompletions.get(t.sessionId)===s&&this.sessionRestoreCompletions.delete(t.sessionId)}}async#e(t,n){try{let o=t.getSessionService().getWorktreeSessionPath(t.getSessionId()),r=await QB(o);r.contextMessage&&(n.pendingWorktreeNotice=r.contextMessage)}catch(o){Kn.warn(`ACP worktree restore failed: ${o}`)}}async unstable_listSessions(t){let n=t.cwd||process.cwd(),o=t._meta?.size,r=typeof o=="number"&&o>0?Math.floor(o):void 0,s=await ID(this.settings,n,()=>new vi(n).listSessions({cursor:t.cursor??void 0,size:r}));return{sessions:s.items.map(a=>({_meta:{createdAt:a.startTime,startTime:a.startTime,preview:a.prompt,...a.gitBranch?{gitBranch:a.gitBranch}:{},...a.titleSource?{titleSource:a.titleSource}:{}},cwd:a.cwd,sessionId:a.sessionId,title:a.customTitle||a.prompt||"(session)",updatedAt:new Date(a.mtime).toISOString()})),nextCursor:s.nextCursor!=null?String(s.nextCursor):void 0}}async setSessionMode(t){let n=this.sessions.get(t.sessionId);if(!n)throw Re.invalidParams(void 0,`Session not found for id: ${t.sessionId}`);return n.setMode(t)}async unstable_setSessionModel(t){let n=this.sessions.get(t.sessionId);if(!n)throw Re.invalidParams(void 0,`Session not found for id: ${t.sessionId}`);return await n.setModel(t)}async setSessionConfigOption(t){let{sessionId:n,configId:o,value:r}=t,s=this.sessions.get(n);if(!s)throw Re.invalidParams(void 0,`Session not found for id: ${n}`);switch(o){case"mode":{await this.setSessionMode({sessionId:n,modeId:r});break}case"model":{await s.setModel({sessionId:n,modelId:r},{persistDefault:!1});break}default:throw Re.invalidParams(void 0,`Unsupported configId: ${o}`)}return{configOptions:this.buildConfigOptions(s.getConfig())}}async prompt(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`Session not found: ${t.sessionId}`);try{return await n.prompt(t)}catch(o){throw o instanceof mF?new Re(o.status,o.message,{code:o.code}):o}}async cancel(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`Session not found: ${t.sessionId}`);await n.cancelPendingPrompt()}loadPermissionSettings(t){return this.settings=Jt(t),this.settings}buildPermissionSettings(t){return{user:{path:t.user.path,rules:xk(t.user.settings)},workspace:{path:t.workspace.path,rules:xk(t.workspace.settings)},merged:xk(t.merged),isTrusted:t.isTrusted}}async buildCoreSettings(t,n){let o=t.user.settings,r=t.workspace.settings,s=this.effectiveSettings(t),i=[];try{let f=new Fl({workspaceDir:n,isWorkspaceTrusted:t.isTrusted});await f.refreshCache(),i=f.getLoadedExtensions()}catch(f){Kn.warn("Extension loading failed, continuing without extensions:",f)}let a=await Promise.all(i.map(async f=>{let y=await TB(f.config,f.id,"user"),I=await TB(f.config,f.id,"workspace"),S=f.settings??[];return{id:f.id,name:f.name,version:f.version,isActive:f.isActive,path:f.path,commands:f.commands??[],skills:(f.skills??[]).map(x=>x.name),mcpServers:Object.keys(f.config.mcpServers??{}),settings:S.map(x=>{let w=y[x.envVar],T=I[x.envVar],v=T!==void 0,Q=w!==void 0,P=v?T:w,G=v?"workspace":Q?"user":void 0;return{name:x.name,description:x.description,envVar:x.envVar,sensitive:!!x.sensitive,userValue:x.sensitive?void 0:w,workspaceValue:x.sensitive?void 0:T,effectiveValue:x.sensitive?void 0:P,effectiveScope:G,hasUserValue:Q,hasWorkspaceValue:v}})}})),l=i.filter(f=>f.isActive),c=l.flatMap(f=>wk({mcpServers:f.config.mcpServers??{}},"extension").map(y=>({...y,server:{...y.server,extensionName:f.name}}))),u=l.flatMap(f=>bk({hooks:f.hooks??{}},"extension",f.name)),d=new Map;for(let f of wk(o,"user"))d.set(f.name,f);if(t.isTrusted)for(let f of wk(r,"workspace"))d.set(f.name,f);let h=[...bk(o,"user"),...t.isTrusted?bk(r,"workspace"):[]];return{user:{path:t.user.path,values:mK(o),mcpServers:wk(o,"user"),hooks:bk(o,"user")},workspace:{path:t.workspace.path,values:mK(r),mcpServers:wk(r,"workspace"),hooks:bk(r,"workspace")},merged:{values:mK(s),mcpServers:[...d.values(),...c],hooks:[...h,...u]},extensions:a,isTrusted:t.isTrusted}}syncLivePermissionManagers(t,n){for(let o of FBt){let r=new Set(t[o]),s=new Set(n[o]),i=t[o].filter(l=>!s.has(l)),a=n[o].filter(l=>!r.has(l));if(!(i.length===0&&a.length===0))for(let l of this.sessions.values()){let c=l.getConfig().getPermissionManager?.();if(c)try{for(let u of i)c.removePersistentRule(u,o);for(let u of a)c.addPersistentRule(u,o)}catch(u){Kn.warn(`Failed to sync permission rules to a live session: ${u instanceof Error?u.message:String(u)}`)}}}}workspaceCwd(t){return t.getTargetDir()}safeWorkspaceCwd(t){try{return this.workspaceCwd(t)}catch{return""}}mcpTransport(t){if(!t||typeof t!="object")return"unknown";let n=t;return n.type==="sdk"?"sdk":typeof n.httpUrl=="string"?"http":typeof n.url=="string"?"sse":typeof n.tcp=="string"?"websocket":typeof n.command=="string"?"stdio":"unknown"}mcpStatus(t){switch(t){case"connected":return"connected";case"connecting":return"connecting";case"disconnected":default:return"disconnected"}}mcpCellStatus(t,n){if(n)return"disabled";switch(t){case"connected":return"ok";case"connecting":return"warning";case"disconnected":default:return"error"}}discoveryState(){switch(SX()){case"in_progress":return"in_progress";case"completed":return"completed";case"not_started":default:return"not_started"}}async buildWorkspaceMcpStatus(t){try{let n=this.workspaceCwd(t),r=Jt(t.getTargetDir()).forScope("Workspace").settings,s=t.getMcpServers()??{},i={};try{let y=this.mcpPool?.getSnapshot();y&&(i=y.byName)}catch(y){process.stderr.write(`matilda serve: pool snapshot for workspace MCP status failed: ${y instanceof Error?y.message:String(y)}
957
+ `),3e4;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.min(6e5,Math.max(1e3,n)):3e4}function FSt(e){let t=process.env.MATILDA_SERVE_MCP_CLIENT_BUDGET,n=process.env.MATILDA_SERVE_MCP_BUDGET_MODE,o=t!==void 0&&t!==""?Number(t):void 0,r=n==="enforce"||n==="warn"||n==="off"?n:o!==void 0&&Number.isFinite(o)&&Number.isInteger(o)&&o>0?"warn":"off";if(!(r==="off"||o===void 0||!Number.isFinite(o)||!Number.isInteger(o)||o<=0))return new qX({clientBudget:o,mode:r,onEvent:e})}var pK=class{constructor(t,n,o,r){this.config=t;this.settings=n;this.argv=o;this.connection=r;process.env.MATILDA_SERVE_NO_MCP_POOL==="1"?(this.mcpPool=void 0,this.workspaceMcpBudget=void 0):(this.workspaceMcpBudget=FSt(s=>{this.broadcastBudgetEvent(s)}),this.mcpPool=new YX(this.config,{workspaceContext:this.config.getWorkspaceContext(),debugMode:this.config.getDebugMode(),pooledTransports:MSt(process.env.MATILDA_SERVE_MCP_POOL_TRANSPORTS),drainDelayMs:kSt(process.env.MATILDA_SERVE_MCP_POOL_DRAIN_MS),budget:this.workspaceMcpBudget}))}sessions=new Map;sessionRestoreCompletions=new Map;clientCapabilities;transcriptReadNegotiated=!1;transcriptChangedNegotiated=!1;backgroundExecutionNegotiated=!1;mcpPool;workspaceMcpBudget;getActiveSessions(){return[...this.sessions.values()]}async shutdownMcpPool(t=1e4){if(this.mcpPool)try{let n=await this.mcpPool.drainAll({force:!0,timeoutMs:t});(n.forced>0||n.errors.length>0)&&Kn.warn(`MCP pool drain: ${n.drained} clean, ${n.forced} timed out, ${n.errors.length} errors`)}catch(n){Kn.error(`MCP pool drainAll failed: ${n instanceof Error?n.message:String(n)}`)}}async closeStoredSession(t){let n=this.sessions.get(t);if(!n){this.mcpPool?.releaseSession(t);return}await n.shutdown();try{await n.getConfig().getToolRegistry()?.stop()}catch(o){Kn.debug(`Session ${t} tool registry stop during close failed: ${o instanceof Error?o.message:String(o)}`)}uf(n.getConfig(),t,{persist:!1}),this.mcpPool?.releaseSession(t),br.removeSession(t),this.sessions.delete(t)}async disposeSessions(){let t=await Promise.allSettled([...this.sessions.keys()].map(n=>this.closeStoredSession(n)));for(let n of t)n.status==="rejected"&&Kn.debug(`Session shutdown failed: ${n.reason instanceof Error?n.reason.message:String(n.reason)}`)}effectiveSettings(t=this.settings){return pR(t.merged,this.argv.channel)}getWorkspaceMcpBudget(){return this.workspaceMcpBudget}broadcastBudgetEvent(t){let n=Array.from(this.sessions.keys());for(let o of n)this.connection.extNotification("matilda/notify/session/mcp-budget-event",{v:1,sessionId:o,scope:"workspace",...t}).catch(r=>{Kn.debug(`MCP workspace budget event delivery to session ${o} failed (kind=${t.kind}): ${r instanceof Error?r.message:String(r)}`)})}async initialize(t){this.clientCapabilities=t.clientCapabilities;let n=t.clientCapabilities?._meta?.[x_e];this.transcriptReadNegotiated=!!n&&typeof n=="object"&&!Array.isArray(n)&&n.transcriptRead===dK,this.transcriptChangedNegotiated=this.transcriptReadNegotiated&&n.transcriptChanged===EG,this.backgroundExecutionNegotiated=!!n&&typeof n=="object"&&!Array.isArray(n)&&n.backgroundExecution===1;let o=sK({channel:this.config.getChannel(),openAIRequestProfile:gK(this.config)});return{protocolVersion:LZ,agentInfo:{name:"matilda-code",title:"Matilda",version:"0.21.7-preview.0"},authMethods:o,agentCapabilities:{...this.transcriptReadNegotiated||this.backgroundExecutionNegotiated?{_meta:{matilda:{...this.transcriptReadNegotiated?{transcriptRead:dK}:{},...this.transcriptChangedNegotiated?{transcriptChanged:EG}:{},...this.backgroundExecutionNegotiated?{backgroundExecution:1}:{}}}}:{},loadSession:!0,promptCapabilities:{image:!0,audio:!0,embeddedContext:!0},sessionCapabilities:{list:{},resume:{}},mcpCapabilities:{sse:!0,http:!0}}}}async authenticate({methodId:t}){let n=$o.nativeEnum(Vi).parse(t),o,r=s=>{o=s.verification_uri_complete,this.connection.extNotification("authenticate/update",{_meta:{authUri:o}})};n==="matilda-oauth"&&cf.once("auth-uri",r),await $7();try{await this.config.refreshAuth(n),this.settings.setValue("User","security.auth.selectedType",n)}finally{n==="matilda-oauth"&&cf.off("auth-uri",r)}}async newSession({cwd:t,mcpServers:n}){let o=await this.newSessionConfig(t,n);await this.ensureAuthenticated(o),this.setupFileSystem(o);let r=await this.createAndStoreSession(o),s=this.buildAvailableModels(o),i=this.buildModesData(o),a=this.buildConfigOptions(o);return{sessionId:r.getId(),models:s,modes:i,configOptions:a}}async loadSession(t){return this.restoreSession(t,!0)}async unstable_resumeSession(t){return this.restoreSession(t,!1)}async restoreSession(t,n){let o=this.sessionRestoreCompletions.get(t.sessionId),r,s=new Promise(i=>{r=i});this.sessionRestoreCompletions.set(t.sessionId,s);try{await o;let i=RBt(t),a=MBt(i);if(!await new vi(i,a).sessionExists(t.sessionId))throw Re.resourceNotFound(`session:${t.sessionId}`);let c=this.sessions.get(t.sessionId);c&&(await c.shutdown(),this.sessions.delete(t.sessionId));let u=await this.newSessionConfig(t.cwd,t.mcpServers??[],t.sessionId,!0,i,a),d;try{await this.ensureAuthenticated(u),this.setupFileSystem(u),d=await this.createAndStoreSession(u,n?u.getResumedSessionData()?.conversation:void 0)}catch(h){throw await u.getChatRecordingService()?.releaseTranscriptOwnership().catch(()=>{}),h}return await this.#e(u,d),{modes:this.buildModesData(u),models:this.buildAvailableModels(u),configOptions:this.buildConfigOptions(u)}}finally{r(),this.sessionRestoreCompletions.get(t.sessionId)===s&&this.sessionRestoreCompletions.delete(t.sessionId)}}async#e(t,n){try{let o=t.getSessionService().getWorktreeSessionPath(t.getSessionId()),r=await QB(o);r.contextMessage&&(n.pendingWorktreeNotice=r.contextMessage)}catch(o){Kn.warn(`ACP worktree restore failed: ${o}`)}}async unstable_listSessions(t){let n=t.cwd||process.cwd(),o=t._meta?.size,r=typeof o=="number"&&o>0?Math.floor(o):void 0,s=await ID(this.settings,n,()=>new vi(n).listSessions({cursor:t.cursor??void 0,size:r}));return{sessions:s.items.map(a=>({_meta:{createdAt:a.startTime,startTime:a.startTime,preview:a.prompt,...a.gitBranch?{gitBranch:a.gitBranch}:{},...a.titleSource?{titleSource:a.titleSource}:{}},cwd:a.cwd,sessionId:a.sessionId,title:a.customTitle||a.prompt||"(session)",updatedAt:new Date(a.mtime).toISOString()})),nextCursor:s.nextCursor!=null?String(s.nextCursor):void 0}}async setSessionMode(t){let n=this.sessions.get(t.sessionId);if(!n)throw Re.invalidParams(void 0,`Session not found for id: ${t.sessionId}`);return n.setMode(t)}async unstable_setSessionModel(t){let n=this.sessions.get(t.sessionId);if(!n)throw Re.invalidParams(void 0,`Session not found for id: ${t.sessionId}`);return await n.setModel(t)}async setSessionConfigOption(t){let{sessionId:n,configId:o,value:r}=t,s=this.sessions.get(n);if(!s)throw Re.invalidParams(void 0,`Session not found for id: ${n}`);switch(o){case"mode":{await this.setSessionMode({sessionId:n,modeId:r});break}case"model":{await s.setModel({sessionId:n,modelId:r},{persistDefault:!1});break}default:throw Re.invalidParams(void 0,`Unsupported configId: ${o}`)}return{configOptions:this.buildConfigOptions(s.getConfig())}}async prompt(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`Session not found: ${t.sessionId}`);try{return await n.prompt(t)}catch(o){throw o instanceof mF?new Re(o.status,o.message,{code:o.code}):o}}async cancel(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`Session not found: ${t.sessionId}`);await n.cancelPendingPrompt()}loadPermissionSettings(t){return this.settings=Jt(t),this.settings}buildPermissionSettings(t){return{user:{path:t.user.path,rules:xk(t.user.settings)},workspace:{path:t.workspace.path,rules:xk(t.workspace.settings)},merged:xk(t.merged),isTrusted:t.isTrusted}}async buildCoreSettings(t,n){let o=t.user.settings,r=t.workspace.settings,s=this.effectiveSettings(t),i=[];try{let f=new Fl({workspaceDir:n,isWorkspaceTrusted:t.isTrusted});await f.refreshCache(),i=f.getLoadedExtensions()}catch(f){Kn.warn("Extension loading failed, continuing without extensions:",f)}let a=await Promise.all(i.map(async f=>{let y=await TB(f.config,f.id,"user"),I=await TB(f.config,f.id,"workspace"),S=f.settings??[];return{id:f.id,name:f.name,version:f.version,isActive:f.isActive,path:f.path,commands:f.commands??[],skills:(f.skills??[]).map(x=>x.name),mcpServers:Object.keys(f.config.mcpServers??{}),settings:S.map(x=>{let w=y[x.envVar],T=I[x.envVar],v=T!==void 0,Q=w!==void 0,P=v?T:w,G=v?"workspace":Q?"user":void 0;return{name:x.name,description:x.description,envVar:x.envVar,sensitive:!!x.sensitive,userValue:x.sensitive?void 0:w,workspaceValue:x.sensitive?void 0:T,effectiveValue:x.sensitive?void 0:P,effectiveScope:G,hasUserValue:Q,hasWorkspaceValue:v}})}})),l=i.filter(f=>f.isActive),c=l.flatMap(f=>wk({mcpServers:f.config.mcpServers??{}},"extension").map(y=>({...y,server:{...y.server,extensionName:f.name}}))),u=l.flatMap(f=>bk({hooks:f.hooks??{}},"extension",f.name)),d=new Map;for(let f of wk(o,"user"))d.set(f.name,f);if(t.isTrusted)for(let f of wk(r,"workspace"))d.set(f.name,f);let h=[...bk(o,"user"),...t.isTrusted?bk(r,"workspace"):[]];return{user:{path:t.user.path,values:mK(o),mcpServers:wk(o,"user"),hooks:bk(o,"user")},workspace:{path:t.workspace.path,values:mK(r),mcpServers:wk(r,"workspace"),hooks:bk(r,"workspace")},merged:{values:mK(s),mcpServers:[...d.values(),...c],hooks:[...h,...u]},extensions:a,isTrusted:t.isTrusted}}syncLivePermissionManagers(t,n){for(let o of FBt){let r=new Set(t[o]),s=new Set(n[o]),i=t[o].filter(l=>!s.has(l)),a=n[o].filter(l=>!r.has(l));if(!(i.length===0&&a.length===0))for(let l of this.sessions.values()){let c=l.getConfig().getPermissionManager?.();if(c)try{for(let u of i)c.removePersistentRule(u,o);for(let u of a)c.addPersistentRule(u,o)}catch(u){Kn.warn(`Failed to sync permission rules to a live session: ${u instanceof Error?u.message:String(u)}`)}}}}workspaceCwd(t){return t.getTargetDir()}safeWorkspaceCwd(t){try{return this.workspaceCwd(t)}catch{return""}}mcpTransport(t){if(!t||typeof t!="object")return"unknown";let n=t;return n.type==="sdk"?"sdk":typeof n.httpUrl=="string"?"http":typeof n.url=="string"?"sse":typeof n.tcp=="string"?"websocket":typeof n.command=="string"?"stdio":"unknown"}mcpStatus(t){switch(t){case"connected":return"connected";case"connecting":return"connecting";case"disconnected":default:return"disconnected"}}mcpCellStatus(t,n){if(n)return"disabled";switch(t){case"connected":return"ok";case"connecting":return"warning";case"disconnected":default:return"error"}}discoveryState(){switch(SX()){case"in_progress":return"in_progress";case"completed":return"completed";case"not_started":default:return"not_started"}}async buildWorkspaceMcpStatus(t){try{let n=this.workspaceCwd(t),r=Jt(t.getTargetDir()).forScope("Workspace").settings,s=t.getMcpServers()??{},i={};try{let y=this.mcpPool?.getSnapshot();y&&(i=y.byName)}catch(y){process.stderr.write(`matilda serve: pool snapshot for workspace MCP status failed: ${y instanceof Error?y.message:String(y)}
958
958
  `)}let a,l,c,u=new Set,d="session",h=this.workspaceMcpBudget;if(h!==void 0)d="workspace",a=h.getReservedCount(),l=h.getBudget(),c=this.coerceBudgetMode(h.getMode()),u=new Set(h.getRefusedServerNames());else try{let y=t.getToolRegistry()?.getMcpClientManager();if(y){let I=y.getMcpClientAccounting();a=I.total,l=y.getMcpClientBudget(),c=y.getMcpBudgetMode(),u=new Set(I.refusedServerNames)}}catch(y){process.stderr.write(`matilda serve: getMcpClientAccounting failed: ${y instanceof Error?y.message:String(y)}
959
959
  `)}let f=new Sd;return{v:Tr,workspaceCwd:n,initialized:!0,discoveryState:this.discoveryState(),servers:await Promise.all(Object.entries(s).map(async([y,I])=>{let S=t.isMcpServerDisabled(y),x=!1;try{x=await f.getCredentials(y)!==null}catch{}let w=yA(y),v=u.has(y)&&!S,Q={kind:"mcp_server",status:v?"error":this.mcpCellStatus(w,S),name:y,mcpStatus:this.mcpStatus(w),transport:this.mcpTransport(I),disabled:S,hasOAuthTokens:x};v?(Q.errorKind="budget_exhausted",Q.disabledReason="budget",Q.hint="Raise --mcp-client-budget or remove servers from mcpServers config."):S&&(Q.disabledReason="config");let P=I&&typeof I=="object"?I.description:void 0,G=I&&typeof I=="object"?I.extensionName:void 0;if(typeof P=="string"&&(Q.description=P),typeof G=="string"&&(Q.extensionName=G),Q.source=Q.extensionName?"extension":r.mcpServers?.[y]?"project":"user",I&&typeof I=="object"){let J=I,O={};if(typeof J.command=="string"&&(O.command=J.command),Array.isArray(J.args)){let j=J.args.filter(_=>typeof _=="string");j.length>0&&(O.args=j)}typeof J.httpUrl=="string"&&(O.httpUrl=J.httpUrl),typeof J.url=="string"&&(O.url=J.url),typeof J.cwd=="string"&&(O.cwd=J.cwd),Object.keys(O).length>0&&(Q.config=O)}let Y=i[y];return Y&&(Q.entryCount=Y.entryCount,Q.entrySummary=Y.entrySummary.map(J=>({entryIndex:J.entryIndex,refs:J.refs,status:this.mcpStatus(J.status)}))),Q})),...a!==void 0?{clientCount:a}:{},...l!==void 0?{clientBudget:l}:{},...c!==void 0?{budgetMode:c}:{},...c!==void 0?{budgets:this.buildBudgetCells(a??0,l,c,Array.from(u).filter(y=>!t.isMcpServerDisabled(y)).length,d)}:{}}}catch(n){return{v:Tr,workspaceCwd:this.safeWorkspaceCwd(t),initialized:!0,servers:[],errors:[this.errorCell("mcp",n)]}}}buildWorkspaceMcpToolsStatus(t,n){let o=this.safeWorkspaceCwd(t);try{let r=t.getMcpServers()??{};if(!Object.prototype.hasOwnProperty.call(r,n))return{v:Tr,workspaceCwd:o,serverName:n,initialized:!0,acpChannelLive:!0,tools:[],errors:[{kind:"mcp_tools",status:"error",error:`MCP server not configured: ${n}`}]};let s=t.getToolRegistry(),i=s?.getAllTools()??[];if(i.filter(l=>l instanceof kg&&l.serverName===n).length===0)for(let l of this.getActiveSessions()){let c=l.getConfig().getToolRegistry(),u=c?.getAllTools()??[];if(u.some(d=>d instanceof kg&&d.serverName===n)){s=c,i=u;break}}let a=i.filter(l=>l instanceof kg&&l.serverName===n).map(l=>{let c=[];l.name||c.push("missing name"),l.description||c.push("missing description");let u=l.parameterSchema&&typeof l.parameterSchema=="object"&&!Array.isArray(l.parameterSchema)?l.parameterSchema:void 0,d=l.annotations&&typeof l.annotations=="object"&&!Array.isArray(l.annotations)?l.annotations:void 0;return{name:l.name||"(unnamed)",serverToolName:l.serverToolName,description:l.description,...u?{schema:u}:{},...d?{annotations:d}:{},isValid:c.length===0,...c.length>0?{invalidReason:c.join(", ")}:{}}});return{v:Tr,workspaceCwd:o,serverName:n,initialized:!0,acpChannelLive:!0,tools:a}}catch(r){return{v:Tr,workspaceCwd:o,serverName:n,initialized:!0,acpChannelLive:!0,tools:[],errors:[this.errorCell("mcp_tools",r)]}}}buildBudgetCells(t,n,o,r,s="session"){if(o==="off")return[];let i="ok",a,l;r>0?(i="error",a="budget_exhausted",l="Raise --mcp-client-budget or remove servers from mcpServers config."):n!==void 0&&n>0&&t>=DT*n&&(i="warning",l=`Live MCP clients are above ${Math.round(DT*100)}% of the configured budget.`);let c={kind:"mcp_budget",scope:s,status:i,liveCount:t,mode:o,refusedCount:r};return n!==void 0&&(c.budget=n),a&&(c.errorKind=a),l&&(c.hint=l),[c]}coerceBudgetMode(t){return t}errorCell(t,n,o){let r=o??lh(n);return{kind:t,status:"error",error:n instanceof Error?n.message:String(n),...r?{errorKind:r}:{}}}async buildWorkspaceSkillsStatus(t){let n=t.getSkillManager();if(!n)return{v:Tr,workspaceCwd:this.workspaceCwd(t),initialized:!0,skills:[]};try{let o=await n.listSkills();return{v:Tr,workspaceCwd:this.workspaceCwd(t),initialized:!0,skills:o.map(r=>{let s=r.disableModelInvocation!==!0;return{kind:"skill",status:s?"ok":"disabled",name:r.name,description:r.description,level:r.level,modelInvocable:s,...r.argumentHint?{argumentHint:r.argumentHint}:{},...r.model?{model:r.model}:{},...r.extensionName?{extensionName:r.extensionName}:{}}})}}catch(o){return{v:Tr,workspaceCwd:this.workspaceCwd(t),initialized:!0,skills:[],errors:[this.errorCell("skills",o)]}}}buildWorkspaceProvidersStatus(t){try{let n=this.workspaceCwd(t),o=t.getAuthType?.(),r=t.getActiveRuntimeModelSnapshot?.(),s=r?r.id:(t.getModel()||"").trim(),i=s.length>0,a=r?.authType??o,l=i&&a?sE(s,a):s||void 0,c=new Map;for(let f of t.getAllConfiguredModels()){let y=String(f.authType),I=c.get(y);I||(I={kind:"model_provider",status:"ok",authType:y,current:!1,models:[]},c.set(y,I));let S=f.isRuntimeModel&&f.runtimeSnapshotId?f.runtimeSnapshotId:f.id,x=sE(S,f.authType),w=a===f.authType&&i&&(s===S||s===f.id||l===x),T={modelId:x,baseModelId:l_e(S),name:f.label,...f.description!==void 0?{description:f.description}:{},contextLimit:f.contextWindowSize??E3(S),...f.modalities!==void 0?{modalities:f.modalities}:{},...f.baseUrl!==void 0?{baseUrl:wG(f.baseUrl)}:{},...f.envKey!==void 0?{envKey:f.envKey}:{},isCurrent:w,isRuntime:f.isRuntimeModel===!0};I.models.push(T),w&&(I.current=!0)}let d=t.getContentGeneratorConfig?.()?.baseUrl||void 0,h=this.effectiveSettings().fastModel||void 0;return{v:Tr,workspaceCwd:n,initialized:!0,...a||l?{current:{...a?{authType:String(a)}:{},...l?{modelId:l}:{},...d?{baseUrl:wG(d)}:{},...h?{fastModelId:h}:{}}}:{},providers:[...c.values()]}}catch(n){return{v:Tr,workspaceCwd:this.safeWorkspaceCwd(t),initialized:!0,providers:[],errors:[this.errorCell("providers",n)]}}}async buildAcpPreflightCells(t){let n={auth:()=>this.buildAuthPreflightCell(t),mcp_discovery:()=>this.buildMcpDiscoveryPreflightCell(t),skills:()=>this.buildSkillsPreflightCell(t),providers:()=>this.buildProvidersPreflightCell(t),tool_registry:()=>this.buildToolRegistryPreflightCell(t),egress:()=>({kind:"egress",status:"not_started",locality:"acp",hint:"egress probing not yet implemented"})},o=[];for(let r of YZ)o.push(await n[r]());return{cells:o}}acpCell(t,n){return{kind:t,locality:"acp",...n}}buildAuthPreflightCell(t){try{let n=t.getAuthType?.();if(!n)return this.acpCell("auth",{status:"warning",errorKind:"auth_env_error",error:"No auth method configured.",hint:"Run `matilda` and complete the auth flow, or set a provider env var.",detail:{source:"none",hasToken:!1}});let o=kBt[String(n)]??[],r=o.find(i=>!!process.env[i]),s=!!r;return o.length===0?this.acpCell("auth",{status:"unknown",hint:"Auth credentials for this provider are not env-keyed; full validation runs at session start.",detail:{source:String(n),hasToken:"unknown",envVarCandidates:[]}}):this.acpCell("auth",{status:s?"ok":"warning",...s?{}:{errorKind:"auth_env_error",error:`None of the env vars [${o.join(", ")}] is set for authType '${String(n)}'.`,hint:`Set one of: ${o.join(" / ")}.`},detail:{source:String(n),hasToken:s,envVarCandidates:o,...r?{presentVar:r}:{}}})}catch(n){let o=lh(n)??"auth_env_error";return this.acpCell("auth",{status:"error",error:n instanceof Error?n.message:String(n),errorKind:o})}}buildMcpDiscoveryPreflightCell(t){try{let n=this.discoveryState(),o=t.getMcpServers()??{},r=Object.keys(o).length,s={connected:0,connecting:0,disconnected:0,unknown:0};for(let a of Object.keys(o))switch(yA(a)){case"connected":s.connected+=1;break;case"connecting":s.connecting+=1;break;case"disconnected":s.disconnected+=1;break;default:s.unknown+=1;break}let i={discoveryState:n,total:r,...s};return r===0?this.acpCell("mcp_discovery",{status:"ok",detail:i,hint:"No MCP servers configured."}):s.unknown>0?this.acpCell("mcp_discovery",{status:"warning",errorKind:"protocol_error",error:`${s.unknown}/${r} MCP server(s) in an unrecognized state.`,detail:i}):s.disconnected>0&&n==="completed"?this.acpCell("mcp_discovery",{status:"error",errorKind:"protocol_error",error:`${s.disconnected}/${r} MCP server(s) disconnected after discovery.`,detail:i}):s.connecting>0||n==="in_progress"?this.acpCell("mcp_discovery",{status:"warning",error:`${s.connecting}/${r} MCP server(s) still connecting.`,detail:i}):this.acpCell("mcp_discovery",{status:"ok",detail:i})}catch(n){let o=lh(n);return this.acpCell("mcp_discovery",{status:"error",error:n instanceof Error?n.message:String(n),...o?{errorKind:o}:{}})}}async buildSkillsPreflightCell(t){try{let n=t.getSkillManager();if(!n)return this.acpCell("skills",{status:"disabled",hint:"No SkillManager attached to Config; verify settings if you expected skills to load.",detail:{configured:!1}});let o=await n.listSkills();return this.acpCell("skills",{status:"ok",detail:{count:o.length}})}catch(n){let o=lh(n);return this.acpCell("skills",{status:"error",error:n instanceof Error?n.message:String(n),...o?{errorKind:o}:{}})}}buildProvidersPreflightCell(t){try{let n=t.getAllConfiguredModels(),o=t.getAuthType?.();if(n.length===0)return this.acpCell("providers",{status:o?"error":"disabled",...o?{errorKind:"auth_env_error"}:{},...o?{error:`No model configured for authType ${String(o)}.`}:{},detail:{count:0,authType:o?String(o):null}});let r=new Set(n.map(s=>String(s.authType)));return this.acpCell("providers",{status:"ok",detail:{count:n.length,providers:[...r]}})}catch(n){let o=lh(n)??"auth_env_error";return this.acpCell("providers",{status:"error",error:n instanceof Error?n.message:String(n),errorKind:o})}}buildToolRegistryPreflightCell(t){try{let n=t.getToolRegistry();if(!n)return this.acpCell("tool_registry",{status:"error",errorKind:"protocol_error",error:"Tool registry is not initialized."});let o=n.getAllTools();return this.acpCell("tool_registry",{status:"ok",detail:{count:o.length}})}catch(n){let o=lh(n)??"protocol_error";return this.acpCell("tool_registry",{status:"error",error:n instanceof Error?n.message:String(n),errorKind:o})}}buildWorkspaceToolsStatus(t){let n=this.safeWorkspaceCwd(t);try{let o=t.getToolRegistry();if(!o)return{v:Tr,workspaceCwd:n,initialized:!0,acpChannelLive:!0,tools:[],errors:[{kind:"tools",status:"error",errorKind:"protocol_error",error:"Tool registry is not initialized."}]};let r=t.getDisabledTools(),s=o.getAllTools().filter(i=>!("serverName"in i)).map(i=>({name:i.name,displayName:i.displayName,description:i.description,enabled:!r.has(i.name)}));return{v:Tr,workspaceCwd:n,initialized:!0,acpChannelLive:!0,tools:s}}catch(o){let r=lh(o)??"protocol_error";return{v:Tr,workspaceCwd:n,initialized:!0,acpChannelLive:!0,tools:[],errors:[{kind:"tools",status:"error",error:o instanceof Error?o.message:String(o),errorKind:r}]}}}sessionOrThrow(t){let n=this.sessions.get(t);if(!n)throw Re.invalidParams(void 0,`Session not found for id: ${t}`);return n}buildSessionContextStatus(t){let o=this.sessionOrThrow(t).getConfig();return{v:Tr,sessionId:t,workspaceCwd:this.workspaceCwd(o),state:{models:this.buildAvailableModels(o),modes:this.buildModesData(o),configOptions:this.buildConfigOptions(o)}}}async buildSessionContextUsageStatus(t,n){let r=this.sessionOrThrow(t).getConfig(),s;try{s=await KZ(r,n)}catch(i){console.warn("[context-usage] collectContextData failed:",i),s={type:"context_usage",modelName:r.getModel()||"unknown",totalTokens:0,contextWindowSize:0,breakdown:{systemPrompt:0,builtinTools:0,mcpTools:0,memoryFiles:0,skills:0,messages:0,freeSpace:0,autocompactBuffer:0},builtinTools:[],mcpTools:[],memoryFiles:[],skills:[],isEstimated:!0,showDetails:n}}return{v:Tr,sessionId:t,workspaceCwd:this.workspaceCwd(r),usage:{modelName:s.modelName,totalTokens:s.totalTokens,contextWindowSize:s.contextWindowSize,breakdown:s.breakdown,builtinTools:s.builtinTools,mcpTools:s.mcpTools,memoryFiles:s.memoryFiles,skills:s.skills,isEstimated:s.isEstimated,showDetails:s.showDetails},formattedText:zZ(s)}}async buildSessionSupportedCommandsStatus(t){let n=this.sessionOrThrow(t),{availableCommands:o,availableSkills:r}=await uK(n.getConfig());return{v:Tr,sessionId:t,availableCommands:o,availableSkills:r??[]}}buildSessionTasksStatus(t){let n=this.sessionOrThrow(t);return m_e(t,n.getConfig())}buildSessionStatsStatus(t){let n=this.sessionOrThrow(t),o=n.getConfig(),r=br.getMetricsForSession(t),s=Date.now(),i=n.getCreatedAt(),a={};for(let[c,u]of Object.entries(r.models))a[c]={api:{...u.api},tokens:{...u.tokens}};let l={};for(let[c,u]of Object.entries(r.tools.byName))l[c]={count:u.count,success:u.success,fail:u.fail,durationMs:u.durationMs,decisions:{accept:u.decisions.accept,reject:u.decisions.reject,modify:u.decisions.modify,auto_accept:u.decisions.auto_accept}};return{v:Tr,sessionId:t,workspaceCwd:this.workspaceCwd(o),sessionStartTimeMs:i,durationMs:s-i,promptCount:n.getTurnCount(),models:a,tools:{totalCalls:r.tools.totalCalls,totalSuccess:r.tools.totalSuccess,totalFail:r.tools.totalFail,totalDurationMs:r.tools.totalDurationMs,byName:l},files:{totalLinesAdded:r.files.totalLinesAdded,totalLinesRemoved:r.files.totalLinesRemoved}}}serializeHookConfig(t){switch(t.type){case"command":return{type:"command",command:t.command,...t.name!==void 0?{name:t.name}:{},...t.description!==void 0?{description:t.description}:{},...t.timeout!==void 0?{timeout:t.timeout}:{},...t.env?{env:t.env}:{},...t.async!==void 0?{async:t.async}:{},...t.shell?{shell:t.shell}:{},...t.statusMessage!==void 0?{statusMessage:t.statusMessage}:{}};case"http":return{type:"http",url:t.url,...t.name!==void 0?{name:t.name}:{},...t.description!==void 0?{description:t.description}:{},...t.timeout!==void 0?{timeout:t.timeout}:{},...t.headers?{headers:t.headers}:{},...t.allowedEnvVars?{allowedEnvVars:t.allowedEnvVars}:{},...t.if!==void 0?{if:t.if}:{},...t.statusMessage!==void 0?{statusMessage:t.statusMessage}:{},...t.once!==void 0?{once:t.once}:{}};case"function":return{type:"function",...t.id!==void 0?{id:t.id}:{},...t.name!==void 0?{name:t.name}:{},...t.description!==void 0?{description:t.description}:{},...t.timeout!==void 0?{timeout:t.timeout}:{},...t.errorMessage!==void 0?{errorMessage:t.errorMessage}:{},...t.statusMessage!==void 0?{statusMessage:t.statusMessage}:{}};case"prompt":return{type:"prompt",prompt:t.prompt,...t.name!==void 0?{name:t.name}:{},...t.description!==void 0?{description:t.description}:{},...t.timeout!==void 0?{timeout:t.timeout}:{},...t.model?{model:t.model}:{},...t.statusMessage!==void 0?{statusMessage:t.statusMessage}:{}};default:return{type:t.type}}}buildWorkspaceHooksStatus(t){try{let n=this.workspaceCwd(t),o=t.getDisableAllHooks(),r=t.getHookSystem();if(!r)return{v:Tr,workspaceCwd:n,initialized:!0,disabled:o,hooks:[],events:hN};let i=r.getAllHooks().map(a=>({kind:"hook",eventName:a.eventName,config:this.serializeHookConfig(a.config),source:a.source,...a.matcher?{matcher:a.matcher}:{},...a.sequential!==void 0?{sequential:a.sequential}:{},enabled:a.enabled}));return{v:Tr,workspaceCwd:n,initialized:!0,disabled:o,hooks:i,events:hN}}catch(n){let o=!1;try{o=t.getDisableAllHooks()}catch{}return{v:Tr,workspaceCwd:this.safeWorkspaceCwd(t),initialized:!1,disabled:o,hooks:[],events:hN,errors:[this.errorCell("hooks",n)]}}}buildSessionHooksStatus(t){let o=this.sessionOrThrow(t).getConfig();try{let r=this.workspaceCwd(o),s=o.getDisableAllHooks(),i=o.getHookSystem();if(!i)return{v:Tr,sessionId:t,workspaceCwd:r,disabled:s,hooks:[]};let l=i.getSessionHooksManager().getAllSessionHooks(t).map(c=>({kind:"hook",eventName:c.eventName,config:this.serializeHookConfig(c.config),source:"session",...c.matcher?{matcher:c.matcher}:{},...c.sequential!==void 0?{sequential:c.sequential}:{},enabled:!0,hookId:c.hookId,...c.skillRoot?{skillRoot:c.skillRoot}:{}}));return{v:Tr,sessionId:t,workspaceCwd:r,disabled:s,hooks:l}}catch(r){let s=!1;try{s=o.getDisableAllHooks()}catch{}return{v:Tr,sessionId:t,workspaceCwd:this.safeWorkspaceCwd(o),disabled:s,hooks:[],errors:[this.errorCell("session_hooks",r)]}}}buildWorkspaceExtensionsStatus(t){try{let n=this.workspaceCwd(t),r=t.getExtensions().map(s=>{let i={mcpServerCount:s.mcpServers?Object.keys(s.mcpServers).length:0,skillCount:s.skills?.length??0,agentCount:s.agents?.length??0,hookCount:s.hooks?Object.values(s.hooks).reduce((a,l)=>a+(l?.length??0),0):0,commandCount:s.commands?.length??0,contextFileCount:s.contextFiles.length,channelCount:s.channels?Object.keys(s.channels).length:0,hasSettings:(s.settings?.length??0)>0};return{kind:"extension",id:s.id,name:s.name,version:s.version,isActive:s.isActive,path:s.path,...s.installMetadata?.source?{source:xd(s.installMetadata.source)}:{},...s.installMetadata?.type?{installType:s.installMetadata.type}:{},...s.installMetadata?.originSource?{originSource:s.installMetadata.originSource}:{},...s.installMetadata?.ref?{ref:s.installMetadata.ref}:{},...s.installMetadata?.autoUpdate!==void 0?{autoUpdate:s.installMetadata.autoUpdate}:{},capabilities:i}});return{v:Tr,workspaceCwd:n,initialized:!0,extensions:r}}catch(n){return{v:Tr,workspaceCwd:this.safeWorkspaceCwd(t),initialized:!1,extensions:[],errors:[this.errorCell("extensions",n)]}}}async installSkillFromUrl(t){let n=this.config.getSkillManager();if(!n)throw Re.invalidParams(void 0,"SkillManager is not available");let o=await sSt(t.sourceUrl),r=Po.join(Tt.getGlobalMatildaDir(),"skills"),s=h_e(r,t.slug),i=Po.join(s,"SKILL.md"),a=n.parseSkillContent(o.skillContent,i,"user");if(a.name!==t.slug)throw Re.invalidParams(void 0,`Skill name "${a.name}" does not match requested slug "${t.slug}"`);let l=`${s}.installing-${process.pid}-${Date.now()}`;try{await Va.rm(l,{recursive:!0,force:!0});for(let c of o.files){let u=iSt(l,c.relativePath);await Va.mkdir(Po.dirname(u),{recursive:!0}),await Va.writeFile(u,c.content)}await Va.rm(s,{recursive:!0,force:!0}),await Va.rename(l,s)}catch(c){throw await Va.rm(l,{recursive:!0,force:!0}).catch(()=>{}),c}return await n.refreshCache(),{id:t.id,slug:a.name,installed:!0,installedPath:i,sourceUrl:t.sourceUrl}}async deleteGlobalSkill(t){let n=this.config.getSkillManager();if(!n)throw Re.invalidParams(void 0,"SkillManager is not available");let{skillDir:o,skillFile:r,content:s}=await this.readManagedSkillFile(t.slug,"global",n),i=n.parseSkillContent(s,r,"user");if(i.name!==t.slug)throw Re.invalidParams(void 0,`Skill name "${i.name}" does not match requested slug "${t.slug}"`);let a=Po.resolve(o),l=Po.resolve(r),c=Po.resolve(Tt.getGlobalMatildaDir());if(!(l===Po.join(a,"SKILL.md"))||a===Po.parse(a).root||a===c)throw Re.invalidParams(void 0,`Refusing to delete unexpected skill directory: ${o}`);return await Va.rm(o,{recursive:!0,force:!0}),await n.refreshCache(),{slug:t.slug,deleted:!0}}async readManagedSkillFile(t,n,o,r){if(n==="global"){let c=h_e(Po.join(Tt.getGlobalMatildaDir(),"skills"),t),u=Po.join(c,"SKILL.md"),d=await Va.readFile(u,"utf8").catch(()=>{});if(d!==void 0)return{skillDir:c,skillFile:u,content:d}}if(n==="project"&&r?.trim()){let c=await this.findProjectSkillFileFromCwd(t,r,o);if(c)return c}let s=n==="project"?"project":"user",a=(await o.listSkills({level:s})).find(c=>c.name===t)?.filePath;if(!a)throw Re.invalidParams(void 0,`${n==="project"?"Project":"Global"} skill not found: ${t}`);let l=await Va.readFile(a,"utf8").catch(()=>{throw Re.invalidParams(void 0,`${n==="project"?"Project":"Global"} skill not found: ${t}`)});return{skillDir:Po.dirname(a),skillFile:a,content:l}}async findProjectSkillFileFromCwd(t,n,o){let r=Po.resolve(n);for(let s of _Bt){let i=Po.join(r,s,LBt),c=(await o.loadSkillsFromDir(i,"project")).find(d=>d.name===t)?.filePath;if(!c)continue;let u=await Va.readFile(c,"utf8").catch(()=>{throw Re.invalidParams(void 0,`Project skill not found: ${t}`)});return{skillDir:Po.dirname(c),skillFile:c,content:u}}}async setGlobalSkillEnabled(t,n){let o=this.config.getSkillManager();if(!o)throw Re.invalidParams(void 0,"SkillManager is not available");let{skillFile:r,content:s}=await this.readManagedSkillFile(t.slug,t.scope,o,n),i=t.scope==="project"?"project":"user",a=o.parseSkillContent(s,r,i);if(a.name!==t.slug)throw Re.invalidParams(void 0,`Skill name "${a.name}" does not match requested slug "${t.slug}"`);let l=WBt(s,t.enabled);if(o.parseSkillContent(l,r,i),Po.basename(r)!=="SKILL.md")throw Re.invalidParams(void 0,`Refusing to write to unexpected skill file: ${r}`);return await Va.writeFile(r,l,"utf8"),await o.refreshCache(),{slug:t.slug,enabled:t.enabled,installedPath:r}}async extMethod(t,n){let o=typeof n.cwd=="string"?n.cwd:void 0,r=o||process.cwd(),s=/^[0-9a-fA-F-]{32,36}$/;switch(t){case"matilda/session/attach":{if(!this.backgroundExecutionNegotiated)throw Re.methodNotFound(t);let i=n.sessionId;if(typeof i!="string"||!s.test(i))throw Re.invalidParams(void 0,"Invalid or missing sessionId");if(this.sessionRestoreCompletions.has(i))throw new Re(-32e3,"Session restore is in progress",{errorKind:"session_busy"});let a=this.sessions.get(i);if(!a)throw Re.resourceNotFound(`session:${i}`);return a.attachClient(),{}}case"matilda/workspace/getRoots":{let i=typeof n.sessionId=="string"?n.sessionId:void 0,a=i?this.sessions.get(i):void 0;if(i&&!a)throw Re.invalidParams(void 0,`Unknown session: ${i}`);let l=a?.getConfig()??this.config;return{workspaceId:process.env.MATILDA_DESKTOP_WORKSPACE_ID??null,revision:process.env.MATILDA_DESKTOP_DIRECTORY_REVISION??null,canonicalRoots:l.getWorkspaceContext().getDirectories(),restrictiveSandbox:l.isRestrictiveSandbox(),sandbox:process.env.SANDBOX??null,sandboxNonce:process.env.MATILDA_DESKTOP_SANDBOX_ACTIVE??null,seatbeltProfile:process.env.SEATBELT_PROFILE??null}}case"matilda/providers/list":{let i=this.effectiveSettings();return{providers:CT.map(a=>fSt(a,i))}}case"matilda/providers/connect":{let i=Bp(n.providerId,"providerId"),a=Ez(i);if(!a)throw Re.invalidParams(void 0,`Unknown provider: ${i}`);let l=pSt(a,n,mSt(a,this.settings.merged)),c=hSt(n.scope),u=Fg(a,l);return await th(u,{settings:ah(this.settings,c),reloadModelProviders:d=>{let h=pR({...this.settings.merged,modelProviders:d},this.argv.channel);this.config.reloadModelProvidersConfig(h.modelProviders)},syncAuthState:(d,h)=>this.config.getModelsConfig().syncAfterAuthRefresh(d,h),refreshAuth:d=>this.config.refreshAuth(d)}),{success:!0,providerId:a.id,providerLabel:a.label,authType:u.authType,modelId:u.modelSelection?.modelId}}case"matilda/skills/install":return this.installSkillFromUrl(PBt(n));case"matilda/skills/delete":return this.deleteGlobalSkill(UBt(n));case"matilda/skills/setEnabled":return this.setGlobalSkillEnabled(HBt(n),o);case"matilda/settings/getMemory":{let i=Jt(r);return this.settings=i,{settings:p_e(this.effectiveSettings(i).memory)}}case"matilda/settings/setMemory":{let i=Fr(n.updates),a=Jt(r);for(let l of OBt)if(i[l]!==void 0){if(typeof i[l]!="boolean")throw Re.invalidParams(void 0,`Invalid memory setting '${l}': expected boolean`);a.setValue("User",`memory.${l}`,i[l])}return this.settings=a,{settings:p_e(this.effectiveSettings(a).memory)}}case"matilda/settings/getPath":return{path:this.settings.user.path};case"matilda/settings/getMemoryPaths":{let i=typeof n.projectRoot=="string"?n.projectRoot:r;return{paths:await TSt({cwd:r,projectRoot:i})}}case Nl.workspaceMcp:return await this.buildWorkspaceMcpStatus(this.config);case Nl.workspaceMcpTools:{let i=n.serverName;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing serverName");return this.buildWorkspaceMcpToolsStatus(this.config,i)}case Nl.workspaceSkills:return await this.buildWorkspaceSkillsStatus(this.config);case Nl.workspaceTools:return this.buildWorkspaceToolsStatus(this.config);case Nl.workspaceProviders:return this.buildWorkspaceProvidersStatus(this.config);case Nl.workspacePreflight:return await this.buildAcpPreflightCells(this.config);case Nl.sessionContext:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return this.buildSessionContextStatus(i)}case Nl.sessionContextUsage:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return await this.buildSessionContextUsageStatus(i,n.detail===!0)}case Nl.sessionSupportedCommands:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return await this.buildSessionSupportedCommandsStatus(i)}case Nl.sessionTasks:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return this.buildSessionTasksStatus(i)}case Nl.sessionStats:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return this.buildSessionStatsStatus(i)}case Nl.sessionRewindSnapshots:{let i=n.sessionId;if(typeof i!="string"||!s.test(i))throw Re.invalidParams(void 0,"Invalid or missing sessionId");let a=this.sessions.get(i);if(!a)throw Re.invalidParams(void 0,`Session not found for id: ${i}`);let l=a.getConfig().getFileHistoryService(),c=l.getSnapshots(),u=i+"########";return{snapshots:await Promise.all(c.map((h,f)=>({s:h,idx:f})).filter(({s:h})=>h.promptId.startsWith(u)&&/^\d+$/.test(h.promptId.slice(u.length))).map(async({s:h,idx:f})=>{let y=await l.getDiffStats(h.promptId);return{promptId:h.promptId,turnIndex:f,timestamp:h.timestamp.toISOString(),diffStats:{filesChanged:y?.filesChanged?.length??0,insertions:y?.insertions??0,deletions:y?.deletions??0}}}))}}case Nl.workspaceHooks:return this.buildWorkspaceHooksStatus(this.config);case Nl.sessionHooks:{let i=n.sessionId;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing sessionId");return this.buildSessionHooksStatus(i)}case Nl.workspaceExtensions:return this.buildWorkspaceExtensionsStatus(this.config);case ba.workspaceMcpRestart:{let i=n.serverName;if(typeof i!="string"||i.length===0)throw Re.invalidParams(void 0,"Invalid or missing serverName");let a,l=n.entryIndex;if(l!==void 0&&l!=="*"){if(typeof l!="number"||!Number.isInteger(l)||l<0)throw Re.invalidParams(void 0,'entryIndex must be a non-negative integer or "*"');a=l}let c=this.config.getMcpServers()??{};if(!Object.prototype.hasOwnProperty.call(c,i))throw new Re(-32004,`MCP server not configured: ${JSON.stringify(i)}`,{errorKind:"mcp_server_not_found",serverName:i});if(this.config.isMcpServerDisabled(i))return{serverName:i,restarted:!1,skipped:!0,reason:"disabled"};let u=this.config.getToolRegistry()?.getMcpClientManager();if(!u)throw Re.internalError(void 0,"McpClientManager unavailable on this Config");if(u.isServerDiscovering(i))return{serverName:i,restarted:!1,skipped:!0,reason:"in_flight"};let d=u.getMcpClientAccounting(),h=u.getMcpClientBudget();if(u.getMcpBudgetMode()==="enforce"&&h!==void 0&&!d.reservedSlots.includes(i)&&d.reservedSlots.length>=h)return{serverName:i,restarted:!1,skipped:!0,reason:"budget_would_exceed"};try{let v=Jt(this.config.getTargetDir()).merged.tools?.disabled;v!==void 0&&!Array.isArray(v)&&process.stderr.write(`matilda serve: MCP restart for ${JSON.stringify(i)}: tools.disabled has unexpected type ${typeof v}; clearing disabled set \u2014 check settings.json. Expected an array of strings.
960
960
  `);let Q=RQ(v);this.config.setDisabledTools(new Set(Q))}catch(T){process.stderr.write(`matilda serve: MCP restart for ${JSON.stringify(i)} could not refresh disabledTools from merged settings (${T instanceof Error?T.message:String(T)}); proceeding with the bootstrap snapshot \u2014 recently toggled tools may not take effect until daemon restart.
@@ -976,7 +976,7 @@ Reason: ${t}${t instanceof Error&&t.stack?`
976
976
  Stack trace:
977
977
  ${t.stack}`:""}`;hs.emit("log-error",o),e||(e=!0,hs.emit("open-debug-console"))})}function WSt(e){return e==="SIGINT"?130:143}function jSt(e){let t=!1,n=s=>{process.stdin.isTTY&&process.stdin.setRawMode(e),!t&&(t=!0,Qa().catch(i=>{iE.error(`Error during ${s} cleanup:`,i)}).finally(()=>{process.exit(WSt(s))}))},o=()=>{n("SIGTERM")},r=()=>{n("SIGINT")};return process.once("SIGTERM",o),process.once("SIGINT",r),()=>{process.removeListener("SIGTERM",o),process.removeListener("SIGINT",r)}}async function YSt(e,t,n,o=process.cwd(),r){let s=await RT();JSt(OSt(o),t);try{let I=e.getSessionId(),S=e.storage.getRuntimeStatusPath(I);await mz(S,{sessionId:I,workDir:e.getTargetDir(),matildaVersion:s}),e.markRuntimeStatusEnabled()}catch{}let i=process.stdout.isTTY&&!e.getScreenReader()?o_e(process.stdout):()=>{},a=process.stdout.isTTY&&!e.getScreenReader()?r_e(process.stdout):()=>{},l=process.stdout.isTTY&&!e.getScreenReader()?Mve(process.stdout):()=>{},c=VR(e,{version:s}),u=null,d=e.getInputFile?.();if(d)try{u=new lG(d)}catch(I){iE.error("Failed to initialize remote input watcher:",I),Ge(`Warning: remote input disabled \u2014 ${I instanceof Error?I.message:String(I)}`)}let h=eK(),f=()=>{let I=v1e(),S=parseInt(process.versions.node.split(".")[0],10);return(0,uA.jsx)(WV.Provider,{value:u,children:(0,uA.jsx)(yP.Provider,{value:c,children:(0,uA.jsx)(Ey.Provider,{value:t,children:(0,uA.jsx)(bO,{kittyProtocolEnabled:I.enabled,config:e,debugKeystrokeLogging:t.merged.general?.debugKeystrokeLogging,pasteWorkaround:process.platform==="win32"||S<20,initialCapturedInput:h,children:(0,uA.jsx)(pQe,{sessionId:e.getSessionId(),children:(0,uA.jsx)(Zve,{settings:t,children:(0,uA.jsx)(sFe,{config:e,children:(0,uA.jsx)(wke,{config:e,children:(0,uA.jsx)(T1e,{config:e,settings:t,startupWarnings:n,version:s,initializationResult:r})})})})})})})})})},y=hQ(process.env.DEBUG?(0,uA.jsx)(G_e.default.StrictMode,{children:(0,uA.jsx)(f,{})}):(0,uA.jsx)(f,{}),{exitOnCtrlC:!1,isScreenReaderEnabled:e.getScreenReader()});Ta("first_paint"),AO().then(I=>{jNe(I,t,e.getProjectRoot())}).catch(I=>{iE.warn(`Update check failed: ${I}`)}),DA(async()=>{u?.shutdown(),await c?.shutdown(),Txe(),y.unmount(),l(),a(),i()})}async function W_e(){LBe(),Ta("main_entry"),see()&&z7((i,a)=>oee(i,a)),GSt(),G1e(),process.argv.includes("--bare")&&(process.env[N3]="1"),QZ();let e=await Oye();Ta("after_parse_arguments"),W1e(e)&&(tt(j1e()),process.exit(0)),VE(e.bare)&&(process.env[N3]="1");let t=VE(e.bare)?vT():Jt();t.corruptedPath&&(process.env[G3]=t.corruptedPath,process.env[W3]=t.wasRecovered?"1":"0"),await iee(),Ta("after_load_settings");let n=j3(t);for(let i of n)Ge(i);t.corruptedPath&&Ge("Warning: Settings file had invalid JSON and was reset. A copy of the corrupted file has been saved at: "+t.corruptedPath),e.listExtensions&&(await WW(),process.exit(0)),!VE(e.bare)&&process.stdin.isTTY&&process.stdout.isTTY&&!e.prompt&&!e.promptInteractive&&!e.inputFile&&t.merged.general?.enableAutoUpdate!==!1&&await Rpe()&&process.exit(0),e.promptInteractive&&!process.stdin.isTTY&&(Ge("Error: The --prompt-interactive flag cannot be used when input is piped from stdin."),process.exit(1));let o=P5(e);_St.setDefaultResultOrder(USt(t.merged.advanced?.dnsResolutionOrder)),In.loadCustomThemes(t.merged.ui?.customThemes);let r=t.merged.ui?.theme;if(r&&r!==vc?In.setActiveTheme(r)||Ge(`Warning: Theme "${r}" not found.`):In.setActiveTheme(vc),!process.env.SANDBOX){let i=t.merged.advanced?.autoConfigureMemory?HSt(o):[],a=await o_(t.merged,e);if(a){let l=await CR(t.merged,e,void 0,[],{userHooks:t.getUserHooks(),projectHooks:t.getProjectHooks()},hR(t));if(!t.merged.security?.auth?.useExternal)try{let S=l.getModelsConfig().getCurrentAuthType();if(S){let x=AS(S,l);if(x)throw new Error(x);await l.refreshAuth(S)}}catch(S){Ge(`Error authenticating: ${S}`),process.exit(1)}let c=e.inputFormat,u=e.acp||e.experimentalAcp,d="";H_e(e,c,!!u,process.stdin.isTTY)&&(d=await JV());let h=(S,x)=>{let w=[...S];if(x){let T=w.findIndex(v=>v==="--prompt"||v==="-p");T>-1&&w.length>T+1?w[T+1]=`${x}
978
978
 
979
- ${w[T+1]}`:w.push("--prompt",x)}return w},f=(S,x)=>{let w=S.indexOf("--"),T=w<0?S:S.slice(0,w),v=P=>T.some(G=>P.some(Y=>G===Y||G.startsWith(`${Y}=`)));if(v(["--session-id","--sandbox-session-id"])||v(["--continue","-c"])||v(["--resume","-r"]))return S;let Q=["--sandbox-session-id",x];return w<0?[...S,...Q]:[...T,...Q,...S.slice(w)]},y=l.getSessionId(),I=y?f(h(process.argv,d),y):h(process.argv,d);await $V(()=>P1e(a,i,l,I)),process.exit(0)}else await M1e(i,[],{afterSpawn:EK})}s_e(e);let s=null;e.worktree!==void 0&&(e.acp||e.experimentalAcp)&&(Ge("--worktree cannot be combined with --acp / --experimental-acp. Pass the worktree path as the cwd of the ACP loadSession / newSession request instead."),process.exit(1));{let i=await m0e(e.worktree,{symlinkDirectories:t.merged.worktree?.symlinkDirectories});i!==null&&(i.ok||(Ge(i.error),process.exit(1)),s=i.context)}if(e.resume!==void 0){Tt.setRuntimeBaseDir(t.merged.advanced?.runtimeOutputDir,process.cwd());let i;if(e.resume==="")i=await nK();else if(!my(e.resume)){let l=await new vi(process.cwd()).findSessionsByTitle(e.resume);l.length===1?i=l[0].sessionId:l.length>1&&(Ge(`Multiple sessions found with title "${e.resume}". Please select one:`),i=await nK(process.cwd(),l))}i!==void 0?e={...e,resume:i}:(e.resume===""||!my(e.resume))&&(e.resume!==""?(Ge(`No saved session found with title "${e.resume}".`),process.exit(1)):process.exit(0))}Ta("after_sandbox_check"),VE(e.bare)||yZ(t.merged.general?.outputLanguage);{let i=await CR(t.merged,e,process.cwd(),e.extensions,{userHooks:t.getUserHooks(),projectHooks:t.getProjectHooks()},hR(t));if(Ta("after_load_cli_config"),s){i.setPendingStartupWorktreeNotice(V9(s));try{let w=await f0e(i,s);w.overrodeResumedWorktree&&Ge(`--worktree overrode the resumed session's previous worktree "${w.overriddenSlug??"(unknown)"}". That worktree directory was left intact on disk.`),i.setPendingStartupWorktreeNotice(V9(s,w))}catch(w){iE.warn(`--worktree sidecar persist failed (non-fatal, notice preserved): ${w instanceof Error?w.message:String(w)}`)}}DA(()=>{try{let w=br.getMetrics();if(!Object.values(w.models).some(v=>v.api.totalRequests>0))return;tN({sessionId:i.getSessionId(),startTime:br.getSessionStartTime(),endTime:new Date,project:i.getProjectRoot(),metrics:w})}catch{}}),DA(()=>i.shutdown());try{let w=i.getModelsConfig(),T=w.getCurrentAuthType(),v=w.getGenerationConfig().baseUrl,Q=i.getProxy();V1e(T,{resolvedBaseUrl:v,proxy:Q})}catch(w){iE.debug(`Preconnect skipped due to error getting authType: ${w}`)}let a=process.stdin.isRaw,l,c;i.isInteractive()&&DA(jSt(a)),i.isInteractive()&&!a&&process.stdin.isTTY&&(process.stdin.setRawMode(!0),q1e(),DA(()=>eK()),l=bxe(),(!r||r===vc)&&(c=In.resolveAutoThemeAsync().catch(w=>{iE.warn("Async theme auto-detection failed:",w)}))),W0e(o);let u=process.stdin.isTTY?"text":typeof i.getInputFormat=="function"?i.getInputFormat():"text",d=await pDe(i,t);Ta("after_initialize_app"),i.getExperimentalZedIntegration()&&(await U_e(i,t,e),await Qa(),process.exit(0)),i.isInteractive()&&import("./chunks/scheduler-6R56JYAP.js").then(w=>w.startBackgroundHousekeeping(i,t)).catch(w=>{iE.warn("failed to start background housekeeping:",w)});let h=i.getQuestion(),f=[...new Set([...await U1e(),...await H1e({workspaceRoot:process.cwd(),useRipgrep:t.merged.tools?.useRipgrep??!0,useBuiltinRipgrep:t.merged.tools?.useBuiltinRipgrep??!0}),...j3(t),...i.getWarnings(),...i.getModelsConfig().getCurrentAuthType()==="matilda-oauth"?["Matilda OAuth free tier was discontinued on 2026-04-15. Run /auth to switch to Coding Plan or another provider."]:[]])],y=new Set(f);for(let w of f)Ge(w);if(Ta("before_render"),i.isInteractive()){i.getJsonSchema?.()&&(Ge("Error: --json-schema is a headless-only flag. Provide a one-shot prompt via -p / --prompt or pipe one in via stdin."),await Qa(),process.exit(1)),ree(!0),await l,await c,await YSt(i,t,f,process.cwd(),d),EK();return}if(EK(),i.getDebugMode()&&(Ge("Debug mode enabled"),Ge(`Logging to: ${Tt.getDebugLogPath(i.getSessionId())}`),hF()&&Ge("Warning: Debug logging is degraded (write failures occurred)")),!i.isInteractive()){let w=hpe(i);w&&Ge(w)}if(u!=="stream-json"){Ta("config_initialize_start"),await i.initialize();let w=i.getResumedSessionData?.();w&&$A(fu(w,i),i,()=>{});for(let v of i.getWarnings())y.has(v)||(y.add(v),Ge(v));Ta("config_initialize_end"),await i.waitForMcpReady();let T=typeof i.getFailedMcpServerNames=="function"?i.getFailedMcpServerNames():[];T.length>0&&Ge(`Warning: MCP server(s) failed to start: ${T.join(", ")}. Continuing with built-in tools and any servers that did connect. Re-run with MATILDA_CODE_DEBUG=1 to see per-server reasons.`),LB(i.getSessionId())}if(H_e(e,u,!1,process.stdin.isTTY)){let w=await JV();w&&(h=`${w}
979
+ ${w[T+1]}`:w.push("--prompt",x)}return w},f=(S,x)=>{let w=S.indexOf("--"),T=w<0?S:S.slice(0,w),v=P=>T.some(G=>P.some(Y=>G===Y||G.startsWith(`${Y}=`)));if(v(["--session-id","--sandbox-session-id"])||v(["--continue","-c"])||v(["--resume","-r"]))return S;let Q=["--sandbox-session-id",x];return w<0?[...S,...Q]:[...T,...Q,...S.slice(w)]},y=l.getSessionId(),I=y?f(h(process.argv,d),y):h(process.argv,d);await $V(()=>P1e(a,i,l,I)),process.exit(0)}else await M1e(i,[],{afterSpawn:EK})}s_e(e);let s=null;e.worktree!==void 0&&(e.acp||e.experimentalAcp)&&(Ge("--worktree cannot be combined with --acp / --experimental-acp. Pass the worktree path as the cwd of the ACP loadSession / newSession request instead."),process.exit(1));{let i=await m0e(e.worktree,{symlinkDirectories:t.merged.worktree?.symlinkDirectories});i!==null&&(i.ok||(Ge(i.error),process.exit(1)),s=i.context)}if(e.resume!==void 0){Tt.setRuntimeBaseDir(t.merged.advanced?.runtimeOutputDir,process.cwd());let i;if(e.resume==="")i=await nK();else if(!my(e.resume)){let l=await new vi(process.cwd()).findSessionsByTitle(e.resume);l.length===1?i=l[0].sessionId:l.length>1&&(Ge(`Multiple sessions found with title "${e.resume}". Please select one:`),i=await nK(process.cwd(),l))}i!==void 0?e={...e,resume:i}:(e.resume===""||!my(e.resume))&&(e.resume!==""?(Ge(`No saved session found with title "${e.resume}".`),process.exit(1)):process.exit(0))}Ta("after_sandbox_check"),VE(e.bare)||yZ(t.merged.general?.outputLanguage);{let i=await CR(t.merged,e,process.cwd(),e.extensions,{userHooks:t.getUserHooks(),projectHooks:t.getProjectHooks()},hR(t));if(Ta("after_load_cli_config"),s){i.setPendingStartupWorktreeNotice(V9(s));try{let w=await f0e(i,s);w.overrodeResumedWorktree&&Ge(`--worktree overrode the resumed session's previous worktree "${w.overriddenSlug??"(unknown)"}". That worktree directory was left intact on disk.`),i.setPendingStartupWorktreeNotice(V9(s,w))}catch(w){iE.warn(`--worktree sidecar persist failed (non-fatal, notice preserved): ${w instanceof Error?w.message:String(w)}`)}}DA(()=>{try{let w=br.getMetrics();if(!Object.values(w.models).some(v=>v.api.totalRequests>0))return;tN({sessionId:i.getSessionId(),startTime:br.getSessionStartTime(),endTime:new Date,project:i.getProjectRoot(),metrics:w})}catch{}}),DA(()=>i.shutdown());try{let w=i.getModelsConfig(),T=w.getCurrentAuthType(),v=w.getGenerationConfig().baseUrl,Q=i.getProxy();V1e(T,{resolvedBaseUrl:v,proxy:Q})}catch(w){iE.debug(`Preconnect skipped due to error getting authType: ${w}`)}let a=process.stdin.isRaw,l,c;i.isInteractive()&&DA(jSt(a)),i.isInteractive()&&!a&&process.stdin.isTTY&&(process.stdin.setRawMode(!0),q1e(),DA(()=>eK()),l=bxe(),(!r||r===vc)&&(c=In.resolveAutoThemeAsync().catch(w=>{iE.warn("Async theme auto-detection failed:",w)}))),W0e(o);let u=process.stdin.isTTY?"text":typeof i.getInputFormat=="function"?i.getInputFormat():"text",d=await pDe(i,t);Ta("after_initialize_app"),i.getExperimentalZedIntegration()&&(await U_e(i,t,e),await Qa(),process.exit(0)),i.isInteractive()&&import("./chunks/scheduler-CLBPJ3HG.js").then(w=>w.startBackgroundHousekeeping(i,t)).catch(w=>{iE.warn("failed to start background housekeeping:",w)});let h=i.getQuestion(),f=[...new Set([...await U1e(),...await H1e({workspaceRoot:process.cwd(),useRipgrep:t.merged.tools?.useRipgrep??!0,useBuiltinRipgrep:t.merged.tools?.useBuiltinRipgrep??!0}),...j3(t),...i.getWarnings(),...i.getModelsConfig().getCurrentAuthType()==="matilda-oauth"?["Matilda OAuth free tier was discontinued on 2026-04-15. Run /auth to switch to Coding Plan or another provider."]:[]])],y=new Set(f);for(let w of f)Ge(w);if(Ta("before_render"),i.isInteractive()){i.getJsonSchema?.()&&(Ge("Error: --json-schema is a headless-only flag. Provide a one-shot prompt via -p / --prompt or pipe one in via stdin."),await Qa(),process.exit(1)),ree(!0),await l,await c,await YSt(i,t,f,process.cwd(),d),EK();return}if(EK(),i.getDebugMode()&&(Ge("Debug mode enabled"),Ge(`Logging to: ${Tt.getDebugLogPath(i.getSessionId())}`),hF()&&Ge("Warning: Debug logging is degraded (write failures occurred)")),!i.isInteractive()){let w=hpe(i);w&&Ge(w)}if(u!=="stream-json"){Ta("config_initialize_start"),await i.initialize();let w=i.getResumedSessionData?.();w&&$A(fu(w,i),i,()=>{});for(let v of i.getWarnings())y.has(v)||(y.add(v),Ge(v));Ta("config_initialize_end"),await i.waitForMcpReady();let T=typeof i.getFailedMcpServerNames=="function"?i.getFailedMcpServerNames():[];T.length>0&&Ge(`Warning: MCP server(s) failed to start: ${T.join(", ")}. Continuing with built-in tools and any servers that did connect. Re-run with MATILDA_CODE_DEBUG=1 to see per-server reasons.`),LB(i.getSessionId())}if(H_e(e,u,!1,process.stdin.isTTY)){let w=await JV();w&&(h=`${w}
980
980
 
981
981
  ${h}`)}let I=await K1e(t.merged.security?.auth?.useExternal,i,t),S=qSt(i.getSessionId());if(u==="stream-json"){let w=(h??"").trim();await B0e(I,w.length>0?w:"",t),await Qa(),process.exit(process.exitCode??0)}h||(Ge("No input provided via stdin. Input can be provided by piping data into gemini or using the --prompt option."),process.exit(1)),CB(i,{"event.name":"user_prompt","event.timestamp":new Date().toISOString(),prompt:h,prompt_id:S,auth_type:i.getContentGeneratorConfig()?.authType,prompt_length:h.length}),iE.debug(`Session ID: ${i.getSessionId()}`);let x=await zR(I,t,h,S);await Qa(),process.exit(x)}}function H_e(e,t,n,o){return o||t==="stream-json"||n?!1:e.prompt===void 0&&e.promptInteractive===void 0}function qSt(e){return`${e}########0`}function JSt(e,t){if(!t.merged.ui?.hideWindowTitle){let n=VH(e);process.stdout.write(`\x1B]2;${n}\x07`),process.on("exit",()=>{process.stdout.write("\x1B]2;\x07")})}}nee();dee();var $St=e=>{if(!e||typeof e!="object")return;let t=e.code;return typeof t=="string"?t:void 0},VSt=e=>{if(!(e instanceof Error))return!1;let t=e.message,n=$St(e);return!!(n==="EIO"&&t.includes("read")||t.includes("read EIO")||n==="EAGAIN"&&t.includes("read")||t.includes("read EAGAIN")||t.includes("ioctl(2) failed, EBADF")||t.includes("Cannot resize a pty that has already exited"))};process.on("uncaughtException",e=>{VSt(e)||(e instanceof Error?Ge(e.stack??e.message):Ge(String(e)),process.exit(1))});W_e().catch(e=>{if(e instanceof e7){let t=e.message;process.env.NO_COLOR||(t=`\x1B[31m${t}\x1B[0m`),console.error(t),process.exit(e.exitCode)}e instanceof Ch&&process.exit(e.exitCode),console.error("An unexpected critical error occurred:"),e instanceof Error?console.error(e.stack):console.error(String(e)),process.exit(1)});
982
982
  /**